diff --git a/app/patternfront.html b/app/patternfront.html
index f7db28a..0691d22 100644
--- a/app/patternfront.html
+++ b/app/patternfront.html
@@ -442,6 +442,7 @@
+
fit
@@ -704,6 +705,9 @@
const Z=()=>zoom*uiScale;
let symX=false,symY=false,wrapDraw=false,onion=0;
let sel=null,clipboard=null,pvScale=0,pvTile=true;
+// Map view: is it on, and where the territory sits in world coordinates.
+// The offset is deliberately allowed to go negative — see floorMod.
+let pvMap=false,pvOX=0,pvOY=0;
// `fg` is the active colour: what the pencil, shapes and fill use, and what
// the picker edits. `bg` is the other one (right-click, and what Grab backfills
// with). Clicking a chip makes it active. There is deliberately no separate
@@ -880,8 +884,47 @@
const w=Math.max(1,box.clientWidth-pad), h=Math.max(1,box.clientHeight-pad);
return Math.max(1,Math.floor(Math.min(w/(doc.w*n), h/(doc.h*n))));}
function pvEff(){return pvScale>0?pvScale:pvFitScale();}
+/* A blobby pseudo-territory, so the pattern is judged inside a shape rather than
+ as a rectangle. Ported from tools/preview_prototype.py. */
+function territoryMask(w,h){
+ const cx=w/2,cy=h/2,mask=new Uint8Array(w*h);
+ for(let y=0;y
0?s+'×':'fit '+s+'×';
pvC.width=doc.w*n*s;pvC.height=doc.h*n*s;
@@ -895,6 +938,26 @@
pvG.drawImage(t,x*doc.w*s,y*doc.h*s,doc.w*s,doc.h*s);}
$('pvTile').onclick=()=>{pvTile=!pvTile;
$('pvTile').setAttribute('aria-pressed',String(pvTile));drawPreview();};
+$('pvMap').onclick=()=>{pvMap=!pvMap;
+ $('pvMap').setAttribute('aria-pressed',String(pvMap));
+ $('pvTile').disabled=pvMap;$('pvFit').disabled=pvMap;drawPreview();};
+// Drag the territory across the map. This is the control the flat view has no
+// equivalent of: pan left and the world coordinates go negative, which is where
+// a remainder-based sampler would read before the start of the pattern.
+pvC.addEventListener('pointerdown',e=>{
+ if(!pvMap) return;
+ pvC.setPointerCapture(e.pointerId);
+ const sx=e.clientX,sy=e.clientY,ox=pvOX,oy=pvOY;
+ const per=Math.max(1,pvC.clientWidth/MAP_TILES);
+ const move=ev=>{
+ pvOX=ox-Math.round((ev.clientX-sx)/per);
+ pvOY=oy-Math.round((ev.clientY-sy)/per);
+ drawMapPreview();};
+ const up=()=>{pvC.removeEventListener('pointermove',move);
+ pvC.removeEventListener('pointerup',up);pvC.removeEventListener('pointercancel',up);};
+ pvC.addEventListener('pointermove',move);
+ pvC.addEventListener('pointerup',up);
+ pvC.addEventListener('pointercancel',up);});
$('pvFit').onclick=()=>{pvScale=0;drawPreview();};
pvC.parentElement.addEventListener('wheel',e=>{
e.preventDefault();
@@ -1741,6 +1804,21 @@
for(let i=0;i>3)]>>(i&7))&1;
return {w,h,scale,bits};
}
+/* Modulo that is never negative. JS `%` is a REMAINDER whose sign follows the
+ dividend: -1 % 4 is -1, where a floor modulo gives 3. OpenFront never meets
+ this because its own tile coordinates start at 0, but the map preview lets the
+ territory be panned left, and a bare `%` there would index before the start of
+ the array and render garbage at the origin. Every sampler goes through this. */
+const floorMod=(a,n)=>((a%n)+n)%n;
+/* Is the world tile at (wx,wy) the primary colour? THE sampling rule — the one
+ place that decides what a player actually sees. `scale` magnifies by 2^scale,
+ so a block of 2^scale world tiles shares one pattern pixel, and the pattern is
+ laid out in ABSOLUTE world coordinates: move a territory across the map and
+ the pattern's phase moves with it. Held to tests/fixtures/sampler.json. */
+function ofPrimaryAt(d,wx,wy){
+ const px=floorMod(wx>>d.scale,d.w),py=floorMod(wy>>d.scale,d.h);
+ return d.bits[py*d.w+px]===0;
+}
// Flatten the visible layers to palette indices (top layer wins).
function flatIndex(fi){
const out=new Uint8Array(npx());
@@ -1769,7 +1847,10 @@
return bits;}
function refreshOF(){
const scale=+$('ofScale').value;
- $('ofScaleO').textContent=scale+'×';
+ // The readout is the magnification, not the slider position. scale is an
+ // exponent — one pixel covers 2^scale tiles — so slider 3 is 8x, and showing
+ // "3x" contradicted the sentence directly beneath it.
+ $('ofScaleO').textContent=(1<OF_MAXW||doc.h>OF_MAXH){
diff --git a/tests/fixtures/sampler.json b/tests/fixtures/sampler.json
new file mode 100644
index 0000000..3b65d45
--- /dev/null
+++ b/tests/fixtures/sampler.json
@@ -0,0 +1,5101 @@
+{
+ "note": "Map-scale sampling oracle. Probes straddle the origin because JavaScript's % is a remainder, not a floor modulo. Patterns are from the licence-clean corpus, not OpenFront's cosmetics.json.",
+ "probeCount": 1161,
+ "caseCount": 56,
+ "probes": [
+ [
+ -9,
+ -9
+ ],
+ [
+ -8,
+ -9
+ ],
+ [
+ -7,
+ -9
+ ],
+ [
+ -6,
+ -9
+ ],
+ [
+ -5,
+ -9
+ ],
+ [
+ -4,
+ -9
+ ],
+ [
+ -3,
+ -9
+ ],
+ [
+ -2,
+ -9
+ ],
+ [
+ -1,
+ -9
+ ],
+ [
+ 0,
+ -9
+ ],
+ [
+ 1,
+ -9
+ ],
+ [
+ 2,
+ -9
+ ],
+ [
+ 3,
+ -9
+ ],
+ [
+ 4,
+ -9
+ ],
+ [
+ 5,
+ -9
+ ],
+ [
+ 6,
+ -9
+ ],
+ [
+ 7,
+ -9
+ ],
+ [
+ 8,
+ -9
+ ],
+ [
+ 9,
+ -9
+ ],
+ [
+ -9,
+ -8
+ ],
+ [
+ -8,
+ -8
+ ],
+ [
+ -7,
+ -8
+ ],
+ [
+ -6,
+ -8
+ ],
+ [
+ -5,
+ -8
+ ],
+ [
+ -4,
+ -8
+ ],
+ [
+ -3,
+ -8
+ ],
+ [
+ -2,
+ -8
+ ],
+ [
+ -1,
+ -8
+ ],
+ [
+ 0,
+ -8
+ ],
+ [
+ 1,
+ -8
+ ],
+ [
+ 2,
+ -8
+ ],
+ [
+ 3,
+ -8
+ ],
+ [
+ 4,
+ -8
+ ],
+ [
+ 5,
+ -8
+ ],
+ [
+ 6,
+ -8
+ ],
+ [
+ 7,
+ -8
+ ],
+ [
+ 8,
+ -8
+ ],
+ [
+ 9,
+ -8
+ ],
+ [
+ -9,
+ -7
+ ],
+ [
+ -8,
+ -7
+ ],
+ [
+ -7,
+ -7
+ ],
+ [
+ -6,
+ -7
+ ],
+ [
+ -5,
+ -7
+ ],
+ [
+ -4,
+ -7
+ ],
+ [
+ -3,
+ -7
+ ],
+ [
+ -2,
+ -7
+ ],
+ [
+ -1,
+ -7
+ ],
+ [
+ 0,
+ -7
+ ],
+ [
+ 1,
+ -7
+ ],
+ [
+ 2,
+ -7
+ ],
+ [
+ 3,
+ -7
+ ],
+ [
+ 4,
+ -7
+ ],
+ [
+ 5,
+ -7
+ ],
+ [
+ 6,
+ -7
+ ],
+ [
+ 7,
+ -7
+ ],
+ [
+ 8,
+ -7
+ ],
+ [
+ 9,
+ -7
+ ],
+ [
+ -9,
+ -6
+ ],
+ [
+ -8,
+ -6
+ ],
+ [
+ -7,
+ -6
+ ],
+ [
+ -6,
+ -6
+ ],
+ [
+ -5,
+ -6
+ ],
+ [
+ -4,
+ -6
+ ],
+ [
+ -3,
+ -6
+ ],
+ [
+ -2,
+ -6
+ ],
+ [
+ -1,
+ -6
+ ],
+ [
+ 0,
+ -6
+ ],
+ [
+ 1,
+ -6
+ ],
+ [
+ 2,
+ -6
+ ],
+ [
+ 3,
+ -6
+ ],
+ [
+ 4,
+ -6
+ ],
+ [
+ 5,
+ -6
+ ],
+ [
+ 6,
+ -6
+ ],
+ [
+ 7,
+ -6
+ ],
+ [
+ 8,
+ -6
+ ],
+ [
+ 9,
+ -6
+ ],
+ [
+ -9,
+ -5
+ ],
+ [
+ -8,
+ -5
+ ],
+ [
+ -7,
+ -5
+ ],
+ [
+ -6,
+ -5
+ ],
+ [
+ -5,
+ -5
+ ],
+ [
+ -4,
+ -5
+ ],
+ [
+ -3,
+ -5
+ ],
+ [
+ -2,
+ -5
+ ],
+ [
+ -1,
+ -5
+ ],
+ [
+ 0,
+ -5
+ ],
+ [
+ 1,
+ -5
+ ],
+ [
+ 2,
+ -5
+ ],
+ [
+ 3,
+ -5
+ ],
+ [
+ 4,
+ -5
+ ],
+ [
+ 5,
+ -5
+ ],
+ [
+ 6,
+ -5
+ ],
+ [
+ 7,
+ -5
+ ],
+ [
+ 8,
+ -5
+ ],
+ [
+ 9,
+ -5
+ ],
+ [
+ -9,
+ -4
+ ],
+ [
+ -8,
+ -4
+ ],
+ [
+ -7,
+ -4
+ ],
+ [
+ -6,
+ -4
+ ],
+ [
+ -5,
+ -4
+ ],
+ [
+ -4,
+ -4
+ ],
+ [
+ -3,
+ -4
+ ],
+ [
+ -2,
+ -4
+ ],
+ [
+ -1,
+ -4
+ ],
+ [
+ 0,
+ -4
+ ],
+ [
+ 1,
+ -4
+ ],
+ [
+ 2,
+ -4
+ ],
+ [
+ 3,
+ -4
+ ],
+ [
+ 4,
+ -4
+ ],
+ [
+ 5,
+ -4
+ ],
+ [
+ 6,
+ -4
+ ],
+ [
+ 7,
+ -4
+ ],
+ [
+ 8,
+ -4
+ ],
+ [
+ 9,
+ -4
+ ],
+ [
+ -9,
+ -3
+ ],
+ [
+ -8,
+ -3
+ ],
+ [
+ -7,
+ -3
+ ],
+ [
+ -6,
+ -3
+ ],
+ [
+ -5,
+ -3
+ ],
+ [
+ -4,
+ -3
+ ],
+ [
+ -3,
+ -3
+ ],
+ [
+ -2,
+ -3
+ ],
+ [
+ -1,
+ -3
+ ],
+ [
+ 0,
+ -3
+ ],
+ [
+ 1,
+ -3
+ ],
+ [
+ 2,
+ -3
+ ],
+ [
+ 3,
+ -3
+ ],
+ [
+ 4,
+ -3
+ ],
+ [
+ 5,
+ -3
+ ],
+ [
+ 6,
+ -3
+ ],
+ [
+ 7,
+ -3
+ ],
+ [
+ 8,
+ -3
+ ],
+ [
+ 9,
+ -3
+ ],
+ [
+ -9,
+ -2
+ ],
+ [
+ -8,
+ -2
+ ],
+ [
+ -7,
+ -2
+ ],
+ [
+ -6,
+ -2
+ ],
+ [
+ -5,
+ -2
+ ],
+ [
+ -4,
+ -2
+ ],
+ [
+ -3,
+ -2
+ ],
+ [
+ -2,
+ -2
+ ],
+ [
+ -1,
+ -2
+ ],
+ [
+ 0,
+ -2
+ ],
+ [
+ 1,
+ -2
+ ],
+ [
+ 2,
+ -2
+ ],
+ [
+ 3,
+ -2
+ ],
+ [
+ 4,
+ -2
+ ],
+ [
+ 5,
+ -2
+ ],
+ [
+ 6,
+ -2
+ ],
+ [
+ 7,
+ -2
+ ],
+ [
+ 8,
+ -2
+ ],
+ [
+ 9,
+ -2
+ ],
+ [
+ -9,
+ -1
+ ],
+ [
+ -8,
+ -1
+ ],
+ [
+ -7,
+ -1
+ ],
+ [
+ -6,
+ -1
+ ],
+ [
+ -5,
+ -1
+ ],
+ [
+ -4,
+ -1
+ ],
+ [
+ -3,
+ -1
+ ],
+ [
+ -2,
+ -1
+ ],
+ [
+ -1,
+ -1
+ ],
+ [
+ 0,
+ -1
+ ],
+ [
+ 1,
+ -1
+ ],
+ [
+ 2,
+ -1
+ ],
+ [
+ 3,
+ -1
+ ],
+ [
+ 4,
+ -1
+ ],
+ [
+ 5,
+ -1
+ ],
+ [
+ 6,
+ -1
+ ],
+ [
+ 7,
+ -1
+ ],
+ [
+ 8,
+ -1
+ ],
+ [
+ 9,
+ -1
+ ],
+ [
+ -9,
+ 0
+ ],
+ [
+ -8,
+ 0
+ ],
+ [
+ -7,
+ 0
+ ],
+ [
+ -6,
+ 0
+ ],
+ [
+ -5,
+ 0
+ ],
+ [
+ -4,
+ 0
+ ],
+ [
+ -3,
+ 0
+ ],
+ [
+ -2,
+ 0
+ ],
+ [
+ -1,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 1,
+ 0
+ ],
+ [
+ 2,
+ 0
+ ],
+ [
+ 3,
+ 0
+ ],
+ [
+ 4,
+ 0
+ ],
+ [
+ 5,
+ 0
+ ],
+ [
+ 6,
+ 0
+ ],
+ [
+ 7,
+ 0
+ ],
+ [
+ 8,
+ 0
+ ],
+ [
+ 9,
+ 0
+ ],
+ [
+ -9,
+ 1
+ ],
+ [
+ -8,
+ 1
+ ],
+ [
+ -7,
+ 1
+ ],
+ [
+ -6,
+ 1
+ ],
+ [
+ -5,
+ 1
+ ],
+ [
+ -4,
+ 1
+ ],
+ [
+ -3,
+ 1
+ ],
+ [
+ -2,
+ 1
+ ],
+ [
+ -1,
+ 1
+ ],
+ [
+ 0,
+ 1
+ ],
+ [
+ 1,
+ 1
+ ],
+ [
+ 2,
+ 1
+ ],
+ [
+ 3,
+ 1
+ ],
+ [
+ 4,
+ 1
+ ],
+ [
+ 5,
+ 1
+ ],
+ [
+ 6,
+ 1
+ ],
+ [
+ 7,
+ 1
+ ],
+ [
+ 8,
+ 1
+ ],
+ [
+ 9,
+ 1
+ ],
+ [
+ -9,
+ 2
+ ],
+ [
+ -8,
+ 2
+ ],
+ [
+ -7,
+ 2
+ ],
+ [
+ -6,
+ 2
+ ],
+ [
+ -5,
+ 2
+ ],
+ [
+ -4,
+ 2
+ ],
+ [
+ -3,
+ 2
+ ],
+ [
+ -2,
+ 2
+ ],
+ [
+ -1,
+ 2
+ ],
+ [
+ 0,
+ 2
+ ],
+ [
+ 1,
+ 2
+ ],
+ [
+ 2,
+ 2
+ ],
+ [
+ 3,
+ 2
+ ],
+ [
+ 4,
+ 2
+ ],
+ [
+ 5,
+ 2
+ ],
+ [
+ 6,
+ 2
+ ],
+ [
+ 7,
+ 2
+ ],
+ [
+ 8,
+ 2
+ ],
+ [
+ 9,
+ 2
+ ],
+ [
+ -9,
+ 3
+ ],
+ [
+ -8,
+ 3
+ ],
+ [
+ -7,
+ 3
+ ],
+ [
+ -6,
+ 3
+ ],
+ [
+ -5,
+ 3
+ ],
+ [
+ -4,
+ 3
+ ],
+ [
+ -3,
+ 3
+ ],
+ [
+ -2,
+ 3
+ ],
+ [
+ -1,
+ 3
+ ],
+ [
+ 0,
+ 3
+ ],
+ [
+ 1,
+ 3
+ ],
+ [
+ 2,
+ 3
+ ],
+ [
+ 3,
+ 3
+ ],
+ [
+ 4,
+ 3
+ ],
+ [
+ 5,
+ 3
+ ],
+ [
+ 6,
+ 3
+ ],
+ [
+ 7,
+ 3
+ ],
+ [
+ 8,
+ 3
+ ],
+ [
+ 9,
+ 3
+ ],
+ [
+ -9,
+ 4
+ ],
+ [
+ -8,
+ 4
+ ],
+ [
+ -7,
+ 4
+ ],
+ [
+ -6,
+ 4
+ ],
+ [
+ -5,
+ 4
+ ],
+ [
+ -4,
+ 4
+ ],
+ [
+ -3,
+ 4
+ ],
+ [
+ -2,
+ 4
+ ],
+ [
+ -1,
+ 4
+ ],
+ [
+ 0,
+ 4
+ ],
+ [
+ 1,
+ 4
+ ],
+ [
+ 2,
+ 4
+ ],
+ [
+ 3,
+ 4
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 5,
+ 4
+ ],
+ [
+ 6,
+ 4
+ ],
+ [
+ 7,
+ 4
+ ],
+ [
+ 8,
+ 4
+ ],
+ [
+ 9,
+ 4
+ ],
+ [
+ -9,
+ 5
+ ],
+ [
+ -8,
+ 5
+ ],
+ [
+ -7,
+ 5
+ ],
+ [
+ -6,
+ 5
+ ],
+ [
+ -5,
+ 5
+ ],
+ [
+ -4,
+ 5
+ ],
+ [
+ -3,
+ 5
+ ],
+ [
+ -2,
+ 5
+ ],
+ [
+ -1,
+ 5
+ ],
+ [
+ 0,
+ 5
+ ],
+ [
+ 1,
+ 5
+ ],
+ [
+ 2,
+ 5
+ ],
+ [
+ 3,
+ 5
+ ],
+ [
+ 4,
+ 5
+ ],
+ [
+ 5,
+ 5
+ ],
+ [
+ 6,
+ 5
+ ],
+ [
+ 7,
+ 5
+ ],
+ [
+ 8,
+ 5
+ ],
+ [
+ 9,
+ 5
+ ],
+ [
+ -9,
+ 6
+ ],
+ [
+ -8,
+ 6
+ ],
+ [
+ -7,
+ 6
+ ],
+ [
+ -6,
+ 6
+ ],
+ [
+ -5,
+ 6
+ ],
+ [
+ -4,
+ 6
+ ],
+ [
+ -3,
+ 6
+ ],
+ [
+ -2,
+ 6
+ ],
+ [
+ -1,
+ 6
+ ],
+ [
+ 0,
+ 6
+ ],
+ [
+ 1,
+ 6
+ ],
+ [
+ 2,
+ 6
+ ],
+ [
+ 3,
+ 6
+ ],
+ [
+ 4,
+ 6
+ ],
+ [
+ 5,
+ 6
+ ],
+ [
+ 6,
+ 6
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 8,
+ 6
+ ],
+ [
+ 9,
+ 6
+ ],
+ [
+ -9,
+ 7
+ ],
+ [
+ -8,
+ 7
+ ],
+ [
+ -7,
+ 7
+ ],
+ [
+ -6,
+ 7
+ ],
+ [
+ -5,
+ 7
+ ],
+ [
+ -4,
+ 7
+ ],
+ [
+ -3,
+ 7
+ ],
+ [
+ -2,
+ 7
+ ],
+ [
+ -1,
+ 7
+ ],
+ [
+ 0,
+ 7
+ ],
+ [
+ 1,
+ 7
+ ],
+ [
+ 2,
+ 7
+ ],
+ [
+ 3,
+ 7
+ ],
+ [
+ 4,
+ 7
+ ],
+ [
+ 5,
+ 7
+ ],
+ [
+ 6,
+ 7
+ ],
+ [
+ 7,
+ 7
+ ],
+ [
+ 8,
+ 7
+ ],
+ [
+ 9,
+ 7
+ ],
+ [
+ -9,
+ 8
+ ],
+ [
+ -8,
+ 8
+ ],
+ [
+ -7,
+ 8
+ ],
+ [
+ -6,
+ 8
+ ],
+ [
+ -5,
+ 8
+ ],
+ [
+ -4,
+ 8
+ ],
+ [
+ -3,
+ 8
+ ],
+ [
+ -2,
+ 8
+ ],
+ [
+ -1,
+ 8
+ ],
+ [
+ 0,
+ 8
+ ],
+ [
+ 1,
+ 8
+ ],
+ [
+ 2,
+ 8
+ ],
+ [
+ 3,
+ 8
+ ],
+ [
+ 4,
+ 8
+ ],
+ [
+ 5,
+ 8
+ ],
+ [
+ 6,
+ 8
+ ],
+ [
+ 7,
+ 8
+ ],
+ [
+ 8,
+ 8
+ ],
+ [
+ 9,
+ 8
+ ],
+ [
+ -9,
+ 9
+ ],
+ [
+ -8,
+ 9
+ ],
+ [
+ -7,
+ 9
+ ],
+ [
+ -6,
+ 9
+ ],
+ [
+ -5,
+ 9
+ ],
+ [
+ -4,
+ 9
+ ],
+ [
+ -3,
+ 9
+ ],
+ [
+ -2,
+ 9
+ ],
+ [
+ -1,
+ 9
+ ],
+ [
+ 0,
+ 9
+ ],
+ [
+ 1,
+ 9
+ ],
+ [
+ 2,
+ 9
+ ],
+ [
+ 3,
+ 9
+ ],
+ [
+ 4,
+ 9
+ ],
+ [
+ 5,
+ 9
+ ],
+ [
+ 6,
+ 9
+ ],
+ [
+ 7,
+ 9
+ ],
+ [
+ 8,
+ 9
+ ],
+ [
+ 9,
+ 9
+ ],
+ [
+ -4096,
+ -4096
+ ],
+ [
+ -4089,
+ -4075
+ ],
+ [
+ -4082,
+ -4054
+ ],
+ [
+ -4075,
+ -4033
+ ],
+ [
+ -4068,
+ -4012
+ ],
+ [
+ -4061,
+ -3991
+ ],
+ [
+ -4054,
+ -3970
+ ],
+ [
+ -4047,
+ -3949
+ ],
+ [
+ -4040,
+ -3928
+ ],
+ [
+ -4033,
+ -3907
+ ],
+ [
+ -4026,
+ -3886
+ ],
+ [
+ -4019,
+ -3865
+ ],
+ [
+ -4012,
+ -3844
+ ],
+ [
+ -4005,
+ -3823
+ ],
+ [
+ -3998,
+ -3802
+ ],
+ [
+ -3991,
+ -3781
+ ],
+ [
+ -3984,
+ -3760
+ ],
+ [
+ -3977,
+ -3739
+ ],
+ [
+ -3970,
+ -3718
+ ],
+ [
+ -3963,
+ -3697
+ ],
+ [
+ -3956,
+ -3676
+ ],
+ [
+ -3949,
+ -3655
+ ],
+ [
+ -3942,
+ -3634
+ ],
+ [
+ -3935,
+ -3613
+ ],
+ [
+ -3928,
+ -3592
+ ],
+ [
+ -3921,
+ -3571
+ ],
+ [
+ -3914,
+ -3550
+ ],
+ [
+ -3907,
+ -3529
+ ],
+ [
+ -3900,
+ -3508
+ ],
+ [
+ -3893,
+ -3487
+ ],
+ [
+ -3886,
+ -3466
+ ],
+ [
+ -3879,
+ -3445
+ ],
+ [
+ -3872,
+ -3424
+ ],
+ [
+ -3865,
+ -3403
+ ],
+ [
+ -3858,
+ -3382
+ ],
+ [
+ -3851,
+ -3361
+ ],
+ [
+ -3844,
+ -3340
+ ],
+ [
+ -3837,
+ -3319
+ ],
+ [
+ -3830,
+ -3298
+ ],
+ [
+ -3823,
+ -3277
+ ],
+ [
+ -3816,
+ -3256
+ ],
+ [
+ -3809,
+ -3235
+ ],
+ [
+ -3802,
+ -3214
+ ],
+ [
+ -3795,
+ -3193
+ ],
+ [
+ -3788,
+ -3172
+ ],
+ [
+ -3781,
+ -3151
+ ],
+ [
+ -3774,
+ -3130
+ ],
+ [
+ -3767,
+ -3109
+ ],
+ [
+ -3760,
+ -4079
+ ],
+ [
+ -3753,
+ -4058
+ ],
+ [
+ -3746,
+ -4037
+ ],
+ [
+ -3739,
+ -4016
+ ],
+ [
+ -3732,
+ -3995
+ ],
+ [
+ -3725,
+ -3974
+ ],
+ [
+ -3718,
+ -3953
+ ],
+ [
+ -3711,
+ -3932
+ ],
+ [
+ -3704,
+ -3911
+ ],
+ [
+ -3697,
+ -3890
+ ],
+ [
+ -3690,
+ -3869
+ ],
+ [
+ -3683,
+ -3848
+ ],
+ [
+ -3676,
+ -3827
+ ],
+ [
+ -3669,
+ -3806
+ ],
+ [
+ -3662,
+ -3785
+ ],
+ [
+ -3655,
+ -3764
+ ],
+ [
+ -3648,
+ -3743
+ ],
+ [
+ -3641,
+ -3722
+ ],
+ [
+ -3634,
+ -3701
+ ],
+ [
+ -3627,
+ -3680
+ ],
+ [
+ -3620,
+ -3659
+ ],
+ [
+ -3613,
+ -3638
+ ],
+ [
+ -3606,
+ -3617
+ ],
+ [
+ -3599,
+ -3596
+ ],
+ [
+ -3592,
+ -3575
+ ],
+ [
+ -3585,
+ -3554
+ ],
+ [
+ -3578,
+ -3533
+ ],
+ [
+ -3571,
+ -3512
+ ],
+ [
+ -3564,
+ -3491
+ ],
+ [
+ -3557,
+ -3470
+ ],
+ [
+ -3550,
+ -3449
+ ],
+ [
+ -3543,
+ -3428
+ ],
+ [
+ -3536,
+ -3407
+ ],
+ [
+ -3529,
+ -3386
+ ],
+ [
+ -3522,
+ -3365
+ ],
+ [
+ -3515,
+ -3344
+ ],
+ [
+ -3508,
+ -3323
+ ],
+ [
+ -3501,
+ -3302
+ ],
+ [
+ -3494,
+ -3281
+ ],
+ [
+ -3487,
+ -3260
+ ],
+ [
+ -3480,
+ -3239
+ ],
+ [
+ -3473,
+ -3218
+ ],
+ [
+ -3466,
+ -3197
+ ],
+ [
+ -3459,
+ -3176
+ ],
+ [
+ -3452,
+ -3155
+ ],
+ [
+ -3445,
+ -3134
+ ],
+ [
+ -3438,
+ -3113
+ ],
+ [
+ -3431,
+ -4083
+ ],
+ [
+ -3424,
+ -4062
+ ],
+ [
+ -3417,
+ -4041
+ ],
+ [
+ -3410,
+ -4020
+ ],
+ [
+ -3403,
+ -3999
+ ],
+ [
+ -3396,
+ -3978
+ ],
+ [
+ -3389,
+ -3957
+ ],
+ [
+ -3382,
+ -3936
+ ],
+ [
+ -3375,
+ -3915
+ ],
+ [
+ -3368,
+ -3894
+ ],
+ [
+ -3361,
+ -3873
+ ],
+ [
+ -3354,
+ -3852
+ ],
+ [
+ -3347,
+ -3831
+ ],
+ [
+ -3340,
+ -3810
+ ],
+ [
+ -3333,
+ -3789
+ ],
+ [
+ -3326,
+ -3768
+ ],
+ [
+ -3319,
+ -3747
+ ],
+ [
+ -3312,
+ -3726
+ ],
+ [
+ -3305,
+ -3705
+ ],
+ [
+ -3298,
+ -3684
+ ],
+ [
+ -3291,
+ -3663
+ ],
+ [
+ -3284,
+ -3642
+ ],
+ [
+ -3277,
+ -3621
+ ],
+ [
+ -3270,
+ -3600
+ ],
+ [
+ -3263,
+ -3579
+ ],
+ [
+ -3256,
+ -3558
+ ],
+ [
+ -3249,
+ -3537
+ ],
+ [
+ -3242,
+ -3516
+ ],
+ [
+ -3235,
+ -3495
+ ],
+ [
+ -3228,
+ -3474
+ ],
+ [
+ -3221,
+ -3453
+ ],
+ [
+ -3214,
+ -3432
+ ],
+ [
+ -3207,
+ -3411
+ ],
+ [
+ -3200,
+ -3390
+ ],
+ [
+ -3193,
+ -3369
+ ],
+ [
+ -3186,
+ -3348
+ ],
+ [
+ -3179,
+ -3327
+ ],
+ [
+ -3172,
+ -3306
+ ],
+ [
+ -3165,
+ -3285
+ ],
+ [
+ -3158,
+ -3264
+ ],
+ [
+ -3151,
+ -3243
+ ],
+ [
+ -3144,
+ -3222
+ ],
+ [
+ -3137,
+ -3201
+ ],
+ [
+ -3130,
+ -3180
+ ],
+ [
+ -3123,
+ -3159
+ ],
+ [
+ -3116,
+ -3138
+ ],
+ [
+ -3109,
+ -3117
+ ],
+ [
+ -3102,
+ -4087
+ ],
+ [
+ -3095,
+ -4066
+ ],
+ [
+ -3088,
+ -4045
+ ],
+ [
+ -3081,
+ -4024
+ ],
+ [
+ -3074,
+ -4003
+ ],
+ [
+ -3067,
+ -3982
+ ],
+ [
+ -3060,
+ -3961
+ ],
+ [
+ -3053,
+ -3940
+ ],
+ [
+ -3046,
+ -3919
+ ],
+ [
+ -3039,
+ -3898
+ ],
+ [
+ -3032,
+ -3877
+ ],
+ [
+ -3025,
+ -3856
+ ],
+ [
+ -3018,
+ -3835
+ ],
+ [
+ -3011,
+ -3814
+ ],
+ [
+ -3004,
+ -3793
+ ],
+ [
+ -2997,
+ -3772
+ ],
+ [
+ -2990,
+ -3751
+ ],
+ [
+ -2983,
+ -3730
+ ],
+ [
+ -2976,
+ -3709
+ ],
+ [
+ -2969,
+ -3688
+ ],
+ [
+ -2962,
+ -3667
+ ],
+ [
+ -2955,
+ -3646
+ ],
+ [
+ -2948,
+ -3625
+ ],
+ [
+ -2941,
+ -3604
+ ],
+ [
+ -2934,
+ -3583
+ ],
+ [
+ -2927,
+ -3562
+ ],
+ [
+ -2920,
+ -3541
+ ],
+ [
+ -2913,
+ -3520
+ ],
+ [
+ -2906,
+ -3499
+ ],
+ [
+ -2899,
+ -3478
+ ],
+ [
+ -2892,
+ -3457
+ ],
+ [
+ -2885,
+ -3436
+ ],
+ [
+ -2878,
+ -3415
+ ],
+ [
+ -2871,
+ -3394
+ ],
+ [
+ -2864,
+ -3373
+ ],
+ [
+ -2857,
+ -3352
+ ],
+ [
+ -2850,
+ -3331
+ ],
+ [
+ -2843,
+ -3310
+ ],
+ [
+ -2836,
+ -3289
+ ],
+ [
+ -2829,
+ -3268
+ ],
+ [
+ -2822,
+ -3247
+ ],
+ [
+ -2815,
+ -3226
+ ],
+ [
+ -2808,
+ -3205
+ ],
+ [
+ -2801,
+ -3184
+ ],
+ [
+ -2794,
+ -3163
+ ],
+ [
+ -2787,
+ -3142
+ ],
+ [
+ -2780,
+ -3121
+ ],
+ [
+ -2773,
+ -4091
+ ],
+ [
+ -2766,
+ -4070
+ ],
+ [
+ -2759,
+ -4049
+ ],
+ [
+ -2752,
+ -4028
+ ],
+ [
+ -2745,
+ -4007
+ ],
+ [
+ -2738,
+ -3986
+ ],
+ [
+ -2731,
+ -3965
+ ],
+ [
+ -2724,
+ -3944
+ ],
+ [
+ -2717,
+ -3923
+ ],
+ [
+ -2710,
+ -3902
+ ],
+ [
+ -2703,
+ -3881
+ ],
+ [
+ -2696,
+ -3860
+ ],
+ [
+ -2689,
+ -3839
+ ],
+ [
+ -2682,
+ -3818
+ ],
+ [
+ -2675,
+ -3797
+ ],
+ [
+ -2668,
+ -3776
+ ],
+ [
+ -2661,
+ -3755
+ ],
+ [
+ -2654,
+ -3734
+ ],
+ [
+ -2647,
+ -3713
+ ],
+ [
+ -2640,
+ -3692
+ ],
+ [
+ -2633,
+ -3671
+ ],
+ [
+ -2626,
+ -3650
+ ],
+ [
+ -2619,
+ -3629
+ ],
+ [
+ -2612,
+ -3608
+ ],
+ [
+ -2605,
+ -3587
+ ],
+ [
+ -2598,
+ -3566
+ ],
+ [
+ -2591,
+ -3545
+ ],
+ [
+ -2584,
+ -3524
+ ],
+ [
+ -2577,
+ -3503
+ ],
+ [
+ -2570,
+ -3482
+ ],
+ [
+ -2563,
+ -3461
+ ],
+ [
+ -2556,
+ -3440
+ ],
+ [
+ -2549,
+ -3419
+ ],
+ [
+ -2542,
+ -3398
+ ],
+ [
+ -2535,
+ -3377
+ ],
+ [
+ -2528,
+ -3356
+ ],
+ [
+ -2521,
+ -3335
+ ],
+ [
+ -2514,
+ -3314
+ ],
+ [
+ -2507,
+ -3293
+ ],
+ [
+ -2500,
+ -3272
+ ],
+ [
+ -2493,
+ -3251
+ ],
+ [
+ -2486,
+ -3230
+ ],
+ [
+ -2479,
+ -3209
+ ],
+ [
+ -2472,
+ -3188
+ ],
+ [
+ -2465,
+ -3167
+ ],
+ [
+ -2458,
+ -3146
+ ],
+ [
+ -2451,
+ -3125
+ ],
+ [
+ -2444,
+ -4095
+ ],
+ [
+ -2437,
+ -4074
+ ],
+ [
+ -2430,
+ -4053
+ ],
+ [
+ -2423,
+ -4032
+ ],
+ [
+ -2416,
+ -4011
+ ],
+ [
+ -2409,
+ -3990
+ ],
+ [
+ -2402,
+ -3969
+ ],
+ [
+ -2395,
+ -3948
+ ],
+ [
+ -2388,
+ -3927
+ ],
+ [
+ -2381,
+ -3906
+ ],
+ [
+ -2374,
+ -3885
+ ],
+ [
+ -2367,
+ -3864
+ ],
+ [
+ -2360,
+ -3843
+ ],
+ [
+ -2353,
+ -3822
+ ],
+ [
+ -2346,
+ -3801
+ ],
+ [
+ -2339,
+ -3780
+ ],
+ [
+ -2332,
+ -3759
+ ],
+ [
+ -2325,
+ -3738
+ ],
+ [
+ -2318,
+ -3717
+ ],
+ [
+ -2311,
+ -3696
+ ],
+ [
+ -2304,
+ -3675
+ ],
+ [
+ -2297,
+ -3654
+ ],
+ [
+ -2290,
+ -3633
+ ],
+ [
+ -2283,
+ -3612
+ ],
+ [
+ -2276,
+ -3591
+ ],
+ [
+ -2269,
+ -3570
+ ],
+ [
+ -2262,
+ -3549
+ ],
+ [
+ -2255,
+ -3528
+ ],
+ [
+ -2248,
+ -3507
+ ],
+ [
+ -2241,
+ -3486
+ ],
+ [
+ -2234,
+ -3465
+ ],
+ [
+ -2227,
+ -3444
+ ],
+ [
+ -2220,
+ -3423
+ ],
+ [
+ -2213,
+ -3402
+ ],
+ [
+ -2206,
+ -3381
+ ],
+ [
+ -2199,
+ -3360
+ ],
+ [
+ -2192,
+ -3339
+ ],
+ [
+ -2185,
+ -3318
+ ],
+ [
+ -2178,
+ -3297
+ ],
+ [
+ -2171,
+ -3276
+ ],
+ [
+ -2164,
+ -3255
+ ],
+ [
+ -2157,
+ -3234
+ ],
+ [
+ -2150,
+ -3213
+ ],
+ [
+ -2143,
+ -3192
+ ],
+ [
+ -2136,
+ -3171
+ ],
+ [
+ -2129,
+ -3150
+ ],
+ [
+ -2122,
+ -3129
+ ],
+ [
+ -2115,
+ -3108
+ ],
+ [
+ -2108,
+ -4078
+ ],
+ [
+ -2101,
+ -4057
+ ],
+ [
+ -2094,
+ -4036
+ ],
+ [
+ -2087,
+ -4015
+ ],
+ [
+ -2080,
+ -3994
+ ],
+ [
+ -2073,
+ -3973
+ ],
+ [
+ -2066,
+ -3952
+ ],
+ [
+ -2059,
+ -3931
+ ],
+ [
+ -2052,
+ -3910
+ ],
+ [
+ -2045,
+ -3889
+ ],
+ [
+ -2038,
+ -3868
+ ],
+ [
+ -2031,
+ -3847
+ ],
+ [
+ -2024,
+ -3826
+ ],
+ [
+ -2017,
+ -3805
+ ],
+ [
+ -2010,
+ -3784
+ ],
+ [
+ -2003,
+ -3763
+ ],
+ [
+ -1996,
+ -3742
+ ],
+ [
+ -1989,
+ -3721
+ ],
+ [
+ -1982,
+ -3700
+ ],
+ [
+ -1975,
+ -3679
+ ],
+ [
+ -1968,
+ -3658
+ ],
+ [
+ -1961,
+ -3637
+ ],
+ [
+ -1954,
+ -3616
+ ],
+ [
+ -1947,
+ -3595
+ ],
+ [
+ -1940,
+ -3574
+ ],
+ [
+ -1933,
+ -3553
+ ],
+ [
+ -1926,
+ -3532
+ ],
+ [
+ -1919,
+ -3511
+ ],
+ [
+ -1912,
+ -3490
+ ],
+ [
+ -1905,
+ -3469
+ ],
+ [
+ -1898,
+ -3448
+ ],
+ [
+ -1891,
+ -3427
+ ],
+ [
+ -1884,
+ -3406
+ ],
+ [
+ -1877,
+ -3385
+ ],
+ [
+ -1870,
+ -3364
+ ],
+ [
+ -1863,
+ -3343
+ ],
+ [
+ -1856,
+ -3322
+ ],
+ [
+ -1849,
+ -3301
+ ],
+ [
+ -1842,
+ -3280
+ ],
+ [
+ -1835,
+ -3259
+ ],
+ [
+ -1828,
+ -3238
+ ],
+ [
+ -1821,
+ -3217
+ ],
+ [
+ -1814,
+ -3196
+ ],
+ [
+ -1807,
+ -3175
+ ],
+ [
+ -1800,
+ -3154
+ ],
+ [
+ -1793,
+ -3133
+ ],
+ [
+ -1786,
+ -3112
+ ],
+ [
+ -1779,
+ -4082
+ ],
+ [
+ -1772,
+ -4061
+ ],
+ [
+ -1765,
+ -4040
+ ],
+ [
+ -1758,
+ -4019
+ ],
+ [
+ -1751,
+ -3998
+ ],
+ [
+ -1744,
+ -3977
+ ],
+ [
+ -1737,
+ -3956
+ ],
+ [
+ -1730,
+ -3935
+ ],
+ [
+ -1723,
+ -3914
+ ],
+ [
+ -1716,
+ -3893
+ ],
+ [
+ -1709,
+ -3872
+ ],
+ [
+ -1702,
+ -3851
+ ],
+ [
+ -1695,
+ -3830
+ ],
+ [
+ -1688,
+ -3809
+ ],
+ [
+ -1681,
+ -3788
+ ],
+ [
+ -1674,
+ -3767
+ ],
+ [
+ -1667,
+ -3746
+ ],
+ [
+ -1660,
+ -3725
+ ],
+ [
+ -1653,
+ -3704
+ ],
+ [
+ -1646,
+ -3683
+ ],
+ [
+ -1639,
+ -3662
+ ],
+ [
+ -1632,
+ -3641
+ ],
+ [
+ -1625,
+ -3620
+ ],
+ [
+ -1618,
+ -3599
+ ],
+ [
+ -1611,
+ -3578
+ ],
+ [
+ -1604,
+ -3557
+ ],
+ [
+ -1597,
+ -3536
+ ],
+ [
+ -1590,
+ -3515
+ ],
+ [
+ -1583,
+ -3494
+ ],
+ [
+ -1576,
+ -3473
+ ],
+ [
+ -1569,
+ -3452
+ ],
+ [
+ -1562,
+ -3431
+ ],
+ [
+ -1555,
+ -3410
+ ],
+ [
+ -1548,
+ -3389
+ ],
+ [
+ -1541,
+ -3368
+ ],
+ [
+ -1534,
+ -3347
+ ],
+ [
+ -1527,
+ -3326
+ ],
+ [
+ -1520,
+ -3305
+ ],
+ [
+ -1513,
+ -3284
+ ],
+ [
+ -1506,
+ -3263
+ ],
+ [
+ -1499,
+ -3242
+ ],
+ [
+ -1492,
+ -3221
+ ],
+ [
+ -1485,
+ -3200
+ ],
+ [
+ -1478,
+ -3179
+ ],
+ [
+ -1471,
+ -3158
+ ],
+ [
+ -1464,
+ -3137
+ ],
+ [
+ -1457,
+ -3116
+ ],
+ [
+ -1450,
+ -4086
+ ],
+ [
+ -1443,
+ -4065
+ ],
+ [
+ -1436,
+ -4044
+ ],
+ [
+ -1429,
+ -4023
+ ],
+ [
+ -1422,
+ -4002
+ ],
+ [
+ -1415,
+ -3981
+ ],
+ [
+ -1408,
+ -3960
+ ],
+ [
+ -1401,
+ -3939
+ ],
+ [
+ -1394,
+ -3918
+ ],
+ [
+ -1387,
+ -3897
+ ],
+ [
+ -1380,
+ -3876
+ ],
+ [
+ -1373,
+ -3855
+ ],
+ [
+ -1366,
+ -3834
+ ],
+ [
+ -1359,
+ -3813
+ ],
+ [
+ -1352,
+ -3792
+ ],
+ [
+ -1345,
+ -3771
+ ],
+ [
+ -1338,
+ -3750
+ ],
+ [
+ -1331,
+ -3729
+ ],
+ [
+ -1324,
+ -3708
+ ],
+ [
+ -1317,
+ -3687
+ ],
+ [
+ -1310,
+ -3666
+ ],
+ [
+ -1303,
+ -3645
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 35,
+ 77
+ ],
+ [
+ 70,
+ 154
+ ],
+ [
+ 105,
+ 231
+ ],
+ [
+ 140,
+ 308
+ ],
+ [
+ 175,
+ 385
+ ],
+ [
+ 210,
+ 462
+ ],
+ [
+ 245,
+ 539
+ ],
+ [
+ 280,
+ 616
+ ],
+ [
+ 315,
+ 693
+ ],
+ [
+ 350,
+ 770
+ ],
+ [
+ 385,
+ 847
+ ],
+ [
+ 420,
+ 924
+ ],
+ [
+ 455,
+ 1001
+ ],
+ [
+ 490,
+ 1078
+ ],
+ [
+ 525,
+ 1155
+ ],
+ [
+ 560,
+ 1232
+ ],
+ [
+ 595,
+ 1309
+ ],
+ [
+ 630,
+ 1386
+ ],
+ [
+ 665,
+ 1463
+ ],
+ [
+ 700,
+ 1540
+ ],
+ [
+ 735,
+ 1617
+ ],
+ [
+ 770,
+ 1694
+ ],
+ [
+ 805,
+ 1771
+ ],
+ [
+ 840,
+ 1848
+ ],
+ [
+ 875,
+ 1925
+ ],
+ [
+ 910,
+ 2002
+ ],
+ [
+ 945,
+ 2079
+ ],
+ [
+ 980,
+ 2156
+ ],
+ [
+ 1015,
+ 2233
+ ],
+ [
+ 1050,
+ 2310
+ ],
+ [
+ 1085,
+ 2387
+ ],
+ [
+ 1120,
+ 2464
+ ],
+ [
+ 1155,
+ 2541
+ ],
+ [
+ 1190,
+ 2618
+ ],
+ [
+ 1225,
+ 2695
+ ],
+ [
+ 1260,
+ 2772
+ ],
+ [
+ 1295,
+ 2849
+ ],
+ [
+ 1330,
+ 2926
+ ],
+ [
+ 1365,
+ 3003
+ ],
+ [
+ 1400,
+ 3080
+ ],
+ [
+ 1435,
+ 3157
+ ],
+ [
+ 1470,
+ 3234
+ ],
+ [
+ 1505,
+ 3311
+ ],
+ [
+ 1540,
+ 3388
+ ],
+ [
+ 1575,
+ 3465
+ ],
+ [
+ 1610,
+ 3542
+ ],
+ [
+ 1645,
+ 3619
+ ],
+ [
+ 1680,
+ 3696
+ ],
+ [
+ 1715,
+ 3773
+ ],
+ [
+ 1750,
+ 3850
+ ],
+ [
+ 1785,
+ 3927
+ ],
+ [
+ 1820,
+ 4004
+ ],
+ [
+ 1855,
+ 4081
+ ],
+ [
+ 1890,
+ 62
+ ],
+ [
+ 1925,
+ 139
+ ],
+ [
+ 1960,
+ 216
+ ],
+ [
+ 1995,
+ 293
+ ],
+ [
+ 2030,
+ 370
+ ],
+ [
+ 2065,
+ 447
+ ],
+ [
+ 2100,
+ 524
+ ],
+ [
+ 2135,
+ 601
+ ],
+ [
+ 2170,
+ 678
+ ],
+ [
+ 2205,
+ 755
+ ],
+ [
+ 2240,
+ 832
+ ],
+ [
+ 2275,
+ 909
+ ],
+ [
+ 2310,
+ 986
+ ],
+ [
+ 2345,
+ 1063
+ ],
+ [
+ 2380,
+ 1140
+ ],
+ [
+ 2415,
+ 1217
+ ],
+ [
+ 2450,
+ 1294
+ ],
+ [
+ 2485,
+ 1371
+ ],
+ [
+ 2520,
+ 1448
+ ],
+ [
+ 2555,
+ 1525
+ ],
+ [
+ 2590,
+ 1602
+ ],
+ [
+ 2625,
+ 1679
+ ],
+ [
+ 2660,
+ 1756
+ ],
+ [
+ 2695,
+ 1833
+ ],
+ [
+ 2730,
+ 1910
+ ],
+ [
+ 2765,
+ 1987
+ ],
+ [
+ 2800,
+ 2064
+ ],
+ [
+ 2835,
+ 2141
+ ],
+ [
+ 2870,
+ 2218
+ ],
+ [
+ 2905,
+ 2295
+ ],
+ [
+ 2940,
+ 2372
+ ],
+ [
+ 2975,
+ 2449
+ ],
+ [
+ 3010,
+ 2526
+ ],
+ [
+ 3045,
+ 2603
+ ],
+ [
+ 3080,
+ 2680
+ ],
+ [
+ 3115,
+ 2757
+ ],
+ [
+ 3150,
+ 2834
+ ],
+ [
+ 3185,
+ 2911
+ ],
+ [
+ 3220,
+ 2988
+ ],
+ [
+ 3255,
+ 3065
+ ],
+ [
+ 3290,
+ 3142
+ ],
+ [
+ 3325,
+ 3219
+ ],
+ [
+ 3360,
+ 3296
+ ],
+ [
+ 3395,
+ 3373
+ ],
+ [
+ 3430,
+ 3450
+ ],
+ [
+ 3465,
+ 3527
+ ],
+ [
+ 3500,
+ 3604
+ ],
+ [
+ 3535,
+ 3681
+ ],
+ [
+ 3570,
+ 3758
+ ],
+ [
+ 3605,
+ 3835
+ ],
+ [
+ 3640,
+ 3912
+ ],
+ [
+ 3675,
+ 3989
+ ],
+ [
+ 3710,
+ 4066
+ ],
+ [
+ 3745,
+ 47
+ ],
+ [
+ 3780,
+ 124
+ ],
+ [
+ 3815,
+ 201
+ ],
+ [
+ 3850,
+ 278
+ ],
+ [
+ 3885,
+ 355
+ ],
+ [
+ 3920,
+ 432
+ ],
+ [
+ 3955,
+ 509
+ ],
+ [
+ 3990,
+ 586
+ ],
+ [
+ 4025,
+ 663
+ ],
+ [
+ 4060,
+ 740
+ ],
+ [
+ 4095,
+ 817
+ ],
+ [
+ 34,
+ 894
+ ],
+ [
+ 69,
+ 971
+ ],
+ [
+ 104,
+ 1048
+ ],
+ [
+ 139,
+ 1125
+ ],
+ [
+ 174,
+ 1202
+ ],
+ [
+ 209,
+ 1279
+ ],
+ [
+ 244,
+ 1356
+ ],
+ [
+ 279,
+ 1433
+ ],
+ [
+ 314,
+ 1510
+ ],
+ [
+ 349,
+ 1587
+ ],
+ [
+ 384,
+ 1664
+ ],
+ [
+ 419,
+ 1741
+ ],
+ [
+ 454,
+ 1818
+ ],
+ [
+ 489,
+ 1895
+ ],
+ [
+ 524,
+ 1972
+ ],
+ [
+ 559,
+ 2049
+ ],
+ [
+ 594,
+ 2126
+ ],
+ [
+ 629,
+ 2203
+ ],
+ [
+ 664,
+ 2280
+ ],
+ [
+ 699,
+ 2357
+ ],
+ [
+ 734,
+ 2434
+ ],
+ [
+ 769,
+ 2511
+ ],
+ [
+ 804,
+ 2588
+ ],
+ [
+ 839,
+ 2665
+ ],
+ [
+ 874,
+ 2742
+ ],
+ [
+ 909,
+ 2819
+ ],
+ [
+ 944,
+ 2896
+ ],
+ [
+ 979,
+ 2973
+ ],
+ [
+ 1014,
+ 3050
+ ],
+ [
+ 1049,
+ 3127
+ ],
+ [
+ 1084,
+ 3204
+ ],
+ [
+ 1119,
+ 3281
+ ],
+ [
+ 1154,
+ 3358
+ ],
+ [
+ 1189,
+ 3435
+ ],
+ [
+ 1224,
+ 3512
+ ],
+ [
+ 1259,
+ 3589
+ ],
+ [
+ 1294,
+ 3666
+ ],
+ [
+ 1329,
+ 3743
+ ],
+ [
+ 1364,
+ 3820
+ ],
+ [
+ 1399,
+ 3897
+ ],
+ [
+ 1434,
+ 3974
+ ],
+ [
+ 1469,
+ 4051
+ ],
+ [
+ 1504,
+ 32
+ ],
+ [
+ 1539,
+ 109
+ ],
+ [
+ 1574,
+ 186
+ ],
+ [
+ 1609,
+ 263
+ ],
+ [
+ 1644,
+ 340
+ ],
+ [
+ 1679,
+ 417
+ ],
+ [
+ 1714,
+ 494
+ ],
+ [
+ 1749,
+ 571
+ ],
+ [
+ 1784,
+ 648
+ ],
+ [
+ 1819,
+ 725
+ ],
+ [
+ 1854,
+ 802
+ ],
+ [
+ 1889,
+ 879
+ ],
+ [
+ 1924,
+ 956
+ ],
+ [
+ 1959,
+ 1033
+ ],
+ [
+ 1994,
+ 1110
+ ],
+ [
+ 2029,
+ 1187
+ ],
+ [
+ 2064,
+ 1264
+ ],
+ [
+ 2099,
+ 1341
+ ],
+ [
+ 2134,
+ 1418
+ ],
+ [
+ 2169,
+ 1495
+ ],
+ [
+ 2204,
+ 1572
+ ],
+ [
+ 2239,
+ 1649
+ ],
+ [
+ 2274,
+ 1726
+ ],
+ [
+ 2309,
+ 1803
+ ],
+ [
+ 2344,
+ 1880
+ ],
+ [
+ 2379,
+ 1957
+ ],
+ [
+ 2414,
+ 2034
+ ],
+ [
+ 2449,
+ 2111
+ ],
+ [
+ 2484,
+ 2188
+ ],
+ [
+ 2519,
+ 2265
+ ],
+ [
+ 2554,
+ 2342
+ ],
+ [
+ 2589,
+ 2419
+ ],
+ [
+ 2624,
+ 2496
+ ],
+ [
+ 2659,
+ 2573
+ ],
+ [
+ 2694,
+ 2650
+ ],
+ [
+ 2729,
+ 2727
+ ],
+ [
+ 2764,
+ 2804
+ ],
+ [
+ 2799,
+ 2881
+ ],
+ [
+ 2834,
+ 2958
+ ],
+ [
+ 2869,
+ 3035
+ ],
+ [
+ 2904,
+ 3112
+ ],
+ [
+ 2939,
+ 3189
+ ],
+ [
+ 2974,
+ 3266
+ ],
+ [
+ 3009,
+ 3343
+ ],
+ [
+ 3044,
+ 3420
+ ],
+ [
+ 3079,
+ 3497
+ ],
+ [
+ 3114,
+ 3574
+ ],
+ [
+ 3149,
+ 3651
+ ],
+ [
+ 3184,
+ 3728
+ ],
+ [
+ 3219,
+ 3805
+ ],
+ [
+ 3254,
+ 3882
+ ],
+ [
+ 3289,
+ 3959
+ ],
+ [
+ 3324,
+ 4036
+ ],
+ [
+ 3359,
+ 17
+ ],
+ [
+ 3394,
+ 94
+ ],
+ [
+ 3429,
+ 171
+ ],
+ [
+ 3464,
+ 248
+ ],
+ [
+ 3499,
+ 325
+ ],
+ [
+ 3534,
+ 402
+ ],
+ [
+ 3569,
+ 479
+ ],
+ [
+ 3604,
+ 556
+ ],
+ [
+ 3639,
+ 633
+ ],
+ [
+ 3674,
+ 710
+ ],
+ [
+ 3709,
+ 787
+ ],
+ [
+ 3744,
+ 864
+ ],
+ [
+ 3779,
+ 941
+ ],
+ [
+ 3814,
+ 1018
+ ],
+ [
+ 3849,
+ 1095
+ ],
+ [
+ 3884,
+ 1172
+ ],
+ [
+ 3919,
+ 1249
+ ],
+ [
+ 3954,
+ 1326
+ ],
+ [
+ 3989,
+ 1403
+ ],
+ [
+ 4024,
+ 1480
+ ],
+ [
+ 4059,
+ 1557
+ ],
+ [
+ 4094,
+ 1634
+ ],
+ [
+ 33,
+ 1711
+ ],
+ [
+ 68,
+ 1788
+ ],
+ [
+ 103,
+ 1865
+ ],
+ [
+ 138,
+ 1942
+ ],
+ [
+ 173,
+ 2019
+ ],
+ [
+ 208,
+ 2096
+ ],
+ [
+ 243,
+ 2173
+ ],
+ [
+ 278,
+ 2250
+ ],
+ [
+ 313,
+ 2327
+ ],
+ [
+ 348,
+ 2404
+ ],
+ [
+ 383,
+ 2481
+ ],
+ [
+ 418,
+ 2558
+ ],
+ [
+ 453,
+ 2635
+ ],
+ [
+ 488,
+ 2712
+ ],
+ [
+ 523,
+ 2789
+ ],
+ [
+ 558,
+ 2866
+ ],
+ [
+ 593,
+ 2943
+ ],
+ [
+ 628,
+ 3020
+ ],
+ [
+ 663,
+ 3097
+ ],
+ [
+ 698,
+ 3174
+ ],
+ [
+ 733,
+ 3251
+ ],
+ [
+ 768,
+ 3328
+ ],
+ [
+ 803,
+ 3405
+ ],
+ [
+ 838,
+ 3482
+ ],
+ [
+ 873,
+ 3559
+ ],
+ [
+ 908,
+ 3636
+ ],
+ [
+ 943,
+ 3713
+ ],
+ [
+ 978,
+ 3790
+ ],
+ [
+ 1013,
+ 3867
+ ],
+ [
+ 1048,
+ 3944
+ ],
+ [
+ 1083,
+ 4021
+ ],
+ [
+ 1118,
+ 2
+ ],
+ [
+ 1153,
+ 79
+ ],
+ [
+ 1188,
+ 156
+ ],
+ [
+ 1223,
+ 233
+ ],
+ [
+ 1258,
+ 310
+ ],
+ [
+ 1293,
+ 387
+ ],
+ [
+ 1328,
+ 464
+ ],
+ [
+ 1363,
+ 541
+ ],
+ [
+ 1398,
+ 618
+ ],
+ [
+ 1433,
+ 695
+ ],
+ [
+ 1468,
+ 772
+ ],
+ [
+ 1503,
+ 849
+ ],
+ [
+ 1538,
+ 926
+ ],
+ [
+ 1573,
+ 1003
+ ],
+ [
+ 1608,
+ 1080
+ ],
+ [
+ 1643,
+ 1157
+ ],
+ [
+ 1678,
+ 1234
+ ],
+ [
+ 1713,
+ 1311
+ ],
+ [
+ 1748,
+ 1388
+ ],
+ [
+ 1783,
+ 1465
+ ],
+ [
+ 1818,
+ 1542
+ ],
+ [
+ 1853,
+ 1619
+ ],
+ [
+ 1888,
+ 1696
+ ],
+ [
+ 1923,
+ 1773
+ ],
+ [
+ 1958,
+ 1850
+ ],
+ [
+ 1993,
+ 1927
+ ],
+ [
+ 2028,
+ 2004
+ ],
+ [
+ 2063,
+ 2081
+ ],
+ [
+ 2098,
+ 2158
+ ],
+ [
+ 2133,
+ 2235
+ ],
+ [
+ 2168,
+ 2312
+ ],
+ [
+ 2203,
+ 2389
+ ],
+ [
+ 2238,
+ 2466
+ ],
+ [
+ 2273,
+ 2543
+ ],
+ [
+ 2308,
+ 2620
+ ],
+ [
+ 2343,
+ 2697
+ ],
+ [
+ 2378,
+ 2774
+ ],
+ [
+ 2413,
+ 2851
+ ],
+ [
+ 2448,
+ 2928
+ ],
+ [
+ 2483,
+ 3005
+ ],
+ [
+ 2518,
+ 3082
+ ],
+ [
+ 2553,
+ 3159
+ ],
+ [
+ 2588,
+ 3236
+ ],
+ [
+ 2623,
+ 3313
+ ],
+ [
+ 2658,
+ 3390
+ ],
+ [
+ 2693,
+ 3467
+ ],
+ [
+ 2728,
+ 3544
+ ],
+ [
+ 2763,
+ 3621
+ ],
+ [
+ 2798,
+ 3698
+ ],
+ [
+ 2833,
+ 3775
+ ],
+ [
+ 2868,
+ 3852
+ ],
+ [
+ 2903,
+ 3929
+ ],
+ [
+ 2938,
+ 4006
+ ],
+ [
+ 2973,
+ 4083
+ ],
+ [
+ 3008,
+ 64
+ ],
+ [
+ 3043,
+ 141
+ ],
+ [
+ 3078,
+ 218
+ ],
+ [
+ 3113,
+ 295
+ ],
+ [
+ 3148,
+ 372
+ ],
+ [
+ 3183,
+ 449
+ ],
+ [
+ 3218,
+ 526
+ ],
+ [
+ 3253,
+ 603
+ ],
+ [
+ 3288,
+ 680
+ ],
+ [
+ 3323,
+ 757
+ ],
+ [
+ 3358,
+ 834
+ ],
+ [
+ 3393,
+ 911
+ ],
+ [
+ 3428,
+ 988
+ ],
+ [
+ 3463,
+ 1065
+ ],
+ [
+ 3498,
+ 1142
+ ],
+ [
+ 3533,
+ 1219
+ ],
+ [
+ 3568,
+ 1296
+ ],
+ [
+ 3603,
+ 1373
+ ],
+ [
+ 3638,
+ 1450
+ ],
+ [
+ 3673,
+ 1527
+ ],
+ [
+ 3708,
+ 1604
+ ],
+ [
+ 3743,
+ 1681
+ ],
+ [
+ 3778,
+ 1758
+ ],
+ [
+ 3813,
+ 1835
+ ],
+ [
+ 3848,
+ 1912
+ ],
+ [
+ 3883,
+ 1989
+ ],
+ [
+ 3918,
+ 2066
+ ],
+ [
+ 3953,
+ 2143
+ ],
+ [
+ 3988,
+ 2220
+ ],
+ [
+ 4023,
+ 2297
+ ],
+ [
+ 4058,
+ 2374
+ ],
+ [
+ 4093,
+ 2451
+ ],
+ [
+ 32,
+ 2528
+ ],
+ [
+ 67,
+ 2605
+ ],
+ [
+ 102,
+ 2682
+ ],
+ [
+ 137,
+ 2759
+ ],
+ [
+ 172,
+ 2836
+ ],
+ [
+ 207,
+ 2913
+ ],
+ [
+ 242,
+ 2990
+ ],
+ [
+ 277,
+ 3067
+ ],
+ [
+ 312,
+ 3144
+ ],
+ [
+ 347,
+ 3221
+ ],
+ [
+ 382,
+ 3298
+ ],
+ [
+ 417,
+ 3375
+ ],
+ [
+ 452,
+ 3452
+ ],
+ [
+ 487,
+ 3529
+ ],
+ [
+ 522,
+ 3606
+ ],
+ [
+ 557,
+ 3683
+ ],
+ [
+ 592,
+ 3760
+ ],
+ [
+ 627,
+ 3837
+ ],
+ [
+ 662,
+ 3914
+ ],
+ [
+ 697,
+ 3991
+ ],
+ [
+ 732,
+ 4068
+ ],
+ [
+ 767,
+ 49
+ ],
+ [
+ 802,
+ 126
+ ],
+ [
+ 837,
+ 203
+ ],
+ [
+ 872,
+ 280
+ ],
+ [
+ 907,
+ 357
+ ],
+ [
+ 942,
+ 434
+ ],
+ [
+ 977,
+ 511
+ ],
+ [
+ 1012,
+ 588
+ ],
+ [
+ 1047,
+ 665
+ ],
+ [
+ 1082,
+ 742
+ ],
+ [
+ 1117,
+ 819
+ ],
+ [
+ 1152,
+ 896
+ ],
+ [
+ 1187,
+ 973
+ ],
+ [
+ 1222,
+ 1050
+ ],
+ [
+ 1257,
+ 1127
+ ],
+ [
+ 1292,
+ 1204
+ ],
+ [
+ 1327,
+ 1281
+ ],
+ [
+ 1362,
+ 1358
+ ],
+ [
+ 1397,
+ 1435
+ ],
+ [
+ 1432,
+ 1512
+ ],
+ [
+ 1467,
+ 1589
+ ],
+ [
+ 1502,
+ 1666
+ ],
+ [
+ 1537,
+ 1743
+ ],
+ [
+ 1572,
+ 1820
+ ],
+ [
+ 1607,
+ 1897
+ ],
+ [
+ 1642,
+ 1974
+ ],
+ [
+ 1677,
+ 2051
+ ]
+ ],
+ "cases": [
+ {
+ "name": "checker-2x2-s0",
+ "patternData": "AAAABg",
+ "width": 2,
+ "height": 2,
+ "scale": 0,
+ "expect": "101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "stripes_v-3x5-s0",
+ "patternData": "AAgMkiQ",
+ "width": 3,
+ "height": 5,
+ "scale": 0,
+ "expect": "101101101101101101110110110110110110111011011011011011011101101101101101101110110110110110110111011011011011011011101101101101101101110110110110110110111011011011011011011101101101101101101110110110110110110111011011011011011011101101101101101101110110110110110110111011011011011011011101101101101101101110110110110110110111011011011011011011101101101101101101111011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110101101101101101101101101101101101101101101101101"
+ },
+ {
+ "name": "stripes_h-8x8-s0",
+ "patternData": "ADAYAP8A_wD_AP8",
+ "width": 8,
+ "height": 8,
+ "scale": 0,
+ "expect": "000000000000000000011111111111111111110000000000000000000111111111111111111100000000000000000001111111111111111111000000000000000000011111111111111111110000000000000000000111111111111111111100000000000000000001111111111111111111000000000000000000011111111111111111110000000000000000000111111111111111111100000000000000000001111111111111111111000000000000000000010101010101010101010101010101010101010101010101001010101010101010101010101010101010101010101010010101010101010101010101010101010101010101010100101010101010101010101010101010101010101010101001010101010101010101010101010101010101010101010010101010101010101010101010101010101010101010101101010101010101010101010101010101010101010101011010101010101010101010101010101010101010101010110101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010"
+ },
+ {
+ "name": "diagonal-17x9-s0",
+ "patternData": "AHgcMzPNzDAzy8w8M9PMDDOzzMwzMwE",
+ "width": 17,
+ "height": 9,
+ "scale": 0,
+ "expect": "001100110001100110010011001110011001101100110011100110011011001100011001100100110011000110011001001100111001100110110011001110011001101100110001100110010011001100011001100001100110001100110010011001110011001101100110011100110011011001100011001100100110011000110011001001100111001100110110011001110011001101100110001100110010011001100011001100001100110001100110001101001000000000000000000010110111111111111111111111111111111101101001000000000000000000010010000000010010110111111111111111111101001000000000100000000000000000001011011111111111111111110111111111110110100100000000000000000001001011111001001011011111111111111111110100100000000000000000000000000000101101111111111111111111011010011111011010010000000000000000000100101111111111101101111111111111111110000111100011110000011110001111000001111000011100000011000111100011111100011110000111110000111000011101000011000111100001110000111000010111000011110001111110001100001110100001110000111100000111100011110000011110001100001011100001111000111100011110000111110000111000011000001111000111100000111100001110000001110000111000011110001111000011111000011100001100000111100011110000111000011100001011100001111"
+ },
+ {
+ "name": "one-bit-33x16-s0",
+ "patternData": "APg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA",
+ "width": 33,
+ "height": 16,
+ "scale": 0,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "all-but-one-129x65-s0",
+ "patternData": "APj__v___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________wE",
+ "width": 129,
+ "height": 65,
+ "scale": 0,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "name": "stripes_v-2x2-s1",
+ "patternData": "AAEACg",
+ "width": 2,
+ "height": 2,
+ "scale": 1,
+ "expect": "011001100110011001101100110011001100110110011001100110011011001100110011001101100110011001100110110011001100110011011001100110011001101100110011001100110110011001100110011011001100110011001101100110011001100110110011001100110011011001100110011001101100110011001100110110011001100110011011001100110011001101100110011001100110110011001100110011011001100110011001110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001"
+ },
+ {
+ "name": "stripes_h-3x5-s1",
+ "patternData": "AAkMOA4",
+ "width": 3,
+ "height": 5,
+ "scale": 1,
+ "expect": "111111111111111111100000000000000000000000000000000000000111111111111111111111111111111111111110000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000011111111111111111111111111111111111111000000000000000000000000000000000000001111111111111111111111111111111111111111001111001100111100110011110011001111001100111110011001111001100111100110011110011001111001100011110011001111001100111100110011110011001111000110011110011001111001100111100110011110011001111100110011110011001111001100111100110011110011100111100110011110011001111001100111100110011110001100111100110011110011001111001100111100110011111001100111100110011110011001111001100111100111001111001100111100111011110100101111010010111101001011110100101111010010110100101111010010111101001011110100101111010010111101001111010010111101001011110100101111010010111101001011010010111101001011110100101111010010111101001011110100111101001011110100101111010010111101001011110100101101001011110100101111010010111101001011110100101111010011110100101111010010111101001011110100101111010010111100101111010010111101001011"
+ },
+ {
+ "name": "diagonal-8x8-s1",
+ "patternData": "ADEYM2bMmTNmzJk",
+ "width": 8,
+ "height": 8,
+ "scale": 1,
+ "expect": "000111100001111000010000111100001111001000011110000111100111000011110000111111100001111000011110111100001111000011011110000111100001100011110000111100000001111000011110000100001111000011110010000111100001111001110000111100001111111000011110000111101111000011110000110111100001111000011000111100001111000000011110000111100001000011110000111100100001111000011110000110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001110011001100110011001100110011001100110011001100011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100011001100110011001100110011001100110011001100111001100110011001100110011001100110011001100110011001100110011001100110110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110"
+ },
+ {
+ "name": "one-bit-17x9-s1",
+ "patternData": "AHkcAAAAAAAAAAAAAAAAAAAAAAAAAAE",
+ "width": 17,
+ "height": 9,
+ "scale": 1,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110011111111111111111001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "all-but-one-33x16-s1",
+ "patternData": "APk4_v______________________________________________________________________________________",
+ "width": 33,
+ "height": 16,
+ "scale": 1,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "name": "checker-129x65-s1",
+ "patternData": "APn_qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgA",
+ "width": 129,
+ "height": 65,
+ "scale": 1,
+ "expect": "100110011110011001101100110000110011000110011000011001100100110011110011001110011001111001100110110011000011001100011001100001100110010011001111001100111001100111100110011100110011110011001110011001111001100110110011000011001100011001100001100110010011001111001100111001100111100110011011001100001100110001100110000110011001001100111100110011100110011110011001110100101011010100101011010100101001101010010101100011111100000011111101111110000001111110000001101101010011010010101001010110101001010110101001001111110000000111111000000111111000011000000010110101011010100101011010101010100101010010101111100000011111100111100000011111110000001111110101101001101010010101101010110101001010110100111110000001111110000000111111000001000000111111010110101001010100101011001100000111000001100000110000011100000110000011100000011011001100100111010001100100111010011101000110010001111100011111001101100110110001111100110110001011000010011001001100000111001001100000110001011100100110001001110000011001001100100111010001101100111010011101010011111001111100011111001111100111110001111100111110000101110010011001101100010111001001100000110000011100000011001001110100011001001"
+ },
+ {
+ "name": "stripes_h-2x2-s2",
+ "patternData": "AAIADA",
+ "width": 2,
+ "height": 2,
+ "scale": 2,
+ "expect": "000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111110100101101001011010010110100101101001011010010110110100101101001011010010110100101101001011010010010110100101101001011010010110100101101001011011010010110100101101001011010010110100101101001001011010010110100101101001011010010110100101101101001011010010110100101101001011010010110100100101101001011010010110100101101001011010010110110100101101001011010010110100101101001011010010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101101001011010010110100101"
+ },
+ {
+ "name": "diagonal-3x5-s2",
+ "patternData": "AAoMMzM",
+ "width": 3,
+ "height": 5,
+ "scale": 2,
+ "expect": "111110000111111110001111111100001111110111111110000111111011111111000011111101111111100001111110000011110000000011000001111000000001100000111100000000110000011110000000011000001111000000001100000111100000000110000011110000000011000001111000000001110000000011110000001000000001111000000100000000111100000010000000011110000001111100001111111100111110000111111110001001110111010100001000101010101010010101010101110101010101010100001010101011111111010100000000010100010001101110101010010001010101010100001011010100001000101011101110010100010001100110001001110110001010001001110111010100001000101010101000101010101010010101010101010100001010101011111010101011101110010100010001101110101010010001011010011001110111010100001000101011101110010100001010010101010101110110110000000111111110000011011111000000001101111000100000000111111110000011011111000000001101111000100000111111111110000100000001111111100000110111110000000011011111001100000001111111100000110111110000000011011110001100000001111111100000000000011111111000001101111100000010000011110011000000011111111000001101111100000000100011110011000000011111111000001000000111111110000011001101111000100000111100110"
+ },
+ {
+ "name": "one-bit-8x8-s2",
+ "patternData": "ADIYAAAAAAAAAIA",
+ "width": 8,
+ "height": 8,
+ "scale": 2,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100001111111111111110000111111111111111000011111111111111100001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111011111111111111111111111111111110111111111111111111111111111111101111111101111111111111111111111011111111011111111111111111111111111111110111111111111111111111111111111101111111111111111111111111111111011111111011111111111111111111110111111110111111111111111111111111111111101111111111111111111111111111111011111111111111111111111111111110111111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "all-but-one-17x9-s2",
+ "patternData": "AHoc_v_______________________wE",
+ "width": 17,
+ "height": 9,
+ "scale": 2,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111100000000000000011110000000000000001111000000000000000111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "name": "checker-33x16-s2",
+ "patternData": "APo4qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq",
+ "width": 33,
+ "height": 16,
+ "scale": 2,
+ "expect": "011110000000011110010000111111110000111000011111111000011100001111111100001110000111111110000110111100000000111100011110000000011110001111000000001111000111100000000111100100001111111100001110000111111110000111000011111111000011100001111111100001101111000000001111000111100000000111100011110000000011110001111000000001111001000011111111000011100001111111100001110100010001000100010110111011101110111000010001000110011000011001100110011000011001100110011001011101110111011101101000100010001000101101110111010101010010101010101010101001010101010101010100111011101110111010010001000100010001111011101110011001111001100110011001101001100110011001100000100010001000100001110111011101110110100010001010101011010101010101010101101010101010101010110001000100010001001011000011110000111100101101001011010110100101101001011000011110000111110000111100001101001011010010110101101001011010011001111000011110000011110000111100101101001011010010100101101001011000011110000111110000111100001111001011010010110101010110100101101001111000011110000011110000111100001101001011010010100101101001011010011110000111100000111100001111001100101101001011010110100101101001011000011110000"
+ },
+ {
+ "name": "stripes_v-129x65-s2",
+ "patternData": "APr_qqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqlRVVVVVVVVVVVVVVVVVVVWpqqqqqqqqqqqqqqqqqqqqUlVVVVVVVVVVVVVVVVVVVaWqqqqqqqqqqqqqqqqqqqpKVVVVVVVVVVVVVVVVVVVVlaqqqqqqqqqqqqqqqqqqqipVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqgA",
+ "width": 129,
+ "height": 65,
+ "scale": 2,
+ "expect": "100001111111100001110000111111110000111000011111111000011100001111111100001110000111111110000111000011111111000011100001111111100001110000111111110000111000011111111000011100001111111100001110000111111110000111000011111111000011100001111111100001110000111111110000111000011111111000011100001111111100001110000111111110000111000011111111000011100001111111100001110000111100001111000011110000111100001111000011110000111100001111000010001111000011110000111100001111000011110000111100001111000011110000111100110000111100001111000011110000111100001111000011110000111100001111000011111111000011110000111100001111000011110000111100001111000011110000111100001100111100001111000011110000111100001111000011110000111100001111000011110001000011110000111100001111000011110001101001011010011001011010010111011010010110101010010110100110010110100101110110100101101010100101101001000101101001011101101001011011101001011010011001011010010111011010010110111010010110100110010110100101110110100101101010100101101001100101101001010101101001011011101001011010011001011010010111011010010110111010010110100110010110100101110110100101101110100101101000100101101001010101101001011011101"
+ },
+ {
+ "name": "diagonal-2x2-s3",
+ "patternData": "AAMACw",
+ "width": 2,
+ "height": 2,
+ "scale": 3,
+ "expect": "000000000000000000010000000011111111001000000001111111100100000000111111110010000000011111111001000000001111111100100000000111111110010000000011111111001000000001111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001111111100100000000111111110000010100000010000001010000001000000101000000100000000100000010000000010000001000000001000000100000000100000010100000010000001010000001000000101001000100000010100100010000001010010001000000101001000100000000100100010000000010010001000000001001000101000000100100010100000010010001010000001001000101001000100100010100100010010001010010001001000001001000100100000100100010010000010010001011000001001000100110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100011000110001110001100011000111000110001100011100"
+ },
+ {
+ "name": "one-bit-3x5-s3",
+ "patternData": "AAsMAEA",
+ "width": 3,
+ "height": 5,
+ "scale": 3,
+ "expect": "111111111111111111110000000011111111111000000001111111111100000000111111111110000000011111111111000000001111111111100000000111111111110000000011111111111000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011101111111111111111011101111111111111111111111111111101111111111111111011101111111111111111111111111111111111111111111111111101111110111011111111111111110111111111111111111111111111111111011111111111111110111011111111111111110111111111111011111111111111111111011111111111111111111111111101111111111111111011111011111111110111111111111111101111111111111111011101111111111110111111111111111101101111111111110111111111111011111111111101111111111111111111110111111111111011111111111101111111111110101111110111111111110111111111111111111111111111111111111011111111110111111111111111111111111111111111111111111111110111111111111111111111111111011111111111101111111101111111111110111111111111011111111111101111111111111111111110111111111111011111111111011111111111111111111101111111111110101111111"
+ },
+ {
+ "name": "all-but-one-8x8-s3",
+ "patternData": "ADMY_v________8",
+ "width": 8,
+ "height": 8,
+ "scale": 3,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111110000000000011111111000000000001111111100000000000111111110000000000011111111000000000001111111100000000000111111110000000000011111111000000000000000000000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000100000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000"
+ },
+ {
+ "name": "checker-17x9-s3",
+ "patternData": "AHscqqqqqqqqqqqqqqqqqqqqqqqqqgA",
+ "width": 17,
+ "height": 9,
+ "scale": 3,
+ "expect": "100000000000000001101111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111001000000000000000011100000000000000001111110010001000000110011100010010001000000101101100010000001100110000001000010000110010110000001000111001100000010001001111001001100000010000110111001001010100111000110111001001011011111000100101001111101001011100000110110111101001011100011010100100100000010011011010100100100111110011011010100111000101111000011010011011000101111000011100011011100100100101111100011011100111010101101100010011111111111101101011011011001001010010001011001011110001000011011100110100001101111110100111101110000101100001100110110010101011011010110001010010010101011010110100101010001001011101101011011011001101000011001111001011110000111100100100010110000101111110100111101110000101100001011001010010101011011010110001010010110111010010010111100101001001011100101111001010001101000011001111001100000010111100100100010110"
+ },
+ {
+ "name": "stripes_v-33x16-s3",
+ "patternData": "APs4qqqqqlRVVVWpqqqqUlVVVaWqqqpKVVVVlaqqqipVVVVVqqqqqlRVVVWpqqqqUlVVVaWqqqpKVVVVlaqqqipVVVVV",
+ "width": 33,
+ "height": 16,
+ "scale": 3,
+ "expect": "011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110001111111111111111000111111111111111100011111111111111110011010101001010101101101011010101001010101101010100101010111010101101010100101010110101010010101100101010110101010010101011010101001011010010101011010101001010101101010100110101001010101101010100101010110101011101010100101010110101010010101011010110110101010010101011010101001010101101101011010101001010101101010100101010111010101101010100101010110101010010101100101010110101010010101011010101001011011110001111100011111000101110001011100000111000001110010011100100111011001110110011111100111111001111110011011100110111110001101100011011000100110001001100000011000000110010001100100011011000110110001111100011111000111110001011100010111111001101110011011100100111001001110000011100000111010001110100011111000111110001111100011011000110110001001100010011111000101110001011100000111000001110010011100100"
+ },
+ {
+ "name": "stripes_h-129x65-s3",
+ "patternData": "APv_AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAP7___________________8DAAAAAAAAAAAAAAAAAAAA-P___________________w8AAAAAAAAAAAAAAAAAAADg____________________PwAAAAAAAAAAAAAAAAAAAID_____________________AAAAAAAAAAAAAAAAAAAAAAA",
+ "width": 129,
+ "height": 65,
+ "scale": 3,
+ "expect": "000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000011001001001101101100101011001001001101101100100011011001001001101101111011011001001001101101101011011011001001001101110011011011001001001101110010011011011001001001010010011011011001001001110010010011011011001000110010010011011011001001110110010010011011011010110110010010011011011000110110110010010011011100110110110010010011011000100110110110010010011100100110110110010010011100100100110110110010011001110110011111100110111001001110100011111000110110000001101100011111000101110000011101100111111001101110000011101000110110001001100000011001000111110001011100100111011001111110010011100000111010001111100010011001000110110001111100010111001001110110011111100110111010001111100011011000100110010001101100011111000101110010011111100110111001001110000011111000110110001001100100011011000101110000011100"
+ },
+ {
+ "name": "one-bit-2x2-s4",
+ "patternData": "AAQACA",
+ "width": 2,
+ "height": 2,
+ "scale": 4,
+ "expect": "000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100110101100110101101111101101111001101011001101011011111011011111011010110011010110111110110111110110101100110101100111101101111101101011001101011001111011011111011011110011010110011110110111110110111110110101100111101101111101101111101101011001111011001111011011111011010110011110110011110110111110110111100111101100111101101111101101111101111011001111011011111011011111011110110011110110011110111111111010111111001010111110101011111110101111110010101111101010111111101011111100101011111010101111111010111111001010111110101011111110101111110010101111101010111111101011111100101011111010101111111010111111001010111110101011111110101111110010101111101010111111101011111100101011111010101111111010111111001010111110101011111110101111110010101111101010111111101011111100101011111010101111111010111111"
+ },
+ {
+ "name": "all-but-one-3x5-s4",
+ "patternData": "AAwM_n8",
+ "width": 3,
+ "height": 5,
+ "scale": 4,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000000000001000000010000000000000000000000000001000000000000000000100000001000000000000000000010000000100000000000000000010000000000000010000000000001000000010000001000000000001000000000000000000000000000100000000000000000000000000010000000000000000001000000010000001000000000000100000001000000000000000000100000000000000100000000000010000000100000010000000000010000001000000000000000000001000001000000000000000000000100100000000000000000000000001000000000000000000100100000000000000000000000001000000000000000000001000000000000000000000000010010000000000000000001000000000000000000000000010010000000000000000001000000000000000000000000100100000000000000000000010000000000000000000000100100000000000000000000001001000000000000000000100100000000000000000000000010000000000000000000001000000000000"
+ },
+ {
+ "name": "checker-8x8-s4",
+ "patternData": "ADQYqlWqVapVqlU",
+ "width": 8,
+ "height": 8,
+ "scale": 4,
+ "expect": "111111111000000000011111111100000000001111111110000000000111111111000000000011111111100000000001111111110000000000111111111000000000011111111100000000001111111110000000000000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111110111101010111101011110101011110101111010101111010101101010111101010110101011110101011010101111010101111010111101010111101011110101011110101111010101111000111101010111100011110101011110001111010101111000101101010111100010110101011110001011110101111000101111010111100010111101011110001011110001111000101111000111100010111100011110001011110001011000101111000101100010111100010110001011110001011100101111101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101110101010101010111010101010101011101010101010101"
+ },
+ {
+ "name": "stripes_v-17x9-s4",
+ "patternData": "AHwcqqpUVamqUlWlqkpVlaoqVVWqqgA",
+ "width": 17,
+ "height": 9,
+ "scale": 4,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111001110011001110011000110011000110011111001100011001110011001110011000110011111001100011001100011001110011001110011111001100111001100011001100011001110011110001100111001100111001100011001100011110001100110001100111001100111001100011110011100110001100110001100111001100111110011100110011100110001100110001100111110011000110011100110011100110001100111110011000110011000110011100110011100111110011001111110011100000000000110001111111111101111000010000001000011110111111111110001100000000000111001111111111100111000001111110011100000100000110001111101111101111000011000001000011110011111111110001110000000000111000111111111100111100001111110011110000100000110000111101111101111100011000001000001110011111111111001110000000000011000111111111110111100001111111011110000100000010000111101111111111100011"
+ },
+ {
+ "name": "stripes_h-33x16-s4",
+ "patternData": "APw4AAAAAP7___8DAAAA-P___w8AAADg____PwAAAID_____AAAAAP7___8DAAAA-P___w8AAADg____PwAAAID_____",
+ "width": 33,
+ "height": 16,
+ "scale": 4,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110100100100100100101101101101101101001001001001001001011011011011011010010010010010010110110110110110110100100100100100101101101101101101001001001001001001011011011011011010010010010010010110110110110110110100100100100100101101101101101101101001001001001001011011011011011010010010010010010010110110110110110100100100100100101101101101101101101001001001001001011011011011011010010010010010010010110111101011010110101001010010100101011010110101101010010100101001010110101101011010100101001010010101101011010110101001010010100101011010110101101010010100101001010110101101011010100101001010010101101011010110101001010010100101011010110101101010010100101001010110101101011010100101001010010101101011010110101001010010100101011010110101101010010100101001010110101101011010100101001010010101101011010110101"
+ },
+ {
+ "name": "diagonal-129x65-s4",
+ "patternData": "APz_MzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzM83MzMzMzMzMzMzMzMzMzMwwMzMzMzMzMzMzMzMzMzMzy8zMzMzMzMzMzMzMzMzMzDwzMzMzMzMzMzMzMzMzMzPTzMzMzMzMzMzMzMzMzMzMDDMzMzMzMzMzMzMzMzMzM7PMzMzMzMzMzMzMzMzMzMzMMzMzMzMzMzMzMzMzMzMzMwE",
+ "width": 129,
+ "height": 65,
+ "scale": 4,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001100110001100111001100111001100011001100011110011100110001100110001100111001100111001100011110011100110001100110001100111001100111001100010110011100100001100110001101111001100111001000000110011100100011100110001101110001100111001000000110011100100011100110001101110001100111001000000110110011100110011100110001100110001100111000011000110011100110011100110001100110001100111010011000110011000110010110010110000100101100001101011010011010010100110100111001101100101001011000011010110000110100101001101001110011010011101101001101001110011110010110111100101100011001011000010010011010011100110100111101111001011001110010110010100101100011000110010110000100101100001100011010011010110100110100101100101100101001011000011010110000110101101001101001110011100110101101001101001010011110010100111100101100"
+ },
+ {
+ "name": "all-but-one-2x2-s5",
+ "patternData": "AAUADg",
+ "width": 2,
+ "height": 2,
+ "scale": 5,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111111001000001001000001001000001001000001101100001110000000010000000010000000011000000011000000011100000100110000110110000110110000110110000010010000001100000001100000001101000000100000000100000011011000001011000001001000001001000001001000000110000000010000000010000000010000000011000000100100000100100000100100000110110000110110000011000000001000000001100000001101000001101000000111000011011000001011001010001000110001010001100010001000010000010000100010000100000100101000100011000101000110001000100001000001000010001000010000010010100010001100010100011000100010000100000100001000100001000001001010001000110001010001100010001000010000010000100010000100000100101000100011000101000110001000100001000001000010001000010000010010100010001100010100011000100010000100000100001000100001000001001010001000110001"
+ },
+ {
+ "name": "checker-3x5-s5",
+ "patternData": "AA0Mqio",
+ "width": 3,
+ "height": 5,
+ "scale": 5,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100110110110111110111110110110110001110010000011110011100010010010011111011111011011011000111011111000011001110001001001001111001111001001101101101110011100001101110001100100100111100111100111000011100111011110000110111000110110110111010000111101100001110011101110001010011100011011011100100100011100100000101001110111000001001110100111110110110010001110010000010101110010100000111011111011111011011011011011110001001011100101101101111110000100011100110110111010010101110011010110111100010010111000011011011001001011100011011011010011101001000111101101011001110000011110111101100111000100001111110110110100111010011011011011010011101001110001011010110100011110010000101011010001101001100010101101101110001100100100010110101000110010110001011010110100011000100110000110110110010010111000011011011011100"
+ },
+ {
+ "name": "stripes_v-8x8-s5",
+ "patternData": "ADUYqqqqqqqqqqo",
+ "width": 8,
+ "height": 8,
+ "scale": 5,
+ "expect": "000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111111111000001111000001111000001111000001111100001111100001111100001111100000111100000111100000111100000111110000111110000111110000111110000011110000011110000011110000011111000011111000011111000011111000001111000001111000001111000001111100001111100001111100001111100000111100000111100000111100000111110000111110000111110000111110000011110000011110000011110000011111000011111000011111000011111000001111001010101010110101010101101010101001010101010010101010100101010101101010101011010101010110101010100101010101001010101010010101010110101010101101010101011010101010010101010100101010101001010101011010101010110101010101101010101001010101010010101010100101010101101010101011010101010110101010100101010101001010101010010101010110101010101101010101011010101010010101010100101010101001010101011010101010110101"
+ },
+ {
+ "name": "stripes_h-17x9-s5",
+ "patternData": "AH0cAAD-_wMA-P8PAOD_PwCA__8AAAA",
+ "width": 17,
+ "height": 9,
+ "scale": 5,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111001001001001110110110110111001101101101110001110010010010011101100100100111011011011011100011100100110110111001001001001110110110110011100011101101101101110010010010011100100100100111000111011011011011110110110110111001001001001110001110010010010011101101101101110010011011011100011100100100100111011011001001110110110110111000111001001001101110010010010011101101101101111000111011011011011100101110100000110111110100000110111100100100111111100100100111110100100111111100100100111111100100101111101100000111111100100100111101100000101111101100000101111101000101111101100000101111101100001101111101000001101111100000101111101000001101111101000001101111001001001111101000001101111101001001111111001001001111111001001011111001001001111111001001001111011000001011111011000001111111000001011111011000"
+ },
+ {
+ "name": "diagonal-33x16-s5",
+ "patternData": "AP04MzMzM83MzMwwMzMzy8zMzDwzMzPTzMzMDDMzM7PMzMzMMzMzM83MzMwwMzMzy8zMzDwzMzPTzMzMDDMzM7PMzMzM",
+ "width": 33,
+ "height": 16,
+ "scale": 5,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111110000111110000111110000111110000011110000010000011110000011110000011111000011111000011111000111100000111110000111110000111110001110000011100001111100001111100001110100000111100000111100111100000111100000111110000111110000111110000111000001111100001111100001110100001111100000111011111000011101000011101000001111000001111000101000001111000001111100001111100001111100001111100011111000011101000010110100100110110110100010110110100100100101110100100100110110101100101101100100100101110100101001101101101000101101101101001001001101001001101101101011001001011001001001011101001010001011011011001011011001001010010011011010011011011010010010010111010010010011010010100010110110110010010110010010100110110110100010110110110010100101110100100100110110100100101101100100100101110100100001101101101000101"
+ },
+ {
+ "name": "one-bit-129x65-s5",
+ "patternData": "AP3_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE",
+ "width": 129,
+ "height": 65,
+ "scale": 5,
+ "expect": "000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "checker-2x2-s6",
+ "patternData": "AAYABg",
+ "width": 2,
+ "height": 2,
+ "scale": 6,
+ "expect": "111111111000000000011111111100000000001111111110000000000111111111000000000011111111100000000001111111110000000000111111111000000000011111111100000000001111111110000000000000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111111110001111110001111110001111110001111110001111100011101100011101100011100100011100100011100100111000000111000000111000000111000000111000000010001101110001101110001101110000100111000100111011111100011101100001111110001111110001111110001001000011101100011101100011100100011100100011100000111000000111000000111000000111000000111000101110001101110001101110001101110001101110001100100011111100011101100011001111001001101001111100001101000101100001111100101100100111100100111100100110100111110000110100010110000111110010110010011110010011110010011010011111000011010001011000011111001011001001111001001111001001101001111100001101000101100001111100101100100111100100111100100110100111110000110100010110000111110010110010011110010011110010011010011111000011010001011000011111001011001001111001001111001001101"
+ },
+ {
+ "name": "stripes_v-3x5-s6",
+ "patternData": "AA4MkiQ",
+ "width": 3,
+ "height": 5,
+ "scale": 6,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000001111111111111111110000000001111111111111111111000000000111111111111111111000000000111111111111111111000000000011111111111111111100000000011111111111111111100000000011111111111111111110000000001111111111111111110000000001111111111111111111000000000111111111111111111000000000111111111111111111000000000011111111111111111100000000011111111111111111100000000011111111111111111100111100111001111001110011110011100111100111001111001110011110111100111101111001111011110011110111100111101111001111100111100111001111001110011110011100111100111001111001110011110011100111101111001111011110011110111100111101111001111100111100111001111001110011110011100111100111001111001110011110011100111100111001111011110011110111100111101111001111100111100111001111001110011110011100111100111001"
+ },
+ {
+ "name": "stripes_h-8x8-s6",
+ "patternData": "ADYYAP8A_wD_AP8",
+ "width": 8,
+ "height": 8,
+ "scale": 6,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110001110001110001110001110001110001110001110011100011100011100011100011100011100011100011100111000111000111000111000111000111000111000011101110001110001110001110001110000111000111000111011100011100011100001110001110001110001110001110111000011100011100011100011100011100011100011100111000111000111000111000111000111000111000111001110001110001110001110001110001110001110001111011100011100011100011101010110101101011010110101101011010110101101011010110101101011010010100101001010010100101001010010100101001010010100101001010010110101101011010110101101011010110101101011010110101101011010110100101001010010100101001010010100101001010010100101001010010100101101011010110101101011010110101101011010110101101011010110101101001010010100101001010010100101001010010100101001010010100101001011010110101101011"
+ },
+ {
+ "name": "diagonal-17x9-s6",
+ "patternData": "AH4cMzPNzDAzy8w8M9PMDDOzzMwzMwE",
+ "width": 17,
+ "height": 9,
+ "scale": 6,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111110000000001111111111111110000000000000000000011111111100000000000011011111100100111111111000000000111111000000000000111111111101111111110000000001111111110000011000000100111111100011111101100000000001111111111110000000001000000000010011111101100000011000011111100000011000000000000111111111000000000000111111111000001111110010000001101111110010000000000001111111111111111111100000000010111100101110000111100000110000111001111000001111001110111001011000111100011111000111110011111011111000011111000011110011111001111100111110000111100111010011100110011110000011110011000001100000111100001110100111000000110000111100000110001111000011100001111000001100000111000001110000111000001110001111001011000001111001001111000110000111100110110000111000111110011111000111111000011100111100001111100"
+ },
+ {
+ "name": "one-bit-33x16-s6",
+ "patternData": "AP44AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA",
+ "width": 33,
+ "height": 16,
+ "scale": 6,
+ "expect": "000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "all-but-one-129x65-s6",
+ "patternData": "AP7__v___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________wE",
+ "width": 129,
+ "height": 65,
+ "scale": 6,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "name": "stripes_v-2x2-s7",
+ "patternData": "AAcACg",
+ "width": 2,
+ "height": 2,
+ "scale": 7,
+ "expect": "000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111111111111111111111110000000000000000001111111111111111110000000000000000000111111111111111111000000000000000000111111111111111111000000000000000000011111111111111111100000000000000000011111111111111111110000000000000000001111111111111111110000000000000000001111111111111111111000000000000000000111111111111111111000000000000000000011111111111111111100000000000000000011111111111111111100000000000000001111000011100001111000111100001110000111100011110000111000011110001111000011100001111000111100001110000111100011110000111000011100001111000111100001110000111100011110000111000011110001111000011100001111000111100001110000111100011110000111000011110001111000111100001110000111100011110000111000011110001111000011100001111000111100001110000111100011110000111000011110001111000011100001110000111100011110"
+ },
+ {
+ "name": "stripes_h-3x5-s7",
+ "patternData": "AA8MOA4",
+ "width": 3,
+ "height": 5,
+ "scale": 7,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000001111111111110000001111110000001111111111100000011111111111100000011111100000011111111111000000111111111111000000111111000000111111111110000001111111111110000001111111000000111111111100000011111111111110000001111110000001111111111000000011111111111100000011111100000011111111111000000111111111111000000111111000000111111111110000001111111111110000001111110000001111111111100000011111111111100001100100111001101111011001110010011100110111101100111001001101111011001110010011100110111101100111001001110011011001110010011100100111001101111011001110010011100110110011100100111001101111011001110010011100110111101100100111001101111011001110010011100110111001101111011001001110011011110110011100100111001101111011001110010011011110110011100100111001101111011001110010011100110110011101100111001001110"
+ },
+ {
+ "name": "diagonal-8x8-s7",
+ "patternData": "ADcYM2bMmTNmzJk",
+ "width": 8,
+ "height": 8,
+ "scale": 7,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111000000000011111111100000000001111111110000000000111111111000000000011111111100000000001111111110000000000111111111000000000011111111100000000001111111110000000000111111111000000000000000001111111111111111110000000000000000001111111111101111100000000000011000011111111111100111000000000000111000111111111111000111000000000001111101111111111110000010000000000000111100111111111100000000000000000001111111111111111110000000000000000011111111111111111100000000000000000111111111111111111000000000000000000111111111111111110000000000000000001111111111111111110000000000000000011111111110011111010000011111100000101111101000001111110000011111110000010111110000001111101000001011111000000111110000000111110100000111111000001011111000000111110100000101111100000011111000000011111010000011111100000101111101000001111110000011111110000010111110000001111101000001111110000010111110100000111111000001111111000001011111000000111110100000101111100000011111000000011111010000011111100000101111100"
+ },
+ {
+ "name": "one-bit-17x9-s7",
+ "patternData": "AH8cAAAAAAAAAAAAAAAAAAAAAAAAAAE",
+ "width": 17,
+ "height": 9,
+ "scale": 7,
+ "expect": "000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "all-but-one-33x16-s7",
+ "patternData": "AP84_v______________________________________________________________________________________",
+ "width": 33,
+ "height": 16,
+ "scale": 7,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000011111111110000000001111111111000000000111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ },
+ {
+ "name": "checker-129x65-s7",
+ "patternData": "AP__qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgA",
+ "width": 129,
+ "height": 65,
+ "scale": 7,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000001111111111110000001111111111110000011111101111100000011111100111100000011111100111000000111111000111000000111111000111000000011110000010000001111110000010000000111111000011000011111100000010000001111110000000000001111110000110000011111100000010000011111100000011000011111000000111000111111000000111000111111000000111101111110000001111101111110000001111101111110000011111111111100000011111100011010101100011100001010011101011110101110010100001110001101010110001110000101001110101111010111001010000111000110101011000111000110101011000111000010100111010111101011100101000011100011010101100011100001010011101011110101110010100001110001101010110001110001101010110001110000101001110101111010111001010000111000110101011000111000010100111010111101011100101000011100011010101100011100011010101100"
+ },
+ {
+ "name": "alternating-127x16-s0",
+ "patternData": "AOg7qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo",
+ "width": 127,
+ "height": 16,
+ "scale": 0,
+ "expect": "010101010010101010110101010110101010100101010100101010101101010101101010101001010101001010101011010101011010101010010101010010101010110101010110101010100101010100101010101101010101101010101001010101001010101011010101011010101010010101010010101010110101010110101010100101010100101010101101010101101010101001010101001010101011010101011010101010010101010010101010100000111111111111111111000000000000000000111111100000000000111111111111111111100000000000000000100000000000000000011111111111111111100000000001111111100000000000000000011111111111111111100011111111111111110000000000000000001111111111111000001111111111111111110000000000000000001111111000000000001111111111111111110000000000000000001000000000000000000111111111111111111000000000011111111000000000000001111000011100001111000111100001110000111000011110001111000011100001110000111100011110000111000011100001111000111100001111000011100001111000111100001110000111000011110001111000011100001110000111100011110000111000011100001111000111100001111000011100001111000111100001110000111000011110001111000011100001110000111100011110000111000011110001111000111100001111000011100001111000111100001110000111000011110"
+ },
+ {
+ "name": "alternating-64x65-s0",
+ "patternData": "APD9qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg",
+ "width": 64,
+ "height": 65,
+ "scale": 0,
+ "expect": "010101010101010101001010101010101010100101010101010101010010101010101010101001010101010101010100101010101010101010010101010101010101001010101010101010100101010101010101010010101010101010101001010101010101010100101010101010101010010101010101010101001010101010101010100101010101010101010010101010101010101001010101010101010100101010101010101010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010"
+ },
+ {
+ "name": "clear-34x33-s0",
+ "patternData": "AAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "width": 34,
+ "height": 33,
+ "scale": 0,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "cols-33x17-s0",
+ "patternData": "APg8qqqqqlRVVVWpqqqqUlVVVaWqqqpKVVVVlaqqqipVVVVVqqqqqlRVVVWpqqqqUlVVVaWqqqpKVVVVlaqqqipVVVVVqqqqqgA",
+ "width": 33,
+ "height": 17,
+ "scale": 0,
+ "expect": "101010101101010101010101010110101010101010101011010101010101010101101010101010101010110101010101010101011010101010101010101101010101010101010110101010101010101011010101010101010101101010101010101010110101010101010101011010101010101010101101010101010101010110101010101010101011010101010101010101101010101010101010110101010101010101011010101010101010101101010101000101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101001011010110101101011010010100101111111111111111100000000000000001111111111111111100000000000000001111111111111111100000000000000001111111111111111100000000000000000011111111111111111000000000000000011111111111111111000000000000000011111111111111111000000000000000011111111111111111110000000000000000111111111111111110000000000000000111111111111111110000000000000000111111111111111110100000000000000001111111111111111100000000000000"
+ },
+ {
+ "name": "first-bit-3x63-s0",
+ "patternData": "AAj0AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "width": 3,
+ "height": 63,
+ "scale": 0,
+ "expect": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011011011011011011011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111110111111110111111110111111110111111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
+ },
+ {
+ "name": "last-bit-9x2-s0",
+ "patternData": "ADgAAAAC",
+ "width": 9,
+ "height": 2,
+ "scale": 0,
+ "expect": "111111110111111110111111111111111111111111111101111111101111111111111111111111111111011111111011111111111111111111111111110111111110111111111111111111111111111101111111101111111111111111111111111111011111111011111111111111111111111111110111111110111111111111111111111111111101111111101111111111111111111111111111011111111011111111111111111111111111110111111110111111111101111111111111111101111111111111111101111111101111111111111111101111111111111111101111111101111111111111111101111111111111111101111111101111111111111111101111111111111111101111111101111111111111111101111111111111111101111111111111111111111111101111111111111111101111111111111111111111111101111111111111111101111111111111111111111111101111111111111111101111111111111111111111111101111111111111011111111111111111011111111111111111011111111111111111011111111111111111011111111111111111011111111111111111011111111111111111111111110111111111111111110111111111111111110111111111111111110111111111111111110111111111111111110111111111111111111111111101111111111111111101111111111111111101111111111111111101111111111111111101111111111111111101111111111111111111111111011111111111111111011111111111111"
+ },
+ {
+ "name": "rows-17x63-s0",
+ "patternData": "AHj0AAD-_wMA-P8PAOD_PwCA__8AAP7_AwD4_w8A4P8_AID__wAA_v8DAPj_DwDg_z8AgP__AAD-_wMA-P8PAOD_PwCA__8AAP7_AwD4_w8A4P8_AID__wAA_v8DAPj_DwDg_z8AgP__AAD-_wMA-P8PAOD_PwCA__8AAP7_AwD4_w8A4P8_AAA",
+ "width": 17,
+ "height": 63,
+ "scale": 0,
+ "expect": "111111111111111111100000000000000000001111111111111111111000000000000000000011111111111111111110000000000000000000111111111111111111100000000000000000001111111111111111111111111111111111111100000000000000000001111111111111111111000000000000000000011111111111111111110000000000000000000111111111111111111100000000000000000001111111111111111111000000000000000000011011011011011011011011011011011011011011011011010110110110110110110110110110110110110110110110101101101101101101101101101101101101101101101101011011011011011011011011011011011011011011011010110110110110110110110110110110110110110110110101101101101101101101101101101101101101101101101010010010010010010010010010010010010010010010010100100100100100100100100100100100100100100100101001001001001001001001111100001111100001111100001111100001111100001111100001000011111000011111000011111000011111000011111000011100111100000111100000111100000111100000111100000111100111000011111000011111000011111000011111000011111000010000111100000111100000111100000111100000111100000111111111000011111000011111000011111000011111000011111000000000111100000111100000111100000111100000111100000111011111000011111000011111000"
+ },
+ {
+ "name": "solid-16x9-s0",
+ "patternData": "AHAc________________________",
+ "width": 16,
+ "height": 9,
+ "scale": 0,
+ "expect": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
+ }
+ ]
+}
diff --git a/tools/gen-sampler-fixtures.py b/tools/gen-sampler-fixtures.py
new file mode 100644
index 0000000..63ce6b8
--- /dev/null
+++ b/tools/gen-sampler-fixtures.py
@@ -0,0 +1,237 @@
+#!/usr/bin/env python3
+"""
+Generate the oracle for map-scale sampling, and prove it against an independent
+implementation.
+
+WHY THIS EXISTS
+---------------
+OpenFront paints a pattern onto territory in ABSOLUTE world coordinates, so what
+a player sees depends on where the territory sits on the map. `tools/preview_
+prototype.py` establishes the sampling rule and verifies it; this turns that into
+a fixture the editor's JavaScript can be held to, the same way
+`tests/fixtures/codec.json` holds the codec.
+
+Two decisions worth knowing:
+
+ * **Coordinates are written out, not seeded.** The prototype picks probes with
+ an LCG whose step is `(1103515245 * s + 12345) & 0x7FFFFFFF`. Reproducing
+ that in JavaScript needs `Math.imul`, because `1103515245 * 2**31` is past
+ `Number.MAX_SAFE_INTEGER` and a plain multiply silently loses low bits — the
+ exact class of bug this fixture exists to catch. Emitting the coordinates
+ removes the risk instead of testing around it.
+
+ * **No pattern here comes from the game.** The 31 real patterns are CC BY-SA
+ 4.0 and are deliberately not redistributed (see NOTICE). Most cases are
+ synthesised, because the committed corpus is 1,117 patterns at scale 0 and
+ one or two at each of the rest — it was built for width, height and bit
+ packing, and scale is the whole variable here. A slice of that corpus still
+ rides along, so this decoder is also held against data a different generator
+ committed.
+
+Every probe set deliberately straddles the origin. JavaScript's `%` is a
+remainder whose sign follows the dividend, so a naive `(x >> scale) % width`
+returns a negative index for negative world coordinates and reads before the
+start of the array. The world-offset control makes that reachable by panning
+left, so the fixture must be able to see it.
+
+ python3 tools/gen-sampler-fixtures.py # write + verify
+ python3 tools/gen-sampler-fixtures.py --check # verify only, no write
+"""
+
+from __future__ import annotations
+
+import base64
+import json
+import os
+import sys
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+sys.path.insert(0, HERE) # for dsl_prototype.encode
+ROOT = os.path.dirname(HERE)
+CORPUS = os.path.join(ROOT, "tests", "fixtures", "codec.json")
+OUT = os.path.join(ROOT, "tests", "fixtures", "sampler.json")
+
+# Enough to catch an off-by-one in any dimension, small enough to read as a diff.
+CASES_PER_SCALE = 6
+PROBE_SPAN = 4096
+
+
+def floor_mod(a: int, n: int) -> int:
+ return a - n * (a // n)
+
+
+class Pattern:
+ """Decoded pattern. Mirrors OpenFront's PatternDecoder."""
+
+ def __init__(self, pattern_data: str):
+ by = base64.urlsafe_b64decode(pattern_data + "=" * (-len(pattern_data) % 4))
+ self.scale = by[1] & 0x07
+ self.width = (((by[2] & 0x03) << 5) | ((by[1] >> 3) & 0x1F)) + 2
+ self.height = ((by[2] >> 2) & 0x3F) + 2
+ self._bytes = by
+
+ def is_primary(self, world_x: int, world_y: int) -> bool:
+ px = floor_mod(world_x >> self.scale, self.width)
+ py = floor_mod(world_y >> self.scale, self.height)
+ idx = py * self.width + px
+ return (self._bytes[3 + (idx >> 3)] & (1 << (idx & 7))) == 0
+
+
+def oracle_is_primary(pattern_data: str, wx: int, wy: int) -> bool:
+ """
+ Decode to a plain grid and sample it by a different route.
+
+ Written deliberately unlike `Pattern.is_primary` — unpacking every bit up
+ front and indexing a nested list — so that a shared mistake is unlikely. A
+ self-consistent bug is exactly what an oracle has to catch.
+ """
+ by = base64.urlsafe_b64decode(pattern_data + "=" * (-len(pattern_data) % 4))
+ scale = by[1] & 0x07
+ w = (((by[2] & 0x03) << 5) | ((by[1] >> 3) & 0x1F)) + 2
+ h = ((by[2] >> 2) & 0x3F) + 2
+ grid = [[False] * w for _ in range(h)]
+ for i in range(w * h):
+ bit = (by[3 + (i // 8)] >> (i % 8)) & 1
+ grid[i // w][i % w] = bit == 0 # bit 0 means primary
+ block = 1 << scale
+ # Divide rather than shift, and use Python's floor semantics explicitly.
+ cell_x = wx // block
+ cell_y = wy // block
+ return grid[cell_y % h][cell_x % w]
+
+
+def probes() -> list[list[int]]:
+ """
+ World coordinates to sample. Three bands, each for a different failure.
+
+ * A dense block straddling the origin, where the floor-modulo trap lives.
+ * Far negatives, where a remainder-based implementation reads out of range.
+ * Far positives, which is the only region OpenFront itself ever visits.
+ """
+ pts: list[list[int]] = []
+ for y in range(-9, 10):
+ for x in range(-9, 10):
+ pts.append([x, y])
+ step = 7 # coprime with every width here
+ for i in range(400):
+ pts.append([-PROBE_SPAN + i * step, -PROBE_SPAN + i * step * 3 % 991])
+ for i in range(400):
+ pts.append([i * step * 5 % PROBE_SPAN, i * step * 11 % PROBE_SPAN])
+ return pts
+
+
+# Bit patterns whose sampling breaks in different ways: a checker catches an
+# x/y transposition, the two stripe directions catch it independently, a lone set
+# bit catches an index that is off by one anywhere, and its inverse catches a
+# polarity flip.
+MOTIFS = {
+ "checker": lambda x, y, w, h: (x + y) % 2,
+ "stripes_v": lambda x, y, w, h: x % 2,
+ "stripes_h": lambda x, y, w, h: y % 2,
+ "diagonal": lambda x, y, w, h: 1 if (x - y) % 4 < 2 else 0,
+ "one-bit": lambda x, y, w, h: 1 if (x, y) == (w - 1, h - 1) else 0,
+ "all-but-one": lambda x, y, w, h: 0 if (x, y) == (0, 0) else 1,
+}
+
+# Sizes chosen either side of a byte boundary and at both format limits.
+SIZES = [(2, 2), (3, 5), (8, 8), (17, 9), (33, 16), (129, 65)]
+
+
+def pick_cases(corpus: list[dict]) -> list[dict]:
+ """
+ Patterns to sample, covering every scale.
+
+ The committed corpus is 1,117 patterns at scale 0 and one or two at each of
+ the rest — it was built to exercise width, height and bit packing, and scale
+ is barely represented. Scale is the whole variable here, since it decides how
+ many world tiles share a pattern pixel, so these are synthesised across all
+ eight of them. Encoding goes through the DSL prototype's encoder rather than a
+ second copy written for this file.
+
+ A slice of the corpus rides along, so the fixture also proves this decoder
+ agrees with data that was committed by a different generator.
+ """
+ from dsl_prototype import encode
+
+ chosen: list[dict] = []
+ for scale in range(8):
+ for i, (w, h) in enumerate(SIZES):
+ name, fn = list(MOTIFS.items())[(scale + i) % len(MOTIFS)]
+ bits = [fn(x, y, w, h) for y in range(h) for x in range(w)]
+ chosen.append({
+ "name": f"{name}-{w}x{h}-s{scale}",
+ "patternData": encode(w, h, scale, bits),
+ "width": w, "height": h, "scale": scale,
+ })
+
+ from_corpus = sorted(corpus, key=lambda p: p["name"])
+ stride = max(1, len(from_corpus) // 8)
+ chosen += from_corpus[::stride][:8]
+ return chosen
+
+
+def main() -> int:
+ check_only = "--check" in sys.argv
+ corpus = json.load(open(CORPUS, encoding="utf-8"))["patterns"]
+ pts = probes()
+ cases = []
+ mismatches = 0
+
+ for p in pick_cases(corpus):
+ pat = Pattern(p["patternData"])
+ bits = []
+ for wx, wy in pts:
+ got = pat.is_primary(wx, wy)
+ if got != oracle_is_primary(p["patternData"], wx, wy):
+ print(f" [FAIL] {p['name']} at ({wx},{wy}): sampler and oracle disagree")
+ mismatches += 1
+ bits.append("1" if got else "0")
+ cases.append({
+ "name": p["name"],
+ "patternData": p["patternData"],
+ "width": pat.width,
+ "height": pat.height,
+ "scale": pat.scale,
+ "expect": "".join(bits),
+ })
+
+ if mismatches:
+ print(f"\n*** {mismatches} sampler/oracle mismatch(es) — not writing ***")
+ return 1
+
+ doc = {
+ "note": ("Map-scale sampling oracle. Probes straddle the origin because "
+ "JavaScript's % is a remainder, not a floor modulo. Patterns are "
+ "from the licence-clean corpus, not OpenFront's cosmetics.json."),
+ "probeCount": len(pts),
+ "caseCount": len(cases),
+ "probes": pts,
+ "cases": cases,
+ }
+
+ if check_only:
+ if not os.path.exists(OUT):
+ print(f"{OUT} is missing — run without --check")
+ return 1
+ on_disk = json.load(open(OUT, encoding="utf-8"))
+ if on_disk != doc:
+ print(f"{OUT} is stale — re-run without --check")
+ return 1
+ print(f"sampler fixtures current "
+ f"{len(cases)} patterns × {len(pts)} probes, oracle agrees")
+ return 0
+
+ os.makedirs(os.path.dirname(OUT), exist_ok=True)
+ with open(OUT, "w", encoding="utf-8") as fh:
+ json.dump(doc, fh, indent=1)
+ fh.write("\n")
+ neg = sum(1 for x, y in pts if x < 0 or y < 0)
+ print(f"wrote {OUT}")
+ print(f" {len(cases)} patterns × {len(pts)} probes "
+ f"({neg} of them negative), scales {sorted({c['scale'] for c in cases})}")
+ print(f" sampler agrees with the independent oracle on every probe")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/tools/lib/extract.js b/tools/lib/extract.js
new file mode 100644
index 0000000..825380e
--- /dev/null
+++ b/tools/lib/extract.js
@@ -0,0 +1,69 @@
+'use strict';
+/*
+ * Lift real functions out of app/patternfront.html so tests run the shipping
+ * code rather than a copy of it.
+ *
+ * The editor is one HTML file on purpose — the same file is the browser build
+ * and the desktop renderer — so there is no module boundary to import across.
+ * The suites therefore slice functions out of the