calcyman wrote: August 5th, 2023, 6:42 am
Hippo.69 wrote: August 5th, 2023, 3:49 am
I should check if it is agnosticised input problem or the emission failed ...
Hmmm, the order of gliders at this time differs from the original salvo ... did I make simillar manual edit problem as with the WHITE portion ?!?
I am using ...
Code: Select all
0 [?]
(g0%1)[366]
(g0%1)[376]
(g0%1)[373]
(g1%2)[373]
(g0%2)[372]
(g1%2)[368]
(g0%2)[363]
(g0%1)[362]
(g0%1)[351]
(g0%1)[348](g0%1)[353]
(g0%1)[346]
(g0%1)[344]
(g0%1)[339](g0%1)[340](g0%1)[343](g0%1)[350]
(g0%1)[372]
(g0%1)[378]
(g0%1)[393]
(g1%2)[392]
(g0%2)[400](g0%2)[401](g1%2)[404](g1%2)[405]
(g1%2)[399]
(g0%1)[404]
(g1%2)[412]
(g0%2)[423]
(g0%1)[421]
(g0%1)[440]
(g1%2)[426]
(g0%1)[443]
(g1%2)[446]
(g0%2)[453]
(g0%1)[473]
(g0%1)[487]
(g0%1)[496]
(g0%1)[503]
(g0%1)[497]
(g1%2)[495]
(g1%2)[520](g1%2)[521](g1%2)[528]
(g0%2)[517]
(g0%1)[547]
(g1%2)[550]
(g0%2)[557]
(g0%2)[574]
(g0%2)[595]
(g0%2)[597]
(g0%1)[605]
(g1%2)[605]
(g0%1)[609]
(g0%2)[593]
(g0%2)[601](g0%2)[602](g1%2)[605](g1%2)[606]
(g0%2)[603]
(g1%2)[588]
(g0%1)[600]
(g0%1)[643]
(g0%1)[670]
(g0%1)[659]
(g0%1)[664](g0%1)[665](g0%1)[666](g0%1)[667](g0%1)[668](g0%1)[669]
(g0%1)[634]
(g0%1)[631](g0%1)[636]
(g0%1)[643]
(g0%1)[641]
(g1%2)[628]
(g1%2)[633]
(g0%1)[629](g0%1)[630]
(g1%2)[620]
(g1%2)[624]
(g0%1)[637]
(g0%1)[645]
(g0%1)[639]
(g0%1)[629](g0%1)[634](g0%1)[635](g0%1)[640]
(g1%2)[643]
(g0%2)[653]
(g1%2)[654]
(g1%2)[648]
(g0%1)[656]
(g0%1)[656]
(g0%2)[652]
(g1%2)[640]
(g0%2)[644]
(g1%2)[650]
(g0%2)[657]
(g0%2)[654]
(g7%8)[631]
(g0%1)[636]
(g1%2)[632]
(g1%8)[650](g2%8)[650](g3%8)[650](g4%8)[650](g5%8)[650]
(g0%1)[653]
(g1%2)[657]
(g0%1)[642]
(g0%1)[640](g0%1)[645]
(g1%2)[640]
(g0%2)[640]
(g1%2)[654]
(g0%1)[654]
(g0%1)[653]
(g1%2)[648]
(g1%2)[641]
(g0%2)[649]
(g1%2)[664]
(g0%2)[652]
--(g0%1)[648](g0%1)[649] -- 98 -75,211,-74,211,-75,212,-74,212
(g0%1)[668]
(g1%2)[664]
(g0%1)[693]
(g1%2)[696]
(g0%2)[703]
(g0%2)[720]
(g1%2)[719]
(g1%2)[672]
(g0%2)[675]
(g0%1)[663](g0%1)[666](g0%1)[667]
(g0%1)[663]
(g0%1)[653]
(g0%1)[660](g0%1)[663](g0%1)[664]
(g1%2)[657]
(g0%2)[659]
(g1%2)[653]
(g0%1)[659]
(g0%1)[656](g0%1)[661]
(g0%1)[654]
(g0%1)[653]
(g0%1)[673]
(g1%2)[676]
(g0%1)[663](g0%1)[664](g0%1)[665](g0%1)[666](g0%1)[667]
(g0%2)[665]
(g1%2)[671]
(g0%2)[673]
(g1%2)[657]
(g1%2)[663]
(g1%2)[663](g1%2)[664](g1%2)[665](g0%2)[666](g0%2)[667](g0%2)[668]
(g0%1)[659]
(g2%8)[662]
(g1%2)[679]
(g0%1)[686]
(g1%2)[689]
(g1%2)[697]
(g0%2)[694]
(g0%2)[677]
(g0%1)[673]
(g1%2)[690]
(g1%2)[681]
(g0%1)[668]
(g0%1)[668]
(g1%2)[672]
(g0%2)[676]
(g0%2)[687]
(g0%2)[677]
(g0%1)[680](g0%1)[681]
(g0%1)[678]
(g0%1)[666]
(g0%8)[676](g1%8)[676](g4%8)[676](g5%8)[676](g6%8)[676](g7%8)[676]
(g0%1)[678]
(g0%1)[687]
(g0%1)[697]
--(g0%1)[687](g0%1)[688](g0%1)[689](g0%1)[690](g0%1)[691](g0%1)[692] -- 152 -79,249,-78,249,-79,250,-78,250
(g1%2)[732]
(g0%1)[732]
(g0%2)[728]
(g1%2)[723]
(g0%1)[721]
(g1%2)[725]
(g0%2)[733]
(g1%2)[724]
(g1%2)[693](g1%2)[694](g0%2)[697](g0%2)[698]
(g1%2)[707]
(g1%2)[719]
(g0%1)[696]
(g1%2)[696]
(g0%2)[698]
(g0%1)[702]
(g0%2)[706]
(g0%1)[716]
(g1%2)[695]
(g0%2)[698]
(g1%2)[695]
(g0%1)[690]
(g0%1)[700]
(g1%2)[703]
(g0%1)[690](g0%1)[691](g0%1)[692](g0%1)[693](g0%1)[694]
(g1%2)[691]
(g0%1)[680]
(g1%2)[680]
(g0%2)[692]
(g1%2)[703]
(g0%2)[707]
(g1%2)[713]
(g0%2)[723]
(g1%2)[724]
(g0%2)[730]
(g0%2)[734]
(g0%2)[740]
(g1%2)[718]
(g0%2)[728](g0%2)[735](g1%2)[737]
(g0%1)[724]
(g1%2)[723]
(g1%2)[738]
(g0%2)[733]
(g1%2)[724]
(g0%2)[727]
(g0%1)[723]
(g0%1)[725]
(g0%1)[738]
(g0%1)[768]
(g1%2)[771]
(g0%2)[778]
(g0%2)[769]
(g0%1)[805](g0%1)[808](g0%1)[809]
(g1%2)[794]
(g0%1)[792]
(g0%1)[790](g0%1)[791]
(g1%2)[791]
(g0%1)[791]
(g0%1)[789](g0%1)[794]
(g0%1)[782]
(g1%2)[779]
(g1%2)[782]
(g0%1)[784]
(g1%2)[797]
(g1%2)[801](g1%2)[802](g0%2)[805](g0%2)[806]
(g1%2)[807]
(g0%2)[793]
(g1%2)[801]
(g1%2)[782]
(g1%2)[781]
(g0%2)[771]
(g0%1)[781]
(g0%1)[779]
(g0%1)[784](g0%1)[787](g0%1)[788]
(g0%1)[781]
(g0%1)[766]
(g1%2)[766]
(g0%2)[778]
(g0%1)[777]
(g0%1)[767]
(g0%1)[772](g0%1)[773](g0%1)[774](g0%1)[775](g0%1)[776](g0%1)[777]
(g0%1)[770](g0%1)[777]
(g0%1)[753](g0%1)[761]
(g1%2)[761]
(g1%2)[758](g1%2)[759](g0%2)[762](g0%2)[763]
(g1%2)[753]
(g0%2)[763]
(g0%2)[756]
(g1%2)[764]
(g0%2)[767]
(g1%2)[768]
(g1%2)[765](g1%2)[766](g0%2)[769](g0%2)[770]
(g1%2)[758]
(g1%2)[753]
(g0%2)[750]
(g0%2)[752](g0%2)[753](g0%2)[754](g1%2)[755](g1%2)[756](g1%2)[757] -- 247 explodes on temporary open line
(g1%2)[794]
(g0%1)[786]
(g1%8)[783]
(g1%2)[774]
(g0%2)[772](g0%2)[773](g1%2)[776](g1%2)[777]
(g1%2)[770]
(g0%2)[770]
(g0%1)[749]
(g0%1)[747]
(g0%1)[747]
(g1%2)[750]
(g1%2)[742]
(g0%1)[748]
(g0%2)[751]
(g1%2)[753]
(g0%1)[761]
(g1%2)[758]
(g0%1)[774]
(g0%2)[750]
(g0%2)[752]
(g0%1)[745]
(g0%1)[755]
(g0%1)[757]
(g0%1)[765]
(g0%1)[751]
(g0%1)[763]
(g0%1)[756]
(g0%1)[754]
(g0%1)[761]
(g1%2)[749]
(g0%2)[754]
(g1%2)[753]
(g1%2)[745]
(g0%1)[720]
(g0%1)[729]
(g0%1)[739]
(g0%1)[726]
(g0%1)[735]
(g0%1)[732](g0%1)[737]
(g0%1)[725]
(g0%1)[736]
(g0%1)[731]
(g0%1)[727]
(g0%1)[714]
(g1%2)[714]
(g1%2)[706](g1%2)[707]
(g0%1)[711]
(g0%1)[724]
(g0%1)[716](g0%1)[719](g0%1)[720]
(g1%2)[713]
(g1%2)[704]
(g0%2)[698]
(g1%2)[722]
(g0%8)[733]
(g0%1)[729]
(g1%2)[732]
(g0%2)[734](g0%2)[735](g1%2)[738](g1%2)[739]
(g1%2)[740]
(g1%2)[730]
(g1%2)[719]
(g0%2)[718]
(g0%1)[713]
(g0%1)[714]
(g0%2)[739]
(g0%2)[742]
(g0%1)[733]
(g1%2)[719]
(g0%2)[713]
(g0%2)[720]
(g1%2)[709]
(g1%2)[712]
(g0%2)[710](g0%2)[711](g1%2)[714](g1%2)[715]
(g1%2)[707]
(g1%2)[701]
(g1%2)[713]
(g0%2)[702](g1%2)[705](g0%2)[710]
(g0%1)[684]
(g0%1)[676]
(g0%1)[685]
(g0%1)[691]
(g0%1)[689](g0%1)[694]
--(g0%1)[641](g0%1)[642](g0%1)[643](g0%1)[644](g0%1)[645](g0%1)[646] -- 329 -58,224,-57,224,-58,225,-57,225
(g0%1)[651]
(g1%2)[651]
(g0%1)[647]
(g1%2)[643]
(g0%2)[647]
(g1%2)[644]
(g0%2)[657]
(g0%2)[658]
(g0%1)[673]
(g1%2)[670]
(g1%2)[661]
(g0%2)[673]
(g1%2)[673]
(g0%1)[669]
(g0%1)[677]
(g0%1)[682]
(g0%1)[693]
(g0%1)[688]
(g0%1)[684]
(g0%1)[678]
(g0%1)[675](g0%1)[680]
(g1%2)[675]
(g0%2)[675]
(g1%2)[688]
(g0%2)[672]
(g0%1)[682]
(g1%2)[691]
(g0%2)[680]
(g0%2)[678]
(g0%1)[679]
(g0%1)[669](g0%1)[670](g0%1)[673]
(g0%1)[686]
(g1%2)[673]
(g0%1)[682](g0%1)[689]
(g0%2)[667]
(g0%2)[667]
(g1%2)[645]
(g0%1)[638](g0%1)[639](g0%1)[640](g0%1)[641](g0%1)[642](g0%1)[643]
(g0%1)[652]
(g0%1)[655]
(g1%2)[654]
(g0%2)[668]
(g1%2)[664]
(g1%2)[662]
(g1%2)[668]
(g0%2)[664]
(g0%2)[662]
(g0%1)[657]
(g0%1)[658]
(g0%1)[677](g0%1)[685]
(g0%2)[711]
(g0%1)[706]
(g0%1)[714]
(g1%2)[706]
(g0%2)[698]
(g1%2)[697]
(g0%2)[685]
(g0%1)[683]
(g1%2)[684]
(g0%2)[686]
(g1%2)[684]
(g0%2)[679]
(g0%2)[691]
(g1%2)[689]
(g0%1)[676](g0%1)[677]
(g0%1)[684]
(g0%1)[682](g0%1)[683](g0%1)[684](g0%1)[685](g0%1)[686]
(g5%8)[690]
(g1%2)[708]
(g1%2)[698]
(g0%2)[696]
(g0%2)[711]
(g0%2)[713]
(g0%2)[705]
(g0%1)[702]
(g0%1)[691]
(g1%2)[695]
(g1%2)[691](g1%2)[692](g0%2)[695](g0%2)[696]
(g1%2)[696]
(g0%2)[692]
(g1%2)[705]
(g0%2)[700]
(g1%2)[689]
(g0%1)[672](g0%1)[673](g0%1)[674](g0%1)[675](g0%1)[676](g0%1)[677]
(g0%1)[681]
(g0%1)[691]
(g1%2)[694]
(g1%2)[703]
(g1%2)[692]
(g0%2)[681]
(g0%2)[694]
(g0%1)[683]
(g0%1)[691]
(g0%1)[693]
(g1%2)[674]
(g0%2)[685]
(g0%1)[678](g0%1)[682](g0%1)[683](g0%1)[685](g0%1)[688]
(g1%2)[698]
(g1%2)[689]
(g0%1)[689](g0%1)[690](g0%1)[691](g0%1)[692](g0%1)[693](g0%1)[694]
(g0%1)[649]
(g1%2)[646]
(g1%2)[637]
--(g1%2)[640](g1%2)[641](g0%2)[642] -- 433 -18,260,-17,260,-18,261,-17,261,-20,263,-20,264,-20,265
(g1%2)[651]
(g0%1)[629]
(g0%1)[610]
(g0%1)[621]
(g0%1)[619]
(g0%1)[610]
(g0%1)[600]
(g0%1)[587]
(g1%2)[588]
(g0%2)[581](g0%2)[582](g1%2)[585](g1%2)[586]
(g0%2)[578]
(g1%2)[583]
(g0%2)[578]
(g0%2)[572] -- 447 blocks fire DEC line
(g0%1)[568]
(g0%1)[565](g0%1)[570]
(g1%2)[570]
(g0%2)[558](g0%2)[559](g1%2)[562](g1%2)[563]
(g1%2)[558]
(g0%2)[561]
(g1%2)[558]
(g0%1)[602]
(g0%1)[602]
(g0%1)[610]
(g1%2)[602]
(g0%2)[594]
(g0%2)[588]
(g1%8)[575]
(g0%1)[561]
(g0%1)[559](g0%1)[564]
(g1%2)[564]
(g0%2)[559]
(g0%2)[549]
(g0%1)[560]
(g0%2)[564]
(g5%8)[550](g7%8)[550]
(g0%1)[551]
(g0%1)[558]
(g1%2)[546]
(g1%2)[538]
(g0%2)[543]
(g0%1)[545](g0%1)[549]
(g0%2)[550]
(g0%1)[534]
(g1%2)[527]
(g0%1)[510](g0%1)[521]
(g1%2)[523]
(g1%2)[528]
(g1%2)[523]
(g0%2)[512]
(g0%2)[481]
(g1%2)[496]
(g0%1)[490]
(g0%1)[489]
(g1%2)[488]
(g0%2)[481]
(g0%1)[459](g0%1)[460](g0%1)[461](g0%1)[462]
--(g0%2)[444] -- 491 11,86,12,86,5,87,11,87,13,87,5,88,12,88,5,89,1,90,2,90,1,91,2,91
(g0%1)[451]
(g0%1)[459]
(g1%2)[451]
(g1%2)[438]
(g0%1)[414]
(g0%1)[425]
(g0%1)[422]
(g0%1)[414]
(g0%1)[428]
(g0%1)[416]
(g0%1)[423]
(g0%1)[425]
(g0%1)[418]
(g1%2)[430]
(g0%2)[425]
(g1%2)[426]
(g1%2)[434]
(g0%1)[445]
(g0%1)[442](g0%1)[447]
(g0%1)[454]
(g0%1)[443]
(g0%1)[448]
(g0%1)[452]
(g0%8)[446]
(g0%2)[472]
(g0%1)[475]
(g1%2)[466]
(g0%2)[477]
(g1%2)[471]
(g0%1)[480]
(g0%1)[479]
(g0%1)[486]
(g0%1)[487]
(g0%1)[499]
(g0%1)[492]
(g0%1)[498]
(g1%2)[494]
(g1%2)[491](g1%2)[492](g0%2)[495](g0%2)[496]
(g1%2)[468]
(g0%1)[469]
(g1%2)[486]
(g1%2)[498]
(g0%1)[487]
(g0%1)[496]
(g1%2)[499]
(g1%2)[507]
(g1%2)[498]
(g1%2)[505]
(g1%2)[512]
(g0%2)[514]
(g1%2)[533]
(g1%2)[546]
(g0%1)[557]
(g0%1)[547](g0%1)[548](g0%1)[551]
(g0%1)[547]
(g1%2)[544]
(g0%2)[550]
(g0%1)[540]
(g1%2)[536]
(g1%2)[562]
(g0%2)[572]
(g0%1)[567]
(g1%2)[559]
(g0%2)[556]
(g0%1)[551]
(g0%1)[558]
(g0%2)[538]
(g0%2)[536]
(g1%2)[548]
(g1%2)[544]
(g0%1)[562]
(g0%1)[568]
(g0%1)[557]
(g0%1)[560]
(g1%2)[561]
(g0%1)[570]
(g0%2)[554](g0%2)[555](g1%2)[558](g1%2)[559]
(g0%2)[558]
(g0%2)[545]
(g1%2)[545]
(g1%2)[555]
(g1%2)[542]
(g1%2)[525]
(g0%2)[514]
(g1%2)[530]
(g0%2)[528]
(g0%2)[532]
(g1%2)[520]
(g0%1)[511]
(g0%2)[508]
(g0%1)[525]
(g0%1)[537]
(g1%2)[533]
(g0%1)[548]
(g0%1)[545](g0%1)[550]
(g0%2)[523]
(g0%2)[531]
(g0%1)[544]
(g1%2)[534]
(g0%1)[520]
(g1%2)[530]
(g1%2)[523]
(g0%2)[530]
(g0%2)[522]
(g0%2)[490]
(g1%2)[494]
(g0%1)[487]
(g1%2)[491]
(g1%2)[489]
(g1%2)[497]
(g0%1)[499]
(g0%2)[520](g0%2)[521](g1%2)[524](g1%2)[525]
(g1%2)[523]
(g1%2)[553]
(g0%2)[550]
(g0%1)[574]
(g0%1)[576]
(g1%2)[579]
--(g1%2)[595] -- 610 39,264,40,264,39,265,40,265,34,269,35,269,36,269
(g0%1)[635]
(g0%1)[626]
(g1%2)[623]
(g1%2)[615]
(g0%2)[618]
(g0%2)[635]
(g0%1)[639]
(g0%1)[636]
(g1%2)[619]
(g0%1)[629]
(g0%1)[634]
(g0%1)[631](g0%1)[636]
(g1%2)[631]
(g0%2)[645]
(g1%2)[644]
(g0%1)[640]
(g0%1)[649]
(g0%1)[656]
(g0%1)[658]
(g1%2)[639]
(g0%2)[650]
(g0%1)[643](g0%1)[647](g0%1)[648](g0%1)[650](g0%1)[653]
(g1%2)[661]
(g1%2)[661]
(g0%1)[667]
(g0%1)[675]
(g0%1)[677]
(g1%2)[646]
(g0%1)[644]
(g0%1)[642](g0%1)[647]
(g1%2)[642]
(g1%2)[649](g1%2)[650](g0%2)[653](g0%2)[654]
(g0%2)[651]
(g0%1)[647](g0%1)[648]
(g0%2)[651]
(g1%2)[658]
(g1%2)[666]
(g1%2)[670]
(g0%2)[658]
(g0%2)[656]
(g1%2)[655]
(g1%2)[638]
(g0%2)[636](g0%2)[637](g1%2)[640](g1%2)[641]
(g1%2)[633]
(g0%2)[634]
(g1%2)[648]
(g1%2)[654]
(g0%2)[660]
(g0%2)[665]
(g1%2)[664]
(g0%2)[668]
(g1%2)[666]
(g0%1)[675]
(g0%1)[663]
(g0%1)[661](g0%1)[666]
(g1%2)[666]
(g0%2)[657]
(g1%2)[658]
(g0%2)[656](g0%2)[657](g1%2)[660](g1%2)[661]
(g1%2)[668]
(g1%2)[663]
(g1%2)[664]
(g0%1)[641]
(g0%1)[634]
(g1%2)[627]
(g0%2)[624]
(g1%2)[627]
(g0%1)[632]
(g1%2)[646]
(g0%2)[647]
(g0%1)[640]
(g0%1)[619](g0%1)[620](g0%1)[621](g0%1)[622](g0%1)[623](g0%1)[624]
(g1%2)[628]
(g0%2)[618]
(g0%2)[616]
(g0%2)[626]
(g1%2)[633]
(g0%2)[623]
(g0%1)[621]
(g1%2)[617]
(g0%1)[626](g0%1)[627](g0%1)[628](g0%1)[629](g0%1)[630]
(g1%2)[618]
(g0%1)[629]
(g0%1)[604](g0%1)[605](g0%1)[608]
(g0%1)[613]
(g0%1)[613]
(g0%1)[621]
(g0%1)[623]
(g1%2)[604]
(g0%2)[615]
(g1%2)[616]
(g0%1)[622](g0%1)[623](g0%1)[627]
(g0%2)[626]
(g1%2)[621]
(g0%1)[616]
(g1%2)[613]
(g0%2)[607]
(g0%1)[606]
(g0%1)[604](g0%1)[609]
(g1%2)[604]
(g1%2)[607]
(g0%2)[614]
(g0%1)[613](g0%1)[614](g0%1)[615](g0%1)[616](g0%1)[617] -- 713 blocks DBCA fire track
(g0%1)[619]
(g1%2)[623]
(g0%2)[629]
(g0%1)[632](g0%1)[633](g0%1)[634](g0%1)[635]
(g0%1)[630]
(g0%1)[619]
(g0%1)[643]
(g0%1)[642]
(g0%1)[642]
(g0%1)[635]
(g1%2)[637]
(g1%2)[642]
(g0%1)[625]
--(g0%1)[610](g0%1)[611](g0%1)[612](g0%1)[613](g0%1)[614](g0%1)[615] -- 727 53,304,54,304,53,305,54,305
(g0%1)[592]
(g0%2)[583]
(g0%2)[593]
(g0%1)[595]
(g0%1)[589](g0%1)[590]
(g0%1)[587]
(g0%1)[587](g0%1)[589]
(g0%2)[559]
(g0%1)[569]
(g0%1)[568]
(g0%1)[565](g0%1)[570]
(g1%2)[565]
(g1%2)[572](g1%2)[573](g0%2)[576](g0%2)[577]
(g0%2)[577]
(g0%1)[585]
(g1%2)[588]
(g0%2)[590](g0%2)[591](g1%2)[594](g1%2)[595]
(g1%2)[596]
(g1%2)[600]
(g1%2)[586]
(g1%2)[584]
(g0%2)[580]
(g1%2)[576]
(g0%1)[572](g0%1)[577](g0%1)[578](g0%1)[579](g0%1)[580] -- 751 blocks DBCA fire codon bistable switch
(g0%1)[542]
(g1%2)[539]
(g1%2)[531]
(g1%2)[547]
(g0%2)[547]
(g1%2)[536]
(g1%2)[546]
(g0%2)[540]
(g1%2)[535]
(g0%2)[544]
(g0%2)[548]
(g0%1)[533](g0%1)[538](g0%1)[539](g0%1)[544]
(g0%1)[527]
(g1%2)[527]
(g0%2)[529]
(g0%2)[538]
(g0%2)[529]
(g0%2)[534]
(g0%1)[503]
(g0%1)[503]
(g1%2)[500]
(g0%1)[486]
(g0%2)[492]
(g0%2)[495]
(g1%2)[490]
(g0%2)[494]
(g1%2)[488]
(g1%2)[495]
(g1%2)[502]
(g0%2)[510]
(g1%2)[517]
(g1%2)[532]
(g1%2)[522]
(g0%1)[548]
(g1%2)[545]
(g0%2)[535]
(g0%2)[553]
(g0%1)[555]
(g0%1)[562]
(g0%2)[536](g0%2)[537]
(g0%1)[532]
(g1%2)[529]
(g0%1)[538](g0%1)[539](g0%1)[540](g0%1)[541](g0%1)[542]
(g0%2)[534]
(g1%2)[521]
(g1%2)[518]
(g1%2)[514](g1%2)[521]
(g0%1)[515]
(g0%1)[523]
(g0%2)[527]
(g1%2)[543]
(g1%2)[550]
(g1%2)[546]
(g0%2)[557]
(g1%2)[555]
--(g0%2)[532] -- 807 128,292,128,293,123,294,128,294,122,295,124,295,121,296,124,296,130,296,131,296,132,296,122,297,123,297,128,298,128,299,128,300
(g1%2)[511]
(g1%2)[514]
(g1%2)[520]
(g1%2)[511]
(g1%2)[505]
(g0%1)[513]
(g0%1)[519]
(g0%1)[507]
(g0%1)[486]
(g1%2)[483]
(g0%2)[487]
(g0%1)[501]
(g1%2)[502]
(g0%1)[505](g0%1)[512]
(g0%2)[499]
(g0%2)[496]
(g0%1)[460]
(g1%2)[464]
(g0%1)[449]
(g0%1)[447](g0%1)[452]
(g1%2)[454]
(g0%1)[459](g0%1)[460](g0%1)[463](g0%1)[470]
(g1%2)[471]
(g1%2)[476]
(g0%1)[475](g0%1)[479](g0%1)[480]
(g0%1)[461]
(g1%2)[465]
(g0%1)[452](g0%1)[453](g0%1)[454](g0%1)[455](g0%1)[456]
(g1%2)[453]
(g0%2)[473]
(g0%2)[471]
(g0%1)[462](g0%1)[463](g0%1)[464](g0%1)[465](g0%1)[466]
--(g0%1)[456](g0%1)[457](g0%1)[458](g0%1)[459](g0%1)[460](g0%1)[461] -- 840 102,199,103,199,102,200,103,200
(g0%1)[469]
(g0%1)[468]
(g0%1)[468]
(g1%2)[465]
(g1%2)[467]
(g1%2)[461]
(g0%2)[457]
(g1%2)[459](g1%2)[460](g0%2)[463](g0%2)[464]
(g0%1)[449]
(g0%2)[461]
(g0%1)[472]
(g0%1)[466]
(g0%1)[482]
(g1%2)[483]
(g0%2)[476](g0%2)[477](g1%2)[480](g1%2)[481]
(g0%2)[473]
(g1%2)[478]
(g0%2)[456]
(g1%2)[468]
(g0%2)[462]
(g0%2)[476]
(g0%1)[450]
(g0%1)[451]
(g0%1)[448](g0%1)[449](g0%1)[450](g0%1)[451]
(g0%1)[446]
(g0%1)[451](g0%1)[452](g0%1)[453](g0%1)[454]
(g0%1)[440]
(g1%2)[440]
(g0%2)[452]
(g1%2)[441]
(g0%2)[440]
(g0%1)[438]
(g0%1)[391]
(g0%1)[399]
(g0%1)[402]
(g0%1)[399]
(g0%1)[382](g0%1)[383](g0%1)[386]
(g1%2)[386]
(g0%1)[362](g0%1)[373]
(g0%1)[363]
(g0%1)[354](g0%1)[355](g0%1)[358]
(g0%1)[359]
(g1%2)[356]
(g0%2)[363]
(g1%2)[368]
(g0%2)[358]
(g0%1)[356]
(g1%2)[339]
(g1%2)[329]
(g0%2)[323]
(g0%2)[335]
(g0%2)[335]
(g0%1)[311]
(g1%2)[321]
(g1%2)[311]
(g0%2)[310]
(g0%1)[311]
(g0%1)[301](g0%1)[302](g0%1)[305]
(g0%1)[318]
(g0%1)[337]
(g0%1)[321]
(g0%1)[317]
(g1%2)[317]
(g0%1)[321]
(g0%2)[301]
(g0%2)[310]
(g1%2)[308]
(g0%1)[315]
(g1%2)[305]
(g1%2)[302](g1%2)[303](g0%2)[306](g0%2)[307]
(g1%2)[304]
(g0%2)[309]
(g0%2)[307]
(g0%2)[307]
(g0%1)[308](g0%1)[311]
(g1%2)[300]
(g0%1)[305]
(g0%1)[310](g0%1)[313](g0%1)[314]
(g0%1)[297]
(g1%2)[310]
(g0%2)[306](g0%2)[307](g0%2)[308](g1%2)[310](g1%2)[311]
(g1%2)[299]
(g1%2)[287]
(g1%2)[300]
(g1%2)[296]
(g0%1)[316]
(g0%1)[327]
(g0%1)[324]
(g1%2)[327]
(g1%2)[325]
(g1%2)[322]
(g1%2)[314]
(g1%2)[309]
(g0%2)[325]
(g1%2)[315]
(g1%2)[315](g1%2)[316](g1%2)[317](g0%2)[318](g0%2)[319](g0%2)[320]
(g0%1)[311]
(g1%8)[314]
(g1%2)[328]
(g1%2)[325]
(g0%2)[331]
(g1%2)[321]
(g1%2)[321]
(g0%2)[329]
(g0%2)[336]
(g0%1)[345]
(g0%1)[355]
(g0%1)[355]
(g1%2)[351]
(g1%2)[348]
(g0%1)[367]
(g0%1)[357]
(g0%2)[358]
(g0%1)[367]
(g0%1)[357]
(g0%1)[356]
(g0%1)[356]
(g0%1)[367]
(g0%1)[354]
(g0%2)[350]
(g6%8)[347]
(g0%1)[333]
(g0%1)[331](g0%1)[336]
(g0%1)[338]
(g0%1)[346]
(g0%1)[338]
(g0%1)[335]
(g0%1)[334]
(g1%2)[333]
(g0%2)[319](g0%2)[320]
(g0%1)[324]
(g1%2)[327]
(g0%2)[337]
(g0%2)[340]
(g0%1)[337]
(g0%1)[334]
(g0%1)[354]
(g1%2)[351]
(g1%2)[343]
(g0%2)[349]
(g0%2)[342]
--(g0%1)[368](g0%1)[369](g0%1)[370] -- 982 29,35,30,35,29,36,30,36
(g1%2)[378]
(g0%1)[390]
(g0%1)[398]
(g1%2)[381]
(g1%2)[395]
(g1%2)[383]
(g0%1)[375]
(g0%1)[376]
(g0%1)[373](g0%1)[374](g0%1)[375](g0%1)[376]
(g0%1)[378](g0%1)[379]
(g0%1)[405](g0%1)[408](g0%1)[409]
(g0%1)[399]
(g1%2)[395]
(g1%2)[387]
(g0%2)[390]
(g0%2)[407]
(g0%2)[412](g0%2)[413](g1%2)[414](g1%2)[415]
(g0%2)[410]
(g0%1)[387]
(g0%2)[399]
(g0%1)[409]
(g0%1)[409]
(g1%2)[405]
(g0%2)[397]
(g0%2)[410]
(g0%2)[418]
(g1%2)[406]
(g0%1)[400]
(g0%1)[401]
(g0%1)[411]
(g0%1)[385]
(g1%2)[388]
(g0%2)[390](g0%2)[391](g1%2)[394](g1%2)[395]
(g1%2)[396]
(g1%2)[402]
(g0%2)[401]
(g1%2)[389]
(g0%1)[373]
(g0%1)[367]
(g1%2)[353]
(g0%1)[358]
(g0%2)[359]
(g1%2)[347]
(g0%1)[348]
(g1%2)[359]
(g1%2)[351]
(g0%2)[357]
(g0%1)[351](g0%1)[352](g0%1)[353](g0%1)[354](g0%1)[355](g0%1)[356]
(g0%1)[365]
(g1%2)[361]
(g1%2)[358]
(g1%2)[369]
(g0%2)[360]
--(g0%1)[347](g0%1)[348](g0%1)[349](g0%1)[350](g0%1)[351](g0%1)[352] -- 1036 65,53,66,53,65,54,66,54
(g0%1)[345]
(g1%2)[341]
(g1%2)[337]
(g0%1)[342]
(g0%1)[340]
(g0%1)[346]
(g0%1)[368]
(g1%2)[361]
(g0%2)[366]
(g0%1)[374]
(g1%2)[367]
(g0%1)[369]
(g1%2)[372]
(g0%2)[380]
(g1%2)[376]
(g0%2)[370]
(g1%2)[373]
(g0%1)[377]
(g0%1)[358] -- 1055 blocks 2nd p256 activation
(g0%1)[361]
(g0%1)[431]
(g1%2)[443]
(g0%1)[434]
(g0%2)[439]
(g0%1)[437]
(g0%1)[451]
(g1%2)[447]
(g0%2)[462](g1%2)[471]
(g0%1)[467]
(g0%1)[468]
(g1%2)[465]
(g1%2)[462]
(g1%2)[463]
(g0%1)[473](g0%1)[474](g0%1)[475](g0%1)[476](g0%1)[477](g0%1)[478]
(g0%2)[479]
(g0%1)[472]
(g0%1)[469](g0%1)[474]
(g0%1)[481]
(g0%1)[470]
(g0%1)[475]
(g0%1)[479]
(g0%1)[463]
(g0%1)[452]
(g0%1)[477]
(g1%2)[478]
(g0%2)[475]
(g0%1)[461]
(g7%8)[473]
(g0%1)[487]
(g0%1)[486]
(g1%2)[481]
(g0%2)[487]
(g1%2)[491]
(g1%2)[488]
(g0%2)[486]
(g0%2)[472]
(g1%2)[479]
(g1%2)[484]
(g0%2)[483]
(g1%2)[491]
(g1%2)[491]
(g0%2)[476]
--(g1%2)[463](g1%2)[464](g1%2)[465](g0%2)[466](g0%2)[467](g0%2)[468] -- 1099 198,303,199,303,200,303
(g0%1)[433](g0%1)[434](g0%1)[437](g0%1)[444]
(g1%2)[419]
(g0%2)[417]
(g0%2)[409]
(g0%1)[411]
(g0%1)[410]
(g1%2)[413]
(g1%2)[403]
(g0%2)[413]
(g0%1)[425]
(g1%2)[422]
(g0%2)[414]
(g0%2)[408]
(g1%2)[417]
(g1%2)[429]
(g0%1)[414]
(g0%1)[423]
(g0%1)[452]
(g0%1)[441]
(g0%1)[443]
(g0%1)[452]
(g1%2)[451]
(g0%2)[450]
(g0%2)[451]
(g0%1)[451]
(g0%1)[476]
(g0%1)[477]
(g0%1)[477]
(g0%1)[467](g0%1)[468](g0%1)[471]
(g0%1)[476]
(g1%2)[483]
(g0%2)[479](g0%2)[480](g1%2)[483](g1%2)[484]
(g0%1)[485]
(g1%2)[483]
(g0%1)[488](g0%1)[489](g0%1)[490](g0%1)[491](g0%1)[492] -- 1134 blocks DBCA add line
(g1%2)[513]
(g1%2)[517](g1%2)[518](g0%2)[521](g0%2)[522]
(g1%2)[518]
(g0%2)[517]
(g0%2)[532]
(g0%1)[546]
(g1%2)[561]
(g1%2)[562]
(g0%2)[566]
(g0%1)[556]
(g0%1)[553]
(g0%1)[532]
(g0%1)[533]
(g0%1)[534]
(g0%1)[542]
(g0%1)[545]
(g0%1)[553]
(g1%2)[546]
(g0%2)[562]
(g0%2)[540]
(g0%2)[531]
(g1%2)[537]
(g0%2)[544]
(g0%1)[542]
(g0%1)[539](g0%1)[544]
(g1%2)[539]
(g1%2)[552]
(g0%2)[539]
(g0%2)[536]
(g0%1)[546]
(g0%1)[556]
(g0%1)[565]
(g0%1)[555](g0%1)[556](g0%1)[557](g0%1)[558](g0%1)[559](g0%1)[560]
(g0%1)[564]
(g0%1)[556]
(g1%2)[568]
(g0%1)[577]
(g1%2)[576]
(g0%1)[575]
(g0%1)[574]
(g1%2)[570]
(g1%2)[578]
(g1%2)[574]
(g0%1)[572]
(g1%2)[573]
(g0%2)[573]
(g0%2)[570]
(g0%2)[583]
(g1%2)[579]
(g0%1)[597]
(g0%1)[605]
(g0%1)[607]
(g1%2)[590]
(g0%1)[584]
(g1%2)[584]
(g0%1)[588]
(g0%2)[583]
(g1%2)[558]
(g1%2)[555](g1%2)[556](g0%2)[559](g0%2)[560]
(g0%2)[557]
(g0%2)[560]
(g1%2)[551]
(g0%2)[568]
(g1%2)[576]
(g1%2)[585]
(g0%1)[603]
(g0%1)[599]
(g0%2)[602]
(g1%2)[590]
(g0%2)[585]
(g1%2)[590]
(g1%2)[601]
(g0%2)[593](g0%2)[594](g1%2)[597](g1%2)[598]
(g1%2)[599](g1%2)[600](g0%2)[603](g0%2)[604]
(g1%2)[601]
(g0%2)[593]
(g0%1)[588]
(g0%2)[620]
(g1%2)[619]
(g1%2)[622]
(g1%2)[619]
(g0%2)[623]
(g0%2)[622]
(g0%1)[610]
(g0%1)[619]
(g1%2)[622]
(g1%2)[625]
(g1%2)[622]
(g1%2)[614]
(g0%2)[615]
(g1%2)[625]
(g0%2)[613]
(g0%2)[615]
(g0%1)[638]
(g1%2)[629](g1%2)[630](g1%2)[631](g0%2)[632](g0%2)[633](g0%2)[634]
(g0%1)[632]
(g1%2)[629]
(g1%2)[622](g1%2)[623](g0%2)[626](g0%2)[627]
(g1%2)[625]
(g1%2)[634]
(g0%2)[627]
(g0%1)[630](g0%1)[631]
(g0%2)[640]
(g0%2)[637]
--(g1%2)[666](g1%2)[670] -- 1239 23,325,23,326,23,327,26,328,27,328,26,329,27,329
(g0%1)[698]
(g1%2)[697]
(g0%2)[709]
(g0%2)[695]
(g0%1)[685](g0%1)[686](g0%1)[689]
(g0%2)[693]
(g1%2)[698]
(g0%1)[691]
(g1%2)[706]
(g0%1)[713]
(g0%1)[718](g0%1)[721](g0%1)[722]
(g0%1)[722]
(g1%2)[725]
(g1%2)[724]
(g1%2)[726]
(g0%1)[713](g0%1)[720](g0%1)[723](g0%1)[724]
(g0%1)[715]
(g0%1)[712](g0%1)[717]
(g1%2)[717]
(g0%2)[705](g0%2)[706](g1%2)[709](g1%2)[710]
(g1%2)[705]
(g0%2)[708]
(g1%2)[705]
(g0%8)[722]
(g0%1)[773]
(g1%2)[769]
(g0%2)[763]
--(g0%1)[773] -- 1267 -70,339,-69,339,-70,340,-69,340
(g0%1)[762]
(g0%1)[760](g0%1)[765]
(g1%2)[760]
(g1%2)[763]
(g0%2)[777]
(g0%1)[771]
(g0%1)[772]
(g1%2)[773]
(g1%2)[758]
(g1%2)[769]
(g1%2)[772]
(g0%1)[793](g0%1)[794](g0%1)[795](g0%1)[796](g0%1)[797](g0%1)[798]
(g0%1)[838]
(g0%1)[843](g0%1)[846](g0%1)[847]
(g0%1)[847]
(g1%2)[840]
(g1%2)[862](g1%2)[863](g0%2)[865](g0%2)[866](g0%2)[867]
(g0%2)[870]
(g1%2)[872]
(g0%1)[851]
(g0%1)[856](g0%1)[857](g0%1)[858](g0%1)[859]
(g0%1)[863]
(g0%1)[894]
(g0%1)[890]
(g0%1)[897]
(g0%1)[891]
(g1%2)[889]
(g1%2)[914](g1%2)[915](g1%2)[922]
(g0%2)[911]
(g0%1)[867](g0%1)[875]
(g0%1)[865]
(g0%1)[875]
(g0%1)[872]
(g1%2)[875]
(g0%2)[877](g0%2)[878](g1%2)[881](g1%2)[882]
(g0%1)[862](g0%1)[863](g0%1)[864](g0%1)[865](g0%1)[866]
(g1%2)[869]
(g0%2)[871]
(g0%1)[872]
(g0%1)[877](g0%1)[880](g0%1)[881]
(g1%2)[874]
(g1%2)[861]
(g0%1)[840]
(g0%1)[839]
(g0%1)[848]
(g0%1)[845](g0%1)[850]
(g1%2)[850]
(g0%2)[838](g0%2)[839](g1%2)[842](g1%2)[843]
(g1%2)[838]
(g0%2)[841]
(g1%2)[838]
(g5%8)[855]
(g0%1)[872]
(g0%1)[864]
(g0%1)[864]
(g0%1)[862]
(g1%2)[882]
(g1%2)[862]
(g0%1)[855]
(g1%2)[856]
(g0%2)[858]
(g0%2)[844]
(g1%2)[850]
(g1%2)[853]
(g1%4)[853]
(g0%1)[847](g0%1)[848](g0%1)[849](g0%1)[850] -- 1333 blocks DBCA reset line
(g0%1)[836]
(g1%2)[836]
(g0%1)[832]
(g1%2)[828]
(g0%2)[831]
(g0%2)[830]
(g0%1)[872]
(g0%1)[878](g0%1)[881](g0%1)[882]
(g0%1)[882]
(g1%2)[885]
(g0%2)[879]
(g1%2)[867]
(g0%2)[857]
(g1%2)[870]
(g0%2)[873]
(g0%1)[862]
(g0%1)[853]
(g0%1)[863]
(g0%1)[851]
(g0%1)[839]
(g0%1)[856]
(g0%1)[842]
(g0%1)[865]
(g1%2)[868]
(g0%1)[880]
(g0%1)[870]
(g1%2)[870]
(g0%2)[883]
(g0%1)[941]
(g0%1)[946](g0%1)[949](g0%1)[950]
(g0%1)[950]
(g0%1)[956]
(g0%1)[962]
(g0%1)[960](g0%1)[965]
(g1%2)[934]
(g0%2)[942](g0%2)[943](g1%2)[946](g1%2)[947]
(g1%2)[955]
(g0%1)[961]
(g0%1)[962]
(g1%2)[974]
(g0%1)[981](g0%1)[989]
(g1%2)[990]
(g0%1)[995]
(g0%1)[1000](g0%1)[1003](g0%1)[1004]
(g1%2)[997]
(g0%1)[976](g0%1)[981](g0%1)[982](g0%1)[987]
(g1%2)[987]
(g0%1)[990](g0%1)[991](g0%1)[992](g0%1)[993](g0%1)[994](g0%1)[995]
(g0%1)[967]
(g0%1)[966]
(g0%1)[958]
(g1%2)[966]
(g0%1)[956]
(g1%2)[959]
(g0%2)[955]
(g0%1)[960]
(g0%1)[957](g0%1)[962]
(g1%2)[978]
(g0%1)[984](g0%1)[989]
(g0%1)[988]
(g0%1)[998]
(g0%1)[995](g0%1)[1000]
(g0%1)[1007]
(g0%1)[996]
(g0%1)[1011]
(g0%1)[1014]
(g0%1)[1014]
(g0%1)[1004](g0%1)[1005](g0%1)[1008]
(g1%2)[1011]
(g1%2)[1015]
(g1%2)[1020]
(g0%2)[1006]
(g0%2)[1007]
(g0%2)[1015]
(g0%1)[1007]
(g0%1)[995]
(g1%2)[998]
(g1%2)[1007]
(g0%2)[1002]
(g0%1)[985](g0%1)[986](g0%1)[987](g0%1)[988](g0%1)[989](g0%1)[990]
(g0%1)[983]
(g0%1)[969]
(g0%1)[967]
(g1%2)[954]
(g1%2)[959]
(g0%1)[955](g0%1)[956]
(g1%2)[946]
(g1%2)[950]
(g0%1)[963]
(g0%1)[971]
(g0%1)[965]
(g0%1)[955](g0%1)[960](g0%1)[961](g0%1)[966]
(g1%2)[969]
(g0%2)[980]
(g1%2)[974]
(g1%2)[966]
(g6%8)[957]
(g0%1)[975]
(g0%1)[976]
(g0%1)[967](g0%1)[968](g0%1)[971]
(g0%1)[984]
(g1%2)[971]
(g0%2)[977]
(g1%8)[965]
(g0%2)[967]
(g1%2)[979]
(g0%1)[978]
(g0%1)[979]
(g0%1)[972]
(g0%1)[970]
(g0%2)[1009]
(g0%1)[1009]
(g6%8)[997]
(g0%1)[990]
(g0%1)[972]
(g0%1)[976]
(g0%1)[981](g0%1)[984](g0%1)[985]
(g0%1)[985]
(g1%2)[988]
(g0%2)[982]
(g1%2)[970]
(g0%2)[960]
(g0%1)[965]
(g0%1)[915]
(g1%2)[895]
(g1%2)[844](g0%2)[853]
(g1%2)[865]
(g1%2)[868]
(g0%2)[870]
(g0%2)[858]
(g1%2)[862]
(g1%2)[873]
(g0%2)[876]
(g1%2)[859]
(g0%1)[839](g0%1)[846](g0%1)[849](g0%1)[850] -- 1468 blocks DBCA fire codon bistable switch
(g0%1)[823]
(g0%1)[812]
(g0%1)[812]
(g0%1)[820]
(g1%2)[805]
(g1%2)[815](g1%2)[816](g0%2)[819](g0%2)[820]
(g1%2)[828]
(g0%2)[826]
(g0%2)[826]
(g0%2)[821]
(g1%2)[825]
(g0%1)[827](g0%1)[834](g0%1)[837](g0%1)[838]
(g0%1)[834]
(g1%2)[838]
(g0%2)[831]
(g1%2)[833]
(g0%1)[823](g0%1)[824]
(g0%1)[825]
(g0%1)[834]
(g1%2)[837]
(g1%2)[845]
(g0%2)[835]
(g1%2)[821]
(g1%2)[830]
(g0%2)[813]
(g1%2)[817]
(g0%2)[818]
(g0%1)[830]
(g0%1)[823]
(g1%2)[860]
(g1%2)[849]
(g0%2)[853]
(g0%2)[853]
(g0%1)[850]
(g0%1)[841]
(g0%1)[847](g0%1)[850](g0%1)[851]
(g0%1)[851]
(g1%2)[847]
(g0%1)[848](g0%1)[850](g0%1)[851]
(g1%2)[854]
(g0%2)[841]
(g1%2)[841]
(g0%1)[849]
(g0%1)[849]
(g0%1)[859]
(g0%1)[857]
(g0%1)[857]
(g0%1)[849]
(g0%1)[855]
(g1%2)[852]
(g0%1)[873] -- 1519 blocks DBCA fire codon bistable switch
(g0%2)[872]
(g1%2)[877]
(g0%2)[871]
(g1%2)[876]
(g1%2)[871]
(g1%2)[880]
(g1%2)[877]
(g0%1)[886]
(g0%1)[887]
(g1%2)[864]
(g1%2)[865]
(g1%2)[868]
(g0%2)[870]
(g0%2)[858]
(g1%2)[862]
(g1%2)[873]
(g0%2)[876]
(g1%2)[859]
(g1%2)[849]
(g1%2)[855]
(g0%1)[836](g0%1)[837](g0%1)[838]
(g0%1)[856]
(g0%1)[870](g0%1)[871](g0%1)[872](g0%1)[873]
(g1%2)[866]
(g1%2)[843]
(g1%2)[861]
(g0%2)[861]
(g0%1)[878]
(g0%1)[889]
(g0%1)[886]
(g0%1)[896]
(g0%1)[886](g0%1)[887](g0%1)[888](g0%1)[889](g0%1)[890](g0%1)[891]
(g0%1)[872]
(g0%1)[872]
(g0%1)[861]
(g0%1)[873]
(g1%2)[873]
--(g0%1)[888](g0%1)[889](g0%1)[890](g0%1)[891](g0%1)[892](g0%1)[893] -- 1557 -63,466,-62,466,-63,467,-62,467
(g1%2)[867]
(g0%2)[872]
(g0%1)[867](g0%1)[868]
(g0%1)[856]
(g1%2)[853]
(g0%2)[852](g0%2)[853](g1%2)[856](g1%2)[857]
(g0%2)[853]
(g1%2)[859]
(g0%1)[859]
(g1%2)[850]
(g1%2)[871]
(g0%1)[871]
(g1%2)[871]
(g0%1)[871]
(g0%1)[888]
(g1%2)[891]
(g1%2)[899]
(g1%2)[903]
(g0%2)[907]
(g1%2)[918]
(g1%2)[905]
(g0%1)[922]
(g0%1)[928]
--(g0%1)[914](g0%1)[917](g0%1)[918](g0%1)[921] -- 1581 -49,507,-48,507,-49,508,-47,508,-48,509
(g0%1)[943]
(g1%2)[942]
(g1%2)[957]
(g0%2)[957]
(g0%1)[954](g0%1)[955](g0%1)[956](g0%1)[957]
(g1%2)[960]
--(g0%2)[939](g0%2)[940] -- 1588 -49,530,-49,531,-49,532
(g0%2)[956]
(g0%1)[963]
(g0%1)[955]
(g1%2)[946]
(g0%2)[945]
(g1%2)[944]
(g1%2)[938]
(g0%2)[948]
(g0%1)[935](g0%1)[936] -- 1597 blocks P256 activation path
(g0%2)[922]
(g0%1)[930]
(g1%2)[945]
(g0%2)[950]
(g0%1)[958]
(g1%2)[951]
(g1%2)[959]
(g0%2)[964]
(g1%2)[964]
(g1%2)[954]
(g0%2)[962]
(g0%1)[952]
(g0%1)[943](g0%1)[944](g0%1)[947]
(g0%1)[960]
(g1%2)[947]
(g1%2)[943]
(g0%1)[957]
(g1%2)[973]
(g0%2)[976]
(g0%1)[964](g0%1)[967](g0%1)[968]
(g1%2)[955]
(g0%2)[960]
(g0%2)[960]
(g0%1)[958]
(g0%1)[966]
--(g0%1)[985](g0%1)[986] -- 1623 -40,579,-41,580,-39,580,-40,581
(g1%2)[975]
(g1%2)[987]
(g1%2)[982]
(g1%2)[970]
(g0%2)[972](g0%2)[973]
(g1%2)[962]
(g0%2)[958](g0%2)[959]
(g1%2)[937]
(g0%2)[936]
(g0%2)[933](g0%2)[934](g1%2)[937](g1%2)[938]
(g0%2)[926]
(g1%2)[932]
(g1%2)[924]
(g0%1)[922]
(g1%2)[922]
(g0%2)[921]
(g1%2)[936]
(g1%2)[929]
(g1%2)[917]
(g0%2)[920]
(g1%2)[917]
(g0%1)[920]
(g0%1)[918]
(g0%1)[914]
(g0%1)[912](g0%1)[917]
(g0%1)[924]
(g1%2)[927]
(g1%2)[925]
(g0%1)[925]
(g0%1)[905]
(g0%1)[906]
(g0%1)[903](g0%1)[904](g0%1)[905](g0%1)[906]
(g0%1)[908](g0%1)[909]
(g0%1)[916]
(g1%2)[920]
(g0%2)[925]
(g0%1)[916]
(g0%1)[914]
(g0%1)[921]
(g1%2)[914]
(g0%2)[896](g0%2)[897](g1%2)[900](g1%2)[901]
(g1%2)[912]
(g0%1)[906](g0%1)[907](g0%1)[910]
(g0%2)[928]
(g0%1)[936]
(g0%1)[935]
(g0%1)[926]
(g0%1)[922]
(g0%1)[910]
(g0%1)[913]
(g0%1)[880]
(g0%1)[872]
(g0%1)[872]
(g1%2)[887]
(g0%2)[880]
(g0%1)[877]
(g0%1)[837]
(g0%1)[848]
(g0%1)[855]
(g1%2)[852]
(g1%2)[860]
(g1%2)[843]
(g0%2)[844]
(g0%1)[838]
(g1%2)[835]
(g1%2)[837]
(g0%2)[829]
(g1%2)[824]
(g1%2)[822]
(g0%1)[839]
(g0%1)[846]
(g0%1)[846]
(g0%1)[857]
(g0%1)[855]
(g0%1)[863]
(g1%2)[863]
(g0%2)[864]
(g0%2)[859]
(g0%2)[870]
(g0%2)[879]
(g1%2)[878]
(g1%2)[873]
(g0%1)[851](g0%1)[852](g0%1)[855]
(g0%1)[845]
(g0%1)[845]
(g0%1)[835]
(g0%1)[823]
(g1%2)[820]
(g1%2)[813](g1%2)[814](g0%2)[817](g0%2)[818]
(g0%2)[816]
(g1%2)[819]
(g0%1)[829]
(g0%1)[835]
(g1%2)[827]
(g0%2)[827]
(g0%2)[823]
(g0%1)[837]
(g0%1)[837]
(g0%1)[835](g0%1)[840]
(g1%2)[835]
(g0%2)[849]
(g0%2)[838]
(g0%2)[838]
(g1%2)[839]
(g1%2)[828]
(g1%2)[847]
(g1%2)[827]
(g0%1)[832]
(g0%1)[842]
(g0%1)[839]
(g1%2)[835]
(g0%1)[844](g0%1)[845](g0%1)[846](g0%1)[847](g0%1)[848]
(g0%1)[850]
(g1%2)[836]
(g1%2)[835]
(g0%2)[839]
(g1%2)[796]
--(g0%2)[800](g0%2)[801](g0%2)[802](g1%2)[803](g1%2)[804] -- 1741 -108,332,-108,333,-108,334
(g0%1)[808]
(g1%2)[805]
(g0%1)[820]
(g0%1)[817](g0%1)[822]
(g0%2)[822]
(g0%2)[801]
(g1%2)[781]
(g0%2)[773]
(g0%2)[749]
(g0%2)[750]
(g0%1)[751]
(g0%1)[751]
(g1%2)[751]
(g0%1)[754](g0%1)[761]
(g1%2)[750]
(g1%2)[744]
(g0%1)[756]
(g1%2)[724]
--(g0%2)[736] -- 1760 -19,344,-19,345,-19,346,-23,348,-22,348,-21,348,-17,348,-16,348,-15,348,-19,350,-19,351,-23,352,-19,352,-24,353,-22,353,-23,354,-22,354
(g1%2)[755]
(g0%1)[754](g0%1)[755](g0%1)[756] -- 1762 blocks 2nd p256 activation path
(g1%2)[764]
(g0%1)[763]
(g1%2)[752]
(g0%2)[761]
(g1%2)[767](g1%2)[768](g1%2)[769](g0%2)[770](g0%2)[771](g0%2)[772]
(g0%2)[819]
(g0%2)[825]
(g0%2)[828]
(g0%1)[829]
(g1%2)[838]
(g1%2)[843]
(g1%2)[834]
(g1%2)[837]
(g0%1)[829]
(g1%2)[833]
(g1%2)[841]
(g1%2)[841]
(g0%1)[829]
(g0%2)[833]
(g0%2)[856]
(g0%2)[840]
(g0%2)[840]
(g0%1)[829]
(g1%2)[826]
(g0%1)[842]
(g0%2)[822]
(g1%2)[816]
(g0%2)[841]
(g0%2)[821]
(g0%1)[822](g0%1)[823](g0%1)[824](g0%1)[825](g0%1)[826](g0%1)[827]
(g0%1)[819]
(g1%2)[819]
(g1%2)[821](g1%2)[822](g0%2)[825](g0%2)[826]
(g1%2)[818]
(g1%2)[819]
(g0%2)[811]
(g0%2)[793]
(g0%2)[789]
(g0%1)[787]
(g0%1)[780]
(g1%2)[787]
(g1%2)[800](g1%2)[801](g0%2)[804](g0%2)[805]
(g1%2)[789]
(g0%2)[773]
(g1%2)[772]
(g0%2)[777]
(g1%2)[770]
(g1%2)[759]
(g0%2)[762]
(g1%2)[751]
(g1%2)[767]
(g0%1)[785]
(g0%1)[786]
(g0%1)[779]
(g0%1)[799](g0%1)[800](g0%1)[801](g0%1)[802](g0%1)[803](g0%1)[804]
(g0%1)[796]
(g0%1)[779]
(g1%2)[776]
(g1%2)[768]
(g1%2)[777]
(g1%2)[772]
(g0%1)[776](g0%1)[777](g0%1)[778](g0%1)[779](g0%1)[780](g0%1)[781]
(g0%1)[774](g0%1)[775](g0%1)[776](g0%1)[777](g0%1)[778]
(g1%2)[781]
(g1%2)[778](g1%2)[779](g0%2)[782](g0%2)[783]
(g0%2)[778]
(g1%2)[780]
(g1%2)[785]
(g0%2)[785]
(g0%1)[782]
(g0%1)[779](g0%1)[784]
(g1%2)[779]
(g1%2)[786](g1%2)[787](g0%2)[790](g0%2)[791]
(g1%2)[791]
(g0%2)[788]
(g1%2)[791]
(g0%2)[749](g0%2)[750](g0%2)[751](g1%2)[752](g1%2)[753](g1%2)[754]
(g0%1)[754] -- 1840 blocks no add line
(g0%1)[736]
(g0%1)[727]
(g1%2)[724]
(g1%2)[731]
(g0%2)[735](g0%2)[736](g0%2)[737](g1%2)[738](g1%2)[739](g1%2)[740]
--(g0%1)[730](g0%1)[733](g0%1)[734](g0%1)[737] -- 1846 54,426,55,426,54,427,56,427,55,428
(g0%2)[702]
(g1%2)[713]
(g0%1)[700]
(g1%2)[697]
(g0%2)[689]
(g1%2)[688]
(g1%2)[699]
(g0%2)[696]
(g0%1)[706](g0%1)[707](g0%1)[708](g0%1)[709](g0%2)[710]
(g0%2)[711]
(g0%1)[718]
(g0%1)[721]
(g0%1)[714]
(g0%1)[717]
(g0%2)[700]
(g0%1)[710]
(g0%1)[708]
(g0%1)[710]
(g0%1)[716](g0%1)[723](g0%1)[726](g0%1)[727]
(g0%1)[716]
(g0%1)[700]
(g0%1)[689]
(g0%1)[714]
(g0%1)[712](g0%1)[717]
(g1%2)[717]
(g1%2)[711](g1%2)[712](g0%2)[715](g0%2)[716]
(g1%2)[721]
(g1%2)[718](g1%2)[719](g0%2)[722](g0%2)[723]
(g0%2)[720]
(g0%2)[703]
(g0%1)[701]
(g1%2)[697]
(g0%2)[700]
(g1%2)[714]
(g0%1)[712]
(g0%1)[722]
(g0%1)[719]
(g0%1)[726]
(g1%2)[711]
(g0%2)[720]
(g1%2)[726]
(g0%2)[723]
(g0%1)[730]
(g0%1)[737]
(g1%2)[722]
(g1%2)[737](g1%2)[738]
(g0%1)[742]
(g1%2)[745]
(g0%2)[752]
(g0%2)[743]
(g0%1)[687]
(g0%1)[686]
(g0%1)[686]
(g0%1)[679]
(g0%1)[682]
(g0%1)[697]
(g1%2)[678]
(g1%2)[675]
(g1%2)[675]
(g0%1)[669](g0%1)[670](g0%1)[671](g0%1)[672](g0%1)[673](g0%1)[674]
(g0%1)[692]
(g0%1)[686]
(g1%2)[690]
(g0%2)[692](g0%2)[693](g1%2)[696](g1%2)[697]
(g0%1)[677](g0%1)[678](g0%1)[679](g0%1)[680](g0%1)[681]
(g1%2)[683]
(g1%2)[687]
(g1%2)[691]
(g0%2)[688]
(g1%2)[682]
(g0%1)[685](g0%1)[686]
(g0%1)[688]
(g0%1)[699]
(g0%1)[665]
(g0%1)[673]
(g1%2)[665]
(g1%2)[641]
(g1%2)[642]
(g0%2)[641](g0%2)[642](g0%2)[643](g1%2)[644](g1%2)[645](g1%2)[646]
(g0%2)[636]
(g1%2)[649]
(g1%2)[637]
(g1%2)[663]
(g0%1)[670]
(g0%1)[667](g0%1)[672]
(g1%2)[667]
(g0%2)[675]
(g0%1)[683]
(g0%1)[684]
(g0%1)[687]
(g0%1)[695]
(g0%1)[689]
(g0%1)[679](g0%1)[684](g0%1)[685](g0%1)[690]
(g0%1)[689]
(g0%2)[682]
(g0%2)[694]
(g1%2)[684]
(g0%2)[684]
(g0%2)[695]
(g0%2)[689]
(g1%2)[685]
(g1%2)[700]
(g1%2)[694]
(g0%1)[690]
(g0%1)[691]
(g1%2)[692]
(g0%1)[684]
(g1%2)[660]
(g1%2)[660]
(g1%2)[657]
(g0%2)[663]
(g0%2)[670]
(g0%2)[654]
(g0%2)[658]
(g1%2)[655]
(g0%1)[672]
(g0%1)[663]
(g0%1)[671]
(g1%2)[659]
(g0%1)[668]
(g1%2)[661]
(g0%1)[664]
(g0%1)[653]
(g0%1)[671]
(g1%2)[662]
(g1%2)[666](g1%2)[667](g0%2)[670](g0%2)[671]
(g0%2)[658]
(g1%2)[660]
(g0%2)[662]
(g0%1)[664]
(g0%2)[670]
--(g0%1)[680](g0%1)[681](g0%1)[682](g0%1)[683](g0%1)[684](g0%1)[685] -- 1978 138,459,139,459,138,460,139,460
(g1%2)[710]
(g0%1)[709]
(g0%1)[717]
(g1%2)[709]
(g0%1)[721]
(g1%2)[720]
(g0%2)[728](g0%2)[729](g1%2)[732](g1%2)[733]
(g1%2)[727]
(g0%2)[719]
(g0%2)[732]
(g0%2)[729]
(g0%2)[734]
(g0%1)[719]
(g0%1)[719]
(g0%1)[711]
(g1%2)[719]
(g0%2)[734]
(g1%2)[735]
(g0%1)[716]
(g1%2)[713]
(g0%2)[686]
(g0%2)[682]
(g1%2)[690]
(g0%1)[691]
(g1%2)[694]
(g0%2)[690]
(g0%1)[686]
(g0%2)[703]
(g0%2)[705]
(g1%2)[711]
(g1%2)[707]
(g0%1)[697]
(g0%1)[673]
(g0%1)[664]
(g1%2)[661]
(g1%2)[653]
(g0%2)[664]
(g0%2)[660]
(g1%2)[667]
(g0%1)[685]
(g0%1)[693]
(g0%1)[687]
(g1%2)[690]
(g0%2)[670]
(g0%2)[679]
(g0%2)[676]
(g1%2)[671]
(g0%1)[667]
(g1%2)[671]
(g0%2)[650](g0%2)[651](g0%2)[652](g1%2)[653](g1%2)[654]
(g0%1)[658](g0%1)[659](g0%1)[660](g0%1)[661](g0%1)[662]
(g1%2)[670]
(g0%1)[659]
(g0%1)[658]
(g1%2)[661]
(g0%2)[663](g0%2)[664](g1%2)[667](g1%2)[668]
(g0%2)[671]
(g1%2)[685]
--(g0%1)[680](g0%1)[687](g0%1)[690](g0%1)[691] -- 2037 179,502,178,503,180,503,178,504,180,504,179,505
(g0%2)[656]
(g1%2)[653]
(g0%2)[644]
(g0%1)[633](g0%1)[640](g0%1)[643](g0%1)[644]
(g0%1)[655]
(g0%1)[652](g0%1)[657]
(g1%2)[657]
(g0%2)[645](g0%2)[646](g1%2)[649](g1%2)[650]
(g1%2)[645]
(g0%2)[648]
(g1%2)[645]
(g0%2)[623]
(g1%2)[628]
(g1%2)[627]
(g0%2)[617]
(g0%2)[614]
(g1%2)[609]
(g0%1)[576]
(g0%1)[580]
(g0%2)[560](g0%2)[561](g0%2)[562](g1%2)[563](g1%2)[564](g1%2)[565]
(g1%2)[562]
(g0%1)[561](g0%1)[562]
(g0%1)[560]
--(g0%1)[562] -- 2061 186,389,187,389,186,390,187,390
(g0%1)[549]
(g1%2)[552]
(g1%2)[552]
(g1%2)[562]
(g1%2)[563]
(g0%2)[562]
(g0%1)[536]
(g0%1)[545]
(g1%2)[541]
(g1%2)[538]
(g0%2)[538]
(g0%2)[533]
(g1%2)[530]
(g1%2)[504]
(g0%2)[515]
(g0%2)[504]
(g0%2)[497]
(g1%2)[496]
(g1%2)[497]
(g0%2)[495](g0%2)[496](g1%2)[499](g1%2)[500]
(g1%2)[493]
(g0%1)[462]
(g1%2)[454]
(g1%2)[446]
(g1%2)[459]
(g0%1)[451]
(g0%1)[458]
(g0%1)[452]
(g1%2)[423]
(g0%1)[411]
(g0%1)[388]
(g0%1)[397]
(g0%1)[394](g0%1)[399]
(g0%1)[392]
(g1%2)[397]
(g1%2)[392]
(g0%1)[390]
(g0%1)[381](g0%1)[382](g0%1)[385]
(g0%1)[390]
(g0%1)[393]
(g0%1)[385]
(g0%1)[384]
(g0%1)[393]
(g0%1)[385]
(g1%2)[397]
(g0%2)[392]
(g1%2)[393]
(g1%2)[401]
(g0%1)[409](g0%1)[414]
(g0%1)[421]
(g0%1)[410]
(g0%1)[415]
(g0%1)[419]
(g4%8)[413]
(g1%2)[431]
(g1%2)[445]
(g0%1)[447]
(g0%1)[454](g0%1)[461](g0%1)[464](g0%1)[465]
(g1%2)[457](g1%2)[458](g1%2)[459](g0%2)[460](g0%2)[461](g0%2)[462]
(g0%1)[456]
(g0%1)[421]
(g0%1)[421]
(g1%2)[425]
(g1%2)[421](g1%2)[422](g0%2)[425](g0%2)[426]
(g0%1)[409]
(g0%2)[420]
(g0%2)[424]
(g0%1)[424]
(g0%1)[418]
(g1%2)[421]
(g1%2)[413]
(g1%2)[416]
(g1%2)[415]
(g0%2)[414]
(g0%2)[418]
(g1%2)[415]
(g1%2)[410]
(g0%2)[397]
(g0%1)[411]
(g1%2)[415]
(g0%2)[423]
(g1%2)[419]
(g1%2)[416]
(g1%2)[413]
(g0%1)[421]
(g0%1)[416]
(g0%1)[415]
(g1%2)[414]
(g1%2)[405]
(g0%1)[404]
(g1%2)[405]
(g0%2)[391]
(g0%2)[392]
(g1%2)[401]
(g0%1)[380]
(g1%2)[377]
(g0%2)[371]
(g0%1)[365](g0%1)[366](g0%1)[367](g0%1)[368]
(g0%1)[381] -- 2160 blocks DBCA no DEC line
(g0%1)[380]
(g0%1)[371]
(g1%2)[371]
(g0%2)[370]
(g1%2)[386]
(g1%2)[378]
(g0%2)[374]
(g0%2)[361]
(g0%2)[362]
(g1%2)[364]
(g0%1)[366]
(g0%1)[359]
(g0%1)[373]
(g0%1)[305]
(g0%1)[305]
(g0%1)[296](g0%1)[297](g0%1)[300]
(g0%1)[301]
(g1%2)[306]
(g1%2)[296]
(g0%1)[298]
(g0%1)[305]
(g1%2)[298]
(g1%2)[290]
(g0%1)[275]
(g1%2)[276]
(g0%1)[285]
(g0%1)[279]
(g0%2)[273]
(g0%1)[284]
(g1%2)[315]
(g0%1)[303]
(g0%1)[310]
(g1%2)[315]
(g1%2)[323]
(g0%2)[320]
(g0%2)[303]
(g0%1)[299]
(g1%2)[316]
(g1%2)[307] -- 2199 blocks 2nd p256 activation
(g0%1)[295]
(g1%2)[292]
(g0%2)[286]
(g0%1)[295]
(g0%1)[293](g0%1)[300]
(g0%1)[277]
(g0%1)[277]
(g1%2)[277]
(g1%2)[279](g1%2)[280](g0%2)[283](g0%2)[284]
(g1%2)[291]
(g0%2)[278]
(g0%2)[277]
(g0%2)[289]
(g0%1)[297]
(g1%2)[297]
(g0%2)[294]
(g1%2)[270]
(g1%2)[267](g1%2)[268](g0%2)[271](g0%2)[272]
(g1%2)[273]
(g0%2)[270]
(g0%1)[269]
(g0%1)[268](g0%1)[279]
(g0%1)[286]
(g0%1)[293]
(g1%2)[293]
(g1%2)[294]
(g1%2)[304]
(g0%1)[304]
(g0%1)[296](g0%1)[299](g0%1)[301]
(g1%2)[302]
(g0%2)[304]
(g0%2)[309]
(g0%1)[318]
(g1%2)[322]
(g0%2)[327]
(g0%1)[318]
(g0%1)[307]
(g0%1)[300]
(g1%2)[315]
(g0%2)[308]
(g0%2)[285]
(g1%2)[288]
(g0%1)[265]
(g0%1)[263](g0%1)[268]
(g0%1)[256]
(g0%1)[267]
(g0%1)[262]
(g0%1)[258]
(g0%2)[278]
(g0%2)[288]
(g1%2)[276]
--(g0%1)[280](g0%1)[281](g0%1)[282](g0%1)[283](g0%1)[284](g0%1)[285] -- 2251 99,20,100,20,99,21,100,21
(g1%2)[297]
(g0%1)[299]
(g0%1)[289]
(g0%1)[282]
(g0%1)[288]
(g0%1)[287](g0%1)[292](g0%1)[293](g0%1)[298]
(g0%1)[288]
(g0%1)[278]
(g0%1)[276](g0%1)[281]
(g0%2)[262](g0%2)[263](g0%2)[264](g1%2)[265](g1%2)[266](g1%2)[267]
(g0%1)[269]
(g0%1)[280]
(g0%1)[265]
(g0%1)[273]
(g0%1)[273]
(g1%2)[273]
(g1%2)[258]
(g0%2)[263]
(g1%2)[271]
(g0%2)[272](g0%2)[273]
(g0%2)[281](g0%2)[288]
(g1%2)[295]
(g1%2)[292](g1%2)[293](g0%2)[296](g0%2)[297]
(g0%2)[292]
(g1%2)[299]
(g0%2)[299]
(g0%2)[298]
(g1%2)[288]
(g0%2)[293]
(g0%2)[283]
(g0%2)[265]
(g0%1)[261]
(g0%1)[261]
(g0%1)[261]
(g0%1)[259](g0%1)[264]
(g1%2)[259]
(g0%2)[264]
(g0%2)[268]
(g1%2)[252]
(g5%8)[264]
(g0%1)[307]
(g0%1)[296]
(g0%1)[309]
(g0%1)[330]
(g0%1)[337]
(g1%2)[322]
(g0%1)[309]
(g1%2)[305]
(g1%2)[298](g1%2)[299](g0%2)[302](g0%2)[303]
(g0%2)[297]
(g1%2)[311]
(g0%2)[310]
(g1%2)[336]
(g0%2)[343]
(g0%2)[332]
(g0%2)[337]
(g0%1)[340]
(g0%1)[340](g0%1)[341]
(g1%2)[349]
(g0%1)[346]
(g0%1)[333]
(g0%1)[341]
(g1%2)[331]
(g0%1)[334]
(g0%1)[344](g0%1)[351](g0%1)[354](g0%1)[355] -- 2316 bocks DBCA PI DEC reaction
(g0%1)[357]
(g1%2)[353]
(g0%2)[357]
(g0%1)[350]
--(g0%1)[365] -- 2321 286,294,285,295,287,295,285,296,287,296,286,297
(g0%1)[399]
(g1%2)[400]
(g0%2)[388]
(g0%2)[399]
(g1%2)[400]
(g0%1)[403]
(g0%1)[389]
(g0%1)[394](g0%1)[397](g0%1)[398]
(g0%1)[381]
(g1%2)[394]
(g1%2)[398]
(g1%2)[383]
(g1%2)[373]
(g1%2)[369]
(g0%2)[373]
(g0%1)[384](g0%1)[385](g0%1)[386](g0%1)[387]
(g0%1)[388]
(g0%1)[361]
(g0%1)[349]
(g0%1)[340](g0%1)[341](g0%1)[344]
(g1%2)[347]
(g1%2)[362]
(g1%2)[353]
(g0%2)[336]
(g0%2)[353]
(g0%1)[358]
(g0%1)[349]
(g1%2)[349]
(g1%2)[363]
(g0%2)[347]
(g1%2)[346]
(g0%1)[350]
(g0%1)[341]
(g0%1)[359](g0%1)[360](g0%1)[361]
(g0%1)[363]
(g1%2)[363]
(g0%2)[373]
(g0%2)[367]
(g1%2)[388]
(g0%1)[402]
(g1%2)[398]
(g1%2)[395]
(g0%2)[403]
(g0%2)[399]
(g0%1)[401]
(g0%1)[403]
(g0%1)[400](g0%1)[405]
(g0%1)[412]
(g0%1)[401]
(g0%1)[371]
(g0%1)[373]
(g0%1)[355]
(g1%2)[352]
(g0%2)[344]
(g1%2)[343]
(g0%2)[350]
(g1%2)[347]
(g1%2)[353]
(g1%2)[358]
(g1%2)[361]
(g0%1)[363]
(g0%1)[349](g0%1)[350](g0%1)[351](g0%1)[352](g0%1)[353](g0%1)[354]
(g0%1)[353]
(g0%1)[346]
(g1%2)[358]
(g0%2)[359]
(g1%2)[353]
(g1%2)[351]
(g0%1)[379]
(g1%2)[379]
(g1%2)[394]
(g0%2)[389]
(g1%2)[381]
(g0%2)[374]
(g0%2)[379]
(g1%2)[374]
(g1%2)[375]
(g0%1)[396]
(g1%2)[399]
(g0%1)[386](g0%1)[387](g0%1)[388](g0%1)[389](g0%1)[390]
(g0%2)[394]
(g0%2)[395]
(g0%2)[401](g0%2)[402](g1%2)[405](g1%2)[406]
(g0%2)[400]
(g0%1)[406]
(g0%1)[410]
(g0%8)[404]
(g0%1)[397]
(g0%1)[387](g0%1)[388](g0%1)[391]
(g1%2)[394]
(g0%1)[384](g0%1)[385](g0%1)[388]
(g0%2)[392]
(g1%2)[396]
(g1%2)[395]
(g0%1)[396]
(g1%2)[394]
(g1%2)[397]
(g0%2)[384]
(g0%2)[381]
(g0%2)[389]
(g1%2)[392]
(g1%2)[392]
(g0%1)[392]
(g1%2)[392]
(g0%2)[396]
(g1%2)[403]
(g0%1)[402]
(g0%1)[398]
(g0%1)[403]
(g0%1)[392]
(g0%1)[398]
(g1%2)[394]
(g1%2)[391](g1%2)[392](g0%2)[395](g0%2)[396]
(g0%1)[378](g0%1)[379](g0%1)[380](g0%1)[381](g0%1)[382](g0%1)[383]
(g1%2)[386]
(g1%2)[398]
(g0%1)[397]
(g1%2)[397]
(g0%1)[401]
(g0%2)[385]
(g0%2)[397]
(g0%1)[375](g0%1)[382]
(g0%8)[376]
(g1%2)[389]
(g0%2)[388]
(g0%1)[388]
(g1%2)[383]
(g1%2)[374]
(g1%2)[382]
(g0%1)[379]
(g0%1)[391] -- 2452 blocks DBCA add line
(g0%2)[375]
(g0%1)[378]
(g1%2)[382]
(g0%1)[369](g0%1)[370](g0%1)[371](g0%1)[372](g0%1)[373]
(g0%2)[377]
(g0%2)[372]
(g1%2)[383]
(g1%2)[379]
(g0%2)[392]
(g0%1)[376]
(g0%1)[379]
--(g0%1)[384](g0%1)[385] -- 2464 334,356,335,356,334,357,335,357
(g0%1)[370]
(g0%1)[363]
(g1%2)[378]
(g0%2)[357]
(g1%2)[364]
(g0%1)[374]
(g0%2)[350]
(g0%1)[336]
(g0%1)[335]
(g1%2)[334]
(g0%2)[323]
(g1%2)[322]
(g1%2)[312]
(g0%2)[318]
(g1%2)[315]
(g0%1)[304]
(g0%1)[302](g0%1)[307]
(g1%2)[302]
(g0%2)[297]
(g1%2)[300]
(g1%2)[304]
(g4%8)[288]
(g0%1)[291]
(g1%2)[298]
--(g0%1)[276](g0%1)[279](g0%1)[280](g0%1)[283] -- 2489 408,326,409,326,408,327,410,327,409,328
(g0%2)[309]
(g0%1)[322]
(g1%2)[325]
(g0%2)[329]
(g0%2)[339]
(g0%1)[329](g0%1)[330](g0%1)[331](g0%1)[332](g0%1)[333](g0%1)[334]
(g0%1)[334]
(g1%2)[371]
(g0%1)[373]
(g1%2)[376]
(g1%2)[384]
(g1%2)[371]
(g0%1)[363](g0%1)[366](g0%1)[367](g0%1)[370]
(g0%1)[376]
(g0%1)[387]
(g0%1)[385]
(g0%1)[401]
(g1%2)[397]
(g1%2)[389]
(g0%2)[400]
(g1%2)[389]
(g0%2)[389]
(g0%2)[397]
(g0%2)[404]
(g0%2)[409]
(g0%2)[409]
(g0%1)[389]
(g1%2)[386]
(g0%1)[395](g0%1)[396](g0%1)[397](g0%1)[398](g0%1)[399]
(g0%1)[401]
(g0%2)[380]
(g0%1)[382]
(g0%1)[388]
(g0%1)[394]
(g0%1)[378](g0%1)[389]
(g0%1)[379]
(g1%2)[376]
(g1%2)[368]
(g0%2)[371]
(g0%2)[372](g0%2)[373](g1%2)[374]
(g0%2)[388]
(g0%1)[392]
(g0%2)[388]
(g0%1)[380]
(g0%1)[391]
(g0%1)[400]
(g0%1)[393]
(g0%1)[391]
(g1%2)[410]
(g0%2)[399]
(g1%2)[386]
(g1%2)[393]
(g0%1)[389]
(g1%2)[386]
(g1%2)[379](g1%2)[380](g0%2)[383](g0%2)[384]
(g0%2)[377]
(g0%2)[388]
(g0%2)[385]
(g0%1)[391]
(g1%2)[393]
(g0%2)[394]
(g0%1)[401]
(g1%2)[401]
(g0%2)[402]
(g0%1)[398](g0%1)[399]
(g1%2)[400]
(g0%1)[411] -- 2556 blocks Green boat hitting track
(g0%1)[410]
(g0%1)[401]
(g1%2)[398]
(g1%2)[406]
(g0%1)[400]
(g0%1)[413]
(g0%1)[412]
(g1%2)[405]
(g0%2)[414]
--(g0%1)[409](g0%1)[410](g0%1)[411](g0%1)[412](g0%1)[413](g0%1)[414] -- 2566 395,445,396,445,395,446,396,446
(g1%2)[386]
(g0%1)[375]
(g1%2)[379]
(g1%2)[387]
(g0%1)[366](g0%1)[367](g0%1)[368](g0%1)[369](g0%1)[370]
(g1%2)[367]
(g1%2)[374]
(g1%2)[370]
(g0%1)[370]
(g0%1)[373]
(g0%1)[389]
(g0%1)[396]
(g0%1)[382]
(g1%2)[386]
(g1%2)[378]
(g1%2)[376]
--(g0%1)[368](g0%1)[369](g0%1)[372](g0%1)[379] -- 2583 427,438,428,438,426,439,429,439,427,440,428,440
(g0%1)[353]
(g1%2)[353]
(g0%2)[355]
(g0%2)[364]
(g0%2)[355]
(g0%2)[360]
(g0%2)[336]
(g0%1)[331]
(g0%1)[329]
--(g0%1)[300] -- 2593 422,366,423,366,422,367,423,367
(g1%2)[312]
(g1%2)[314]
(g1%2)[332]
(g1%2)[335]
(g1%2)[343]
(g1%2)[358]
(g0%1)[365]
(g0%1)[390]
(g1%2)[393]
(g1%2)[393]
(g0%2)[386]
(g1%2)[393](g1%2)[400]
(g0%2)[392]
(g0%2)[389]
(g0%1)[401]
(g1%2)[392]
(g1%2)[395]
(g0%2)[387]
(g1%2)[388]
(g0%2)[392]
(g0%2)[396]
(g1%2)[393]
(g0%1)[393]
(g0%1)[393]
(g1%2)[390]
(g0%2)[380]
(g1%2)[395]
(g0%2)[391]
(g0%1)[378]
(g0%2)[385]
(g0%1)[380]
(g0%1)[366]
(g0%1)[364]
(g1%2)[383]
(g0%2)[372]
(g1%2)[359]
(g1%2)[360]
(g0%1)[367]
(g1%2)[370]
(g0%2)[368](g0%2)[369](g1%2)[372](g1%2)[373]
(g1%2)[365]
(g0%2)[368]
(g0%1)[361]
(g1%2)[365]
(g0%2)[367](g0%2)[368](g1%2)[371](g1%2)[372]
(g0%1)[380](g0%1)[381] -- 2639 blocks Green create boat track
(g0%2)[369]
(g0%2)[358]
(g0%2)[363]
(g1%2)[348]
(g0%1)[352]
(g1%2)[365]
(g0%2)[365]
(g0%2)[360]
(g0%1)[358]
(g1%2)[355]
(g0%2)[339]
(g0%2)[336]
(g1%2)[340]
(g1%2)[343]
(g0%2)[330]
(g0%2)[338]
(g1%2)[324]
(g1%2)[325]
(g0%2)[334]
(g0%2)[326]
(g0%2)[342]
(g0%2)[337]
(g0%2)[347]
(g1%2)[346]
(g1%2)[357]
(g0%1)[364](g0%1)[365](g0%1)[366](g0%1)[367](g0%2)[368]
(g0%2)[369]
(g0%2)[356]
(g0%1)[363]
(g1%2)[359]
(g1%2)[367]
(g0%2)[367]
(g0%1)[365](g0%1)[366](g0%1)[367](g0%1)[368](g0%1)[369]
(g1%2)[369]
(g0%1)[380]
(g1%2)[383]
(g0%1)[370](g0%1)[371](g0%1)[372](g0%1)[373](g0%1)[374]
(g0%2)[376]
(g0%1)[379](g0%1)[380]
(g1%2)[382]
(g0%2)[382](g0%2)[383](g1%2)[385](g1%2)[386](g1%2)[387]
(g0%1)[382]
(g0%1)[381]
(g1%2)[387]
(g1%2)[386]
(g0%2)[389]
(g1%2)[378]
(g0%1)[362]
(g0%1)[355]
(g0%1)[369]
(g1%2)[362]
(g0%2)[358]
(g0%2)[373]
(g0%2)[376]
(g0%1)[364](g0%1)[365](g0%1)[366](g0%1)[367](g0%1)[368](g0%1)[369]
(g0%1)[361]
(g0%1)[371]
(g0%1)[381]
(g0%1)[389]
(g0%1)[383]
(g1%2)[386]
(g1%2)[379]
(g0%2)[378]
(g1%2)[368]
(g0%1)[375](g0%1)[380]
(g0%2)[399]
(g1%2)[400]
(g0%2)[398](g0%2)[399](g1%2)[402](g1%2)[403]
(g0%2)[403]
(g1%2)[408]
(g1%2)[397]
(g1%2)[403]
(g1%2)[414](g1%2)[415](g0%2)[416](g0%2)[417]
(g0%2)[406]
(g1%2)[407]
(g0%2)[409]
(g0%1)[401]
(g0%1)[401]
(g1%2)[397]
(g0%1)[415]
(g1%2)[418]
(g3%8)[429]
(g0%1)[444]
(g1%2)[441]
(g0%2)[435]
(g0%1)[445]
(g0%1)[434]
(g0%8)[439](g1%8)[439](g2%8)[439](g4%8)[439](g5%8)[439](g6%8)[439](g7%8)[439]
(g0%1)[431](g0%1)[432]
(g0%2)[426]
(g1%2)[412]
(g0%2)[401]
(g0%2)[410]
(g0%2)[413]
(g1%2)[416]
(g1%2)[420]
(g0%1)[419]
(g0%1)[406]
(g0%1)[399]
(g0%1)[397]
(g1%2)[416]
(g0%2)[405]
(g0%1)[402](g0%1)[405](g0%1)[407](g0%1)[408](g0%1)[412]
(g1%2)[390]
(g1%2)[391]
(g0%2)[397]
(g0%1)[399]
(g0%1)[406]
(g1%2)[394]
(g0%2)[399]
(g0%2)[401]
(g0%2)[388]
(g5%8)[379]
(g0%1)[394]
(g1%2)[394]
(g0%2)[395]
(g0%2)[402](g0%2)[403](g1%2)[406](g1%2)[407]
(g1%2)[410]
(g0%2)[401]
(g1%2)[410](g1%2)[411](g0%2)[414](g0%2)[415]
(g1%2)[404]
(g1%2)[389]
(g0%2)[413]
(g0%1)[407]
(g0%1)[414]
(g0%1)[400]
(g0%1)[416]
(g1%2)[419]
(g0%2)[413]
(g0%2)[410]
(g0%1)[417]
(g1%2)[417]
(g0%1)[426]
(g0%1)[420]
(g0%2)[425]
(g1%2)[428]
(g0%1)[426]
(g1%2)[415]
(g0%1)[442](g0%1)[445]
(g0%1)[447]
(g1%2)[444]
(g0%1)[460]
(g0%1)[460]
(g1%2)[463]
(g1%2)[456]
(g0%2)[475]
(g1%2)[447](g1%2)[448](g1%2)[449](g0%2)[450](g0%2)[451](g0%2)[452]
(g1%2)[455]
(g0%2)[449]
(g1%2)[437](g1%2)[438](g0%2)[441](g0%2)[442]
(g0%2)[444]
(g0%1)[444]
(g0%2)[435]
(g1%2)[436]
(g1%2)[474]
(g0%2)[478]
(g1%2)[464]
(g0%2)[462]
(g1%2)[472]
(g1%2)[475]
(g1%2)[487]
(g1%2)[505]
(g0%2)[509]
(g0%1)[494]
(g0%1)[501]
(g1%2)[486]
(g1%2)[480]
(g1%2)[467]
(g1%2)[480]
(g1%2)[474]
(g0%2)[477]
(g1%2)[484]
(g0%2)[476]
(g0%1)[477]
(g0%1)[474](g0%1)[479]
(g1%2)[474]
(g0%2)[475](g0%2)[476](g1%2)[479](g1%2)[480]
(g1%2)[470]
(g0%2)[468](g0%2)[469](g1%2)[472](g1%2)[473]
(g0%2)[471]
(g1%2)[503]
(g0%1)[511]
(g7%8)[517]
(g1%2)[552]
(g1%2)[550]
(g0%1)[548]
--(g0%1)[546] -- 2826 206,393,207,393,206,394,207,394
(g0%1)[548]
(g1%2)[548]
(g0%1)[539]
(g0%1)[545]
(g0%2)[540]
(g1%2)[537]
(g0%1)[539]
(g1%2)[550]
(g1%2)[574]
(g0%2)[583]
(g0%1)[562]
(g1%2)[563]
(g0%2)[564]
(g0%2)[547]
(g0%1)[550](g0%1)[551]
(g0%2)[548]
(g0%2)[565]
(g1%2)[553]
(g1%2)[522]
(g0%2)[502]
(g0%2)[509]
(g0%1)[515]
(g0%1)[493]
(g0%2)[488]
(g0%1)[505]
(g0%1)[518]
(g0%1)[509]
(g0%1)[517]
(g0%1)[519]
(g1%2)[508]
(g0%2)[528]
(g1%2)[519]
(g0%1)[539]
(g0%1)[544](g0%1)[547](g0%1)[548]
(g0%2)[535]
(g0%2)[543]
(g0%2)[539]
(g0%1)[533]
(g1%2)[529]
(g0%2)[521]
(g1%2)[528]
(g0%1)[544]
(g1%2)[543]
(g0%1)[539]
(g0%1)[514](g0%1)[517]
(g0%1)[527]
(g1%2)[545](g1%2)[546](g0%2)[549](g0%2)[550]
(g1%2)[543]
(g0%1)[575]
(g0%1)[586]
(g0%1)[574]
(g0%1)[562]
(g1%2)[571]
(g1%2)[571]
(g1%2)[563]
(g0%2)[561]
(g1%2)[570]
(g0%2)[566](g0%2)[567]
(g0%1)[571]
(g1%2)[589]
(g1%2)[593](g1%2)[594](g0%2)[597](g0%2)[598]
(g1%2)[600]
(g1%2)[601]
(g0%2)[618]
(g0%1)[599]
(g0%1)[568](g0%1)[573]
(g1%2)[568]
(g0%2)[573]
(g1%2)[573]
(g0%2)[574]
(g0%1)[559]
(g1%2)[556]
--(g0%1)[543](g0%1)[544](g0%1)[545](g0%1)[546] -- 2899 297,479,298,479,297,480,298,480
(g0%1)[513](g0%1)[514](g0%1)[515](g0%1)[516](g0%1)[517](g0%1)[518]
(g0%1)[508]
(g1%2)[526]
(g0%1)[511]
(g0%1)[500]
(g0%1)[487](g0%1)[488](g0%1)[489](g0%1)[490]
(g0%1)[494]
(g1%2)[477]
(g0%1)[487]
(g0%1)[498]
(g1%2)[513]
(g1%2)[505]
(g0%1)[509]
(g0%1)[505]
(g0%1)[498]
(g0%1)[498]
(g1%2)[502]
(g0%2)[510]
(g0%2)[507]
(g0%2)[503]
(g0%2)[512]
(g0%2)[500]
(g1%2)[492]
(g0%1)[495]
(g0%1)[496]
(g1%2)[501]
(g1%2)[500]
(g0%2)[506]
(g1%2)[489]
(g0%2)[485]
(g0%1)[492]
(g1%2)[491]
(g0%2)[503]
(g1%2)[492]
(g0%2)[487]
(g0%1)[497]
(g0%1)[493]
(g5%8)[499]
(g0%1)[556](g0%1)[557](g0%1)[558](g0%1)[559](g0%1)[560]
(g1%2)[577]
(g0%2)[580]
(g0%2)[570]
(g0%1)[577]
(g0%1)[566]
(g0%1)[564]
(g1%2)[589]
(g1%2)[583]
(g0%2)[572]
(g1%2)[559]
(g1%2)[566]
(g0%1)[571]
(g1%2)[570]
(g0%1)[561]
(g0%2)[558]
(g0%2)[561]
(g1%2)[577](g1%2)[578]
(g0%1)[570](g0%1)[571] -- 2956 blocks BCA bordersnatch
(g0%1)[573]
(g1%2)[570]
(g1%2)[562]
(g0%2)[571]
(g0%1)[568](g0%1)[570](g0%1)[573]
(g0%1)[574](g0%1)[578](g0%1)[585] -- 2962 blocks BCA bordersnatch output
(g0%1)[614]
(g0%1)[616]
(g0%1)[629]
(g1%2)[633]
(g1%2)[637](g1%2)[638](g0%2)[641](g0%2)[642]
(g0%2)[630]
(g0%2)[633]
(g0%1)[645]
(g0%1)[662]
(g1%2)[667]
(g1%2)[643](g0%2)[652]
(g0%1)[658]
(g0%1)[666]
(g0%1)[687]
(g1%2)[683]
(g1%2)[691]
(g0%2)[691]
(g0%1)[689](g0%1)[690](g0%1)[691](g0%1)[692](g0%1)[693]
(g1%2)[693]
(g0%1)[675]
(g1%2)[678]
(g0%2)[684]
(g0%1)[678](g0%1)[679](g0%1)[680](g0%1)[681](g0%1)[682](g0%1)[683]
(g0%1)[665](g0%1)[666](g0%1)[667](g0%1)[668](g0%1)[669](g0%1)[670]
(g0%1)[671]
(g0%1)[671]
(g0%1)[682]
(g0%1)[669]
(g0%1)[678]
(g1%2)[681]
(g0%2)[685]
(g0%2)[697]
(g0%1)[675](g0%1)[676](g0%1)[677](g0%1)[678](g0%1)[679](g0%1)[680]
(g0%2)[675]
(g0%2)[687]
(g0%1)[704]
(g0%1)[701](g0%1)[706]
(g0%1)[713]
(g0%1)[702]
(g0%1)[707]
(g0%1)[711]
(g2%8)[705]
(g2%8)[662]
(g0%1)[658]
(g0%1)[658]
(g1%2)[654]
(g1%2)[646]
(g0%2)[649]
(g0%2)[650](g0%2)[651](g1%2)[652]
(g0%2)[666]
(g0%1)[670]
(g0%1)[667]
(g1%2)[654]
--(g0%1)[667] -- 3016 262,561,263,561,261,562,264,562,262,563,263,563
(g0%1)[660]
(g0%1)[667]
(g1%2)[660]
(g1%2)[652]
(g0%1)[664](g0%1)[665](g0%1)[666](g0%1)[667](g0%1)[668](g0%1)[669]
(g0%2)[675]
(g0%1)[637]
(g1%2)[641]
(g0%2)[638]
(g0%1)[611]
(g0%1)[612]
(g0%1)[612]
(g0%1)[609](g0%1)[614]
(g1%2)[609]
(g0%2)[610](g0%2)[611](g1%2)[614](g1%2)[615]
(g1%2)[605]
(g0%2)[603](g0%2)[604](g1%2)[607](g1%2)[608]
(g0%2)[600]
(g1%2)[617]
(g1%2)[621]
(g0%1)[626]
(g0%2)[627]
(g0%2)[629]
(g1%2)[629]
(g0%2)[618]
(g0%2)[618]
(g0%1)[620]
(g0%1)[631]
(g0%1)[626]
(g0%1)[641]
(g0%1)[633]
(g1%2)[648]
(g0%2)[641]
(g0%1)[612](g0%1)[615](g0%1)[616](g0%1)[619]
(g0%1)[613]
(g0%1)[611](g0%1)[616]
(g1%2)[616]
(g1%2)[623]
(g1%2)[612]
(g0%2)[593]
(g1%2)[592]
(g1%2)[581](g1%2)[582]
(g1%2)[594]
(g0%1)[609]
(g0%1)[601]
(g0%1)[607]
(g0%1)[619](g0%1)[620]
(g0%1)[613]
(g0%1)[604]
(g0%1)[605]
(g0%1)[614]
(g1%2)[625]
(g0%2)[632]
(g0%2)[622]
(g0%1)[626]
(g0%1)[613]
(g0%1)[607]
--(g0%1)[614](g0%1)[617](g0%1)[618](g0%1)[621] -- 3074 362,618,363,618,362,619,364,619,363,620
(g0%1)[635]
(g0%1)[632](g0%1)[637]
(g0%1)[644]
(g1%2)[637]
(g0%1)[652](g0%1)[653](g0%1)[654](g0%1)[655]
(g0%2)[655]
(g1%2)[657]
(g0%1)[676]
(g0%1)[676]
(g0%1)[668]
(g1%2)[676]
(g1%2)[689]
(g0%1)[701]
(g0%1)[701]
(g0%1)[708]
(g0%1)[694]
(g1%2)[701]
(g0%2)[705]
(g0%2)[690]
(g0%2)[687]
(g0%1)[694](g0%1)[695](g0%1)[696](g0%1)[697](g0%1)[698](g0%1)[699]
(g0%1)[702]
(g0%1)[692]
(g0%1)[661]
(g1%2)[661]
(g0%1)[665]
(g1%2)[661]
(g0%2)[660]
(g1%2)[657]
(g0%2)[664]
(g0%1)[674]
(g0%1)[680](g0%1)[683](g0%1)[684]
(g0%1)[684]
(g1%2)[687]
(g1%2)[686]
(g1%2)[688]
(g0%1)[675](g0%1)[682](g0%1)[685](g0%1)[686]
(g0%1)[677]
(g0%1)[674](g0%1)[679]
(g1%2)[679]
(g0%2)[667](g0%2)[668](g1%2)[671](g1%2)[672]
(g1%2)[667]
(g0%2)[670]
(g1%2)[667]
(g6%8)[684]
(g0%1)[729]
(g0%1)[719]
(g1%2)[720]
(g0%1)[726] -- 3123 blocks DBCA add line
--(g0%1)[739](g0%1)[744] -- 3124 116,491,117,491,115,492,118,492,116,493,117,493,112,495,111,496,113,496,111,497,113,497,112,498
(g0%1)[772]
(g0%1)[786]
(g0%1)[795]
(g0%1)[785](g0%1)[786](g0%1)[789]
(g0%1)[802]
(g0%1)[792]
(g0%1)[785]
(g0%1)[804]
(g0%1)[799]
(g1%2)[811]
(g1%2)[798]
(g0%1)[806]
(g0%1)[796]
(g1%2)[800]
(g1%2)[803]
(g0%1)[785]
(g0%1)[776](g0%1)[777](g0%1)[780]
(g1%2)[783]
(g1%2)[792]
(g0%1)[796]
(g0%1)[780](g0%1)[787]
(g1%8)[774]
(g0%1)[762]
(g0%1)[771]
(g0%1)[768](g0%1)[773]
(g1%2)[773]
(g0%2)[759]
(g0%2)[756]
(g0%1)[760]
(g0%1)[753]
(g0%1)[767]
(g0%1)[755]
(g0%1)[762]
(g0%1)[773]
(g1%2)[776]
(g1%2)[779]
(g1%2)[768]
(g0%1)[761]
(g1%2)[778]
(g0%1)[775]
(g1%2)[769]
(g0%1)[763]
(g0%1)[761](g0%1)[766]
(g0%1)[773]
(g1%2)[773]
(g0%2)[772]
(g1%2)[783]
(g0%1)[776](g0%1)[777]
(g1%2)[773]
(g1%2)[776]
(g0%1)[773]
(g0%1)[774]
(g0%1)[754]
(g0%1)[765]
(g0%1)[760]
(g0%1)[756]
(g7%8)[762]
(g0%1)[789]
(g0%1)[795]
(g0%1)[781](g0%1)[784](g0%1)[785](g0%1)[788] -- 3184 blocks DBCA data input
(g0%1)[810]
(g1%2)[813]
(g0%2)[809]
(g0%2)[889]
(g0%1)[895]
(g0%1)[893](g0%1)[898]
(g1%2)[898]
(g1%2)[879]
(g1%2)[879](g1%2)[880](g1%2)[881](g0%2)[882]
(g0%1)[875]
(g0%8)[878]
(g0%2)[886](g0%2)[887](g1%2)[890](g1%2)[891]
(g1%2)[886]
(g0%2)[889]
(g1%2)[886]
(g6%8)[903]
(g0%1)[921]
(g0%1)[922]
--(g0%1)[927] -- 3203 30,589,31,589,29,590,32,590,30,591,31,591
(g0%1)[923]
(g0%1)[923]
(g0%1)[920](g0%1)[925]
(g1%2)[925]
(g0%2)[911]
(g0%2)[918]
(g0%2)[913]
(g6%8)[918]
(g0%1)[924](g0%1)[926](g0%1)[929]
(g0%1)[929]
(g1%2)[928]
(g1%2)[930](g1%2)[931](g0%2)[934](g0%2)[935]
(g0%1)[919]
(g1%2)[928]
(g1%2)[924]
(g0%2)[931]
(g1%2)[937]
(g0%2)[944]
(g0%1)[924]
(g1%2)[962]
(g1%2)[947]
(g1%2)[953]
(g1%2)[959]
(g0%2)[964]
(g0%1)[972]
(g1%2)[965]
(g0%1)[988]
(g1%2)[988]
(g0%2)[990]
(g0%2)[985]
(g1%2)[981]
(g0%1)[973]
(g0%1)[974]
(g0%1)[971](g0%1)[972](g0%1)[973](g0%1)[974]
(g0%1)[976](g0%1)[977]
(g0%1)[988](g0%1)[989](g0%1)[990](g0%1)[991](g0%1)[992](g0%1)[993]
(g1%2)[994]
(g1%2)[982]
(g1%2)[987]
(g0%1)[981]
(g1%2)[978]
(g1%2)[971](g1%2)[972](g0%2)[975](g0%2)[976]
(g0%2)[969]
(g0%2)[980]
(g1%2)[981]
(g0%2)[995]
(g0%1)[997]
(g0%1)[986]
(g0%1)[1011]
(g1%2)[1012]
(g0%2)[1009]
(g0%1)[995]
(g0%1)[997]
(g0%1)[987](g0%1)[988](g0%1)[991]
(g1%2)[1017]
(g1%2)[1021](g1%2)[1022](g0%2)[1025](g0%2)[1026]
(g1%2)[1016]
(g0%2)[1024]
(g0%1)[1024]
(g0%1)[1014](g0%1)[1015](g0%1)[1018]
(g0%1)[1014]
(g1%2)[1011]
(g0%2)[1024]
(g0%1)[1033]
(g0%1)[1030]
(g0%1)[1038]
(g0%1)[1039]
(g0%1)[1030]
(g0%1)[1038]
(g1%2)[1026]
(g0%2)[1031]
(g1%2)[1030]
(g1%2)[1022]
(g0%2)[1012](g0%2)[1013](g0%2)[1014](g1%2)[1015](g1%2)[1016](g1%2)[1017]
(g0%1)[1004]
(g0%1)[1003]
(g0%1)[1009]
(g0%1)[1008]
(g7%8)[1010]
(g1%2)[993]
(g1%2)[988]
(g0%2)[993]
(g1%2)[1001]
(g0%2)[1010]
(g0%2)[1011]
(g0%1)[1000]
(g1%2)[995]
(g0%2)[997]
(g1%2)[1004]
(g1%2)[999]
(g0%2)[1000]
(g0%2)[1007]
(g1%2)[974]
(g0%1)[921]
(g0%1)[926](g0%1)[929](g0%1)[930]
(g0%1)[930]
(g1%2)[933]
(g0%2)[927]
(g1%2)[915]
(g0%2)[905]
(g1%2)[918]
(g0%2)[921]
(g0%1)[910]
(g0%1)[814]
(g1%2)[813]
(g0%2)[815]
(g1%2)[825]
(g1%2)[803]
(g0%2)[813]
(g1%2)[821]
(g0%1)[832]
(g1%2)[831]
(g0%2)[830]
(g1%2)[843](g1%2)[844]
(g1%2)[836]
(g0%1)[844] -- 3319 blocks DBCA sync input
(g1%2)[856]
(g0%2)[852](g0%2)[853]
(g0%1)[869]
(g0%1)[859]
(g0%1)[848]
(g0%1)[854](g0%1)[857](g0%1)[858]
(g0%1)[853]
(g0%1)[846]
(g1%2)[856]
(g1%2)[844]
(g0%2)[831]
(g0%2)[843]
(g0%1)[802]
(g1%2)[801]
(g0%2)[803]
(g1%2)[805]
(g0%1)[808]
(g0%1)[804](g0%1)[807](g0%1)[808]
(g0%1)[799]
(g0%1)[791]
(g0%1)[789]
(g1%2)[808]
(g0%2)[797]
(g1%2)[784]
(g1%2)[791]
(g0%1)[786]
(g0%1)[795]
(g1%2)[794]
(g0%1)[785]
(g0%1)[787]
(g0%2)[802](g0%2)[803](g1%2)[806](g1%2)[807]
(g0%2)[802]
(g1%2)[799]
(g1%2)[811]
(g1%2)[818]
(g0%1)[823]
(g0%1)[816]
(g1%2)[831]
(g0%2)[818]
(g1%2)[808]
(g0%1)[807]
(g0%1)[808]
(g1%2)[802]
(g0%1)[808](g0%1)[811](g0%1)[812]
(g1%2)[805]
(g0%2)[803]
(g1%2)[836]
(g0%2)[838]
(g0%1)[840]
(g0%1)[829]
(g0%1)[841]
(g0%1)[846](g0%1)[849](g0%1)[850]
(g1%2)[843]
(g1%2)[830]
(g0%1)[828]
(g0%1)[804]
(g1%2)[805]
(g0%2)[803]
(g0%1)[798](g0%1)[805]
(g0%1)[800](g0%1)[803] -- 3379 blocks corder glider
(g0%1)[810]
(g1%2)[811]
(g1%2)[788](g1%2)[789](g1%2)[790](g0%2)[791](g0%2)[792](g0%2)[793]
(g0%2)[795]
(g1%2)[797]
(g0%2)[806]
(g0%1)[809] -- 3386 blocks turning glider
(g0%1)[792]
(g1%2)[788]
(g0%2)[785]
(g1%2)[785]
(g0%2)[814]
(g0%1)[806]
(g1%2)[805]
(g1%2)[805]
(g0%1)[800] -- 3395 blocks turned glider
(g1%2)[819]
(g1%2)[810]
(g0%1)[821]
(g1%2)[819]
(g1%2)[813]
(g0%2)[809]
(g0%2)[818]
(g0%2)[821]
(g0%1)[816]
(g1%2)[806]
(g0%2)[813]
(g1%2)[809]
(g1%2)[802]
(g0%1)[792]
(g0%1)[792]
(g1%2)[789]
(g0%2)[784]
(g0%1)[793]
(g0%1)[804]
(g1%2)[800]
(g1%2)[797]
(g1%2)[808]
(g0%1)[809](g0%1)[810](g0%1)[813]
(g0%2)[808]
(g0%1)[816]
(g0%1)[805]
(g1%2)[805]
(g1%2)[797](g1%2)[798]
(g1%2)[805]
(g0%2)[804]
(g0%1)[802]
(g1%2)[801]
(g0%2)[799]
(g1%2)[803](g1%2)[804](g0%2)[807](g0%2)[808]
(g0%2)[811]
(g1%2)[806]
(g1%2)[814]
(g0%1)[813]
(g1%2)[810]
(g1%2)[801]
(g0%2)[815]
(g0%2)[815](g0%2)[816](g1%2)[819](g1%2)[820]
(g1%2)[808]
(g1%2)[829]
(g0%2)[827]
(g0%1)[854]
(g0%1)[844]
(g0%1)[846]
(g0%1)[893]
(g1%2)[897]
(g0%2)[882]
(g0%1)[888]
(g0%1)[896]
(g0%1)[918]
(g0%1)[918]
(g0%1)[910]
(g1%2)[918]
(g0%2)[924]
(g0%1)[919]
(g1%2)[938]
(g0%2)[942]
(g0%1)[932]
(g0%1)[929](g0%1)[934]
(g1%2)[929]
(g1%2)[936](g1%2)[937](g0%2)[940](g0%2)[941]
(g0%1)[921]
(g0%2)[924]
(g1%2)[941]
(g0%2)[937]
(g0%1)[896]
(g0%1)[889]
(g1%2)[897]
(g0%1)[879]
(g0%1)[855]
(g1%2)[851]
(g0%2)[841]
(g0%2)[851]
(g0%1)[862]
(g0%1)[854]
(g1%2)[862]
(g0%2)[868]
(g0%1)[875]
(g1%2)[869]
(g0%2)[873]
(g1%2)[871]
(g0%1)[862]
(g0%1)[865]
(g0%2)[877]
(g0%2)[876]
(g0%2)[907]
(g0%2)[912]
(g1%2)[910]
(g1%2)[919]
(g0%1)[911]
(g0%2)[898](g0%2)[899](g0%2)[900](g1%2)[901](g1%2)[902](g1%2)[903]
(g1%2)[868]
(g0%2)[866](g0%2)[867](g1%2)[870](g1%2)[871]
(g1%2)[865]
(g0%2)[875]
(g0%1)[876]
(g1%2)[859]
(g0%2)[870]
(g0%2)[872]
(g0%1)[863](g0%1)[864](g0%1)[865](g0%1)[866](g0%1)[867]
(g0%1)[869]
(g0%1)[858]
(g0%1)[857]
(g0%1)[868]
(g0%1)[897]
(g0%2)[887]
(g0%1)[879](g0%1)[883] -- 3506 blocks corder glider
(g0%1)[877]
(g1%2)[877]
(g1%2)[867]
(g0%2)[876]
(g0%2)[879]
(g1%2)[868]
(g1%2)[880]
(g0%1)[880]
(g1%2)[872]
(g1%2)[880]
(g0%1)[885]
(g1%2)[885]
(g0%2)[873]
(g0%1)[865]
(g1%2)[865]
(g1%2)[867](g1%2)[868](g0%2)[871](g0%2)[872]
(g1%2)[884]
(g1%2)[887]
(g0%2)[877]
(g0%1)[860]
(g1%2)[865]
(g0%2)[870]
(g0%2)[866]
(g1%2)[856]
(g1%2)[867]
(g0%2)[865]
(g0%2)[857]
(g1%2)[872]
(g1%2)[859]
(g0%2)[862]
(g1%2)[867]
(g1%2)[862]
(g1%2)[864]
(g1%2)[873]
(g0%2)[868]
(g1%2)[876]
(g1%2)[894]
(g1%2)[885]
(g0%2)[896]
(g0%2)[888]
(g0%1)[882]
(g0%1)[879]
(g0%1)[871](g0%1)[872](g0%1)[873](g0%1)[874](g0%1)[875](g0%1)[876] -- 3549 blocks turned glider
(g0%1)[847](g0%1)[848](g0%1)[849](g0%1)[850](g0%1)[851](g0%1)[852] -- 3550 blocks corder glider
(g0%2)[834]
(g1%2)[839]
(g1%2)[840]
(g0%1)[845]
(g0%1)[826] -- 3555 blocks turned glider
(g1%2)[832]
(g1%2)[837]
(g0%2)[821]
(g0%2)[827]
(g0%1)[831]
(g0%1)[827](g0%1)[832]
(g0%1)[820]
(g0%1)[828]
(g0%1)[805]
(g0%1)[796](g0%1)[797](g0%1)[800]
(g0%1)[805]
(g1%2)[815]
(g1%2)[806]
(g0%2)[813]
(g0%1)[836]
(g1%2)[834]
(g0%2)[838]
(g0%2)[830]
(g0%1)[824]
(g0%1)[821]
(g0%1)[833]
(g0%2)[831](g0%2)[832](g0%2)[833](g1%2)[834](g1%2)[835](g1%2)[836] -- 3577 blocks turned glider
(g0%2)[849]
(g0%1)[851]
(g0%1)[840]
(g0%1)[852]
(g1%2)[852]
(g1%2)[839](g1%2)[840](g0%2)[843](g0%2)[844]
(g0%1)[857]
(g0%1)[865]
(g1%2)[865]
(g0%2)[863]
(g1%2)[867](g1%2)[868](g0%2)[871](g0%2)[872]
(g0%2)[875]
(g1%2)[870]
(g1%2)[867]
(g1%2)[874](g1%2)[875](g0%2)[878](g0%2)[879]
(g1%2)[876]
(g0%2)[877]
(g0%1)[891]
(g0%2)[889](g0%2)[890](g0%2)[891](g1%2)[892](g1%2)[893](g1%2)[894] -- 3596 blocks corder glider
(g1%2)[881]
(g1%2)[879]
(g0%1)[871]
(g0%1)[879]
(g0%1)[879]
(g0%1)[898](g0%1)[899] -- 3602 blocks corder glider
(g0%1)[887]
(g1%2)[899]
(g1%2)[895]
(g0%1)[879]
(g0%1)[882]
(g0%1)[875]
(g0%1)[877]
(g0%1)[886]
(g1%2)[882]
(g1%2)[873]
(g0%2)[887]
(g0%2)[887](g0%2)[888](g1%2)[891](g1%2)[892]
(g1%2)[880]
(g0%1)[905]
(g0%1)[905]
(g0%1)[896]
(g1%2)[897]
(g0%2)[881]
(g1%2)[883]
(g0%2)[892]
(g0%1)[895] -- 3623 blocks turning glider
(g0%1)[881]
(g1%2)[879]
(g0%2)[874]
(g0%1)[866]
(g1%2)[873]
(g1%2)[853]
(g0%2)[848]
(g0%1)[824]
(g1%2)[821]
(g1%2)[823]
(g1%2)[817]
(g1%2)[815](g1%2)[816](g0%2)[819](g0%2)[820]
(g0%2)[829]
(g0%1)[809](g0%1)[811](g0%1)[814] -- 3637 blocks turned glider
(g0%1)[817]
(g1%2)[817]
(g0%2)[819]
(g1%2)[819]
(g0%2)[809]
(g0%2)[811]
(g0%1)[815]
(g0%2)[819]
(g0%1)[817]
(g0%1)[809]
(g0%1)[806]
(g0%1)[812]
(g0%1)[819]
(g1%2)[804]
(g0%2)[826]
(g1%2)[816]
(g1%2)[827]
(g0%2)[825]
(g0%2)[820]
(g0%1)[822]
(g0%1)[813]
(g1%2)[810]
(g0%2)[805]
(g0%1)[814]
(g0%1)[825]
(g0%1)[814]
(g0%1)[838]
(g0%1)[838]
(g0%1)[829](g0%1)[830](g0%1)[833]
(g0%1)[833]
(g0%1)[843]
(g0%1)[852]
(g0%1)[839]
(g0%1)[848]
(g1%2)[844]
(g0%2)[836]
(g1%2)[840]
(g1%2)[843]
(g1%2)[839]
(g0%2)[850]
(g0%1)[830]
(g0%1)[823]
(g1%2)[830]
(g1%2)[830](g1%2)[831]
(g0%2)[837](g0%2)[838](g1%2)[841](g1%2)[842]
(g1%2)[830]
(g1%2)[845]
(g1%2)[842]
(g0%2)[845]
(g0%2)[856]
(g0%2)[851]
(g0%1)[846]
(g1%2)[848]
(g0%2)[858]
(g1%2)[855]
(g1%2)[854]
(g0%2)[856]
(g0%1)[848]
(g1%2)[855]
(g0%1)[840]
(g1%2)[841]
(g0%2)[842]
(g1%2)[840]
(g1%2)[835]
(g0%2)[842]
(g0%1)[845]
(g1%2)[835]
(g0%2)[832]
(g0%2)[814] -- 3706 blocks turned glider
(g1%2)[828]
(g0%2)[832]
(g0%1)[830]
(g0%1)[821]
(g0%2)[818]
(g0%1)[811]
(g0%1)[802](g0%1)[803](g0%1)[806]
(g0%1)[811]
(g1%2)[821]
(g1%2)[812]
(g0%2)[819]
(g0%1)[824]
(g0%1)[832]
(g0%1)[818]
(g0%1)[820]
(g1%2)[819]
(g1%2)[817]
(g0%2)[812]
(g1%2)[824]
(g1%2)[825]
(g1%2)[829](g1%2)[830](g0%2)[833](g0%2)[834]
(g0%1)[845]
(g0%1)[854]
(g0%1)[846]
(g0%1)[849]
(g1%2)[861]
(g0%1)[876]
(g0%1)[894]
(g1%2)[884]
(g0%1)[854]
(g0%1)[866]
(g0%1)[858]
(g0%1)[861]
(g1%2)[873]
(g1%2)[889]
(g1%2)[872]
(g1%2)[864]
(g0%2)[874]
(g1%2)[877]
(g0%2)[867]
(g1%2)[866]
(g0%2)[881]
(g1%2)[866]
(g0%2)[888]
(g0%1)[898] -- 3751 blocks cordership
(g0%1)[895]
(g1%2)[891]
(g1%2)[899]
(g0%1)[893]
(g1%2)[886]
(g1%2)[895]
(g0%1)[901] -- 3758 blocks corder glider
(g0%2)[889]
(g1%2)[890]
(g0%2)[900]
(g1%2)[900]
(g0%2)[871]
(g0%1)[878]
(g0%1)[887]
(g1%2)[883]
(g1%2)[891]
(g0%1)[898]
(g1%2)[887]
(g0%2)[883]
(g1%2)[880]
(g0%2)[877](g0%2)[878]
(g0%1)[873]
(g1%2)[874]
(g0%2)[876]
(g0%2)[873]
(g1%2)[877]
(g0%2)[864]
(g1%2)[873]
(g0%1)[882]
(g0%1)[881]
(g1%2)[880]
(g0%2)[864]
(g1%2)[865]
(g1%2)[860]
(g0%2)[870]
(g1%2)[877]
(g1%2)[878]
(g0%2)[876]
(g0%1)[871]
(g0%1)[877]
(g0%1)[863]
(g0%1)[875]
(g0%1)[868]
(g0%2)[821]
(g0%2)[822]
(g1%2)[825]
(g0%2)[824]
(g1%2)[822]
(g0%2)[813](g0%2)[814](g1%2)[817](g1%2)[818]
(g1%2)[811]
(g1%2)[818]
(g0%2)[822]
(g0%1)[803]
(g1%2)[800]
(g0%2)[792]
(g1%2)[788]
(g0%2)[796]
(g1%2)[796]
(g0%2)[787]
(g0%1)[798]
(g1%2)[793]
(g1%2)[803]
(g0%2)[809]
(g1%2)[799]
(g0%1)[791]
(g0%1)[800]
(g0%1)[812]
(g1%2)[815]
(g0%2)[817](g0%2)[818](g1%2)[821](g1%2)[822]
(g1%2)[819]
(g1%2)[810]
(g0%2)[802]
(g0%2)[806]
(g1%2)[793]
(g1%2)[805]
(g1%2)[808]
(g0%1)[808](g0%1)[811](g0%1)[812]
(g0%1)[803]
(g1%2)[803]
(g0%2)[787]
(g1%2)[789]
(g0%2)[798]
(g0%1)[801] -- 3834 blocks turning glider
(g0%1)[789]
(g0%1)[794]
(g1%2)[793]
(g0%1)[802]
(g1%2)[793]
(g1%2)[781]
--(g1%2)[761](g1%2)[762](g1%2)[763](g0%2)[764](g0%2)[765](g0%2)[766] -- 3841 303,706,304,706,305,706
(g1%2)[777]
(g0%2)[787]
(g0%2)[805]
(g1%2)[795]
(g0%2)[797]
(g0%2)[797]
(g0%2)[809]
(g0%1)[826]
(g1%2)[811]
(g0%1)[811]
(g0%1)[801]
(g0%1)[813]
(g1%2)[816]
(g1%2)[820]
(g0%1)[812]
(g0%1)[803](g0%1)[804](g0%1)[805](g0%1)[806](g0%1)[807](g0%1)[808]
(g1%2)[819]
(g0%1)[825]
(g1%2)[816](g1%2)[817](g0%2)[820](g0%2)[821]
(g1%2)[822]
(g0%2)[810](g0%2)[811](g1%2)[814](g1%2)[815]
(g0%2)[819]
(g1%2)[820]
(g1%2)[823]
(g0%1)[834]
(g1%2)[833]
(g1%2)[835](g1%2)[836](g0%2)[839](g0%2)[840]
(g0%2)[831]
(g1%2)[827]
(g1%2)[810]
(g0%2)[818]
(g0%2)[835]
(g0%2)[820]
(g1%2)[818]
(g0%2)[815]
(g0%2)[843]
(g0%1)[842]
(g0%1)[837]
(g0%2)[829]
(g1%2)[829]
(g1%2)[822]
(g1%2)[811]
(g1%2)[821]
(g1%2)[806]
(g0%2)[811]
(g1%2)[813]
(g1%2)[817]
(g0%2)[820]
(g1%2)[820]
(g0%1)[808]
(g1%2)[804]
(g1%2)[797](g1%2)[798](g0%2)[801](g0%2)[802]
(g0%1)[819]
(g1%2)[823]
(g0%2)[791]
(g0%2)[795]
(g1%2)[796]
(g0%2)[801]
(g1%2)[799]
(g0%2)[794]
(g0%2)[799]
(g0%1)[808]
(g0%1)[799]
(g1%2)[799]
(g1%2)[809]
(g1%2)[799]
(g0%2)[800]
(g1%2)[808]
(g0%2)[799](g0%2)[800](g1%2)[803](g1%2)[804]
(g0%2)[812]
(g0%2)[811]
(g1%2)[808]
(g0%2)[809]
(g1%2)[811]
(g1%2)[815](g1%2)[816](g0%2)[819](g0%2)[820]
(g1%2)[821]
(g0%2)[816]
(g0%1)[809]
(g0%1)[816]
(g0%1)[802]
(g0%1)[803]
(g1%2)[802]
(g1%2)[818]
(g1%2)[811](g0%2)[820] -- 3925 blocks turned glider
(g0%1)[796]
(g0%1)[801](g0%1)[802](g0%1)[803](g0%1)[804]
(g0%1)[811]
(g0%1)[817](g0%1)[818](g0%1)[819](g0%1)[820]
(g0%2)[829]
(g0%1)[826]
(g0%1)[833]
(g1%2)[825]
(g0%2)[806]
(g0%1)[812]
(g0%1)[811]
(g0%1)[797]
(g0%1)[794]
(g0%1)[796]
(g0%1)[795]
(g1%2)[788]
(g0%2)[790]
(g0%1)[782]
(g1%2)[789]
(g0%1)[810]
(g0%1)[813](g0%1)[814](g0%1)[815](g0%1)[816](g0%1)[817] -- 3946 blocks turned glider
(g0%2)[839](g0%2)[840](g0%2)[841](g1%2)[842](g1%2)[843](g1%2)[844]
(g1%2)[845]
(g1%2)[849](g1%2)[850](g0%2)[853](g0%2)[854]
(g1%2)[844]
(g0%2)[856]
(g0%2)[864]
(g1%2)[863]
(g1%2)[860](g1%2)[861](g0%2)[864](g0%2)[865]
(g0%2)[860]
(g0%2)[859]
(g0%1)[866]
(g0%2)[866]
(g0%2)[860]
(g0%2)[870]
(g0%2)[874](g0%2)[875](g0%2)[876](g1%2)[877](g1%2)[878](g1%2)[879] -- 3961 blocks corder glider
(g0%1)[896]
(g1%2)[891]
(g1%2)[883]
(g0%1)[907]
(g0%2)[894]
(g0%2)[890]
(g1%2)[891]
(g0%2)[888]
(g1%2)[891]
(g1%2)[892]
(g1%2)[889](g1%2)[890](g0%2)[893](g0%2)[894]
(g1%2)[880]
(g1%2)[889]
(g0%2)[883]
(g1%2)[878]
(g1%2)[879]
(g1%2)[876]
(g0%2)[874]
(g0%2)[882]
(g0%1)[889]
(g1%2)[888]
(g1%2)[897]
(g1%2)[892]
(g0%1)[894]
(g0%1)[883] -- 3986 blocks corder glider
(g0%1)[885]
(g1%2)[885]
(g0%1)[876]
(g0%1)[878]
(g0%2)[880]
(g0%2)[879]
(g0%2)[870](g0%2)[871](g0%2)[872](g1%2)[873](g1%2)[874](g1%2)[875] -- 3993 blocks turned glider
(g0%1)[888]
(g1%2)[889]
(g0%2)[873]
(g0%2)[875]
(g0%2)[881]
(g0%2)[876]
(g0%1)[867]
(g0%1)[875]
(g1%2)[860]
(g0%2)[873]
(g1%2)[858]
(g0%2)[876]
(g0%2)[870]
(g1%2)[866]
(g0%1)[885]
(g1%2)[881]
(g1%2)[878]
(g0%2)[886]
(g1%2)[883]
(g0%1)[894]
(g0%1)[895]
(g0%2)[888]
(g1%2)[882]
(g1%2)[896]
(g0%2)[885]
(g0%1)[879]
(g1%2)[889]
(g1%2)[878]
(g0%2)[879]
(g1%2)[879]
(g1%2)[873]
(g0%2)[871](g0%2)[872](g1%2)[875](g1%2)[876]
(g1%2)[886]
(g1%2)[881]
(g0%2)[869]
(g1%2)[874]
(g0%2)[866]
(g1%2)[865]
(g0%2)[860]
(g1%2)[867]
(g1%2)[856]
(g0%1)[859](g0%1)[860]
(g1%2)[851]
(g0%2)[854]
(g0%1)[849]
(g1%2)[849]
(g0%2)[865]
(g1%2)[863]
(g0%1)[866]
(g1%2)[864]
(g0%1)[845]
(g1%2)[841]
(g0%2)[855](g0%2)[856](g1%2)[859](g1%2)[860]
(g1%2)[859]
(g1%2)[859]
(g1%2)[847]
(g0%1)[851](g0%1)[853](g0%1)[856] -- 4050 blocks corder glider
(g1%2)[827]
(g0%2)[830]
(g1%2)[830]
(g0%2)[849](g0%2)[850](g0%2)[851](g1%2)[852](g1%2)[853](g1%2)[854] -- 4054 blocks turned glider
(g0%1)[838]
(g0%1)[828]
(g0%2)[801]
(g0%1)[809]
(g1%2)[814]
(g0%2)[794]
(g1%2)[794]
(g0%2)[807]
(g0%1)[829]
(g0%1)[817]
(g0%1)[831]
(g1%2)[832]
(g0%2)[820]
(g0%1)[828]
(g1%2)[837]
(g0%2)[835](g0%2)[836](g1%2)[839](g1%2)[840]
(g1%2)[832]
(g0%2)[834]
(g0%1)[853]
(g1%2)[857]
(g0%2)[854] -- 4075 blocks turning glider
(g0%2)[846]
(g0%1)[830]
(g1%2)[834]
(g1%2)[826]
(g0%2)[838]
(g0%2)[826]
(g0%1)[831]
(g1%2)[829]
(g1%2)[822](g1%2)[823](g0%2)[826](g0%2)[827]
(g0%2)[826]
(g0%2)[820]
(g0%2)[824]
(g0%1)[829]
(g1%2)[828]
(g0%2)[827]
(g0%2)[828]
(g0%1)[828]
(g1%2)[814]
(g0%1)[811]
(g0%1)[818](g0%1)[819](g0%1)[822]
(g0%1)[827]
(g0%1)[839]
(g1%2)[837]
(g1%2)[828]
(g0%2)[835]
(g1%2)[823]
(g1%2)[811]
(g0%2)[822]
(g1%2)[824]
(g1%2)[819]
(g0%2)[830]
(g1%2)[832]
(g0%2)[829]
(g0%2)[837]
(g1%2)[844]
(g0%2)[838](g0%2)[839](g1%2)[842](g1%2)[843]
(g1%2)[829]
(g0%2)[831](g0%2)[832]
(g1%2)[834]
(g1%2)[837]
(g0%2)[825](g0%2)[826](g1%2)[829](g1%2)[830]
(g0%2)[832]
(g0%2)[825]
(g0%1)[812]
(g1%2)[809]
(g1%2)[817]
(g0%1)[811]
(g0%2)[803]
(g0%1)[818] -- 4124 blocks corder glider
(g0%1)[822]
(g1%2)[832]
(g1%2)[830]
(g0%2)[833]
(g0%2)[824]
(g0%1)[814]
(g0%1)[824]
(g0%1)[831]
(g0%1)[817]
(g0%1)[829]
(g0%1)[822]
(g0%1)[841]
(g0%1)[830]
(g0%1)[865]
(g0%1)[856]
(g1%2)[860]
(g0%2)[862](g0%2)[863](g1%2)[866](g1%2)[867]
(g1%2)[862]
(g1%2)[866]
(g1%2)[856]
(g0%2)[855]
(g0%2)[846]
(g0%1)[842]
(g0%1)[852]
(g0%1)[849]
(g0%1)[854](g0%1)[857](g0%1)[858]
(g0%1)[854]
(g0%1)[849]
(g0%1)[848]
(g1%2)[847]
(g0%2)[833](g0%2)[834]
(g0%1)[854]
(g0%1)[864]
(g0%1)[851]
(g0%1)[851]
(g0%1)[841]
(g0%1)[818]
(g1%2)[818]
(g0%1)[814]
(g0%1)[812]
(g1%2)[812]
(g1%2)[801]
(g0%1)[802] -- 4167 blocks turned glider
(g0%1)[806]
(g0%1)[807]
(g1%2)[808]
(g1%2)[794]
(g1%2)[808]
(g0%1)[813] -- 4173 blocks turned glider
(g0%2)[810]
(g1%2)[799]
(g0%2)[804]
(g1%2)[809]
(g0%2)[806]
(g0%2)[820]
(g0%2)[810]
(g1%2)[809](g0%2)[813]
(g0%1)[828]
(g0%1)[832]
(g1%2)[840]
(g1%2)[843]
(g1%2)[849]
(g1%2)[834]
(g0%1)[843]
(g0%1)[833]
(g0%1)[826]
(g0%1)[832]
(g0%1)[831](g0%1)[836](g0%1)[837](g0%1)[842]
(g1%2)[828]
(g0%2)[817]
(g0%2)[828]
(g0%2)[832]
(g0%2)[825]
(g1%2)[839]
(g0%1)[848](g0%1)[849](g0%1)[850](g0%1)[851](g0%1)[852]
(g1%2)[844]
(g0%2)[833]
(g1%2)[831]
(g1%2)[821]
(g1%2)[815]
(g0%2)[820]
(g0%1)[815]
(g0%2)[822]
(g1%2)[829]
(g0%1)[835]
(g1%2)[838]
(g1%2)[847]
(g1%2)[840]
(g0%1)[830]
(g0%1)[825]
(g0%1)[847](g0%1)[850](g0%1)[851]
(g0%1)[841](g0%1)[842](g0%1)[845](g0%1)[852] -- 4216 blocks corder glider
(g0%1)[854]
(g0%1)[866]
(g1%2)[863]
(g0%2)[866]
(g0%1)[869]
(g0%1)[880]
(g0%1)[867]
(g0%1)[876]
(g0%1)[883]
(g0%1)[880]
(g0%1)[870]
(g0%1)[894]
(g0%1)[895]
(g0%1)[913]
(g0%1)[950]
(g0%1)[957]
(g0%1)[943]
(g1%2)[950]
(g0%2)[954]
(g0%2)[939]
(g0%2)[936]
(g0%1)[941]
(g0%1)[972]
(g0%1)[972]
(g1%2)[972]
(g0%2)[965](g0%2)[966](g1%2)[969](g1%2)[970]
(g1%2)[961]
(g0%1)[977]
(g0%1)[967](g0%1)[968](g0%1)[969](g0%1)[970](g0%1)[971](g0%1)[972]
(g0%1)[976]
(g0%1)[970]
(g0%1)[968]
(g0%1)[976]
(g1%2)[972]
(g1%2)[967]
(g0%1)[943]
(g1%2)[943]
(g0%2)[951](g0%2)[952](g1%2)[955](g1%2)[956]
(g0%1)[939]
(g0%2)[941]
(g0%1)[944]
(g0%1)[959]
(g0%1)[957](g0%1)[962]
(g1%2)[962]
(g0%2)[957]
(g0%2)[953]
(g6%8)[933]
(g0%1)[919]
(g0%1)[920]
(g0%1)[908]
(g1%2)[922](g1%2)[923](g1%2)[924] -- 4267 blocks cordership
(g0%1)[933]
(g1%2)[933]
(g0%2)[945]
(g0%1)[938]
(g0%2)[945]
(g1%2)[946]
(g1%2)[947]
(g1%2)[944]
--(g1%2)[969] -- 4276 110,699,111,699,112,699,98,702,97,703,99,703,97,704,99,704,98,705,106,706,107,706,108,706
(g0%2)[959]
(g0%2)[958]
(g1%2)[952]
(g0%2)[971]
(g0%1)[960](g0%1)[961]
(g1%2)[959]
(g1%2)[936]
(g1%2)[933]
(g0%2)[931]
(g0%2)[939]
(g0%1)[946]
(g0%2)[932]
(g0%1)[920]
(g1%2)[916]
(g1%2)[909](g1%2)[910](g0%2)[913](g0%2)[914]
(g0%2)[908]
(g1%2)[904]
(g0%1)[904](g0%1)[909](g0%1)[910](g0%1)[911](g0%1)[912]
(g0%1)[890]
(g0%1)[899]
(g1%2)[898]
(g1%2)[907]
(g0%2)[897]
(g1%2)[894]
(g0%1)[912]
(g1%2)[908]
(g0%2)[914]
(g0%1)[922]
(g0%1)[915]
(g0%1)[913]
(g1%2)[924]
(g1%2)[928]
(g1%2)[925]
(g1%2)[920]
(g1%2)[913]
(g0%2)[911]
(g0%1)[944](g0%1)[951](g0%1)[954](g0%1)[955]
(g1%2)[951]
(g0%2)[956]
(g1%2)[946]
(g1%2)[943]
(g0%2)[933]
(g0%2)[928]
(g0%1)[936]
(g1%2)[936]
(g0%2)[924]
(g0%1)[931]
(g1%2)[933]
(g0%2)[928]
(g1%2)[935]
(g0%2)[959]
(g0%1)[961]
(g1%2)[957]
(g0%2)[952]
(g0%1)[950]
(g0%1)[944]
(g1%2)[951]
(g1%2)[937]
(g1%2)[941]
(g0%2)[947]
(g1%2)[952]
(g0%1)[961]
(g0%1)[973]
(g0%1)[973]
(g1%2)[976]
(g0%1)[992]
(g0%1)[993]
(g1%2)[994]
(g1%2)[980]
(g0%1)[969]
(g0%1)[961](g0%1)[972]
(g0%1)[996]
(g0%1)[996]
--(g0%2)[1017](g1%2)[1018](g1%2)[1019](g1%2)[1020] -- 4350 -13,642,-13,643,-13,644
(g1%2)[1012]
(g0%1)[1006]
(g0%1)[982]
(g0%1)[983]
(g0%1)[974]
(g1%2)[978]
(g0%2)[988]
(g0%2)[986]
(g0%2)[980]
(g1%2)[984]
(g0%1)[988](g0%1)[989](g0%1)[990](g0%1)[991]
(g0%1)[994]
(g1%2)[990]
(g0%2)[1005](g1%2)[1014]
(g0%1)[1008](g0%1)[1009](g0%1)[1012](g0%1)[1019]
(g0%1)[998]
(g0%1)[1005]
(g0%1)[999]
(g1%2)[1003]
(g0%2)[1003]
(g0%2)[1007]
(g0%2)[1006]
(g1%2)[1002]
(g1%2)[1011]
(g0%2)[1005]
(g1%2)[995]
(g0%1)[1004]
(g1%2)[1005]
(g1%2)[999]
(g0%2)[1003]
(g1%2)[989]
(g1%2)[982]
(g1%2)[994]
(g1%2)[989]
(g1%2)[977]
(g1%2)[975]
(g1%2)[956]
(g0%2)[948]
(g0%2)[932]
(g1%2)[924]
(g0%2)[913]
(g0%2)[924]
(g0%2)[911]
(g0%1)[917](g0%1)[920](g0%1)[921]
(g0%1)[916]
(g1%2)[926]
(g0%2)[922]
(g1%2)[928]
(g0%1)[919]
(g0%2)[924]
(g1%2)[916]
(g0%2)[919]
(g0%1)[893] -- 4403 blocks cordership
(g1%2)[904]
(g0%2)[905]
(g0%1)[910]
(g0%2)[894]
(g1%2)[894]
(g1%2)[922]
(g0%1)[913]
(g1%2)[909]
(g0%2)[901]
(g1%2)[899]
(g0%2)[915]
(g1%2)[914](g1%2)[915](g1%2)[916](g0%2)[917](g0%2)[918](g0%2)[919]
(g0%2)[928]
(g1%2)[936]
(g1%2)[935]
(g0%2)[958]
(g0%1)[960]
(g1%2)[963]
(g0%2)[967]
(g0%2)[953]
(g1%2)[948]
(g0%2)[954]
(g0%2)[957]
(g0%1)[961]
(g0%1)[986]
(g1%2)[987]
(g0%2)[986]
(g0%2)[992]
(g1%2)[991]
(g0%2)[980]
(g0%2)[971]
(g0%1)[985]
(g0%2)[996]
(g0%2)[1005]
(g1%2)[1006]
(g0%2)[1004](g0%2)[1005](g1%2)[1008](g1%2)[1009]
(g1%2)[1001]
(g0%2)[1003]
(g0%2)[1015]
(g0%1)[1008]
(g1%2)[1011]
(g0%2)[1019]
(g0%1)[1043]
(g0%2)[1023]
(g1%2)[1024]
(g0%2)[1010]
(g0%2)[1019]
(g1%2)[1001]
(g0%1)[1019]
(g0%1)[1022]
(g0%1)[1018]
(g0%1)[1018]
(g1%2)[1022]
(g1%2)[1014]
(g0%2)[1026]
(g0%2)[1025]
(g1%2)[1017]
(g1%2)[1008]
(g0%2)[1006](g0%2)[1007](g1%2)[1010](g1%2)[1011]
(g1%2)[1010]
(g1%2)[1020]
(g0%1)[1011]
(g1%2)[1007]
(g1%2)[995]
(g1%2)[997]
(g1%2)[1006]
(g1%2)[1004]
(g1%2)[1011]
(g0%2)[1017]
(g0%1)[1007]
(g1%2)[1028]
(g1%2)[1032](g1%2)[1033](g0%2)[1036](g0%2)[1037]
(g1%2)[1038]
(g0%2)[1033]
(g0%1)[1026]
(g1%2)[1022]
(g1%2)[1030]
(g0%2)[1018]
(g1%2)[1028]
(g0%1)[1018]
(g0%1)[1022]
I am really confused now.
The newly finished recipe translated fully from bits to salvo, but the salvo behaves differently than the previous version.
Do you have a tool to translate very separated salvo quickly to lines/compact one? Checking it textually would be much easier ...
and my golly script is really slow for this ... (if i works) ... I would rather change slow replay to report the glider lines and probably check its compatibility with the comments.
Current recipes in the attachment (with different final stacks) ... the sample translation to salvo ... block building and final blinker positioning/stack destroyal were not planned yet.
Slow replay of the recipe (not targeting the initial block) is still in progress to check the comments match the actual stacks.
The translation ... to rle ... in another one.
The StackChangeCost ... is definitely not the final version, but it is at least stable enough to enable finishing the translations ...
... there are places for improvement ... transposition table for "short hash format", SS>S shorter sequence, Fixing templates still reports two bugs in templating # with D what seems harmless. And mainly the division to destroyal / build would help in big stack moves ... which we are lucke were not in our input file ... and location of places where no 1 extrabit crosses boundary during destroyal by dynamic programming is the next level which would be huge speed improvement ... I do not know how much we lost by killing the search whenever one mminute is crosed ...
... end EasyStack cost was codded trying to work well with templated stacks, but templatePrev fixes some templates premaurelly (but safely).
I have not finished the compuation for bottoms 2, 4 or 6 ... to see the bits count difference ... .
Most of these tasks could make the code unstable ... so ... later.
Current version of StackChangeCost\Init.lua:
Code: Select all
-- This module is loaded if a script calls require "StackChangeCost".
-- S,B,P,D,#:SBPD,p:SBP,b:SB,q:BP,r:PD,u:SBD,v:SP,w:BD,x:SD,y:SPD,z:BPD tempate set names
-- in each set creation of the D most was paid rest must be considered
-- SBPDdIHhTtRL #pbqruvwxyz
local g = golly()
local moveCondsFileName = "c:\\Golly\\Lua\\StackChangeCost\\CondBitSequences.txt"
local sc = {}
sc.log = io.open("c:\\Golly\\Lua\\StackChangeCost\\log.txt", "w")
sc.logLevel = -5
sc.searchStartTime = g.millisecs()
sc.searchMinutes = 0
sc.maxLogSeconds = 0
sc.maxLogMinutes = 0
------------------ COMMON FUNCTIONS ----------------
function sc.inttostring(num)
return string.sub(num, 1, string.find(num .. ".", "%.") - 1)
end
function sc.inDelimiters(name, leftDelimiter, rightDelimiter)
return string.match(name, '%' .. leftDelimiter .. '(.-)%' .. rightDelimiter)
end
local function packSixplicates(hashedString)
--g.show("packing "..hashedString)
local ret=''
while (string.len(hashedString)>0) do
local chr=string.sub(hashedString,1,1)
local cnt=1
while (string.sub(hashedString,cnt+1, cnt+1)==chr) do
cnt=cnt+1
end
if (cnt>5) then
ret=ret.."("..chr.."^"..sc.inttostring(cnt)..")"
else
for i=1,cnt do
ret=ret..chr
end
end
hashedString=string.sub(hashedString,cnt+1)
end
hashedString,ret=ret,''
while (string.len(hashedString)>0) do
local chrchr=string.sub(hashedString,1,2)
local cnt=1
while (string.sub(hashedString,2*cnt+1, 2*cnt+2)==chrchr) do
cnt=cnt+1
end
if (cnt>6) then
ret=ret.."(("..chrchr..")^"..sc.inttostring(cnt)..")"
else
for i=1,cnt do
ret=ret..chrchr
end
end
hashedString=string.sub(hashedString,2*cnt+1)
end
return ret
end
function sc.writeLog(msg, level)
local time = g.millisecs()
if time-sc.searchStartTime>60000 then
local minAdd=(time-sc.searchStartTime)//60000
sc.searchStartTime=sc.searchStartTime+60000*minAdd
sc.searchMinutes=sc.searchMinutes+minAdd
end
time=(time-sc.searchStartTime)//1000
if sc.log and ((not level and sc.logLevel <= 0) or (level and level >= sc.logLevel)) then
sc.log:write(string.sub(" " .. sc.inttostring(sc.searchMinutes).."m "..string.sub("0"..sc.inttostring(time),-2), -8) .. "s " .. packSixplicates(msg) .. "\n")
end
end
local function traceFullEcho(maxdepth, maxwidth, maxtableelements, ...)
-- Some docs are in order:
--
local tracedebug = false
local functionsource= true
maxdepth = maxdepth or 16
maxwidth = maxwidth or 10
maxtableelements = maxtableelements or 6 -- max amount of elements to expand from table type values
local function dbgt(t, maxtableelements)
local count = 0
local res = debug.traceback()..'\n'
for k,v in pairs(t) do
count = count + 1
if count < maxtableelements then
if type(k) == "number" and type(v) == "function" then -- try to get function lists?
res = res .. tostring(k) .. ':' .. ((debug.getinfo(v) and debug.getinfo(v).name) or "<function>") ..', '
else
res = res .. tostring(k) .. ':' .. tostring(v) ..', '
end
end
end
res = '{'..res .. '}[#'..count..']'
return res
end
local myargs = {...}
local infostr = ""
for i,v in ipairs(myargs) do
infostr = infostr .. tostring(v) .. "\t"
end
if infostr ~= "" then infostr = "Trace:[" .. infostr .. "]\n" end
local functionstr = "" -- "Trace:["
for i = 2, maxdepth do
if debug.getinfo(i) then
local funcName = (debug and debug.getinfo(i) and debug.getinfo(i).name)
if funcName then
functionstr = functionstr .. tostring(i-1) .. ": " .. tostring(funcName) .. " "
local arguments = ""
local funcName = (debug and debug.getinfo(i) and debug.getinfo(i).name) or "??"
if funcName ~= "??" then
if functionsource and debug.getinfo(i).source then
local source = debug.getinfo(i).source
if string.len(source) > 128 then source = "sourcetoolong" end
functionstr = functionstr .. " @" .. source
end
if functionsource and debug.getinfo(i).linedefined then
functionstr = functionstr .. ":" .. tostring(debug.getinfo(i).linedefined)
end
for j = 1, maxwidth do
local name, value = debug.getlocal(i, j)
if not name then break end
local sep = ((arguments == "") and "") or "; "
if tostring(name) == 'self' then
arguments = arguments .. sep .. ((name and tostring(name)) or "name?") .. "=" .. tostring("??")
else
local newvalue
if maxtableelements > 0 and type({}) == type(value) then newvalue = dbgt(value, maxtableelements) else newvalue = value end
arguments = arguments .. sep .. ((name and tostring(name)) or "name?") .. "=" .. tostring(newvalue)
end
end
end
functionstr = functionstr .. " Locals:(" .. arguments .. ")" .. "\n"
else
functionstr = functionstr .. tostring(i-1) .. ": ??\n"
end
else break end
end
sc.writeLog(infostr .. functionstr)
end
------------------ END COMMON FUNCTIONS ----------------
------------------ ARM MOVES ------------------
sc.tries = {};--addressed by hadron.id (by top hadron on the stack)
sc.trieNodeCount = 11
local hadrons = { 'B', 'D', 'd', 'S', 'P', 'T', 't', 'I', 'H', 'h', '0' } -- L,R,1,2 not here
for i = 1, #hadrons do
sc.tries[hadrons[i]] = {}
end
function sc.conditionsToString(conditions)
local postConitions, ret
if #conditions == 0 then
g.note("no conditions?")
return "{:}"
end
if #conditions < 2 then
ret = "{:"
else
ret = "{" .. conditions[1] .. ":"
end
ret = ret .. conditions[#conditions][1]
for j = 2, #conditions[#conditions] do
ret = ret .. "," .. conditions[#conditions][j]
end
ret = ret .. "}"
return ret
end
function sc.parseMove(moveConds)
sc.writeLog("parseMove(" .. moveConds .. ")", -2)
local function split(str, delim)
local ret, l, p = {}, 1, nil
str = str or ''
while l <= 1 + string.len(str) do
p = string.find(str .. delim, '%' .. delim, l)
ret[1 + #ret], l = string.sub(str, l, p - 1), p + 1
end
return ret
end
local preStack, postStack, conds, pos, bits, move, glider
pos, conds = string.find(moveConds .. '{', '%{'), ""
conds = string.sub(moveConds, pos + 1, string.find(moveConds .. '}', '%}') - 1)
conds = split(conds, ':')
conds[2] = split(conds[2], ',')
move = string.sub(moveConds, 1, pos - 1)
pos = string.find(move, '%]')
preStack = string.sub(move, 2, pos - 1)
bits = string.sub(move, pos + 1)
pos = string.find(bits, '%[')
postStack = string.sub(bits, pos + 1, -2)
bits = string.sub(bits, 1, pos - 1)
glider, pos = '', string.find(bits, '%(')
if pos then
glider = sc.inDelimiters(bits, '(', ')')
bits = string.sub(bits, 1, pos - 1) .. string.sub(bits, string.find(bits, '%)') + 1)
end
return bits, move, conds, preStack, postStack, glider
end
local function noEmissionTrieInsert(moveConds)
local bits, move, conds, preStack, postStack, glider = sc.parseMove(moveConds)
sc.writeLog('noEmissionTrieInsert(' .. moveConds .. ') ', -1)
if glider ~= "" then
--emission
return
end
if string.find(postStack, '[LR]') then
--emission
return
end
-- actually we do not need stack bottom repositioning sequences, but it is hard to eliminate them
-- it was eliminated by preprocessing of stack sequences -:)
local preStackLen, bitLen = string.len(preStack), string.len(bits)
local node, nextNode, info, nextInfo = sc.tries[string.sub(conds[1], 1, 1)], sc.tries[string.sub(preStack, 1, 1)], string.sub(conds[1], 1, 1), string.sub(preStack, 1, 1)
if conds[1] == "" then
node, nextNode, info, nextInfo = nextNode, nil, nextInfo, nil
end
while node do
sc.writeLog(" inserting into trie " .. info, -2)
for i = 1, string.len(bits) do
local j = string.sub(bits, i, i)
if not string.find('012', j) or ((i > 1) and j == "0") then
sc.writeLog("noEmissionTrieInsert wrong character bits " .. bits .. " at position " .. i .. " " .. string.sub(bits, i, i), 10)
end
if not node.minPreStackLen or node.minPreStackLen > preStackLen then
node.minPreStackLen = preStackLen --prevents following the branch in nextOutGoingEdge
end
if not node.minBitLen or node.minBitLen > bitLen then
node.minBitLen = bitLen --planned to prevent following the branch in nextOutGoingEdge but cost lowerbound is more effective
end
j = j + 0
if j == 0 then
node, nextNode, info, nextInfo = sc.tries['0'], nil, '0', nil -- exception simplifying 0# processing
else
if node[j] == nil then
node[j], sc.trieNodeCount = {}, sc.trieNodeCount + 1
end
node = node[j]
end
end
if not node.minPreStackLen or node.minPreStackLen > preStackLen then
node.minPreStackLen = preStackLen
end
if not node.minBitLen or node.minBitLen > bitLen then
node.minBitLen = bitLen
end
if not node.moveConds then
node.moveConds = {}
end
node.moveConds[#node.moveConds + 1] = moveConds
node, nextNode, info, nextInfo = nextNode, nil, nextInfo, nil
conds[1] = "";
moveConds = move .. sc.conditionsToString(conds) -- to speedup matching the above need not be checked
end
return true
end
local function iniTrie()
sc.writeLog('InitTrie()')
local h = io.open(moveCondsFileName, "r")
--local o=io.open(moveCondsFileName2,"w") -- used to prefilter general conditioned sequence file
local moveCondsLine = h:read()
while moveCondsLine do
if noEmissionTrieInsert(string.sub(moveCondsLine, 5)) then
--o:write(moveCondsLine.."\n")
end
moveCondsLine = h:read()
end
h:close()
--o:close()
end
iniTrie()
------------------ END ARM MOVES ------------------
-------------------- TEMPLATE CHARS/SETS ----------------------
-- S,B,P,D,#:SBPD,p:SBP,b:SB,q:BP,r:PD,u:SBD,v:SP,w:BD,x:SD,y:SPD,z:BPD template set names
-- 11111111
-- 123456701234567
local bin2templates = 'SBbPvqpDxwuryz#'
function sc.costSp1isSBPD(stackTemplateChar)
if stackTemplateChar and stackTemplateChar~='' then
local isD=string.find('Drwxzyu#',stackTemplateChar)
local isP=string.find('Ppqvrzy#',stackTemplateChar)
local isB=string.find('Bbpqwzu#',stackTemplateChar)
local isS=string.find('Sbpvxyu#',stackTemplateChar)
local e=(isD and 'D') or (isP and 'P') or (isB and 'B') or stackTemplateChar
return string.find('SBPD',e),isS,isB,isP,isD
end
end
--unfortunatelly there is no trivial bitwise arithmetics in lua to use char->bin->char tricks easilly
function sc.templateChar2bin(stackTemplateChar) return string.find(bin2templates,stackTemplateChar) end
function sc.templateSetSize(stackTemplateChar)
local bin=sc.templateChar2bin(stackTemplateChar)
return bin and 0+string.sub('112122312232334',bin,bin)
end
function sc.templateCharNotUnique(stackTemplateChar)
local size = sc.templateSetSize(stackTemplateChar)
return (size and size>1 and stackTemplateChar) or ''
end
function sc.templateCharNotUniqueBackwardMark(stackTemplateChar)
local size = sc.templateSetSize(stackTemplateChar)
return (size and size>1 and ('\\'..stackTemplateChar)) or ''
end
function sc.bin2templateChar(bin)
return bin>0 and string.sub(bin2templates ,bin, bin)
end
function sc.isAChartemplatingBChar(AChar, BChar)
local costA,isAS,isAB,isAP,isAD=sc.costSp1isSBPD(AChar)
local costB,isBS,isBB,isBP,isBD=sc.costSp1isSBPD(BChar)
return costA and costB and (isBS or not isAS) and (isBB or not isAB) and (isBP and not isAP) and (isBD or not isAD) and (costB - costA)
end
local function templateRemoveS(stackTemplateChar)
local bin=sc.templateChar2bin(stackTemplateChar)
local odd = bin and bin % 2
sc.writeLog("templateRemoveS("..(stackTemplateChar or "nil")..")"..(bin or "nil").." "..(odd or "nil"),-6)
bin = bin and bin-odd
return sc.bin2templateChar(bin)
end
local function templateRemoveB(isB,stackTemplateChar)
-- 'Bbpqwzu#'
sc.writeLog("templateRemoveB("..(isB or "nil")..","..(stackTemplateChar or "nil")..")",-6)
local ret = (isB and string.sub(' SvPDrxy',isB,isB)) or stackTemplateChar
return (ret~=" " and ret)
end
local function templateRemoveP(isP,stackTemplateChar)
-- 'Ppqvrzy#'
sc.writeLog("templateRemoveP("..(isP or "nil")..","..(stackTemplateChar or "nil")..")",-6)
local ret = (isP and string.sub(' bBSDwxu',isP,isP)) or stackTemplateChar
return (ret~=" " and ret)
end
local function templateRemoveD(stackTemplateChar)
local bin=sc.templateChar2bin(stackTemplateChar)
sc.writeLog("templateRemoveS("..(stackTemplateChar or "nil")..")"..(bin or "nil"),-6)
bin = bin and bin % 8
return sc.bin2templateChar(bin)
end
local function templateMaxSingle(stackTemplateChar,costS)
costS = costS or sc.costSp1isSBPD(stackTemplateChar)
return costS and ((costS==4 and 'D') or (costS==3 and 'P') or (costS==2 and 'B') or 'S')
end
local function templateSingleTryAvoidP(stackTemplateChar)
local costS,isS,isB,isP,isD=sc.costSp1isSBPD(stackTemplateChar)
return costS and (isD and 'D') or (isB and 'B') or (isS and 'S') or 'P'
end
--returns nil if empty intersection (or any input char not from # set)
-- otherwise interprets as sets, intersects and returns set as char
local function intersectTemplatingChars(AChar,BChar)
local costA,isAS,isAB,isAP,isAD=sc.costSp1isSBPD(AChar)
local costB,isBS,isBB,isBP,isBD=sc.costSp1isSBPD(BChar)
if costA and costB then
local bin=((isAS and isBS and 1) or 0)
+ ((isAB and isBB and 2) or 0)
+ ((isAP and isBP and 4) or 0)
+ ((isAD and isBD and 8) or 0)
return sc.bin2templateChar(bin)
end
end
--intersects with <= max A and >= min B returns nil when no intersection
local function intersectTemplatingCharsAdecB(AChar,BChar)
local re,rm,e,m=AChar,BChar,AChar,BChar
local costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
local costeS,iseS,iseB,iseP,iseD=sc.costSp1isSBPD(e)
sc.writeLog("intersectTemplatingCharsAdecB("..(AChar or "nil")..","..(BChar or "nil")..")"
.." costS.. e "..(costeS or "nil")..(iseS or "nil")..(iseB or "nil")..(iseP or "nil")..(iseD or "nil")
.." costS.. m"..(costmS or "nil")..(ismS or "nil")..(ismB or "nil")..(ismP or "nil")..(ismD or "nil")
,-6)
if not ismS then
re=templateRemoveS(re)
local costreS,isreS,isreB,isreP,isreD=sc.costSp1isSBPD(re)
sc.writeLog("intersectTemplatingCharsAdecB(reS)"..(re or "nil")
.." costS.. re "..(costreS or "nil")..(isreS or "nil")..(isreB or "nil")..(isreP or "nil")..(isreD or "nil")
,-7)
if not ismB then
re=templateRemoveB(isreB,re)
costreS,isreS,isreB,isreP,isreD=sc.costSp1isSBPD(re)
sc.writeLog("intersectTemplatingCharsAdecB(reB)"..(re or "nil")
.." costS.. re "..(costreS or "nil")..(isreS or "nil")..(isreB or "nil")..(isreP or "nil")..(isreD or "nil")
,-7)
if not ismP then
re=templateRemoveP(isreP,re)
sc.writeLog("intersectTemplatingCharsAdecB(reB)"..(re or "nil"),-7)
end
end
end
if costeS<4 then
rm=templateRemoveD(rm)
if costeS<3 then
rm=templateRemoveP(ismP,rm)
if costeS<2 then
rm=templateRemoveB(ismB,rm)
end
end
end
return re,rm
end
--returns nil if empty intersection (or any input char not from # set)
-- otherwise interprets as sets, intersects and returns set as char
local function intersectTemplatingCharWithDec(AChar)
local costA,isAS,isAB,isAP,isAD=sc.costSp1isSBPD(AChar)
if costA then
local bin=((isAS and isAB and 1) or 0)
+ ((isAB and isAP and 2) or 0)
+ ((isAP and isAD and 4) or 0)
return sc.bin2templateChar(bin)
end
end
--returns nil if empty intersection (or any input char not from # set)
-- otherwise interprets as sets, intersects and returns set as char
local function intersectTemplatingCharWithDec2(AChar)
local costA,isAS,isAB,isAP,isAD=sc.costSp1isSBPD(AChar)
if costA then
local bin=((isAS and isAP and 1) or 0)
+ ((isAB and isAD and 2) or 0)
return sc.bin2templateChar(bin)
end
end
--returns nil if empty intersection (or any input char not from # set)
-- otherwise interprets as sets, intersects and returns set as char
local function intersectTemplatingCharWithDec3(AChar)
local costA,isAS,isAB,isAP,isAD=sc.costSp1isSBPD(AChar)
if costA then
local bin=((isAS and isAD and 1) or 0)
return sc.bin2templateChar(bin)
end
end
--[[ using Dec is safe, but S^*# has several results and we use "principal" one this could miss optimal branches in follow up
-- but we are happy to be "close" to optimum
local function templateDec(stackTemplateChar)
local ind = string.find('#zyruwx#pqvPbBS',stackTemplateChar)
return ind and string.sub('zrwDqPB#zrwDqPB',ind,ind)
end --]]
--[[ there is overflow from S! ... but the owerflow is just from S, ending in S #D+1=pD cup SP what is difficult to deal with
-- unless we use E for S with owerflow doubling the number of states and F for E with overflow ...
local function templateInc(stackTemplateChar)
local indT,indO = string.find('#zyruwxDpqvPbBS',stackTemplateChar),string.find('#yuxpvbS',stackTemplateChar) --indO > 0 == indS > 0 ... the overflow neednot be here
return indT and string.sub('pppqvvvPbbbBSSS',indT,indT), indO and 1
end --]]
--removes templatingComments
--returns cleanBits
function sc.bitsRemoveInfo(bits)
return string.gsub(bits,'[^12]','')
end
------------------ END OF TEMPLATE CHARS/SETS ---------------------
------------------ TEMPLATE STRING FUNCTIONS ----------------------
function sc.replaceTailChar(str,chr,tailPos)
--sc.writeLog(debug.traceback(),-5)
local x=intersectTemplatingChars(chr,string.sub(str,-tailPos,-tailPos))
if x~=chr then
sc.writeLog("replaceTailChar("..(str or "nil")..","..(chr or "nil")..","..(tailPos or "nil").."), char is not templating the string!!!"
.. string.sub(str,1,-tailPos-1)..">"..string.sub(str,-tailPos,-tailPos)..">"..(tailPos==1 and "" or string.sub(str,-tailPos+1)),10)
sc.writeLog(debug.traceback(),10)
end
sc.writeLog("replaceTailChar("..(str or "nil")..","..(chr or "nil")..","..(tailPos or "nil")..")",-5)
return string.sub(str, 1,-tailPos-1)..chr..(((tailPos==1) and '') or string.sub(str,-tailPos+1))
end
-- length of the suffix consisting entirely of subsets of #
function sc.SBPDlen(stack)
for i=1,string.len(stack) do
local cost=sc.costSp1isSBPD(string.sub(stack, -i,-i))
if not cost then
return i-1
end
end
return string.len(stack)
end
function sc.EQTemplateTailLen(stackA,stackB)
local lenA, lenB = string.len(stackA), string.len(stackB)
local minLen = (lenA<lenB) and lenA or lenB
for i=1,minLen do
local a,b = string.sub(stackA, -i,-i), string.sub(stackB, -i,-i)
local costaS=sc.costSp1isSBPD(a)
if not costaS or a~=b then
return i-1
end
end
return minLen
end
--is A stack valid templatation of B stack (incuding condition P if preceded must be preceded by S)
-- returns templating cost or false
function sc.isEqualUptoBTemplates(aStack, BStack)
local cost=0
if string.len(aStack)~=string.len(BStack) then
return false
end
local aChar,prevAChar
for i=1,string.len(aStack) do
aChar,prevAChar=string.sub(aStack,i,i),aChar
local charCost=sc.isAChartemplatingBChar(aChar,string.sub(BStack,i,i))
if charCost then
if aChar=='P' and prevAChar and prevAChar ~= 'S' then
return false
end
cost = cost + charCost
else
return false
end
end
return cost
end
-- stackStartSubst should differ from stackStartPreSubst by just some templating set sizes reduced
-- it is not checked here!
-- returns startTemplatingcost, stackStartSubst variability
-- variability is not important, but we want to have for propper subset a smaller variability
function sc.templatingCost(stackStartSubst, stackStartPreSubst)
sc.writeLog("templatingCost(stackStartSubst " .. (stackStartSubst or "nil")
.. ", stackStartPreSubst " .. (stackStartPreSubst or "nil")..")")
local ret,var = 0,0
for i = 1, string.len(stackStartPreSubst) do
local s,p = string.sub(stackStartSubst, -i, -i), string.sub(stackStartPreSubst, -i, -i)
local costsS=sc.costSp1isSBPD(s)
local costpS=sc.costSp1isSBPD(p)
if costpS then
ret,var = ret + costpS - costsS, var+sc.templateSetSize(s)
end
end
return ret,var
end
local function replaceStackPairTailChar(chr,tailPos,eqSuffixLen,mainStack,dependantStack)
return sc.replaceTailChar(mainStack,chr,tailPos),
(tailPos<=eqSuffixLen and sc.replaceTailChar(dependantStack,chr,tailPos)) or dependantStack
end
--returns stack
function sc.CopyTemplating(stack,stackPreSubstPattern,stackSubstPattern)
sc.writeLog("CopyTemplating(["..stack.."],["..stackPreSubstPattern.."],["..stackSubstPattern.."])",-2)
local len,lenPattern=string.len(stack),string.len(stackPreSubstPattern)
len = (len<lenPattern) and len or lenPattern
for i=1,len do
local p,s,x=string.sub(stackPreSubstPattern,-i,-i),string.sub(stackSubstPattern,-i,-i),
string.sub(stack,-i,-i)
if p~=x then
break
end
if p~=s then
stack=sc.replaceTailChar(stack,s,i)
end
end
return stack
end
----------------END OF TEMPLATE STRING FUNCTIONS ------------------
--no change in startStackSubst
--returns cost, stackMid, bitsMid2TargetSubst, stackTargetSubst
-- bits transform from stackMid to stackTargetSubst (except templating) (S->*6 finish)
function sc.topStackCost(stackStartSubst,stackTargetSubst)
sc.writeLog("topStackCost(".. stackStartSubst .. "," .. stackTargetSubst .. ")",0)
local e1,o1 = string.sub(stackStartSubst,1,1), string.sub(stackTargetSubst,1,1)
local coste1S=sc.costSp1isSBPD(e1)
local costo1S=sc.costSp1isSBPD(o1)
local cost,bits = sc.isEqualUptoBTemplates(string.sub(stackStartSubst,2), string.sub(stackTargetSubst,2))
if cost then --trivi case (B6d6 -> S6d6 rather to B6d6 -> S -> S6d6)
if not coste1S or not costo1S then -- T6 not implemented yet
return 0, stackTargetSubst, '', stackTargetSubst
end
if costo1S<=coste1S then
-- we change target so we do not pay cost now
return 0, o1..string.sub(stackStartSubst,2), '', o1..string.sub(stackStartSubst,2)
end
end
-- now we know we should change something before we can proceed
if string.sub(stackTargetSubst,2,4)=='6d6' and string.sub(stackTargetSubst,5,5) ~= 'P' then
if costo1S and costo1S<4 then
return 4-costo1S, "S"..string.sub(stackTargetSubst,5), string.sub('211',1, 4-costo1S), stackTargetSubst
end
end
if string.sub(stackTargetSubst,1,5)=='T6SPD' then -- we do not need other variants (T6SP alone would be OK)
return 22, 'SSDD'..string.sub(stackTargetSubst,6), '1211121111111211121121', stackTargetSubst
end
return 0, stackTargetSubst, '', stackTargetSubst
end
-- looking for common portion of stacks changing both stackStartSubst+stackEasy and stackMid-stackTargetSubst to such stacks that
-- suffixDist 1's will convert suffix of stackEasy to the original stackMid (template compatible)
-- returns costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
-- (how many 1's have to cross commonSuffixLen boundary to reach stackTargetSubst suffix from stackStartSubst suffix)
-- templating done on target will be paid (and determined) latter
function sc.templatePrev(stackStartSubst, stackEasy, stackMid, stackTargetSubst)
sc.writeLog("templatePrev(".. stackStartSubst .. "," .. stackEasy .. "," .. stackMid ..
"," .. stackTargetSubst .. ")",0)
local midTargetEqSuffixLen = sc.EQTemplateTailLen(stackMid,stackTargetSubst)
local startEasyEqSuffixLen = sc.EQTemplateTailLen(stackStartSubst,stackEasy)
-- I am not sure with concretization of stackStartSubst, when it is longer than stackEasy,
-- maybe its start should be concretized to a decremented value
local function replaceEasyTailChar(chr,tailPos)
stackEasy,stackStartSubst=replaceStackPairTailChar(chr,tailPos,startEasyEqSuffixLen,stackEasy,stackStartSubst)
end
local function replaceMidTailChar(chr,tailPos)
stackMid,stackTargetSubst=replaceStackPairTailChar(chr,tailPos,midTargetEqSuffixLen,stackMid,stackTargetSubst)
end
local delayedI -- while we do not know if the position would be in 1's suffix range, we just intersect and make easy incrementable to mid
-- than it is replaced by max mid if not reachable or max incrementable to mid if reachable
local costStartPreSubst2StartSubst,suffixDist=0,0
-- i the posiion which cannot be 1 crossed
local function delayedUnreachable(i)
sc.writeLog("delayedUnreachable("..i..")("..(delayedI or "nil")..")"..suffixDist,0)
if delayedI then
local e,m=string.sub(stackEasy, -delayedI,-delayedI),string.sub(stackMid, -delayedI,-delayedI)
local x=intersectTemplatingChars(m,e)
if x then
if x~=m then -- removing empty action to short logging
replaceMidTailChar(x,delayedI)
end
if x~=e then -- removing empty action to short logging
replaceEasyTailChar(x,delayedI)
end
local costxS=sc.costSp1isSBPD(x)
local costeS=sc.costSp1isSBPD(e)
costStartPreSubst2StartSubst=costStartPreSubst2StartSubst+(costeS-costxS)
end
x='S' -- already checked it is the intersection
for j=delayedI+1,i-1 do
local e,m=string.sub(stackEasy, -j,-j),string.sub(stackMid, -j,-j)
if x~=m then -- removing empty action to short logging
replaceMidTailChar(x,j)
end
if x~=e then -- removing empty action to short logging
replaceEasyTailChar(x,j)
local costeS=sc.costSp1isSBPD(e)
costStartPreSubst2StartSubst=costStartPreSubst2StartSubst+(costeS-1)
end
end
delayedI=nil
end
end
--from i the 1's could reach delayedI (through "S's")
local function delayedReachable(i)
sc.writeLog("delayedReachable("..i..")("..(delayedI or "nil")..")"..suffixDist,0)
if delayedI then
suffixDist=0 --we are recalculating it from delayedI to i
local m,e=string.sub(stackMid, -delayedI,-delayedI),string.sub(stackEasy, -delayedI,-delayedI)
local re,rm=intersectTemplatingCharsAdecB(e,m)
local costeS=sc.costSp1isSBPD(e)
local costrmS,isrmS,isrmB,isrmP,isrmD=sc.costSp1isSBPD(rm)
if rm~='P' and isrmP then
rm=templateRemoveP(isrmP,rm)
end
local re,rm=intersectTemplatingCharsAdecB(re,rm)
local x=templateSingleTryAvoidP(re) --required?
local y=templateSingleTryAvoidP(rm) --required?
local costxS=sc.costSp1isSBPD(x)
local costyS=sc.costSp1isSBPD(y)
suffixDist = suffixDist + costxS-costyS
if y~=m then -- removing empty action to short logging
replaceMidTailChar(y,delayedI)
end
if x~=e then
replaceEasyTailChar(x,delayedI)
end
costStartPreSubst2StartSubst=costStartPreSubst2StartSubst+(costeS-costxS)
x='S' -- already checked it is the intersection
for j=delayedI+1,i-1 do
sc.writeLog("j "..j.." "..suffixDist,-5)
local e,m=string.sub(stackEasy, -j,-j),string.sub(stackMid, -j,-j)
local re,rm=intersectTemplatingCharsAdecB(e,m)
local costeS=sc.costSp1isSBPD(e)
if x~=m then -- removing empty action to short logging
replaceMidTailChar(x,j)
end
local y=templateSingleTryAvoidP(re) --required?
local costyS=sc.costSp1isSBPD(y)
if y~=e then -- removing empty action to short logging
replaceEasyTailChar(y,j)
costStartPreSubst2StartSubst=costStartPreSubst2StartSubst+(costeS-costyS)
end
sc.writeLog("y "..y.." "..costyS.." re "..re.." rm "..rm.." e "..e.." m "..m)
suffixDist = suffixDist + costyS-1
end
delayedI=nil
end
end
local commonSuffixLen,easySBPDlen,eqSuffixLen = string.len(stackMid),sc.SBPDlen(stackEasy)
for i=1,string.len(stackMid) do
sc.writeLog("templatePrev ".. i,-8)
if i>=easySBPDlen then
commonSuffixLen=i-1
sc.writeLog("templatePrev A commonSuffixLen=".. commonSuffixLen,-2)
break
elseif i>startEasyEqSuffixLen then
commonSuffixLen = i-1
sc.writeLog("templatePrev B commonSuffixLen=" .. commonSuffixLen,-2)
break
end
local e,m=string.sub(stackEasy, -i,-i),string.sub(stackMid, -i,-i)
local costeS,iseS,iseB,iseP,iseD=sc.costSp1isSBPD(e)
local costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
if suffixDist>0 then
if not ismS or not costeS then
commonSuffixLen = i-1
sc.writeLog("templatePrev C commonSuffixLen=" .. commonSuffixLen,-2)
break
else
if m~='S' then
replaceMidTailChar('S',i)
end
suffixDist = suffixDist + costeS-1
end
else
local re,rm=intersectTemplatingCharsAdecB(e,m)
sc.writeLog("e "..(e or "nil").." m "..(m or "nil").." re "..(re or "nil").." rm "..(rm or "nil"),-5)
if re then --m reachable from e
local costreS,isreS,isreB,isreP,isreD=sc.costSp1isSBPD(re)
local costrmS,isrmS,isrmB,isrmP,isrmD=sc.costSp1isSBPD(rm)
local x=intersectTemplatingChars(e,m)
if x then
if x~='S' then -- e,m should be updated during delayedProcessing
delayedUnreachable(i)
delayedI=i
end
else
eqSuffixLen = i-1
if m~='S' then
delayedUnreachable(i)
end
local y=templateSingleTryAvoidP(rm)
if y~=m then
replaceMidTailChar(y,i)
end
local z=templateSingleTryAvoidP(re)
if z~=e then
replaceEasyTailChar(z,i)
end
local costyS,isyS,isyB,isyP,isyD=sc.costSp1isSBPD(y)
local costzS,iszS,iszB,iszP,iszD=sc.costSp1isSBPD(z)
costStartPreSubst2StartSubst=costStartPreSubst2StartSubst+(costzS-costeS)
suffixDist = costzS-costyS
end
else
commonSuffixLen = i-1
sc.writeLog("templatePrev E commonSuffixLen=" .. commonSuffixLen,-2)
break
end
end
end
delayedReachable(commonSuffixLen+1)
sc.writeLog("csl "..commonSuffixLen.." dI "..(delayedI or "nil").." sd "..suffixDist,-2)
--commonSuffixLen=(delayedI and commonSuffixLen>=delayedI and delayedI-1) or commonSuffixLen
return costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen or commonSuffixLen
end --sc.templatePrev
-- expecting SBPD stack standard distances
local function stackIncrement(stack,inc)
local incPos=1
while inc>0 do
local c=string.sub(stack,incPos,incPos)
local costcS=sc.costSp1isSBPD(c)
if inc <= costcS-1 then
local costxS = costcS - inc
stack=string.rep('S',incPos-1)..string.sub("SBPD", costxS, costxS)..string.sub(stack,incPos+1)
break
end
inc=inc - (costcS-1)
incPos = incPos+1
end
return stack
end
--returns shortSearchHash, midSearchHash, bestCost, message (which hash was used if any)
local function results2bestCost(stackStartSubst,stackMid,commonSuffixLen,suffixDist,eqSuffixLen,costStartPreSubst2StartSubst) --to be used in both changeStackCost and easyChangeStackCost
sc.writeLog("results2bestCost("..stackStartSubst..","..stackMid..","..commonSuffixLen..","..suffixDist..","..eqSuffixLen..","..costStartPreSubst2StartSubst..")",-2)
local shortSearchHash=packSixplicates(string.sub(stackStartSubst..'_',1,-commonSuffixLen-1)..">"
..string.sub(stackMid..'_',1,-commonSuffixLen-1).."S"..suffixDist)
local midSearchHash=packSixplicates(string.sub(stackStartSubst..'_',1,-eqSuffixLen-1)..">"
..string.sub(stackMid..'_',1,-eqSuffixLen-1).."M"..suffixDist)
local bestCost, message
local stackprefixStartSubst,stackprefixEasy,stackprefixMid
local result = sc.results[shortSearchHash]
local midInc=0
if result and false then -- not using S hits till we make them reliable todo
message = 'S hash hit ['..shortSearchHash..']'
stackprefixStartSubst,stackprefixEasy,stackprefixMid=result.stackprefixStartSubst,result.stackprefixEasy,result.stackprefixMid
if commonSuffixLen>eqSuffixLen then ---???
stackprefixStartSubst = string.sub(stackprefixStartSubst,1,-1 - (commonSuffixLen-eqSuffixLen))
stackprefixEasy = string.sub(stackprefixEasy,1, -1 - (commonSuffixLen-eqSuffixLen))
stackprefixMid = string.sub(stackprefixMid, 1, -1 - (commonSuffixLen-eqSuffixLen))
end
midInc=suffixDist
else
result = sc.results[midSearchHash]
if result then
message = 'M hash hit ['..midSearchHash..']'
stackprefixStartSubst,stackprefixEasy,stackprefixMid=result.stackprefixStartSubst,result.stackprefixEasy,result.stackprefixMid
end
end
if result then
sc.writeLog('Hashed result ..' .. result.costStartSubst2Mid .. "(+" .. costStartPreSubst2StartSubst .. ")["
.. result.stackprefixStartSubst .. "]>'" .. result.bitsStartSubst2Easy .. "'>[" .. result.stackprefixEasy .. "]>'"
.. result.tbitsEasy2Mid .. "'>[" .. result.stackprefixMid.."]",3)
bestCost={}
--prolong stacks to correct lengths first comonsuffixlen should be computed and result between common and equal tail ignored
local stackTail=string.sub(stackStartSubst,1+string.len(stackprefixStartSubst))
bestCost.costStartPreSubst2Mid = costStartPreSubst2StartSubst + result.costStartSubst2Mid
bestCost.costStartPreSubst2StartSubst = costStartPreSubst2StartSubst
bestCost.stackStartSubst = stackprefixStartSubst..stackTail
bestCost.bitsStartSubst2Easy = result.bitsStartSubst2Easy
bestCost.stackEasy = stackprefixEasy..stackTail
bestCost.tbitsEasy2Mid = result.tbitsEasy2Mid
bestCost.stackMid = stackprefixMid..stackIncrement(stackTail,midInc)
end
return shortSearchHash, midSearchHash, bestCost, message
end
-- we go from w(BD) to b(SB) in "2 steps ...D->B" planning them what seems OK as we could plan the last step to S "latter"
-- we could alternatively change the stratTemplate to B and not using the bits in plan. What is OK as well.
--stackStartSubst contains starting templated stack
--stackMid contains (mid)target templated stack from which transition to stackTargetSubst was already planned
--stackTargetSubst contains target templated stack (stackTargetSubst agrees with stackMid except from the "short start")
--suffixDist number of 1 bits which should cross "commonSuffixLen" bounary to make stackStartSubst suffix equal to stackTargetSubst suffix
-- applies to cases when stackStartSubst has to be shortened
--commonSuffixLen>0 contains length of both stacks suffixes which "neednot" be considered in the computation
-- stacks are extended by "," to ensure the positivity
--returns nil if no easy case is detected
-- otherwise
--returns cost to convert input stackEasy to input stackTargetSubst, bits required for the conversion from output stackEasy to output stackMid
-- stackStartSubst with possible concretization of templates, stackEasy with possible concretization of templates,
-- stackMid with possible concretization of templates, and stackTargetSubst with possible concretization of templates,
-- templating cost from input stackStartSubst to output stackStartSubst (stackEasy)
function sc.easyChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, suffixDist, commonSuffixLen)
-- let us try to slowly extend this to all required cases (stackTargetSubsts corresponding to all emission tabulated stackStartSubsts, condition for stackStartSubsts not known yet)
-- suffixDist ones included in returned bits
-- must return concretized stackStartSubst and stackTargetSubst when tempates were filled
sc.writeLog("easyChangeStackCost(" .. stackStartSubst .. ","
.. stackEasy .. "," .. stackMid .. "," .. stackTargetSubst .. "," .. suffixDist .. "," .. commonSuffixLen .. ")",2)
local eqSuffixLen = sc.EQTemplateTailLen(stackEasy,stackMid)
eqSuffixLen = eqSuffixLen - ((eqSuffixLen==string.len(stackEasy) and 1) or 0)
local shortSearchHash,midSearchHash,bestCost,message = results2bestCost(stackEasy,stackMid,commonSuffixLen,
suffixDist,eqSuffixLen,0)
if bestCost then
stackStartSubst=sc.CopyTemplating(stackStartSubst,stackEasy,bestCost.stackStartSubst)
stackTargetSubst=sc.CopyTemplating(stackTargetSubst,stackMid,bestCost.stackMid)
sc.writeLog("easyChangeStackCost "..message.." returning hashed result "..
bestCost.costStartPreSubst2Mid.."("..bestCost.costStartPreSubst2StartSubst..")"..
bestCost.bitsStartSubst2Easy..bestCost.tbitsEasy2Mid.." ["..stackStartSubst.."]>["..
bestCost.stackStartSubst.."]>'...'>["..bestCost.stackMid.."]>''>["..stackTargetSubst.."]",3)
return bestCost.costStartPreSubst2Mid,
bestCost.bitsStartSubst2Easy..bestCost.tbitsEasy2Mid,
stackStartSubst, bestCost.stackStartSubst, bestCost.stackMid, stackTargetSubst, bestCost.costStartPreSubst2StartSubst
else
sc.writeLog("no hash Hit ("..shortSearchHash.."/"..midSearchHash..")",-2)
end
sc.easyChangeStackCostErr = stackStartSubst .. ">" .. stackEasy .. ">" .. stackMid.. ">" .. stackTargetSubst
local suffixBits=string.rep('1',suffixDist)
local stackprefixEasy=string.sub(stackEasy,1, -1 - commonSuffixLen)
local stackprefixMid=string.sub(stackMid,1, -1 - commonSuffixLen)
local stacksuffixEasy=string.sub(stackEasy,-commonSuffixLen,(commonSuffixLen==0) and 0 or -1)
local stacksuffixMid=string.sub(stackMid,-commonSuffixLen,(commonSuffixLen==0) and 0 or -1)
local e1=string.sub(stackEasy, 1,1)
local e2=string.sub(stackEasy, 2,2)
local e3=string.sub(stackEasy, 3,3)
local e4=string.sub(stackEasy, 4,4)
local e5=string.sub(stackEasy, 5,5)
local e6=string.sub(stackEasy, 6,6)
local e7=string.sub(stackEasy, 7,7)
local coste1S,ise1S,ise1B,ise1P,ise1D = sc.costSp1isSBPD(e1)
local coste2S,ise2S,ise2B,ise2P,ise2D = sc.costSp1isSBPD(e2)
local coste3S,ise3S,ise3B,ise3P,ise3D = sc.costSp1isSBPD(e3)
local coste4S,ise4S,ise4B,ise4P,ise4D = sc.costSp1isSBPD(e4)
local coste5S,ise5S,ise5B,ise5P,ise5D = sc.costSp1isSBPD(e5)
local coste6S,ise6S,ise6B,ise6P,ise6D = sc.costSp1isSBPD(e6)
local coste7S,ise7S,ise7B,ise7P,ise7D = sc.costSp1isSBPD(e7)
local e = string.sub(stackprefixEasy, -1)
local ee= string.sub(stackprefixEasy, -2,-2)
local eee= string.sub(stackprefixEasy, -3,-3)
local eeee= string.sub(stackprefixEasy, -4,-4)
local eeeee= string.sub(stackprefixEasy, -5,-5)
local ms=string.sub(stacksuffixMid,1,1)
local es=string.sub(stacksuffixEasy,1,1)
local costmsS,ismsS,ismsB,ismsP,ismsD = sc.costSp1isSBPD(ms)
local msm1=ms and intersectTemplatingCharWithDec(ms)
local msm2=ms and intersectTemplatingCharWithDec2(ms)
local msm3=ms and intersectTemplatingCharWithDec3(ms)
local rSuffixDist=(msm3 and 3) or (msm2 and 2) or (msm1 and 1) or 0 -- seems we do not need more than 2
local midTargetEqSuffixLen = sc.EQTemplateTailLen(stackMid,stackTargetSubst)
local startEasyEqSuffixLen = sc.EQTemplateTailLen(stackStartSubst,stackEasy)
-- I am not sure with concretization of stackStartSubst, when it is longer than stackEasy,
-- maybe its start should be concretized to a decremented value
local function replaceEasyTailChar(chr,tailPos)
sc.writeLog("replaceEasyTailChar("..chr..","..tailPos..")["..stackStartSubst.."]>["..stackEasy.."]tail="..startEasyEqSuffixLen)
if chr=='S' then
--sc.writeLog(traceFullEcho())
end
if string.sub(stackEasy,-tailPos,-tailPos)~=chr then
if tailPos>startEasyEqSuffixLen then
sc.writeLog('Replace affecting only Easy but not start ... I am confused',10)
end
stackEasy,stackStartSubst=replaceStackPairTailChar(chr,tailPos,startEasyEqSuffixLen,stackEasy,stackStartSubst)
end
end
local function replaceMidTailChar(chr,tailPos)
if string.sub(stackMid,-tailPos,-tailPos)~=chr then
stackMid,stackTargetSubst=replaceStackPairTailChar(chr,tailPos,midTargetEqSuffixLen,stackMid,stackTargetSubst)
end
end
-- it was already tested that this variant succeeds
local function inc3SuffixDist() --suffixDist + rSuffixDist > 0
suffixDist,suffixBits=3+suffixDist,suffixBits..'111'
replaceMidTailChar(msm3,commonSuffixLen)
end
-- it was already tested that some variant succeeds
local function inc2SuffixDist() --suffixDist + rSuffixDist > 0
if msm2 then
suffixDist,suffixBits=2+suffixDist,suffixBits..'11'
replaceMidTailChar(msm2,commonSuffixLen)
else
inc3SuffixDist()
end
end
-- it was already tested that some variant succeeds
local function incSuffixDist() --suffixDist + rSuffixDist > 0
if msm1 then
suffixDist,suffixBits = 1+suffixDist,suffixBits..'1'
replaceMidTailChar(msm1,commonSuffixLen)
else
inc2SuffixDist()
end
end
local costeS,iseS,iseB,iseP,iseD = sc.costSp1isSBPD(e)
local costeeS,iseeS,iseeB,iseeP,iseeD = sc.costSp1isSBPD(ee)
local costeeeS,iseeeS,iseeeB,iseeeP,iseeeD = sc.costSp1isSBPD(eee)
local costeeeeS,iseeeeS,iseeeeB,iseeeeP,iseeeeD = sc.costSp1isSBPD(eeee)
local costeeeeeS,iseeeeeS,iseeeeeB,iseeeeeP,iseeeeeD = sc.costSp1isSBPD(eeeee)
if stackprefixEasy==stackprefixMid and (suffixDist==0 or string.len(string.gsub(stackprefixEasy,'[S]',''))==0) then
sc.writeLog('EqPrefix case',0)
return suffixDist, suffixBits, stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0
end
local sCost=0
if stackprefixMid == '' then
if stackprefixEasy == '1' and suffixDist>0 then
return suffixDist-1, string.rep('1',suffixDist-1), stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0
end
if not coste1S then -- T6* ... require search
sc.writeLog("easyChangeStackCost not starting 'SBPD#' not implemented")
sc.easyChangeStackCostErr = "Reducing stack implemented only for exceptions A " .. sc.easyChangeStackCostErr
return
end
-- we have to check there are D's possible to the end of stackprefixEasy, we have to plan how to start
-- we could use it when suffixDist>0, but start from 'S*' should be optimized
-- we could use it as well when stackprefixEasy ends by 'S' in special cases,
-- but it s always more expensive than B'2'[1] ending when possible.
local B2Bcost, nonPlannedLen, B2BBits, Dnonchecked, startCase, decSuffixDist, skipDTest = 2*(string.len(stackprefixEasy)-1),
string.len(stackprefixEasy), string.rep('21',string.len(stackprefixEasy)-1),
string.len(stackprefixEasy)-2, 1, 1, false
for i=Dnonchecked,1,-1 do
local cost_S=sc.costSp1isSBPD(string.sub(stackprefixEasy, -i, -i))
if cost_S==4 then
Dnonchecked=(Dnonchecked==i) and i-1 or Dnonchecked
else
if not cost_S or i>5 then
sc.writeLog("easyChangeStackCost [?D^*?????]> failed at " .. i)
sc.easyChangeStackCostErr = "Reducing stack implemented only for exceptions B " .. sc.easyChangeStackCostErr
return
end
end
end
if not coste2S then
sc.writeLog("easyChangeStackCost [?D^*?????]> failed at e2")
sc.easyChangeStackCostErr = "Reducing stack implemented only for exceptions Bb " .. sc.easyChangeStackCostErr
return
end
if Dnonchecked < 0 and (coste1S>1 or e2~='P') then
skipDTest = true
nonPlannedLen = -1
elseif coste2S<4 then
if ise2B and ise1D and ((nonPlannedLen>5 and iseS) or (Dnonchecked == 0 and suffixDist + rSuffixDist>0)) then
skipDTest = true
else
sc.writeLog("easyChangeStackCost [?D^*?????]> failed at e2 not DB case")
sc.easyChangeStackCostErr = "Reducing stack implemented only for exceptions Bc " .. sc.easyChangeStackCostErr
return
end
elseif Dnonchecked == 0 then
--we have to check 2nd char as well
skipDTest = true
end
-- no we know stackprefixEasy consists only from S,B,P,D based sets and first non D is at Dnonchecked
-- called only when we know we have a result
local function optimizeB2BStartCost()
--T(>7) start is as good as B start, DB start is better
--SDBDSDB costs 3+(7)+5(-1) while BDDDDDD costs 2+12+1(-1) BD '21' B
--DBDDDDD costs (2)+10(-1) DB '2' as B (but '2' forced)
--B start is almost optimal, SDBSD'21211' is second if possible, SSPS'21211' is third, '21121' S->BD is the worst option
-- *B'2'->[1] end is optimal, *SDBDS is second and *SSPS is the worst
--g.note(packSixplicates(startCase.." "..B2Bcost.." "..B2BBits.." "..nonPlannedLen))
if ise1D and ise2B and Dnonchecked>=0 and (nonPlannedLen>5 or (suffixDist>0 and skipDTest)) then
replaceEasyTailChar('B',string.len(stackEasy)-1)
replaceEasyTailChar('D',string.len(stackEasy))
local sCostInc = (coste2S-2)
startCase,sCost,B2Bcost,B2BBits,nonPlannedLen = 0, sCost + sCostInc, B2Bcost + sCostInc + 1 - 2,
string.sub('2'..B2BBits,1,-3),nonPlannedLen-2
return
end
if coste1S>1 then --[1^*]B start is just after DB option
return
end
-- SDBDS'212' cheaper than S->BD ... but must allow at least SSPS at the end (SDBDSSSPS is as expensive as SSPSSDBDS,
-- but final SSPS is less restrictive
if ise3B and ise5S and ((nonPlannedLen > 8) or (nonPlannedLen==5) or (nonPlannedLen>5 and suffixDist>0 and skipDTest)) then
replaceEasyTailChar('S',string.len(stackEasy)-4)
replaceEasyTailChar('D',string.len(stackEasy)-3)
replaceEasyTailChar('B',string.len(stackEasy)-2)
replaceEasyTailChar('D',string.len(stackEasy)-1)
local sCostInc = (coste5S-1) + (coste3S-2)
if ise7B and (nonPlannedLen>10 or (suffixDist>0 and Dnonchecked==0)) then
replaceEasyTailChar('B',string.len(stackEasy)-6)
replaceEasyTailChar('D',string.len(stackEasy)-5)
sCostInc = sCostInc + (coste7S)-2
startCase,sCost,B2Bcost,B2BBits,nonPlannedLen = 0, sCost + sCostInc, B2Bcost-2 + sCostInc
+ 5 - 10 + 1 - 2,
string.sub('2122'..B2BBits,1,-13),nonPlannedLen-7
return
end
startCase,sCost,B2Bcost,B2BBits,nonPlannedLen = 2, sCost + sCostInc, B2Bcost + sCostInc + 5 - 10,
string.sub('21211'..B2BBits,1,-11),nonPlannedLen-5
return
end
-- SSPS'212' cheaper than S->BD ... but must allow at least SSPS at the end
if ise4S and coste3S>=3 and ((nonPlannedLen > 7) or (nonPlannedLen==4) or (nonPlannedLen>4 and suffixDist>0 and skipDTest)) then
if e4~='S' then
replaceEasyTailChar('S',string.len(stackEasy)-3)
end
local x=templateMaxSingle(e3,coste3S)
if e3~=x then
replaceEasyTailChar(x,string.len(stackEasy)-2)
end
local sCostInc = (coste4S-1) -- (coste3S-costxS)==0
if x=='P' then -- 'SP' is safe, anything else is dangerous
if ise2S then
replaceEasyTailChar('S',string.len(stackEasy)-1)
sCostInc,coste2S = sCostInc + (coste2S-1),1 -- changing coste2S to prevent double acting
else
x=templateMaxSingle(e2,coste2S)
replaceEasyTailChar(x,string.len(stackEasy)-1)
sc.writeLog(x..'P on stackEasy, double check it is OK!!!',10)
end
else
x=templateMaxSingle(e2,coste2S)
replaceEasyTailChar(x,string.len(stackEasy)-1)
end
if ise6B and (nonPlannedLen>9 or (suffixDist>0 and skipDTest)) then
replaceEasyTailChar('B',string.len(stackEasy)-5)
replaceEasyTailChar('D',string.len(stackEasy)-4)
sCostInc = sCostInc + (coste6S)-2
startCase,sCost,B2Bcost,B2BBits,nonPlannedLen = 0, sCost + sCostInc, B2Bcost-2 + sCostInc
+ (coste3S-3) + (coste2S-1) + 5 - 8 + 1 - 2,
string.sub('2122'..B2BBits,1,-11),nonPlannedLen-6
return
end
startCase,sCost,B2Bcost,B2BBits,nonPlannedLen = 3, sCost + sCostInc, B2Bcost + sCostInc + (coste3S-3) + (coste2S-1) + 5 - 8,
string.rep('1',(coste2S-1) + (coste3S-3))..
string.sub('21211'..B2BBits,1,-9),nonPlannedLen-4
return
end
startCase,B2Bcost,B2BBits,nonPlannedLen = 4, B2Bcost + 7, '2112121' .. B2BBits, nonPlannedLen+1
local rstackprefixEasy='BD'..string.sub(stackprefixEasy,2)
-- should make correction for optimizeB2BEndCost()
e = string.sub(rstackprefixEasy, -1)
ee= string.sub(rstackprefixEasy, -2,-2)
eee= string.sub(rstackprefixEasy, -3,-3)
eeee= string.sub(rstackprefixEasy, -4,-4)
eeeee= string.sub(rstackprefixEasy, -5,-5)
costeS,iseS,iseB,iseP,iseD = sc.costSp1isSBPD(e)
costeeS,iseeS,iseeB,iseeP,iseeD = sc.costSp1isSBPD(ee)
costeeeS,iseeeS,iseeeB,iseeeP,iseeeD = sc.costSp1isSBPD(eee)
costeeeeS,iseeeeS,iseeeeB,iseeeeP,iseeeeD = sc.costSp1isSBPD(eeee)
costeeeeeS,iseeeeeS,iseeeeeB,iseeeeeP,iseeeeeD = sc.costSp1isSBPD(eeeee)
end --optimizeB2BStartCost()
-- called only when we know we have a result
local function optimizeB2BEndCost()
-- DB'22'->[1] is optimal
-- *B'2'->[1] end is second, *SDBDS is third and *SSPS is the worst
--g.note(packSixplicates(startCase.." "..B2Bcost.." "..B2BBits.." "..nonPlannedLen))
sc.writeLog("optimizeB2BEndCost: nonPlannedLen="..nonPlannedLen.." startCase="..startCase.." DnonChecked="..Dnonchecked.." skipDtest="..
(skipDTest and "T" or "F").."B2BBits="..B2BBits.. "["..stackEasy.."]>["..stackMid.."]")
if nonPlannedLen==0 then
decSuffixDist = ((startCase%4)==0) and 1 or 0
return
end
if startCase==1 then
local x=templateMaxSingle(e1,coste1S)
replaceEasyTailChar(x,string.len(stackEasy))
nonPlannedLen=nonPlannedLen-1
end
if suffixDist>0 and skipDTest then --(Dnonchecked<=1 and cases Dnonchecked==1 must be carefully postprocessed)
for i=1+Dnonchecked,nonPlannedLen-((startCase==4) and 2 or 0) do
replaceEasyTailChar('D',commonSuffixLen+i)
end
nonPlannedLen=0
return
end-- we know otherwse SSPS is possible ... so iseS
if nonPlannedLen>=5 and iseeeeD and iseeeB and iseeD then
replaceEasyTailChar('S',commonSuffixLen+1)
replaceEasyTailChar('D',commonSuffixLen+2)
replaceEasyTailChar('B',commonSuffixLen+3)
replaceEasyTailChar('D',commonSuffixLen+4)
local x=templateMaxSingle(eeeee,costeeeeeS)
replaceEasyTailChar(x,commonSuffixLen+5)
for i=6,nonPlannedLen-((startCase==4) and 2 or 0) do
replaceEasyTailChar('D',commonSuffixLen+i)
end
--[[startCase
0 ... 5+i:2212121(21)^i
1 ... 5+i:21212121(21)^i
2,3 ... 5+i:.*212 1121212121(21)^i
4 ... 5+i:2112121 212121(21)^i--]]
local sCostInc=(costeS-1)+(costeeeS-2)
sCost,B2Bcost,B2BBits,nonPlannedLen,decSuffixDist = sCost + sCostInc, B2Bcost-8 + 4 + sCostInc,
string.sub(B2BBits,1,-9)..'1212',0,0
return
end
--if nonPlannedLen>=4 and costeeS>=3 and iseS then SSPS case
if e~='S' then
replaceEasyTailChar('S',commonSuffixLen+1)
end
local x=templateMaxSingle(ee,costeeS)
if x~=ee then
replaceEasyTailChar(x,commonSuffixLen+2)
end
local sCostInc = (costeS-1) -- (costeeS-costxS)==0
if x=='P' then -- 'SP' is safe, anything else is dangerous
if iseeeS then
if eee~='S' then
replaceEasyTailChar('S',commonSuffixLen+3)
end
sCostInc,costeeeS = sCostInc + (costeeeS-1),1 -- changing costeeeS to prevent double acting
else
x=templateMaxSingle(eee,costeeeS)
replaceEasyTailChar(x,commonSuffixLen+3)
sc.writeLog(x..'P on stackEasy, double check it is OK!!!',10)
end
end
for i=5,nonPlannedLen-((startCase==4) and 2 or 0) do
replaceEasyTailChar('D',commonSuffixLen+i)
end
local y=templateMaxSingle(eeee,costeeeeS)
if y~=eeee then
replaceEasyTailChar(y,commonSuffixLen+4)
end
local z=templateMaxSingle(eee,costeeeS)
if z~=eee then
replaceEasyTailChar(z,commonSuffixLen+3)
end
--B2BBits prefix forces B??S, we have to prepare SSPS
--[[startCase
0 ... 5+i: 22121(21)^i
1 ... 5+i: 212121(21)^i
2,3 ... 5+i:.*212 11212121(21)^i
4 ... 5+i:2112121 2121(21)^i--]]
sCost,B2Bcost,B2BBits,nonPlannedLen,decSuffixDist = sCost + sCostInc, B2Bcost-6 + 1+costeeeS-1+costeeS-3+3 + sCostInc,
string.sub(B2BBits,1,-7)..string.rep('1', 1+costeeeS-1+costeeS-3)..'212',0,0
return
end --optimizeB2BEndCost()
-- called only when we know we have a result
local function optimizeB2BCost()
optimizeB2BStartCost()
optimizeB2BEndCost()
end --optimizeB2BCost()
-- we could use rSuffixDist as well, but we do not know if increasing suffix is an advantage
-- so we ignore this possible optimization
--sc.writeLog("coste1S "..(coste1S or "nil").." "..(Dnonchecked or "nil").." "..(costeeS or "nil").." "..(suffixDist or "nil"),10)
local reason=((skipDTest and suffixDist>0) and "1") or
((Dnonchecked<=5 and iseeeeD and iseeeB and iseeD and iseS) and "2") or
((Dnonchecked<=4 and costeeS and costeeS>=3 and iseS) and (((e1=='S' and 1) or 0) + nonPlannedLen>3) and "3")
if coste1S and reason then
sc.writeLog("easyChangeStackCost [BD^*]>([1]|[]) exception "..reason.." detected", 2)
optimizeB2BCost()
return (startCase==1 and (coste1S-2) or 0) + B2Bcost + suffixDist,
string.rep('1',(startCase==1 and (coste1S-2) or 0)) .. B2BBits ..
((decSuffixDist==1) and '2' or '')..string.rep('1',suffixDist - decSuffixDist),
stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
end
sc.writeLog("easyChangeStackCost [..]>[]")
if costeS<4 and suffixDist>0 then
local rCost,rBits,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst,rsCost =
sc.easyChangeStackCost(string.sub(stackStartSubst,1,-commonSuffixLen-1),
string.sub(stackEasy,1,-commonSuffixLen-1), 'B', 'B', 0, 0)
if rCost then
local stacksuffixEasy=string.sub(stackEasy,-commonSuffixLen,(commonSuffixLen==0) and 0 or -1)
local stackStartSubstSuffix=string.sub(stackStartSubst,-commonSuffixLen,(commonSuffixLen==0) and 0 or -1)
return rCost+suffixDist,
rBits..'2'..string.sub(suffixBits,2),
rstackStartSubst..stackStartSubstSuffix,rstackEasy..stacksuffixEasy,stackMid,stackTargetSubst,sCost+rsCost
end
end
if suffixDist + rSuffixDist == 0 then
if string.len(stackprefixEasy) == 1 then --if stacksuffixEasy starts 'S' S|S>"211">S6d6|S>"12">H6T6|S>"1112112>"I4|S">"1">|S ... 13 rather to 28
return (coste1S-1) + 28,
string.rep("1",coste1S-1).."211211111".."211211".."211211".."1111".."212",
stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0 -- [S]->9[SS]->6[SDS]->6[SDDS]->4[SSPS]->3[]
end
if string.len(stackprefixEasy) == 2 then
return (coste1S-1) + (costeS-1) + 19,
string.rep("1",coste1S+costeS-2).."211211".."211211".."1111".."212",
stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0 -- [SS]->6[SDS]->6[SDDS]->4[SSPS]->3[]
end
else -- suffixDist + rSuffixDist > 0
if string.len(stackprefixEasy) == 1 then
if suffixDist==0 then
incSuffixDist()
end
optimizeB2BCost() -- starCases 1,4
return (startCase==1 and (coste1S-2) or 0) + B2Bcost + suffixDist,
string.rep('1',(startCase==1 and (coste1S-2) or 0)) .. B2BBits ..
((decSuffixDist==1) and '2' or '')..string.rep('1',suffixDist - decSuffixDist),
stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
end
if string.len(stackprefixEasy) == 2 then
if costeS==1 then
if suffixDist + rSuffixDist<2 then --'[SSPS]' path required
return (coste1S-1) + 19 + suffixDist,
string.rep('1',coste1S-1).."211211".."211211".."1111".."212"..suffixBits,
stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0 -- [SS]->6[SDS]->6[SDDS]->4[SSPS]->3[]
end
if suffixDist==0 then
inc2SuffixDist()
elseif suffixDist==1 then
incSuffixDist()
end
end
if suffixDist==0 then
incSuffixDist()
end
if e=='P' then -- [XP] -> [BP] "2" does not work
local sBits=string.rep('1',coste1S-1)..'1'..'21121'..'21' -- stackStartSubst,stackTargetSubst [SP]->"1"[SB]->"21121"[BDB]->"21"[BB]
return (coste1S-1) + 8 + 9 + suffixDist-1,
sBits..'2'..'21121'..'21'..'2'..string.sub(suffixBits,2),
stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0 -- [BB]->"2"[S]->"21121"[BD]->"21"[B]->"2"[1]
end
skipDTest,nonPlannedLen = true,e1=='S' and 1 or 2
optimizeB2BCost() --startCases 0,1,4
if ise2D then
replaceEasyTailChar('D',commonSuffixLen+1)
end
if ise2D or startCase==0 then --optimized B2B solves the cases
return (startCase==1 and (coste1S-2) or 0) + B2Bcost + suffixDist,
string.rep('1',(startCase==1 and (coste1S-2) or 0)) .. B2BBits ..
((decSuffixDist==1) and '2' or '')..string.rep('1',suffixDist - decSuffixDist),
stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
end
-- [BB] or [BS] case (not DB)
local y=templateSingleTryAvoidP(e2) -- y is either B or S
local costyS=sc.costSp1isSBPD(y)
decSuffixDist = 3-costyS -- decSuffixDist <= suffixDist
if y~=e2 then
replaceEasyTailChar(y,commonSuffixLen+1)
end
local sCostInc = (coste2S-costyS)
sCost = sCost + sCostInc
return (startCase==1 and (coste1S-2) or 0) + B2Bcost-1 + 8 + suffixDist-decSuffixDist + sCostInc,
string.rep('1',(startCase==1 and (coste1S-2) or 0)) .. string.sub(B2BBits,1,-2) ..
'21121'..'21'..'2'..string.rep('1',suffixDist - decSuffixDist),
stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
end
-- more genaral case [(S+B)*]#^m ... to select corectly (#^i)S(#^m-i-1) ... have to be used in search init?
end
elseif suffixDist==0 and string.len(stackprefixEasy) > 1 then
sc.writeLog("easyChangeStackCost [BD*]>[#+1]")
if stackprefixMid=='1' then -- stackMid==stackTargetSubst in this case
return sc.easyChangeStackCost(stackStartSubst, stackEasy, stacksuffixMid, stacksuffixMid, 1, commonSuffixLen)
end
local m=string.sub(stackprefixMid,-1,-1)
local costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
if costeS and costmS and costeS>=costmS and e~='P' then --[*P] is weird
local x=intersectTemplatingChars(es,ms)
local costxS=sc.costSp1isSBPD(x)
local costesS=sc.costSp1isSBPD(es)
local savestackStartSubst,savestackEasy,savestackMid,savestackTargetSubst=
stackStartSubst,stackEasy,stackMid,stackTargetSubst
if costxS then
if x~=es then
replaceEasyTailChar(x,commonSuffixLen)
end
if x~=ms then
replaceMidTailChar(x,commonSuffixLen)
end
else
costxS,costesS=0,0
sc.writeLog("no intersection on previous position",-2)
end
if costeS==4 then
if e~='D' then
replaceEasyTailChar('D',commonSuffixLen+1)
end
local rCost,rBits,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst,sCost =
sc.easyChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, costeS-costmS, 1+commonSuffixLen)
if rCost then
return (costesS-costxS)+rCost,rBits,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst,sCost+(costesS-costxS)
end
else
local re=templateRemoveP(iseP,e) --re in {S,B,b}
local costreS=sc.costSp1isSBPD(re) --in {1,2}
if costreS>=costmS then
if re~=e then
replaceEasyTailChar(re,commonSuffixLen+1)
end
local rCost,rBits,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst,sCost =
sc.easyChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, costreS-costmS, 1+commonSuffixLen)
if rCost then
return (costesS-costxS)+(costeS-costreS)+rCost,rBits,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst,sCost+(costesS-costxS)+(costeS-costreS)
end
end
end
sc.writeLog("returning to stackBackups",-2)
stackStartSubst,stackEasy,stackMid,stackTargetSubst =
savestackStartSubst,savestackEasy,savestackMid,savestackTargetSubst
end
end
if stackprefixEasy == '' then
if commonSuffixLen>0 then
local commonSuffixLen = commonSuffixLen - 1
local stackprefixEasy=string.sub(stackEasy,1, -1 - commonSuffixLen)
local stackprefixMid=string.sub(stackMid,1, -1 - commonSuffixLen)
local e = string.sub(stackprefixEasy, -1)
local m = string.sub(stackprefixMid, -1)
local costeS = sc.costSp1isSBPD(e)
local costmS = sc.costSp1isSBPD(e)
local suffixDist = suffixDist - costeS + costmS
return sc.easyChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, suffixDist, commonSuffixLen)
end
sc.easyChangeStackCostErr = "stackEasy cannot be empty " .. sc.easyChangeStackCostErr
return
end
if string.len(stackMid) < string.len(stackEasy) then
sc.easyChangeStackCostErr = "Shortening implemented only for exceptions " .. sc.easyChangeStackCostErr
return
end
-- probably obsolete code follows as we do templatePrev ... be sure we are suffixDist compatible
-- nOnes denotes number of 1's which shuld be issued to obtain correct SBPD pttern from D* position
local sOnes,nOnes,shortened='',0,0
local m,mm=string.sub(stackprefixMid, -1),string.sub(stackprefixMid, -2,-2)
local costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
local costmmS,ismmS,ismmB,ismmP,ismmD=sc.costSp1isSBPD(mm)
if (suffixDist>0) and string.len(stackprefixEasy)>1 then
if not ismS then
sc.easyChangeStackCostErr = "end of stackprefixMid must be S if stackprefixEasy (is longer than 1) and suffixDist>0 "
.. sc.easyChangeStackCostErr
return
end
m='S'
replaceMidTailChar(m,commonSuffixLen+1)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
end
while string.len(stackprefixEasy) > 2+shortened do
local costmmS,ismmS,ismmB,ismmP,ismmD=sc.costSp1isSBPD(mm)
if not costeeS then
sc.easyChangeStackCostErr = "Only D,P,B,S on almost end of stackEasy longer than 2 on "
.. "starting positions implemented " .. sc.easyChangeStackCostErr
return
end
if not ismmS then
sc.easyChangeStackCostErr = "Only S on almost end of stacksuffixMid when stackprefixEasy.len>2 on "
.. "starting positions implemented " .. sc.easyChangeStackCostErr
return
end
mm='S'
replaceMidTailChar(mm,commonSuffixLen+2+shortened)
nOnes = nOnes + costeeS-1
shortened = 1+shortened
ee=string.sub(stackprefixEasy, -2-shortened,-2-shortened)
costeeS=sc.costSp1isSBPD(ee)
mm=string.sub(stackprefixMid, -2-shortened,-2-shortened)
end
if string.len(stackprefixEasy) == 2+shortened then
if not costmS then
sc.easyChangeStackCostErr = "Only D,P,B,S at end of stackMid when stackprefixEasy.len==2 on "
.. "starting positions implemented " .. sc.easyChangeStackCostErr
return
end
if not costeS then
sc.easyChangeStackCostErr = "Only D,P,B,S at end of stackprefixEasy "
.. "implemented " .. sc.easyChangeStackCostErr
return
end
if shortened == 0 and costeS==3 then
nOnes,costeS = nOnes + 1,2 -- P->B now planned
replaceEasyTailChar('P',commonSuffixLen+1)
end
if shortened==0 and string.len(stackMid)>string.len(stackEasy) then
if m=='P' then
if costeS<4 then
sc.easyChangeStackCostErr = "Building xxP requires SD " .. sc.easyChangeStackCostErr
return
end
e='D'
replaceEasyTailChar(e,commonSuffixLen+1)
costeS,iseS,iseB,iseP,iseD = sc.costSp1isSBPD(e)
if not ismmS then
sc.easyChangeStackCostErr = "Building xxP must be built after xSP " .. sc.easyChangeStackCostErr
return
end
mm='S'
replaceMidTailChar('S',commonSuffixLen+2)
elseif costmS == 3 then
m=templateRemoveP(ismP,m)
replaceMidTailChar(m,commonSuffixLen+1)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
end
end
if costeS < costmS then
if costeS==1 and ismS then
costmS=1
replaceMidTailChar('S',commonSuffixLen+1)
elseif costeS==2 then
if ismB then
costmS=2
replaceMidTailChar('B',commonSuffixLen+1)
elseif ismS then
costmS=1
replaceMidTailChar('S',commonSuffixLen+1)
end
elseif costeS==3 then -- shortened>0
if ismP then
costmS=3
replaceMidTailChar('P',commonSuffixLen+1)
elseif ismB then
costmS=2
replaceMidTailChar('B',commonSuffixLen+1)
elseif ismS then
costmS=1
replaceMidTailChar('S',commonSuffixLen+1)
end
end
end
if costeS < costmS then
sc.easyChangeStackCostErr = "when stackprefixEasy.len==2, end of stackprefixMid must be on D->P->B->S "
.. "from end of stackEasy " .. sc.easyChangeStackCostErr
return
else
nOnes = nOnes + costeS - costmS
end
local costmmS,ismmS,ismmB,ismmP,ismmD=sc.costSp1isSBPD(mm)
if string.len(stackprefixMid)==2+shortened then
if not costeeS or not costmmS then
sc.easyChangeStackCostErr = "when stackprefixEasy.len==stackprefixMid.len==2, wrong start "
.. sc.easyChangeStackCostErr
return
end
if nOnes+suffixDist>0 then -- S* start forced
if not ismmS then
sc.easyChangeStackCostErr = "start of stackMid must be S if equally long as stackEasy (>1) "
.. "and 'tails do not agree' " .. sc.easyChangeStackCostErr
return
end
costmmS=1
replaceMidTailChar('S',commonSuffixLen+2+shortened)
end
nOnes = nOnes + costeeS - costmmS --the last counted change (actually occurs first)
return nOnes+suffixDist,
string.rep('1',nOnes+suffixDist),
stackStartSubst, stackEasy, stackMid, stackTargetSubst, 0
end
suffixDist,nOnes,commonSuffixLen=suffixDist+nOnes,0,string.len(stackEasy)-1
shortened=1+shortened
stackprefixEasy = e1
stackprefixMid = string.sub(stackMid,1,-1 - commonSuffixLen)
end
-- now string.len(stackprefixEasy)==1 and nOnes==0 (but suffixDist could be positive)
if not coste1S then
sc.easyChangeStackCostErr = "Only D,P,B,S templates on starting positions implemented " .. sc.easyChangeStackCostErr
return
end
if string.len(stackprefixMid)>1 then
local x=templateMaxSingle(e1,coste1S)
replaceEasyTailChar(x,string.len(stackEasy))
nOnes,sOnes = suffixDist,string.rep('1',suffixDist) -- "1"^(nOnes)..[S]->[stackMid] to do
local bBits,mm,m,builtLen=string.rep('1',coste1S-1),
string.sub(stackprefixMid, -2,-2), string.sub(stackprefixMid, -1,-1), 0
if shortened == 0 then
if ms=='P' then
if suffixDist==0 then
sc.easyChangeStackCostErr = "Building xxP requires SD (B)" .. sc.easyChangeStackCostErr
return
end
if not ismS then
sc.easyChangeStackCostErr = "Building xxP must be built after xSP (B)" .. sc.easyChangeStackCostErr
return
end
m='S'
replaceMidTailChar(m,commonSuffixLen+1)
elseif costmsS==3 then
sc.writeLog("isms2P case "..ms.." "..ismsP.." "..sc.easyChangeStackCostErr)
ms=templateRemoveP(ismsP,ms)
replaceMidTailChar(ms,commonSuffixLen)
end
end
while string.len(stackprefixMid)>1+builtLen do
sc.writeLog('X['..builtLen..'] '..bBits.." "..sOnes,-5)
local costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
if not costmS then
sc.easyChangeStackCostErr = "Only D,P,B,S,# on 'starting positions' of stackMid implemented ("
.. stackMid .. ") " .. sc.easyChangeStackCostErr
return
end
if m~='S' then
bBits=bBits..sOnes -- finishing previous pushes
sOnes,nOnes='',0
end
if costmS==3 and mm~='S' and string.len(stackprefixMid)>2 then
if m=='P' then
sc.easyChangeStackCostErr = "P allowed only at start of stackMid or after S " .. sc.easyChangeStackCostErr
return
end
m=templateRemoveP(ismP,m)
replaceMidTailChar(m,commonSuffixLen+1+builtLen)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
end
bBits=bBits..'2112' -- [S]->"2112"[PD]->"11"[SD] (sOnes would not work when first is not S ... e.a. [BS] is not achievable)
builtLen=builtLen+1
if string.len(stackprefixMid)>1+builtLen then
bBits=bBits..'11' -- [P]->[S]
elseif mm~='S' and costmS==4 and nOnes==0 then -- D allowed but no other templates
replaceMidTailChar('D',commonSuffixLen+builtLen)
end
sOnes,nOnes=sOnes..sc.templateCharNotUniqueBackwardMark(m)..string.rep('1',4-costmS),nOnes + 4-costmS
mm,m = string.sub(stackprefixMid, -2-builtLen,-2-builtLen), mm
end
local costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
if nOnes>0 then
if ismS then
m='S'
replaceMidTailChar(m,commonSuffixLen+1+builtLen)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
else
sc.easyChangeStackCostErr = "stackMid must start S, if bit should propagate "
.. sc.easyChangeStackCostErr .. "\n" .. stackMid
return
end
end
if not costmS or m=='D' then
sc.easyChangeStackCostErr = "stackMid must start S, B or P "
.. sc.easyChangeStackCostErr .. "\n" .. stackMid
return
end
if costmS==4 then
m=templateRemoveD(m)
replaceMidTailChar(m,commonSuffixLen+1+builtLen)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
end
sc.writeLog('Y['..builtLen..'] '..bBits,-5)
sOnes,nOnes=sOnes..sc.templateCharNotUniqueBackwardMark(m)..string.rep('1',3-costmS),nOnes + 3-costmS
bBits=bBits..sOnes -- finishing previous pushes sOnes=0
return string.len(sc.bitsRemoveInfo(bBits)),bBits,stackStartSubst,stackEasy,stackMid,stackTargetSubst,sCost
end
local savestackStartSubst,savestackEasy,savestackMid,savestackTargetSubst=
stackStartSubst,stackEasy,stackMid,stackTargetSubst
if coste1S<4 then
m=templateRemoveD(m)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
if coste1S<3 then
m=templateRemoveP(ismP,m)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
if coste1S<2 then
m=templateRemoveB(ismB,m)
costmS,ismS,ismB,ismP,ismD=sc.costSp1isSBPD(m)
end
end
if costmS then
replaceMidTailChar(m,commonSuffixLen+1)
end
end
if costmS then
nOnes,sOnes=suffixDist,string.rep('1',suffixDist)
sOnes,nOnes=sOnes..sc.templateCharNotUniqueBackwardMark(m)..string.rep('1',costeS-costmS),nOnes+costeS-costmS
local bBits=sOnes -- finishing previous pushes sOnes=0
return nOnes,bBits,stackStartSubst,stackEasy,stackMid,stackTargetSubst,sCost
end
stackStartSubst,stackEasy,stackMid,stackTargetSubst = savestackStartSubst,savestackEasy,savestackMid,savestackTargetSubst
if not ismsP then
m=stackprefixMid
if m~='D' then
local x=templateMaxSingle(m)
if x~=m then
replaceMidTailChar(x,commonSuffixLen+1)
end
local costmS=sc.costSp1isSBPD(m)
local x=templateMaxSingle(e1)
if x~=e1 then
replaceEasyTailChar(x,commonSuffixLen+1)
end
local bBits=string.rep('1',coste1S-1+suffixDist)..'211212'..string.rep('1',3-costmS)
return string.len(bBits),bBits,stackStartSubst,stackEasy,stackMid,stackTargetSubst,0
end
end
sc.easyChangeStackCostErr = "stackEasy must be D->P->B->S to stackMid or S->PD->P-> must be possible"
.. sc.easyChangeStackCostErr .. "\n" .. stackMid
end --sc.easyChangeStackCost
--returns est, cost, bits, tempatedStartingStack, tempatedstackEasy, templatedstackMid, templatedstackTargetSubst, sCost
function sc.ignoreSuffixChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, justEst)
--calls Easy changeStackCost when reduced to easy case
sc.writeLog("ignoreSuffixChangeStackCost(".. stackStartSubst .. "," .. stackEasy .. "," .. stackMid ..
"," .. stackTargetSubst .. ")",0)
local oristackStartSubst,oristackEasy,oristackMid,oristackTargetSubst=stackStartSubst,stackEasy,stackMid,stackTargetSubst
local costStartPreSubst2StartSubst, commonSuffixLen, suffixDist
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist =
sc.templatePrev(stackStartSubst,stackEasy,stackMid,stackTargetSubst)
sc.writeLog("ignoreSuffixChangeStackCost after templatePrev(".. stackStartSubst .. "," .. stackEasy .. ","
.. stackMid .. "," .. stackTargetSubst .. "," .. costStartPreSubst2StartSubst .. "," .. suffixDist .. ",".. commonSuffixLen .. ")",0)
local est, ret, smCost, bits, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst, sCost
if not justEst then
smCost, bits, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst, sCost =
sc.easyChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, suffixDist, commonSuffixLen)
est = smCost
end
if smCost then
ret = costStartPreSubst2StartSubst + smCost
sCost = sCost + costStartPreSubst2StartSubst
else
sc.writeLog(sc.easyChangeStackCostErr, 1)
end
sc.writeLog('easyChangeStackLowerBound A')
est = est or sc.easyChangeStackLowerBound(stackEasy, stackMid, suffixDist, commonSuffixLen)
est = costStartPreSubst2StartSubst + est
if ret then
sc.writeLog("ignoreSuffixChangeStackCost(" .. oristackStartSubst .. "(" .. rstackStartSubst ..")" .. oristackEasy.."(>("
.. costStartPreSubst2StartSubst .. ")>" .. rstackEasy .. ")>'" .. bits .. "'"
.. smCost .. "([1*" .. suffixDist .. "])>".. oristackMid .. "(" .. rstackMid .. ")> bitsMid2TargetSubst >"
.. oristackTargetSubst .. "(" ..rstackTargetSubst .. ")="
.. ret .. " + costMid2TargetSubst , " .. est .. " + costMid2TargetSubst", 1)
elseif est then
sc.writeLog("ignoreSuffixChangeStackCost(" .. oristackStartSubst .. "(" .. stackStartSubst .. ")" .. oristackEasy.."(>("
.. costStartPreSubst2StartSubst..")>" .. stackEasy .. ")>?" .. "([1*" .. suffixDist .. "])>" .. oristackMid
.. "(" .. stackMid .. ")> bitsMid2TargetSubst >" .. oristackTargetSubst .. "(" .. stackTargetSubst .. ")>="
.. est .. " + costMid2TargetSubst", 1)
end
return est, ret, bits, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst, sCost
end --sc.ignoreSuffixChangeStackCost
--returns est
function sc.easyChangeStackLowerBound(stackStartSubst, stackTargetSubst, suffixDist, commonSuffixLen)
local function easyChangeStackLowerBoundL(stackStartSubst, stackTargetSubst, suffixDist, commonSuffixLen)
local function stackReductionLowerBound(stackStartSubst, suffixDist)
--has to send suffixDist 1's hmmm used as minimal cost only
--instead suffixDist there could be desired one letter target 'B' or 'S' not use at all
sc.writeLog("stackReductionLowerBound(" .. stackStartSubst .. "," .. suffixDist .. ")")
local baseStackLen = sc.SBPDlen(stackStartSubst)
local b1,b2,b3,b4=string.sub(stackStartSubst,-baseStackLen,-baseStackLen),
string.sub(stackStartSubst,-baseStackLen+1,-baseStackLen+1),
string.sub(stackStartSubst,-baseStackLen+2,-baseStackLen+2),
string.sub(stackStartSubst,-baseStackLen+3,-baseStackLen+3)
local costb1S,isb1S,isb1B,isb1P,isb1D=sc.costSp1isSBPD(b1)
local costb2S,isb2S,isb2B,isb2P,isb2D=sc.costSp1isSBPD(b2)
local costb3S,isb3S,isb3B,isb3P,isb3D=sc.costSp1isSBPD(b3)
local costb4S,isb4S,isb4B,isb4P,isb4D=sc.costSp1isSBPD(b4)
if baseStackLen > 0 then
if string.sub(stackStartSubst, -baseStackLen - 1, -baseStackLen - 1) == "6" then
local postCost
if string.sub(stackStartSubst, -baseStackLen - 3, -baseStackLen - 1) == "6d6" then
if isb1D and isb2B and isb3D and isb4S == "DBDS" then
postCost = 1 + ((baseStackLen == 4) and 0 or stackReductionLowerBound(string.sub(stackStartSubst, -baseStackLen + 4), suffixDist)) + costb2S-2 + costb4S-1
end
if isb1S and isb2P and isb3S then
postCost = 1 + ((baseStackLen == 3) and 0 or stackReductionLowerBound(string.sub(stackStartSubst, -baseStackLen + 3), suffixDist)) + costb1S-1 + costb2S-3 + costb3S-1
end
if isb1D and isb2B and isb3D == "DBD" then
postCost = 2 + ((baseStackLen == 3) and 0 or stackReductionLowerBound(string.sub(stackStartSubst, -baseStackLen + 3), suffixDist)) + costb2S-2
end
if postCost then
return stackReductionLowerBound(string.sub(stackStartSubst, 1, -baseStackLen - 4), 'B') + postCost
end
local preCost = stackReductionLowerBound(string.sub(stackStartSubst, 1, -baseStackLen - 4), 'S')
return 1 + preCost + stackReductionLowerBound("PD" .. string.sub(stackStartSubst, -baseStackLen), suffixDist)
end
if baseStackLen >= 1 and string.find('SD', string.sub(stackStartSubst, -baseStackLen, -baseStackLen)) then
postCost = (baseStackLen == 1) and 0 or stackReductionLowerBound(string.sub(stackStartSubst, -baseStackLen + 1), suffixDist) -- '2' with extrabit program
end
if postCost then
return stackReductionLowerBound(string.sub(stackStartSubst, 1, -baseStackLen - 2), 'B') + postCost
end
end
local preCost = stackReductionLowerBound(string.sub(stackStartSubst, 1, -baseStackLen - 1), 0)
--? baseStackLen = baseStackLen
preCost = preCost + baseStackLen // 2 --is not safe lower bound, but it encourages required stack shortening
--preCost = preCost + 3 * (baseStackLen // 5)
baseStackLen = baseStackLen % 5
local ret = preCost + baseStackLen - ((baseStackLen == 4) and 1 or 0)
if string.find('BS',suffixDist) then
return ret
else
return (ret<suffixDist) and suffixDist or ret
end
end
local nonBaseStackLen, nonDigits = string.len(stackStartSubst), 0
for i = 1, string.len(stackStartSubst) do
if sc.costSp1isSBPD(string.sub(stackStartSubst, -i, -i)) then
nonBaseStackLen = i - 1
break
end
if string.find('HhTtId', string.sub(stackStartSubst, -i, -i)) then
nonDigits = nonDigits + 1
end
end
local preCost = 0
if string.find('01', string.sub(stackStartSubst, 1, 1)) then
nonDigits = nonDigits - 1
end
if nonBaseStackLen < string.len(stackStartSubst) then
preCost = stackReductionLowerBound(string.sub(stackStartSubst, 1, -nonBaseStackLen - 1), '')
end
return preCost + nonDigits // 2
end
local function triviCostLowerBound(stackTargetSubst)
if stackTargetSubst == '' then
return 0
end
local ret
while not ret do
if stackTargetSubst=='' then
ret=0
break
end
ret = sc.easyChangeStackCost('D', 'D', stackTargetSubst, stackTargetSubst, 0, 0)
local pos=string.find(string.sub(stackTargetSubst,2)..'#','[TtIHhdSBbPvqpDxwuryz#]')
stackTargetSubst=string.sub(stackTargetSubst,1+pos)
end
ret = (ret < 3) and 0 or ret - 3
return ret
end
sc.writeLog('easyChangeStackLowerBound B')
sc.writeLog("easyChangeStackLowerBoundL(" .. stackStartSubst .. ","
.. stackTargetSubst .. "," .. suffixDist .. "," .. commonSuffixLen .. ")",2)
if commonSuffixLen>0 then
stackStartSubst,stackTargetSubst=string.sub(stackStartSubst,1,-commonSuffixLen),string.sub(stackTargetSubst,1,-commonSuffixLen)
end
while string.len(stackStartSubst) > 2 and string.len(stackTargetSubst) > 0 and string.sub(stackStartSubst, -1) == string.sub(stackTargetSubst, -1)
and sc.costSp1isSBPD(string.sub(stackStartSubst, -2, -2)) do
stackStartSubst, stackTargetSubst = string.sub(stackStartSubst, 1, -2), string.sub(stackTargetSubst, 1, -2)
end
--suffixDist is applied at enclosing easyChangeStackLowerBound
local cost, tmp = 0, sc.costSp1isSBPD(string.sub(stackStartSubst, -1))
if not tmp and suffixDist==0 then
return 1000000003
end
if stackTargetSubst == "" then
return stackReductionLowerBound(stackStartSubst,suffixDist)
end
return triviCostLowerBound(stackTargetSubst)
end
--traceFullEcho()
sc.writeLog("easyChangeStackLowerBound(" .. stackStartSubst .. ","
.. stackTargetSubst .. "," .. suffixDist .. "," .. commonSuffixLen .. ")",2)
local est=easyChangeStackLowerBoundL(stackStartSubst, stackTargetSubst, suffixDist, commonSuffixLen)
if est then
-- safety correction for D->S payment when D is actually destroyed
est = est - 3
if est < 1 then
est = 1
if stackStartSubst == stackTargetSubst then
est = 0
end
end
else
est=1
end
if est<suffixDist then
return suffixDist
end
return est
end
--returns est
function sc.changeStackCostEst(stackStartPreSubst, stackTargetPreSubst)
local stackStartSubst, stackTargetSubst, stackMid, costMid2TargetSubst, bitsMid2TargetSubst, costStartPreSubst2StartSubst, suffixDist, commonSuffixLen, eqSuffixLen
costMid2TargetSubst, stackMid, bitsMid2TargetSubst, stackTargetSubst = sc.topStackCost(stackStartPreSubst, stackTargetPreSubst) -- reduces (P+B+S)6d6* case
sc.writeLog("changeStackCostEst after topStackCost(".. stackStartPreSubst .. "," .. stackMid ..","
.. stackTargetSubst .. ","..costMid2TargetSubst..",'"..bitsMid2TargetSubst.."')",2)
local stackEasy -- does not differ from stackStartSubst yet
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sc.templatePrev(stackStartPreSubst, stackStartPreSubst, stackMid, stackTargetSubst)
sc.writeLog("changeStackCostEst after templatePrev(".. stackStartSubst .. "==" .. stackEasy .. "," .. stackMid .. ","
.. stackTargetSubst .. ")"..costStartPreSubst2StartSubst.. ","..suffixDist..","..commonSuffixLen,2)
local SBPDlen = sc.SBPDlen(stackStartSubst)
if SBPDlen > 0 then
if (string.sub(stackStartSubst, -SBPDlen - 2, -SBPDlen - 1) == "T6"
or string.sub(stackStartSubst, -SBPDlen - 2, -SBPDlen - 1) == "I4") then
local s=string.sub(stackStartSubst,-SBPDlen,-SBPDlen)
local costsS,issS=sc.costSp1isSBPD(s)
if costsS>1 then
if not issS then
sc.writeLog("T6S/I4S forcing case, but S not avaiable!", 1)
g.note("T6S/I4S forcing case, but S not avaiable!")
return 1000000000
end
stackStartSubst = sc.replaceTailChar(stackStartSubst,'S',SBPDlen)
sc.writeLog("T6S/I4S forcing case", 1)
end
end
end
local est=sc.easyChangeStackLowerBound(stackStartSubst,stackMid,suffixDist,commonSuffixLen)+sc.templatingCost(stackStartSubst,stackStartPreSubst)+costMid2TargetSubst
return est
end
sc.results = {} --cache to gradually speed up
function sc.changeStackCosts(stackStartPreSubst, stackTargetPreSubst)
--------- changeStackCosts inner shared variables ----------
local bestCost
local trieQueue, trieQueueLastInd, trieQueueFirstInd -- increasing IndicesFirst mod trieNodeCount empty when trieQueueLastInd==trieQueueFirstInd,
local extraBit, stackStartSubstLen, edgeBitLimit
local queue, queueCurrentEstCost, queueMaxEstCost, queueCurrentEstCostInd = {}, -1, 0, 0
local queueFilter = {}
---- end of searchChangeStackCosts inner shared variables --------
------------ searchChangeStackCosts inner functions --------------
--local bitsEasy2Mid include templatePositions for "template sets of size>1"
--no templatePositions in bitsStartSubst2Easy
local function bestCostUpdate(costStartSubst2Mid, stackStartSubst, bitsStartSubst2Easy, stackEasy, tbitsEasy2Mid, stackMid)
sc.writeLog("bestCostUpdate("..costStartSubst2Mid..", "..stackStartSubst..", "..
bitsStartSubst2Easy..", "..stackEasy..", "..tbitsEasy2Mid..", "..stackMid)
local costStartPreSubst2StartSubst, tRem = sc.templatingCost(stackStartSubst, stackStartPreSubst)
local costStartPreSubst2Mid = costStartPreSubst2StartSubst + costStartSubst2Mid
local costStartSubst2Easy = string.len(bitsStartSubst2Easy)
local costEasy2Mid = costStartSubst2Mid-costStartSubst2Easy
local message
if not bestCost then
bestCost={}
message = "Setting"
elseif bestCost.costStartPreSubst2Mid > costStartPreSubst2Mid then
message = "Decreasing"
elseif bestCost.costStartPreSubst2Mid == costStartPreSubst2Mid then
local oldCostStartPreSubst2StartSubst, oldTRem = sc.templatingCost(bestCost.stackStartSubst, stackStartPreSubst)
if oldTRem < tRem then
--just personal preferences
message = "Updating"
end
end
if message then
bestCost.costStartPreSubst2Mid = costStartPreSubst2Mid
bestCost.costStartPreSubst2StartSubst = costStartPreSubst2StartSubst
bestCost.stackStartSubst = stackStartSubst
bestCost.bitsStartSubst2Easy = bitsStartSubst2Easy
bestCost.stackEasy = stackEasy
bestCost.tbitsEasy2Mid = tbitsEasy2Mid
bestCost.stackMid = stackMid
sc.writeLog(message.." bestCost " .. costStartPreSubst2Mid .. "=" ..costStartPreSubst2StartSubst.. "+[" .. stackStartSubst .. "](".. costStartSubst2Easy..")'"
..bitsStartSubst2Easy.."'>["..stackEasy.."]>("..costEasy2Mid..")'" ..tbitsEasy2Mid.."'["..stackMid.."]", 5)
--if costStartPreSubst2Mid<1000000000 then
sc.searchTimeLimit = g.millisecs() + 60000 -- let us search at most 1 minute more after last improvement
--end
end
end
local function getBestCostStartSubst2Mid(stackStartSubst)
if not bestCost then
return nil
end
local costStartPreSubst2StartSubst = sc.templatingCost(stackStartSubst, stackStartPreSubst)
return bestCost.costStartPreSubst2Mid - costStartPreSubst2StartSubst
end
local function trieQueuePush(trieNode)
if trieNode then
--allowing push(nil) doing nothing
trieQueueLastInd = trieQueueLastInd + 1
if trieQueueLastInd > sc.trieNodeCount then
trieQueueLastInd = 1
end
trieQueue[trieQueueLastInd] = trieNode
else
sc.writeLog("trieQueuePush(nil)", -2)
end
end
local function trieQueuePull()
if trieQueueFirstInd == trieQueueLastInd then
return
end
trieQueueFirstInd = trieQueueFirstInd + 1
if trieQueueFirstInd > sc.trieNodeCount then
trieQueueFirstInd = 1
end
local trieNode = trieQueue[trieQueueFirstInd]
trieQueue[trieQueueFirstInd] = nil
return trieNode
end
local function nextOutGoingEdge()
sc.writeLog(" NextOutGoingEdge", -1)
local trieNode = trieQueuePull()
while trieNode do
if edgeBitLimit and trieNode.minBitLen >= edgeBitLimit then
-- extraBit should be included in edgeBitLimit
sc.writeLog("trieBranch discarded ... minBitLen " .. trieNode.minBitLen .. ">=" .. edgeBitLimit)
elseif trieNode.minPreStackLen > stackStartSubstLen then
sc.writeLog("trieBranch discarded ... minPreStackLen " .. trieNode.minPreStackLen .. ">" .. stackStartSubstLen)
else
-- trieQueuePush(trieNode[0]) used only at root with extraBit
sc.writeLog(" NextOutGoingEdge push[1]", -2);
trieQueuePush(trieNode[1])
sc.writeLog(" NextOutGoingEdge push[2]", -2);
trieQueuePush(trieNode[2])
if trieNode.moveConds then
sc.writeLog(" NextOutGoingEdge #moves=" .. #trieNode.moveConds)
return trieNode.moveConds
end
end
trieNode = trieQueuePull()
end
return
end
local function firstOutGoingEdge(stackStartSubst)
sc.writeLog(" FirstOutgoingEdge " .. stackStartSubst, -1)
extraBit = nil
if stackStartSubst == "" then
return
end
local first = string.sub(stackStartSubst, 1, 1)
if string.find('01', first) then
stackStartSubst = string.sub(stackStartSubst, 2)
if stackStartSubst == "" then
return
end
extraBit = first + 0
first = (first == "1") and string.sub(stackStartSubst, 1, 1) or first
end
local costfS=sc.costSp1isSBPD(first)
first = costfS and templateMaxSingle(first,costfS) or first
-- can reach other substitutes by 1* in the minimal cost, but not in 0 extraBitCase so '0' trie created
stackStartSubstLen = string.len(stackStartSubst)
local trieNode = sc.tries[first]
if extraBit == 1 then
-- we have not added extra level to trie['0']
trieNode = trieNode[extraBit]
end
trieQueuePush(trieNode)
return nextOutGoingEdge()
end
local function queueEmpty()
sc.writeLog("queueEmpty? " .. queueCurrentEstCost .. " " .. queueCurrentEstCostInd .. " " .. queueMaxEstCost, -1)
if queueCurrentEstCost < 0 then
return true
end
if queueCurrentEstCost < queueMaxEstCost then
return false
end
if queueCurrentEstCostInd == #queue[queueMaxEstCost] then
queue[queueMaxEstCost], queueCurrentEstCost, queueMaxEstCost, queueCurrentEstCostInd = nil, -1, 0, 0
return true
end
return false
end
local function queuePush(stackStartSubst, stackEasy, bitsStartSubst2Easy, est, suffixDist)
local processed = queueFilter[stackStartSubst .. ">" .. stackEasy.."["..suffixDist.."]"]
if processed and processed <= string.len(bitsStartSubst2Easy) then
return
end
queueFilter[stackStartSubst .. ">" .. stackEasy.."["..suffixDist.."]"] = string.len(bitsStartSubst2Easy)
est = not est and 0 or est
local costEst = string.len(bitsStartSubst2Easy) + est
if not queue[costEst] then
queue[costEst] = {}
end
queue[costEst][1 + #queue[costEst]] = { stackStartSubst, stackEasy, bitsStartSubst2Easy, suffixDist }
if queueCurrentEstCost > costEst then
queueCurrentEstCost, queueCurrentEstCostInd = costEst, 0
elseif queueCurrentEstCost < 0 then
queueCurrentEstCost = 0 --nonempty mark
end
if queueMaxEstCost < costEst then
queueMaxEstCost = costEst
end
end
local function queuePop()
--nonEmpty was ensured
if not queue[queueCurrentEstCost] then
queueCurrentEstCostInd = 0
end
while not queue[queueCurrentEstCost] do
queueCurrentEstCost = 1 + queueCurrentEstCost
end
queueCurrentEstCostInd = 1 + queueCurrentEstCostInd
if queueCurrentEstCostInd > #queue[queueCurrentEstCost] then
queue[queueCurrentEstCost] = nil
queueCurrentEstCostInd = 1
while not queue[queueCurrentEstCost] do
queueCurrentEstCost = 1 + queueCurrentEstCost
end
end
local node = queue[queueCurrentEstCost][queueCurrentEstCostInd]
return node[1], node[2], node[3], node[4]
end
local function extStack(pre, stack, post)
sc.writeLog(" extStack(" .. pre .. "," .. stack .. "," .. post .. ")")
if string.find('01', string.sub(stack, 1, 1)) then
-- extrabit
pre, stack = string.sub(stack, 1, 1) .. pre, string.sub(stack, 2)
end
stack = pre .. stack
if stack ~= "" and string.find('TtIHhdSBbPvqpDxwuryz#', string.sub(stack, -1)) then
return stack .. post
else
local postPos = string.find(post, '[TtIHhdSBbPvqpDxwuryz#]')
if postPos then
local postDist = string.sub(post, 1, postPos - 1)
postDist = ((postDist == "") and "8" or postDist)
local start, dist = string.match('H' .. stack, '(.*[TtIHhdSBbPvqpDxwuryz#])(.*)')
start = string.sub(start, 2)
sc.writeLog(" extStack start, dist, postDist " .. start .. "," .. dist .. "," .. postDist .. "(" .. postPos .. ")")
if start == "" then
return dist .. string.sub(post, postPos) --dist is actually extrabit (or empty)
else
dist = (dist == "") and 0 or dist
if dist + postDist == 8 then
return start .. string.sub(post, postPos)
end
return start .. sc.inttostring(dist + postDist) .. string.sub(post, postPos)
end
else
return stack
end
end
end
local function getCompatible(mPreStack, stackEasy, mPostStack, stackStartSubst, conds)
--{{extPreStack, extPostStack, oriPreStack, 1's thrugh}}
local startEasyEqSuffixLen = sc.EQTemplateTailLen(stackStartSubst,stackEasy)
-- I am not sure with concretization of stackStartSubst, when it is longer than stackEasy,
-- maybe its start should be concretized to a decremented value
local function replaceEasyTailChar(chr,tailPos)
stackEasy,stackStartSubst=replaceStackPairTailChar(chr,tailPos,startEasyEqSuffixLen,stackEasy,stackStartSubst)
end
local function buildRetItem(stackPreMove, stackPostMove, stackStartSubst, decSuffixDist)
local retItem={}
retItem.stackPreMove = stackPreMove --not used ??
retItem.stackPostMove = stackPostMove
retItem.stackStartSubst = stackStartSubst
retItem.decSuffixDist = decSuffixDist
return retItem
end
sc.writeLog("getCompatible(" .. mPreStack .. "," .. stackEasy .. "," .. mPostStack .. "," .. stackStartSubst
.. "," .. sc.conditionsToString(conds) .. ")")
if extraBit then
stackEasy = string.sub(stackEasy, 2)
sc.writeLog(" extrBit reduction "..stackEasy)
end
local ret = {}
if string.len(mPreStack) > string.len(stackEasy) then
sc.writeLog(" string.len(mPreStack)>string.len(preStack)")
return ret
end
local hIdSkip, offs, fail = string.sub(conds[1], 1, 1), 0
local cdist = string.sub(conds[1], 2)
cdist = (cdist == "") and "0" or cdist -- if conds[1] not empty than odd
cdist = 0 + cdist
fail = false
if hIdSkip ~= "" then
local pos = string.find(stackEasy,
'[' .. string.gsub('TtIHhdSBbPvqpDxwuryz#', hIdSkip, '') .. ']', offs + 1)
if not pos then
sc.writeLog(" everything skipped " .. hIdSkip)
if hIdSkip=='S' then
ret[#ret + 1] = buildRetItem(stackEasy, stackEasy, stackStartSubst, 1)
end
return ret
end
offs = pos - 1
if offs > 0 then
local pre, dist = string.match(hIdSkip .. string.sub(stackEasy, 1, offs), '(.*' .. hIdSkip .. ')(.*)')
if dist then
sc.writeLog(" dist " .. hIdSkip .. dist .. " " .. cdist)
dist = (dist == "") and "8" or dist
dist = 0 + dist
fail = dist < cdist
if fail then
sc.writeLog(" fail:small distance from hIdskip " .. dist .. "<" .. cdist)
end
end
end
end
if string.len(mPreStack) + offs > string.len(stackEasy) then
sc.writeLog(" string.len(mPreStack)+offs>string.len(preStack)")
return ret
end
if not fail then
for i = 1, string.len(mPreStack) do
local m,e = string.sub(mPreStack, i, i), string.sub(stackEasy, i + offs, i + offs)
if m ~= e then
local costmS,ismS,ismB,ismP,ismD = sc.costSp1isSBPD(m) -- just SBPD used in mPreStack
local costeS,iseS,iseB,iseP,iseD = sc.costSp1isSBPD(e)
if not costmS or (ismS and not iseS) or (ismB and not iseB) or (ismP and not iseP) or (ismD and not iseD) then
sc.writeLog(" fail:not match at positions " .. i .. "," .. i + offs .. ":" .. m .. "?" .. e)
fail = true
break
else
replaceEasyTailChar(m,string.len(stackEasy)-i-offs+1)
end
end
end
end
if not fail then
local condsToTest, pos, endPos, pos2, endPos2, dist2, hId2, hId, h = {}, 1 + offs + string.len(mPreStack)
--mPreStack ends by an hId !!!
condsToTest["_"] = ""
hId='_'
if pos <= string.len(stackEasy) then
endPos = string.find(string.sub(stackEasy, pos), '[TtIHhdSBbPvqpDxwuryz#]')
if endPos then
endPos=endPos+pos-1
hId = string.sub(stackEasy,endPos, endPos)
condsToTest["_"] = nil
local dist = string.sub(stackEasy,pos, endPos - 1)
dist = (dist == "" and "8") or dist
condsToTest[hId] = dist
sc.writeLog(" condToTest " .. hId .. "," .. dist .. "(" .. endPos .. ")")
pos2 = 1 + endPos
if pos2 < string.len(stackEasy) then
endPos2 = string.find(string.sub(stackEasy, pos2), '[TtIHhdSBbPvqpDxwuryz#]')
if endPos2 then
endPos2=endPos2+pos2-1
hId2 = string.sub(stackEasy, endPos2, endPos2)
dist2 = string.sub(stackEasy, pos2, endPos2 - 1)
dist2 = (dist2 == "" and "8") or dist2
dist2 = dist2 + dist
sc.writeLog(" condToTest " .. hId .. "," .. dist .. "(" .. endPos .. ")"..hId2..","..dist2.."("..endPos2..")")
end
end
--actually we have very rarely to check 2nd item dist as well (I4S2I...{I7} condition)
--I bet the use of the StackChangeCost caused by prevPostStack->requiredPreStack
--will never generate this case ... so I leave it this simplified way till it is really required
--proving it is not necessary is another option :)
end
h=hId
local e = string.sub(stackEasy, offs + string.len(mPreStack), offs + string.len(mPreStack))
local costhS,ishS,ishB,ishP,ishD = sc.costSp1isSBPD(h)
if h~='P' and e~='S' then
h=templateRemoveP(ishP,h)
end
local costhS,ishS,ishB,ishP,ishD = sc.costSp1isSBPD(h)
if costhS then
local dist=condsToTest[hId]
condsToTest[hId]=nil
condsToTest['S'] = ishS and dist or nil
condsToTest['B'] = ishB and dist or nil
condsToTest['P'] = ishP and dist or nil
condsToTest['D'] = ishD and dist or nil
end
end
local OK, KO, hId2OK, dist2OK, dist2HashOK = {}, {}, true, true, true
for i = 1, #conds[2] do
local hId = string.sub(conds[2][i], -1)
sc.writeLog(" condition " .. conds[2][i] .. "," .. hId)
local dist = condsToTest[hId]
if hId~='_' then
cdist = string.sub(conds[2][i], 1, -2)
cdist = (cdist == "" and "8") or cdist
cdist = cdist + 0
if cdist % 2 == 1 then
if dist2 and cdist > dist2 then
dist2OK=false
if string.find('DPBS',hId) then
dist2HashOK=false
end
if hId==hId2 then
hId2OK=false
end
end
end
end
if dist then
if dist == "" then
OK[#OK + 1] = hId
sc.writeLog(" condition " .. hId .. "," .. dist .. " OK")
else
dist = dist + 0
if cdist % 2 == 1 then
if cdist < dist then
OK[#OK + 1] = hId
sc.writeLog(" condition " .. hId .. "," .. dist .. "(" .. cdist .. ")" .. " OK")
else
KO[#KO + 1] = hId
sc.writeLog(" condition " .. hId .. "," .. dist .. "(" .. cdist .. ")" .. " KO")
end
else
if cdist == dist then
OK[#OK + 1] = hId
sc.writeLog(" condition " .. hId .. "," .. dist .. "(" .. cdist .. ")" .. " OK")
else
KO[#KO + 1] = hId
sc.writeLog(" condition " .. hId .. "," .. dist .. "(" .. cdist .. ")" .. " KO")
end
end
end
condsToTest[hId] = nil
end
end
for hId, dist in pairs(condsToTest) do
KO[#KO + 1] = hId
sc.writeLog(" condition " .. hId .. "," .. dist .. " KO (missed)")
end
local hOK
if #OK == 0 then
sc.writeLog(' all suffix tests failed')
else
local binOK=0
for i = 1, #OK do
local bin = sc.templateChar2bin(OK[i])
binOK=binOK + (bin or 0)
end
-- we expect only SBPD on the stack under the move
hOK=sc.bin2templateChar(binOK)
if not hOK then
--something ther than S,B,P,D is OK, but it must be h no need to replace
--replaceEasyTailChar(h,string.len(stackEasy)-endPos+1)
else
replaceEasyTailChar(hOK,string.len(stackEasy)-endPos+1)
end
local extpre, extpost = string.sub(stackEasy, 1, offs),
string.sub(stackEasy, pos)
local extPostStack = extStack(extpre, mPostStack, extpost)
sc.writeLog(' extPostStack=' .. extPostStack)
local costh2S = sc.costSp1isSBPD(hId2)
if dist2OK then
ret[#ret + 1] = buildRetItem(stackEasy, extPostStack, stackStartSubst,0)
sc.writeLog(" getCompatible new result:" .. extPostStack .. "," .. stackEasy .. "," .. stackStartSubst, 3)
elseif not hId2OK then
sc.writeLog(" getCompatible 2nd stack Item "..hId2.." blocks", 3)
elseif costh2S and dist2HashOK then
ret[#ret + 1] = buildRetItem(stackEasy, extPostStack, stackStartSubst,0)
sc.writeLog(" getCompatible new result (2 stack items case):" .. extPostStack .. "," .. stackEasy .. "," .. stackStartSubst, 3)
elseif costh2S then
--we have to try possible cases, but in our current moveset only {:_,21T,19t,19I,23H,25h,21B,23P,21d,21D,5S} matches with result 'S'
--should be rechecked as P was added as canceling element
-- I hope {:_,11T,15t,7I,9H,11h,9B,19P,9d,13D,11S} is not a problem as first item already blocks (one other simillar case)
--oops it does not occur in stack->stack portion but only in emissions so it is just never needed part of code
replaceEasyTailChar('S',string.len(stackEasy)-endPos2+1)
ret[#ret + 1] = buildRetItem(stackEasy, extPostStack, stackStartSubst,0)
sc.writeLog(" getCompatible new result (SS case):" .. extPostStack .. "," .. stackEasy .. "," .. stackStartSubst, 3)
end
end
end
return ret
end --getCompatible
local function refreshSuffixDist(stackEasy,stackMid,commonSuffixLen)
local sSuffixDist,commonSuffixFail=0
local eqSuffixLen = sc.EQTemplateTailLen(stackEasy, stackMid)
if sc.SBPDlen(stackEasy)>commonSuffixLen then
for i=eqSuffixLen+1,commonSuffixLen do
local ei,mi=string.sub(stackEasy,-i,-i),string.sub(stackMid,-i,-i)
if sSuffixDist>0 and mi~='S' then
commonSuffixFail=true
break
end
local costeiS,costmiS=sc.costSp1isSBPD(ei),sc.costSp1isSBPD(mi)
if not costeiS or not costmiS or costmiS > costeiS then
commonSuffixFail=true
break
end
sSuffixDist=sSuffixDist+costeiS-costmiS
end
else
commonSuffixFail=true
end
return sSuffixDist,commonSuffixFail
end
-------- end of searchChangeStackCosts inner functions -----------
--returns table. when there are templates in stackTargetSubst, the table contains stackStartSubsts compatible with the pattern and their costs
--the stackStartSubsts are given as most general as possible,
local time = g.millisecs()
sc.searchStartTime,sc.searchMinutes = time,0
sc.writeLog('searchChangeStackCosts(' .. stackStartPreSubst .. "," .. stackTargetPreSubst .. ')', 3)
sc.searchTimeLimit = nil
local stackStartSubst, stackTargetSubst, stackMid, costMid2TargetSubst, bitsMid2TargetSubst, costStartPreSubst2StartSubst, suffixDist, commonSuffixLen, eqSuffixLen
costMid2TargetSubst, stackMid, bitsMid2TargetSubst, stackTargetSubst = sc.topStackCost(stackStartPreSubst, stackTargetPreSubst) -- reduces (P+B+S)6d6* case no templating
sc.writeLog("searchChangeStackCost after topStackCost(".. stackStartPreSubst .. "," .. stackMid ..","
.. stackTargetSubst .. ","..costMid2TargetSubst..",'"..bitsMid2TargetSubst.."')",2)
local stackEasy -- does not differ from stackStartSubst yet
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sc.templatePrev(stackStartPreSubst, stackStartPreSubst, stackMid, stackTargetSubst)
local eqSuffixLenMid2TargetSubst=sc.EQTemplateTailLen(stackMid,stackTargetSubst)
-- stackEasy == stackStartSubst
sc.writeLog("searchChangeStackCost after templatePrev(".. stackStartSubst .. "==" .. stackEasy .. "," .. stackMid .. ","
.. stackTargetSubst .. ")"..costStartPreSubst2StartSubst.. ","..suffixDist..","..commonSuffixLen,2)
local function bestCost2ret()
local ret={}
stackTargetSubst = string.sub(stackTargetSubst,1,-1-eqSuffixLenMid2TargetSubst)..((eqSuffixLenMid2TargetSubst==0 and '') or string.sub(bestCost.stackMid,-eqSuffixLenMid2TargetSubst))
ret.costStartPreSubst2TargetSubst = bestCost.costStartPreSubst2Mid + costMid2TargetSubst
ret.costStartPreSubst2StartSubst = bestCost.costStartPreSubst2StartSubst
ret.stackStartSubst = bestCost.stackStartSubst
ret.bitsStartSubst2Easy = bestCost.bitsStartSubst2Easy
ret.stackEasy = bestCost.stackEasy
ret.tbitsEasy2Mid = bestCost.tbitsEasy2Mid
ret.stackMid = bestCost.stackMid
ret.bitsMid2TargetSubst = bitsMid2TargetSubst
ret.stackTargetSubst = stackTargetSubst
sc.writeLog("Return " .. ret.costStartPreSubst2TargetSubst .. "-" .. ret.costStartPreSubst2StartSubst .. "["..
ret.stackStartSubst .. "]>'"..ret.bitsStartSubst2Easy.."'>["..ret.stackEasy.."]>'"..
ret.tbitsEasy2Mid.."'>["..ret.stackMid.."]>'"..ret.bitsMid2TargetSubst.."'>["..
ret.stackTargetSubst.."]", 5)
return ret
end
local SBPDlen = sc.SBPDlen(stackStartSubst)
if SBPDlen > 0 then
if (string.sub(stackStartSubst, -SBPDlen - 2, -SBPDlen - 1) == "T6"
or string.sub(stackStartSubst, -SBPDlen - 2, -SBPDlen - 1) == "I4") then
local s=string.sub(stackStartSubst,-SBPDlen,-SBPDlen)
local costsS,issS=sc.costSp1isSBPD(s)
if costsS>1 then
if not issS then
sc.writeLog("T6S/I4S forcing case, but S not avaiable!", 1)
g.note("T6S/I4S forcing case, but S not avaiable!")
return
end
stackStartSubst = sc.replaceTailChar(stackStartSubst,'S',SBPDlen)
sc.writeLog("T6S/I4S forcing case", 1)
end
end
end
local shortSearchHash,midSearchHash
do
local message
shortSearchHash,midSearchHash,bestCost,message = results2bestCost(stackStartSubst,stackMid,commonSuffixLen,suffixDist,eqSuffixLen,costStartPreSubst2StartSubst)
if bestCost then
sc.writeLog(message.." no search needed ("..costStartPreSubst2StartSubst .."+"..bestCost.costStartPreSubst2Mid.."+"..costMid2TargetSubst..")",5)
return bestCost2ret()
end
end
sc.writeLog("shortSearchHash='".. shortSearchHash.."', midSearchHash='"..midSearchHash.."'",3)
local function bestCost2Results()
local eqLenStartSubst2Easy,eqLenEasy2Mid=sc.EQTemplateTailLen(bestCost.stackStartSubst,bestCost.stackEasy),
sc.EQTemplateTailLen(bestCost.stackEasy,bestCost.stackMid)
local eqLen=(eqLenStartSubst2Easy<eqLenEasy2Mid and eqLenStartSubst2Easy) or eqLenEasy2Mid
local SMresult = {}
SMresult.costStartSubst2Mid = bestCost.costStartPreSubst2Mid - bestCost.costStartPreSubst2StartSubst
SMresult.stackprefixStartSubst = string.sub(bestCost.stackStartSubst,1,-eqLen-1)
SMresult.bitsStartSubst2Easy = bestCost.bitsStartSubst2Easy
SMresult.stackprefixEasy = string.sub(bestCost.stackEasy,1,-eqLen-1)
SMresult.tbitsEasy2Mid = bestCost.tbitsEasy2Mid
SMresult.stackprefixMid = string.sub(bestCost.stackMid,1,-eqLen-1)
local x, xstackStartSubst, xstackEasy, xstackMid, xx, xCommonSuffixLen, xSuffixDist, xEqSuffixLen
= sc.templatePrev(bestCost.stackStartSubst, bestCost.stackEasy, bestCost.stackMid, bestCost.stackMid)
if eqLen>=eqSuffixLen then
if xSuffixDist==suffixDist and xCommonSuffixLen==commonSuffixLen and xEqSuffixLen==eqSuffixLen and
xstackStartSubst==bestCost.stackStartSubst and
xstackEasy==bestCost.stackEasy and
xstackMid==bestCost.stackMid then
sc.results[shortSearchHash] = SMresult -- trailing chars between commonSuffixLen and eqSuffixLen should be removed when used
sc.writeLog("Result saved "..shortSearchHash,-2)
end
sc.results[midSearchHash] = SMresult
sc.writeLog("Result saved "..midSearchHash,-2)
else
sc.writeLog("Result not saved as eqSuffixLen - eqLen = "..sc.inttostring(eqSuffixLen-eqLen)..
" ["..bestCost.stackStartSubst.."]>["..bestCost.stackEasy.."]>["..bestCost.stackMid.."]",10)
end
end
if bestCost then
end
bestCostUpdate(1000000000, stackStartSubst, '', stackStartSubst , '' , stackMid) --emergency returned value
local smCost, easyToMidBits, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst, sCost
smCost, easyToMidBits, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst, sCost
= sc.easyChangeStackCost(stackStartSubst, stackStartSubst, stackMid, stackTargetSubst, suffixDist, commonSuffixLen)
if smCost then
sc.writeLog(' no search needed, easycost:'.."("..(costStartPreSubst2StartSubst+sCost)
.."+"..(smCost-sCost).."+"..costMid2TargetSubst..")",5)
bestCostUpdate(smCost-sCost, rstackStartSubst, '', rstackEasy, easyToMidBits, rstackMid)
bestCost2Results()
return bestCost2ret()
else
sc.writeLog(sc.easyChangeStackCostErr, 1)
sc.writeLog(' search needed')
end
trieQueue, trieQueueLastInd, trieQueueFirstInd = {}, 0, 0
local bitsStartSubst2Easy= ''
queueCurrentEstCost, queueMaxEstCost, queueCurrentEstCostInd, queueFilter = -1, 0, 0, {}
do
local est,pemCost,tbitsMid2Easy,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst,sSuffixDist,commonSuffixFail
sSuffixDist,commonSuffixFail=refreshSuffixDist(stackEasy,stackMid,commonSuffixLen)
if not commonSuffixFail then
pemCost, tbitsMid2Easy, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst =
sc.easyChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, sSuffixDist, commonSuffixLen)
else
est, pemCost, tbitsMid2Easy, rstackStartSubst, rstackEasy, rstackMid, rstackTargetSubst =
sc.ignoreSuffixChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst)
end
if pemCost then
sc.writeLog(" StartBestCost [" .. rstackStartSubst .. "," .. rstackEasy .. "]+" .. pemCost .. "[" .. rstackMid .. "]", 4)
bestCostUpdate(pemCost, rstackStartSubst, bitsStartSubst2Easy, rstackEasy, tbitsMid2Easy, rstackMid)
else
if not est and not commonSuffixFail then
sc.writeLog('easyChangeStackLowerBound C')
est = sc.easyChangeStackLowerBound(stackEasy, stackMid, sSuffixDist, commonSuffixLen)
end
sc.writeLog('queuePush A')
queuePush(stackStartSubst, stackEasy, bitsStartSubst2Easy, est, sSuffixDist)
end
end
while not queueEmpty() do
if sc.searchTimeLimit then
local time = g.millisecs()
if time>=sc.searchTimeLimit then
while not queueEmpty() do
queuePop()
end
break
end
end
stackStartSubst, stackEasy, bitsStartSubst2Easy, suffixDist = queuePop()
-- we know easyChangeStackCost failed so we have to search
sc.writeLog("Search [" .. stackEasy .. "]" .. bitsStartSubst2Easy..
"[" .. stackStartSubst .. "][" .. stackTargetSubst .. "]("..suffixDist..")", 3)
local best, fail = getBestCostStartSubst2Mid(stackStartSubst)
edgeBitLimit = nil
if best then
edgeBitLimit = best - string.len(bitsStartSubst2Easy) + (extraBit and 1 or 0)
fail = edgeBitLimit <= 0
if not fail then
local est,sSuffixDist,commonSuffixFail
sSuffixDist,commonSuffixFail=refreshSuffixDist(stackEasy,stackMid,commonSuffixLen)
if not commonSuffixFail then
sc.writeLog('easyChangeStackLowerBound D')
est = sc.easyChangeStackLowerBound(stackEasy, stackMid, suffixDist, commonSuffixLen)
else
est = sc.ignoreSuffixChangeStackCost(stackStartSubst, stackEasy, stackMid, stackTargetSubst, true)
end
-- non null cost would prevent push as well as best test in that time, but best could have improved
fail = est and edgeBitLimit <= est
end
end
if not fail then
local moveConds = firstOutGoingEdge(stackEasy)
while moveConds do
for i = 1, #moveConds do
sc.writeLog(" " .. stackEasy .. ">" .. moveConds[i])
local mBits, move, conds, mPreStack, mPostStack = sc.parseMove(moveConds[i])
if extraBit then
if 0 + string.sub(mBits, 1, 1) ~= extraBit then
sc.writeLog("something wrong not matched extraBit " .. extraBit .. "?" .. mBits, 10)
else
mBits = string.sub(mBits, 2)
end
end
if string.find(mBits, '0') then
sc.writeLog(" bit 0 can be used only as extraBit ... this cannot happen", 10)
break -- all moves in moveConds has same bits
end
local stacks = getCompatible(mPreStack, stackEasy, mPostStack, stackStartSubst, conds) --{{extPreStack, extPostStack, oriPreStack}}
for j = 1, #stacks do --{{preMoveStack, postMoveStack, stackStartSubst, 1's thrugh}}
local newSuffixDist = suffixDist-stacks[j].decSuffixDist -- recalculated anyways
if newSuffixDist>=0 then
best = getBestCostStartSubst2Mid(stacks[j].stackStartSubst)
if not best or best > string.len(bitsStartSubst2Easy) + string.len(mBits) then
local sSuffixDist,est,rCost,rtbitsEasy2Mid,commonSuffixFail=0
commonSuffixFail=true
if sc.SBPDlen(stacks[j].stackPostMove)>commonSuffixLen then
sSuffixDist,commonSuffixFail=refreshSuffixDist(stacks[j].stackPostMove,stackMid,commonSuffixLen)
end
if not commonSuffixFail then
rCost,rtbitsEasy2Mid,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst = sc.easyChangeStackCost(
stacks[j].stackStartSubst, stacks[j].stackPostMove, stackMid, stackTargetSubst, sSuffixDist, commonSuffixLen)
else
est,rCost,rtbitsEasy2Mid,rstackStartSubst,rstackEasy,rstackMid,rstackTargetSubst = sc.ignoreSuffixChangeStackCost(
stacks[j].stackStartSubst, stacks[j].stackPostMove, stackMid, stackTargetSubst)
end
if rCost then
sc.writeLog(" cost [" .. stacks[j].stackStartSubst .. "]" .. bitsStartSubst2Easy.. mBits .. "[" .. stacks[j].stackPostMove .. "]~["..rstackEasy.."]+("
.. rCost .. ")'"..rtbitsEasy2Mid.."'>[" .. rstackMid.."]~[".. stackMid .. "]>[" ..rstackTargetSubst.."]~[".. stackTargetSubst .. "]", 1)
if not best or best > string.len(bitsStartSubst2Easy) + string.len(mBits) + rCost then
sc.writeLog("New stack transformation ("..sc.inttostring(string.len(bitsStartSubst2Easy) + string.len(mBits) + rCost)..")["..stacks[j].stackStartSubst.."]~["..
rstackStartSubst.."]>'".. bitsStartSubst2Easy .. mBits.."'>["..stacks[j].stackPostMove.."]~["..
rstackEasy.."]>'"..rtbitsEasy2Mid.."'>["..stackMid.."]~["..rstackMid.."]>'"..
bitsMid2TargetSubst.."'>["..stackTargetSubst.."]~["..rstackTargetSubst.."]", 4)
bestCostUpdate(string.len(bitsStartSubst2Easy..mBits) + rCost, rstackStartSubst,
bitsStartSubst2Easy .. mBits,
rstackEasy, rtbitsEasy2Mid, rstackMid)
else
sc.writeLog("cost two big "..rCost.." to continue; best="..best, 0)
end
else
sc.writeLog(sc.easyChangeStackCostErr, 1)
if not commonSuffixFail then
sc.writeLog('easyChangeStackLowerBound E')
est = sc.easyChangeStackLowerBound(stacks[j].stackPostMove, stackMid, sSuffixDist, commonSuffixLen)
end
if est then
if not best or best > string.len(bitsStartSubst2Easy) + string.len(mBits) + est then
sc.writeLog(" [" .. stacks[j].stackStartSubst .. "]" .. bitsStartSubst2Easy .. mBits .. "+>" .. est .. "[" .. stacks[j].stackPostMove ..
"]>?>[" .. stackMid .. ">" .. stackTargetSubst .. "]", 1)
sc.writeLog('queuePush B')
queuePush(stacks[j].stackStartSubst, stacks[j].stackPostMove, bitsStartSubst2Easy .. mBits, est, sSuffixDist)
else
sc.writeLog("estimate two big "..est.." to continue; best="..best, 0)
end
else
sc.writeLog(" [" .. stacks[j].stackStartSubst .. "]" .. bitsStartSubst2Easy .. mBits .. "[" .. stacks[j].stackPostMove ..
"]>?>[" .. stackMid .. ">" .. stackTargetSubst .. "]", 1)
sc.writeLog('queuePush C')
queuePush(stacks[j].stackStartSubst, stacks[j].stackPostMove, bitsStartSubst2Easy .. mBits, est, newSuffixDist)
end
end
end
end
end
end
moveConds = nextOutGoingEdge()
end
end
end
local time = g.millisecs()
local prevLogTime = (time-sc.searchStartTime)//1000
local prevLogMinutes = sc.searchMinutes + (prevLogTime//60)
local prevLogSeconds=(prevLogTime - 60*(prevLogTime//60))
sc.writeLog(">"..prevLogMinutes.."m "..prevLogSeconds..'s<m '..sc.maxLogMinutes.."m "..sc.maxLogSeconds..'s searchChangeStackCoststResult([' .. stackStartPreSubst .. "]~["..
bestCost.stackStartSubst.."]>'"..bestCost.bitsStartSubst2Easy.."'[" ..bestCost.stackEasy.."]>'"..
bestCost.tbitsEasy2Mid.."'>["..
bestCost.stackMid .. "])="..bestCost.costStartPreSubst2Mid, 5)
sc.maxLogSeconds = (((prevLogMinutes>sc.maxLogMinutes) or (prevLogMinutes==sc.maxLogMinutes and prevLogSeconds>sc.maxLogSeconds)) and prevLogSeconds) or sc.maxLogSeconds
sc.maxLogMinutes = (prevLogMinutes>sc.maxLogMinutes and prevLogMinutes) or sc.maxLogMinutes
bestCost2Results()
return bestCost2ret()
end --sc.changeStackCosts
return sc
------------------------ to be recodded ----------------
--failed conjecture ... D is cheaper # to both build and destroy so let us convert trailing # to D at the start.
-- if we could access bottom under S*, we could with no additional cost convert D* to such S*
--^ could be wrong in several cases. T6 requires S to be destroyable, when we need to get rid of stack entirely
-- BDBD at the end helps, but often we are happy eliminating the stack and emitting an extraBIt so DDDD is fine
-- d6 requires DD
-- exception ... precede P with S !!!
-- actually for destroy S and B (as 1B converts to S) deeper in stack are obstacles what need
-- 2112121 to convert to B to continue, and [SSPS]212[] could be much cheaper way to go, what requires S
-- 3 steps deeper than the obstacle position as this S cannot be build from top and requires preparation in past.
-- if the fixed portion of the stack ends with more obstacles, DSD^* looks as a best solution
-- ... hoping to get only one excess 1 to convert to SSPS. ... not really
-- let the stack portion to be destroyed ends on L=(B+S)^*#^* where n_B, n_S, n_# denote the number
-- of corresponding leters in the portion let n_b is the (unknown) number of bits required to destroy the stack
-- using proposed method
-- we get [BL(n_B,n_S,n#)]2[L(n_B-1,n_S+1,n#)] so (while n_B>0)
-- for L starting B L(n_B,n_S,n#,n_b)=L(n_B-2,n_S+1,n_#,n_b-1) starting S, so 2112121 finishes 8 cost removing one B
-- [SL(n_B,n_S,n#)]2112121[BL(n_B,n_S,n#)] so
-- for L starting S L(n_B,n_S,n#,n_b)=L(n_B+1,n_S-1,n_#,n_b-7) (starting B)
-- =L(n_B-1,n_S,n_#,n_b-8)
-- for L containing last B at beginning:
-- [BS^{n_S}#^{n_#)]2[S^{n_S}P#^{n_#-1}],[BS^{n_S}P#^{n_#)]2[S^{n_S}B#^{n_#-1}],[BS^{n_S}B#^{n_#)]2[S^{n_S+1}#^{n_#-1}]
-- So ([S^{n_S}#^{n_#}],n_b)=([BS^{n_S-1}#^{n_#}],n_b-7)=([S^{n_S-1}P#^{n_#-1}],n_b-8),
-- ([S^{n_S}P#^{n_#}],n_b)=([BS^{n_S-1}P#^{n_#}],n_b-7)=([S^{n_S-1}B#^{n_#}],n_b-8)
-- ([S^{n_S}B#^{n_#}],n_b)=([BS^{n_S-1}B#^{n_#}],n_b-7)=([S^{n_S}#^{n_#}],n_b-8)
-- ([S^{n_S}#^{n_#}],n_b)=([BS^{n_S-1}B#^{n_#}],n_b-7)=([S^{n_S-2}#^{n_#-1}],n_b-24)
-- if n_S-2k>0 and k<n_#
-- L(n_S,n_B,n_#,n_b)=([S^{n_S}#^{n_#},n_b-8n_B)=([S^{n_S - 2k}#^{n_#-k},n_b-8(n_B+3k)
-- (SS#^{n_#},n_b)=(SP#{n_#-1},n_b-8)=(BP#{n_#-1},n_b-15) but [BP]2 fails!
-- [SDDS#^{n_#}]1111212[#^{n_#}], [SPDS#^{n_#}]111212[#^{n_#}], [SSDS#^{n_#}]1212[#^{n_#}], [SSPS#^{n_#}]212[#^{n_#}]
-- (SS#S^{n_#},n_b)
And FixedBottom.lua
Code: Select all
local g = golly()
g.new("fixedBottomGliderLevelsToBits")
g.autoupdate(true)
g.show("Init")
local startTime = g.millisecs()
local searchMinutes = 0
local sd = require "StackChangeCost"
local levelFileName = "c:\\Golly\\Levels.txt"
local moveConds1FileName = "c:\\Golly\\QuarkCondCompositeEmissions1.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
local moveConds2FileName = "c:\\Golly\\QuarkCondCompositeEmissions2.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
local moveConds4FileName = "c:\\Golly\\QuarkCondCompositeEmissions4.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
local moveConds8FileName = "c:\\Golly\\QuarkCondCompositeEmissions8.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
--local moveConds1FileName = "c:\\Golly\\QuarkCondCompositeEmissionsCut.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
--local moveConds2FileName = "c:\\Golly\\QuarkCondCompositeEmissionsCut.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
--local moveConds1FileName = "c:\\Golly\\QuarkCondCompositeEmissionsDebug.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
--local moveConds2FileName = "c:\\Golly\\QuarkCondCompositeEmissionsDebug.txt" --"c:\\Golly\\QuarkCondBitSequences.txt"
local resultOutputFileName = "c:\\Golly\\FixedBottomGliderLevelsToBitsResult.txt"
local templateFixedOutputFileName = "c:\\Golly\\FixedBottomGliderLevelsToBitsResultFT.txt"
local log = io.open("c:\\Golly\\FixedBottomGliderLevelsToBitslog.txt", "w")
local logLevel = -2
-- S,B,P,D,#:SBPD,p:SBP,b:SB,q:BP,r:PD,u:SBD,v:SP,w:BD,x:SD,y:SPD,z:BPD tempate set names
local function inttostring(num)
g.show(debug.traceback())
return string.sub(num, 1, string.find(num .. ".", "%.") - 1)
end --inttostring
local function packSixplicates(hashedString)
g.show(debug.traceback())
--g.show("packing "..hashedString)
local ret=''
while (string.len(hashedString)>0) do
local chr=string.sub(hashedString,1,1)
local cnt=1
if string.find(chr,'[SBD#]') then
while (string.sub(hashedString,cnt+1, cnt+1)==chr) do
cnt=cnt+1
end
end
if (cnt>5) then
g.show('CNT>5'..debug.traceback())
ret=ret.."("..chr.."^"..inttostring(cnt)..")"
else
for i=1,cnt do
ret=ret..chr
end
end
hashedString=string.sub(hashedString,cnt+1)
end
hashedString,ret=ret,''
while (string.len(hashedString)>0) do
local chrchr=string.sub(hashedString,1,2)
local cnt=1
while (string.sub(hashedString,2*cnt+1, 2*cnt+2)==chrchr) do
cnt=cnt+1
end
if (cnt>6) then
g.show('paircnt>6'..debug.traceback())
ret=ret.."(("..chrchr..")^"..inttostring(cnt)..")"
else
for i=1,cnt do
ret=ret..chrchr
end
end
hashedString=string.sub(hashedString,2*cnt+1)
end
return ret
end --packSixplicates
local function writeLog(msg, level)
local time = g.millisecs()
if time-startTime>60000 then
local minAdd=(time-startTime)//60000
startTime=startTime+60000*minAdd
searchMinutes=searchMinutes+minAdd
end
time=(time-startTime)//1000
if log and ((not level and logLevel <= 0) or (level and level >= logLevel)) then
log:write(string.sub(" " .. inttostring(searchMinutes).."m "..string.sub("0"..inttostring(time),-2), -8) .. "s " .. packSixplicates(msg) .. "\n")
end
end --writeLog
local function inDelimiters(name, leftDelimiter, rightDelimiter)
return string.match(name, '%' .. leftDelimiter .. '(.-)%' .. rightDelimiter)
end --inDelimiters
local function split(str, delim)
local ret, l, p = {}, 1
str = str or ''
while l <= 1 + string.len(str) do
p = string.find(str .. delim, '%' .. delim, l)
ret[1 + #ret], l = string.sub(str, l, p - 1), p + 1
end
return ret
end --split
local function parseMove(moveConds)
local preStack, postStack, conds, pos, move, bits, glider, condsTxt
pos, condsTxt = string.find(moveConds .. '{', '%{'), ""
condsTxt = string.sub(moveConds, pos + 1, string.find(moveConds .. '}', '%}') - 1)
conds = split(condsTxt, ':')
conds[2] = split(conds[2], ',')
move = string.sub(moveConds, 1, pos - 1)
pos = string.find(move, '%]')
preStack = string.sub(move, 2, pos - 1)
bits = string.sub(move, pos + 1)
pos = string.find(bits, '%[')
postStack = string.sub(bits, pos + 1, -2)
bits = string.sub(bits, 1, pos - 1)
glider, pos = '', string.find(bits, '%(')
if pos then
glider = inDelimiters(bits, '(', ')')
bits = string.sub(bits, 1, pos - 1) .. string.sub(bits, string.find(bits, '%)') + 1)
end
bits=string.gsub(string.gsub(string.gsub(string.gsub(string.gsub(bits,'E','1111'),'S','111'),'B','11'),'P','1'),'D','')
return bits, move, conds, preStack, postStack, glider, condsTxt
end --parseMove
local emissions = {}
local emissionStats = {}
local function insertEmissionTo(to, moveConds, moveStat, moveCost)
if not emissions[to] then
emissions[to] = {}
emissionStats[to] = {}
writeLog("First emission of type "..to.." ("..moveConds..")")
end
local knownCost = emissionStats[to][moveStat]
local stat={moveCost,#emissions[to] + 1}
if knownCost then
stat[2]=knownCost[2]
if stat[1]>=knownCost[1] then
writeLog("Not worse emission for stat "..moveStat.." and "..to.." exists ... ignoring emission "..moveConds)
-- only rarely an emission is filtered by the level file ... and it s small risk the replacement emission
-- would be discarded by the rule
return
end
end
emissionStats[to][moveStat] = stat
emissions[to][stat[2]] = moveConds
end --insertEmissionTo
local function outputEmissionStats()
local to, eStats
for to, eStats in pairs(emissionStats) do
local efile = io.open("c:\\Golly\\Emissions\\"..to..".txt", "w")
local sorted = {}
for ms, stat in pairs(emissionStats[to]) do
sorted[#sorted+1]={ms,stat}
end
local function compare(a,b)
return a[2][1]<b[2][1]
end
table.sort(sorted, compare)
for i=1,#sorted do
efile:write(string.sub(" "..sorted[i][2][1],-4)..emissions[to][sorted[i][2][2]] .."-- ".. sorted[i][1] .. "\n")
end
efile:close()
end
end
local function insertEmission(moveConds, minLevel)
local bits, _move, _conds, preStack, postStack, glider, condsTxt = parseMove(moveConds)
if glider == "" then
return
end
local function emissionEvaluatePrestack()
local cost = sd.changeStackCosts('S',preStack)
return cost.costStartPreSubst2TargetSubst
end
local function emissionEvaluatePoststack()
local ret=0
local hadrons='SBPDdIHhTt'
local signs ='-----+++++'
local avalues='6666316912'
for i=1,string.len(postStack) do
local c=string.sub(postStack,i,i)
local j=string.find(hadrons,c) --no SBPD nontrivial sets in emissions (yet?)
if j then
if string.sub(signs,j,j)=='+' then
ret=ret+string.sub(avalues,j,j)
else
ret=ret-string.sub(avalues,j,j)
end
end
end
return ret
end
local dist, phase = inDelimiters("("..glider,"("," "),inDelimiters(glider..")"," ",")")
local d8 = inttostring(dist % 8)
local moveStat, moveCost = preStack.."("..dist..")"..postStack.."{"..condsTxt.."}", string.len(bits) + emissionEvaluatePrestack() + emissionEvaluatePoststack()
-- cost to get preStack and usefullness of postStack are not important for the same emission filtering, but will be usefull for pruning the emissionFiles
-- these preStack/postStack costs is our estimate of the average additional costs connected with the move use ... of course the real cost depends on the context
if 1>=minLevel then
insertEmissionTo("d" .. d8 .. "p0%1", moveConds, moveStat, moveCost)
end
if 2>=minLevel then
insertEmissionTo("d" .. d8 .. "p" .. inttostring(phase % 2) .. "%2", moveConds, moveStat, moveCost)
end
if 4>=minLevel then
insertEmissionTo("d" .. d8 .. "p" .. inttostring(phase % 4) .. "%4", moveConds, moveStat, moveCost)
end
if 8>=minLevel then
insertEmissionTo("d" .. d8 .. "p" .. inttostring(phase % 8) .. "%8", moveConds, moveStat, moveCost)
end
end --insertEmission
local function iniMoves(moveCondsFileName,minLevel)
local h = io.open(moveCondsFileName, "r")
local moveCondsLine = h:read()
while moveCondsLine do
insertEmission(string.sub(moveCondsLine, 5), minLevel)
moveCondsLine = h:read()
end
h:close()
end -- iniMoves
local levelStacks, levelGoals, winners, level, bottomymx = {}, {}
local function extStack(pre, stack, post)
writeLog(" extStack(" .. pre .. "," .. stack .. "," .. post .. ")", -1)
if string.find('01', string.sub(stack, 1, 1)) then
-- extrabit
pre, stack = string.sub(stack, 1, 1) .. pre, string.sub(stack, 2)
end
stack = pre .. stack
if stack ~= "" and string.find('TtIHhdSBbPvqpDxwuryz#', string.sub(stack, -1)) then
return stack .. post
else
local postPos = string.find(post, '[TtIHhdSBbPvqpDxwuryz#]')
if postPos then
local postDist = string.sub(post, 1, postPos - 1)
postDist = ((postDist == "") and "8" or postDist)
local start, dist = string.match('H' .. stack, '(.*[TtIHhdSBbPvqpDxwuryz#])(.*)')
start = string.sub(start, 2)
writeLog(" extStack start, dist, postDist " .. start .. "," .. dist .. "," .. postDist .. "(" .. postPos .. ")")
if start == "" then
return dist .. string.sub(post, postPos) --dist is actually extrabit (or empty)
else
dist = (dist == "") and 0 or dist
if dist + postDist == 8 then
return start .. string.sub(post, postPos)
end
return start .. inttostring(dist + postDist) .. string.sub(post, postPos)
end
else
return stack
end
end
end -- extStack
local startTemplateTop, finalStack
local function search(stackprefixStart)
local queue, queueCurrentCost, queueCurrentCostInd = {}, -1, 0 --rather build list with traversal than queue
local function queueInit()
queue, queueCurrentCost, queueCurrentCostInd = {}, -1, 0
end
local function queueEmpty()
writeLog("queueEmpty" .. queueCurrentCost .. " " .. queueCurrentCostInd)
return queueCurrentCost < 0 or (queue[queueCurrentCost].next < 0 and queueCurrentCostInd == #queue[queueCurrentCost])
end
---@return string emission, int targetymx
local function queuePull()
queueCurrentCostInd = 1 + queueCurrentCostInd
if queueCurrentCostInd > #queue[queueCurrentCost] then
queueCurrentCostInd, queueCurrentCost = 1, queue[queueCurrentCost].next
end
writeLog("queuePull " .. queueCurrentCost .. " " .. queueCurrentCostInd)
local node = queue[queueCurrentCost][queueCurrentCostInd]
return node[1], node[2]
end
local function queueMerge(emissions, targetymx, forbidden)
local function queuePush(node, ind)
local bits = parseMove(node[1])
writeLog("queuePush " .. string.len(bits) .. " {" .. node[1] .. "," .. node[2] .. "},"..ind,2)
local cost = string.len(bits)
if not queue[cost] then
queue[cost] = {}
if ind >= 0 then
-- go to a neighbour
while queue[ind].next > 0 and queue[ind].next < cost do
ind = queue[ind].next
end
while queue[ind].prev > 0 and queue[ind].prev > cost do
ind = queue[ind].prev
end
end
if ind > cost then
queue[cost].next, queue[cost].prev, queue[ind].prev = ind, queue[ind].prev, cost
if queue[cost].prev > 0 then
queue[queue[cost].prev].next=cost
end
elseif ind >= 0 then
queue[cost].prev, queue[cost].next, queue[ind].next = ind, queue[ind].next, cost
if queue[cost].next > 0 then
queue[queue[cost].next].prev=cost
end
else
queue[cost].next, queue[cost].prev = ind, ind
end
if queue[cost].prev < 0 then
queueCurrentCost = cost
end
end
queue[cost][1 + #queue[cost]] = node
return cost
end
local ind = queueCurrentCost
if emissions then
for j = 1, #emissions do
local ok=true
for f=1,#forbidden do
if string.find(emissions[j],forbidden[f]) then
writeLog("Forbidden emission "..emissions[j])
ok=false
break
end
end
if ok then
ind = queuePush({ emissions[j], targetymx }, ind)
end
end
else
writeLog("No emissions ",5)
end
end
--extends the stacks by #'s with one extra #
-- were I 1# off? ... I need at least 1 # for the A->B2 AX->B6X (implicit 8distance conversion trick)
local function extendStacks(movestackPre, movestackPost, delta)
if delta < 0 then
return
end
local stackSuffix=string.rep('#',1+(delta//8))
return movestackPre .. stackSuffix, extStack("", movestackPost, stackSuffix)
end --extendStacks
local function checkConditions(conditions, moveDelta)
local OK, KO, conditionsToTest = {}, {}, {}
if moveDelta==0 then
conditionsToTest["_"] = ""
else
conditionsToTest['D'] = 8
conditionsToTest['B'] = 8
conditionsToTest['S'] = 8
end
for i = 1, #conditions[2] do
--there is no conds[1] in emissions
local hId = string.sub(conditions[2][i], -1)
writeLog(" condition " .. conditions[2][i] .. "," .. hId, -1)
local dist = conditionsToTest[hId]
if dist then
if dist == "" then
OK[#OK + 1] = hId
writeLog(" condition " .. hId .. "," .. dist .. " OK")
else
local cDist = string.sub(conditions[2][i], 1, -2)
cDist = (cDist == "" and "8") or cDist
dist, cDist = dist + 0, cDist + 0
if cDist % 2 == 1 then
if cDist < dist then
OK[#OK + 1] = hId
writeLog(" condition " .. hId .. "," .. dist .. "(" .. cDist .. ")" .. " OK")
else
KO[#KO + 1] = {hId, cDist//dist}
writeLog(" condition " .. hId .. "," .. dist .. "(" .. cDist .. ")" .. " KO")
end
else
if cDist == dist then
OK[#OK + 1] = hId
writeLog(" condition " .. hId .. "," .. dist .. "(" .. cDist .. ")" .. " OK")
else
KO[#KO + 1] = {hId}
writeLog(" condition " .. hId .. "," .. dist .. "(" .. cDist .. ")" .. " KO")
end
end
end
conditionsToTest[hId] = nil
end
end
for hId, dist in pairs(conditionsToTest) do
KO[#KO + 1] = {hId}
writeLog(" condition " .. hId .. "," .. dist .. " KO (missed)")
end
local minKO
for i=1,#KO do
if KO[i][2] then
if not minKO or minKO>KO[i][2] then
minKO=KO[i][2]
end
end
end
if minKO and minKO>1 then
if #OK>1 then
writeLog("#OK>1 and fail for longer distance! Only SS case expected",10)
elseif #OK==1 then
local c=OK[1] --S
for i=1,minKO do
OK[1]=OK[1]..c
end
end
end
return OK, KO
end --checkConditions
local function buildLevelItem(costStartRecipe2LevelEnd,prevLevelKey,costLevelStart2StartSubst,stackStartSubst,bitsStartSubst2Easy,stackEasy,tbitsEasy2Mid,stackMid,bitsMid2PreEmissionSubst,stackPreEmissonSubst,emission,stackPostEmissonSubst,ymxAtLevelEnd)
local retItem={}
retItem.costStartRecipe2LevelEnd = costStartRecipe2LevelEnd
retItem.prevLevelKey = prevLevelKey
retItem.costLevelStart2StartSubst = costLevelStart2StartSubst
retItem.stackStartSubst = stackStartSubst
retItem.bitsStartSubst2Easy = bitsStartSubst2Easy
retItem.stackEasy = stackEasy
retItem.tbitsEasy2Mid = tbitsEasy2Mid
retItem.stackMid = stackMid
retItem.bitsMid2PreEmissionSubst = bitsMid2PreEmissionSubst
retItem.stackPreEmissonSubst = stackPreEmissonSubst
retItem.emission = emission
retItem.stackPostEmissonSubst = stackPostEmissonSubst
retItem.ymxAtLevelEnd=ymxAtLevelEnd
--there will be backup items for itemfilling postprocessing for different paths (to allow restoring original values) ... but these values are used for reporting
-- templating changes costStartRecipe2LevelEnd as templating for level l affects bitsEasy2Mid on previous levels ... small portion of levelItems will be part of any recipe attempt so no neednot to waste room backuping in advance
return retItem
end --buildLevelItem
local i = io.open(levelFileName, "r")
local inputLine = i:read()
if inputLine then
writeLog("inputLine=" .. inputLine,5)
inputLine = inDelimiters(">" .. inputLine .. "--", ">", "-%-")
writeLog("input=" .. inputLine,5)
else
writeLog("inputLine=nil",5)
end
startTemplateTop = inDelimiters(">" .. inputLine, ">", " ")
finalStack = inDelimiters(inputLine, "[", "]")
writeLog("startTemplateTop:" .. startTemplateTop .. " finalStack:" .. finalStack, 5)
local stackStart = ""
for k = bottomymx, startTemplateTop, 8 do
stackStart = stackStart .. "#"
end
if stackprefixStart then
stackStart=stackprefixStart..string.sub(stackStart,string.len(stackprefixStart)+1)
end
writeLog("stackStart " .. stackStart .. "(" .. startTemplateTop .. "," .. bottomymx .. ",8)", 2)
level = 1
levelStacks[level] = {}
levelStacks[level][stackStart] = buildLevelItem(0,'',0,stackStart,'',
stackStart,'',stackStart, '', stackStart, '', stackStart, bottomymx) -- actually just first and second last variables will be used
writeLog("levelStacks["..level.."]["..stackStart.."]",-2)
local prevLevel, nrPrevLevelSwappers = {}, 1
inputLine = ""
while inputLine do
queueInit()
local forbidden={}
levelGoals[level]=inputLine
while inputLine ~= "" do
local forbiddenPos,targetymxPos = string.find(inputLine,'%"'),string.find(inputLine,'%[')
while forbiddenPos and forbiddenPos<targetymxPos do
forbidden[#forbidden+1]=inDelimiters(inputLine,'"','"')
forbiddenPos=string.find(inputLine,'%"',forbiddenPos+1)
inputLine=string.sub(inputLine,forbiddenPos+1)
forbiddenPos,targetymxPos = string.find(inputLine,'%"'),string.find(inputLine,'%[')
end
local targetymx = inDelimiters(inputLine, '[', ']') - bottomymx
local emissionsKey = "d" .. inttostring(targetymx % 8) .. "p" .. string.sub(inputLine, 3, 5)
g.show("Level "..inttostring(level).." Adding emissions "..emissionsKey)
writeLog("Adding emissions "..emissionsKey,5)
queueMerge(emissions[emissionsKey], targetymx, forbidden)
inputLine = string.sub(inputLine, 1 + string.find(inputLine, '%]'))
end
while not queueEmpty() do
local emission, targetymx = queuePull()
writeLog("trying emission " .. emission .. " targeymx " .. targetymx .. " on level " .. level, 3)
local bitsEmission, move, conditions, movestackPre, movestackPost, glider = parseMove(emission)
--local dist, _phase = string.match(glider, '(%d*) (%d*)') --we know mod8 everything matches
local dist, _phase = inDelimiters("("..glider,"("," "),inDelimiters(glider..")"," ",")")
local moveDelta = targetymx - dist
local stackXPreMove, stackXPostMove = extendStacks(movestackPre, movestackPost, moveDelta)
if not stackXPostMove then
writeLog(" emission would overshot with this bottom (dist" .. dist .. ">" .. targetymx .. "targetymx)")
elseif stackXPostMove == '#' and finalStack ~= '' then --is one # longer
writeLog(' emission would destroy the stack')
else
local stackPreEmission, stackPostEmission, move_stackPost = string.gsub(stackXPreMove, '#', '', 1), string.gsub(stackXPostMove, '#', '', 1), string.gsub(stackXPostMove, '#', '')
-- ^ may be converted by adding+8 to the end
writeLog("postStack trick " .. movestackPost .. ">" .. stackXPostMove .. ">" .. move_stackPost)
local CondSuffix, OK, KO = '', checkConditions(conditions, moveDelta)
if #OK == 0 then
writeLog(' all suffix tests failed')
else
-- todo make unionchar CondSuffix and continue just in one branch
for i = 1, #OK do
if #KO > 0 then -- what about union of possibilities?
-- template needs further specification
CondSuffix=OK[i] -- could be 'SSS' if conditioned ....21D,7S
writeLog("Changing stackPreEmission " .. stackPreEmission .. " to " .. movestackPre .. CondSuffix ..
string.sub(stackPreEmission, string.len(movestackPre) + string.len(CondSuffix) + 1))
stackPreEmission = movestackPre .. CondSuffix .. string.sub(stackPreEmission, string.len(movestackPre) + string.len(CondSuffix) + 1)
writeLog("Changing stackPostEmission " .. stackPostEmission .. " to " .. move_stackPost .. CondSuffix ..
string.sub(stackPostEmission, string.len(move_stackPost) + string.len(CondSuffix) + 1))
stackPostEmission = move_stackPost .. CondSuffix .. string.sub(stackPostEmission, string.len(move_stackPost) + string.len(CondSuffix) + 1)
elseif i > 1 then
writeLog(" done as all template suffixes work same")
break
end
local thisLevelKey,preMoveCostToBeat = packSixplicates(stackPostEmission)
if levelStacks[level][thisLevelKey] then
writeLog("Comparing with "..levelStacks[level][thisLevelKey].emission,3)
preMoveCostToBeat = levelStacks[level][thisLevelKey].costStartRecipe2LevelEnd - string.len(bitsEmission)
writeLog("preMoveCostToBeat=" .. preMoveCostToBeat .. "(levelStacks[level][stackPostEmission(" .. stackPostEmission .. ")].costStartRecipe2LevelEnd-string.len(bitsEmission))="
.. levelStacks[level][thisLevelKey].costStartRecipe2LevelEnd .. "-" .. string.len(bitsEmission))
end
if logLevel<=1 then
local s = "";
for j = 1, nrPrevLevelSwappers do
s = s .. "," .. (prevLevel[j] or "nil")
end
writeLog("PrevLevelStart: " .. string.sub(s, 2), 1)
end
for j = 1, #prevLevel do
writeLog("prevLevel[j] "..prevLevel[j],-2)
local prevLevelKey = prevLevel[j]
local predecessor=levelStacks[level - 1][prevLevelKey]
local prevResultCost,stackStartPreSubst = predecessor.costStartRecipe2LevelEnd, predecessor.stackPostEmissonSubst
writeLog("Checking connection from prevEnd=stackStartPreSubst " .. stackStartPreSubst .. " to " .. stackPreEmission ..
" preMoveCostToBeat=" .. (preMoveCostToBeat or "nil"))
local fail
if preMoveCostToBeat then
if preMoveCostToBeat <= prevResultCost then
fail = true
writeLog("stackStartPreSubst alone too expensive " .. preMoveCostToBeat .. "<=" .. prevResultCost)
else
local est = sd.changeStackCostEst(stackStartPreSubst, stackPreEmission)
if preMoveCostToBeat <= prevResultCost + est then
fail = true
writeLog("stackStartPreSubst + costLowerBound too expensive " .. preMoveCostToBeat .. "<=" .. prevResultCost .. "+" .. est)
end
end
end
if not fail then
local costResult = sd.changeStackCosts(stackStartPreSubst, stackPreEmission)
local preMoveCost = prevResultCost + costResult.costStartPreSubst2TargetSubst
if (preMoveCostToBeat and preMoveCostToBeat <= preMoveCost) or costResult.costStartPreSubst2TargetSubst>900000000 then
fail = true
writeLog("stackStartPreSubst + cost too expensive " .. (preMoveCostToBeat or "nil") .. "<=" .. preMoveCost .. "=" .. prevResultCost .. "+" .. costResult.costStartPreSubst2TargetSubst)
-- actually we could have more better stackTargetSubst than is the cost difference and we discard it losing a better continuation
-- probably more efficient method would address by stackPostEmissionSubst rather by stackPostEmission, but that would lead to exponential growth of level widths
else
preMoveCostToBeat = preMoveCost
local stackPostEmissionSubst = move_stackPost .. CondSuffix .. string.sub(costResult.stackTargetSubst, string.len(movestackPre) + string.len(CondSuffix) + 1)
--writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog("insert or update on level " .. level .. "[" .. stackPostEmission .. "]["
.. costResult.stackTargetSubst .. "]>[" .. stackPostEmissionSubst .. "]="
.. (preMoveCost + string.len(bitsEmission))
.. "[" .. stackStartPreSubst .. "]+("..costResult.costStartPreSubst2StartSubst..")~["
.. costResult.stackStartSubst .. "]>'" .. costResult.bitsStartSubst2Easy
.. "'>[" .. costResult.stackEasy .. "]>'" .. costResult.tbitsEasy2Mid .. "'>["
.. costResult.stackMid .."]>'" .. costResult.bitsMid2TargetSubst .. "'>["
.. stackPreEmission .. "]~[".. costResult.stackTargetSubst .."]>'"
.. move .. "'(" .. inttostring(costResult.costStartPreSubst2TargetSubst
- costResult.costStartPreSubst2StartSubst
- string.len(sd.bitsRemoveInfo(costResult.tbitsEasy2Mid ..costResult.bitsMid2TargetSubst)))..")"
.. "<" .. inttostring(moveDelta + bottomymx), 2)
levelStacks[level][thisLevelKey] =
buildLevelItem(preMoveCost + string.len(bitsEmission), prevLevelKey, costResult.costStartPreSubst2StartSubst,
costResult.stackStartSubst,costResult.bitsStartSubst2Easy,
costResult.stackEasy,costResult.tbitsEasy2Mid,
costResult.stackMid,costResult.bitsMid2TargetSubst,
costResult.stackTargetSubst,move,
stackPostEmissionSubst,moveDelta + bottomymx)
writeLog("levelStacks["..level.."]["..stackPostEmission.."]={"..levelStacks[level][thisLevelKey].costStartRecipe2LevelEnd.."(,*)^9"..stackPostEmissionSubst.."}",-2)
-- prevLevelKey was successfull for this continuation so promote it among ever successfull prevLevelKeys
-- it would be nice to eliminate from QuarkCond*Emissions.txt those emission which will never lead to succsesfull prevLevelKeys
local k = j
if j > nrPrevLevelSwappers then
nrPrevLevelSwappers = 1 + nrPrevLevelSwappers
prevLevel[j] = prevLevel[nrPrevLevelSwappers]
k = nrPrevLevelSwappers
end
while (k > 1) do
prevLevel[k] = prevLevel[k - 1]
k = k - 1
end
prevLevel[1] = prevLevelKey
end
end
end
end
end
end
end
while inputLine == "" do
inputLine = i:read()
if inputLine then
writeLog("inputLine=" .. inputLine,5)
inputLine = inDelimiters(">" .. inputLine .. "--", ">", "-%-")
for i=1,string.len(inputLine) do
if string.sub(inputLine,-i, -i)~=" " then
inputLine = string.sub(inputLine,1,-i)
break
end
if i==string.len(inputLine) then
inputLine=""
end
end
writeLog("input=" .. inputLine,5)
else
writeLog("inputLine=nil",5)
break
end
end
-- efficient local sorting ... "inacurracies" would be swapped on next level
prevLevel, nrPrevLevelSwappers = {}, 1
for endPreSubsStack, info in pairs(levelStacks[level]) do
--we prefere best first and try to maintain best candidates near 1
prevLevel[1 + #prevLevel] = endPreSubsStack
if levelStacks[level][prevLevel[nrPrevLevelSwappers]].costStartRecipe2LevelEnd > info.costStartRecipe2LevelEnd then
nrPrevLevelSwappers = 1 + nrPrevLevelSwappers
prevLevel[#prevLevel] = prevLevel[nrPrevLevelSwappers]
prevLevel[nrPrevLevelSwappers] = endPreSubsStack
end
end
for i = 1, nrPrevLevelSwappers // 2 do
prevLevel[nrPrevLevelSwappers + 1 - i], prevLevel[i] = prevLevel[i], prevLevel[nrPrevLevelSwappers + 1 - i]
end
level = level + 1
levelStacks[level] = {}
end
i:close()
local stackTarget, preMoveCostToBeat = finalStack
writeLog("finalizing", 5)
if finalStack~="?" then
local thisLevelKey,preMoveCostToBeat = packSixplicates(stackTarget)
for j = 1, #prevLevel do
local prevLevelKey = prevLevel[j]
local prevResult = levelStacks[level - 1][prevLevelKey]
local stackStartPreSubst=prevResult.stackPostEmissonSubst
writeLog("Checking connection from stackStartPreSubst " .. stackStartPreSubst.."("..prevResult.costStartRecipe2LevelEnd.."+?)", 2)
local fail
if preMoveCostToBeat then
if prevResult.costStartRecipe2LevelEnd > preMoveCostToBeat then
fail = true
writeLog("stackStartPreSubst alone too expensive", 2)
else
local est = sd.changeStackCostEst(stackStartPreSubst, stackTarget)
if prevResult.costStartRecipe2LevelEnd + est > preMoveCostToBeat then
fail = true
writeLog("stackStartPreSubst + costLowerBound too expensive", 2)
end
end
end
if not fail then
local costResult = sd.changeStackCosts(stackStartPreSubst, stackTarget)
local preMoveCost = prevResult.costStartRecipe2LevelEnd + costResult.costStartPreSubst2TargetSubst
if preMoveCostToBeat and preMoveCost > preMoveCostToBeat then
fail = true
writeLog("prevPostStack + cost too expensive", 2)
end
if not fail then
preMoveCostToBeat = preMoveCost
writeLog("insert or update on final level " .. level .. " preMoveCostToBeat=" .. preMoveCostToBeat, 10)
levelStacks[level][thisLevelKey] = buildLevelItem(preMoveCost, prevLevelKey, costResult.costStartPreSubst2StartSubst,
costResult.stackStartSubst,costResult.sbitsStartSubst2Easy,
costResult.stackEasy,costResult.tbitsEasy2Mid,
costResult.stackMid,costResult.bitsMid2TargetSubst,
costResult.stackTargetSubst,'',
costResult.stackTargetSubst,bottomymx)
writeLog("levelStacks["..thisLevelKey.."][final]={"..levelStacks[level][thisLevelKey].costStartRecipe2LevelEnd.."(,*)^9"..stackTarget.."}",-2)
end
end
end
return {thisLevelKey}
end
writeLog("finalStack == ?", 5)
level = level-1
return prevLevel
end --search
local function getWinner(stackStartPreSubst)
writeLog('getWinner started',2)
local stackStartPreSubstTxt=packSixplicates(stackStartPreSubst or "nil")
writeLog("Switching to another log", 10)
writeLog("c:\\Golly\\FixedBottomGliderLevelsToBitsWinner_"..stackStartPreSubstTxt.."_log.txt", 10)
log:close()
log = io.open("c:\\Golly\\FixedBottomGliderLevelsToBitsWinner_"..stackStartPreSubstTxt.."_log.txt", "w")
local winners = {}
winners[level + 1] = (finalStack=="?") and stackStartPreSubst or finalStack
writeLog("\nfinalStack ... ="..winners[level + 1], 2)
for l = level, 1, -1 do
writeLog("l = "..l, 2)
if not levelStacks[l][winners[l + 1]] then
writeLog("levelStacks["..l.."]["..winners[l + 1].."] does nt exist.",2)
end
winners[l] = levelStacks[l][winners[l + 1]].prevLevelKey
writeLog("< "..winners[l], 2)
--backup
levelStacks[l][winners[l + 1]].bakTbitsEasy2Mid=levelStacks[l][winners[l + 1]].tbitsEasy2Mid
levelStacks[l][winners[l + 1]].bakStackStartSubst=levelStacks[l][winners[l + 1]].stackStartSubst
levelStacks[l][winners[l + 1]].bakCostStartRecipe2LevelEnd=levelStacks[l][winners[l + 1]].costStartRecipe2LevelEnd
levelStacks[l][winners[l + 1]].bakStackEasy=levelStacks[l][winners[l + 1]].stackEasy
levelStacks[l][winners[l + 1]].bakStackMid=levelStacks[l][winners[l + 1]].stackMid
levelStacks[l][winners[l + 1]].bakStackPreEmissonSubst=levelStacks[l][winners[l + 1]].stackPreEmissonSubst
levelStacks[l][winners[l + 1]].bakStackPostEmissonSubst=levelStacks[l][winners[l + 1]].stackPostEmissonSubst
--? retItem.costLevelStart2StartSubst = costLevelStart2StartSubst
end
writeLog('getWinner finisehed',2)
return winners
end
--{{postStack->{toalcost,previousPostStack,move,prepareInfo}}}
local function outputResult(output,lastLevelKey)
writeLog('outputResult() started',2)
output:write("--bottomymx:" .. bottomymx .. " totalCost=" .. levelStacks[level][lastLevelKey].costStartRecipe2LevelEnd)
local prevCost = 0
for l = 1, level do
writeLog('level '..l..":"..winners[l + 1],2)
local tbitsEasy2Mid, costEasy2Mid = levelStacks[l][winners[l + 1]].tbitsEasy2Mid;
costEasy2Mid = string.len(sd.bitsRemoveInfo(tbitsEasy2Mid))
local emission, bitsEmission, move, glider = levelStacks[l][winners[l + 1]].emission, '', '', ''
if emission ~= '' then
bitsEmission, move, _, _, _, glider = parseMove(emission)
if glider ~= '' then
glider = '(' .. glider .. ')'
local dist, phase = inDelimiters(glider, '(', ' '), inDelimiters(glider, ' ', ')')
writeLog('inttostring A')
glider = '(g' .. phase .. '%8)[' .. inttostring(dist + levelStacks[l][winners[l + 1]].ymxAtLevelEnd) .. ']' .. glider
end
end
local preCost = levelStacks[l][winners[l + 1]].costStartRecipe2LevelEnd - prevCost - string.len(bitsEmission)
- costEasy2Mid - string.len(levelStacks[l][winners[l + 1]].bitsStartSubst2Easy..levelStacks[l][winners[l + 1]].bitsMid2PreEmissionSubst)
if levelStacks[l][winners[l + 1]].stackStartSubst ~= levelStacks[l][winners[l + 1]].stackEasy then
writeLog('inttostring B')
preCost = '(+' .. inttostring(preCost) .. ")"
else
preCost = ''
end
local bbits,bitsEmissionSpaceFormated
if move=='' then
bitsEmissionSpaceFormated=''
else
bbits = string.sub(move,2,-2)
bitsEmissionSpaceFormated = string.sub(inDelimiters(bbits,']','('),1,-2).." "..string.sub(inDelimiters(bbits,']','('),-1)
.." "..inDelimiters(bbits,')','[')
end
writeLog('inttostring C')
output:write(preCost .. "\n" .. levelStacks[l][winners[l + 1]].bitsStartSubst2Easy .. " " .. tbitsEasy2Mid ..
levelStacks[l][winners[l + 1]].bitsMid2PreEmissionSubst .. " " .. bitsEmissionSpaceFormated ..
" --" .. glider .. "<" .. inttostring(levelStacks[l][winners[l + 1]].ymxAtLevelEnd) .. "(" ..
levelStacks[l][winners[l + 1]].costStartRecipe2LevelEnd .. ")" ..
"[" .. packSixplicates(levelStacks[l][winners[l + 1]].stackStartSubst) .. "]>[" ..
packSixplicates(levelStacks[l][winners[l + 1]].stackEasy) .. "]>[" ..
packSixplicates(levelStacks[l][winners[l + 1]].stackMid) .. "]>[" ..
packSixplicates(levelStacks[l][winners[l + 1]].stackPreEmissonSubst) .. "]>[" ..
packSixplicates(levelStacks[l][winners[l + 1]].stackPostEmissonSubst) .. "]~(" ..
packSixplicates(winners[l + 1]) .. ")["
.. packSixplicates(levelStacks[l][winners[l + 1]].costStartRecipe2LevelEnd) .. "] "..levelGoals[l])
prevCost = levelStacks[l][winners[l + 1]].costStartRecipe2LevelEnd
end
output:write("\n")
writeLog('outputResult() finished',2)
end
local function restoreWinner()
writeLog("restoreWinner()",2)
for l = 2, level do
levelStacks[l][winners[l + 1]].tbitsEasy2Mid=levelStacks[l][winners[l + 1]].bakTbitsEasy2Mid
levelStacks[l][winners[l + 1]].stackStartSubst=levelStacks[l][winners[l + 1]].bakStackStartSubst
levelStacks[l][winners[l + 1]].costStartRecipe2LevelEnd=levelStacks[l][winners[l + 1]].bakCostStartRecipe2LevelEnd
levelStacks[l][winners[l + 1]].stackEasy=levelStacks[l][winners[l + 1]].bakStackEasy
levelStacks[l][winners[l + 1]].stackMid=levelStacks[l][winners[l + 1]].bakStackMid
levelStacks[l][winners[l + 1]].stackPreEmissonSubst=levelStacks[l][winners[l + 1]].bakStackPreEmissonSubst
levelStacks[l][winners[l + 1]].stackPostEmissonSubst=levelStacks[l][winners[l + 1]].bakStackPostEmissonSubst
end
end
local function fixWinnerBackWardTemplate(l,stackNextLevelStartSubst,stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst)
writeLog("{level "..l.." ["..(stackNextLevelStartSubst or "nil").."]~["..stackPostEmissonSubst.."]<["..stackPreEmissonSubst.."]<["
..stackMid.."]<'"..tbitsEasy2Mid.."'<["..stackEasy.."]<["..stackStartSubst.."]("..costStartRecipe2LevelEnd.."|"
..costLevelStart2StartSubst..")",3)
if stackNextLevelStartSubst then
local eqPreEPostESuffixLen=sd.EQTemplateTailLen(stackPreEmissonSubst, stackPostEmissonSubst)
local eqMidPreESuffixLen=sd.EQTemplateTailLen(stackMid, stackPreEmissonSubst)
local eqEasyMidSuffixLen=sd.EQTemplateTailLen(stackEasy, stackMid)
local eqStartSubstEasySuffixLen=sd.EQTemplateTailLen(stackStartSubst, stackEasy)
local recomputetbitsEasy2Mid=false
--local eCost=0
local possibleTemplatingChars,possibleReplacementChars,confirmedTemplatingChars,confirmedReplacementChars =
'','','',''
writeLog(eqPreEPostESuffixLen.." "..eqMidPreESuffixLen.." "..eqEasyMidSuffixLen.." "..eqStartSubstEasySuffixLen,-5)
for i=1,string.len(stackNextLevelStartSubst) do
local nl=string.sub(stackNextLevelStartSubst,-i,-i)
local oe=string.sub(stackPostEmissonSubst,-i,-i)
local ee=string.sub(stackPreEmissonSubst,-i,-i)
local m=string.sub(stackMid,-i,-i)
local e=string.sub(stackEasy,-i,-i)
local s=string.sub(stackStartSubst,-i,-i)
writeLog(i..possibleTemplatingChars.."|"..possibleReplacementChars.."|"..confirmedTemplatingChars.."|"..confirmedReplacementChars.."|"..(nl or ".")..(oe or ".")..(ee or ".")..(m or ".")..(e or ".")..(s or "."),-5)
if i>eqEasyMidSuffixLen then
local tempChar=sd.templateCharNotUnique(oe)
if tempChar~='' then
possibleTemplatingChars,possibleReplacementChars=
possibleTemplatingChars..oe,
possibleReplacementChars..nl
end
end
if nl~=oe then
confirmedTemplatingChars,confirmedReplacementChars = possibleTemplatingChars,possibleReplacementChars
local aCost=sd.isAChartemplatingBChar(nl,oe)
if aCost then
costStartRecipe2LevelEnd=costStartRecipe2LevelEnd+aCost
--costLevelStart2StartSubst any change?
stackPostEmissonSubst=sd.replaceTailChar(stackPostEmissonSubst,nl,i)
if i<=eqPreEPostESuffixLen then
stackPreEmissonSubst=sd.replaceTailChar(stackPreEmissonSubst,nl,i)
if i<=eqMidPreESuffixLen then
stackMid=sd.replaceTailChar(stackMid,nl,i)
if i<=eqEasyMidSuffixLen then
stackEasy=sd.replaceTailChar(stackEasy,nl,i)
if i<=eqStartSubstEasySuffixLen then
stackStartSubst=sd.replaceTailChar(stackStartSubst,nl,i)
--costLevelStart2StartSubst any change?
else
writeLog('Something wrong in templating D!',10)
end
else
--eCost=eCost+aCost
recomputetbitsEasy2Mid=true
writeLog('We have to modify tbitsEasy2Mid',3)
end
else
writeLog('Something wrong in templating C!',10)
end
else
writeLog('Something wrong in templating B!',10)
end
else
writeLog('Something wrong in templating A!',10)
end
end
writeLog(i..possibleTemplatingChars.."|"..possibleReplacementChars.."|"..confirmedTemplatingChars.."|"..confirmedReplacementChars,-5)
end
if recomputetbitsEasy2Mid then
--[[local result=sd.changeStackCosts(preEasyStack,stackPreEmission)
if string.len(sd.bitsRemoveInfo(result.tbitsEasy2Mid))~=eCost+string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) then
writeLog('Modified preEasyMoveBits have strange length ',10)
else
tbitsEasy2Mid=result.tbitsEasy2Mid
end
]]
local fail
writeLog("'"..tbitsEasy2Mid.."' "..confirmedTemplatingChars..'>'..confirmedReplacementChars,2)
local i=0
while (i<string.len(tbitsEasy2Mid)) do
i=string.find(tbitsEasy2Mid,'%\\',i+1)
if not i then
if confirmedTemplatingChars~='' then
writeLog('Something wrong in templating D!',10)
fail=true
end
break
end
i=i+1
local tbit = sd.templateCharNotUnique(string.sub(tbitsEasy2Mid,i,i))
if tbit==string.sub(confirmedTemplatingChars,1,1) then
local rbit=string.sub(confirmedReplacementChars,1,1)
confirmedTemplatingChars=string.sub(confirmedTemplatingChars,2)
confirmedReplacementChars=string.sub(confirmedReplacementChars,2)
local costrS=sd.costSp1isSBPD(rbit)
local costtS=sd.costSp1isSBPD(tbit)
local repl=sd.templateCharNotUniqueBackwardMark(rbit) .. string.rep('1',costtS-costrS)
tbitsEasy2Mid=string.sub(tbitsEasy2Mid,1,i-2)..repl..string.sub(tbitsEasy2Mid,i+1)
end
end
writeLog("'"..tbitsEasy2Mid.."' "..confirmedTemplatingChars..'>'..confirmedReplacementChars,2)
if fail then
writeLog("Recomputing easy2mid bis from scratch as templating did not worked!",10)
local est, cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.ignoreSuffixChangeStackCost(stackStartSubst,stackEasy,stackMid,stackPreEmissonSubst)
if cost then
stackStartSubst,tbitsEasy2Mid,stackEasy,stackMid,stackPreEmissonSubst=startStack, bits, preEasyStack, midStack, targetStack
else
writeLog("Recomputing from scratch did not worked!",10)
end
end
end
writeLog("level} "..l.." ["..(stackNextLevelStartSubst or "nil").."]~["..stackPostEmissonSubst.."]<["..stackPreEmissonSubst.."]<["
..stackMid.."]<'"..tbitsEasy2Mid.."'<["..stackEasy.."]<["..stackStartSubst.."]("..costStartRecipe2LevelEnd.."|"
..costLevelStart2StartSubst..")",3)
end
return stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst
end
-- it could happen some backward template would be 'accidentally' made equal with forward template on the same position.
-- # -> 111 -> S -> 211211# ->S# is wrong if # is not D, but
-- # -> /#111 -> S -> 211211\# -> S# is OK making these #'s independent (and ignorable)
-- the number of 1's in the code corresponds to templateMaxSingle( )
-- when forward # is changed latter, the following 1's should be removed accordingly
-- I let the option of forward templating open, the concept could have problem with dependent cases where
-- relative DPBS position of templates could matter ... for now I would force templateMaxSingle( ) for forward.
-- there is intermediate result save before the fixWinnerBackWardTemplates, so the problemss could be solved separately.
local function fixWinnerBackWardTemplates(lastLevelKey)
writeLog("Switching to another log", 10)
writeLog("c:\\Golly\\FixedBottomGliderLevelsToBitsWinnerTemplates_"..lastLevelKey.."_log.txt", 10)
log:close()
log = io.open("c:\\Golly\\FixedBottomGliderLevelsToBitsWinnerTemplates_"..lastLevelKey.."_log.txt", "w")
local stackNextLevelStartSubst
for l=level,2,-1 do
local thisLevelNode=levelStacks[l][winners[l + 1]]
local stackPostEmissonSubst = thisLevelNode.stackPostEmissonSubst
local stackPreEmissonSubst = thisLevelNode.stackPreEmissonSubst
local stackMid = thisLevelNode.stackMid
local tbitsEasy2Mid = thisLevelNode.tbitsEasy2Mid
local stackEasy = thisLevelNode.stackEasy
local stackStartSubst = thisLevelNode.stackStartSubst
local costStartRecipe2LevelEnd = thisLevelNode.costStartRecipe2LevelEnd
local costLevelStart2StartSubst = thisLevelNode.costLevelStart2StartSubst
stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst =
fixWinnerBackWardTemplate(l,stackNextLevelStartSubst,stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst)
thisLevelNode.stackPostEmissonSubst = stackPostEmissonSubst
thisLevelNode.stackPreEmissonSubst = stackPreEmissonSubst
thisLevelNode.stackMid = stackMid
thisLevelNode.tbitsEasy2Mid = tbitsEasy2Mid
thisLevelNode.stackEasy = stackEasy
thisLevelNode.stackStartSubst = stackStartSubst
thisLevelNode.costStartRecipe2LevelEnd = costStartRecipe2LevelEnd
thisLevelNode.costLevelStart2StartSubst = costLevelStart2StartSubst
levelStacks[l][winners[l + 1]] = thisLevelNode
stackNextLevelStartSubst=levelStacks[l][winners[l + 1]].stackStartSubst
end
writeLog('fixWinnerTemplates finished',2)
end
--local glider = "(-1 4)"
--local dist, phase = inDelimiters(glider,"("," "),inDelimiters(glider," ",")")
--local d8 = inttostring(dist % 8)
--g.note(glider.." "..dist.." "..phase.." "..d8)
--g.note("pokus "..string.sub("pokus",0))
---[[
iniMoves(moveConds1FileName,1)
iniMoves(moveConds2FileName,2)
iniMoves(moveConds4FileName,4)
iniMoves(moveConds8FileName,8)
local resultOutput = io.open(resultOutputFileName, "w")
local templateFixedOutput = io.open(templateFixedOutputFileName, "w")
local prevLevel
local function main()
logLevel = 2
sd.logLevel = 2
for i=0,6,2 do
bottomymx = i -- -2656 -- -2716 -- -2344 -- -2716
-- g.show(i)
writeLog("Switching to another log", 10)
writeLog("c:\\Golly\\FixedBottomGliderLevelsToBitsSearch"..i.."_log.txt", 10)
log:close()
log = io.open("c:\\Golly\\FixedBottomGliderLevelsToBitsSearch"..i.."_log.txt", "w")
prevLevel = search('S')
--search('I4S#######################')
g.show("Finalizing")
for j = 1, #prevLevel do
local lastLevelKey = prevLevel[j]
if finalStack == "?" then
winners = getWinner(lastLevelKey)
else
lastLevelKey=packSixplicates(finalStack)
winners = getWinner(lastLevelKey)
end
outputResult(resultOutput,lastLevelKey)
if true then
fixWinnerBackWardTemplates(lastLevelKey)
end
outputResult(templateFixedOutput,lastLevelKey)
if finalStack~="?" then
break
end
restoreWinner()
end
end
end
local function tests()
--sd.writeLog('bitsRemoveInfo("12asvcrw453SDpx#>^")'..sd.bitsRemoveInfo("12asvcrw453SDpx#>^"),5)
--writeLog('bitsRemoveInfo("12asvcrw453SDpx#>^")'..sd.bitsRemoveInfo("12asvcrw453SDpx#>^"),5)
--sd.easyChangeStackCost(startStack, preEasyStack, midStack, targetStack, suffixDist, commonSuffixLen)
local testId,ss,ts,di,cl="0elb","","",0,0
local es,ms
local est, cost, bits, startStack, preEasyStack, midStack, targetStack, sCost, tbitsEasy2Mid, stackStartSubst, stackEasy, stackMid, stackTargetSubst
local stackNextLevelStartSubst,stackPostEmissonSubst,stackPreEmissonSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst
local costStartPreSubst2StartSubst, commonSuffixLen, suffixDist, eqSuffixLen
logLevel = -5
sd.logLevel = -5
sd.writeLog("----- { TESTS -----",10)
--[[
ss='SB'
ts='P##bp#D'
est = sd.easyChangeStackLowerBound(ss,ts,di,cl)
sd.writeLog(testId.." >="..((est and est .." "..ss..">"..ts) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." >="..((est and est .." "..ss..">"..ts) or "nil").."[1^"..di.."]cl="..cl,5)
est, cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.ignoreSuffixChangeStackCost(ss,ss,ts,ts)
testId="0isclb"
sd.writeLog(testId.." >="..((est and est .." "..ss..">"..ts) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." >="..((est and est .." "..ss..">"..ts) or "nil").."[1^"..di.."]cl="..cl,5)
testId="0isc"
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
est = sd.changeStackCostEst(ss,ts)
testId="0cse"
sd.writeLog(testId.." >="..((est and est .." "..ss..">"..ts) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." >="..((est and est .." "..ss..">"..ts) or "nil").."[1^"..di.."]cl="..cl,5)
testId="0ec1"
cost, tbitsEasy2Mid, stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..ss.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ts.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..ss.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ts.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
testId="0cs"
cost=sd.changeStackCosts(ss,ts) --wrongly substituted P ... should be r
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
testId="0ec2"
cost, tbitsEasy2Mid, stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..ss.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ts.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..ss.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ts.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
--]]
--[[
ss,ts,di,cl ='#############################################################################','D',0,0
testId="10"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ts='P'
di,cl=1,1
testId="11"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
di,cl=0,0
testId="12"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
--]]
--[[
ss= 'SPuS##'
ts='SDSDDSB##S##'
di,cl=0,0
testId="12.5"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss,ts,di,cl='DDD','SSPBSBDSB',5,2
ss,ts,di,cl='DDD','BDSSPBSBDSB',5,2
ss,ts,di,cl ='#############################################################################','D',0,0
es='#B###########################################################################'
ms=ts
testId="10a ss es ms ts"
cost, tbitsEasy2Mid, stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
= sd.easyChangeStackCost(ss,es,ms,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..es.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ms.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..es.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ms.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss=es
testId="10b es es ms ts"
cost, tbitsEasy2Mid, stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
= sd.easyChangeStackCost(ss,es,ms,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..es.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ms.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..es.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ms.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss,ts,di,cl ='#############################################################################','D',0,0
testId="10c ss ss ms ts"
es=ss
cost, tbitsEasy2Mid, stackStartSubst, stackEasy, stackMid, stackTargetSubst, sCost
= sd.easyChangeStackCost(ss,es,ms,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..es.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ms.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .." ["..ss.."](+"..sCost..")=["..stackStartSubst.."]>?>["..stackEasy.."](["..es.."])>'"..tbitsEasy2Mid.."'>["..stackMid.."](["..ms.."])>?>["..stackTargetSubst.."](["..ts.."]) "..(cost-sCost==string.len(sd.bitsRemoveInfo(tbitsEasy2Mid)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
--]]
--[[
ts='P'
di,cl=1,1
testId="11a"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
di,cl=0,0
testId="12a"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss,ts,di,cl ='S############################################################################','D',0,0
testId="10b"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ts='P'
di,cl=1,1
testId="11b"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
di,cl=0,0
testId="12b"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss,ts,di,cl='BDDDD','S',3,1
testId="13"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss,ts,di,cl='DDD','SSPBSBDSB',5,2
ss,ts,di,cl='DDD','BDSSPBSBDSB',5,2
testId="14"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss='T14###########################################################################'
ts='S6d6BDSSDD####################################################################'
testId="15"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
--]]
--[[
--ss,ts='P','##'
--ss,ts='S','##'
ss,ts='BBD','P#BSB'
testId="16"
est, cost, bits, startStack, preEasyStack, midStack, targetStack, sCost = sd.ignoreSuffixChangeStackCost(ss,ss,ts,ts)
sd.writeLog(testId.." >=" .. est .." " ..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." >=" .. est .." " ..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
--]]
--[[
ss='##############################################################################################################################################################################################################################################################################################################################################################################################################################################################'
ts= 'PDDDDDD#################################################################################################################################################################################################################################################################################################################################################################################'
testId="17"
cost=sd.changeStackCosts(ss,ts) --wrongly substituted P ... should be r
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='##############################################################################################################################################################################################################################################################################################################################################################################################################################################################'
ts= 'SSPDDDDDD#################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts) --
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='S##########################################################################################################################################################################################################################################################################################################################################################################################################################################################################################'
ts= 'B6d6DSDDDDD####################################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='S###############################################################################################################################################################################################################################################################################################################################################################################################################'
ts= 'B6d6DSDDDDD####################################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='###############################################################################################################################################################################################################################################################################################################################################################################################################'
ts='B6d6DSDDDDD####################################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='S##############################################################################################################################################################################################################################################################################################################################################################################################################'
ts='B6d6DSDDDDD####################################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'S#############################################################################################################################################################################################################################################################################################################################################################################################################'
ts='B6d6DSDDDDD####################################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='##############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################'
ts='S6d6BSDDDD########################################################################################################################################################################################################################################################################################################################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='##################################################################################'
ts='B6d6DDSSDDBSSS###############################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='1P##################################################################################'
ts='B6d6DSDDDDD########################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='S######################################################################################################################################################################################################################################################'
ts='PDDDDDD########################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='H6T22###########################################################################'
ts='B6d6DSDDDD########################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='SSS###########################################################################'
ts='S6d6BDBDDDDB###############################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='I4S###########################################################################'
ts='T6SPDSS###############################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='###########################################################################'
ts='B6d6DDSSDDBSSS########################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='T14###########################################################################'
ts='S6d6BDSSDD####################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'T6S##########################'
ts='SDSDDSDB########################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'S#D'
ts='SBDBDD#PD'
cl,di=1,0
testId="26SPprefix"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--[[ss= 'SPDB####D###S#######'
ts='SBDBDD#PDB####D###S#######'
testId="26SPprefix"
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
testId=19
ss='T14###########B###SD####S######################################'
ts= 'B6d6DSDDDDD################################################' --easy Su##SD####S#... but Mid .....D###SD####S#... u->#?
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--[[
testId=20
ss= 'SBBDD'
ts= 'PDDDDD'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'T6S#########'
ts= 'SDSDDSDD#####'
testId=21
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'SDDS##S#######'
ts= 'SDSDDSB##S#######'
testId=22
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss='PDDS###########'
ts='PDBS###########'
testId=22
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." "..ss.."("..startStack..") "..preEasyStack.." > "..midStack.." "..ts.."("..targetStack..") "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
ss='SDDS###########'
ts='PDBS###########'
testId=23
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'SPu#########'
ts='S6d6BDD##########'
testId=24
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'SDDS#DB####D###S#######'
es= 'SSSPDB####D###S#######'
ts='SDSSDSS#DB####D###S#######'
cl,di=18,0
testId="25easy0 " --template startStack?
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,es,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..es..']~['..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..es..']~['..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)ss= 'SDDS#DB####D###S#######'
ts='SDSSDS####################' --templating \#???
cl,di=21,3
testId="25easy "
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
testId="25Asearch "
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'SSSPDB####D###S#######'
ts='SDSSDSSPDB####D###S#######' --templating \#???
cl,di=21,0
testId="25Beasy " --templating OK
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
testId="25Bsearch "
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'SDDS#DB####D###S#######'
ts='SDSSDS####################' --templating \#???
cl,di=21,3
testId="25Aeasyrepete"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
testId="25Asearchrepete"
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss='##DS'
ts= 'SDS'
cl,di=0,0
testId="26 " --templating OK
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,di,cl)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..preEasyStack.."]>'...'>["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..di.."]cl="..cl,5)
--]]
--[[
ss= 'DB##########'
ts='B6d6DSDDDDD###'
testId="27"
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'SSD#######'
ts='SPBD###########'
testId="27"
local costStartPreSubst2StartSubst, commonSuffixLen, suffixDist, eqSuffixLen
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, ss, ts, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'DDB#DD#######'
ts='SBDD##########'
testId="28"
local costStartPreSubst2StartSubst, commonSuffixLen, suffixDist, eqSuffixLen
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, ss, ts, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= 'SDDS###D#######'
ts='PDBSPSSS###########'
testId="29"
local costStartPreSubst2StartSubst, commonSuffixLen, suffixDist, eqSuffixLen
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, ss, ts, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
testId="test 30"
stackNextLevelStartSubst='T6SDB######'
stackPostEmissonSubst= 'T6S########'
stackPreEmissonSubst='T6SPDSS########'
stackMid= 'SSDDSS########'
tbitsEasy2Mid='211211\\#211211\\#211211\\#211211\\#211211\\#211211\\#211211\\#211211211211211211\\#111111211211211211211211111'
stackEasy= 'S'
stackStartSubst= 'S'
costStartRecipe2LevelEnd=122
costLevelStart2StartSubst=0
stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst=
fixWinnerBackWardTemplate(testId,stackNextLevelStartSubst,stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst)
writeLog(testId.." "..costStartRecipe2LevelEnd.."|"..costLevelStart2StartSubst.."["..stackStartSubst.."]>["..stackEasy.."]>'"..tbitsEasy2Mid.."'>["..stackMid.."]>["..stackPreEmissonSubst.."]>e>["..stackPostEmissonSubst.."]",5)
testId="test 236"
stackNextLevelStartSubst= '#DDDDBDDDDDDDD'
stackPostEmissonSubst= '###DDB###DDDDD'
stackPreEmissonSubst='PDBSBB###DDB###DDDDD'
stackMid= 'PDBSBB###DDB###DDDDD'
tbitsEasy2Mid='111211211\\#211211\\#211211\\#2112111121121121121111111211211112112'
stackEasy= 'DDDB###DDDDD'
stackStartSubst= 'DDDB###DDDDD'
costStartRecipe2LevelEnd=20502
costLevelStart2StartSubst=3
stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst=
fixWinnerBackWardTemplate(testId,stackNextLevelStartSubst,stackPostEmissonSubst,stackPreEmissonSubst,stackMid,tbitsEasy2Mid,stackEasy,stackStartSubst,costStartRecipe2LevelEnd,costLevelStart2StartSubst)
writeLog(testId.." "..costStartRecipe2LevelEnd.."|"..costLevelStart2StartSubst.."["..stackStartSubst.."]>["..stackEasy.."]>'"..tbitsEasy2Mid.."'>["..stackMid.."]>["..stackPreEmissonSubst.."]>e>["..stackPostEmissonSubst.."]",5)
ss= '#DDDSSDDDDDB'
ts= 'SSDDSSDDDDDB'
testId="31"
local costStartPreSubst2StartSubst, commonSuffixLen, suffixDist, eqSuffixLen
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, ss, ts, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
testId="32"
stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen='#D','#D','SS','SS',3,1
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
ss= 'SS'
ts= 'B'
testId="33a"
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(ss,ss,ts,ts,0,0)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..ss.."]~["..preEasyStack.."]>'...'>["..ts.."]~["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^0]cl="..0,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..ss.."]~["..startStack.."]>["..ss.."]~["..preEasyStack.."]>'...'>["..ts.."]~["..midStack.."]>''>["..ts.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^0]cl="..0,5)
ss= 'SSSDDD#D'
ts= 'SBDD#D'
testId="33"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, ss, ts, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
ss= 'S6d6DSBDDDSDD'
es= 'PDDSBDDDSDD'
ms= 'SBDD#########'
ts= 'S6d6BDD#########'
testId="34"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, ss, ms, ms)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ms.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]>["..stackMid.."]>["..stackTargetSubst.."]~["..ms.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss='I16T6SDSDDDS'
es= 'SDSDDDS'
ms= 'SBDS'
ts= 'S6d6BDS'
testId="35"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'S6d6BBB'
es= 'PDBBB'
ms= 'PDBSBBS###'
ts= 'PDBSBBS###'
testId="36"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
ss = 'S6d6BBB##'
ts= 'PDBSBB######'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
testId="37"
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'S6d6DS###SSB'
es= 'SDDS###SSB'
ms= 'SB'
ts= 'B6d6B'
testId="38"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or "nil").."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
--]]
--[[
ss= 'SSS'
es= 'S'
ms= 'B'
ts= 'B'
testId="39"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
--]]
--[[
ss='h4t14DSDDDD'
es= 'DSDDDD'
ms= 'PDDD'
ts= 'PDDD'
testId="40"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
testId="41"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= '##B##'
es= '##B##'
ms= 'B##'
ts= 'B##'
testId="41"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
ss= '##BD#'
es= '##BD#'
ms= 'BD#'
ts= 'BD#'
testId="42"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= '####'
es= '####'
ms= '##'
ts= '##'
testId="43" -- I would like ##D#->'11212'->P#
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
--[[
ss= 'I4SD##DDS#####DD##D#D#D#D###D##B####D###SD##########'
ts= 'PDDDDDDDB################################################'
testId="44" -- I would like ##D#->'11212'->P#
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
stackStartSubst='I16T6SBBSD###D###DD##D#D#D#D###D##B####D###SD######################################'
stackEasy= 'I4SD###D###DD##D#D#D#D###D##B####D###SD######################################'
stackMid= 'PDDDDDDDB###D###DD##D#D#D#D###D##B####D###SD######################################'
stackTargetSubst='PDDDDDDDB###D###DD##D#D#D#D###D##B####D###SD######################################'
suffixDist,commonSuffixLen=2,74
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
--]]
--[[
ss= 'SBB#D###D###DD##D#D#D#D###D##B####D###SD######################################'
ts= 'PDDDD#############################################################################'
testId="45" -- I would like ##D#->'11212'->P#
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
stackStartSubst= 'SBDuDD###D###DD##D#D#D#D###D##B####D###SD######################################'
stackEasy= 'SBuDD###D###DD##D#D#D#D###D##B####D###SD######################################'
stackMid= 'PDDDDB#DD###D###DD##D#D#D#D###D##B####D###SD######################################'
stackTargetSubst='PDDDDB#DD###D###DD##D#D#D#D###D##B####D###SD######################################'
suffixDist,commonSuffixLen=0,77
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
--]]
--[[
--todo later
testId="46" -- I would like ##D#->'11212'->P#
ss= 'T14u#SSDDD#DD#D#DD##DDDD#DD###D#D#D##D#DSB##BDD##D##DD####DB###DDD####DDB#DD###DD#D#SD#D#####D#######################'
ts= 'S6d6BDD###########################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
stackStartSubst= 'T14u#SSDDD#DD#D#DD##DDDD#DD###D#D#D##D#DSB##BDD##D##DD####DB###DDD####DDB#DD###DD#D#SD#D#####D#######################'
stackEasy= 'u#SSDDD#DD#D#DD##DDDD#DD###D#D#D##D#DSB##BDD##D##DD####DB###DDD####DDB#DD###DD#D#SD#D#####D#######################'
stackMid= 'SBDD#DD#D#DD##DDDD#DD###D#D#D##D#DSB##BDD##D##DD####DB###DDD####DDB#DD###DD#D#SD#D#####D#######################'
stackTargetSubst= 'S6d6BDD#DD#D#DD##DDDD#DD###D#D#D##D#DSB##BDD##D##DD####DB###DDD####DDB#DD###DD#D#SD#D#####D#######################'
suffixDist,commonSuffixLen=2,111
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
--]]
--[[
--todo
testId="47"
ss= 'SDDBDDSDD############################################################################################################'
ts= 'SPBDDSDD############################################################################################################'
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
-- should be 21121212111 rather to 21121211111
ss= 'SDDDD'
es= 'SDDDD'
ms= 'PDDD'
ts= 'PDDD' -- should use SD->BDD->BD->P
testId="48"
costStartPreSubst2StartSubst, stackStartSubst, stackEasy, stackMid, stackTargetSubst, commonSuffixLen, suffixDist, eqSuffixLen
= sd.templatePrev(ss, es, ms, ts)
sd.writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
writeLog(testId.." "..costStartPreSubst2StartSubst .."["..ss.."]~["..stackStartSubst.."]>["..stackEasy.."]~["..es.."]>["..stackMid.."]~["..ms.."]>["..stackTargetSubst.."]~["..ts.."]("..commonSuffixLen..","..suffixDist..","..eqSuffixLen..")",5)
cost, bits, startStack, preEasyStack, midStack, targetStack, sCost
= sd.easyChangeStackCost(stackStartSubst,stackEasy,stackMid,stackTargetSubst,suffixDist,commonSuffixLen)
sd.writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
writeLog(testId.." "..((cost and cost .."("..sCost..") "..bits.." ["..stackStartSubst.."]~["..startStack.."]>["..stackEasy.."]~["..preEasyStack.."]>'...'>["..stackMid.."]~["..midStack.."]>''>["..stackTargetSubst.."]~["..targetStack.."] "..(cost-sCost==string.len(sd.bitsRemoveInfo(bits)) and "OK" or "KO")) or sd.easyChangeStackCostErr).."[1^"..suffixDist.."]cl="..commonSuffixLen,5)
cost=sd.changeStackCosts(ss,ts)
sd.writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
writeLog(testId.." "..cost.costStartPreSubst2TargetSubst .."["..ss.."](+"..cost.costStartPreSubst2StartSubst..")=["..cost.stackStartSubst.."]>'"..cost.bitsStartSubst2Easy.."'>["..cost.stackEasy.."]>'"..cost.tbitsEasy2Mid.."'>["..cost.stackMid.."]>'"..cost.bitsMid2TargetSubst.."'>["..cost.stackTargetSubst.."]("..ts..")".. (cost.costStartPreSubst2TargetSubst-cost.costStartPreSubst2StartSubst==string.len(sd.bitsRemoveInfo(cost.bitsStartSubst2Easy..cost.tbitsEasy2Mid..cost.bitsMid2TargetSubst)) and "OK" or "KO"),5)
--]]
sd.writeLog("----- TESTS } -----",10)
end --tests
--outputEmissionStats()
tests()
main()
local endTime = g.millisecs()
writeLog("Done", 10)
And emission files:
QuarkCondCompositeEmissions1.txt:
Code: Select all
86[SPBDD]21222112112112111112112112112112112112112111222211211211211112111122211211211211211(32 4)[SDDS]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- SPBDD(32)SDDS{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes1
104[B6d6DBDDBD]2212112112112112112112112211211212211211211122111111111(24 3)1111112[]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,7S}-- B6d6DBDDBD(24){:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,7S} yes1
107[B6d6DSDDDDD]21112111111221112211121121121121121121121121111211112112(40 4)2212[]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- B6d6DSDDDDD(40){:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} yes1
110[B6d6DSDBBS]21211211112112112111211111211211211211211211111112112112122112(16 3)[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDBBS(16){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes2
110[PDDDD]21111211211122112211222111121121121121121121122112112111112(48 4)11112111112222121112111111122[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(48){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
111[PDDDDD]21121122111111121121122112112211211111211212112112112112121121122112112111112(24 4)121111[]{:_,11T,11t,11I,15H,15h,9B,11P,7d,7D,7S}-- PDDDDD(24){:_,11T,11t,11I,15H,15h,9B,11P,7d,7D,7S} yes1
111[S6d6BDSDDDD]11221111111111121121121121121122112112112212(8 7)22111211111112211[]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDSDDDD(8){:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} yes2
114[B6d6DBDDBD]22121121121121111111121121111211211211211111211211112112122212(8 6)1112112221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DBDDBD(8){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes1
117[S6d6BDBDD]11212112112112112112112112112112121121121121121111111111111211121111111112112(0 0)111[]{:_,5T,5t,5I,9H,9h,5B,9P,7d,7D,5S}-- S6d6BDBDD(0){:_,5T,5t,5I,9H,9h,5B,9P,7d,7D,5S} yes1
127[PDDDD]211211212112112111112121111211211112112112211211211211211211111211221211211211211112111121211121122112212(32 1)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDD(32){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
130[S6d6BDSD]11212211211211112112112112112112111121122222112112112211111211211122111211211211111211211212111211(16 2)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(16){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
71[PDDDDD]2112112211111112112112211112112111222(17 7)111111[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(17){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes1
71[PDBSBB]2211221111121211222112111222(17 7)111111[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDBSBB(17){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes1
73[B6d6DSDDS]222112111211111111111111212111111(33 0)2[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DSDDS(33)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
73[B6d6DSDDD]222111112111211111111111121112111111(33 0)2[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DSDDD(33)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
90[S6d6BDBDD]1121211112112112112112111(9 0)221121121121212112111211122[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDBDD(9)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
99[S6d6BDSSDD]11212211112111211122(41 4)11211222112111112111111111111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSDD(41){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
100[PDDDDD]2112112121121121111121211111111112111212(41 5)2111211121111111112211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(41)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
107[SPBDD]2122211211211211211211211211111211211211212212112121112112112211112(9 1)112111111222[T20]{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S}-- SPBDD(9)T20{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S} no
110[PDDDDDD]212211211211111212121112112111121121111211211211211211221121122212111121112(49 5)2[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDDD(49){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
34[B6d6DSSD]22(2 3)[]{:_,11T,11t,11I,15H,15h,13B,15P,13d,13D,9S}-- B6d6DSSD(2){:_,11T,11t,11I,15H,15h,13B,15P,13d,13D,9S} no
43[B6d6DSSDS]22(10 3)[]{:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S}-- B6d6DSSDS(10){:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S} yes1
43[B6d6DBSDS]212(10 3)[]{:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S}-- B6d6DBSDS(10){:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S} no
72[S6d6BDDD]12112122122112112111121122211111211221122(18 5)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDD(18){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes8
75[S6d6BDDBD]1211212211221121121122211111112212122(26 5)1[]{:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S}-- S6d6BDDBD(26){:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S} no
88[B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[]{:_,21T,19t,19I,23H,25h,21B,23P,21d,21D,5S}-- B6d6DDSSDDB(18){:_,21T,19t,19I,23H,25h,21B,23P,21d,21D,5S} yes2
89[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1122111111111221[D6d-2]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)D6d-2{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
92[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1121111111111221[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
103[S6d6BDBDD]11212112112112112112112211111111211121111112112112112112112111111112111212(58 2)2212112112112112[PSDS]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDD(58)PSDS{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} yes2
110[PDDDD]2112112211111112112112121121121121122112112121121122112111112112121121112111111111111(34 4)11[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(34)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes2
111[PDDDDDD]221111121122212211112121111121112112121121111121112111221(50 6)11121121121121121121[]{:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S}-- PDDDDDD(34){:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S} yes2
115[PDDDD]21111211211122112211222111121121121121121121121212121111121112121212(26 2)1121121121122112112211122[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDD(26){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
115[PDDDDD]211211221111111211211212112112211211212112112211221111211212112111211121111111121111(42 6)12[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(42)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes2
74[S6d6BDBDD]11212111121121111211211211211111121121221(27 5)12[S]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDD(27)S{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} yes1
82[PDDDDDDD]221121122211211212222111122(43 6)221111111122221[]{:_,5T,3t,3I,7H,9h,7B,7P,7d,7D,7S}-- PDDDDDDD(43){:_,5T,3t,3I,7H,9h,7B,7P,7d,7D,7S} yes1
86[S6d6BDSD]11212211211211211211111112111211112(43 7)2121121121112222111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(43){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes1
89[B6d6DBDDBDD]2221121112111111111111111221121111212(51 3)211[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DBDDBDD(51)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
90[S6d6BDDBD]121121221212111111111112111212111121122121112111112(27 7)2[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDDBD(27)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
90[PDDDDDDDB]221121122211211212222211122(51 6)221111111122221[]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- PDDDDDDDB(51){:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} yes2
104[B6d6DSDD]2221111121121121122112112121121122111111211121121111211211212(3 5)12211211211211[]{:D}-- B6d6DSDD(3){:D} no
108[S6d6BDD]11121121211211111211211112112111112112121121122(3 2)21112111112112112112112112111111112112112122[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(3)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
75[S6d6BDDSS]12221112221121111212222(12 2)11221122212[]{:_,15T,13t,9I,19H,19h,19B,19P,19d,19D,19S}-- S6d6BDDSS(12){:_,15T,13t,9I,19H,19h,19B,19P,19d,19D,19S} no
82[PDDDD]221121121211111211121112212(20 6)12221121121121121111121112111211111122[I4S]{:D}-- PDDDD(20)I4S{:D} yes1
88[S6d6BDSDDD]11221111121121121121111112112122(52 5)11221[H6T14]{:_,5T,3t,-1I,7H,9h,7B,7P,7d,7D,7S}-- S6d6BDSDDD(52)H6T14{:_,5T,3t,-1I,7H,9h,7B,7P,7d,7D,7S} yes1
88[PDDDDD]221111121122211211112121(60 2)12111111211222121111211111112112122[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(60)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
103[S6d6BDD]111222121121111211211211211211211211211211221121121211111212(36 0)2221112111111111112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDD(36)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
57[S6d6BDD]11121121211211112112112112111211211211211211222211(37 3)22[DDB]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(37)DDB{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes1
63[PDDDD]21111121121122211211211211111211121211222222111211(13 1)[S6d-2]{:B}-- PDDDD(13)S6d-2{:B} yes1
66[PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- PDDDDBD(29)S6d6DS{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} no
77[S6d6BDDBB]12112122112211211111211211212(-11 4)112121112[]{:_,15T,13t,13I,17H,19h,13B,13P,13d,13D,13S}-- S6d6BDDBB(-11){:_,15T,13t,13I,17H,19h,13B,13P,13d,13D,13S} no
77[B6d6DSDDDD]222111112112111111121121121122(29 6)121222[]{:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S}-- B6d6DSDDDD(29){:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S} no
77[B6d6DSDDSB]2221121121111121121121122(29 6)112222[]{:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S}-- B6d6DSDDSB(29){:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S} yes1
79[PDBS]2211212112112111112121211121111211211111121121121122(29 6)112222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDBS(29){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
80[PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- PDDDD(37)1{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} yes2
81[SPBDD]212221121121122112111211212111211111111211111112111212(61 7)[]{:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S}-- SPBDD(61){:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S} no
83[PDBBBSS]22112212112212111211111111111112222(29 3)21211212[P]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDBBBSS(29)P{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
87[PDBSPSS]22211221112111112(21 2)2121112111111121111122[I16T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDBSPSS(21)I16T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
88[S6d6BDDDDS]1211212212211211211111112112112111212111212(-3 4)2[]{:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S}-- S6d6BDDDDS(-3){:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S} no
90[PDDDDD]21111112112112122211121121121122112111211221121111121122(45 6)122112[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(45){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
99[B6d6DSDDDDD]2111211211112112112112111111111121121121122(37 6)122211222[]{:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S}-- B6d6DSDDDDD(37){:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S} no
66[T6SPDS]2(38 0)112111111212[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- T6SPDS(38)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
80[T6SPDBB]2(46 0)1111112112221112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- T6SPDBB(46)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
88[S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDD(46){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
96[PDDDDD]2112112211111112112112121121121121122112112122112112121121112111112(22 1)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(22)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
96[S6d6BDD]111211212112112112111112111211121111211211221121121211211221(6 5)12[h4t6]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(6)h4t6{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
101[PDDDDD]2112112211111112112112121121122112112121121122112211112111211121111111(30 2)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(30)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes8
77[SPDBS]211112(15 2)111111221211121111111211111112122111122[I16T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- SPDBS(15)I16T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes1
86[S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDDDDB(7)T6{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
91[PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[]{:_,15T,15t,9I,17H,19h,9B,11P,7d,7D,7S}-- PDDDDD(23){:_,15T,15t,9I,17H,19h,9B,11P,7d,7D,7S} yes2
100[PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDB(39)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
102[S6d6BDB]121121112211211211211111112112112112122121121111111211212211111112221111(-1 4)21211111221[S]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDB(-1)S{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
102[S6d6BDDDSS]1122212211222111121121121121122112112121111211222111112(39 7)[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDDSS(39){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes8
114[B6d6DSDBBS]212112111112112112112111112111211121121112211211111(31 1)22211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DSDBBS(31)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
QuarkCondCompositeEmissions2.txt:
Code: Select all
130[S6d6BDSD]11212211211211112112112112112112111121122222112112112211111211211122111211211211111211211212111211(16 2)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(16){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
153[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211D211211E2111211111112111211212(88 0)11111211121121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(88){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
110[B6d6DSDBBS]21211211112112112111211111211211211211211211111112112112122112(16 3)[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDBBS(16){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes2
111[S6d6BDSDDDD]11221111111111121121121121121122112112112212(8 7)22111211111112211[]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDSDDDD(8){:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} yes2
127[PDDDD]211211212112112111112121111211211112112112211211211211211211111211221211211211211112111121211121122112212(32 1)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDD(32){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
99[S6d6BDSSDD]11212211112111211122(41 4)11211222112111112111111111111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSDD(41){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
130[S6d6BDSDD]11221111121121121122112112121111121121121121121121121121121121111211111111211111111111112212(1 2)[]{:_,7T,7t,7I,11H,11h,9B,11P,9d,9D,7S}-- S6d6BDSDD(1){:_,7T,7t,7I,11H,11h,9B,11P,9d,9D,7S} yes2
91[PDDDD]2112112121121121111121211111112111212(33 5)2111211121112111111111111211212[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(33)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
100[PDDDDD]2112112121121121111121211111111112111212(41 5)2111211121111111112211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(41)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
107[SPBDD]2122211211211211211211211211111211211211212212112121112112112211112(9 1)112111111222[T20]{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S}-- SPBDD(9)T20{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S} no
110[PDDDDDD]212211211211111212121112112111121121111211211211211211221121122212111121112(49 5)2[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDDD(49){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
88[B6d6DDSSDDB]22(18 4)2112112111111111111111112222121222[]{:_,21T,19t,19I,23H,25h,21B,23P,21d,21D,5S}-- B6d6DDSSDDB(18){:_,21T,19t,19I,23H,25h,21B,23P,21d,21D,5S} yes2
98[PDDDDDD]22111112112211221111211121112111111121212112112112111121121121121212(10 6)22[B]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDDD(10)B{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
103[S6d6BDBDD]11212112112112112112112211111111211121111112112112112112112111111112111212(58 2)2212112112112112[PSDS]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDD(58)PSDS{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} yes2
110[PDDDD]2112112211111112112112121121121121122112112121121122112111112112121121112111111111111(34 4)11[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(34)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes2
111[PDDDDDD]221111121122212211112121111121112112121121111121112111221(50 6)11121121121121121121[]{:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S}-- PDDDDDD(34){:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S} yes2
115[PDDDDD]211211221111111211211212112112211211212112112211221111211212112111211121111111121111(42 6)12[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(42)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes2
115[PDDDD]21111211211122112211222111121121121121121121121212121111121112121212(26 2)1121121121122112112211122[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDD(26){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
43[B6d6DBSDS]212(10 3)[]{:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S}-- B6d6DBSDS(10){:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S} no
72[S6d6BDDD]12112122122112112111121122211111211221122(18 5)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDD(18){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes8
75[S6d6BDDBD]1211212211221121121122211111112212122(26 5)1[]{:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S}-- S6d6BDDBD(26){:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S} no
89[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1122111111111221[D6d-2]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)D6d-2{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
92[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1121111111111221[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
128[PDDD]21121121211211211111212111121121121121111111121121121112111121121121121121121121122111111121122111122121111(58 5)21121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(58){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
90[PDDDDDDDB]221121122211211212222211122(51 6)221111111122221[]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- PDDDDDDDB(51){:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} yes2
108[S6d6BDD]11121121211211111211211112112111112112121121122(3 2)21112111112112112112112112111111112112112122[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(3)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
111[S6d6BDBSDS]112121211211211211222211121121121121121212121121112111122112(35 0)22[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDBSDS(35){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
112[PDDDBBS]211211111112(19 4)21111221121111211211211211111121112122212111112221111112211[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDDDBBS(19){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
113[PDDDDDD]22112112211111112111112111211122112112112112121121121112(-13 2)22211112111111121111222[]{:_,19T,19t,11I,23H,23h,9B,11P,7d,9D,7S}-- PDDDDDD(-13){:_,19T,19t,11I,23H,23h,9B,11P,7d,9D,7S} no
117[PDDDDD]211111122121111211211211211211212211112112112112112112211112112112112212112112112211121112111(11 4)1[T6S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(11)T6S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
118[S6d6BDDD]11121121211211111211211112112111112112121121122(11 2)211121121121121122112112211111112111121221[]{:_,5T,5t,7I,9H,9h,7B,7P,7d,7D,7S}-- S6d6BDDD(11){:_,5T,5t,7I,9H,9h,7B,7P,7d,7D,7S} no
89[B6d6DBDDBDD]2221121112111111111111111221121111212(51 3)211[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DBDDBDD(51)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
90[S6d6BDDBD]121121221212111111111112111212111121122121112111112(27 7)2[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDDBD(27)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
104[B6d6DSDD]2221111121121121122112112121121122111111211121121111211211212(3 5)12211211211211[]{:D}-- B6d6DSDD(3){:D} no
112[S6d6BDSDDB]112122112112112112111112111211112(59 7)212112121222112111112111111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDDB(59){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
99[S6d6BDBDD]1121211112112111121121121121121121121121111211112112211(52 2)2111212[]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDD(52){:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
113[PDDDDB]211111211211222112111121121121121111112112122221121121122112112121121121121121121(44 4)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDB(44){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
111[B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDSS(20){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
114[S6d6BDD]1112221211211211211211221121121211111211121212122222111211211211211211211111112112112122112(12 3)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(12){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
118[S6d6BDSDDDS]1122111111121121121121111111211211222121121121121121121111122(44 3)2111[]{:_,3T,1t,3I,7H,7h,7B,7P,7d,7D,7S}-- S6d6BDSDDDS(44){:_,3T,1t,3I,7H,7h,7B,7P,7d,7D,7S} no
125[S6d6BDSDD]1121221121121121121121121111121122111112112111212211121211121112112121121111211211122(36 7)21[]{:_,13T,11t,13I,15H,15h,13B,15P,13d,13D,7S}-- S6d6BDSDD(36){:_,13T,11t,13I,15H,15h,13B,15P,13d,13D,7S} no
126[PDDD]21121121211211211111212111121121121121111121121121111111121122112112112112112112111112112112111111121112111(28 5)22[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDD(28)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
130[S6d6BDSD]112211111211211111211211211211111212(4 1)22111211211211211211111112112112111111112112112112112112111121121112[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(4)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
131[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211S211211S211211D2122(60 3)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(60){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
137[PDDDDD]2111121121112211221122211112111112112111122222211121121111121121121121121121111121121121222121112112112112221(4 7)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(4){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
77[B6d6DSDDDD]222111112112111111121121121122(29 6)121222[]{:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S}-- B6d6DSDDDD(29){:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S} no
79[PDBS]2211212112112111112121211121111211211111121121121122(29 6)112222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDBS(29){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
80[PDDDD]2112112121121121111121211111121121121121121112111121122(37 6)212[1]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- PDDDD(37)1{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} yes2
88[S6d6BDDDDS]1211212212211211211111112112112111212111212(-3 4)2[]{:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S}-- S6d6BDDDDS(-3){:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S} no
90[PDDDDD]21111112112112122211121121121122112111211221121111121122(45 6)122112[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(45){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
99[B6d6DSDDDDD]2111211211112112112112111111111121121121122(37 6)122211222[]{:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S}-- B6d6DSDDDDD(37){:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S} no
66[PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- PDDDDBD(29)S6d6DS{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} no
81[SPBDD]212221121121122112111211212111211111111211111112111212(61 7)[]{:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S}-- SPBDD(61){:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S} no
83[PDBBBSS]22112212112212111211111111111112222(29 3)21211212[P]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDBBBSS(29)P{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
89[PDDDD]2111112112112221121121121121121121122111111121111121112111221112112122111211(5 3)[S6d-2]{:B}-- PDDDD(5)S6d-2{:B} no
100[S6d6BDSDDD]112122112112112112112112112112211211212111112111221(5 7)2111[I34]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDSDDD(5)I34{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} no
80[T6SPDBB]2(46 0)1111112112221112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- T6SPDBB(46)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
101[PDDDDD]2112112211111112112112121121122112112121121122112211112111211121111111(30 2)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(30)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes8
88[S6d6BDDD]111112212211211211211211111212(46 3)21121121121121122111112111222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDD(46){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
96[S6d6BDD]111211212112112112111112111211121111211211221121121211211221(6 5)12[h4t6]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(6)h4t6{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
96[PDDDDD]2112112211111112112112121121121121122112112122112112121121112111112(22 1)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(22)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
104[S6d6BDDD]11121121211211211211111211121112111121121122112112121111211222(14 5)12[h4t14]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- S6d6BDDD(14)h4t14{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
106[B6d6DSDDDD]2221111121121121121111111112121211211D211211S211211S211211D2122(14 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(14){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
106[B6d6DSDDSD]2221121121111112112111112121211211D211211S211211S211211D2122(14 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(14){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
110[PDDDDDD]2211111211211121211211211221111121112111211111111112(38 1)112111121121121121121111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDDD(38){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes2
113[S6d6BDSD]11221111121121111121121121111111121121111122112112112112112112111111112112112122(30 3)1[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(30){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
115[B6d6DSDDSD]2221121121111112112111112121211211S211211D211211S211211S211211D2122(22 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(22){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
115[B6d6DSDDDD]2221111121121121121111111112121211211S211211D211211S211211B211211D21212(22 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(22){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
86[S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDDDDB(7)T6{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
100[PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDB(39)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
102[S6d6BDB]121121112211211211211111112112112112122121121111111211212211111112221111(-1 4)21211111221[S]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDB(-1)S{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
91[PDDDDD]21111112212111121121121121121121221111211121112112111221121211(23 1)2[]{:_,15T,15t,9I,17H,19h,9B,11P,7d,7D,7S}-- PDDDDD(23){:_,15T,15t,9I,17H,19h,9B,11P,7d,7D,7S} yes2
102[S6d6BDDDSS]1122212211222111121121121121122112112121111211222111112(39 7)[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDDSS(39){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes8
114[B6d6DSDBBS]212112111112112112112111112111211121121112211211111(31 1)22211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DSDBBS(31)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
117[S6d6BDSD]1122111112112112112111111112112112112112112211211122211121111211211211112121121121121121121111122(15 7)[PB]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(15)PB{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
123[SPBDD]212221121121121121121121122111112112211222111212112112111112111211122111112112112112111112111221112(55 7)222[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- SPBDD(55)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
QuarkCondCompositeEmissions4.txt:
Code: Select all
153[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211D211211E2111211111112111211212(88 0)11111211121121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(88){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
127[PDDDD]211211212112112111112121111211211112112112211211211211211211111211221211211211211112111121211121122112212(32 1)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDD(32){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
161[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211S211211D211211B21111221111121121121121111112112122(64 5)1122111121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(64){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
161[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211S211211D211211B21111221111121121121121111112112122(64 5)1122111121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(64){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} yes8
147[B6d6DSDDDD]2221111121121121121111111112121211211S211211S211211D211211D211211B21112221112221121111212222(24 2)11221122212[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(24){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
147[B6d6DSDDSD]2221121121111112112111112121211211S211211S211211D211211D211211B21112221112221121111212222(24 2)11221122212[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(24){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
160[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(80)P{:_,7B,9P,7D,7S} no
160[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(80)P{:_,7B,9P,7D,7S} no
162[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(80)S{:_,7B,9P,7D,7S} no
162[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(80)S{:_,7B,9P,7D,7S} no
129[S6d6BDSSSD]112221111221211221112212112121121121121121211211211211211211221121121211211211111122(8 7)1[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSSD(8)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
176[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211B211111112212211211211211211111212(96 3)2112112112112112211111211122211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(96){: _,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
99[S6d6BDSSDD]11212211112111211122(41 4)11211222112111112111111111111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSDD(41){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
109[S6d6BDSDBDD]11222212111121121111121121121121111211112122112111211122(25 4)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDSDBDD(25)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
91[PDDDD]2112112121121121111121211111112111212(33 5)2111211121112111111111111211212[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(33)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
92[PDBSS]221121211211211111212121111212(33 5)2111211121111111211111111211212[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDBSS(33)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
100[PDDDDD]2112112121121121111121211111111112111212(41 5)2111211121111111112211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(41)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
107[SPBDD]2122211211211211211211211211111211211211212212112121112112112211112(9 1)112111111222[T20]{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S}-- SPBDD(9)T20{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S} no
110[PDDDDDD]212211211211111212121112112111121121111211211211211211221121122212111121112(49 5)2[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDDD(49){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
149[B6d6DSDDDD]2221111121121121121111111112121211211B211211S211211D211211D211211S211211D212221121121111121121121122(41 6)112222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(41){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
149[B6d6DSDDSD]2221121121111112112111112121211211B211211S211211D211211D211211S211211D212221121121111121121121122(41 6)112222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(41){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
152[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(57)P{:_,7B,9P,7D,7S} no
152[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(57)P{:_,7B,9P,7D,7S} no
154[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(57)S{:_,7B,9P,7D,7S} no
154[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(57)S{:_,7B,9P,7D,7S} no
158[B6d6DSDDDD]2221111121121121121111111112121211211S211211S211211D211211E211211B211222211221112111112(33 2)21211121111111211111222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(33){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
158[B6d6DSDDSD]2221121121111112112111112121211211S211211S211211D211211E211211B211222211221112111112(33 2)21211121111111211111222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(33){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
162[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211D211221111112112112122211121121121122112111211221121111121122(57 6)122112[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(57){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
162[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211D211221111112112112122211121121121122112111211221121111121122(57 6)122112[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(57){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
164[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211B211211D2112111211112(65 2)111111221211121111111211111112122111122211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(65){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
72[S6d6BDDD]12112122122112112111121122211111211221122(18 5)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDD(18){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes8
72[S6d6BDDB]121121221122112111121122211111112212122(18 5)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDB(18){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
75[S6d6BDDS]12112122121112112111121122211111112212122(18 5)21[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDS(18){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
75[S6d6BDDBD]1211212211221121121122211111112212122(26 5)1[]{:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S}-- S6d6BDDBD(26){:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S} no
89[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1122111111111221[D6d-2]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)D6d-2{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
92[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1121111111111221[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
128[PDDD]21121121211211211111212111121121121121111111121121121112111121121121121121121121122111111121122111122121111(58 5)21121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(58){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
111[S6d6BDBSDS]112121211211211211222211121121121121121212121121112111122112(35 0)22[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDBSDS(35){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
112[PDDDBBS]211211111112(19 4)21111221121111211211211211111121112122212111112221111112211[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDDDBBS(19){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
117[PDDDDD]211111122121111211211211211211212211112112112112112112211112112112112212112112112211121112111(11 4)1[T6S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(11)T6S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
132[S6d6BDDD]11121121211211111111211211211211121121212211211212112112112112112112112112112112221111121112112(35 0)12111112112111[S]{:_,13T,11t,15I,15H,17h,15B,17P,13d,11D,7S}-- S6d6BDDD(35)S{:_,13T,11t,15I,15H,17h,15B,17P,13d,11D,7S} no
161[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211S211211D21222111112111211111111111121112111111(83 0)2111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(83){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
104[B6d6DSDD]2221111121121121122112112121121122111111211121121111211211212(3 5)12211211211211[]{:D}-- B6d6DSDD(3){:D} no
113[PDDDDDD]22112112211111112111112111211122112112112112121121121112(-13 2)22211112111111121111222[]{:_,19T,19t,11I,23H,23h,9B,11P,7d,9D,7S}-- PDDDDDD(-13){:_,19T,19t,11I,23H,23h,9B,11P,7d,9D,7S} no
118[S6d6BDDD]11121121211211111211211112112111112112121121122(11 2)211121121121121122112112211111112111121221[]{:_,5T,5t,7I,9H,9h,7B,7P,7d,7D,7S}-- S6d6BDDD(11){:_,5T,5t,7I,9H,9h,7B,7P,7d,7D,7S} no
89[B6d6DBDDBDD]2221121112111111111111111221121111212(51 3)211[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DBDDBDD(51)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
90[S6d6BDDBD]121121221212111111111112111212111121122121112111112(27 7)2[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDDBD(27)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
112[S6d6BDSDDB]112122112112112112111112111211112(59 7)212112121222112111112111111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDDB(59){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
134[PDDDD]211211212112112111112121111112112112112111112111212112112112112112111121121112112211211211211212211121121111221(11 3)1[]{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S}-- PDDDD(11){:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S} no
113[PDDDDB]211111211211222112111121121121121111112112122221121121122112112121121121121121121(44 4)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDB(44){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
111[B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDSS(20){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
126[PDDD]21121121211211211111212111121121121121111121121121111111121122112112112112112112111112112112111111121112111(28 5)22[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDD(28)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
130[S6d6BDSD]112211111211211111211211211211111212(4 1)22111211211211211211111112112112111111112112112112112112111121121112[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(4)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
99[S6d6BDBDD]1121211112112111121121121121121121121121111211112112211(52 2)2111212[]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDD(52){:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
110[S6d6BDBDD]11212112112111112112112112111111211211212(20 6)2212211111122111211121111111112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDBDD(20)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
114[S6d6BDD]1112221211211211211211221121121211111211121212122222111211211211211211211111112112112122112(12 3)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(12){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
118[S6d6BDSDDDS]1122111111121121121121111111211211222121121121121121121111122(44 3)2111[]{:_,3T,1t,3I,7H,7h,7B,7P,7d,7D,7S}-- S6d6BDSDDDS(44){:_,3T,1t,3I,7H,7h,7B,7P,7d,7D,7S} no
122[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211S211211S211211D2122(52 3)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(52){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
125[S6d6BDSDD]1121221121121121121121121111121122111112112111212211121211121112112121121111211211122(36 7)21[]{:_,13T,11t,13I,15H,15h,13B,15P,13d,13D,7S}-- S6d6BDSDD(36){:_,13T,11t,13I,15H,15h,13B,15P,13d,13D,7S} no
131[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211S211211S211211D2122(60 3)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(60){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
137[PDDDDD]2111121121112211221122211112111112112111122222211121121111121121121121121121111121121121222121112112112112221(4 7)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(4){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
77[S6d6BDDBB]12112122112211211111211211212(-11 4)112121112[]{:_,15T,13t,13I,17H,19h,13B,13P,13d,13D,13S}-- S6d6BDDBB(-11){:_,15T,13t,13I,17H,19h,13B,13P,13d,13D,13S} no
88[S6d6BDDDDS]1211212212211211211111112112112111212111212(-3 4)2[]{:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S}-- S6d6BDDDDS(-3){:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S} no
111[PDDDD]2111121121112211221122211112112112112112112112211211212112112211121121212112111211111111(13 4)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(13)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
145[B6d6DSDDDD]2221111121121121121111111112121211211S211211D211211D211211S211211D21222112111211111111111111212111111(45 0)21[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(45){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
145[B6d6DSDDSD]2221121121111112112111112121211211S211211D211211D211211S211211D21222112111211111111111111212111111(45 0)21[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(45){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
66[PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- PDDDDBD(29)S6d6DS{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} no
77[B6d6DSDDDD]222111112112111111121121121122(29 6)121222[]{:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S}-- B6d6DSDDDD(29){:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S} no
79[PDBS]2211212112112111112121211121111211211111121121121122(29 6)112222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDBS(29){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
86[B6d6DSDDSS]2221121121111121121121122(29 6)11221111111112[]{:_,1T,-1t,1I,3H,3h,5B,5P,7d,5D,5S}-- B6d6DSDDSS(29){:_,1T,-1t,1I,3H,3h,5B,5P,7d,5D,5S} no
90[PDDDDD]21111112112112122211121121121122112111211221121111121122(45 6)122112[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(45){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
99[B6d6DSDDDDD]2111211211112112112112111111111121121121122(37 6)122211222[]{:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S}-- B6d6DSDDDDD(37){:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S} no
81[SPBDD]212221121121122112111211212111211111111211111112111212(61 7)[]{:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S}-- SPBDD(61){:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S} no
83[PDBBBSS]22112212112212111211111111111112222(29 3)21211212[P]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDBBBSS(29)P{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
89[PDDDD]2111112112112221121121121121121121122111111121111121112111221112112122111211(5 3)[S6d-2]{:B}-- PDDDD(5)S6d-2{:B} no
100[S6d6BDSDDD]112122112112112112112112112112211211212111112111221(5 7)2111[I34]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDSDDD(5)I34{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} no
118[B6d6DBDDBSD]2221121111211211211211211221121122211111121211111112111211111111(53 7)22[I30]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DBDDBSD(53)I30{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
80[T6SPDBB]2(46 0)1111112112221112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- T6SPDBB(46)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
96[PDDDDD]2112112211111112112112121121121121122112112122112112121121112111112(22 1)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(22)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
104[S6d6BDDD]11121121211211211211111211121112111121121122112112121111211222(14 5)12[h4t14]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- S6d6BDDD(14)h4t14{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
177[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211S211211D211211B21111221111121121121121111112112122(102 5)112211112112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(102){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
101[PDDDDD]2112112211111112112112121121122112112121121122112211112111211121111111(30 2)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(30)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes8
112[S6d6BDSDD]112211111211211211211211211111211221111121122111111122112112(-2 2)21111111111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDD(-2){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
125[S6d6BDSD]1122111112112111112112112111111112112111112212112112112112112112112211111111222212112112(54 2)22222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(54){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
125[S6d6BDSSDD]1122211112112111111211211112112112112112112112112211211211121(62 2)21111212111111121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSDD(62){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
129[PDDDDD]21121121211211211111212111121121111211211222222121121111121121111211211112112122211121122111211211111(22 2)[]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- PDDDDD(22){:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} no
135[S6d6BDSSDD]1122211112112112211112112111221111221122111211211211122211211211211111121121111211212211(6 2)[]{:_,9T,7t,11I,11H,13h,9B,11P,9d,9D,7S}-- S6d6BDSSDD(6){:_,9T,7t,11I,11H,13h,9B,11P,9d,9D,7S} no
175[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D2112221111121122211211112121(110 2)1211111121122212111121111111211212221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(110){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
106[B6d6DSDDSD]2221121121111112112111112121211211D211211S211211S211211D2122(14 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(14){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
106[B6d6DSDDDD]2221111121121121121111111112121211211D211211S211211S211211D2122(14 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(14){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
113[S6d6BDSD]11221111121121111121121121111111121121111122112112112112112112111111112112112122(30 3)1[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(30){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
115[B6d6DSDDDD]2221111121121121121111111112121211211S211211D211211S211211B211211D21212(22 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(22){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
115[B6d6DSDDSD]2221121121111112112111112121211211S211211D211211S211211S211211D2122(22 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(22){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
102[S6d6BDB]121121112211211211211111112112112112122121121111111211212211111112221111(-1 4)21211111221[S]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDB(-1)S{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
123[S6d6BDBD]1121211211211211211211211211111112112111112111211111111111122111121(23 0)2111211211221121122111222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDBD(23){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
114[B6d6DSDBBS]212112111112112112112111112111211121121112211211111(31 1)22211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DSDBBS(31)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
86[S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDDDDB(7)T6{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
100[PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDB(39)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
102[S6d6BDDDSS]1122212211222111121121121121122112112121111211222111112(39 7)[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDDSS(39){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes8
116[PDDDSD]211211112222111111112112112112112112112112112111112211211211111111212(23 3)211211111211121112112[I4S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDSD(23)I4S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
117[S6d6BDSD]1122111112112112112111111112112112112112112211211122211121111211211211112121121121121121121111122(15 7)[PB]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(15)PB{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
123[SPBDD]212221121121121121121121122111112112211222111212112112111112111211122111112112112112111112111221112(55 7)222[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- SPBDD(55)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
169[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B2112111212221121121122112111211212111211111111211111112111212(111 7)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(111){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
And QuarkCondCompositeEmissions8.txt:
Code: Select all
153[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211D211211E2111211111112111211212(88 0)11111211121121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(88){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
168[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211B211211D211211D211211E2111211111112111211212(96 0)1111112112221112112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(96){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
175[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211B211111222121121111211211211211211211211211211221121121211111212(48 0)22211121111111111121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(48){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
175[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211B211111222121121111211211211211211211211211211221121121211111212(48 0)22211121111111111121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(48){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
127[PDDDD]211211212112112111112121111211211112112112211211211211211211111211221211211211211112111121211121122112212(32 1)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDD(32){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
183[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D21122112112211111112112112121121121121122112112122112112121121112111112(72 1)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(72){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
198[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D211211D21122211111211211121211211211221111121112111211111111112(88 1)11211112112112112112111111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(88){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
147[B6d6DSDDSD]2221121121111112112111112121211211S211211S211211D211211D211211B21112221112221121111212222(24 2)11221122212[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(24){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
147[B6d6DSDDDD]2221111121121121121111111112121211211S211211S211211D211211D211211B21112221112221121111212222(24 2)11221122212[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(24){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
160[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(80)P{:_,7B,9P,7D,7S} no
160[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(80)P{:_,7B,9P,7D,7S} no
162[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(80)S{:_,7B,9P,7D,7S} no
162[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D211211D2112221111121122211211112121(80 2)121111112112221211112111111121121222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(80)S{:_,7B,9P,7D,7S} no
171[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211B211211D211211B2111121211112112111121121121121121121121121111211112112211(64 2)2111212[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(64){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
171[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211B211211D211211B2111121211112112111121121121121121121121121111211112112211(64 2)2111212[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(64){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
213[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211S211211S211211D211211B2111122211112112111111211211112112112112112112112112211211211121(112 2)2111121211111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(112){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
176[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211B211111112212211211211211211111212(96 3)2112112112112112211111211122211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(96){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
161[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211S211211D211211B21111221111121121121121111112112122(64 5)1122111121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(64){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
161[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211S211211D211211B21111221111121121121121111112112122(64 5)1122111121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(64){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} yes8
183[B6d6DSDDDD]2221111121121121121111111112121211211S211211S211211D211211D211211D211211S211211D21211121121211121112221211211211212222212111211211211(32 5)1112211[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(32){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
183[B6d6DSDDSD]2221121121111112112111112121211211S211211S211211D211211D211211D211211S211211D21211121121211121112221211211211212222212111211211211(32 5)1112211[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(32){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
184[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B211111211212112112112111112111211121111211211221121121211211221(56 5)121111111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(56){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
198[B6d6DSDDSD]2221121121111112112111112121211211D211211D211221121121211211211111212111121121121121111121121121111111121122112112112112112112111112112112111111121112111(40 5)221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(40){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
198[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211221121121211211211111212111121121121121111121121121111111121122112112112112112112111112112112111111121112111(40 5)221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(40){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
129[S6d6BDSSSD]112221111221211221112212112121121121121121211211211211211211221121121211211211111122(8 7)1[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSSD(8)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
118[S6d6BDBDDD]1121211111112112112112112111(17 0)2211211211212112112211211212112111211211211121[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDBDDD(17)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
107[SPBDD]2122211211211211211211211211111211211211212212112121112112112211112(9 1)112111111222[T20]{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S}-- SPBDD(9)T20{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S} no
179[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D211221111112212111121121121121121121221111211121112112111221121211(73 1)211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(73){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
158[B6d6DSDDSD]2221121121111112112111112121211211S211211S211211D211211E211211B211222211221112111112(33 2)21211121111111211111222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(33){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
158[B6d6DSDDDD]2221111121121121121111111112121211211S211211S211211D211211E211211B211222211221112111112(33 2)21211121111111211111222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(33){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
164[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211B211211D2112111211112(65 2)111111221211121111111211111112122111122211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(65){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
167[B6d6DSDDSDD]2221121121111112112111112121211211S211211S211211D211211E211211B211222211221112111112(41 2)21211121111111211111112111211222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(41)P{:_,7B,9P,7D,7S} no
167[B6d6DSDDDDD]2221111121121121121111111112121211211S211211S211211D211211E211211B211222211221112111112(41 2)21211121111111211111112111211222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(41)P{:_,7B,9P,7D,7S} no
169[B6d6DSDDDDB]2221111121121121121111111112121211211S211211S211211D211211E211211B211222211221112111112(41 2)21211121111111211111112111211222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(41)S{:_,7B,9P,7D,7S} no
169[B6d6DSDDSDB]2221121121111112112111112121211211S211211S211211D211211E211211B211222211221112111112(41 2)21211121111111211111112111211222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(41)S{:_,7B,9P,7D,7S} no
173[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211D211211D211211D211211D211211B211211D211211B21111212121112112222111122(57 2)1111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(57){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
214[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211S211211D211211S211211D211211B2111122111121121112111221212222112112112112112211211212112112111111121121121121122(97 2)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(97){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
158[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211B21111121121211211112112112112111211211211211211222211(49 3)2212211121221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(49){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
158[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211B21111121121211211112112112112111211211211211211222211(49 3)2212211121221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(49){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
162[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D2112221111211212112112211122122111112111211122111112111(9 3)21121121121121212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(9)P{:_,7B,9P,7D,7S} no
162[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D2112221111211212112112211122122111112111211122111112111(9 3)21121121121121212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(9)P{:_,7B,9P,7D,7S} no
163[B6d6DSDDDDD]2221111121121121121111111112121211211S211211S211211B211211B211211B211222112212112212111211111111111112222(49 3)2121121212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(49)P{:_,7B,9P,7D,7S} no
163[B6d6DSDDSDD]2221121121111112112111112121211211S211211S211211B211211B211211B211222112212112212111211111111111112222(49 3)2121121212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(49)P{:_,7B,9P,7D,7S} no
164[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D2112221111211212112112211122122111112111211122111112111(9 3)21121121121121212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(9)S{:_,7B,9P,7D,7S} no
164[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D2112221111211212112112211122122111112111211122111112111(9 3)21121121121121212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(9)S{:_,7B,9P,7D,7S} no
165[B6d6DSDDSDB]2221121121111112112111112121211211S211211S211211B211211B211211B211222112212112212111211111111111112222(49 3)2121121212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(49)S{:_,7B,9P,7D,7S} no
165[B6d6DSDDDDB]2221111121121121121111111112121211211S211211S211211B211211B211211B211222112212112212111211111111111112222(49 3)2121121212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(49)S{:_,7B,9P,7D,7S} no
189[B6d6DSDDSD]2221121121111112112111112121211211B211211D211211D211211D21122111112112112221121121121121121121122111111121111121112111221112112122111211(25 3)22211121221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(25){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
189[B6d6DSDDDD]2221111121121121121111111112121211211B211211D211211D211211D21122111112112112221121121121121121121122111111121111121112111221112112122111211(25 3)22211121221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(25){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
83[S6d6BDSDD]112122111112111211122(33 4)11211211211211111111211121112111112[I4SS]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDD(33)I4SS{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
99[S6d6BDSSDD]11212211112111211122(41 4)11211222112111112111111111111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSDD(41){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
109[S6d6BDSDBDD]11222212111121121111121121121121111211112122112111211122(25 4)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDSDBDD(25)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
149[B6d6DSDDDD]2221111121121121121111111112121211211B211211B211211D211211D211211B21112112122112211211111211211212(1 4)112121112[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(1){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
149[B6d6DSDDSD]2221121121111112112111112121211211B211211B211211D211211D211211B21112112122112211211111211211212(1 4)112121112[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(1){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
91[PDDDD]2112112121121121111121211111112111212(33 5)2111211121112111111111111211212[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(33)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
92[PDBSS]221121211211211111212121111212(33 5)2111211121111111211111111211212[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDBSS(33)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
100[PDDDDD]2112112121121121111121211111111112111212(41 5)2111211121111111112211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(41)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
110[PDDDDDD]212211211211111212121112112111121121111211211211211211221121122212111121112(49 5)2[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDDD(49){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
135[S6d6BDSSDD]1122211112112112111112112211111211221112221112121121121121121111121222(1 5)21112111211111122[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDSSDD(1)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
149[B6d6DSDDSD]2221121121111112112111112121211211B211211S211211D211211D211211S211211D212221121121111121121121122(41 6)112222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(41){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
149[B6d6DSDDDD]2221111121121121121111111112121211211B211211S211211D211211D211211S211211D212221121121111121121121122(41 6)112222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(41){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
152[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(57)P{:_,7B,9P,7D,7S} no
152[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(57)P{:_,7B,9P,7D,7S} no
154[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(57)S{:_,7B,9P,7D,7S} no
154[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(57 6)212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(57)S{:_,7B,9P,7D,7S} no
162[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211D211221111112112112122211121121121122112111211221121111121122(57 6)122112[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(57){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
162[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211D211221111112112112122211121121121122112111211221121111121122(57 6)122112[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(57){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
187[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211D211211D211211D21122112112211111112112112121121121111121121122211121112111111121111111(89 6)2221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(89){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
138[B6d6DSDDDDD]2221111121121121121111111112121211211S211211D211211D211211E2111211111112111211212(58 0)1121111112122[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(58)P{:_,7B,9P,7D,7S} no
138[B6d6DSDDSDD]2221121121111112112111112121211211S211211D211211D211211E2111211111112111211212(58 0)1111121112112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(58)P{:_,7B,9P,7D,7S} no
140[B6d6DSDDSDB]2221121121111112112111112121211211S211211D211211D211211E2111211111112111211212(58 0)1111121112112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(58)S{:_,7B,9P,7D,7S} yes8
140[B6d6DSDDDDB]2221111121121121121111111112121211211S211211D211211D211211E2111211111112111211212(58 0)1111121112112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(58)S{:_,7B,9P,7D,7S} no
152[B6d6DSDDSD]2221121121111112112111112121211211B211211B211211D211211D211211E2111211111112111211212(58 0)11111121122211121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(58){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
152[B6d6DSDDDD]2221111121121121121111111112121211211B211211B211211D211211D211211E2111211111112111211212(58 0)11111121122211121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(58){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
168[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D211211D21122112112211111112112112121121121121122112112122112112121121112111112(42 1)2[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(42)P{:_,7B,9P,7D,7S} no
168[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D211211D21122112112211111112112112121121121121122112112122112112121121112111112(42 1)2[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(42)P{:_,7B,9P,7D,7S} no
170[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D211211D21122112112211111112112112121121121121122112112122112112121121112111112(42 1)2[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(42)S{:_,7B,9P,7D,7S} yes8
170[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D211211D21122112112211111112112112121121121121122112112122112112121121112111112(42 1)2[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(42)S{:_,7B,9P,7D,7S} no
182[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211D211211D21122211111211211121211211211221111121112111211111111112(50 1)112111121121121121121111[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(50){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
182[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211D211211D21122211111211211121211211211221111121112111211111111112(50 1)112111121121121121121111[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(50){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
215[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D2112211211212112112111112121111211211112112112211211211211211211111211221211211211211112111121211121122112212(82 1)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(82){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
134[PDDDDB]2111112112112221121111211211211211211211111112121212(10 2)2112112112112112111111111112112222221111111111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDB(10){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
43[B6d6DBSDS]212(10 3)[]{:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S}-- B6d6DBSDS(10){:_,3T,3t,3I,7H,7h,5B,7P,5d,5D,5S} no
72[S6d6BDDB]121121221122112111121122211111112212122(18 5)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDB(18){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
72[S6d6BDDD]12112122122112112111121122211111211221122(18 5)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDD(18){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes8
75[S6d6BDDS]12112122121112112111121122211111112212122(18 5)21[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDS(18){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
75[S6d6BDDBD]1211212211221121121122211111112212122(26 5)1[]{:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S}-- S6d6BDDBD(26){:_,5T,5t,3I,9H,9h,7B,9P,7d,7D,5S} no
89[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1122111111111221[D6d-2]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)D6d-2{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
92[PDDD]211211221111111211211212112112112112111122212111121121121111111212(2 5)1121111111111221[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(2)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
128[PDDD]21121121211211211111212111121121121121111111121121121112111121121121121121121121122111111121122111122121111(58 5)21121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDD(58){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
199[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D211211S211211D211211B21111221111111111121121121121121122112112112212(58 7)2211121111111221111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(58){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} yes8
111[S6d6BDBSDS]112121211211211211222211121121121121121212121121112111122112(35 0)22[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDBSDS(35){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
132[S6d6BDDD]11121121211211111111211211211211121121212211211212112112112112112112112112112112221111121112112(35 0)12111112112111[S]{:_,13T,11t,15I,15H,17h,15B,17P,13d,11D,7S}-- S6d6BDDD(35)S{:_,13T,11t,15I,15H,17h,15B,17P,13d,11D,7S} no
161[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211S211211D21222111112111211111111111121112111111(83 0)2111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(83){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
178[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B211211D211211B2111121211112112112112112111(59 0)221121121121212112111211122111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(59){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
163[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211D211221111112212111121121121121121121221111211121112112111221121211(35 1)2[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(35){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
163[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211D211221111112212111121121121121121121221111211121112112111221121211(35 1)2[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(35){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
186[B6d6DSDDDD]2221111121121121121111111112121211211S211211B211211B211211D211211S211211D21212112111112112112112111112111211121121112211211111(43 1)222111211121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(43){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
186[B6d6DSDDSD]2221121121111112112111112121211211S211211B211211B211211D211211S211211D21212112111112112112112111112111211121121112211211111(43 1)222111211121121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(43){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
194[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B21121112122211211211211211211211211111211211211212212112121112112112211112(59 1)11211111122221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(59){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
113[PDDDDDD]22112112211111112111112111211122112112112112121121121112(-13 2)22211112111111121111222[]{:_,19T,19t,11I,23H,23h,9B,11P,7d,9D,7S}-- PDDDDDD(-13){:_,19T,19t,11I,23H,23h,9B,11P,7d,9D,7S} no
118[S6d6BDDD]11121121211211111211211112112111112112121121122(11 2)211121121121121122112112211111112111121221[]{:_,5T,5t,7I,9H,9h,7B,7P,7d,7D,7S}-- S6d6BDDD(11){:_,5T,5t,7I,9H,9h,7B,7P,7d,7D,7S} no
148[B6d6DSDDDD]2221111121121121121111111112121211211S211211B211211D2112111211112(27 2)1111112212111211111112111111121221111222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(27){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
148[B6d6DSDDSD]2221121121111112112111112121211211S211211B211211D2112111211112(27 2)1111112212111211111112111111121221111222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(27){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
89[B6d6DBDDBDD]2221121112111111111111111221121111212(51 3)211[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DBDDBDD(51)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
134[PDDDD]211211212112112111112121111112112112112111112111212112112112112112111121121112112211211211211212211121121111221(11 3)1[]{:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S}-- PDDDD(11){:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,7S} no
112[PDDDBBS]211211111112(19 4)21111221121111211211211211111121112122212111112221111112211[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDDDBBS(19){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
117[PDDDDD]211111122121111211211211211211212211112112112112112112211112112112112212112112112211121112111(11 4)1[T6S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(11)T6S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
187[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211S211211S211211D211211B21111212211112111211122(91 4)1121122211211111211111111111122111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(91){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
104[B6d6DSDD]2221111121121121122112112121121122111111211121121111211211212(3 5)12211211211211[]{:D}-- B6d6DSDD(3){:D} no
90[S6d6BDDBD]121121221212111111111112111212111121122121112111112(27 7)2[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDDBD(27)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
112[S6d6BDSDDB]112122112112112112111112111211112(59 7)212112121222112111112111111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDDB(59){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
130[S6d6BDSD]112211111211211111211211211211111212(4 1)22111211211211211211111112112112111111112112112112112112111121121112[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(4)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
99[S6d6BDBDD]1121211112112111121121121121121121121121111211112112211(52 2)2111212[]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDD(52){:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
114[S6d6BDD]1112221211211211211211221121121211111211121212122222111211211211211211211111112112112122112(12 3)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDD(12){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
118[S6d6BDSDDDS]1122111111121121121121111111211211222121121121121121121111122(44 3)2111[]{:_,3T,1t,3I,7H,7h,7B,7P,7d,7D,7S}-- S6d6BDSDDDS(44){:_,3T,1t,3I,7H,7h,7B,7P,7d,7D,7S} no
122[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211S211211S211211D2122(52 3)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(52){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
131[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211S211211S211211D2122(60 3)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(60){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
113[PDDDDB]211111211211222112111121121121121111112112122221121121122112112121121121121121121(44 4)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDB(44){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
111[B6d6DSDDDSS]211121121211121112221211211211212222212111211211211(20 5)1112211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDSS(20){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
126[PDDD]21121121211211211111212111121121121121111121121121111111121122112112112112112112111112112112111111121112111(28 5)22[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDD(28)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
125[S6d6BDSDD]1121221121121121121121121111121122111112112111212211121211121112112121121111211211122(36 7)21[]{:_,13T,11t,13I,15H,15h,13B,15P,13d,13D,7S}-- S6d6BDSDD(36){:_,13T,11t,13I,15H,15h,13B,15P,13d,13D,7S} no
137[PDDDDD]2111121121112211221122211112111112112111122222211121121111121121121121121121111121121121222121112112112112221(4 7)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDDD(4){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
145[B6d6DSDDSD]2221121121111112112111112121211211S211211D211211D211211S211211D21222112111211111111111111212111111(45 0)21[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(45){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
145[B6d6DSDDDD]2221111121121121121111111112121211211S211211D211211D211211S211211D21222112111211111111111111212111111(45 0)21[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(45){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
162[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211B211211D211211B2111121211112112112112112111(21 0)2211211211212121121112111221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(21){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
162[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211B211211D211211B2111121211112112112112112111(21 0)2211211211212121121112111221[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(21){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
199[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211S211211B211211D211211B211112121211211211211222211121121121121121212121121112111122112(85 0)2211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(85){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
66[PDDDDBD]211111211211221112112112112111112111212112222221211(29 1)[S6d6DS]{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}-- PDDDDBD(29)S6d6DS{:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S} no
95[PDBSPSS]22211221112111112(21 2)21211121111111211111112[H6T18T18T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDBSPSS(21)H6T18T18T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
83[PDBBBSS]22112212112212111211111111111112222(29 3)21211212[P]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- PDBBBSS(29)P{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
89[PDDDD]2111112112112221121121121121121121122111111121111121112111221112112122111211(5 3)[S6d-2]{:B}-- PDDDD(5)S6d-2{:B} no
77[S6d6BDDBB]12112122112211211111211211212(-11 4)112121112[]{:_,15T,13t,13I,17H,19h,13B,13P,13d,13D,13S}-- S6d6BDDBB(-11){:_,15T,13t,13I,17H,19h,13B,13P,13d,13D,13S} no
88[S6d6BDDDDS]1211212212211211211111112112112111212111212(-3 4)2[]{:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S}-- S6d6BDDDDS(-3){:_,7T,5t,5I,9H,11h,7B,7P,7d,7D,7S} no
111[PDDDD]2111121121112211221122211112112112112112112112211211212112112211121121212112111211111111(13 4)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDD(13)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
129[S6d6BDSD]11212211211211112112112112111112112111222121121111121121121121111121121111111212(45 5)12112112111212212[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(45){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
77[B6d6DSDDDD]222111112112111111121121121122(29 6)121222[]{:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S}-- B6d6DSDDDD(29){:_,5T,5t,7I,9H,9h,5B,7P,7d,5D,5S} no
79[PDBS]2211212112112111112121211121111211211111121121121122(29 6)112222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDBS(29){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
86[B6d6DSDDSS]2221121121111121121121122(29 6)11221111111112[]{:_,1T,-1t,1I,3H,3h,5B,5P,7d,5D,5S}-- B6d6DSDDSS(29){:_,1T,-1t,1I,3H,3h,5B,5P,7d,5D,5S} no
90[PDDDDD]21111112112112122211121121121122112111211221121111121122(45 6)122112[]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(45){:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
99[B6d6DSDDDDD]2111211211112112112112111111111121121121122(37 6)122211222[]{:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S}-- B6d6DSDDDDD(37){:_,5T,5t,5I,7H,9h,5B,7P,5d,5D,5S} no
81[SPBDD]212221121121122112111211212111211111111211111112111212(61 7)[]{:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S}-- SPBDD(61){:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S} no
100[S6d6BDSDDD]112122112112112112112112112112211211212111112111221(5 7)2111[I34]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDSDDD(5)I34{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} no
118[B6d6DBDDBSD]2221121111211211211211211221121122211111121211111112111211111111(53 7)22[I30]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DBDDBSD(53)I30{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
80[T6SPDBB]2(46 0)1111112112221112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- T6SPDBB(46)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
96[PDDDDD]2112112211111112112112121121121121122112112122112112121121112111112(22 1)[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(22)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
101[PDDDDD]2112112211111112112112121121122112112121121122112211112111211121111111(30 2)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDD(30)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} yes8
112[S6d6BDSDD]112211111211211211211211211111211221111121122111111122112112(-2 2)21111111111221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDD(-2){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
125[S6d6BDSSDD]1122211112112111111211211112112112112112112112112211211211121(62 2)21111212111111121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSSDD(62){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
125[S6d6BDSD]1122111112112111112112112111111112112111112212112112112112112112112211111111222212112112(54 2)22222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(54){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
129[PDDDDD]21121121211211211111212111121121111211211222222121121111121121111211211112112122211121122111211211111(22 2)[]{:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S}-- PDDDDD(22){:_,5T,3t,1I,7H,9h,5B,7P,5d,5D,5S} no
135[S6d6BDSSDD]1122211112112112211112112111221111221122111211211211122211211211211111121121111211212211(6 2)[]{:_,9T,7t,11I,11H,13h,9B,11P,9d,9D,7S}-- S6d6BDSSDD(6){:_,9T,7t,11I,11H,13h,9B,11P,9d,9D,7S} no
175[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D2112221111121122211211112121(110 2)1211111121122212111121111111211212221[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(110){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
106[B6d6DSDDSD]2221121121111112112111112121211211D211211S211211S211211D2122(14 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(14){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
106[B6d6DSDDDD]2221111121121121121111111112121211211D211211S211211S211211D2122(14 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(14){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
113[S6d6BDSD]11221111121121111121121121111111121121111122112112112112112112111111112112112122(30 3)1[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(30){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
115[B6d6DSDDSD]2221121121111112112111112121211211S211211D211211S211211S211211D2122(22 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(22){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
115[B6d6DSDDDD]2221111121121121121111111112121211211S211211D211211S211211B211211D21212(22 3)[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(22){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
160[B6d6DSDDSD]2221121121111112112111112121211211B211211D211211D211211S211211S211211D211211D2122(30 4)2112112111111111111111112222121222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(30){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
160[B6d6DSDDDD]2221111121121121121111111112121211211B211211D211211D211211S211211S211211D211211D2122(30 4)2112112111111111111111112222121222[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(30){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
182[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D21122112112211111112112112121121121121122112112121121122112111112112121121112111111111111(54 4)112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(54)P{:_,7B,9P,7D,7S} no
182[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D21122112112211111112112112121121121121122112112121121122112111112112121121112111111111111(54 4)112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(54)P{:_,7B,9P,7D,7S} no
184[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D21122112112211111112112112121121121121122112112121121122112111112112121121112111111111111(54 4)112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(54)S{:_,7B,9P,7D,7S} no
184[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D21122112112211111112112112121121121121122112112121121122112111112112121121112111111111111(54 4)112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(54)S{:_,7B,9P,7D,7S} no
201[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211D211211D211211D2112211111211211222112111121121121121111112112122221121121122112112121121121121121121(94 4)1111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(94){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
104[S6d6BDDD]11121121211211211211111211121112111121121122112112121111211222(14 5)12[h4t14]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- S6d6BDDD(14)h4t14{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
177[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211S211211D211211B21111221111121121121121111112112122(102 5)112211112112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(102){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
177[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D211211D211211D211222111112112211221111211121112111111121212112112112111121121121121212(30 6)222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(30)P{:_,7B,9P,7D,7S} no
177[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D211211D211211D211222111112112211221111211121112111111121212112112112111121121121121212(30 6)222[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(30)P{:_,7B,9P,7D,7S} no
179[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D211211D211211D211222111112112211221111211121112111111121212112112112111121121121121212(30 6)222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(30)S{:_,7B,9P,7D,7S} no
179[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D211211D211211D211222111112112211221111211121112111111121212112112112111121121121121212(30 6)222[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(30)S{:_,7B,9P,7D,7S} no
187[B6d6DSDDSD]2221121121111112112111112121211211D211211D211211D211211D2112211211221111111211211212112112211211212112112211221111211212112111211121111111121111(54 6)121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDSD(54){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
187[B6d6DSDDDD]2221111121121121121111111112121211211D211211D211211D211211D2112211211221111111211211212112112211211212112112211221111211212112111211121111111121111(54 6)121[]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}-- B6d6DSDDDD(54){:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S} no
191[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D2112221121121211111211121112212(78 6)12221121121121121111121112111211111122121121212121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(78){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
198[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B211211D211211B21111212112112111112112112112111111211211212(70 6)2212211111122111211121111111112111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(70){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
213[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211S211211D211211B2111121221121121121121121121111121122111112112111212211121211121112112121121111211211122(86 7)2111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(86){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
225[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D21122111121121112211221122211112111112112111122222211121121111121121121121121121111121121121222121112112112112221(54 7)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(54){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
123[S6d6BDBD]1121211211211211211211211211111112112111112111211111111111122111121(23 0)2111211211221121122111222[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDBD(23){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
114[B6d6DSDBBS]212112111112112112112111112111211121121112211211111(31 1)22211121112112[I-4]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- B6d6DSDBBS(31)I-4{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
179[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211D211211D211211D211221111121121122211211211211111211121211222222111211(71 1)2221112122111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(71){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
185[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211B211211D211211D211211D2112211111211211221112112112112111112111212112222221211(79 1)211111121211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(79){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
86[S6d6BDBDDDDB]11212121112112222111122(7 2)11112[T6]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- S6d6BDBDDDDB(7)T6{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
126[S6d6BDSDSD]1122111121121112111221212222112112112112112211211212112112111111121121121121122(47 2)[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSDSD(47){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
116[PDDDSD]211211112222111111112112112112112112112112112111112211211211111111212(23 3)211211111211121112112[I4S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- PDDDSD(23)I4S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
161[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211B211211D211211D211211B211211D212221121112111111111111111221121111212(71 3)2112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(71)P{:_,7B,9P,7D,7S} no
161[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211B211211D211211D211211B211211D212221121112111111111111111221121111212(71 3)2112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(71)P{:_,7B,9P,7D,7S} no
163[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211B211211D211211D211211B211211D212221121112111111111111111221121111212(71 3)2112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(71)S{:_,7B,9P,7D,7S} no
163[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211B211211D211211D211211B211211D212221121112111111111111111221121111212(71 3)2112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(71)S{:_,7B,9P,7D,7S} no
174[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B21111121121211211112112112112111211211211211211222211(87 3)221221112122111[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(87){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
178[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211S211211B211211B211211B211222112212112212111211111111111112222(79 3)21211212121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(79){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
102[S6d6BDB]121121112211211211211111112112112112122121121111111211212211111112221111(-1 4)21211111221[S]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDB(-1)S{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} no
165[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211B211211D211211D211211B21112112122112211211111211211212(39 4)11212111211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(39){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
176[B6d6DSDDDDD]211111111211211211221121121111121111122211211S211211D211211D211211D211211D211211B2111211212212211211211111112112112111212111212(47 4)211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(47){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
198[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D21122111121121112211221122211112112112112112112112211211212112112211121121212112111211111111(63 4)21[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(63){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
160[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211B211211D211211B21111212111121121111211211211211111121121221(47 5)1221121212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(47)P{:_,7B,9P,7D,7S} no
160[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211B211211D211211B21111212111121121111211211211211111121121221(47 5)1221121212[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(47)P{:_,7B,9P,7D,7S} no
162[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211B211211D211211B21111212111121121111211211211211111121121221(47 5)1221121212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(47)S{:_,7B,9P,7D,7S} no
162[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211B211211D211211B21111212111121121111211211211211111121121221(47 5)1221121212[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(47)S{:_,7B,9P,7D,7S} no
185[B6d6DSDDSDD]2221121121111112112111112121211211D211211D211211D211211S211211D212221111121121121122112112121121122111111211121121111211211212(31 5)12211211211211112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDSDD(31)P{:_,7B,9P,7D,7S} no
185[B6d6DSDDDDD]2221111121121121121111111112121211211D211211D211211D211211S211211D212221111121121121122112112121121122111111211121121111211211212(31 5)12211211211211112[P]{:_,7B,9P,7D,7S}-- B6d6DSDDDDD(31)P{:_,7B,9P,7D,7S} no
187[B6d6DSDDSDB]2221121121111112112111112121211211D211211D211211D211211S211211D212221111121121121122112112121121122111111211121121111211211212(31 5)12211211211211112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDSDB(31)S{:_,7B,9P,7D,7S} no
187[B6d6DSDDDDB]2221111121121121121111111112121211211D211211D211211D211211S211211D212221111121121121122112112121121122111111211121121111211211212(31 5)12211211211211112[S]{:_,7B,9P,7D,7S}-- B6d6DSDDDDB(31)S{:_,7B,9P,7D,7S} no
217[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211S211211D211211B21111212211211211112112112112111112112111222121121111121121121121111121121111111212(95 5)1211211211121221211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(95){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
100[PDDDDB]2112112211111112112112121121121111121121122211121112111111121111111(39 6)22[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- PDDDDB(39)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
120[S6d6BDSD]112122112112112112112112111111112112111121122222112212111211212112111121121122(15 6)121112122[T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}-- S6d6BDSD(15)T-2{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S} no
122[PDDDD]21121122111111121121121211211211111211211222112112112112112112112211211212111111121122111111111111(23 6)22111212[P]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}-- PDDDD(23)P{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S} no
165[B6d6DSDDDDD]211111111211211211221121121111121111122211211B211211S211211D211211D211211S211211D212221121121111121121121122(79 6)11222211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(79){: _,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
167[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D21122112112121121121111121211111121121121121121112111121122(87 6)2121[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(87){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
178[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211D211211D211221111112112112122211121121121122112111211221121111121122(95 6)12211211[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(95){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
102[S6d6BDDDSS]1122212211222111121121121121122112112121111211222111112(39 7)[]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDDDSS(39){:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S} yes8
117[S6d6BDSD]1122111112112112112111111112112112112112112211211122211121111211211211112121121121121121121111122(15 7)[PB]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- S6d6BDSD(15)PB{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
123[SPBDD]212221121121121121121121122111112112211222111212112112111112111211122111112112112112111112111221112(55 7)222[S]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- SPBDD(55)S{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
169[B6d6DSDDDDD]211111111211211211221121121111121111122211211D211211D211211B2112111212221121121122112111211212111211111111211111112111212(111 7)11[]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}-- B6d6DSDDDDD(111){:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S} no
And StackChangeCost\CondBitSequences.txt: reqired for StackChangeCosts
Code: Select all
1[B]0[]{I9:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
1[B]1[S]{S5:_,5T,5t,7I,9H,9h,5B,7P,5d,5D,5S}
1[B]2[1]{:_,5T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
1[B6D]2[1]{:_,5T,3t,-1I,7H,9h,5B,7P,5d,5D,5S}
1[B6d6DBDS]2[]{:_,3T,1t,1I,5H,5h,5B,5P,5d,5D,5S}
1[B6d6SPS]2[]{:_,5T,3t,3I,7H,7h,5B,7P,5d,5D,5S}
1[B6S]2[1]{:_,5T,3t,1I,9H,9h,9B,9P,9d,9D,9S}
1[D]1[P]{S5:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
1[H2T6d]1[]{S3:_,13T,13t,15I,17H,17h,13B,15P,13d,13D,9S}
1[I]1[]{S-127:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,-127S}
1[I]2[0]{:_,11T,15t,7I,9H,11h,9B,19P,9d,13D,11S}
1[I6T]1[]{S5:_,11T,11t,13I,15H,15h,13B,15P,11d,11D,11S}
1[P]1[B]{S5:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
1[S]0[D6d-2]{I5:_,7T,5t,3I,9H,11h,7B,9P,7d,7D,7S}
1[S]2[P6d-2]{:_,7T,5t,3I,9H,11h,7B,9P,7d,7D,7S}
1[S6d]2[PD2]{:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S}
1[S6d2I]2[P12]{:_,5T,5t,7I,9H,11h,7B,9P,7d,7D,5S}
1[T]0[]{I11:_,7T,5t,7I,11H,11h,7B,9P,9d,7D,7S}
1[T]1[I-2]{S-127:_,7T,7t,7I,11H,11h,7B,9P,7d,7D,-127S}
1[T]2[1]{:_,7T,5t,7I,11H,11h,7B,9P,9d,7D,7S}
2[B6d6DBD]21[]{:_,9T,7t,9I,11H,13h,9B,11P,9d,9D,9S}
2[d6DD]11[]{S7:_,5T,3t,3I,7H,9h,5B,7P,5d,5D,5S}
2[DB]22[1]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
2[H2T]11[]{S7:_,9T,9t,9I,13H,13h,9B,11P,7d,7D,1S}
2[I6I]11[]{S1:_,5T,3t,7I,7H,7h,5B,7P,3d,3D,-1S}
2[S6d]12[H6T]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,5S}
2[t]11[]{S-127:_,9T,9t,11I,13H,13h,9B,11P,9d,9D,-127S}
3[H2T6B]111[]{S13:_,11T,9t,11I,13H,15h,11B,13P,11d,11D,7S}
7[H]1112112[1]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,1S}
8[H]11111112[H6T12]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,1S}
9[PDB]221112122[1T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
10[h]1111111112[1]{:_,3T,3t,5I,7H,7h,5B,7P,3d,3D,1S}
11[H]11111111111[h4t14]{S25:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,3S}
11[h]11111111111[H6T14]{S25:_,3T,3t,5I,7H,7h,5B,7P,3d,3D,1S}
11[PDD]21121112122[1T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
20[PDBSSSD]22112211111212121211[H6T10]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,7S}
20[PDBSSSDB]22112211111212121211[H6T18S]{:_,5T,3t,5I,7H,9h,5B,7P,5d,5D,5S}
23[S6d6BDDBB]12112122121211121112111[H6T26S]{:_,9T,9t,5I,13H,15h,5B,7P,5d,5D,5S}
28[B6d6DSDDSD]2221121121111112112111112121[S12]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
29[B6d6DSDBBS]21211121111111111111111112111[H6T38T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
29[PDDBD]21221112211112211111111111112[H6T18T10T]{:_,9T,7t,9I,13H,13h,13B,13P,13d,13D,13S}
30[PDBS]221122111112121112111211111112[I14T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
31[B6d6DSDDDD]2221111121121121121111111112121[S12]{:_,7T,5t,5I,9H,9h,7B,9P,7d,7D,7S}
31[PDBS]2211221111121211121112111111111[T16T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
32[S6d6BDSB]11212221121121112211111221121112[H6T]{:_,9T,7t,9I,13H,13h,13B,13P,13d,13D,13S}
34[B6d6DSDDBS]2221221121121121111112112111112121[S12]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}
34[PDBS]2211212112112211111212111211121111[H6T16T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
36[PDDDBSD]212212121211121112111111111221212212[H6T42]{:_,9T,9t,9I,13H,13h,7B,11P,9d,9D,7S}
38[PDDDDDBS]22221121211211121111222211112111211121[H6T36T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
39[B6d6DSDDDDD]211111111211211211221121121111121111122[S22t28]{:_,7T,5t,7I,9H,11h,7B,9P,7d,7D,7S}
40[B6d6DSDDS]2221121121111211222121111111112111111111[H6T34T-16]{:_,23T,23t,25I,27H,27h,25B,27P,25d,25D,23S}
40[PDBSBSS]2211212221112111222221112121111122111111[T40T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
40[S6d6BDSB]1121222112112111221111122112111111111122[H6T18T]{:_,9T,7t,9I,13H,13h,13B,13P,13d,13D,13S}
41[PDBSBSS]22112122211121112222211121211111121111112[H6T10T-2]{:_,11T,9t,9I,13H,15h,11B,13P,11d,11D,7S}
44[PDBDDSS]22112222112212112112112111112112111112121211[H6T10]{:_,9T,7t,7I,11H,13h,9B,11P,9d,9D,7S}
46[S6d6BDSS]1122112112112112112112111112112111211112221211[H6T16]{:_,7T,5t,5I,9H,11h,7B,9P,7d,7D,7S}
49[S6d6BDS]1122112112111112112112112111112112111211112221211[H6T8]{:S}