openscad-2013.01+dfsg.orig/0000755000175000017500000000000012110740367014731 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/openscad.qrc0000644000175000017500000000043212040570421017225 0ustar chrysnchrysn icons/stopbutton.png icons/prefsAdvanced.png icons/prefs3DView.png icons/prefsEditor.png icons/flattr.png src/AboutDialog.html openscad-2013.01+dfsg.orig/opencsg.pri0000644000175000017500000000053611673145117017114 0ustar chrysnchrysnopencsg { DEFINES += ENABLE_OPENCSG CONFIG += glew # Optionally specify location of OpenCSG using the # OPENCSGDIR env. variable OPENCSG_DIR = $$(OPENCSGDIR) !isEmpty(OPENCSG_DIR) { QMAKE_INCDIR += $$OPENCSG_DIR/include QMAKE_LIBDIR += $$OPENCSG_DIR/lib message("OpenCSG location: $$OPENCSG_DIR") } LIBS += -lopencsg } openscad-2013.01+dfsg.orig/mjau.gdb0000644000175000017500000000012411640436732016345 0ustar chrysnchrysnset environment DYLD_LIBRARY_PATH=/Users/kintel/code/OpenSCAD/libraries/install/lib openscad-2013.01+dfsg.orig/testdata/0000755000175000017500000000000012110740367016542 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/0000755000175000017500000000000012110740367017454 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/features/0000755000175000017500000000000012110740367021272 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/features/child-background.scad0000644000175000017500000000017011640715655025335 0ustar chrysnchrysnmodule transparent() { %child(); } difference() { sphere(r=10); transparent() cylinder(h=30, r=6, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/features/root-modifier.scad0000644000175000017500000000010611640436733024710 0ustar chrysnchrysndifference() { sphere(r=10); !cylinder(h=30, r=6, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/features/circle-tests.scad0000644000175000017500000000055411640436732024540 0ustar chrysnchrysncircle(); translate([0,3,0]) circle(1); translate([5,1,0]) circle(r=3); translate([0,-1,0]) circle(r=0); translate([0,-3,0]) circle(1, $fn=4); translate([3,-3,0]) circle(1, $fn=8); translate([6,-3,0]) circle(1, $fn=12); translate([0,-6,0]) circle(1, $fa=20, $fs=0.3); translate([3,-6,0]) circle(1, $fa=30, $fs=0.3); translate([6,-6,0]) circle(1, $fa=40, $fs=0.3); openscad-2013.01+dfsg.orig/testdata/scad/features/control-hull-dimension.scad0000644000175000017500000000004312076022156026530 0ustar chrysnchrysnhull() { circle(1); echo(1); } openscad-2013.01+dfsg.orig/testdata/scad/features/hull2-tests.scad0000644000175000017500000000123511667564056024334 0ustar chrysnchrysnmodule convex2dSimple() { hull() { translate([15,10]) circle(10); circle(10); } } module concave2dSimple() { hull() { translate([15,10]) square(2); translate([15,0]) square(2); square(2); } } module convex2dHole() { hull() { translate([15,10,0]) circle(10); difference() { circle(10); circle(5); } } } module hull2dForLoop() { hull() { for(x = [0,10]) for(y=[0,10]) translate([x,y]) circle(3); } } convex2dHole(); translate([40,0,0]) convex2dSimple(); translate([0,-20,0]) concave2dSimple(); translate([30,-25,0]) hull2dForLoop(); openscad-2013.01+dfsg.orig/testdata/scad/features/for-tests.scad0000644000175000017500000000172611640436733024070 0ustar chrysnchrysn// Empty for(); // No children for(i=2) { } // Null translate([-10,0,0]) for() cylinder(r=4); // Scalar translate([10,0,0]) for(i=3) cylinder(r=i); // Range for(r=[1:5]) translate([r*10-30,10,0]) cylinder(r=r); // Reverse for(r=[5:1]) translate([r*10-30,20,0]) cylinder(r=r); // Step for(r=[1:2:6]) translate([r*10-30,30,0]) difference() {cylinder(r=r, center=true); cylinder(r=r/2, h=2, center=true);} // Fractional step for(r=[1.5:0.2:2.5]) translate([r*10-30,30,0]) cube([1, 4*r, 2], center=true); // Negative range, negative step for(r=[5:-1:1]) translate([r*10-60,40,0]) cylinder(r=r); // Negative range, positive step for(r=[5:1:1]) translate([r*10-30,40,0]) cylinder(r=r); // Zero step for(r=[1:0:5]) translate([r*10+60,40,0]) cylinder(r=r); // Negative step for(r=[1:-1:5]) translate([r*10-30,50,0]) cylinder(r=r); // Illegal step value for(r=[1:true:5]) translate([r*10-60,50,0]) cylinder(r=r); // Vector for(r=[1,2,5]) translate([r*10-30,0,0]) cylinder(r=r); openscad-2013.01+dfsg.orig/testdata/scad/features/surface-tests.scad0000644000175000017500000000006011640436733024720 0ustar chrysnchrysnsurface(); surface("surface.dat", center=true); openscad-2013.01+dfsg.orig/testdata/scad/features/hull3-tests.scad0000644000175000017500000000070612076022156024320 0ustar chrysnchrysn// Empty hull(); // No children hull() { } hull() { cylinder(r=10, h=1); translate([0,0,10]) cube([5,5,5], center=true); } translate([25,0,0]) hull() { translate([0,0,10]) cylinder(r=3); difference() { cylinder(r=10, h=4, center=true); cylinder(r=5, h=5, center=true); } } // Don't Crash (issue 188) translate([-5,-5,-5]) { hull() { intersection() { cube([1,1,1]); translate([-1,-1,-1]) cube([1,1,1]); } } } openscad-2013.01+dfsg.orig/testdata/scad/features/color-tests.scad0000644000175000017500000000075111676112354024414 0ustar chrysnchrysn// Empty color(); // No children color() { } module object() cube([10,10,10]); translate([12,12,0]) object(); color([1,0,0]) translate([24,12,0]) object(); translate([0,12,0]) color("Purple") object(); color([0,0,1,0.5]) object(); translate([12,0,0]) color([0,0,1],0.5) object(); translate([24,0,0]) color(c="Green",alpha=0.2) object(); translate([-12,12,0]) color() object(); translate([-12,0,0]) color(alpha=0.5) object(); translate([24,-12,0]) color([1,0,0]) color([0,0,1]) object(); openscad-2013.01+dfsg.orig/testdata/scad/features/import.stl0000644000175000017500000002240611640436735023344 0ustar chrysnchrysnsolid OpenSCAD_Model facet normal 0.540558 -0.392737 0.744013 outer loop vertex 0.095492 -0.293893 0.951057 vertex 0.809017 0.000000 0.587785 vertex 0.309017 0.000000 0.951057 endloop endfacet facet normal 0.000000 0.000000 1.000000 outer loop vertex -0.250000 -0.181636 0.951057 vertex 0.095492 -0.293893 0.951057 vertex 0.309017 0.000000 0.951057 endloop endfacet facet normal 0.000000 -0.000000 1.000000 outer loop vertex -0.250000 0.181636 0.951057 vertex -0.250000 -0.181636 0.951057 vertex 0.095492 0.293893 0.951057 endloop endfacet facet normal 0.000000 -0.000000 1.000000 outer loop vertex 0.095492 0.293893 0.951057 vertex -0.250000 -0.181636 0.951057 vertex 0.309017 0.000000 0.951057 endloop endfacet facet normal 0.540559 0.392738 0.744011 outer loop vertex 0.095492 0.293893 0.951057 vertex 0.309017 0.000000 0.951057 vertex 0.250000 0.769421 0.587785 endloop endfacet facet normal 0.540558 0.392738 0.744012 outer loop vertex 0.250000 0.769421 0.587785 vertex 0.309017 0.000000 0.951057 vertex 0.809017 0.000000 0.587785 endloop endfacet facet normal 0.540558 -0.392738 0.744012 outer loop vertex 0.095492 -0.293893 0.951057 vertex 0.250000 -0.769421 0.587785 vertex 0.809017 0.000000 0.587785 endloop endfacet facet normal -0.206474 -0.635464 0.744012 outer loop vertex -0.250000 -0.181636 0.951057 vertex 0.250000 -0.769421 0.587785 vertex 0.095492 -0.293893 0.951057 endloop endfacet facet normal 0.782436 -0.568473 0.254229 outer loop vertex 0.250000 -0.769421 0.587785 vertex 1.000000 0.000000 0.000000 vertex 0.809017 0.000000 0.587785 endloop endfacet facet normal 0.782436 0.568473 0.254229 outer loop vertex 0.250000 0.769421 0.587785 vertex 0.809017 0.000000 0.587785 vertex 0.309017 0.951057 0.000000 endloop endfacet facet normal 0.782436 0.568473 0.254229 outer loop vertex 0.309017 0.951057 0.000000 vertex 0.809017 0.000000 0.587785 vertex 1.000000 0.000000 0.000000 endloop endfacet facet normal -0.206475 -0.635464 0.744012 outer loop vertex -0.654508 -0.475528 0.587785 vertex 0.250000 -0.769421 0.587785 vertex -0.250000 -0.181636 0.951057 endloop endfacet facet normal -0.668166 0.000000 0.744012 outer loop vertex -0.654508 -0.475528 0.587785 vertex -0.250000 -0.181636 0.951057 vertex -0.250000 0.181636 0.951057 endloop endfacet facet normal -0.668166 0.000000 0.744012 outer loop vertex -0.654508 0.475528 0.587785 vertex -0.654508 -0.475528 0.587785 vertex -0.250000 0.181636 0.951057 endloop endfacet facet normal -0.206475 0.635464 0.744012 outer loop vertex -0.654508 0.475528 0.587785 vertex -0.250000 0.181636 0.951057 vertex 0.095492 0.293893 0.951057 endloop endfacet facet normal -0.206475 0.635464 0.744012 outer loop vertex -0.654508 0.475528 0.587785 vertex 0.095492 0.293893 0.951057 vertex 0.250000 0.769421 0.587785 endloop endfacet facet normal -0.298864 0.919808 0.254229 outer loop vertex -0.809017 0.587785 0.000000 vertex -0.654508 0.475528 0.587785 vertex 0.250000 0.769421 0.587785 endloop endfacet facet normal -0.298864 0.919808 0.254229 outer loop vertex -0.809017 0.587785 0.000000 vertex 0.250000 0.769421 0.587785 vertex 0.309017 0.951057 0.000000 endloop endfacet facet normal 0.782436 -0.568473 0.254229 outer loop vertex 0.250000 -0.769421 0.587785 vertex 0.309017 -0.951057 0.000000 vertex 1.000000 0.000000 0.000000 endloop endfacet facet normal -0.298864 -0.919808 0.254229 outer loop vertex -0.654508 -0.475528 0.587785 vertex 0.309017 -0.951057 0.000000 vertex 0.250000 -0.769421 0.587785 endloop endfacet facet normal 0.782436 -0.568473 -0.254229 outer loop vertex 0.309017 -0.951057 0.000000 vertex 0.809017 0.000000 -0.587785 vertex 1.000000 0.000000 0.000000 endloop endfacet facet normal 0.782436 0.568473 -0.254229 outer loop vertex 0.250000 0.769421 -0.587785 vertex 0.309017 0.951057 0.000000 vertex 1.000000 0.000000 0.000000 endloop endfacet facet normal 0.782436 0.568473 -0.254229 outer loop vertex 0.250000 0.769421 -0.587785 vertex 1.000000 0.000000 0.000000 vertex 0.809017 0.000000 -0.587785 endloop endfacet facet normal -0.298864 0.919808 -0.254229 outer loop vertex -0.809017 0.587785 0.000000 vertex 0.309017 0.951057 0.000000 vertex -0.654508 0.475528 -0.587785 endloop endfacet facet normal -0.298864 0.919808 -0.254229 outer loop vertex -0.654508 0.475528 -0.587785 vertex 0.309017 0.951057 0.000000 vertex 0.250000 0.769421 -0.587785 endloop endfacet facet normal -0.298864 -0.919808 0.254229 outer loop vertex -0.809017 -0.587785 0.000000 vertex 0.309017 -0.951057 0.000000 vertex -0.654508 -0.475528 0.587785 endloop endfacet facet normal -0.967144 0.000000 0.254230 outer loop vertex -0.654508 -0.475528 0.587785 vertex -0.654508 0.475528 0.587785 vertex -0.809017 -0.587785 0.000000 endloop endfacet facet normal -0.967144 0.000000 0.254230 outer loop vertex -0.809017 -0.587785 0.000000 vertex -0.654508 0.475528 0.587785 vertex -0.809017 0.587785 0.000000 endloop endfacet facet normal -0.967144 0.000000 -0.254230 outer loop vertex -0.809017 0.587785 0.000000 vertex -0.654508 0.475528 -0.587785 vertex -0.809017 -0.587785 0.000000 endloop endfacet facet normal -0.967144 0.000000 -0.254230 outer loop vertex -0.809017 -0.587785 0.000000 vertex -0.654508 0.475528 -0.587785 vertex -0.654508 -0.475528 -0.587785 endloop endfacet facet normal 0.782436 -0.568473 -0.254229 outer loop vertex 0.250000 -0.769421 -0.587785 vertex 0.809017 0.000000 -0.587785 vertex 0.309017 -0.951057 0.000000 endloop endfacet facet normal -0.298864 -0.919808 -0.254229 outer loop vertex -0.809017 -0.587785 0.000000 vertex 0.250000 -0.769421 -0.587785 vertex 0.309017 -0.951057 0.000000 endloop endfacet facet normal 0.540558 -0.392738 -0.744012 outer loop vertex 0.250000 -0.769421 -0.587785 vertex 0.309017 0.000000 -0.951057 vertex 0.809017 0.000000 -0.587785 endloop endfacet facet normal 0.540558 0.392738 -0.744012 outer loop vertex 0.095492 0.293893 -0.951057 vertex 0.250000 0.769421 -0.587785 vertex 0.809017 0.000000 -0.587785 endloop endfacet facet normal 0.540558 0.392737 -0.744013 outer loop vertex 0.095492 0.293893 -0.951057 vertex 0.809017 0.000000 -0.587785 vertex 0.309017 0.000000 -0.951057 endloop endfacet facet normal -0.206475 0.635464 -0.744012 outer loop vertex -0.654508 0.475528 -0.587785 vertex 0.250000 0.769421 -0.587785 vertex -0.250000 0.181636 -0.951057 endloop endfacet facet normal -0.206474 0.635464 -0.744012 outer loop vertex -0.250000 0.181636 -0.951057 vertex 0.250000 0.769421 -0.587785 vertex 0.095492 0.293893 -0.951057 endloop endfacet facet normal -0.668166 0.000000 -0.744012 outer loop vertex -0.654508 0.475528 -0.587785 vertex -0.250000 0.181636 -0.951057 vertex -0.654508 -0.475528 -0.587785 endloop endfacet facet normal -0.668166 0.000000 -0.744012 outer loop vertex -0.654508 -0.475528 -0.587785 vertex -0.250000 0.181636 -0.951057 vertex -0.250000 -0.181636 -0.951057 endloop endfacet facet normal -0.298864 -0.919808 -0.254229 outer loop vertex -0.809017 -0.587785 0.000000 vertex -0.654508 -0.475528 -0.587785 vertex 0.250000 -0.769421 -0.587785 endloop endfacet facet normal -0.206475 -0.635464 -0.744012 outer loop vertex -0.654508 -0.475528 -0.587785 vertex 0.095492 -0.293893 -0.951057 vertex 0.250000 -0.769421 -0.587785 endloop endfacet facet normal -0.206475 -0.635464 -0.744012 outer loop vertex -0.654508 -0.475528 -0.587785 vertex -0.250000 -0.181636 -0.951057 vertex 0.095492 -0.293893 -0.951057 endloop endfacet facet normal 0.540559 -0.392738 -0.744011 outer loop vertex 0.095492 -0.293893 -0.951057 vertex 0.309017 0.000000 -0.951057 vertex 0.250000 -0.769421 -0.587785 endloop endfacet facet normal -0.000000 0.000000 -1.000000 outer loop vertex -0.250000 0.181636 -0.951057 vertex 0.095492 0.293893 -0.951057 vertex -0.250000 -0.181636 -0.951057 endloop endfacet facet normal 0.000000 0.000000 -1.000000 outer loop vertex -0.250000 -0.181636 -0.951057 vertex 0.095492 0.293893 -0.951057 vertex 0.309017 0.000000 -0.951057 endloop endfacet facet normal -0.000000 0.000000 -1.000000 outer loop vertex -0.250000 -0.181636 -0.951057 vertex 0.309017 0.000000 -0.951057 vertex 0.095492 -0.293893 -0.951057 endloop endfacet endsolid OpenSCAD_Model openscad-2013.01+dfsg.orig/testdata/scad/features/2d-3d.scad0000644000175000017500000000012111640436732022736 0ustar chrysnchrysn// Test a mix of toplevel 2D and 3D objects cube(); translate([2,0,0]) square(); openscad-2013.01+dfsg.orig/testdata/scad/features/background-modifier.scad0000644000175000017500000000015612076022156026043 0ustar chrysnchrysndifference() { sphere(r=10); %cylinder(h=30, r=6, center=true); } %if (true) cube([25,6,3], center=true); openscad-2013.01+dfsg.orig/testdata/scad/features/polygon-tests.scad0000644000175000017500000000133111716565223024762 0ustar chrysnchrysnpolygon(); polygon([]); polygon([[],[]]); polygon([[[]]]); translate([2,0,0]) polygon([[0,0], [1,0], [1,1]]); translate([0,2,0]) polygon([[0,0]]); translate([2,2,0]) polygon([[0,0],[1,1]]); translate([2,2,0]) polygon([[0,0],[1,1],[2,2]]); translate([0,-2,0]) polygon(points=[[0,0], [1,0], [1,1], [0,1]]); translate([0,-4,0]) polygon(points=[[0,0], [1,0], [1,1], [0,1]], paths=[]); translate([2,-2,0]) polygon([[0,0], [1,0], [0.8,0.5], [1,1], [0,1]]); points = [[0,0], [0.5,-0.2], [1,0], [1.2,0.5], [1,1], [0.5,1.2], [0,1], [-0.2,0.5]]; translate([-2,0,0]) polygon(points); translate([-2,-2,0]) polygon(points=points, paths=[[0,1,2,3], [4,5,6,7]]); translate([2,-4,0]) polygon([[0,0], [1,0], [1,1], [0,0]]); // FIXME: convexity openscad-2013.01+dfsg.orig/testdata/scad/features/polyhedron-tests.scad0000644000175000017500000000133611671511550025455 0ustar chrysnchrysnmodule polyhedrons() { polyhedron(points = [[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]], triangles = [[0,4,2],[0,2,5],[0,3,4],[0,5,3],[1,2,4],[1,5,2],[1,4,3], [1,3,5]]); // One face flipped translate([2,0,0]) polyhedron(points = [[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]], triangles = [[0,4,2],[0,2,5],[0,3,4],[0,5,3],[1,2,4],[1,5,2],[1,3,4], [1,3,5]]); // All faces flipped translate([4,0,0]) polyhedron(points = [[1,0,0],[-1,0,0],[0,1,0],[0,-1,0],[0,0,1],[0,0,-1]], triangles = [[0,2,4],[0,5,2],[0,4,3],[0,3,5],[1,4,2],[1,2,5],[1,3,4], [1,5,3]]); } polyhedrons(); translate([0,2,0]) difference() { polyhedrons(); translate([2,0,2]) cube([8,3,3], center=true); } openscad-2013.01+dfsg.orig/testdata/scad/features/child-tests.scad0000644000175000017500000000100511653626423024354 0ustar chrysnchrysn$fn=16; module parent() { for (i=[0:2]) { translate([2.5*i,0,0]) child(i); } } // Normal parent() { sphere(); cylinder(h=2, center=true); cube(2, center=true); } // No children parent(); // Too few children translate([0,3,0]) parent() { sphere(); } // No parameter to child module parent2() { child(); } translate([2.5,3,0]) parent2() { cylinder(h=2, center=true); sphere(); } // Negative parameter to child module parent3() { child(-1); } translate([5,3,0]) parent3() { cube(); sphere(); } openscad-2013.01+dfsg.orig/testdata/scad/features/surface-simple.dat0000644000175000017500000000001011676112354024677 0ustar chrysnchrysn0 1 2 3 openscad-2013.01+dfsg.orig/testdata/scad/features/intersection_for-tests.scad0000644000175000017500000000040711640436733026651 0ustar chrysnchrysn// Empty intersection_for(); // No children intersection_for(i=1) { } intersection_for(i = [[0, 0, 0], [10, 20, 300], [200, 40, 57], [20, 88, 57]]) rotate(i) cube([100, 20, 20], center = true); openscad-2013.01+dfsg.orig/testdata/scad/features/text-search-test.scad0000644000175000017500000000211211745120722025326 0ustar chrysnchrysn// fonts test use thisFont=8bit_polyfont(); thisText="OpenSCAD Rocks!"; // Find one letter matches from 2nd column (index 1) theseIndicies=search(thisText,thisFont[2],1,1); // Letter spacing, x direction. x_shift=thisFont[0][0]; y_shift=thisFont[0][1]; echo(theseIndicies); // Simple polygon usage. for(i=[0:len(theseIndicies)-1]) translate([i*x_shift-len(theseIndicies)*x_shift/2,0]) { polygon(points=thisFont[2][theseIndicies[i]][6][0],paths=thisFont[2][theseIndicies[i]][6][1]); } theseIndicies2=search("ABC",thisFont[2],1,1); // outline_2d() example for(i=[0:len(theseIndicies2)-1]) translate([i*x_shift-len(theseIndicies2)*x_shift,-y_shift]) { outline_2d(outline=true,points=thisFont[2][theseIndicies2[i]][6][0],paths=thisFont[2][theseIndicies2[i]][6][1],width=0.25); } theseIndicies3=search("123",thisFont[2],1,1); // bold_2d() outline_2d(false) example for(i=[0:len(theseIndicies3)-1]) translate([i*x_shift,-2*y_shift]) { bold_2d(bold=true,width=0.25,resolution=8) outline_2d(false,thisFont[2][theseIndicies3[i]][6][0],thisFont[2][theseIndicies3[i]][6][1]); }openscad-2013.01+dfsg.orig/testdata/scad/features/disable-modifier.scad0000644000175000017500000000015612076022156025327 0ustar chrysnchrysndifference() { *sphere(r=10); cylinder(h=30, r=6, center=true); } *if (true) cube([25,6,3], center=true); openscad-2013.01+dfsg.orig/testdata/scad/features/minkowski3-tests.scad0000644000175000017500000000121511640436733025371 0ustar chrysnchrysnmodule roundedBox3dSimple() { minkowski() { cube([10,10,5]); cylinder(r=5, h=5); } } module roundedBox3dCut() { minkowski() { difference() { cube([10,10,5]); cube([5,5,5]); } cylinder(r=5, h=5); } } module roundedBox3dHole() { minkowski() { difference() { cube([10,10,5], center=true); cube([8,8,10], center=true); } cylinder(r=2); } } translate([-20,30,0]) roundedBox3dHole(); translate([0,25,0]) roundedBox3dCut(); translate([25,25,0]) roundedBox3dSimple(); // Empty minkowski(); // No children minkowski() { } openscad-2013.01+dfsg.orig/testdata/scad/features/projection-tests.scad0000644000175000017500000000137311775004604025451 0ustar chrysnchrysn// Empty projection(); // No children projection() { } // 2D child projection(cut=true) { square(); } linear_extrude(height=20) projection(cut=false) sphere(r=10); translate([22,0,0]) linear_extrude(height=20) projection(cut=true) translate([0,0,9]) sphere(r=10); translate([44,0,0]) linear_extrude(height=20) projection(cut=true) translate([0,0,7]) sphere(r=10); // Boundary case: clipping the top of a cube translate([0,-22,0]) linear_extrude(height=5) projection(cut=true) translate([0,0,-4.999999]) cube(10, center=true); // holes translate([0,-44,0]) linear_extrude(height=5) projection(cut=true) union() { difference() { cube(5,center=true); cube(4,center=true); } translate([2.1,2.1]) difference() { cube(5,center=true); cube(4,center=true); } } openscad-2013.01+dfsg.orig/testdata/scad/features/rotate_extrude_dxf-tests.scad0000644000175000017500000000023111653243403027161 0ustar chrysnchrysn// These are tests which are not yet possible to express with the // non-deprecated functionality rotate_extrude(file = "../../dxf/open-polyline.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/features/assign-tests.scad0000644000175000017500000000016011640436732024554 0ustar chrysnchrysnfor(i=[0:5]) { translate([i*i/2,0,0]) { cube(i); translate([0,-5,0]) assign(f=1.0*i/2) cube(f); } } openscad-2013.01+dfsg.orig/testdata/scad/features/cylinder-tests.scad0000644000175000017500000000124711701151225025075 0ustar chrysnchrysncylinder(); translate([1,0,0]) cylinder(r=0); translate([2,0,0]) cylinder(r1=0, r2=0); translate([0,-11,0]) cylinder(r=5); translate([0,11,0]) cylinder(r=5, h=10, center=true); translate([11,-11,0]) cylinder(h=5, r1=5); translate([11,0,0]) cylinder(h=5, r1=5, r2=0); translate([11,11,0]) cylinder(h=8, r1=5, r2=5); translate([22,-11,0]) cylinder(h=5, r=5, r1=0, center=true); translate([22,0,0]) cylinder(h=5, r=5, r2=0); translate([22,11,0]) cylinder(h=15, r=5, r2=5); // This tests for hexagonal cylinder orientation, since people // tend to "abuse" this for captured nut slots translate([-10,0,0]) cylinder(h=2, r=3, $fn=6); // FIXME: We could test $fs, $fa, $fn as well openscad-2013.01+dfsg.orig/testdata/scad/features/import_bin.stl0000644000175000017500000000452011675160666024176 0ustar chrysnchrysnVCG .b ?ɾw>?O=%yyxs?O?y?z7>yxs??9yxs?O=%yyxs?z7>yxs??9>yxs?9yxs?O=%y>yxs??O=%y>yxs?9yxs?z7>yxs?b ?>w>?O=%y>yxs?z7>yxs?>D?y?a ?>w>?>D?y?z7>yxs?O?y?b ?ɾw>?O=%yyxs?>Dy?O?y?nS"w>?9yxs?>Dy?O=%yyxs?MH?rJ*>>Dy??O?y?MH?q?X*>>D?y?O?y?z7>yxs?MH?o?M*>z7>yxs?O?y??8nSŭ"w>?֍'hxy?>Dy?9yxs? +w>?֍'hxy?9yxs?9>yxs? +w>?֍'hx>y?֍'hxy?9>yxs?nSͭ"?w>?֍'hx>y?9>yxs?O=%y>yxs?3nS"?w>?֍'hx>y?O=%y>yxs?>D?y?xk?Y*>Oy?֍'hx>y?>D?y?xk?[*>Oy?>D?y?z7>yxs?MH?oX*>>Dy?z7>yxs?xk\*>֍'hxy?z7>yxs>Dy?MH?oM*z7>yxsO?y?MH?o?X*>D?yz7>yxs??MH?r?J*>D?y?O?yxk?Y*Oy?z7>yxs?֍'hx>yxk?\*֍'hx>yz7>yxs?>D?yxkY*>Oyz7>yxs֍'hxy?wf*>֍'hxy?֍'hx>y?Oywg*>Oy֍'hx>y?Oy?wg*Oy?֍'hx>yOywg*Oy֍'hx>y֍'hxyMH?qX*>DyO?yz7>yxsxk[*Oy>Dyz7>yxsa ?ɾw>>Dyz7>yxsO?yb ?>w>O=%y>yxs>D?yO?yb ?>w>O=%y>yxsO?yz7>yxs8nSŭ"?w>֍'hx>y>D?y9>yxsnS"?w>9>yxs>D?yO=%y>yxs +w>֍'hx>y9>yxs֍'hxy +w>֍'hxy9>yxs9yxsxkY*Oy֍'hxy>Dy3nS"w>֍'hxyO=%yyxs>DynSͭ"w>֍'hxy9yxsO=%yyxsb ?ɾw>O=%yyxsz7>yxs>Dy9>yxsO=%y>yxs9yxs9yxsO=%y>yxsz7>yxs9yxsz7>yxsO=%yyxsopenscad-2013.01+dfsg.orig/testdata/scad/features/render-2d-tests.scad0000644000175000017500000000012211676112354025050 0ustar chrysnchrysnrender() { difference() { square(100, center=true); circle(r=30); } } openscad-2013.01+dfsg.orig/testdata/scad/features/difference-tests.scad0000644000175000017500000000145712076022156025367 0ustar chrysnchrysn// Empty difference(); // No children difference() { } difference() { cube([10,10,10], center=true); cylinder(r=4, h=20, center=true); } translate([12,0,0]) difference() { cube([10,10,10], center=true); cylinder(r=4, h=10.5, center=true); } translate([0,12,0]) difference() { cube([10,10,10], center=true); cylinder(r=4, h=11, center=true); rotate([0,90,0]) cylinder(r=4, h=11, center=true); } translate([12,12,0]) difference() { cube([10,10,10], center=true); translate([0,0,7.01]) cylinder(r=4, h=4, center=true); } translate([24,0,0]) difference() { cube([10,10,10], center=true); translate([0,0,6.99]) cylinder(r=4, h=4, center=true); } // Subtracting something from nothing translate([24,12,0]) difference() { cube([0,10,10], center=true); # cylinder(r=4, h=20, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/features/highlight-modifier.scad0000644000175000017500000000015612076022156025673 0ustar chrysnchrysndifference() { sphere(r=10); #cylinder(h=30, r=6, center=true); } #if (true) cube([25,6,3], center=true); openscad-2013.01+dfsg.orig/testdata/scad/features/transform-tests.scad0000644000175000017500000000101211642654340025277 0ustar chrysnchrysnmodule mycyl() { cylinder(r1=10, r2=0, h=20); } translate([25,0,0]) scale([1,2,0.5]) mycyl(); translate([20,-30,0]) scale(0.5) mycyl(); translate([0,-20,0]) rotate([90,0,0]) mycyl(); translate([0,-40,0]) rotate([90,0,45]) mycyl(); rotate(v=[-1,0,0], a=45) mycyl(); multmatrix([[1,0,0,-25], [0,1,0,0], [0,0,1,0], [0,0,0,1]]) mycyl(); multmatrix([[1,0.4,0.1,-25], [0.4,0.8,0,-25], [0.2,0.2,0.5,0], [0,0,0,1]]) mycyl(); //FIXME: mirror() and scale()openscad-2013.01+dfsg.orig/testdata/scad/features/square-tests.scad0000644000175000017500000000045611640436733024601 0ustar chrysnchrysnsquare(); translate([2,0,0]) square([1,1], true); translate([4,0,0]) square(size=[1,1], center=true); translate([6,0,0]) square([0,0], true); translate([0,2,0]) square([1,0], true); translate([2,2,0]) square([0,1], true); translate([4,2,0]) square([1,2], true); translate([6,2,0]) square([2,1], true); openscad-2013.01+dfsg.orig/testdata/scad/features/cube-tests.scad0000644000175000017500000000022511640436732024210 0ustar chrysnchrysncube(); cube([1,1,0]); cube([1,0,1]); cube([0,1,1]); cube([0,0,0]); translate([2,0,0]) cube([2,3,1]); translate([6,0,0]) cube([2,4,2], center=true); openscad-2013.01+dfsg.orig/testdata/scad/features/highlight-and-background-modifier.scad0000644000175000017500000000037012076022156030546 0ustar chrysnchrysndifference() { sphere(r=10); %#cylinder(h=30, r=6, center=true); %#if (true) cube([6,25,3], center=true); } translate([13,0,0]) difference() { sphere(r=10); #%cylinder(h=30, r=6, center=true); #%if (true) cube([6,25,3], center=true); } openscad-2013.01+dfsg.orig/testdata/scad/features/sphere-tests.scad0000644000175000017500000000057311640436733024567 0ustar chrysnchrysnsphere(); translate([2,0,0]) sphere(r=0); translate([0,11,0]) sphere(5); translate([0,-11,0]) sphere(r=5); translate([11,-11,0]) sphere(5, $fn=5); translate([11,0,0]) sphere(5, $fn=10); translate([11,11,0]) sphere(5, $fn=15); translate([22,-11, 0]) sphere(5, $fa=20, $fs=0.3); translate([22, 0, 0]) sphere(5, $fa=30, $fs=0.3); translate([22, 11, 0]) sphere(5, $fa=40, $fs=0.3); openscad-2013.01+dfsg.orig/testdata/scad/features/linear_extrude-tests.scad0000644000175000017500000000101411640436733026302 0ustar chrysnchrysn// Empty rotate_extrude(); // No children rotate_extrude() { } // 3D child rotate_extrude() { cube(); } linear_extrude(height=10) square([10,10]); translate([19,5,0]) linear_extrude(height=10, center=true) difference() {circle(5); circle(3);} translate([31.5,2.5,0]) linear_extrude(height=10, twist=-45) polygon(points = [[-5,-2.5], [5,-2.5], [0,2.5]]); translate([0,20,0]) linear_extrude(height=20, twist=45, slices=2) square([10,10]); translate([19,20,0]) linear_extrude(height=20, twist=45, slices=10) square([10,10]); openscad-2013.01+dfsg.orig/testdata/scad/features/rotate_extrude-tests.scad0000644000175000017500000000127011640436733026332 0ustar chrysnchrysn// Empty rotate_extrude(); // No children rotate_extrude() { } // 3D child rotate_extrude() { cube(); } // Normal rotate_extrude() translate([20,0,0]) circle(r=10); // Sweep of polygon with hole translate([50,-20,0]) { difference() { rotate_extrude() translate([20,0,0]) difference() { circle(r=10); circle(r=8); } translate([-50,0,0]) cube([100,100,100], center=true); } } // Alternative, difference between two solid sweeps translate([50,50,0]) { difference() { difference() { rotate_extrude() translate([20,0,0]) circle(r=10); rotate_extrude() translate([20,0,0]) circle(r=8); } translate([-50,0,0]) cube([100,100,100], center=true); } } openscad-2013.01+dfsg.orig/testdata/scad/features/testcolornames.scad0000644000175000017500000001772511640436735025214 0ustar chrysnchrysn/* color samples for SVG named colors, for OpenSCAD Please see http://en.wikipedia.org/wiki/Web_colors and http://www.w3.org/TR/SVG/types.html#ColorKeywords for more information. */ $fn=5; radius=0.8; //translate([0,0]) color("Red colors") sphere(radius); translate([1,0]) color("IndianRed") sphere(radius); translate([2,0]) color("LightCoral") sphere(radius); translate([3,0]) color("Salmon") sphere(radius); translate([4,0]) color("DarkSalmon") sphere(radius); translate([5,0]) color("LightSalmon") sphere(radius); translate([6,0]) color("Red") sphere(radius); translate([7,0]) color("Crimson") sphere(radius); translate([8,0]) color("FireBrick") sphere(radius); translate([9,0]) color("DarkRed") sphere(radius); //translate([10,0]) color("Pink colors") sphere(radius); translate([0,1]) color("Pink") sphere(radius); translate([1,1]) color("LightPink") sphere(radius); translate([2,1]) color("HotPink") sphere(radius); translate([3,1]) color("DeepPink") sphere(radius); translate([4,1]) color("MediumVioletRed") sphere(radius); translate([5,1]) color("PaleVioletRed") sphere(radius); //translate([6,1]) color("Orange colors") sphere(radius); translate([7,1]) color("LightSalmon") sphere(radius); translate([8,1]) color("Coral") sphere(radius); translate([9,1]) color("Tomato") sphere(radius); translate([10,1]) color("OrangeRed") sphere(radius); translate([0,2]) color("DarkOrange") sphere(radius); translate([1,2]) color("Orange") sphere(radius); //translate([2,2]) color("Yellow colors") sphere(radius); translate([3,2]) color("Gold") sphere(radius); translate([4,2]) color("Yellow") sphere(radius); translate([5,2]) color("LightYellow") sphere(radius); translate([6,2]) color("LemonChiffon") sphere(radius); translate([7,2]) color("LightGoldenrodYellow") sphere(radius); translate([8,2]) color("PapayaWhip") sphere(radius); translate([9,2]) color("Moccasin") sphere(radius); translate([10,2]) color("PeachPuff") sphere(radius); translate([0,3]) color("PaleGoldenrod") sphere(radius); translate([1,3]) color("Khaki") sphere(radius); translate([2,3]) color("DarkKhaki") sphere(radius); //translate([3,3]) color("Purple colors") sphere(radius); translate([4,3]) color("Lavender") sphere(radius); translate([5,3]) color("Thistle") sphere(radius); translate([6,3]) color("Plum") sphere(radius); translate([7,3]) color("Violet") sphere(radius); translate([8,3]) color("Orchid") sphere(radius); translate([9,3]) color("Fuchsia") sphere(radius); translate([10,3]) color("Magenta") sphere(radius); translate([0,4]) color("MediumOrchid") sphere(radius); translate([1,4]) color("MediumPurple") sphere(radius); translate([2,4]) color("BlueViolet") sphere(radius); translate([3,4]) color("DarkViolet") sphere(radius); translate([4,4]) color("DarkOrchid") sphere(radius); translate([5,4]) color("DarkMagenta") sphere(radius); translate([6,4]) color("Purple") sphere(radius); translate([7,4]) color("Indigo") sphere(radius); translate([8,4]) color("DarkSlateBlue") sphere(radius); translate([9,4]) color("SlateBlue") sphere(radius); translate([10,4]) color("MediumSlateBlue") sphere(radius); //translate([0,5]) color("Green colors") sphere(radius); translate([1,5]) color("GreenYellow") sphere(radius); translate([2,5]) color("Chartreuse") sphere(radius); translate([3,5]) color("LawnGreen") sphere(radius); translate([4,5]) color("Lime") sphere(radius); translate([5,5]) color("LimeGreen") sphere(radius); translate([6,5]) color("PaleGreen") sphere(radius); translate([7,5]) color("LightGreen") sphere(radius); translate([8,5]) color("MediumSpringGreen") sphere(radius); translate([9,5]) color("SpringGreen") sphere(radius); translate([10,5]) color("MediumSeaGreen") sphere(radius); translate([0,6]) color("SeaGreen") sphere(radius); translate([1,6]) color("ForestGreen") sphere(radius); translate([2,6]) color("Green") sphere(radius); translate([3,6]) color("DarkGreen") sphere(radius); translate([4,6]) color("YellowGreen") sphere(radius); translate([5,6]) color("OliveDrab") sphere(radius); translate([6,6]) color("Olive") sphere(radius); translate([7,6]) color("DarkOliveGreen") sphere(radius); translate([8,6]) color("MediumAquamarine") sphere(radius); translate([9,6]) color("DarkSeaGreen") sphere(radius); translate([10,6]) color("LightSeaGreen") sphere(radius); translate([0,7]) color("DarkCyan") sphere(radius); translate([1,7]) color("Teal") sphere(radius); //translate([2,7]) color("Blue/Cyan colors") sphere(radius); translate([3,7]) color("Aqua") sphere(radius); translate([4,7]) color("Cyan") sphere(radius); translate([5,7]) color("LightCyan") sphere(radius); translate([6,7]) color("PaleTurquoise") sphere(radius); translate([7,7]) color("Aquamarine") sphere(radius); translate([8,7]) color("Turquoise") sphere(radius); translate([9,7]) color("MediumTurquoise") sphere(radius); translate([10,7]) color("DarkTurquoise") sphere(radius); translate([0,8]) color("CadetBlue") sphere(radius); translate([1,8]) color("SteelBlue") sphere(radius); translate([2,8]) color("LightSteelBlue") sphere(radius); translate([3,8]) color("PowderBlue") sphere(radius); translate([4,8]) color("LightBlue") sphere(radius); translate([5,8]) color("SkyBlue") sphere(radius); translate([6,8]) color("LightSkyBlue") sphere(radius); translate([7,8]) color("DeepSkyBlue") sphere(radius); translate([8,8]) color("DodgerBlue") sphere(radius); translate([9,8]) color("CornflowerBlue") sphere(radius); translate([10,8]) color("RoyalBlue") sphere(radius); translate([0,9]) color("Blue") sphere(radius); translate([1,9]) color("MediumBlue") sphere(radius); translate([2,9]) color("DarkBlue") sphere(radius); translate([3,9]) color("Navy") sphere(radius); translate([4,9]) color("MidnightBlue") sphere(radius); //translate([5,9]) color("Brown colors") sphere(radius); translate([6,9]) color("Cornsilk") sphere(radius); translate([7,9]) color("BlanchedAlmond") sphere(radius); translate([8,9]) color("Bisque") sphere(radius); translate([9,9]) color("NavajoWhite") sphere(radius); translate([10,9]) color("Wheat") sphere(radius); translate([0,10]) color("BurlyWood") sphere(radius); translate([1,10]) color("Tan") sphere(radius); translate([2,10]) color("RosyBrown") sphere(radius); translate([3,10]) color("SandyBrown") sphere(radius); translate([4,10]) color("Goldenrod") sphere(radius); translate([5,10]) color("DarkGoldenrod") sphere(radius); translate([6,10]) color("Peru") sphere(radius); translate([7,10]) color("Chocolate") sphere(radius); translate([8,10]) color("SaddleBrown") sphere(radius); translate([9,10]) color("Sienna") sphere(radius); translate([10,10]) color("Brown") sphere(radius); translate([0,11]) color("Maroon") sphere(radius); //translate([1,11]) color("White colors") sphere(radius); translate([2,11]) color("White") sphere(radius); translate([3,11]) color("Snow") sphere(radius); translate([4,11]) color("Honeydew") sphere(radius); translate([5,11]) color("MintCream") sphere(radius); translate([6,11]) color("Azure") sphere(radius); translate([7,11]) color("AliceBlue") sphere(radius); translate([8,11]) color("GhostWhite") sphere(radius); translate([9,11]) color("WhiteSmoke") sphere(radius); translate([10,11]) color("Seashell") sphere(radius); translate([0,12]) color("Beige") sphere(radius); translate([1,12]) color("OldLace") sphere(radius); translate([2,12]) color("FloralWhite") sphere(radius); translate([3,12]) color("Ivory") sphere(radius); translate([4,12]) color("AntiqueWhite") sphere(radius); translate([5,12]) color("Linen") sphere(radius); translate([6,12]) color("LavenderBlush") sphere(radius); translate([7,12]) color("MistyRose") sphere(radius); //translate([8,12]) color("Gray colors") sphere(radius); translate([9,12]) color("Gainsboro") sphere(radius); translate([10,12]) color("LightGrey") sphere(radius); translate([0,13]) color("Silver") sphere(radius); translate([1,13]) color("DarkGray") sphere(radius); translate([2,13]) color("Gray") sphere(radius); translate([3,13]) color("DimGray") sphere(radius); translate([4,13]) color("LightSlateGray") sphere(radius); translate([5,13]) color("SlateGray") sphere(radius); translate([6,13]) color("DarkSlateGray") sphere(radius); translate([7,13]) color("Black") sphere(radius); openscad-2013.01+dfsg.orig/testdata/scad/features/for-nested-tests.scad0000644000175000017500000000011611640436733025340 0ustar chrysnchrysnfor(x=[0:3], y=[0:0.5:1], z=[0,2,3]) { translate(10*[x,y,z]) sphere(r=3); } openscad-2013.01+dfsg.orig/testdata/scad/features/surface-simple.scad0000644000175000017500000000005411676112354025051 0ustar chrysnchrysnsurface("surface-simple.dat", center=true); openscad-2013.01+dfsg.orig/testdata/scad/features/render-tests.scad0000644000175000017500000000177211674410135024555 0ustar chrysnchrysnmodule edgeprofile() { difference() { cube([20, 20, 150], center = true); translate([-10, -10, 0]) cylinder(h = 80, r = 10, center = true); } } module rendered_edgeprofile() { render(convexity = 2) edgeprofile(); } module mycube() { difference() { cube(100, center = true); translate([ -50, -50, 0 ]) rotate(180, [0, 0, 1]) edgeprofile(); translate([ 50, -50, 0 ]) rotate(270, [0, 0, 1]) edgeprofile(); } } module rendered_mycube() { difference() { cube(100, center = true); translate([ -50, -50, 0 ]) rotate(180, [0, 0, 1]) rendered_edgeprofile(); translate([ 50, -50, 0 ]) rotate(270, [0, 0, 1]) rendered_edgeprofile(); } } // Empty render(); // No children render() { } mycube(); translate([110,0,0]) rendered_mycube(); // This may trigger a convexity issue translate([-110,0,0]) { difference() { render(convexity=2) difference() { cube(100, center = true); cylinder(r=30,h=110,center=true); } translate([-55, -55, 45]) cube(10); } } openscad-2013.01+dfsg.orig/testdata/scad/features/intersection-tests.scad0000644000175000017500000000165511701151225025775 0ustar chrysnchrysn// Empty intersection(); // No children intersection() { } intersection() { sphere(r=5); translate([0,0,3]) cube([4,4,6], center=true); } translate([0,12,0]) intersection() { cube([10,10,10], center=true); cylinder(r=4, h=12, center=true); } translate([12,0,0]) intersection() { cube([10,10,10], center=true); cylinder(r=4, h=12, center=true); rotate([0,90,0]) cylinder(r=4, h=12, center=true); } translate([12,12,0]) intersection() { cube([10,10,10], center=true); translate([0,0,7.01]) cylinder(r=4, h=4, center=true); } translate([24,0,0]) intersection() { cube([10,10,10], center=true); translate([0,0,6.99]) cylinder(r=4, h=4, center=true); } translate([-12,0,0]) intersection() { cube([10,10,10], center=true); translate([0,-10,-10]) cube([10,10,10], center=true); } translate([-12,12,0]) intersection() { cube([10,10,10], center=true); translate([0,-9.99,-9.99]) cube([10,10,10], center=true); } openscad-2013.01+dfsg.orig/testdata/scad/features/ifelse-tests.scad0000644000175000017500000000150711640436733024546 0ustar chrysnchrysnif (true) cube(2, true); else cylinder(r=1,h=2); translate([3,0,0]) if (false) cylinder(r=1,h=2); else cube(2, true); translate([0,3,0]) if (false) cylinder(r=1,h=2); else if (true) cube(2, true); else sphere(); translate([3,3,0]) if (false) cylinder(r=1,h=2); else if (false) sphere(); else cube(2, true); translate([6,0,0]) if (0) cylinder(r=1,h=2); else cube(2, true); translate([6,3,0]) if (1) cube(2, true); else cylinder(r=1,h=2); translate([9,0,0]) if ("") cylinder(r=1,h=2); else cube(2, true); translate([9,3,0]) if ("hello") cube(2, true); else cylinder(r=1,h=2); translate([12,0,0]) if ([]) cylinder(r=1,h=2); else cube(2, true); translate([12,3,0]) if ([1,2,3]) cube(2, true); else cylinder(r=1,h=2); translate([15,0,0]) if (ILLEGAL) cylinder(r=1,h=2); else cube(2, true); openscad-2013.01+dfsg.orig/testdata/scad/features/minkowski2-tests.scad0000644000175000017500000000131011640436733025364 0ustar chrysnchrysnmodule roundedBox2dSimple() { minkowski() { square([10,10]); circle(r=5); } } module roundedBox2dCut() { minkowski() { difference() { square([10,10]); square([5,5]); } circle(r=5); } } // Not quite correct, result does not contain a hole, since the impl currently returns the outer boundary of the polygon_with_holes. module roundedBox2dHole() { minkowski() { difference() { square([10,10], center=true); square([8,8], center=true); } circle(r=2); } } translate([-20,5,0]) roundedBox2dHole(); translate([0,0,0]) roundedBox2dCut(); translate([25,0,0]) roundedBox2dSimple(); openscad-2013.01+dfsg.orig/testdata/scad/features/union-tests.scad0000644000175000017500000000102211640436733024417 0ustar chrysnchrysntranslate([-12,0,0]) union() { cube([10,10,10]); translate([4,4,8]) cube([2,2,10]); } union() { cube([10,10,10]); translate([0,0,10]) cube([2,2,10]); } translate([12,0,0]) union() { cube([10,10,10]); translate([0,0,11]) cube([2,2,10]); } translate([24,0,0]) union() { cube([10,10,10]); translate([4,4,10]) cube([2,2,10]); } translate([-12,12,0]) union() { cube([10,10,10]); translate([-2,10,10]) cube([2,2,10]); } translate([0,12,0]) union() { cube([10,10,10]); translate([0,10,10]) cube([2,2,10]); } openscad-2013.01+dfsg.orig/testdata/scad/features/surface.dat0000644000175000017500000011523011640436735023426 0ustar chrysnchrysn# Created by Octave 3.1.54, Sat Jul 25 03:55:47 2009 CEST # name: d # type: matrix # rows: 46 # columns: 46 4.546487134128409 3.049135365122645 1.430224191212503 -0.2457055078678564 -1.91183970371809 -3.501754883740146 -4.952066146974032 -6.204954160076457 -7.210470231681788 -7.928527609104572 -8.330499610668049 -8.400360881165891 -8.135326272203333 -7.545961877274642 -6.655763794958727 -5.500221413615028 -4.125402561462865 -2.586116927645778 -0.9437309728873401 0.7362785576448079 2.386934985545012 3.942431847980459 5.340756393700049 6.526161835734216 7.451389799872247 8.079554366909637 8.385612597846531 8.357362916838071 7.995931549519037 7.315727623941807 6.343868724111537 5.119099797486346 3.690248516188934 2.114278671803671 0.4540192087657636 -1.224340567385163 -2.853889748744539 -4.369663351791345 -5.71123226627233 -6.825112373132667 -7.666896787563758 -8.203026221366581 -8.412126885869672 -8.285862597434599 -7.829267114791266 -7.060543458962299 5.035828673073257 3.377315902755755 1.584160205132016 -0.2721509607637287 -2.117612326675841 -3.878651171635513 -5.48506043417364 -6.872797646310392 -7.986538104655897 -8.781880491747168 -9.227117016458916 -9.304497503575988 -9.01093703726527 -8.358138946934957 -7.372128232423011 -6.09221402938029 -4.569422478079272 -2.864462472223704 -1.045305386934624 0.815524725479631 2.643842440626112 4.366758500792109 5.915585679634834 7.228577125140624 8.25338801176127 8.949162363424968 9.288161852373825 9.256871638758197 8.856539164652959 8.103124422478512 7.026663680467649 5.670072031436031 4.087432503458046 2.34183994020634 0.5028856086418853 -1.356117185191807 -3.161055866327164 -4.839973225360668 -6.325936125317769 -7.559703914604285 -8.492090164840738 -9.085923578545179 -9.317529891462899 -9.17767569077386 -8.67193652212408 -7.820474610215396 5.324407614299007 3.570853513082628 1.674940750779526 -0.2877466136759709 -2.238962428681152 -4.100917877109334 -5.799382670971877 -7.266644378753076 -8.444207906375773 -9.285127512010241 -9.755878384655105 -9.837693172558298 -9.52731017830761 -8.837103392413644 -7.794589181356518 -6.441329296887258 -4.831273940141129 -3.028610937368119 -1.105206773856724 0.8622584960466719 2.795348240726728 4.616996272280487 6.254579232232685 7.64281185566189 8.726349688693348 9.461995497225455 9.820421404336635 9.787338100188716 9.364064511717672 8.567475221178798 7.429327729803009 5.99499638643935 4.321663455453438 2.476039440296261 0.5317035462487614 -1.4338296903001 -3.342200661807952 -5.117328639853587 -6.688444873692612 -7.992913917025852 -8.978730705585699 -9.60659383493706 -9.851472383449366 -9.703603816152382 -9.168883186197988 -8.268628117693945 5.400719226082497 3.622032462322777 1.698946694274643 -0.2918707171379004 -2.271052164109463 -4.159693928017514 -5.882501821688773 -7.370792931037254 -8.565233786107424 -9.418205799283712 -9.895703668109622 -9.97869105938673 -9.663859527706666 -8.963760412729174 -7.906304456877885 -6.53364909211736 -4.900517756176106 -3.07201824177415 -1.121047054386814 0.8746167413903643 2.835412327701047 4.683168972167305 6.344222448307544 7.752351795785409 8.851419341126077 9.59760872960501 9.961171745040346 9.927614277296112 9.498274156714555 8.690267819042166 7.535807927150502 6.080919153820417 4.383603323277566 2.511527061495859 0.5393241413542663 -1.454379930367366 -3.39010246382654 -5.190672310139893 -6.784306431561657 -8.107471664674037 -9.107417587122166 -9.744279510489891 -9.992667759626542 -9.842679878873495 -9.300295411722241 -8.387137515284946 5.261721205277139 3.528812407274513 1.655220994405354 -0.2843588561588514 -2.212602216474262 -4.052636108688901 -5.731104188082895 -7.181091229043116 -8.344790823945194 -9.175809942206806 -9.641018474015334 -9.721870023257994 -9.41514129380829 -8.733060592170913 -7.702820323490013 -6.365492916166737 -4.774393393750382 -2.992953873194801 -1.092194726527053 0.852106777267553 2.762437472830941 4.562638503728103 6.180941535720031 7.552829933771732 8.623610836697077 9.350595588940964 9.704801602564489 9.672107801566185 9.253817584620604 8.466606862686255 7.341859243059576 5.924414863988718 4.270782759862838 2.446888024335571 0.5254435848797225 -1.416948632172156 -3.302851578699326 -5.057080255534608 -6.609699101121306 -7.898810101657983 -8.873020469578222 -9.493491511811653 -9.735487005914017 -9.589359355196404 -9.06093420796045 -8.171278207284479 4.91295496433882 3.294909737359715 1.545506856841021 -0.2655105049310103 -2.06594280073829 -3.784012476539642 -5.351225516043248 -6.705102080990831 -7.7916673851425 -8.567603498676819 -9.001976297355174 -9.077468708436898 -8.791071087722237 -8.154201204569132 -7.19224905145976 -5.943564625123038 -4.457929033185433 -2.794569878503285 -1.019800041540425 0.7956260049135155 2.579332953294609 4.260210036383667 5.771245989192293 7.052200576631698 8.052006181586624 8.730803709656549 9.061531645466804 9.031004909888981 8.640440507537887 7.905409008638012 6.855213799524476 5.531722849102 3.987699565046725 2.284699283246702 0.4906152508091408 -1.32302806345222 -3.083926423880241 -4.721878369680736 -6.171583925630922 -7.375247906025503 -8.284884026347463 -8.864227965002353 -9.090183107381513 -8.953741335000977 -8.460342150758638 -7.629655823119084 4.368324712698232 2.929649413905326 1.374178238023352 -0.2360770877384193 -1.836920764996389 -3.364532208092634 -4.75801036944758 -5.961801672142627 -6.927914755722455 -7.61783374029087 -8.004053733098379 -8.071177361819418 -7.816528619197737 -7.250259547011087 -6.394945506202153 -5.284685168478457 -3.96374110987594 -2.484775201531057 -0.9067491470627086 0.7074261344866228 2.29339856846624 3.787940438758798 5.131469077295334 6.270422237007184 7.159393449591173 7.762942238112459 8.057007016981043 8.029864351438505 7.682596333906389 7.029047444376102 6.095272614680437 4.918498500582482 3.545639372485864 2.031426791520294 0.4362276349147517 -1.176362540898928 -2.742054854433646 -4.198430093976552 -5.487427174584921 -6.55765785032041 -7.366455401449627 -7.881575621917326 -8.082482294089306 -7.961165902943748 -7.522462950159604 -6.783863138057164 3.649543139808145 2.44759321336187 1.148065469325888 -0.1972320220420281 -1.534666495092764 -2.810918657904327 -3.975108364192017 -4.980823044179203 -5.787968027290999 -6.36436499014402 -6.687034804755113 -6.743113643859221 -6.530365821108268 -6.05727292083076 -5.342695664029783 -4.415121990955059 -3.311531336824084 -2.075920378435365 -0.7575490255040018 0.5910234164900096 1.916033619950813 3.164657609377909 4.287116686573691 5.238661950254811 5.981358293533024 6.485596756915665 6.731274944084161 6.708598440998452 6.418471288276723 5.872459939948812 5.092332145434113 4.109189138064303 2.962225727056051 1.697167724153914 0.3644489998122177 -0.9827991560666609 -2.290866210995255 -3.50760365933783 -4.584504018666033 -5.478634670009056 -6.15434944589027 -6.584709730536586 -6.752558417479561 -6.651203909247942 -6.284686890242273 -5.667619237398981 2.785265798733263 1.867959195228706 0.8761829532964909 -0.1505239380284582 -1.171229914949966 -2.145242651192145 -3.033731332635951 -3.801274719340386 -4.417273278600766 -4.857169091755243 -5.103424900904859 -5.146223264043962 -4.983857945492241 -4.622801938126964 -4.077449405583663 -3.369541832375409 -2.527301259514483 -1.584305160797028 -0.5781478148826403 0.4510584599601819 1.462282457401677 2.415209867765704 3.271850482337386 3.99805274309953 4.564865257579304 4.949690999504721 5.137188180933072 5.119881880922376 4.898462047040874 4.481755989334729 3.886376463332679 3.136059371907682 2.260717489732352 1.295247935347975 0.2781409331724952 -0.750054670284097 -1.748347960970855 -2.676940135684732 -3.498811154761955 -4.181195614235898 -4.696888999096009 -5.025332241452506 -5.153431345695215 -5.076079404778086 -4.796360196487312 -4.325425242952448 1.809948699677379 1.213855538667884 0.5693697878743604 -0.09781493961144824 -0.7611000941278394 -1.394042589681589 -1.971409006340514 -2.470181567057512 -2.870475783804629 -3.156333189361605 -3.316357551044089 -3.344169202537879 -3.238659381062657 -3.004034430245145 -2.649648106472589 -2.189628674143088 -1.642315656348354 -1.029528695961759 -0.37569767533284 0.2931112260290228 0.950234707775073 1.569475330361154 2.126145924291543 2.598053789661878 2.966385449071229 3.216456681596708 3.338297936342937 3.327051786975494 3.183166581980383 2.912378570424738 2.5254832158083 2.037904815000729 1.469081580199606 0.8416906987509336 0.180744265251656 -0.4874078717316904 -1.136128594973583 -1.739555456394979 -2.273631731254591 -2.717065483848913 -3.052178409798129 -3.26561061425464 -3.348853228751029 -3.298587632934588 -3.116817757488257 -2.810790193738072 0.7624746575887673 0.5113592923230357 0.2398576457599462 -0.0412063682250215 -0.3206276143430717 -0.5872664492762099 -0.8304928241031526 -1.04061007080476 -1.209241477818354 -1.32966424309348 -1.397077490994629 -1.408793668062789 -1.364345687290786 -1.265505549408286 -1.116213698804572 -0.9224219304455371 -0.6918561105903662 -0.4337081708841666 -0.1582696550500929 0.1234785724820486 0.4003040989885004 0.6611707643009137 0.895678637685649 1.094478630263245 1.249645213679287 1.354992385909446 1.406320287639134 1.401582637400947 1.340968310359362 1.226893808453956 1.063906922092792 0.8585054241002257 0.6188780240193119 0.3545779101032878 0.07614189384674533 -0.2053296594378249 -0.4786153671558212 -0.7328201905434427 -0.9578097854819362 -1.144614526816829 -1.285787099007545 -1.375699397096658 -1.410766901494015 -1.389591581461206 -1.31301763018535 -1.184097809460741 -0.3153968429699904 -0.2115232353191719 -0.09921686377634671 0.01704497102832257 0.132627276626609 0.2429221512353662 0.3435324862595468 0.4304472651360086 0.5002014699063924 0.5500142205486248 0.5778996398878249 0.5827460242524682 0.5643601635915864 0.5234750441497907 0.46172062661877 0.3815588647481526 0.286185555018652 0.1794029303213007 0.0654680769307238 -0.05107678209061699 -0.1655853709921119 -0.2734925936870061 -0.3704965297273865 -0.452729938296945 -0.5169144328985401 -0.5604911802782915 -0.5817229130325473 -0.5797631889770021 -0.5546901361254837 -0.5075033379725885 -0.4400839832541203 -0.3551198688886271 -0.2559982459960941 -0.1466707808848774 -0.03149601458619469 0.08493439842261759 0.1979787449923144 0.3031303037572243 0.3961970138943235 0.4734685993594334 0.5318644858846474 0.5690566137530826 0.5835622501931699 0.5748031012552267 0.5431283665663152 0.4898008178430777 -1.380694466691827 -0.9259729990693727 -0.4343359100507957 0.07461678107528391 0.5805947366067604 1.063426212162366 1.503862240474527 1.884344026970699 2.189702963502988 2.407765352887697 2.529837735795723 2.5510534715422 2.470566755693045 2.291586339618643 2.021247607702515 1.670328112082959 1.25281790565982 0.7853618028335425 0.2865958032807762 -0.2235958665434362 -0.7248734747661234 -1.197252665020412 -1.6219011696696 -1.981889592889172 -2.262866332254524 -2.453629731840534 -2.546574656894428 -2.537995686558978 -2.428234837308953 -2.22166792783356 -1.926530128954008 -1.55458765335044 -1.120668673792816 -0.6420721706855765 -0.1378782763090046 0.3718123898439437 0.8666800693356641 1.32699594943008 1.734408688598593 2.072676026595801 2.328312312120061 2.491126133174475 2.554626616502324 2.516282198220691 2.377621549283654 2.144172632195354 -2.390948159060002 -1.603507141423449 -0.7521393542177419 0.1292138555276426 1.00541571661104 1.84153482584592 2.604237752873515 3.263117938841503 3.791907909952001 4.169526478750082 4.380919184542068 4.417658467236295 4.278279647569251 3.968339319245766 3.500193825082827 2.89250664861418 2.169504359897848 1.360010778619294 0.4962978593593797 -0.3872008893947277 -1.255263160571735 -2.073282050748716 -2.808645728182195 -3.432037563627176 -3.918604891831163 -4.248949808870655 -4.409902505366961 -4.395046305226375 -4.20497347826705 -3.847261628290367 -3.336171597929878 -2.692078933858195 -1.940661578039921 -1.111876169216943 -0.2387637662554357 0.6438673946040369 1.500829594281713 2.29795845417703 3.003474962131552 3.58925240135922 4.031937673885623 4.3138823148693 4.423846081201991 4.357445064530748 4.117326463849724 3.713063050030014 -3.30588229339968 -2.217114514208372 -1.039957375845013 0.1786595813180147 1.390153944766803 2.546227257322191 3.600790524212898 4.511801635854819 5.2429414540886 5.765061741606376 6.057347210190657 6.108145360569123 5.915431030789019 5.486887133033441 4.839598360157432 3.99937007289772 2.999699521573657 1.880440416423686 0.6862140859437864 -0.535369434668916 -1.735609465377321 -2.86665622373352 -3.883418444706294 -4.745361027124189 -5.418121040243312 -5.874877665357591 -6.097421457202605 -6.076880297075037 -5.814073096207792 -5.31947714836337 -4.612810433194559 -3.722245522619361 -2.683286429282323 -1.537353173609781 -0.3301304983038976 0.8902534381823263 2.075145779445412 3.177308606983185 4.152802166937654 4.962736609421381 5.57482240410846 5.964657621913146 6.116700762897727 6.02489034683103 5.69288656527711 5.133925361308007 -4.089021333016357 -2.742332527821242 -1.286315578672616 0.2209827133941487 1.719471122029165 3.149409643133779 4.453791140303494 5.580614039459991 6.484955467509192 7.130762185529173 7.492287917633426 7.555119773743378 7.316752846033308 6.786690071700684 5.986063380848329 4.946791233116909 3.710306129423557 2.325902828898148 0.8487731223953848 -0.6621944900388012 -2.146762497830699 -3.545745859334898 -4.803371522675512 -5.869501921322429 -6.701633800650617 -7.266592688575257 -7.541855457065665 -7.516448248184021 -7.191383967171353 -6.579621901111978 -5.705551073052852 -4.604017928618686 -3.31893711818922 -1.901540758369277 -0.4083359691720135 1.101147886537466 2.566732450883808 3.929989492206033 5.136570254273005 6.138372169686898 6.895456557448895 7.377640852136887 7.565701887542177 7.452142263644087 7.041489244289306 6.35011426946898 -4.709143995738668 -3.158222397480602 -1.481392438582083 0.254495962038536 1.980238411761126 3.627035005010469 5.129233158380877 6.426944971957868 7.468434770900569 8.212181643536248 8.628534749081897 8.700895403097618 8.426378814655045 7.815929093848203 6.89388294466016 5.696999437374171 4.272994540441402 2.678638835395257 0.9774942529155544 -0.7626199407663925 -2.472330883996379 -4.083477796772693 -5.531829335951035 -6.759644296201945 -7.717973569654379 -8.368611592358691 -8.685619479556678 -8.656359127161986 -8.281997053088212 -7.577457891860837 -6.57082939653611 -5.302242668622715 -3.822272257705642 -2.189919913751454 -0.4702623735279068 1.268143043529455 2.955991599298102 4.525994098173628 5.915559494955271 7.069290202300532 7.941190617715322 8.496500823077938 8.713082352883248 8.582300785000461 8.109369967835956 7.313144160650595 -5.141527947914094 -3.448203906499507 -1.617410856769451 0.2778632597848961 2.162059845019839 3.960061927008222 5.600188836664843 7.017053889821449 8.154171147984922 8.966207334453294 9.420789129000436 9.499793789993564 9.200071650912507 8.533571687614522 7.52686515037404 6.220086251984656 4.665332143345871 2.924585964458808 1.067245772233472 -0.8326421410420161 -2.699335239708387 -4.458414360612515 -6.039750570299125 -7.380300984282985 -8.426622087910019 -9.137000360635794 -9.48311526245501 -9.451168284460866 -9.042433051851468 -8.273204548512339 -7.1741494874307 -5.789083725623066 -4.173225464184948 -2.390993872864271 -0.513440901049977 1.384581339232713 3.227404690819291 4.941561602047335 6.458714046201143 7.718377942983702 8.670334467929564 9.276632118461686 9.513099720536216 9.37031005707512 8.853955701361743 7.984622072107995 -5.368935405835869 -3.600716407202944 -1.68894820813253 0.2901530262118541 2.257686775031992 4.135213676674213 5.847882658448798 7.327415012691896 8.514826453374175 9.362778633449111 9.837466375364958 9.919965376815327 9.606986662953039 8.911007707438348 7.859774994939016 6.495197856345744 4.871677676002062 3.053939080184086 1.11444957050123 -0.8694695267085139 -2.818725617658153 -4.655608013234817 -6.306886008944467 -7.706728362007201 -8.799327775264402 -9.541125758006334 -9.902549165539984 -9.869189187144494 -9.442375779884992 -8.639124647421326 -7.491458877599298 -6.045132282992935 -4.357805340781697 -2.496746451483471 -0.5361501601036421 1.445820746239842 3.370151341981964 5.160124638846803 6.744380050075756 8.059758311830187 9.05381944373006 9.686933365387848 9.933859822653556 9.784754636897503 9.245562161347152 8.337778298482458 -5.382300351782382 -3.609679707468892 -1.693152524221641 0.2908753071145678 2.263306857866227 4.145507506472566 5.862439852701268 7.345655222001519 8.536022498156086 9.386085494285842 9.861954881263999 9.944659248324436 9.630901433341164 8.933189970277535 7.879340413410047 6.511366418956426 4.883804793183958 3.061541282044484 1.117223781242091 -0.8716339061148982 -2.825742300234944 -4.667197265990103 -6.322585804942894 -7.725912799925885 -8.82123203210352 -9.564876580168589 -9.927199682695818 -9.893756660964112 -9.465880782714354 -8.660630108971949 -7.510107442983564 -6.060180492757929 -4.368653270291459 -2.502961628021068 -0.5374848041936438 1.449419842645591 3.378540694267371 5.172969790010383 6.761168904475835 8.079821550822126 9.076357209288462 9.711047147921935 9.958588281749131 9.809111926925592 9.26857723401821 8.358533615477349 -5.181089967534271 -3.474736468801078 -1.629856192221796 0.2800013074327352 2.178696038555143 3.990533033893282 5.64328007002529 7.071047338165455 8.216914262913187 9.035198745970977 9.493278367245317 9.572890937789841 9.270862555648927 8.599234139312866 7.58478139429494 6.267947350248265 4.701230024998847 2.947089494241964 1.075457805428347 -0.8390489922843309 -2.720105554446849 -4.492720091943021 -6.086224056971523 -7.437089475039214 -8.491461604830073 -9.207305956793 -9.556084075592718 -9.52389127826568 -9.112010990051067 -8.336863578276587 -7.229351724130582 -5.83362843028209 -4.2053367799973 -2.409391623001631 -0.5173916252718265 1.395235143833869 3.252238290674027 4.979584959896401 6.508411290756739 7.777767801934123 8.737049255013993 9.348012125649753 9.586299252193967 9.442410878869843 8.922083381055785 8.046060574101277 -4.773325876155424 -3.201266452287175 -1.501582637146705 0.2579645392187804 2.007227483459789 3.676468602107865 5.199140519357471 6.514539110936956 7.570223585980346 8.324107135872664 8.746134802496814 8.819481674569811 8.541223643761541 7.922453979666336 6.987841076151081 5.774645000337366 4.331232051306271 2.715146548382711 0.9908167207155332 -0.773013842903595 -2.506026783992408 -4.139132345428268 -5.607223762039341 -6.851772861875711 -7.823163399728696 -8.482669100254197 -8.803997552362862 -8.774338404679673 -8.394874073827912 -7.680732605209696 -6.660384565575114 -5.374508011369955 -3.874366782992262 -2.219766777248058 -0.4766716749741102 1.285426822756593 2.996279409462914 4.587679791420381 5.996183857354676 7.165638994948616 8.049422718295403 8.612301359286031 8.831834722770459 8.699270706324162 8.219894218952904 7.412816488448197 -4.175264345195113 -2.800172044501049 -1.3134457208466 0.2256435388803507 1.755737102771503 3.215834968923976 4.547727643019533 5.698316767172359 6.621731983896433 7.281159642506184 7.650310443197156 7.714467508468514 7.471073098587216 6.929830580599756 6.112317585708757 5.05112577720909 3.78856152372123 2.374959277779841 0.8666749000507603 -0.676161070992536 -2.192040633885014 -3.620530454088728 -4.904681150332459 -5.993297686728825 -6.842980357299839 -7.419854995298554 -7.700923429341156 -7.674980347925095 -7.343060019838303 -6.718395061126436 -5.825888892449073 -4.701122918285288 -3.388938008620714 -1.941646834964742 -0.4169483292196312 1.12437259065492 2.620868323502963 4.012878306921188 5.244907495612248 6.267838773715967 7.040891099220648 7.533245315416116 7.725272813416223 7.609318062853523 7.190003813716571 6.484046801895833 -3.410748200600429 -2.287443613754537 -1.072945868473995 0.1843268427061244 1.434251024344538 2.626996143683169 3.715011216738866 4.654920515979006 5.409252823698197 5.947935291220925 6.249492348477882 6.301901867214561 6.103074445306729 5.660936704629639 4.993115281657762 4.126234109092623 3.094853003682659 1.940089875389279 0.7079814860717643 -0.5523518909306521 -1.790664741088856 -2.957589438789203 -4.00660437877821 -4.895888645756584 -5.589989282298683 -6.061234686386791 -6.290837790860787 -6.269645044499783 -5.998501335223617 -5.488216307077675 -4.759133413836612 -3.840318889699831 -2.768402970257767 -1.586119560592286 -0.3406025693357043 0.9184931715267248 2.140971488113207 3.278096027694826 4.284533223282468 5.120159599884286 5.751661370836673 6.153862553350843 6.310728655499175 6.216005920808633 5.873470645796447 5.296778630944794 -2.510256288486159 -1.683522024573375 -0.7896710502018139 0.1356616169901937 1.05558588361779 1.933427272159427 2.734189016642643 3.425947273264703 3.981123823303499 4.377585529669897 4.59952671523833 4.638099285316098 4.491765473256983 4.166359146364736 3.674853228013503 3.036842508131333 2.277762460760673 1.427875211974583 0.5210630844078612 -0.4065221840245499 -1.317900695834841 -2.176738665778339 -2.948796934213331 -3.60329597434807 -4.114142974843539 -4.460972077860914 -4.629956301545421 -4.614358778159311 -4.414801331739156 -4.03923968793379 -3.502646304328436 -2.826413465809092 -2.037500441671404 -1.16735870462873 -0.2506780598459248 0.6759963281225712 1.575720875718599 2.412626404474485 3.153348131966858 3.768355820403181 4.233131054014477 4.529144710919736 4.644595660743251 4.574881238442103 4.322780738036853 3.898344610929531 -1.509688379721747 -1.012483724933438 -0.4749145391091887 0.08158799070985261 0.6348378648050846 1.162778756577268 1.644363328685269 2.060392323967141 2.394279979236409 2.632715247320912 2.766192466508119 2.789390321280759 2.701383986374111 2.505681996640854 2.210086372838312 1.826381579681559 1.369864716423261 0.8587356697792575 0.3133715418782656 -0.2444857204963248 -0.7925961087140347 -1.309108191258972 -1.773430261348203 -2.167051263300292 -2.474278769910309 -2.682864590002175 -2.784493065159446 -2.775112588784801 -2.655097130869491 -2.429231328989921 -2.106519739906278 -1.699827856300014 -1.225369200180058 -0.7020589409250443 -0.150759807170451 0.4065496443459431 0.9476512444838604 1.450972979990634 1.896449001595198 2.26631958609706 2.545839160486248 2.723864161406895 2.793297293862669 2.75137047797148 2.59975520357519 2.344495893214314 -0.4489339593550001 -0.3010808942575579 -0.141224684021771 0.02426170870570256 0.1887808636693288 0.3457739213309235 0.4889820639017611 0.612696034656969 0.7119837479845479 0.7828869160746246 0.8225788533633334 0.829477167566125 0.8033068446646229 0.7451112128476809 0.657210348308904 0.5431085811302354 0.4073547887001401 0.2553610463269413 0.09318686487506814 -0.07270238281121608 -0.2356932159204538 -0.3892877042838959 -0.5273625203459285 -0.6444130569104365 -0.7357728784589211 -0.7977997572088324 -0.8280208772415469 -0.825231417869619 -0.7895425860355593 -0.7223771828419703 -0.6264128809614945 -0.5054754742772395 -0.3643863555536506 -0.2087703027217771 -0.04483123673317359 0.1208951091908324 0.2818017486179796 0.4314738416045685 0.5639444341208273 0.6739323416782621 0.757052693489469 0.8099917434291753 0.8306389786351164 0.8181712589957502 0.7730856331489335 0.69717952272126 0.6297180412781989 0.4223250815566671 0.1980953535573332 -0.03403181106229467 -0.2648022347684586 -0.4850158290061779 -0.6858933726973768 -0.8594265120808325 -0.9986970285048157 -1.09815264597303 -1.153828382867369 -1.163504623252803 -1.126795605960306 -1.045164803667328 -0.9218665788603957 -0.761816442672515 -0.5713950889660844 -0.3581940162040492 -0.1307128783625411 0.1019793694509399 0.3306060216189227 0.5460524549925905 0.7397295001538707 0.903915864495442 1.03206595579104 1.119070834301707 1.161461890080995 1.157549125507695 1.107488530157902 1.013275861992868 0.8786670827870677 0.7090286197848682 0.5111234231810415 0.2928413486382201 0.06288461363950699 -0.1695791324611385 -0.3952822936884582 -0.6052267972518273 -0.7910428183123687 -0.9453224584867627 -1.061915075378811 -1.13617248928231 -1.165134291437744 -1.14764586618743 -1.08440442185818 -0.9779311952654839 1.683265170795829 1.12889428909309 0.5295179545161437 -0.09096858991682827 -0.7078285037378014 -1.296469528796759 -1.833424404988772 -2.297286435859161 -2.669562906038411 -2.93541232744681 -3.084236122589167 -3.110101156393801 -3.011976271584753 -2.793773397668383 -2.464191594648746 -2.036370248956716 -1.527365247576704 -0.9574690136555669 -0.3494015116281765 0.2725955260675967 0.8837250403639841 1.459623226056689 1.977330839833961 2.416208512855347 2.758759577256071 2.991327603080867 3.104640837050949 3.094181838108516 2.960367573536122 2.708532795786939 2.348717362739231 1.895265980245349 1.366256323976739 0.7827783395423258 0.1680934529102542 -0.4532927892397816 -1.056607678330947 -1.617798953605395 -2.114493689859416 -2.526890235369443 -2.838547641258541 -3.037041110245732 -3.114457334104856 -3.067709972291675 -2.898662694601847 -2.614054882537336 2.669705829804243 1.790458043755305 0.8398303456189292 -0.1442787381593636 -1.122635883945128 -2.056237079720395 -2.907862591958544 -3.643560798946349 -4.234001734801155 -4.655646382654547 -4.891685100973239 -4.932707770921118 -4.777078948101876 -4.431003062566172 -3.908277067764701 -3.229740399552937 -2.422444173646198 -1.518572743000832 -0.5541606092254262 0.4323441592848651 1.401612730505363 2.315003425205354 3.136102238758166 3.832174552594589 4.375470160145175 4.744329580005311 4.924047551108387 4.907459285079375 4.695226103737553 4.295809074282484 3.725131693245221 3.005945066931102 2.166920896606633 1.241508428248773 0.2666009366630344 -0.7189350929595494 -1.675809449156724 -2.565874570938535 -3.353646370662466 -4.007718872631197 -4.502016270236361 -4.816832486081088 -4.939616791099661 -4.865474162519273 -4.597360432970828 -4.145964450769626 3.54971374212228 2.380641886330078 1.116661351079797 -0.1918369484093717 -1.492687314141955 -2.73402894710691 -3.866373473677969 -4.844577890900531 -5.62964427556248 -6.19027450832758 -6.50411803098649 -6.558662892681309 -6.351734561902528 -5.89158261819819 -5.196551867470355 -4.294350992454181 -3.22094789497706 -2.019135769216056 -0.736827072087785 0.5748565952123353 1.863622544126233 3.078091743206837 4.169847137965979 5.095363886047989 5.817744555343825 6.308190108172687 6.547148028033732 6.525091816737419 6.242900785825731 5.711825001195826 4.953036778474351 3.996786609606501 2.881197171203133 1.65074349372734 0.3544798823789649 -0.9559157232538983 -2.228201985567143 -3.41165686621379 -4.459099753710306 -5.328772405529383 -5.986003717453734 -6.404591951090286 -6.567849314495497 -6.46926725177881 -6.112775918687044 -5.51258749969712 4.288205769311382 2.875917049446775 1.34897459230178 -0.231747224902796 -1.803230011571154 -3.302823708099532 -4.670744246048903 -5.852456950294104 -6.800850664426962 -7.47811592389443 -7.857252300035656 -7.923144821967909 -7.673166562777629 -7.117283366806719 -6.277656542887673 -5.187759362894486 -3.891042588024042 -2.439202224064016 -0.890118564778289 0.6944513127535784 2.25133560791381 3.718466256886861 5.037353390496664 6.155417140715221 7.02808383407551 7.620563003372249 7.909234373801725 7.882589528780094 7.541690714195699 6.900128490017602 5.983479917557116 4.828288882746387 3.480609206727212 1.994168625333327 0.4282268338104019 -1.154787010228619 -2.691763140310978 -4.121427168338916 -5.386782901080704 -6.437384598532856 -7.23134808638331 -7.737020545868154 -7.93424241176944 -7.815151070663276 -7.384494318505103 -6.659441080987506 4.855740564693871 3.256538475283084 1.527508473464183 -0.2624184708600041 -2.041883618860373 -3.739945310513147 -5.288907184715668 -6.627017019575332 -7.700928598626055 -8.46782845613504 -8.897142714875848 -8.971755970131976 -8.688693626872098 -8.059240487467115 -7.108490862230847 -5.874348138457536 -4.406013691981442 -2.762025383586276 -1.007923839222646 0.7863604479231795 2.549295025514206 4.210597255203638 5.704036259636104 6.970073338524186 7.958235588743649 8.629128099704545 8.956004504118614 8.925833271260007 8.539817232971965 7.813345630556984 6.775380594289642 5.467302514677827 3.941260336876582 2.258092546810274 0.4849017327257366 -1.307620583246664 -3.048012193000405 -4.66688917517789 -6.099712013161457 -7.289358581934639 -8.188401426947269 -8.760998547062469 -8.984322302035931 -8.849469478495738 -8.361816232963735 -7.540803761460487 5.229692306937458 3.507331988711279 1.645145412121301 -0.2826279204933955 -2.199133769801996 -4.027967095476507 -5.696218084039577 -7.137378833047617 -8.293994811283408 -9.119955389607474 -9.582332126231357 -9.662691519780038 -9.357829894821458 -8.679901122296229 -7.655932083036974 -6.326745191317807 -4.74533093401977 -2.974735307140072 -1.085546370884799 0.8469198735379744 2.745622095213007 4.534865028263448 6.143317203231159 7.506854707664531 8.571117604153223 9.293677089490007 9.645726997162825 9.613232208310484 9.197488187621289 8.415069337243999 7.297168227677697 5.888352048419835 4.244785854760888 2.431993444268991 0.5222451297532001 -1.408323450046034 -3.282746618113592 -5.026297037822943 -6.569464856031814 -7.85072884157588 -8.819009042613789 -9.43570318311505 -9.676225613788761 -9.530987464336391 -9.005778921451114 -8.121538392346379 5.395152720151853 3.618299243775675 1.697195594753702 -0.2915698868206932 -2.26871139710953 -4.155406543328425 -5.876438743808457 -7.363195875747651 -8.556405624029034 -9.408498481379727 -9.885504194511661 -9.968406050920841 -9.653899015204164 -8.95452149039132 -7.898155451383183 -6.526914878599211 -4.895466806476436 -3.068851921318294 -1.119891594379443 0.8737152764050196 2.832489876287216 4.678342043240527 6.337683476291875 7.744361468860196 8.842296208410893 9.587716501611499 9.950904793681877 9.917381913524109 9.488484312582518 8.681310784741999 7.528040791374196 6.07465156776076 4.379085155812245 2.508938437703814 0.5387682614972115 -1.452880905113711 -3.386608294868589 -5.185322298967513 -6.777313866237354 -8.099115316710975 -9.098030597743653 -9.734236109340088 -9.982368345415507 -9.832535056744142 -9.290709623719028 -8.378492916525859 5.345525419802729 3.585016326194277 1.681583944833682 -0.2888878818624344 -2.247842660347122 -4.117183045441479 -5.822384335036501 -7.295465534789873 -8.477699545843972 -9.321954428933225 -9.794572406069209 -9.876711689935791 -9.565097646490701 -8.872153344291123 -7.825504285953553 -6.466877066541816 -4.850435865897734 -3.040623093715808 -1.109590274028466 0.86567840836979 2.806435224432541 4.635308324315644 6.279386308869567 7.673124977038238 8.760960366318479 9.49952391260276 9.859371417972785 9.826156897953913 9.401204510644819 8.601455766712713 7.458794124825067 6.018773898766608 4.338804150703687 2.485859973040466 0.5338124028368944 -1.439516583325327 -3.35545658596765 -5.137625123282998 -6.714972759646662 -8.02461562240514 -9.014342383437267 -9.644695760044115 -9.890545552295466 -9.742090504798149 -9.205249051818882 -8.301423367986789 5.082788889746999 3.408810120860735 1.598932849578142 -0.2746888286927486 -2.137359530194382 -3.914820452055196 -5.536209836422897 -6.936888005132817 -8.061014339694061 -8.863773470533452 -9.313161924357349 -9.391264001639069 -9.094966019022742 -8.436080442052933 -7.440874959449751 -6.149025273252079 -4.612033353781187 -2.891174218607906 -1.055053090966565 0.8231296739990461 2.668496856398217 4.407479490061577 5.970749825062005 7.295985206327845 8.330352681230107 9.032615282679755 9.374776016874794 9.343194015093491 8.939128352084104 8.178687850727879 7.092188874105124 5.722946707767992 4.125548715994828 2.363678115836767 0.5075751282179191 -1.368763278017028 -3.190533411739751 -4.885107046646795 -6.384926879450768 -7.630199826372963 -8.571280784705591 -9.170651826392648 -9.40441791942675 -9.263259547370208 -8.752804249065901 -7.893402266422392 4.617417606324923 3.096705413130865 1.452537347334307 -0.2495387987538081 -1.941666620400823 -3.5563863211758 -5.029324122151516 -6.301758641327084 -7.322961929822302 -8.052221835118193 -8.460465066103314 -8.531416253444307 -8.262246797201303 -7.663687634181376 -6.759601429351459 -5.586031246689127 -4.189763625962253 -2.626463351031946 -0.958454270580386 0.7477653570618542 2.424173939628084 4.00393835714458 5.42407838751986 6.627977529253878 7.567640122689131 8.205604785502139 8.516437879800469 8.48774747100499 8.120677355176557 7.429861459476516 6.442840433670812 5.198963691333348 3.747820672901074 2.147263871172282 0.4611024349828368 -1.24344170019649 -2.89841373869619 -4.437835167907522 -5.800334113373086 -6.931592041751236 -7.786509269328339 -8.331002944088237 -8.54336582146739 -8.41513166369451 -7.951412761973714 -7.170696125567001 3.967964454042534 2.661144832798496 1.248233764798917 -0.2144404443737696 -1.668565589735227 -3.056170290497144 -4.321935126079993 -5.415398046841001 -6.292966136751218 -6.919653525392167 -7.270476164205151 -7.331447861665553 -7.100137868602942 -6.585767784499835 -5.808843921420753 -4.800339782061639 -3.600461243939888 -2.257043677934734 -0.8236449030035197 0.6425899950486453 2.083206857808219 3.440772837086368 4.661166061336456 5.695733303881148 6.503229633525916 7.051462719809843 7.318576239632341 7.293921219883536 6.978480578397405 6.384829938119489 5.536636276704745 4.467714398803897 3.220678846510804 1.845244992047145 0.3962470427578658 -1.068548025696312 -2.490743456364277 -3.813640805422481 -4.984500330207981 -5.956643556328476 -6.691314201133876 -7.15922326440309 -7.341716688355996 -7.231519036070902 -6.833023540195608 -6.162116958625413 3.160321080613384 2.119492805710582 0.9941670410904191 -0.1707930261825025 -1.328944114470087 -2.434114394639413 -3.442244215186624 -4.313142621504115 -5.012089642410857 -5.511220465838168 -5.790636320954395 -5.839197779363776 -5.654968848964071 -5.245294155842311 -4.626506137210002 -3.823273918671509 -2.867619834034114 -1.797642795911458 -0.6559994123056947 0.5117965977428373 1.659188892506926 2.740434562000088 3.71242775344765 4.536418165608486 5.179555901001853 5.616201087656102 5.8289460598929 5.809309347024744 5.558073802826458 5.085255395625619 4.409703903252567 3.558351431882195 2.565138717949963 1.469662018096385 0.3155945313679901 -0.8510547134099066 -1.983775092422612 -3.037408618664727 -3.969950248377854 -4.74422248959062 -5.329357551403209 -5.702027945401628 -5.847376479006589 -5.759608564857086 -5.442223232722587 -4.907873634227967 2.22668567867006 1.493343288905311 0.7004660147291653 -0.1203366290059004 -0.9363418310866921 -1.715018039159572 -2.425321890063545 -3.038935810756489 -3.531396950591077 -3.883072437973098 -4.079942080996805 -4.114157308252927 -3.984354066603155 -3.695707201674252 -3.259724153093075 -2.693786189182488 -2.020455470643085 -1.266575568405079 -0.4622012951650975 0.3605994851525819 1.16902430193471 1.930843808868214 2.615686666272127 3.196250350568365 3.649389619738685 3.95703924108492 4.10693419504852 4.093098642835834 3.916084164252973 3.582947767959545 3.106970550803082 2.507128222398642 1.807334603467782 1.035488257270811 0.2223602619286077 -0.5996325353583019 -1.397719875710371 -2.140084535377989 -2.797130778047369 -3.342664243452604 -3.75493623385838 -4.017510766006725 -4.11991982190273 -4.058080675658289 -3.834458658889454 -3.457968875724721 1.204279345431145 0.8076588876886379 0.3788396188089894 -0.06508279017502479 -0.5064105536953812 -0.9275493265108165 -1.311709634729428 -1.643576219150494 -1.909918606318715 -2.100118565749699 -2.206593425271613 -2.225098368236168 -2.15489566096309 -1.998784063853906 -1.762987253646724 -1.456905705064642 -1.092741923553445 -0.6850139698967194 -0.249976670946797 0.1950264090267705 0.6322544015138652 1.044276406206742 1.414666405988919 1.728658120402314 1.973733690651419 2.140122727131086 2.221191824027839 2.213709012276733 2.117972607968906 1.937799319430418 1.680372087105609 1.355953722388659 0.9774777617194828 0.5600328473000009 0.1202611905445145 -0.3243049003718474 -0.755941978313681 -1.157442035093003 -1.512798530452724 -1.807844522315121 -2.030817458056102 -2.172828110359468 -2.228214962658407 -2.194769915935083 -2.073826318660405 -1.870205810398125 0.133862195013134 0.08977567533482943 0.04211008278445129 -0.007234305880492386 -0.05629028559915311 -0.1031021492652438 -0.1458036555977758 -0.1826924302916663 -0.2122978343091302 -0.2334395936172461 -0.2452748529890788 -0.2473317779817941 -0.2395283654869346 -0.2221757129355783 -0.1959656158254859 -0.1619429880176926 -0.1214642043182845 -0.07614302609516824 -0.02778626570485129 0.0216782454144859 0.07027851329880706 0.1160769986345782 0.1572478603369399 0.1921497460719863 0.2193912277947304 0.237886273594353 0.2468975443593155 0.2460657891609279 0.2354241674541947 0.2153969271149841 0.1867824910160091 0.1507216264264608 0.1086519662208858 0.06225069499319062 0.01336768499954474 -0.03604825241086339 -0.08402705975448951 -0.1286559733884243 -0.1681557793607642 -0.2009517450562382 -0.2257363988162215 -0.2415216547078018 -0.2476782043918371 -0.2439606056605409 -0.2305170674437688 -0.2078835411866856 -0.9418916186934663 -0.6316866098910525 -0.2962982493546524 0.05090258736032291 0.396074098549645 0.7254553853138876 1.025915055172518 1.285474729243588 1.493786582409802 1.64254587845149 1.725822053672573 1.740295149760155 1.685388170045718 1.563290082541485 1.378868552693453 1.139475884920871 0.8546559094405842 0.5357634998735836 0.1955118902661149 -0.1525341614328149 -0.4944991574648012 -0.8167500325709951 -1.106439661282354 -1.352019032270644 -1.54369767098508 -1.67383395497704 -1.737239761272558 -1.731387300463223 -1.656509891692994 -1.515592660960215 -1.314253533564164 -1.060519265151764 -0.7645054402998314 -0.4380131960795705 -0.09405874796218745 0.2536455256169031 0.5912377525143929 0.90525919597775 1.183190812008062 1.413952344138135 1.588344058292062 1.699413507151409 1.742732702290064 1.716574644099477 1.621982171813179 1.462726388797417 -1.980095185873649 -1.327965543382954 -0.6228941053151842 0.1070101550754859 0.8326482582733674 1.525091302987413 2.156733770155261 2.702394067873998 3.140318442004222 3.453048229699637 3.628115881200739 3.658542001700102 3.54311359778859 3.286432435674765 2.898731583287855 2.395467450151741 1.796703589112747 1.126310825801873 0.4110156041456203 -0.3206655126131722 -1.039562707302622 -1.717015817381742 -2.326016925178589 -2.842287078339433 -3.24524421504243 -3.518823705852006 -3.652118799799595 -3.639815442126497 -3.482404128877647 -3.186160352372156 -2.762894417128001 -2.229480600290467 -1.607184427452228 -0.9208148832552137 -0.1977353554622115 0.5332272569630683 1.242931781349151 1.903084537910887 2.487367319476658 2.972486615356378 3.339102250105779 3.572598415289946 3.663666355642739 3.608675479763801 3.409818100340678 3.075022033560224 -2.939358606544735 -1.971302681297775 -0.9246571389528138 0.1588515655978607 1.23602735951325 2.263926643114734 3.201570315688885 4.011577482915883 4.661655715163819 5.125888444753457 5.385768177727149 5.430934329229159 5.259586267329132 4.878555098534946 4.303031333133039 3.555959287479722 2.667122366513022 1.671955693384779 0.6101334229225803 -0.476012941724182 -1.543182172530108 -2.548829599910208 -3.45286323443881 -4.219242107950363 -4.817413113206347 -5.223529059864967 -5.421399386705929 -5.403135628214004 -5.169465902805643 -4.729705885045418 -4.101387419098447 -3.309559579428456 -2.385790043245842 -1.366906586834864 -0.2935288783299538 0.7915509002700281 1.845074042359564 2.82503990484805 3.692380341259188 4.412517225444294 4.956740972354244 5.303355098597096 5.438541192763665 5.356909811883925 5.06171534151083 4.564726253638137 openscad-2013.01+dfsg.orig/testdata/scad/minimal/0000755000175000017500000000000012110740367021102 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/minimal/scale.scad0000644000175000017500000000001111640436735023025 0ustar chrysnchrysnscale(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/circle.scad0000644000175000017500000000001211640436735023200 0ustar chrysnchrysncircle(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/hull.scad0000644000175000017500000000001011640436733022677 0ustar chrysnchrysnhull(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/for.scad0000644000175000017500000000000711640436735022531 0ustar chrysnchrysnfor(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/cube.scad0000644000175000017500000000001011640436735022653 0ustar chrysnchrysncube(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/dxf_linear_extrude.scad0000644000175000017500000000002611640436735025617 0ustar chrysnchrysndxf_linear_extrude(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/color.scad0000644000175000017500000000001111640436735023054 0ustar chrysnchrysncolor(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/rotate.scad0000644000175000017500000000001211640436735023235 0ustar chrysnchrysnrotate(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/render.scad0000644000175000017500000000001211640436735023216 0ustar chrysnchrysnrender(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/surface.scad0000644000175000017500000000001311640436735023370 0ustar chrysnchrysnsurface(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/polygon.scad0000644000175000017500000000001311640436735023427 0ustar chrysnchrysnpolygon(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/union.scad0000644000175000017500000000001111640436735023066 0ustar chrysnchrysnunion(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/assign.scad0000644000175000017500000000001211640436735023223 0ustar chrysnchrysnassign(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/minkowski.scad0000644000175000017500000000001511640436733023753 0ustar chrysnchrysnminkowski(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/subdiv.scad0000644000175000017500000000001211640436735023233 0ustar chrysnchrysnsubdiv(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/linear_extrude.scad0000644000175000017500000000002211640436735024752 0ustar chrysnchrysnlinear_extrude(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/import_stl.scad0000644000175000017500000000001611640436735024137 0ustar chrysnchrysnimport_stl(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/allfunctions.scad0000644000175000017500000000051711664172103024442 0ustar chrysnchrysna = abs(); a = sign(); a = rands(); a = min(); a = max(); a = sin(); a = cos(); a = asin(); a = acos(); a = tan(); a = atan(); a = atan2(); a = round(); a = ceil(); a = floor(); a = pow(); a = sqrt(); a = exp(); a = log(); a = ln(); a = str(); a = lookup(); a = dxf_dim(); a = dxf_cross(); a = version(); a = version_num(); a = len(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/sphere.scad0000644000175000017500000000001211640436735023225 0ustar chrysnchrysnsphere(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/difference.scad0000644000175000017500000000001611640436735024035 0ustar chrysnchrysndifference(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/dxf_rotate_extrude.scad0000644000175000017500000000002611640436735025643 0ustar chrysnchrysndxf_rotate_extrude(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/multmatrix.scad0000644000175000017500000000001611640436735024151 0ustar chrysnchrysnmultmatrix(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/import_off.scad0000644000175000017500000000001611640436735024107 0ustar chrysnchrysnimport_off(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/allmodules.scad0000644000175000017500000000071611640436735024113 0ustar chrysnchrysnminkowski(); glide(); subdiv(); hull(); child(); echo(); assign(); for(); intersection_for(); if(true) { } union(); difference(); intersection(); dxf_linear_extrude(); linear_extrude(); dxf_rotate_extrude(); rotate_extrude(); import(); import_stl(); import_off(); import_dxf(); group(); cube(); sphere(); cylinder(); polyhedron(); square(); circle(); polygon(); projection(); render(); surface(); scale(); rotate(); mirror(); translate(); multmatrix(); color(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/translate.scad0000644000175000017500000000001511640436735023737 0ustar chrysnchrysntranslate(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/import.scad0000644000175000017500000000001211640436733023247 0ustar chrysnchrysnimport(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/intersection_for.scad0000644000175000017500000000002411640436735025316 0ustar chrysnchrysnintersection_for(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/cylinder.scad0000644000175000017500000000001411640436735023552 0ustar chrysnchrysncylinder(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/group.scad0000644000175000017500000000001111640436735023072 0ustar chrysnchrysngroup(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/projection.scad0000644000175000017500000000001611640436735024117 0ustar chrysnchrysnprojection(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/rotate_extrude.scad0000644000175000017500000000002211640436735024776 0ustar chrysnchrysnrotate_extrude(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/import_dxf.scad0000644000175000017500000000001611640436735024116 0ustar chrysnchrysnimport_dxf(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/square.scad0000644000175000017500000000001211640436735023237 0ustar chrysnchrysnsquare(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/echo.scad0000644000175000017500000000001011640436735022653 0ustar chrysnchrysnecho(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/child.scad0000644000175000017500000000001111640436735023021 0ustar chrysnchrysnchild(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/if.scad0000644000175000017500000000001511640436735022340 0ustar chrysnchrysnif(true) { } openscad-2013.01+dfsg.orig/testdata/scad/minimal/mirror.scad0000644000175000017500000000001211640436735023251 0ustar chrysnchrysnmirror(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/intersection.scad0000644000175000017500000000002011640436735024444 0ustar chrysnchrysnintersection(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/glide.scad0000644000175000017500000000001111640436735023022 0ustar chrysnchrysnglide(); openscad-2013.01+dfsg.orig/testdata/scad/minimal/polyhedron.scad0000644000175000017500000000001611640436735024126 0ustar chrysnchrysnpolyhedron(); openscad-2013.01+dfsg.orig/testdata/scad/functions/0000755000175000017500000000000012110740367021464 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/functions/inf-tests.scad0000644000175000017500000000061711703565234024245 0ustar chrysnchrysnecho(1/0); echo(-1/0); echo(sin(1/0)); echo(cos(1/0)); echo(tan(1/0)); echo(asin(1/0)); echo(acos(1/0)); echo(atan(1/0)); echo(atan(-1/0)); echo(atan2(1/0, -1/0)); echo(ceil(1/0)); echo(floor(1/0)); echo(exp(2, 1/0)); echo(ln(1/0)); echo(log(1/0)); echo(max(-1/0, 1/0)); echo(min(-1/0, 1/0)); echo(pow(2, 1/0)); echo(round(1/0)); echo(sign(1/0)); echo(sign(-1/0)); echo(sqrt(1/0)); echo(sqrt(-1/0));openscad-2013.01+dfsg.orig/testdata/scad/functions/len-tests.scad0000644000175000017500000000024111664172103024233 0ustar chrysnchrysna=[1,2,3,4]; b="abcd"; c=[]; d=""; e=[[1,2,3,4],[1,2,3]]; echo(len(a)); echo(len(b)); echo(len(c)); echo(len(d)); echo(len(e)); echo(len(e[1])); echo(len(e[2]));openscad-2013.01+dfsg.orig/testdata/scad/bugs/0000755000175000017500000000000012110740367020414 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/bugs/fn_bug_import.scad0000644000175000017500000000002611664172103024100 0ustar chrysnchrysnimport("fn_bug.stl"); openscad-2013.01+dfsg.orig/testdata/scad/bugs/minkowski-assert.scad0000644000175000017500000000074111704542767024600 0ustar chrysnchrysn/* Originally reported by chrysn 20100516: terminate called after throwing an instance of 'CGAL::Assertion_exception' what(): CGAL ERROR: assertion violation! Expr: N.is_valid(0,0) File: /usr/include/CGAL/convex_decomposition_3.h Line: 113 This appears to have been a CGAL issue which was fixe in CGAL-3.9. */ minkowski() { cube(20, center=true); rotate([20, 30, 40]) difference() { cube(5, center=true); cube([1, 1, 10], center=true); } } openscad-2013.01+dfsg.orig/testdata/scad/bugs/polyset-reduce-crash.txt0000644000175000017500000000026711640436735025234 0ustar chrysnchrysnThis testcase causes a crash in PolySet::PolyReducer::add_edges(). It appears to be because we collapse two close vertices into the same vertex. This is handled by just abort()'ing. openscad-2013.01+dfsg.orig/testdata/scad/bugs/fn_bug.scad0000644000175000017500000000127511664172103022515 0ustar chrysnchrysnfn_setting = 41; // does not work //fn_setting = 40; // works // basic box sizes box_width = 720; box_depth = 450; box_height = 90; box_bevel = 35; union () { translate ([(box_width / 2) - box_bevel, -((box_depth / 2) - box_bevel), 0]) cylinder (h = box_height- box_bevel, r = box_bevel, center = false, $fn = fn_setting); translate ([0, -((box_depth / 2) - box_bevel), box_height- box_bevel]) rotate ([0, 90, 0]) cylinder (h = box_width - (2 * box_bevel), r = box_bevel, center = true, $fn = fn_setting); translate ([(box_width / 2) - box_bevel, 0, box_height- box_bevel]) rotate ([90, 90, 0]) cylinder (h = box_depth - (2 * box_bevel), r = box_bevel, center = true, $fn = fn_setting); } openscad-2013.01+dfsg.orig/testdata/scad/bugs/issue204.scad0000644000175000017500000000032412076022156022625 0ustar chrysnchrysn// Causes a CGAL assertion in CGALEvaluator::process() e=0.000; for (m = [ [ [ 0, 1, 0], [ 0, 0, 1], [ 1, 0, 0] ], [ [-1, 0, e], [ 0,-1, 0], [ 0, 0,-1] ] ] ) multmatrix (m) cube([1,5,1], center=true); openscad-2013.01+dfsg.orig/testdata/scad/bugs/fn_bug.txt0000644000175000017500000000072711664172103022423 0ustar chrysnchrysnReported by Ian Shumsky: 1) Export STL from fn_bug.scad - fn_setting = 41 -> triggers bug - fn_setting = 40 -> works 2) Open fn_bug_import.scad and render using CGAL (F6) -> CGAL error in CGA_Nef_polyhedron3(): CGAL ERROR: assertion violation! Expr: pe_prev->is_border() || !internal::Plane_constructor::get_plane(pe_prev->facet(),pe_prev->facet()->plane()).is_degenerate() File: ../libraries/install/include/CGAL/Nef_3/polyhedron_3_to_nef_3.h Line: 252 openscad-2013.01+dfsg.orig/testdata/scad/bugs/STL-import/0000755000175000017500000000000012110740367022366 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/bugs/STL-import/adns2610_dev_circuit_inv.stl0000644000175000017500000013003412000421643027574 0ustar chrysnchrysnVCG L@AAL@AL@L@ A AL@L@ AWAA AAA333σBA? A33σBA333++ A+̿+ A̿֨SA֨SA̿֨S333A֨SAff濚MALMAC=?AσBAff濚MA33σBA33dXAAdXA33?σBA~@wzA?σBA?dXAdXA AAff濚MAA33dXAdXAAff̎AdXAff̎A33AA@ A@\1dXA33AAAAY@WA AA33s@̎Aff&@WAL̎A AA33WAAWAfff@֨S>\1̌@֨Sff̎AA33WA33σBAL̾\1?$`4h@پ̠@L̾\1~@D>@33@\1?Y@@@\1 A?\133?WAY@AAff?}AL33σBA̾\1?̾\1?33σBAL@̾\1?L@$`4h@L@33σBA$`4I@ڪ@L?>\1?L>MALMA?dXAfff@\1?C=?*n@@h@$`4I@33σBAپff@̬@dXA AA@MAپff@33σBAڪ@? AσBAC=?AY@AA AAff?}Aڪ@>\1?پ̠@?σBALMAL>MA33?WAff&@AAY@AA~@wzALMA?σBA?dXA AA33?dXAY@dXA AA33s@MAff&@dXAff?MA AAff?MA33?dXA AALMAdXA?dXAdXAAAL>}AdXAL>}A?σrAdXA?σrA33?σrAdXA33?σrA AA33?σrAff?}A AA?WAAA33?WA33s@̎A AAY@AAL>}AAA?WAL?ڪ@?>\1L??\1̌@֨S?\1 A @MA33?σBAff&@dXA?\1?ڪ@@\1? @̎AAAff&@WA@\1333@ Ǎ@\1 Afff@\1?ڪ@?\1?~@wzA33?σBA @MAff&@WA AAY@WA~@wzA @MAff&@σBA~@wzAff&@σBAY@σBA33@dXAY@σBA AAY@σBA33s@MA AAff&@dXA AAY@dXA33?σBAff?MAff&@dXA33?WAAA @̎A?\1L??ff&@AA33?WA @̎A@ Ǎ@+WA AAL̎A̾\1L@L@?@fff@\1?L@fff@+fff@+ Afff@+̌@+ AL@ڪ@?@̌@֨S A@>\1?\1̌@֨Sfff@֨S̾\1>\1L@̾\1fff@֨S@\1?ڪ@L@333@@\1?fff@\1333@fff@\1 Afff@\1@\1?L@@ Ǎ@\1̌@\1?_a.@*n@@fff@\1?@h@̌@\1?@h@_a.@*n@̌@\1??@C=?*n@fff@\1?~@wzAY@σBAff@MAff@Y@@33@\1?~@wzAff@MA33@σBA~@wzA33@σBA̬@σBA~@wzA̬@σBA@MA~@wzA@MA AA33@dXA AA̬@dXAff@MAY@σBA33@dXAff@_a.@*n@Y@@@_a.@*n@ff@@\1?@̠@@@ff@33@\1@33@\1 A33@\1?~@D>@@\1? A@@h@ A̿+L̎Aff&@WAAA̾\1?پ̠@>\1?ڪAL@ffMAL@??L@L@̌L@?ff&@L@@L@ff&@г]L@?\@nsL@@L@ AL@?/AL@ff>[>AL@ff澣[>AL@?ff@L@33@SL@ AL@?@@\1L@@L@\@nsL@?ff?[>AL@@[>AL@@'JAL@?@\1>L@ff@ns?L@@ns?L@?/AL@33c@[>AL@@[>AL@?̾AAL@̾t[AL@ _PAL@?@\1L@@nsL@ff@nsL@?ff@?L@33@L@ AL@?33@L@@nsL@ AL@?@nsL@ff@nsL@ AL@?ff@nsL@@nsL@ AL@?@L@@}XKL@33@}XKL@?@@\1L@ff&@г]L@@L@?@SL@@L@ AL@?33@}XKL@ff@L@ AL@?@@\1>L@\@ns?L@33#@ns?L@?@nsL@\@nsL@ AL@?@L@33@}XKL@ AL@??L@/AL@AL@?33@SL@@SL@ AL@?L@L@@L@?/AL@ffMAL@AL@?ffSL@L@L@?AL@L@?L@?/AL@ff?[>AL@ff>[>AL@?/AL@ff澣[>AL@ffƿ[>AL@?Ŀ33AL@kAL@̿33AL@? AAL@ff@?L@ AL@?/AL@ff@[>AL@33c@[>AL@?/AL@@[>AL@ff?[>AL@?̎AL@AL@̿AAL@?@}AL@@AAL@?33AL@?̎AL@>WAL@>33AL@?fff@AAL@fff@t[AL@ff@\AL@?̿33AL@AL@̿WAL@?kAL@AL@̿33AL@?̎AL@{>33AL@?kAL@? AAL@AL@kAL@?q@33AL@ @kAL@@33AL@??33AL@@AAL@̾33AL@?fff@WAL@@̎AL@ AAL@? AAL@kAL@̾33AL@?̎AL@>33AL@{>33AL@?ff@\AL@@\AL@fff@AAL@?@ _PAL@@t[AL@?t[AL@? @kAL@`@kAL@ AAL@?̾33AL@̾WAL@?kAL@?kAL@kAL@ AAL@?{33AL@̾33AL@kAL@?@}AL@?33AL@?WAL@?@t[AL@@}AL@?σrAL@?@[>AL@ff@[>AL@ff@/AL@??33AL@?33AL@?kAL@?̾33AL@?kAL@?33AL@??σrAL@?t[AL@@t[AL@?}AL@>t[AL@>σrAL@??kAL@?kAL@̎AL@?@t[AL@@AAL@@}AL@?@ _PAL@ff@\AL@fff@t[AL@?@̎AL@̾33AL@@AAL@?@WAL@̾33AL@@̎AL@?@33AL@̾33AL@@WAL@? @kAL@̾33AL@@33AL@? AAL@̾33AL@ @kAL@? AAL@`@kAL@pb@33AL@? AAL@pb@33AL@fff@33AL@? AAL@fff@33AL@fff@WAL@? AAL@@̎AL@ff@/AL@?@̎AL@fff@AAL@ff@/AL@?̎AL@?kAL@̾WAL@?fff@AAL@@\AL@ff@/AL@?@\AL@33@MAL@ff@/AL@?33@MAL@@[>AL@ff@/AL@?@'JAL@33c@[>AL@ff@[>AL@?/AL@ff@/AL@ff@[>AL@?<L@ff}XKL@AL@??\1>L@?ns?L@ ?ns?L@?'JAL@ff澣[>AL@ff>[>AL@?̾AAL@>t[AL@}AL@?̎AL@̾AAL@>WAL@? _PAL@>t[AL@̾AAL@?}AL@>WAL@̾AAL@?̎AL@̿WAL@AL@?̿t[AL@̿AAL@AL@?ffMAL@̿t[AL@AL@?ff@/AL@ff@?L@ AAL@?ff@?L@@ns?L@33@L@?ff@?L@ff@ns?L@@ns?L@?ff@?L@@ns?L@ff@ns?L@?ff@?L@\@ns?L@@ns?L@?ff@?L@33#@ns?L@\@ns?L@?ff@?L@?ns?L@33#@ns?L@?ff@?L@ ?ns?L@?ns?L@?ff@?L@ ns?L@ ?ns?L@? ns?L@?L@̌L@?ff@?L@?L@ ns?L@? AL@ A AA? AAL@ AL@ AA׳]?֨S֨S@333@׳]?333֨S333@׳]??333@+@+׳]??333333@+̿֨S̿֨S@֨S@֨S̿֨S֨S@ֳ]@̿֨S@ֳ]̿֨S@̿֨Sֳ]?@̿+@ֳ]?̿+@̿+?̿+@̿++@?+@̿++Գ]?33dXA33dXA@ff濚MA@Գ]?ff濚MA33dXAff濚MA@ٳ]?>ff濚MA@33σBA@33σBAٳ]?>ff濚MAff濚MA@33σBAdXAdXA@33dXA@33dXAdXA33dXA@ӳ]LMA@dXA@LMAӳ]LMAdXA@dXAٳ]>LMA@LMAσBA@ٳ]>σBA@LMAσBA?σBA@σBA33σBA@?33σBA@σBA33σBAԳ]?33WA33WA@ff̎A@Գ]?ff̎A33WAff̎A@Գ]??ff̎A@33AA@33AAԳ]??ff̎Aff̎A@33AAWAWA@33WA@33WAWA33WA@ӳ]L̎A@WA@L̎Aӳ]L̎AWA@WAӳ]?L̎A@L̎AAA@ӳ]?AA@L̎AAA?AA@AA33AA@?33AA@AA33AAֳ]?̾\1?̾\1?@L@ֳ]?L̾\1?L@ֳ]??L@̾\1@̾\1ֳ]??LL@̾\1>\1?>\1?@̾\1?@̾\1?>\1?̾\1?@ֳ]L?@>\1?@L?ֳ]L?>\1?@>\1?ֳ]?L?@L?>\1@ֳ]?>\1@L?>\1?>\1@>\1̾\1@?̾\1@>\1̾\1S}?ͨ$`4I@$`4I@@L@@S}?ͨL@$`4I@L@@S}?Ǩ>L@@$`4h@@$`4h@S}?Ǩ>L@L@@$`4h@`l? þپff@پff@@$`4I@@`l? þ$`4I@پff@$`4I@@4K?ڪ`lC=?AC=?A@? A@>`l? AC=?A? A@>S}@A@A@C=?A@>S}C=?A@AC=?A@R}_a.@A_a.@A@@A@R}@A_a.@A@A@þ`lY@ AY@ A@_a.@A@þ`l_a.@AY@ A_a.@A@3K~@wzA~@wzA@Y@ A@3KY@ A~@wzAY@ A@3K@ff@@~@wzA@@ff@3K@ff@~@wzA@~@wzA^lþ@I@@@ff@@@I@^lþ@I@@ff@@@ff@S}Ǩ@@@@I@@@@S}Ǩ@@@I@@@I@S}>@@@@@@h@@S}>@h@@@@@h@^l>@h@@@h@@̠@@^l>@̠@@@h@@̠@8K?@̠@@@̠@~@D>@@8K?~@D>@@@̠@~@D>@:K?~@D>@@~@D>@Y@@@:K?Y@@@~@D>@Y@@þ`l?Y@@@Y@@_a.@*n@@þ`l?_a.@*n@@Y@@_a.@*n@ĨS}?_a.@*n@@_a.@*n@@h@@ĨS}?@h@@_a.@*n@@h@ƨ>S}?@h@@@h@C=?*n@@ƨ>S}?C=?*n@@@h@C=?*n@>`l?C=?*n@@C=?*n@?@@>`l??@@C=?*n@?@?;K??@@?@ڪ@@?;K?ڪ@@?@ڪ@9K??پ̠@@ڪ@@ڪ@9K??پ̠@پ̠@@ڪ@`l? >$`4h@@پ̠@@پ̠@`l? >$`4h@$`4h@@پ̠@ӳ]??dXA?dXA@L>MA@ӳ]?L>MA?dXAL>MA@ٳ]?>L>MA@?σBA@?σBAٳ]?>L>MAL>MA@?σBA33?dXA33?dXA@?dXA@?dXA33?dXA?dXA@Գ]ff?MA@33?dXA@ff?MAԳ]ff?MA33?dXA@33?dXAٳ]>ff?MA@ff?MA33?σBA@ٳ]>33?σBA@ff?MA33?σBA?33?σBA@33?σBA?σBA@??σBA@33?σBA?σBAӳ]??WA?WA@L>}A@ӳ]?L>}A?WAL>}A@ٳ]?>L>}A@?σrA@?σrAٳ]?>L>}AL>}A@?σrA33?WA33?WA@?WA@?WA33?WA?WA@Գ]ff?}A@33?WA@ff?}AԳ]ff?}A33?WA@33?WAٳ]>ff?}A@ff?}A33?σrA@ٳ]>33?σrA@ff?}A33?σrA?33?σrA@33?σrA?σrA@??σrA@33?σrA?σrAֳ]??\1??\1?@?@ֳ]???\1??@ֳ]???@?\1@?\1ֳ]????@?\1@\1?@\1?@?\1?@?\1?@\1??\1?@׳]333@@@\1?@333@׳]333@@\1?@@\1?׳]?333@@333@@\1@׳]?@\1@333@@\1?@\1@@\1?\1@??\1@@\1?\1ճ]?ff&@dXAff&@dXA@ @MA@ճ]? @MAff&@dXA @MA@ڳ]?> @MA@ff&@σBA@ff&@σBAڳ]?> @MA @MA@ff&@σBAY@dXAY@dXA@ff&@dXA@ff&@dXAY@dXAff&@dXA@ճ]33s@MA@Y@dXA@33s@MAճ]33s@MAY@dXA@Y@dXAڳ]>33s@MA@33s@MAY@σBA@ڳ]>Y@σBA@33s@MAY@σBA?Y@σBA@Y@σBAff&@σBA@?ff&@σBA@Y@σBAff&@σBAճ]?ff&@WAff&@WA@ @̎A@ճ]? @̎Aff&@WA @̎A@ճ]?? @̎A@ff&@AA@ff&@AAճ]?? @̎A @̎A@ff&@AAY@WAY@WA@ff&@WA@ff&@WAY@WAff&@WA@ճ]33s@̎A@Y@WA@33s@̎Aճ]33s@̎AY@WA@Y@WAճ]?33s@̎A@33s@̎AY@AA@ճ]?Y@AA@33s@̎AY@AA?Y@AA@Y@AAff&@AA@?ff&@AA@Y@AAff&@AA׳]?fff@֨Sfff@֨S@L@@׳]?L@fff@֨SL@@׳]??L@@fff@+@fff@+׳]??L@L@@fff@+̌@֨Š@֨S@fff@֨S@fff@֨Š@֨Sfff@֨S@ճ]@@̌@֨S@@ճ]@̌@֨S@̌@֨Sճ]?@@@̌@+@ճ]?̌@+@@̌@+?̌@+@̌@+fff@+@?fff@+@̌@+fff@+׳]?fff@\1?fff@\1?@L@@׳]?L@fff@\1?L@@׳]??L@@fff@\1@fff@\1׳]??L@L@@fff@\1̌@\1?̌@\1?@fff@\1?@fff@\1?̌@\1?fff@\1?@ճ]@@̌@\1?@@ճ]@̌@\1?@̌@\1?ճ]?@@@̌@\1@ճ]?̌@\1@@̌@\1?̌@\1@̌@\1fff@\1@?fff@\1@̌@\1fff@\1׳]?>ff@MA@33@σBA@33@σBA׳]?>ff@MAff@MA@33@σBAӳ]?33@dXA33@dXA@ff@MA@ӳ]?ff@MA33@dXAff@MA@̬@dXA̬@dXA@33@dXA@33@dXA̬@dXA33@dXA@ӳ]@MA@̬@dXA@@MAӳ]@MA̬@dXA@̬@dXA׳]>@MA@@MA̬@σBA@׳]>̬@σBA@@MA̬@σBA?̬@σBA@̬@σBA33@σBA@?33@σBA@̬@σBA33@σBAճ]?33@\1?33@\1?@ff@@ճ]?ff@33@\1?ff@@ճ]??ff@@33@\1@33@\1ճ]??ff@ff@@33@\1@\1?@\1?@33@\1?@33@\1?@\1?33@\1?@ճ]@@@\1?@@ճ]@@\1?@@\1?ճ]?@@@@\1@ճ]?@\1@@@\1?@\1@@\133@\1@?33@\1@@\133@\1ճ]??<L@ffSL@ffS@ճ]??<@<L@ffS@?SL@S@ffSL@?ffSL@S@ffS@?S@SL@L@?@S@L@?@L@@@L@?L@@@@@SL@@S@@L@@L@@S@@@?33@SL@33@S@@SL@?@SL@33@S@@S@ֳ]?ff@L@ff@@33@SL@ֳ]?33@SL@ff@@33@S@س]ff@L@33@}XKL@ff@@س]ff@@33@}XKL@33@}XK@33@}XK@33@}XKL@@}XKL@@}XK@33@}XK@@}XKL@@L@@@@}XKL@@}XKL@@@@}XK@@@@L@ff&@L@ff&@@@@ff&@L@ff&@г]L@ff&@г]@ff&@L@ff&@L@ff&@г]@ff&@@Գ]?@@\1L@@@\1@ff&@г]L@Գ]?ff&@г]L@@@\1@ff&@г]@س]??@@\1L@\@nsL@\@ns@س]??@@\1@@@\1L@\@ns@?@nsL@@ns@\@nsL@?\@nsL@@ns@\@ns@ڳ]>@\1L@@\1@@nsL@ڳ]>@nsL@@\1@@ns@ڳ]?>@\1L@ff@nsL@ff@ns@ڳ]?>@\1@@\1L@ff@ns@?@nsL@@ns@ff@nsL@?ff@nsL@@ns@ff@ns@ڳ]>33@L@33@@@nsL@ڳ]>@nsL@33@@@ns@ڳ]33@L@@ns?L@33@@ڳ]33@@@ns?L@@ns?@@ns?@@ns?L@ff@ns?L@ff@ns?@@ns?@ff@ns?L@ڳ]?ff@ns?@ff@ns?L@@\1>L@ڳ]?@\1>@ff@ns?@@\1>L@ڳ]@\1>L@@ns?L@@\1>@ڳ]@\1>@@ns?L@@ns?@@ns?@@ns?L@\@ns?L@\@ns?@@ns?@\@ns?L@س]?\@ns?@\@ns?L@@@\1>L@س]?@@\1>@\@ns?@@@\1>L@س]@@\1>L@33#@ns?L@@@\1>@س]@@\1>@33#@ns?L@33#@ns?@33#@ns?@33#@ns?L@?ns?L@?ns?@33#@ns?@?ns?L@س]??ns?@?ns?L@?\1>L@س]??\1>@?ns?@?\1>L@س]?\1>L@ ?ns?L@?\1>@س]?\1>@ ?ns?L@ ?ns?@ ?ns?@ ?ns?L@ ns?L@ ns?@ ?ns?@ ns?L@׳]? ns?@ ns?L@̌L@׳]?̌@ ns?@̌L@ֳ]??̌L@г]L@г]@ֳ]??̌@̌L@г]@?г]@г]L@L@?@г]@L@@L@L@@@L@?@L@}XKL@?}XK@@}XKL@}XK@}XKL@ff}XKL@ff}XK@}XK@ff}XKL@ֳ]?ff}XK@ff}XKL@<L@ֳ]?<@ff}XK@<L@?/A@/AL@?L@??@/A@?L@?ff@?L@ff@?@?L@??L@ff@?@?@ff@/AL@ff@/A@ff@?L@ff@?L@ff@/A@ff@?@ff@/A@ff@/AL@/AL@/A@ff@/A@/AL@ٳ]?>ffMAL@ffƿ[>AL@ffƿ[>A@ٳ]?>ffMA@ffMAL@ffƿ[>A@ֳ]?̿t[A@̿t[AL@ffMAL@ֳ]?ffMA@̿t[A@ffMAL@?ff澣[>AL@ff澣[>A@ffƿ[>AL@?ffƿ[>AL@ff澣[>A@ffƿ[>A@׳]?'JAL@'JA@ff澣[>AL@׳]?ff澣[>AL@'JA@ff澣[>A@׳]??'JAL@ff>[>AL@ff>[>A@׳]??'JA@'JAL@ff>[>A@?ff?[>AL@ff?[>A@ff>[>AL@?ff>[>AL@ff?[>A@ff>[>A@׳]?@'JAL@@'JA@ff?[>AL@׳]?ff?[>AL@@'JA@ff?[>A@׳]??@'JAL@@[>AL@@[>A@׳]??@'JA@@'JAL@@[>A@?33c@[>AL@33c@[>A@@[>AL@?@[>AL@33c@[>A@@[>A@׳]?@'JAL@@'JA@33c@[>AL@׳]?33c@[>AL@@'JA@33c@[>A@س]?>@'JAL@ff@[>AL@ff@[>A@س]?>@'JA@@'JAL@ff@[>A@?@[>AL@@[>A@ff@[>AL@?ff@[>AL@@[>A@ff@[>A@ڳ]>33@MAL@33@MA@@[>AL@ڳ]>@[>AL@33@MA@@[>A@׳]33@MAL@@\AL@33@MA@׳]33@MA@@\AL@@\A@@\A@@\AL@ff@\AL@ff@\A@@\A@ff@\AL@س]?ff@\A@ff@\AL@@ _PAL@س]?@ _PA@ff@\A@@ _PAL@س]@ _PAL@fff@t[AL@@ _PA@س]@ _PA@fff@t[AL@fff@t[A@fff@AAL@fff@AA@fff@t[AL@fff@t[AL@fff@AA@fff@t[A@ҳ]?@̎AL@@̎A@fff@AAL@ҳ]?fff@AAL@@̎A@fff@AA@ҳ]@̎AL@fff@WAL@@̎A@ҳ]@̎A@fff@WAL@fff@WA@fff@33AL@fff@33A@fff@WAL@fff@WAL@fff@33A@fff@WA@fff@33A@fff@33AL@pb@33AL@pb@33A@fff@33A@pb@33AL@]dpb@33AL@`@kAL@pb@33A@]dpb@33A@`@kAL@`@kA@`@kA@`@kAL@ @kAL@ @kA@`@kA@ @kAL@]?d @kA@ @kAL@q@33AL@]?dq@33A@ @kA@q@33AL@q@33A@q@33AL@@33AL@@33A@q@33A@@33AL@?@33A@@33AL@@WAL@?@WA@@33A@@WAL@ҳ]?@WA@@WAL@@̎AL@ҳ]?@̎A@@WA@@̎AL@ҳ]??@̎AL@@AAL@@AA@ҳ]??@̎A@@̎AL@@AA@?@AA@@AAL@@t[AL@?@t[A@@AA@@t[AL@س]?@t[A@@t[AL@@ _PAL@س]?@ _PA@@t[A@@ _PAL@ٳ]@ _PAL@?t[AL@@ _PA@ٳ]@ _PA@?t[AL@?t[A@?σrAL@?σrA@?t[AL@?t[AL@?σrA@?t[A@ٳ]>@}AL@@}A@?σrAL@ٳ]>?σrAL@@}A@?σrA@ӳ]@}AL@?WAL@@}A@ӳ]@}A@?WAL@?WA@?33AL@?33A@?WAL@?WAL@?33A@?WA@?33A@?33AL@?33AL@?33A@?33A@?33AL@]d?33AL@?kAL@?33A@]d?33A@?kAL@?kA@?kA@?kAL@?kAL@?kA@?kA@?kAL@]?_?kA@?kAL@{>33AL@]?_{>33A@?kA@{>33AL@{>33A@{>33AL@>33AL@>33A@{>33A@>33AL@?>33A@>33AL@>WAL@?>WA@>33A@>WAL@ӳ]?>WA@>WAL@}AL@ӳ]?}A@>WA@}AL@ٳ]?>}AL@>σrAL@>σrA@ٳ]?>}A@}AL@>σrA@?>σrA@>σrAL@>t[AL@?>t[A@>σrA@>t[AL@ٳ]?>t[A@>t[AL@ _PAL@ٳ]? _PA@>t[A@ _PAL@ٳ] _PAL@̾t[AL@ _PA@ٳ] _PA@̾t[AL@̾t[A@̾AAL@̾AA@̾t[AL@̾t[AL@̾AA@̾t[A@ӳ]?̎AL@̎A@̾AAL@ӳ]?̾AAL@̎A@̾AA@ӳ]̎AL@̾WAL@̎A@ӳ]̎A@̾WAL@̾WA@̾33AL@̾33A@̾WAL@̾WAL@̾33A@̾WA@̾33A@̾33AL@{33AL@{33A@̾33A@{33AL@]_{33AL@kAL@{33A@]_{33A@kAL@kA@kA@kAL@kAL@kA@kA@kAL@]?dkA@kAL@Ŀ33AL@]?dĿ33A@kA@Ŀ33AL@Ŀ33A@Ŀ33AL@̿33AL@̿33A@Ŀ33A@̿33AL@?̿33A@̿33AL@̿WAL@?̿WA@̿33A@̿WAL@ӳ]?̿WA@̿WAL@̎AL@ӳ]?̎A@̿WA@̎AL@ӳ]??̎AL@̿AAL@̿AA@ӳ]??̎A@̎AL@̿AA@?̿AA@̿AAL@̿t[AL@?̿t[A@̿AA@̿t[AL@?@@S@@?@S@S@@@?@\1@33@\1@@ns@?fff@+@S@@S@?̌@+@@S@33@S@?@@̌@+@ff@@?̾\1@L@г]@?@\1@?\1@33?г]@?@@@ff&@@?@fff@֨S@@}XK@?fff@\1@@@\1@\@ns@?33@\1@@\1@ff@ns@?@̿+@fff@֨S@??\1>@ ?ns?@L?@?\@ns?@@@\1>@@@\1@?33?г]@33?@ff&@г]@?̌@L@ ns?@?̌@г]@L@?>\1?@L?@ ?ns?@??г]@?\1@>\1@?>\1@̾\1@@?̿֨S@?г]@>\1@?+@333@ffS@?L?@>\1@?\1>@?֨S@̿֨S@}XK@?<@333@ff}XK@?<@ffS@333@?333@֨S@ff}XK@?L@̾\1?@ ns?@?33?@@ff&@@?L@@fff@֨S@̿+@̿֨S@>\1@@?33?@?@̿֨S@? ns?@̾\1?@ ?ns?@?̾\1?@>\1?@ ?ns?@?@}XK@̿֨S@?}XK@ff}XK@֨S@?fff@\1@L@@@@\1@?333@@@@\1@@@\1>@??@?\1?@?\1>@?@@@\1@33@@?@\1?@333@@@@\1>@??\1>@>\1@?\1@?33?г]@ff&@г]@@\1@?ff&@г]@33?@ff&@@?̌@\1@fff@\1@@ns@?33?@̿֨S@@??\1?@@\1?@33#@ns?@??\1>@?\1@?@??ns?@?\1?@33#@ns?@??ns?@?\1>@?\1?@?fff@+@ffS@S@?@@}XK@?г]@@̾\1@?@@\1@@\1@ff&@г]@?@@}XK@@@??@?г]@̿֨S@?fff@֨S@̌@֨S@33@}XK@?@}XK@fff@֨S@33@}XK@?̿+@+@ffS@?33@}XK@̌@֨S@ff@@?̌@+@fff@+@@S@?̌@֨S@@@ff@@?ff@@̌@+@33@S@?@@̌@\1@@\1@?33@\1?@@\1?@@ns?@?̌@\1?@@@@\1>@?\@ns?@@@\1@L@@?\@ns?@fff@\1?@@ns?@?\@ns?@L@@fff@\1?@?fff@\1?@̌@\1?@@ns?@?33@\1@ff@@@\1@?@\1@̌@\1@@ns@?@ns@fff@\1@\@ns@?@\1>@@@ff@@?ff@ns?@33@\1?@@ns?@?@\1>@@ns?@̌@\1?@?@ns?@@\1?@33@@?@\1?@@@33@@?33@@@\1@@ns@?@ns@33@\1@ff@ns@?ff@@33@\1?@@\1>@?ff@ns?@@\1>@33@\1?@?fff@+@̿+@ffS@?333@@@\1@@@\1@?@@\1>@33#@ns?@@\1?@?@@@\1@ff@@?fff@+@L@@̿+@??\1@?@?\1@??\1@?\1@33?г]@?σBA@ff澣[>A@'JA@? @MA@ff&@dXA@@ _PA@?33@dXA@̬@dXA@@\A@?@ _PA@fff@t[A@Y@dXA@?ff&@σBA@ff?MA@@'JA@?̬@dXA@@MA@33@MA@>σrA@33?σrA@?σrA@?L>MA@?dXA@'JA@?̿t[A@ffMA@ff濚MA@?@33A@@WA@q@33A@?`@kA@ @kA@q@33A@?>WA@L>}A@{>33A@?}A@L>}A@>WA@?`@kA@q@33A@@WA@?}A@>σrA@L>}A@?ff&@WA@@WA@@̎A@? @̎A@ff&@WA@@̎A@?WA@̾33A@{33A@?fff@t[A@fff@AA@@t[A@??σrA@L>}A@>σrA@??dXA@33?dXA@?t[A@?@}A@?WA@ff?}A@?33?WA@?33A@?33A@?σBA@33σBA@ffƿ[>A@?33σBA@ff濚MA@ffƿ[>A@?33?dXA@ff?MA@@ _PA@?ff̎A@kA@Ŀ33A@?̾t[A@̾AA@dXA@?ff&@AA@ @̎A@@AA@?33?WA@?WA@?33A@?33?WA@ff?}A@?WA@?ff?}A@33?σrA@@}A@?{>33A@>33A@>WA@??σBA@L>MA@'JA@?ff濚MA@33dXA@̿t[A@?Y@σBA@ff&@σBA@33c@[>A@??dXA@>t[A@'JA@?>t[A@ _PA@'JA@?33dXA@̾AA@AA@?dXA@ _PA@̾t[A@?33AA@̿AA@̿t[A@?Y@WA@fff@33A@pb@33A@?WA@L̎A@̾WA@?33AA@ff̎A@̿AA@?33AA@̿t[A@33dXA@?dXA@LMA@ _PA@?ff̎A@̎A@̿AA@?33dXA@dXA@̾AA@?ff濚MA@ffMA@ffƿ[>A@?ff̎A@33WA@kA@?̿WA@Ŀ33A@̿33A@?33?σBA@?σBA@ff?[>A@?WA@̾WA@̾33A@?{>33A@L>}A@?kA@? _PA@LMA@'JA@?ff?MA@33?σBA@@'JA@?ffƿ[>A@ff澣[>A@σBA@?ff̎A@Ŀ33A@̿WA@??WA@33?WA@?kA@?̿WA@̎A@ff̎A@?kA@kA@33WA@? @MA@@ _PA@ff?MA@?kA@33WA@WA@?̎A@L̎A@̾AA@?̎A@̾WA@L̎A@?AA@33AA@33dXA@?L̎A@AA@̾AA@?ff&@dXA@Y@dXA@fff@t[A@?@t[A@@ _PA@ff&@dXA@??t[A@?σrA@>t[A@Y@dXA@ff@MA@@ _PA@?ff?[>A@@'JA@33?σBA@?ff>[>A@?σBA@'JA@?ff>[>A@ff?[>A@?σBA@?WA@{33A@kA@??WA@?kA@L>}A@?̬@σBA@33@σBA@@[>A@??33A@?kA@33?WA@?33?σrA@>t[A@?σrA@?>σrA@>t[A@33?σrA@?33s@̎A@Y@AA@@̎A@?ff&@σBA@ @MA@ff?MA@?@ _PA@?t[A@33?dXA@?fff@t[A@@t[A@ff&@dXA@?Y@dXA@33s@MA@ff@MA@?33c@[>A@@'JA@Y@σBA@?@[>A@ff&@σBA@@'JA@?@[>A@33c@[>A@ff&@σBA@??t[A@>t[A@?dXA@?ff&@WA@Y@WA@`@kA@?`@kA@@WA@ff&@WA@?Y@WA@fff@WA@fff@33A@?pb@33A@`@kA@Y@WA@?@̎A@fff@WA@33s@̎A@??kA@?kA@?WA@?fff@AA@@̎A@Y@AA@?33@MA@@\A@̬@dXA@?33s@MA@Y@σBA@@'JA@?ff@MA@33@dXA@@ _PA@?@[>A@33@MA@̬@σBA@?ff@[>A@33@σBA@@'JA@?ff@[>A@@[>A@33@σBA@?@̎A@@AA@ @̎A@?ff@\A@33@dXA@@\A@?ff@\A@@ _PA@33@dXA@?LMA@σBA@'JA@??σrA@@}A@33?σrA@?Y@WA@33s@̎A@fff@WA@?33@σBA@33s@MA@@'JA@?33@σBA@ff@MA@33s@MA@?@MA@̬@σBA@33@MA@@AA@Y@AA@ff&@AA@?Y@AA@@t[A@fff@AA@?@AA@@t[A@Y@AA@?C=?A@ff@/A@/A@?C=?A@@A@ff@/A@??@L@@/A@?L@@$`4I@@/A@?_a.@*n@@@h@@?@?$`4I@@پff@@/A@?پff@@ڪ@@??@ڪ@@پ̠@@??@$`4h@@L@@??@پ̠@@$`4h@@?~@D>@@Y@@@ff@?@?ڪ@@ff@?@?г]L@?г]@?L@?L@?г]@?@ճ]??\1L@?\1@?г]L@ճ]??г]L@?\1@?г]@33?@33?L@?L@?@33?@?L@?33?г]@33?г]L@33?L@?33?@33?г]@33?L@ճ]???\1L@33?г]L@33?г]@ճ]???\1@?\1L@33?г]@??г]L@?L@33?L@??\1L@?г]L@33?г]L@?33?г]L@?г]L@33?L@openscad-2013.01+dfsg.orig/testdata/scad/bugs/STL-import/adns2610_dev_circuit_inv.scad0000644000175000017500000000017112000421643027702 0ustar chrysnchrysn// Causes CGAL error in CGAL_Nef_polyhedron3(): CGAL ERROR: assertion violation! import("adns2610_dev_circuit_inv.stl"); openscad-2013.01+dfsg.orig/testdata/scad/bugs/polyset-reduce-crash.scad0000644000175000017500000000225611640436735025327 0ustar chrysnchrysnN=20; rotate (a = [0, 0, 36]) { union() { translate ([1, 0]) { polygon (points = [[(N - 1)*cos(180/N), -(N - 1)*sin(180/N)], [(N - 3)*cos(270/N), -(N - 3)*sin(270/N)], [(N - 1)*cos(270/N), -(N - 1)*sin(270/N)]]); polygon (points = [[(N - 1)*cos(180/N), -(N - 1)*sin(180/N)], [(N - 3)*cos(180/N), -(N - 3)*sin(180/N)], [(N - 3)*cos(270/N), -(N - 3)*sin(270/N)]]); polygon (points = [[N - 1, 0], [N - 3, 0], [(N - 3)*cos(180/N), -(N - 3)*sin(180/N)]]); polygon (points = [[N - 1, 0], [(N - 3)*cos(180/N), -(N - 3)*sin(180/N)], [(N - 1)*cos(180/N), -(N - 1)*sin(180/N)]]); polygon (points = [[N - 1, 0], [N - 3, 0], [(N - 3)*cos(180/N), (N - 3)*sin(180/N)]]); polygon (points = [[N - 1, 0], [(N - 3)*cos(180/N), (N - 3)*sin(180/N)], [(N - 1)*cos(180/N), (N - 1)*sin(180/N)]]); polygon (points = [[(N - 1)*cos(180/N), (N - 1)*sin(180/N)], [(N - 3)*cos(180/N), (N - 3)*sin(180/N)], [(N - 3)*cos(270/N), (N - 3)*sin(270/N)]]); polygon (points = [[(N - 1)*cos(180/N), (N - 1)*sin(180/N)], [(N - 3)*cos(270/N), (N - 3)*sin(270/N)], [(N - 1)*cos(270/N), (N - 1)*sin(270/N)]]); } circle (r = 20); } } openscad-2013.01+dfsg.orig/testdata/scad/bugs/polygon-illegal-winding.scad0000644000175000017500000000106511640436735026015 0ustar chrysnchrysnpolyhedron (points = [ [0, -10, 60], [0, 10, 60], [0, 10, 0], [0, -10, 0], [60, -10, 60], [60, 10, 60], [10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30, -10, 50], [30, 10, 50] ], triangles = [ [0,2,3], [0,1,2], [0,4,5], [0,5,1], [5,4,2], [2,4,3], [6,8,9], [6,7,8], [6,10,11], [6,11,7], [10,8,11], [10,9,8], [0,3,9], [9,0,6], [10,6, 0], [0,4,10], [3,9,10], [3,10,4], [1,7,11], [1,11,5], [1,7,8], [1,8,2], [2,8,11], [2,11,5] ] ); openscad-2013.01+dfsg.orig/testdata/scad/bugs/rotate-diff-nonmanifold-crash.scad0000644000175000017500000000035211664172103027054 0ustar chrysnchrysndifference() { rotate_extrude($fn=5) translate([4,0,0]) square([10, 10], center=true); translate([6,6,6]) sphere(r=10); } union() { rotate_extrude($fn=5) translate([4,0,0]) square([10, 10], center=true); cylinder(h=5,r=3); } openscad-2013.01+dfsg.orig/testdata/scad/bugs/issue95-normalization-crash.scad0000644000175000017500000000057312000421643026534 0ustar chrysnchrysn// // Reported by Triffid Hunter. // Causes a crash in CSGTermNormalizer::normalizePass() // difference() { union() { translate([0, -20, 0]) cube([30, 2, 40]); cube(); } translate([15.5, -19, 14]) { cylinder(r=5, h=2); rotate([-90, 0, 0]) difference() { translate([0, 0, 2]) cylinder(r=2, h=3); translate([0, 0, 4]) cylinder(h=2); } } } openscad-2013.01+dfsg.orig/testdata/scad/bugs/bbox-transform-bug.scad0000644000175000017500000000043411676112354024774 0ustar chrysnchrysn// // Bug description: The intersection results in an empty object. // Cause: The rotated bounding box is wrongly calculated, yielding a // box which don't overlap with the bounding box of the second object. // intersection() { rotate(45) cube(10); translate([3,2,0]) cube(10); } openscad-2013.01+dfsg.orig/testdata/scad/bugs/polygon-touch.scad0000644000175000017500000000032011640436732024057 0ustar chrysnchrysn# Somehow the 2D union/tessellation algorithm doesn't support touching polygons # Changing translate([-10,-10,0]) to translate([-9.99,-9.99,0]) works square([10,10]); translate([-10,-10,0]) square([10,10]); openscad-2013.01+dfsg.orig/testdata/scad/bugs/projectioncrash.scad0000644000175000017500000000040311713230315024435 0ustar chrysnchrysn// This causes OpenSCAD to crash. See source code comments: // PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node) // Se also https://github.com/openscad/openscad/issues/80 projection(cut=true) translate([0,0,-4.999999]) cube(10, center=true); openscad-2013.01+dfsg.orig/testdata/scad/bugs/transform-nan-inf-tests.scad0000644000175000017500000000036312040570422025744 0ustar chrysnchrysn// Test translation by NaN and Infinity // cube()s should not be rendered // NaN sphere(); rotate([0, 0, asin(1.1) ]) cube(); // Infinity (as of 2012-08 this is detected as NaN) translate([4,0,0]) { sphere(); rotate([0, 0, 1/0]) cube(); } openscad-2013.01+dfsg.orig/testdata/scad/bugs/minkowski-crash.scad0000644000175000017500000000117311703565234024370 0ustar chrysnchrysn/* Originally reported by nop head 20120107: This causes a CGAL assertion in minkowski on some platforms and CGAL versions: o CGAL-3.6, 3.8 Linux o Windows (OpenSCAD-2011.12 binaries) The problem is that minkowski leaves the target polyhedron in a corrupt state causing a crash. This is worked around in CGALEvaluator::process(). CGAL-3.9 appears to just process forever. */ $fn = 30; minkowski() { union() { cube([10, 10, 10], center=true); cylinder(r=2, h=15, center=true); rotate([90, 0, 0]) cylinder(r=2, h=15, center=true); rotate([0, 90, 0]) cylinder(r=2, h=15, center=true); } sphere(3); } openscad-2013.01+dfsg.orig/testdata/scad/bugs/intersection-prune-test.scad0000644000175000017500000000035011713230315026053 0ustar chrysnchrysn// This tree cannot be pruned inline, but will still result in an empty CSG tree // Crashes OpenSCAD-2011.12. Bug fixed in 14e4f3bb intersection() { union() { cube(); translate([4,0,0]) cube(); } translate([2,0,0]) cube(); } openscad-2013.01+dfsg.orig/testdata/scad/bugs/horn-torus.scad0000644000175000017500000000043611640436732023400 0ustar chrysnchrysn// This model causes a CGAL assertion in CGAL_Nef_polyhedron3(CGAL_Polyhedron) constructor. // One cause of this error could be that the grid handling in PolySet degenerated the original // mesh into a non-manifold one. rotate_extrude($fn = 24) translate ([ 1, 0, 0 ]) circle (r = 1); openscad-2013.01+dfsg.orig/testdata/scad/bugs/fn_bug.stl0000644000175000017500000024534211664172103022412 0ustar chrysnchrysnsolid OpenSCAD_Model facet normal -1 0 0 outer loop vertex -325 -192.679 89.8973 vertex -325 -187.321 89.8973 vertex -325 -197.975 89.0793 endloop endfacet facet normal -1 -0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -187.321 89.8973 vertex -325 -182.025 89.0793 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -182.025 89.0793 vertex -325 -176.916 87.4626 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -176.916 87.4626 vertex -325 -172.114 85.0849 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -172.114 85.0849 vertex -325 -167.732 82.0021 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -167.732 82.0021 vertex -325 -163.871 78.2864 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -163.871 78.2864 vertex -325 -160.622 74.0249 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -160.622 74.0249 vertex -325 -158.062 69.3174 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -158.062 69.3174 vertex -325 -156.251 64.2744 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -156.251 64.2744 vertex -325 -155.231 59.0139 endloop endfacet facet normal -1 -7.67401e-15 -1.09101e-14 outer loop vertex -325 -197.975 89.0793 vertex -325 -155.231 59.0139 vertex -325 -155.026 53.6594 endloop endfacet facet normal -1 1.20845e-15 -1.3951e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -155.026 53.6594 vertex -325 -155.64 48.3363 endloop endfacet facet normal -1 1.06188e-15 -2.91809e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -155.64 48.3363 vertex -325 -157.06 43.1694 endloop endfacet facet normal -1 9.24345e-16 -4.14377e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -157.06 43.1694 vertex -325 -159.252 38.2798 endloop endfacet facet normal -1 7.93678e-16 -5.13981e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -159.252 38.2798 vertex -325 -162.165 33.7821 endloop endfacet facet normal -1 6.68032e-16 -5.95348e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -162.165 33.7821 vertex -325 -165.73 29.7817 endloop endfacet facet normal -1 5.45797e-16 -6.61818e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -165.73 29.7817 vertex -325 -169.864 26.3725 endloop endfacet facet normal -1 4.25511e-16 -7.15741e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -169.864 26.3725 vertex -325 -174.47 23.6342 endloop endfacet facet normal -1 3.05798e-16 -7.58736e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -174.47 23.6342 vertex -325 -179.44 21.6311 endloop endfacet facet normal -1 1.853e-16 -7.9185e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -179.44 21.6311 vertex -325 -184.657 20.4102 endloop endfacet facet normal -1 6.26205e-17 -8.15642e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -184.657 20.4102 vertex -325 -190 20 endloop endfacet facet normal -1 -6.37405e-17 -8.3023e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -190 20 vertex -325 -195.343 20.4102 endloop endfacet facet normal -1 -1.95463e-16 -8.35279e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -195.343 20.4102 vertex -325 -200.56 21.6311 endloop endfacet facet normal -1 -3.345e-16 -8.2995e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -200.56 21.6311 vertex -325 -205.53 23.6342 endloop endfacet facet normal -1 -4.83203e-16 -8.12783e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -205.53 23.6342 vertex -325 -210.136 26.3725 endloop endfacet facet normal -1 -6.44499e-16 -7.81501e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -210.136 26.3725 vertex -325 -214.27 29.7817 endloop endfacet facet normal -1 -8.22137e-16 -7.32685e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -214.27 29.7817 vertex -325 -217.835 33.7821 endloop endfacet facet normal -1 -1.02107e-15 -6.61238e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -217.835 33.7821 vertex -325 -220.748 38.2798 endloop endfacet facet normal -1 -1.24804e-15 -5.59488e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -220.748 38.2798 vertex -325 -222.94 43.1694 endloop endfacet facet normal -1 -1.51255e-15 -4.15655e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -222.94 43.1694 vertex -325 -224.36 48.3363 endloop endfacet facet normal -1 -1.82844e-15 -2.11084e-16 outer loop vertex -325 -197.975 89.0793 vertex -325 -224.36 48.3363 vertex -325 -224.974 53.6594 endloop endfacet facet normal -1 1.24474e-14 -1.10931e-14 outer loop vertex -325 -197.975 89.0793 vertex -325 -224.974 53.6594 vertex -325 -224.769 59.0139 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -224.769 59.0139 vertex -325 -223.749 64.2744 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -223.749 64.2744 vertex -325 -221.938 69.3174 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -221.938 69.3174 vertex -325 -219.378 74.0249 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -219.378 74.0249 vertex -325 -216.129 78.2864 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -216.129 78.2864 vertex -325 -212.268 82.0021 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -212.268 82.0021 vertex -325 -207.886 85.0849 endloop endfacet facet normal -1 0 0 outer loop vertex -325 -197.975 89.0793 vertex -325 -207.886 85.0849 vertex -325 -203.084 87.4626 endloop endfacet facet normal -2.18629e-16 0 1 outer loop vertex -325 -187.321 89.8973 vertex -325 -192.679 89.8973 vertex 325 -192.679 89.8973 endloop endfacet facet normal -2.18629e-16 0 1 outer loop vertex 325 -187.321 89.8973 vertex -325 -187.321 89.8973 vertex 325 -192.679 89.8973 endloop endfacet facet normal -2.16066e-16 -0.152649 0.98828 outer loop vertex 325 -192.679 89.8973 vertex -325 -192.679 89.8973 vertex -325 -197.975 89.0793 endloop endfacet facet normal -2.37673e-16 -0.152649 0.98828 outer loop vertex 325 -197.975 89.0793 vertex 325 -192.679 89.8973 vertex -325 -197.975 89.0793 endloop endfacet facet normal -2.29284e-16 -0.301721 0.953396 outer loop vertex 325 -197.975 89.0793 vertex -325 -197.975 89.0793 vertex -325 -203.084 87.4626 endloop endfacet facet normal -2.29284e-16 -0.301721 0.953396 outer loop vertex 325 -203.084 87.4626 vertex 325 -197.975 89.0793 vertex -325 -203.084 87.4626 endloop endfacet facet normal -2.1552e-16 -0.44372 0.896166 outer loop vertex 325 -203.084 87.4626 vertex -325 -203.084 87.4626 vertex -325 -207.886 85.0849 endloop endfacet facet normal -2.1552e-16 -0.44372 0.896166 outer loop vertex 325 -207.886 85.0849 vertex 325 -203.084 87.4626 vertex -325 -207.886 85.0849 endloop endfacet facet normal -1.96705e-16 -0.575319 0.817929 outer loop vertex 325 -207.886 85.0849 vertex -325 -207.886 85.0849 vertex -325 -212.268 82.0021 endloop endfacet facet normal -1.78823e-16 -0.575319 0.817929 outer loop vertex 325 -212.268 82.0021 vertex 325 -207.886 85.0849 vertex -325 -212.268 82.0021 endloop endfacet facet normal -1.57527e-16 -0.693432 0.720522 outer loop vertex 325 -212.268 82.0021 vertex -325 -212.268 82.0021 vertex -325 -216.129 78.2864 endloop endfacet facet normal -1.73279e-16 -0.693432 0.720522 outer loop vertex 325 -216.129 78.2864 vertex 325 -212.268 82.0021 vertex -325 -216.129 78.2864 endloop endfacet facet normal -1.45792e-16 -0.795293 0.606225 outer loop vertex 325 -216.129 78.2864 vertex -325 -216.129 78.2864 vertex -325 -219.378 74.0249 endloop endfacet facet normal -1.32538e-16 -0.795293 0.606225 outer loop vertex 325 -219.378 74.0249 vertex 325 -216.129 78.2864 vertex -325 -219.378 74.0249 endloop endfacet facet normal -1.04443e-16 -0.878512 0.47772 outer loop vertex 325 -219.378 74.0249 vertex -325 -219.378 74.0249 vertex -325 -221.938 69.3174 endloop endfacet facet normal -1.04443e-16 -0.878512 0.47772 outer loop vertex 325 -221.938 69.3174 vertex 325 -219.378 74.0249 vertex -325 -221.938 69.3174 endloop endfacet facet normal -7.39001e-17 -0.94114 0.338017 outer loop vertex 325 -221.938 69.3174 vertex -325 -221.938 69.3174 vertex -325 -223.749 64.2744 endloop endfacet facet normal -7.39001e-17 -0.94114 0.338017 outer loop vertex 325 -223.749 64.2744 vertex 325 -221.938 69.3174 vertex -325 -223.749 64.2744 endloop endfacet facet normal -4.16249e-17 -0.981708 0.190391 outer loop vertex 325 -223.749 64.2744 vertex -325 -223.749 64.2744 vertex -325 -224.769 59.0139 endloop endfacet facet normal -4.37062e-17 -0.981708 0.190391 outer loop vertex 325 -224.769 59.0139 vertex 325 -223.749 64.2744 vertex -325 -224.769 59.0139 endloop endfacet facet normal -8.79276e-18 -0.999266 0.0383027 outer loop vertex 325 -224.769 59.0139 vertex -325 -224.769 59.0139 vertex -325 -224.974 53.6594 endloop endfacet facet normal -8.37406e-18 -0.999266 0.0383027 outer loop vertex 325 -224.974 53.6594 vertex 325 -224.769 59.0139 vertex -325 -224.974 53.6594 endloop endfacet facet normal 2.50731e-17 -0.993402 -0.114683 outer loop vertex 325 -224.974 53.6594 vertex -325 -224.974 53.6594 vertex -325 -224.36 48.3363 endloop endfacet facet normal 1.68221e-17 -0.993402 -0.114683 outer loop vertex 320.986 -224.769 51.8816 vertex 325 -224.974 53.6594 vertex -325 -224.36 48.3363 endloop endfacet facet normal 2.53115e-17 -0.993402 -0.114683 outer loop vertex 318.876 -224.36 48.3363 vertex 320.986 -224.769 51.8816 vertex -325 -224.36 48.3363 endloop endfacet facet normal 1.17287e-14 -0.993402 -0.114683 outer loop vertex 320.986 -224.769 51.8816 vertex 325 -224.923 53.2143 vertex 325 -224.974 53.6594 endloop endfacet facet normal 5.84835e-17 -0.964254 -0.264981 outer loop vertex 318.876 -224.36 48.3363 vertex -325 -224.36 48.3363 vertex -325 -222.94 43.1694 endloop endfacet facet normal 1.22704e-16 -0.964254 -0.264981 outer loop vertex 315.726 -223.749 46.1132 vertex 318.876 -224.36 48.3363 vertex -325 -222.94 43.1694 endloop endfacet facet normal 5.89784e-17 -0.964254 -0.264981 outer loop vertex 313.473 -222.94 43.1694 vertex 315.726 -223.749 46.1132 vertex -325 -222.94 43.1694 endloop endfacet facet normal 9.10487e-17 -0.912504 -0.409069 outer loop vertex 313.473 -222.94 43.1694 vertex -325 -222.94 43.1694 vertex -325 -220.748 38.2798 endloop endfacet facet normal 1.0433e-16 -0.912504 -0.409069 outer loop vertex 310.683 -221.938 40.9336 vertex 313.473 -222.94 43.1694 vertex -325 -220.748 38.2798 endloop endfacet facet normal 9.17642e-17 -0.912504 -0.409069 outer loop vertex 308.495 -220.748 38.2798 vertex 310.683 -221.938 40.9336 vertex -325 -220.748 38.2798 endloop endfacet facet normal 1.21936e-16 -0.839365 -0.543568 outer loop vertex 308.495 -220.748 38.2798 vertex -325 -220.748 38.2798 vertex -325 -217.835 33.7821 endloop endfacet facet normal 1.49216e-16 -0.839365 -0.543568 outer loop vertex 305.975 -219.378 36.1641 vertex 308.495 -220.748 38.2798 vertex -325 -217.835 33.7821 endloop endfacet facet normal 1.22816e-16 -0.839365 -0.543568 outer loop vertex 303.952 -217.835 33.7821 vertex 305.975 -219.378 36.1641 vertex -325 -217.835 33.7821 endloop endfacet facet normal 1.50327e-16 -0.746553 -0.665326 outer loop vertex 303.952 -217.835 33.7821 vertex -325 -217.835 33.7821 vertex -325 -214.27 29.7817 endloop endfacet facet normal 1.25683e-16 -0.746553 -0.665326 outer loop vertex 301.714 -216.129 31.868 vertex 303.952 -217.835 33.7821 vertex -325 -214.27 29.7817 endloop endfacet facet normal 1.47513e-16 -0.746553 -0.665326 outer loop vertex 299.924 -214.27 29.7817 vertex 301.714 -216.129 31.868 vertex -325 -214.27 29.7817 endloop endfacet facet normal 1.71052e-16 -0.636242 -0.771489 outer loop vertex -325 -214.27 29.7817 vertex -325 -210.136 26.3725 vertex 299.924 -214.27 29.7817 endloop endfacet facet normal 1.72179e-16 -0.636242 -0.771489 outer loop vertex 297.998 -212.268 28.131 vertex -325 -210.136 26.3725 vertex 296.498 -210.136 26.3725 endloop endfacet facet normal 1.26799e-16 -0.636242 -0.771489 outer loop vertex 299.924 -214.27 29.7817 vertex -325 -210.136 26.3725 vertex 297.998 -212.268 28.131 endloop endfacet facet normal 1.91631e-16 -0.511019 -0.85957 outer loop vertex -325 -210.136 26.3725 vertex -325 -205.53 23.6342 vertex 296.498 -210.136 26.3725 endloop endfacet facet normal 1.92508e-16 -0.511019 -0.85957 outer loop vertex 294.915 -207.886 25.0345 vertex -325 -205.53 23.6342 vertex 293.749 -205.53 23.6342 endloop endfacet facet normal 1.90947e-16 -0.511019 -0.85957 outer loop vertex 296.498 -210.136 26.3725 vertex -325 -205.53 23.6342 vertex 294.915 -207.886 25.0345 endloop endfacet facet normal 2.07695e-16 -0.373817 -0.927502 outer loop vertex -325 -205.53 23.6342 vertex -325 -200.56 21.6311 vertex 293.749 -205.53 23.6342 endloop endfacet facet normal 2.08294e-16 -0.373817 -0.927502 outer loop vertex 292.537 -203.084 22.6481 vertex -325 -200.56 21.6311 vertex 291.739 -200.56 21.6311 endloop endfacet facet normal 1.97778e-16 -0.373817 -0.927502 outer loop vertex 293.749 -205.53 23.6342 vertex -325 -200.56 21.6311 vertex 292.537 -203.084 22.6481 endloop endfacet facet normal 2.18749e-16 -0.227853 -0.973695 outer loop vertex -325 -200.56 21.6311 vertex -325 -195.343 20.4102 vertex 291.739 -200.56 21.6311 endloop endfacet facet normal 2.19257e-16 -0.227853 -0.973695 outer loop vertex 290.921 -197.975 21.0261 vertex -325 -195.343 20.4102 vertex 290.514 -195.343 20.4102 endloop endfacet facet normal 2.22429e-16 -0.227853 -0.973695 outer loop vertex 291.739 -200.56 21.6311 vertex -325 -195.343 20.4102 vertex 290.921 -197.975 21.0261 endloop endfacet facet normal 2.24445e-16 -0.0765492 -0.997066 outer loop vertex -325 -195.343 20.4102 vertex -325 -190 20 vertex 290.514 -195.343 20.4102 endloop endfacet facet normal 2.24618e-16 -0.0765492 -0.997066 outer loop vertex 290.103 -192.679 20.2057 vertex -325 -190 20 vertex 290.103 -190 20 endloop endfacet facet normal 2.20957e-16 -0.0765492 -0.997066 outer loop vertex 290.514 -195.343 20.4102 vertex -325 -190 20 vertex 290.103 -192.679 20.2057 endloop endfacet facet normal 2.24445e-16 0.0765492 -0.997066 outer loop vertex -325 -184.657 20.4102 vertex 290.514 -184.657 20.4102 vertex -325 -190 20 endloop endfacet facet normal 2.17441e-16 0.0765492 -0.997066 outer loop vertex -325 -190 20 vertex 290.514 -184.657 20.4102 vertex 290.103 -187.321 20.2057 endloop endfacet facet normal 2.24595e-16 0.0765492 -0.997066 outer loop vertex -325 -190 20 vertex 290.103 -187.321 20.2057 vertex 290.103 -190 20 endloop endfacet facet normal 2.18749e-16 0.227853 -0.973695 outer loop vertex -325 -179.44 21.6311 vertex 291.739 -179.44 21.6311 vertex -325 -184.657 20.4102 endloop endfacet facet normal 2.22429e-16 0.227853 -0.973695 outer loop vertex -325 -184.657 20.4102 vertex 291.739 -179.44 21.6311 vertex 290.921 -182.025 21.0261 endloop endfacet facet normal 2.19185e-16 0.227853 -0.973695 outer loop vertex -325 -184.657 20.4102 vertex 290.921 -182.025 21.0261 vertex 290.514 -184.657 20.4102 endloop endfacet facet normal 2.07695e-16 0.373817 -0.927502 outer loop vertex -325 -174.47 23.6342 vertex 293.749 -174.47 23.6342 vertex -325 -179.44 21.6311 endloop endfacet facet normal 1.97778e-16 0.373817 -0.927502 outer loop vertex -325 -179.44 21.6311 vertex 293.749 -174.47 23.6342 vertex 292.537 -176.916 22.6481 endloop endfacet facet normal 2.08372e-16 0.373817 -0.927502 outer loop vertex -325 -179.44 21.6311 vertex 292.537 -176.916 22.6481 vertex 291.739 -179.44 21.6311 endloop endfacet facet normal 1.91631e-16 0.511019 -0.85957 outer loop vertex -325 -169.864 26.3725 vertex 296.498 -169.864 26.3725 vertex -325 -174.47 23.6342 endloop endfacet facet normal 1.90947e-16 0.511019 -0.85957 outer loop vertex -325 -174.47 23.6342 vertex 296.498 -169.864 26.3725 vertex 294.915 -172.114 25.0345 endloop endfacet facet normal 1.92483e-16 0.511019 -0.85957 outer loop vertex -325 -174.47 23.6342 vertex 294.915 -172.114 25.0345 vertex 293.749 -174.47 23.6342 endloop endfacet facet normal 1.71052e-16 0.636242 -0.771489 outer loop vertex -325 -165.73 29.7817 vertex 299.924 -165.73 29.7817 vertex -325 -169.864 26.3725 endloop endfacet facet normal 1.86891e-16 0.636242 -0.771489 outer loop vertex -325 -169.864 26.3725 vertex 299.924 -165.73 29.7817 vertex 297.998 -167.732 28.131 endloop endfacet facet normal 1.71995e-16 0.636242 -0.771489 outer loop vertex -325 -169.864 26.3725 vertex 297.998 -167.732 28.131 vertex 296.498 -169.864 26.3725 endloop endfacet facet normal 1.51967e-16 0.746553 -0.665326 outer loop vertex -325 -162.165 33.7821 vertex 297.165 -162.165 33.7821 vertex -325 -165.73 29.7817 endloop endfacet facet normal 1.21318e-16 0.746553 -0.665326 outer loop vertex -325 -165.73 29.7817 vertex 297.165 -162.165 33.7821 vertex 300.319 -165.319 30.2424 endloop endfacet facet normal 1.47513e-16 0.746553 -0.665326 outer loop vertex -325 -165.73 29.7817 vertex 300.319 -165.319 30.2424 vertex 299.924 -165.73 29.7817 endloop endfacet facet normal 1.2474e-16 0.839365 -0.543568 outer loop vertex -325 -159.252 38.2798 vertex 294.252 -159.252 38.2798 vertex -325 -162.165 33.7821 endloop endfacet facet normal 1.24156e-16 0.839365 -0.543568 outer loop vertex -325 -162.165 33.7821 vertex 294.252 -159.252 38.2798 vertex 297.165 -162.165 33.7821 endloop endfacet facet normal 8.94978e-17 0.912504 -0.409069 outer loop vertex -325 -157.06 43.1694 vertex 292.06 -157.06 43.1694 vertex -325 -159.252 38.2798 endloop endfacet facet normal 9.38748e-17 0.912504 -0.409069 outer loop vertex -325 -159.252 38.2798 vertex 292.06 -157.06 43.1694 vertex 294.252 -159.252 38.2798 endloop endfacet facet normal 5.81075e-17 0.964254 -0.264981 outer loop vertex -325 -155.64 48.3363 vertex 290.64 -155.64 48.3363 vertex -325 -157.06 43.1694 endloop endfacet facet normal 5.79738e-17 0.964254 -0.264981 outer loop vertex -325 -157.06 43.1694 vertex 290.64 -155.64 48.3363 vertex 292.06 -157.06 43.1694 endloop endfacet facet normal 2.51739e-17 0.993402 -0.114683 outer loop vertex -325 -155.026 53.6594 vertex 290.026 -155.026 53.6594 vertex -325 -155.64 48.3363 endloop endfacet facet normal 2.51488e-17 0.993402 -0.114683 outer loop vertex -325 -155.64 48.3363 vertex 290.026 -155.026 53.6594 vertex 290.64 -155.64 48.3363 endloop endfacet facet normal -8.84731e-18 0.999266 0.0383027 outer loop vertex -325 -155.231 59.0139 vertex 290.231 -155.231 59.0139 vertex -325 -155.026 53.6594 endloop endfacet facet normal -8.40775e-18 0.999266 0.0383027 outer loop vertex -325 -155.026 53.6594 vertex 290.231 -155.231 59.0139 vertex 290.026 -155.026 53.6594 endloop endfacet facet normal -4.39045e-17 0.981708 0.190391 outer loop vertex -325 -156.251 64.2744 vertex 291.251 -156.251 64.2744 vertex -325 -155.231 59.0139 endloop endfacet facet normal -4.39773e-17 0.981708 0.190391 outer loop vertex -325 -155.231 59.0139 vertex 291.251 -156.251 64.2744 vertex 290.231 -155.231 59.0139 endloop endfacet facet normal -7.77188e-17 0.94114 0.338017 outer loop vertex -325 -158.062 69.3174 vertex 293.062 -158.062 69.3174 vertex -325 -156.251 64.2744 endloop endfacet facet normal -7.79472e-17 0.94114 0.338017 outer loop vertex -325 -156.251 64.2744 vertex 293.062 -158.062 69.3174 vertex 291.251 -156.251 64.2744 endloop endfacet facet normal -1.09387e-16 0.878512 0.47772 outer loop vertex -325 -160.622 74.0249 vertex 295.622 -160.622 74.0249 vertex -325 -158.062 69.3174 endloop endfacet facet normal -1.0984e-16 0.878512 0.47772 outer loop vertex -325 -158.062 69.3174 vertex 295.622 -160.622 74.0249 vertex 293.062 -158.062 69.3174 endloop endfacet facet normal -1.38089e-16 0.795293 0.606225 outer loop vertex -325 -163.871 78.2864 vertex 298.871 -163.871 78.2864 vertex -325 -160.622 74.0249 endloop endfacet facet normal -1.38812e-16 0.795293 0.606225 outer loop vertex -325 -160.622 74.0249 vertex 298.871 -163.871 78.2864 vertex 295.622 -160.622 74.0249 endloop endfacet facet normal -1.63183e-16 0.693432 0.720522 outer loop vertex -325 -163.871 78.2864 vertex -325 -167.732 82.0021 vertex 302.732 -167.732 82.0021 endloop endfacet facet normal -1.64124e-16 0.693432 0.720522 outer loop vertex 298.871 -163.871 78.2864 vertex -325 -163.871 78.2864 vertex 302.732 -167.732 82.0021 endloop endfacet facet normal -1.84078e-16 0.575319 0.817929 outer loop vertex -325 -167.732 82.0021 vertex -325 -172.114 85.0849 vertex 307.114 -172.114 85.0849 endloop endfacet facet normal -1.85166e-16 0.575319 0.817929 outer loop vertex 302.732 -167.732 82.0021 vertex -325 -167.732 82.0021 vertex 307.114 -172.114 85.0849 endloop endfacet facet normal -1.99867e-16 0.44372 0.896166 outer loop vertex -325 -172.114 85.0849 vertex -325 -176.916 87.4626 vertex 311.916 -176.916 87.4626 endloop endfacet facet normal -2.01471e-16 0.44372 0.896166 outer loop vertex 307.114 -172.114 85.0849 vertex -325 -172.114 85.0849 vertex 311.916 -176.916 87.4626 endloop endfacet facet normal -2.11185e-16 0.301721 0.953396 outer loop vertex -325 -176.916 87.4626 vertex -325 -182.025 89.0793 vertex 317.025 -182.025 89.0793 endloop endfacet facet normal -2.12721e-16 0.301721 0.953396 outer loop vertex 311.916 -176.916 87.4626 vertex -325 -176.916 87.4626 vertex 317.025 -182.025 89.0793 endloop endfacet facet normal -6.86625e-26 4.58045e-11 3.1406e-10 outer loop vertex 322.321 -187.321 89.8973 vertex -325 -187.321 89.8973 vertex 325 -187.321 89.8973 endloop endfacet facet normal -2.1893e-16 0.152649 0.98828 outer loop vertex 322.321 -187.321 89.8973 vertex 317.025 -182.025 89.0793 vertex -325 -182.025 89.0793 endloop endfacet facet normal -2.22516e-16 0.152649 0.98828 outer loop vertex -325 -182.025 89.0793 vertex -325 -187.321 89.8973 vertex 322.321 -187.321 89.8973 endloop endfacet facet normal 1 -0 0 outer loop vertex 325 -190 89.8973 vertex 325 -192.679 89.8973 vertex 325 -197.975 89.0793 endloop endfacet facet normal 7.55507e-14 -7.62041e-14 2.92096e-15 outer loop vertex 325 -224.974 53.6594 vertex 325 -224.923 55 vertex 325 -224.769 59.0139 endloop endfacet facet normal 3.80741e-13 0 0 outer loop vertex 325 -187.321 89.8973 vertex 325 -192.679 89.8973 vertex 325 -190 89.8973 endloop endfacet facet normal 1 -0 1.41616e-14 outer loop vertex 325 -190 55 vertex 325 -224.769 59.0139 vertex 325 -224.923 55 endloop endfacet facet normal 1 0 0 outer loop vertex 325 -224.923 53.2143 vertex 325 -224.923 55 vertex 325 -224.974 53.6594 endloop endfacet facet normal 1 -1.59908e-15 3.10124e-16 outer loop vertex 325 -190 55 vertex 325 -223.749 64.2744 vertex 325 -224.769 59.0139 endloop endfacet facet normal 1 -1.533e-15 5.50588e-16 outer loop vertex 325 -190 55 vertex 325 -221.938 69.3174 vertex 325 -223.749 64.2744 endloop endfacet facet normal 1 -1.43099e-15 7.78147e-16 outer loop vertex 325 -190 55 vertex 325 -219.378 74.0249 vertex 325 -221.938 69.3174 endloop endfacet facet normal 1 -1.29543e-15 9.87467e-16 outer loop vertex 325 -190 55 vertex 325 -216.129 78.2864 vertex 325 -219.378 74.0249 endloop endfacet facet normal 1 -1.12952e-15 1.17364e-15 outer loop vertex 325 -190 55 vertex 325 -212.268 82.0021 vertex 325 -216.129 78.2864 endloop endfacet facet normal 1 -9.37124e-16 1.33231e-15 outer loop vertex 325 -190 55 vertex 325 -207.886 85.0849 vertex 325 -212.268 82.0021 endloop endfacet facet normal 1 -7.22765e-16 1.45974e-15 outer loop vertex 325 -190 55 vertex 325 -203.084 87.4626 vertex 325 -207.886 85.0849 endloop endfacet facet normal 1 -4.91466e-16 1.55297e-15 outer loop vertex 325 -190 55 vertex 325 -197.975 89.0793 vertex 325 -203.084 87.4626 endloop endfacet facet normal 1 -1.6707e-16 1.62888e-15 outer loop vertex 325 -190 55 vertex 325 -190 89.8973 vertex 325 -197.975 89.0793 endloop endfacet facet normal -0.0383027 -0.999266 0 outer loop vertex 320.986 -224.769 51.8816 vertex 320.986 -224.769 0 vertex 326.341 -224.974 0 endloop endfacet facet normal -0.0383027 -0.999266 3.33645e-16 outer loop vertex 325 -224.923 53.2143 vertex 320.986 -224.769 51.8816 vertex 326.341 -224.974 0 endloop endfacet facet normal -0.0383027 -0.999266 0 outer loop vertex 326.341 -224.974 55 vertex 325 -224.923 53.2143 vertex 326.341 -224.974 0 endloop endfacet facet normal -0.0383027 -0.999266 0 outer loop vertex 325 -224.923 55 vertex 325 -224.923 53.2143 vertex 326.341 -224.974 55 endloop endfacet facet normal -0.190391 -0.981708 0 outer loop vertex 315.726 -223.749 46.1132 vertex 315.726 -223.749 0 vertex 320.986 -224.769 0 endloop endfacet facet normal -0.190391 -0.981708 -3.05543e-16 outer loop vertex 318.876 -224.36 48.3363 vertex 315.726 -223.749 46.1132 vertex 320.986 -224.769 0 endloop endfacet facet normal -0.190391 -0.981708 0 outer loop vertex 320.986 -224.769 51.8816 vertex 318.876 -224.36 48.3363 vertex 320.986 -224.769 0 endloop endfacet facet normal -0.338017 -0.94114 0 outer loop vertex 310.683 -221.938 40.9336 vertex 310.683 -221.938 0 vertex 315.726 -223.749 0 endloop endfacet facet normal -0.338017 -0.94114 -4.96188e-16 outer loop vertex 313.473 -222.94 43.1694 vertex 310.683 -221.938 40.9336 vertex 315.726 -223.749 0 endloop endfacet facet normal -0.338017 -0.94114 0 outer loop vertex 315.726 -223.749 46.1132 vertex 313.473 -222.94 43.1694 vertex 315.726 -223.749 0 endloop endfacet facet normal -0.47772 -0.878512 0 outer loop vertex 305.975 -219.378 36.1641 vertex 305.975 -219.378 0 vertex 310.683 -221.938 0 endloop endfacet facet normal -0.47772 -0.878512 -3.51231e-16 outer loop vertex 308.495 -220.748 38.2798 vertex 305.975 -219.378 36.1641 vertex 310.683 -221.938 0 endloop endfacet facet normal -0.47772 -0.878512 0 outer loop vertex 310.683 -221.938 40.9336 vertex 308.495 -220.748 38.2798 vertex 310.683 -221.938 0 endloop endfacet facet normal -0.606225 -0.795293 0 outer loop vertex 301.714 -216.129 31.868 vertex 301.714 -216.129 0 vertex 305.975 -219.378 0 endloop endfacet facet normal -0.606225 -0.795293 -7.19916e-16 outer loop vertex 303.952 -217.835 33.7821 vertex 301.714 -216.129 31.868 vertex 305.975 -219.378 0 endloop endfacet facet normal -0.606225 -0.795293 0 outer loop vertex 305.975 -219.378 36.1641 vertex 303.952 -217.835 33.7821 vertex 305.975 -219.378 0 endloop endfacet facet normal -0.720522 -0.693432 -0 outer loop vertex 297.998 -212.268 0 vertex 301.714 -216.129 0 vertex 297.998 -212.268 28.131 endloop endfacet facet normal -0.720522 -0.693432 0 outer loop vertex 299.924 -214.27 29.7817 vertex 301.714 -216.129 0 vertex 301.714 -216.129 31.868 endloop endfacet facet normal -0.720522 -0.693432 1.30682e-15 outer loop vertex 297.998 -212.268 28.131 vertex 301.714 -216.129 0 vertex 299.924 -214.27 29.7817 endloop endfacet facet normal -0.817929 -0.575319 -0 outer loop vertex 294.915 -207.886 0 vertex 297.998 -212.268 0 vertex 294.915 -207.886 25.0345 endloop endfacet facet normal -0.817929 -0.575319 0 outer loop vertex 296.498 -210.136 26.3725 vertex 297.998 -212.268 0 vertex 297.998 -212.268 28.131 endloop endfacet facet normal -0.817929 -0.575319 2.61604e-15 outer loop vertex 294.915 -207.886 25.0345 vertex 297.998 -212.268 0 vertex 296.498 -210.136 26.3725 endloop endfacet facet normal -0.896166 -0.44372 -0 outer loop vertex 292.537 -203.084 0 vertex 294.915 -207.886 0 vertex 292.537 -203.084 22.6481 endloop endfacet facet normal -0.896166 -0.44372 0 outer loop vertex 293.749 -205.53 23.6342 vertex 294.915 -207.886 0 vertex 294.915 -207.886 25.0345 endloop endfacet facet normal -0.896166 -0.44372 -1.27044e-15 outer loop vertex 292.537 -203.084 22.6481 vertex 294.915 -207.886 0 vertex 293.749 -205.53 23.6342 endloop endfacet facet normal -0.953396 -0.301721 -0 outer loop vertex 290.921 -197.975 0 vertex 292.537 -203.084 0 vertex 290.921 -197.975 21.0261 endloop endfacet facet normal -0.953396 -0.301721 0 outer loop vertex 291.739 -200.56 21.6311 vertex 292.537 -203.084 0 vertex 292.537 -203.084 22.6481 endloop endfacet facet normal -0.953396 -0.301721 -2.96261e-15 outer loop vertex 290.921 -197.975 21.0261 vertex 292.537 -203.084 0 vertex 291.739 -200.56 21.6311 endloop endfacet facet normal -0.98828 -0.152649 -0 outer loop vertex 290.103 -192.679 0 vertex 290.921 -197.975 0 vertex 290.103 -192.679 20.2057 endloop endfacet facet normal -0.98828 -0.152649 0 outer loop vertex 290.514 -195.343 20.4102 vertex 290.921 -197.975 0 vertex 290.921 -197.975 21.0261 endloop endfacet facet normal -0.98828 -0.152649 -1.79868e-15 outer loop vertex 290.103 -192.679 20.2057 vertex 290.921 -197.975 0 vertex 290.514 -195.343 20.4102 endloop endfacet facet normal -1 -0 -0 outer loop vertex 290.103 -192.679 0 vertex 290.103 -192.679 20.2057 vertex 290.103 -187.321 0 endloop endfacet facet normal -1 0 0 outer loop vertex 290.103 -187.321 0 vertex 290.103 -192.679 20.2057 vertex 290.103 -190 20 endloop endfacet facet normal -1 0 0 outer loop vertex 290.103 -187.321 0 vertex 290.103 -190 20 vertex 290.103 -187.321 20.2057 endloop endfacet facet normal -0.98828 0.152649 0 outer loop vertex 290.103 -187.321 0 vertex 290.103 -187.321 20.2057 vertex 290.921 -182.025 0 endloop endfacet facet normal -0.98828 0.152649 -1.79868e-15 outer loop vertex 290.921 -182.025 0 vertex 290.103 -187.321 20.2057 vertex 290.514 -184.657 20.4102 endloop endfacet facet normal -0.98828 0.152649 0 outer loop vertex 290.921 -182.025 0 vertex 290.514 -184.657 20.4102 vertex 290.921 -182.025 21.0261 endloop endfacet facet normal -0.953396 0.301721 0 outer loop vertex 290.921 -182.025 0 vertex 290.921 -182.025 21.0261 vertex 292.537 -176.916 0 endloop endfacet facet normal -0.953396 0.301721 -2.96261e-15 outer loop vertex 292.537 -176.916 0 vertex 290.921 -182.025 21.0261 vertex 291.739 -179.44 21.6311 endloop endfacet facet normal -0.953396 0.301721 0 outer loop vertex 292.537 -176.916 0 vertex 291.739 -179.44 21.6311 vertex 292.537 -176.916 22.6481 endloop endfacet facet normal -0.896166 0.44372 0 outer loop vertex 292.537 -176.916 0 vertex 292.537 -176.916 22.6481 vertex 294.915 -172.114 0 endloop endfacet facet normal -0.896166 0.44372 -1.27044e-15 outer loop vertex 294.915 -172.114 0 vertex 292.537 -176.916 22.6481 vertex 293.749 -174.47 23.6342 endloop endfacet facet normal -0.896166 0.44372 0 outer loop vertex 294.915 -172.114 0 vertex 293.749 -174.47 23.6342 vertex 294.915 -172.114 25.0345 endloop endfacet facet normal -0.817929 0.575319 0 outer loop vertex 294.915 -172.114 0 vertex 294.915 -172.114 25.0345 vertex 297.998 -167.732 0 endloop endfacet facet normal -0.817929 0.575319 2.0321e-15 outer loop vertex 297.998 -167.732 0 vertex 294.915 -172.114 25.0345 vertex 296.498 -169.864 26.3725 endloop endfacet facet normal -0.817929 0.575319 0 outer loop vertex 297.998 -167.732 0 vertex 296.498 -169.864 26.3725 vertex 297.998 -167.732 28.131 endloop endfacet facet normal -0.720522 0.693432 0 outer loop vertex 297.998 -167.732 0 vertex 297.998 -167.732 28.131 vertex 301.714 -163.871 0 endloop endfacet facet normal -0.720522 0.693432 7.24876e-16 outer loop vertex 301.714 -163.871 0 vertex 297.998 -167.732 28.131 vertex 299.924 -165.73 29.7817 endloop endfacet facet normal -0.720522 0.693432 -4.64722e-16 outer loop vertex 301.714 -163.871 0 vertex 299.924 -165.73 29.7817 vertex 300.319 -165.319 30.2424 endloop endfacet facet normal -0.720522 0.693432 -6.2779e-16 outer loop vertex 301.714 -163.871 0 vertex 300.319 -165.319 30.2424 vertex 300.73 -164.893 29.7817 endloop endfacet facet normal -0.720522 0.693432 0 outer loop vertex 301.714 -163.871 0 vertex 300.73 -164.893 29.7817 vertex 301.714 -163.871 28.9705 endloop endfacet facet normal -0.746553 -2.41005e-16 -0.665326 outer loop vertex 297.165 190 33.7821 vertex 300.73 190 29.7817 vertex 297.165 -162.165 33.7821 endloop endfacet facet normal -0.746553 -2.3913e-16 -0.665326 outer loop vertex 297.165 -162.165 33.7821 vertex 300.73 190 29.7817 vertex 300.73 -164.893 29.7817 endloop endfacet facet normal -0.746553 -1.52175e-14 -0.665326 outer loop vertex 297.165 -162.165 33.7821 vertex 300.73 -164.893 29.7817 vertex 300.319 -165.319 30.2424 endloop endfacet facet normal -0.839365 -1.36613e-16 -0.543568 outer loop vertex 294.252 190 38.2798 vertex 297.165 190 33.7821 vertex 294.252 -159.252 38.2798 endloop endfacet facet normal -0.839365 -2.45689e-16 -0.543568 outer loop vertex 294.252 -159.252 38.2798 vertex 297.165 190 33.7821 vertex 297.165 -162.165 33.7821 endloop endfacet facet normal -0.912504 -2.9891e-16 -0.409069 outer loop vertex 292.06 190 43.1694 vertex 294.252 190 38.2798 vertex 292.06 -157.06 43.1694 endloop endfacet facet normal -0.912504 -2.31602e-16 -0.409069 outer loop vertex 292.06 -157.06 43.1694 vertex 294.252 190 38.2798 vertex 294.252 -159.252 38.2798 endloop endfacet facet normal -0.964254 -3.17159e-16 -0.264981 outer loop vertex 290.64 190 48.3363 vertex 292.06 190 43.1694 vertex 290.64 -155.64 48.3363 endloop endfacet facet normal -0.964254 -2.12528e-16 -0.264981 outer loop vertex 290.64 -155.64 48.3363 vertex 292.06 190 43.1694 vertex 292.06 -157.06 43.1694 endloop endfacet facet normal -0.993402 -1.63664e-16 -0.114683 outer loop vertex 290.026 190 53.6594 vertex 290.64 190 48.3363 vertex 290.026 -155.026 53.6594 endloop endfacet facet normal -0.993402 -1.87026e-16 -0.114683 outer loop vertex 290.026 -155.026 53.6594 vertex 290.64 190 48.3363 vertex 290.64 -155.64 48.3363 endloop endfacet facet normal -0.999266 -1.6463e-16 0.0383027 outer loop vertex 290.026 190 53.6594 vertex 290.026 -155.026 53.6594 vertex 290.231 190 59.0139 endloop endfacet facet normal -0.999266 -1.64532e-16 0.0383027 outer loop vertex 290.231 190 59.0139 vertex 290.026 -155.026 53.6594 vertex 290.231 -155.231 59.0139 endloop endfacet facet normal -0.981708 -1.61642e-16 0.190391 outer loop vertex 290.231 190 59.0139 vertex 290.231 -155.231 59.0139 vertex 291.251 190 64.2744 endloop endfacet facet normal -0.981708 -1.61165e-16 0.190391 outer loop vertex 291.251 190 64.2744 vertex 290.231 -155.231 59.0139 vertex 291.251 -156.251 64.2744 endloop endfacet facet normal -0.94114 -1.54505e-16 0.338017 outer loop vertex 291.251 190 64.2744 vertex 291.251 -156.251 64.2744 vertex 293.062 190 69.3174 endloop endfacet facet normal -0.94114 -1.53701e-16 0.338017 outer loop vertex 293.062 190 69.3174 vertex 291.251 -156.251 64.2744 vertex 293.062 -158.062 69.3174 endloop endfacet facet normal -0.878512 -1.43473e-16 0.47772 outer loop vertex 293.062 190 69.3174 vertex 293.062 -158.062 69.3174 vertex 295.622 190 74.0249 endloop endfacet facet normal -0.878512 -1.42426e-16 0.47772 outer loop vertex 295.622 190 74.0249 vertex 293.062 -158.062 69.3174 vertex 295.622 -160.622 74.0249 endloop endfacet facet normal -0.795293 -1.28934e-16 0.606225 outer loop vertex 295.622 190 74.0249 vertex 295.622 -160.622 74.0249 vertex 298.871 190 78.2864 endloop endfacet facet normal -0.795293 -1.27751e-16 0.606225 outer loop vertex 298.871 190 78.2864 vertex 295.622 -160.622 74.0249 vertex 298.871 -163.871 78.2864 endloop endfacet facet normal -0.693432 -1.11479e-16 0.720522 outer loop vertex 302.732 190 82.0021 vertex 298.871 190 78.2864 vertex 298.871 -163.871 78.2864 endloop endfacet facet normal -0.693432 -1.10186e-16 0.720522 outer loop vertex 302.732 -167.732 82.0021 vertex 302.732 190 82.0021 vertex 298.871 -163.871 78.2864 endloop endfacet facet normal -0.575319 -9.17422e-17 0.817929 outer loop vertex 307.114 190 85.0849 vertex 302.732 190 82.0021 vertex 302.732 -167.732 82.0021 endloop endfacet facet normal -0.575319 -1.80623e-16 0.817929 outer loop vertex 307.114 -172.114 85.0849 vertex 307.114 190 85.0849 vertex 302.732 -167.732 82.0021 endloop endfacet facet normal -0.44372 -1.39152e-16 0.896166 outer loop vertex 311.916 190 87.4626 vertex 307.114 190 85.0849 vertex 307.114 -172.114 85.0849 endloop endfacet facet normal -0.44372 -6.8742e-17 0.896166 outer loop vertex 311.916 -176.916 87.4626 vertex 311.916 190 87.4626 vertex 307.114 -172.114 85.0849 endloop endfacet facet normal -0.301721 -4.69816e-17 0.953396 outer loop vertex 317.025 190 89.0793 vertex 311.916 190 87.4626 vertex 311.916 -176.916 87.4626 endloop endfacet facet normal -0.301721 -4.61013e-17 0.953396 outer loop vertex 317.025 -182.025 89.0793 vertex 317.025 190 89.0793 vertex 311.916 -176.916 87.4626 endloop endfacet facet normal -0.152649 -2.36137e-17 0.98828 outer loop vertex 322.321 190 89.8973 vertex 317.025 190 89.0793 vertex 317.025 -182.025 89.0793 endloop endfacet facet normal -0.152649 -4.59933e-17 0.98828 outer loop vertex 322.321 -187.321 89.8973 vertex 322.321 190 89.8973 vertex 317.025 -182.025 89.0793 endloop endfacet facet normal 0 0 1 outer loop vertex 327.679 190 89.8973 vertex 322.321 190 89.8973 vertex 322.321 -187.321 89.8973 endloop endfacet facet normal 0 0 1 outer loop vertex 325 -190 89.8973 vertex 327.679 190 89.8973 vertex 325 -187.321 89.8973 endloop endfacet facet normal -0 0 1 outer loop vertex 325 -187.321 89.8973 vertex 327.679 190 89.8973 vertex 322.321 -187.321 89.8973 endloop endfacet facet normal -0 0 1 outer loop vertex 327.679 -190 89.8973 vertex 327.679 190 89.8973 vertex 325 -190 89.8973 endloop endfacet facet normal 1.06082e-14 -1 1.72794e-29 outer loop vertex 327.679 -190 89.8973 vertex 325 -190 89.8973 vertex 325 -190 55 endloop endfacet facet normal 0 -1 0 outer loop vertex 359.769 -190 59.0139 vertex 327.679 -190 89.8973 vertex 359.923 -190 55 endloop endfacet facet normal 8.13841e-16 -1 7.51956e-16 outer loop vertex 359.923 -190 55 vertex 327.679 -190 89.8973 vertex 325 -190 55 endloop endfacet facet normal 0 -1 0 outer loop vertex 358.749 -190 64.2744 vertex 327.679 -190 89.8973 vertex 359.769 -190 59.0139 endloop endfacet facet normal 0 -1 0 outer loop vertex 356.938 -190 69.3174 vertex 327.679 -190 89.8973 vertex 358.749 -190 64.2744 endloop endfacet facet normal 0 -1 0 outer loop vertex 354.378 -190 74.0249 vertex 327.679 -190 89.8973 vertex 356.938 -190 69.3174 endloop endfacet facet normal 0 -1 0 outer loop vertex 351.129 -190 78.2864 vertex 327.679 -190 89.8973 vertex 354.378 -190 74.0249 endloop endfacet facet normal 0 -1 0 outer loop vertex 347.268 -190 82.0021 vertex 327.679 -190 89.8973 vertex 351.129 -190 78.2864 endloop endfacet facet normal 0 -1 0 outer loop vertex 342.886 -190 85.0849 vertex 327.679 -190 89.8973 vertex 347.268 -190 82.0021 endloop endfacet facet normal 0 -1 0 outer loop vertex 338.084 -190 87.4626 vertex 327.679 -190 89.8973 vertex 342.886 -190 85.0849 endloop endfacet facet normal 0 -1 0 outer loop vertex 332.975 -190 89.0793 vertex 327.679 -190 89.8973 vertex 338.084 -190 87.4626 endloop endfacet facet normal 0 -0 1 outer loop vertex 325 -190 55 vertex 325 -224.923 55 vertex 326.341 -224.974 55 endloop endfacet facet normal -0 0 1 outer loop vertex 336.831 -222.94 55 vertex 325 -190 55 vertex 331.664 -224.36 55 endloop endfacet facet normal -0 0 1 outer loop vertex 331.664 -224.36 55 vertex 325 -190 55 vertex 326.341 -224.974 55 endloop endfacet facet normal -0 0 1 outer loop vertex 341.72 -220.748 55 vertex 325 -190 55 vertex 336.831 -222.94 55 endloop endfacet facet normal -0 0 1 outer loop vertex 346.218 -217.835 55 vertex 325 -190 55 vertex 341.72 -220.748 55 endloop endfacet facet normal -0 0 1 outer loop vertex 350.218 -214.27 55 vertex 325 -190 55 vertex 346.218 -217.835 55 endloop endfacet facet normal -0 0 1 outer loop vertex 353.628 -210.136 55 vertex 325 -190 55 vertex 350.218 -214.27 55 endloop endfacet facet normal -0 0 1 outer loop vertex 356.366 -205.53 55 vertex 325 -190 55 vertex 353.628 -210.136 55 endloop endfacet facet normal -0 0 1 outer loop vertex 358.369 -200.56 55 vertex 325 -190 55 vertex 356.366 -205.53 55 endloop endfacet facet normal -0 0 1 outer loop vertex 359.59 -195.343 55 vertex 325 -190 55 vertex 358.369 -200.56 55 endloop endfacet facet normal 0 0 1 outer loop vertex 360 -190 55 vertex 325 -190 55 vertex 359.59 -195.343 55 endloop endfacet facet normal 0 -0 9.9476e-13 outer loop vertex 359.923 -190 55 vertex 325 -190 55 vertex 360 -190 55 endloop endfacet facet normal 0 -0 1 outer loop vertex 359.923 -188.996 55 vertex 359.923 -190 55 vertex 360 -190 55 endloop endfacet facet normal 0.114683 -0.993402 0 outer loop vertex 326.341 -224.974 55 vertex 326.341 -224.974 0 vertex 331.664 -224.36 0 endloop endfacet facet normal 0.114683 -0.993402 0 outer loop vertex 331.664 -224.36 55 vertex 326.341 -224.974 55 vertex 331.664 -224.36 0 endloop endfacet facet normal -0 -0 -1 outer loop vertex 290.103 -192.679 0 vertex 290.103 -187.321 0 vertex 290.921 -197.975 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 290.103 -187.321 0 vertex 290.921 -182.025 0 endloop endfacet facet normal 0 -0 -1 outer loop vertex 290.921 -197.975 0 vertex 290.921 -182.025 0 vertex 292.537 -176.916 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 292.537 -176.916 0 vertex 294.915 -172.114 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 294.915 -172.114 0 vertex 297.998 -167.732 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 297.998 -167.732 0 vertex 301.714 -163.871 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 301.714 -163.871 0 vertex 305.975 -160.622 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 305.975 -160.622 0 vertex 310.683 -158.062 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 310.683 -158.062 0 vertex 315.726 -156.251 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 315.726 -156.251 0 vertex 320.986 -155.231 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 320.986 -155.231 0 vertex 326.341 -155.026 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 326.341 -155.026 0 vertex 331.664 -155.64 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 331.664 -155.64 0 vertex 336.831 -157.06 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 336.831 -157.06 0 vertex 341.72 -159.252 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 341.72 -159.252 0 vertex 346.218 -162.165 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 346.218 -162.165 0 vertex 350.218 -165.73 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 350.218 -165.73 0 vertex 353.628 -169.864 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 353.628 -169.864 0 vertex 356.366 -174.47 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 356.366 -174.47 0 vertex 358.369 -179.44 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 358.369 -179.44 0 vertex 359.59 -184.657 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 359.59 -184.657 0 vertex 360 -190 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 360 -190 0 vertex 359.59 -195.343 0 endloop endfacet facet normal -0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 359.59 -195.343 0 vertex 358.369 -200.56 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 358.369 -200.56 0 vertex 356.366 -205.53 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 356.366 -205.53 0 vertex 353.628 -210.136 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 353.628 -210.136 0 vertex 350.218 -214.27 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 350.218 -214.27 0 vertex 346.218 -217.835 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 346.218 -217.835 0 vertex 341.72 -220.748 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 341.72 -220.748 0 vertex 336.831 -222.94 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 336.831 -222.94 0 vertex 331.664 -224.36 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 331.664 -224.36 0 vertex 326.341 -224.974 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 326.341 -224.974 0 vertex 320.986 -224.769 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 320.986 -224.769 0 vertex 315.726 -223.749 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 315.726 -223.749 0 vertex 310.683 -221.938 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 310.683 -221.938 0 vertex 305.975 -219.378 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 305.975 -219.378 0 vertex 301.714 -216.129 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 301.714 -216.129 0 vertex 297.998 -212.268 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 297.998 -212.268 0 vertex 294.915 -207.886 0 endloop endfacet facet normal 0 0 -1 outer loop vertex 290.921 -197.975 0 vertex 294.915 -207.886 0 vertex 292.537 -203.084 0 endloop endfacet facet normal -0.606225 0.795293 0 outer loop vertex 301.714 -163.871 0 vertex 301.714 -163.871 28.9705 vertex 305.975 -160.622 0 endloop endfacet facet normal -0.606225 0.795293 1.057e-16 outer loop vertex 305.975 -160.622 0 vertex 301.714 -163.871 28.9705 vertex 304.864 -161.469 26.3725 endloop endfacet facet normal -0.606225 0.795293 0 outer loop vertex 305.975 -160.622 0 vertex 304.864 -161.469 26.3725 vertex 305.975 -160.622 25.7118 endloop endfacet facet normal -0.636242 -2.03815e-16 -0.771489 outer loop vertex 300.73 190 29.7817 vertex 304.864 190 26.3725 vertex 300.73 -164.893 29.7817 endloop endfacet facet normal -0.636242 -2.05464e-16 -0.771489 outer loop vertex 301.714 -163.871 28.9705 vertex 304.864 190 26.3725 vertex 304.864 -161.469 26.3725 endloop endfacet facet normal -0.636242 -2.31456e-16 -0.771489 outer loop vertex 300.73 -164.893 29.7817 vertex 304.864 190 26.3725 vertex 301.714 -163.871 28.9705 endloop endfacet facet normal 0 1 0 outer loop vertex 290.026 190 53.6594 vertex 290.231 190 59.0139 vertex 290.64 190 48.3363 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 290.231 190 59.0139 vertex 291.251 190 64.2744 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 291.251 190 64.2744 vertex 293.062 190 69.3174 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 293.062 190 69.3174 vertex 295.622 190 74.0249 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 295.622 190 74.0249 vertex 298.871 190 78.2864 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 298.871 190 78.2864 vertex 302.732 190 82.0021 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 302.732 190 82.0021 vertex 307.114 190 85.0849 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 307.114 190 85.0849 vertex 311.916 190 87.4626 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 311.916 190 87.4626 vertex 317.025 190 89.0793 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 317.025 190 89.0793 vertex 322.321 190 89.8973 endloop endfacet facet normal -5.30409e-15 1 4.04313e-15 outer loop vertex 290.64 190 48.3363 vertex 322.321 190 89.8973 vertex 327.679 190 89.8973 endloop endfacet facet normal -9.28472e-17 1 -6.0111e-16 outer loop vertex 290.64 190 48.3363 vertex 327.679 190 89.8973 vertex 332.975 190 89.0793 endloop endfacet facet normal -1.66134e-16 1 -5.24961e-16 outer loop vertex 290.64 190 48.3363 vertex 332.975 190 89.0793 vertex 338.084 190 87.4626 endloop endfacet facet normal -2.24739e-16 1 -4.53898e-16 outer loop vertex 290.64 190 48.3363 vertex 338.084 190 87.4626 vertex 342.886 190 85.0849 endloop endfacet facet normal -2.72002e-16 1 -3.86704e-16 outer loop vertex 290.64 190 48.3363 vertex 342.886 190 85.0849 vertex 347.268 190 82.0021 endloop endfacet facet normal -3.10249e-16 1 -3.22369e-16 outer loop vertex 290.64 190 48.3363 vertex 347.268 190 82.0021 vertex 351.129 190 78.2864 endloop endfacet facet normal -3.41119e-16 1 -2.60023e-16 outer loop vertex 290.64 190 48.3363 vertex 351.129 190 78.2864 vertex 354.378 190 74.0249 endloop endfacet facet normal -3.65757e-16 1 -1.98892e-16 outer loop vertex 290.64 190 48.3363 vertex 354.378 190 74.0249 vertex 356.938 190 69.3174 endloop endfacet facet normal -3.84946e-16 1 -1.38256e-16 outer loop vertex 290.64 190 48.3363 vertex 356.938 190 69.3174 vertex 358.749 190 64.2744 endloop endfacet facet normal -3.99183e-16 1 -7.7417e-17 outer loop vertex 290.64 190 48.3363 vertex 358.749 190 64.2744 vertex 359.769 190 59.0139 endloop endfacet facet normal -4.08721e-16 1 -1.56666e-17 outer loop vertex 290.64 190 48.3363 vertex 359.769 190 59.0139 vertex 359.974 190 53.6594 endloop endfacet facet normal -4.1359e-16 1 4.77469e-17 outer loop vertex 290.64 190 48.3363 vertex 359.974 190 53.6594 vertex 359.36 190 48.3363 endloop endfacet facet normal -4.1359e-16 1 1.13656e-16 outer loop vertex 290.64 190 48.3363 vertex 359.36 190 48.3363 vertex 357.94 190 43.1694 endloop endfacet facet normal -4.08264e-16 1 1.83022e-16 outer loop vertex 290.64 190 48.3363 vertex 357.94 190 43.1694 vertex 355.748 190 38.2798 endloop endfacet facet normal -3.96839e-16 1 2.5699e-16 outer loop vertex 290.64 190 48.3363 vertex 355.748 190 38.2798 vertex 352.835 190 33.7821 endloop endfacet facet normal -3.78121e-16 1 3.3698e-16 outer loop vertex 290.64 190 48.3363 vertex 352.835 190 33.7821 vertex 349.27 190 29.7817 endloop endfacet facet normal -3.50329e-16 1 4.24799e-16 outer loop vertex 290.64 190 48.3363 vertex 349.27 190 29.7817 vertex 345.136 190 26.3725 endloop endfacet facet normal -3.10821e-16 1 5.22824e-16 outer loop vertex 290.64 190 48.3363 vertex 345.136 190 26.3725 vertex 340.53 190 23.6342 endloop endfacet facet normal -2.55637e-16 1 6.34277e-16 outer loop vertex 290.64 190 48.3363 vertex 340.53 190 23.6342 vertex 335.56 190 21.6311 endloop endfacet facet normal -1.78708e-16 1 7.63678e-16 outer loop vertex 290.64 190 48.3363 vertex 335.56 190 21.6311 vertex 330.343 190 20.4102 endloop endfacet facet normal -7.04476e-17 1 9.17591e-16 outer loop vertex 290.64 190 48.3363 vertex 330.343 190 20.4102 vertex 325 190 20 endloop endfacet facet normal -5.78086e-15 1 -6.00669e-15 outer loop vertex 290.64 190 48.3363 vertex 325 190 20 vertex 319.657 190 20.4102 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 319.657 190 20.4102 vertex 314.44 190 21.6311 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 314.44 190 21.6311 vertex 309.47 190 23.6342 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 309.47 190 23.6342 vertex 304.864 190 26.3725 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 304.864 190 26.3725 vertex 300.73 190 29.7817 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 300.73 190 29.7817 vertex 297.165 190 33.7821 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 297.165 190 33.7821 vertex 294.252 190 38.2798 endloop endfacet facet normal 0 1 0 outer loop vertex 290.64 190 48.3363 vertex 294.252 190 38.2798 vertex 292.06 190 43.1694 endloop endfacet facet normal 0.152649 4.5364e-17 0.98828 outer loop vertex 332.975 190 89.0793 vertex 327.679 190 89.8973 vertex 327.679 -190 89.8973 endloop endfacet facet normal 0.152649 2.28345e-17 0.98828 outer loop vertex 332.975 -190 89.0793 vertex 332.975 190 89.0793 vertex 327.679 -190 89.8973 endloop endfacet facet normal 0.301721 4.5364e-17 0.953396 outer loop vertex 338.084 190 87.4626 vertex 332.975 190 89.0793 vertex 332.975 -190 89.0793 endloop endfacet facet normal 0.301721 4.51338e-17 0.953396 outer loop vertex 338.084 -190 87.4626 vertex 338.084 190 87.4626 vertex 332.975 -190 89.0793 endloop endfacet facet normal 0.44372 6.63012e-17 0.896166 outer loop vertex 342.886 190 85.0849 vertex 338.084 190 87.4626 vertex 338.084 -190 87.4626 endloop endfacet facet normal 0.44372 6.63752e-17 0.896166 outer loop vertex 342.886 -190 85.0849 vertex 342.886 190 85.0849 vertex 338.084 -190 87.4626 endloop endfacet facet normal 0.575319 8.6366e-17 0.817929 outer loop vertex 347.268 190 82.0021 vertex 342.886 190 85.0849 vertex 342.886 -190 85.0849 endloop endfacet facet normal 0.575319 8.60607e-17 0.817929 outer loop vertex 347.268 -190 82.0021 vertex 347.268 190 82.0021 vertex 342.886 -190 85.0849 endloop endfacet facet normal 0.693432 1.03814e-16 0.720522 outer loop vertex 351.129 190 78.2864 vertex 347.268 190 82.0021 vertex 347.268 -190 82.0021 endloop endfacet facet normal 0.693432 2.07458e-16 0.720522 outer loop vertex 351.129 -190 78.2864 vertex 351.129 190 78.2864 vertex 347.268 -190 82.0021 endloop endfacet facet normal 0.795293 2.38161e-16 0.606225 outer loop vertex 354.378 190 74.0249 vertex 351.129 190 78.2864 vertex 351.129 -190 78.2864 endloop endfacet facet normal 0.795293 1.18966e-16 0.606225 outer loop vertex 354.378 -190 74.0249 vertex 354.378 190 74.0249 vertex 351.129 -190 78.2864 endloop endfacet facet normal 0.878512 1.3173e-16 0.47772 outer loop vertex 356.938 190 69.3174 vertex 354.378 190 74.0249 vertex 354.378 -190 74.0249 endloop endfacet facet normal 0.878512 2.6283e-16 0.47772 outer loop vertex 356.938 -190 69.3174 vertex 356.938 190 69.3174 vertex 354.378 -190 74.0249 endloop endfacet facet normal 0.94114 2.80908e-16 0.338017 outer loop vertex 358.749 190 64.2744 vertex 356.938 190 69.3174 vertex 356.938 -190 69.3174 endloop endfacet facet normal 0.94114 1.40783e-16 0.338017 outer loop vertex 358.749 -190 64.2744 vertex 358.749 190 64.2744 vertex 356.938 -190 69.3174 endloop endfacet facet normal 0.981708 1.46997e-16 0.190391 outer loop vertex 359.769 190 59.0139 vertex 358.749 190 64.2744 vertex 358.749 -190 64.2744 endloop endfacet facet normal 0.981708 1.46852e-16 0.190391 outer loop vertex 359.769 -190 59.0139 vertex 359.769 190 59.0139 vertex 358.749 -190 64.2744 endloop endfacet facet normal 0.999266 1.49505e-16 0.0383027 outer loop vertex 359.974 190 53.6594 vertex 359.769 190 59.0139 vertex 359.769 -190 59.0139 endloop endfacet facet normal 0.999266 3.09046e-16 0.0383027 outer loop vertex 359.923 -188.996 55 vertex 359.974 190 53.6594 vertex 359.769 -190 59.0139 endloop endfacet facet normal 0.999266 0 0.0383027 outer loop vertex 359.923 -190 55 vertex 359.923 -188.996 55 vertex 359.769 -190 59.0139 endloop endfacet facet normal 0.999266 1.49608e-16 0.0383027 outer loop vertex 359.923 -188.996 55 vertex 359.974 -189.665 53.6594 vertex 359.974 190 53.6594 endloop endfacet facet normal 0.997066 0.0765492 0 outer loop vertex 360 -190 0 vertex 359.59 -184.657 0 vertex 359.59 -184.657 50.3288 endloop endfacet facet normal 0.997066 0.0765492 -0 outer loop vertex 360 -190 55 vertex 360 -190 0 vertex 359.974 -189.665 53.6594 endloop endfacet facet normal 0.997066 0.0765492 1.06081e-15 outer loop vertex 359.974 -189.665 53.6594 vertex 360 -190 0 vertex 359.59 -184.657 50.3288 endloop endfacet facet normal 0.997066 0.0765492 -3.8686e-14 outer loop vertex 360 -190 55 vertex 359.974 -189.665 53.6594 vertex 359.923 -188.996 55 endloop endfacet facet normal 0.997066 -0.0765492 0 outer loop vertex 359.59 -195.343 55 vertex 359.59 -195.343 0 vertex 360 -190 0 endloop endfacet facet normal 0.997066 -0.0765492 0 outer loop vertex 360 -190 55 vertex 359.59 -195.343 55 vertex 360 -190 0 endloop endfacet facet normal 0.973695 -0.227853 0 outer loop vertex 358.369 -200.56 55 vertex 358.369 -200.56 0 vertex 359.59 -195.343 0 endloop endfacet facet normal 0.973695 -0.227853 0 outer loop vertex 359.59 -195.343 55 vertex 358.369 -200.56 55 vertex 359.59 -195.343 0 endloop endfacet facet normal 0.927502 -0.373817 0 outer loop vertex 356.366 -205.53 55 vertex 356.366 -205.53 0 vertex 358.369 -200.56 0 endloop endfacet facet normal 0.927502 -0.373817 0 outer loop vertex 358.369 -200.56 55 vertex 356.366 -205.53 55 vertex 358.369 -200.56 0 endloop endfacet facet normal 0.85957 -0.511019 0 outer loop vertex 353.628 -210.136 55 vertex 353.628 -210.136 0 vertex 356.366 -205.53 0 endloop endfacet facet normal 0.85957 -0.511019 0 outer loop vertex 356.366 -205.53 55 vertex 353.628 -210.136 55 vertex 356.366 -205.53 0 endloop endfacet facet normal 0.771489 -0.636242 0 outer loop vertex 350.218 -214.27 55 vertex 350.218 -214.27 0 vertex 353.628 -210.136 0 endloop endfacet facet normal 0.771489 -0.636242 0 outer loop vertex 353.628 -210.136 55 vertex 350.218 -214.27 55 vertex 353.628 -210.136 0 endloop endfacet facet normal 0.665326 -0.746553 0 outer loop vertex 346.218 -217.835 55 vertex 346.218 -217.835 0 vertex 350.218 -214.27 0 endloop endfacet facet normal 0.665326 -0.746553 0 outer loop vertex 350.218 -214.27 55 vertex 346.218 -217.835 55 vertex 350.218 -214.27 0 endloop endfacet facet normal 0.543568 -0.839365 0 outer loop vertex 341.72 -220.748 55 vertex 341.72 -220.748 0 vertex 346.218 -217.835 0 endloop endfacet facet normal 0.543568 -0.839365 0 outer loop vertex 346.218 -217.835 55 vertex 341.72 -220.748 55 vertex 346.218 -217.835 0 endloop endfacet facet normal 0.409069 -0.912504 0 outer loop vertex 336.831 -222.94 55 vertex 336.831 -222.94 0 vertex 341.72 -220.748 0 endloop endfacet facet normal 0.409069 -0.912504 0 outer loop vertex 341.72 -220.748 55 vertex 336.831 -222.94 55 vertex 341.72 -220.748 0 endloop endfacet facet normal 0.264981 -0.964254 0 outer loop vertex 331.664 -224.36 55 vertex 331.664 -224.36 0 vertex 336.831 -222.94 0 endloop endfacet facet normal 0.264981 -0.964254 0 outer loop vertex 336.831 -222.94 55 vertex 331.664 -224.36 55 vertex 336.831 -222.94 0 endloop endfacet facet normal 0.973695 0.227853 0 outer loop vertex 359.59 -184.657 0 vertex 358.369 -179.44 0 vertex 358.369 -179.44 44.7304 endloop endfacet facet normal 0.973695 0.227853 -0 outer loop vertex 359.59 -184.657 50.3288 vertex 359.59 -184.657 0 vertex 359.36 -183.674 48.3363 endloop endfacet facet normal 0.973695 0.227853 -2.08701e-16 outer loop vertex 359.36 -183.674 48.3363 vertex 359.59 -184.657 0 vertex 358.369 -179.44 44.7304 endloop endfacet facet normal 0.927502 0.373817 0 outer loop vertex 358.369 -179.44 0 vertex 356.366 -174.47 0 vertex 356.366 -174.47 39.6581 endloop endfacet facet normal 0.927502 0.373817 -0 outer loop vertex 358.369 -179.44 44.7304 vertex 358.369 -179.44 0 vertex 357.94 -178.375 43.1694 endloop endfacet facet normal 0.927502 0.373817 -5.52089e-16 outer loop vertex 357.94 -178.375 43.1694 vertex 358.369 -179.44 0 vertex 356.366 -174.47 39.6581 endloop endfacet facet normal 0.85957 0.511019 0 outer loop vertex 356.366 -174.47 0 vertex 353.628 -169.864 0 vertex 353.628 -169.864 35.0055 endloop endfacet facet normal 0.85957 0.511019 -0 outer loop vertex 356.366 -174.47 39.6581 vertex 356.366 -174.47 0 vertex 355.748 -173.431 38.2798 endloop endfacet facet normal 0.85957 0.511019 1.12116e-15 outer loop vertex 355.748 -173.431 38.2798 vertex 356.366 -174.47 0 vertex 353.628 -169.864 35.0055 endloop endfacet facet normal 0.771489 0.636242 0 outer loop vertex 353.628 -169.864 0 vertex 350.218 -165.73 0 vertex 350.218 -165.73 30.8456 endloop endfacet facet normal 0.771489 0.636242 -0 outer loop vertex 353.628 -169.864 35.0055 vertex 353.628 -169.864 0 vertex 352.835 -168.903 33.7821 endloop endfacet facet normal 0.771489 0.636242 -5.107e-16 outer loop vertex 352.835 -168.903 33.7821 vertex 353.628 -169.864 0 vertex 350.218 -165.73 30.8456 endloop endfacet facet normal 0.665326 0.746553 0 outer loop vertex 346.218 -162.165 0 vertex 346.218 -162.165 27.2646 vertex 350.218 -165.73 0 endloop endfacet facet normal 0.665326 0.746553 -6.50365e-16 outer loop vertex 350.218 -165.73 0 vertex 346.218 -162.165 27.2646 vertex 349.27 -164.885 29.7817 endloop endfacet facet normal 0.665326 0.746553 0 outer loop vertex 350.218 -165.73 0 vertex 349.27 -164.885 29.7817 vertex 350.218 -165.73 30.8456 endloop endfacet facet normal 0.543568 0.839365 0 outer loop vertex 341.72 -159.252 0 vertex 341.72 -159.252 24.3417 vertex 346.218 -162.165 0 endloop endfacet facet normal 0.543568 0.839365 -1.52278e-15 outer loop vertex 346.218 -162.165 0 vertex 341.72 -159.252 24.3417 vertex 345.136 -161.464 26.3725 endloop endfacet facet normal 0.543568 0.839365 0 outer loop vertex 346.218 -162.165 0 vertex 345.136 -161.464 26.3725 vertex 346.218 -162.165 27.2646 endloop endfacet facet normal 0.409069 0.912504 0 outer loop vertex 336.831 -157.06 0 vertex 336.831 -157.06 22.1431 vertex 341.72 -159.252 0 endloop endfacet facet normal 0.409069 0.912504 7.26781e-16 outer loop vertex 341.72 -159.252 0 vertex 336.831 -157.06 22.1431 vertex 340.53 -158.719 23.6342 endloop endfacet facet normal 0.409069 0.912504 0 outer loop vertex 341.72 -159.252 0 vertex 340.53 -158.719 23.6342 vertex 341.72 -159.252 24.3417 endloop endfacet facet normal 0.264981 0.964254 0 outer loop vertex 331.664 -155.64 0 vertex 331.664 -155.64 20.7193 vertex 336.831 -157.06 0 endloop endfacet facet normal 0.264981 0.964254 -5.9638e-16 outer loop vertex 336.831 -157.06 0 vertex 331.664 -155.64 20.7193 vertex 335.56 -156.711 21.6311 endloop endfacet facet normal 0.264981 0.964254 0 outer loop vertex 336.831 -157.06 0 vertex 335.56 -156.711 21.6311 vertex 336.831 -157.06 22.1431 endloop endfacet facet normal 0.114683 0.993402 0 outer loop vertex 326.341 -155.026 0 vertex 326.341 -155.026 20.1029 vertex 331.664 -155.64 0 endloop endfacet facet normal 0.114683 0.993402 -1.32471e-15 outer loop vertex 331.664 -155.64 0 vertex 326.341 -155.026 20.1029 vertex 330.343 -155.488 20.4102 endloop endfacet facet normal 0.114683 0.993402 0 outer loop vertex 331.664 -155.64 0 vertex 330.343 -155.488 20.4102 vertex 331.664 -155.64 20.7193 endloop endfacet facet normal -0.0383027 0.999266 0 outer loop vertex 320.986 -155.231 0 vertex 320.986 -155.231 20.3082 vertex 326.341 -155.026 0 endloop endfacet facet normal -0.0383027 0.999266 9.00137e-16 outer loop vertex 326.341 -155.026 0 vertex 320.986 -155.231 20.3082 vertex 325 -155.077 20 endloop endfacet facet normal -0.0383027 0.999266 0 outer loop vertex 326.341 -155.026 0 vertex 325 -155.077 20 vertex 326.341 -155.026 20.1029 endloop endfacet facet normal -0.190391 0.981708 0 outer loop vertex 315.726 -156.251 0 vertex 315.726 -156.251 21.3302 vertex 320.986 -155.231 0 endloop endfacet facet normal -0.190391 0.981708 5.18595e-16 outer loop vertex 320.986 -155.231 0 vertex 315.726 -156.251 21.3302 vertex 319.657 -155.489 20.4102 endloop endfacet facet normal -0.190391 0.981708 0 outer loop vertex 320.986 -155.231 0 vertex 319.657 -155.489 20.4102 vertex 320.986 -155.231 20.3082 endloop endfacet facet normal -0.338017 0.94114 0 outer loop vertex 310.683 -158.062 0 vertex 310.683 -158.062 23.1454 vertex 315.726 -156.251 0 endloop endfacet facet normal -0.338017 0.94114 -1.04323e-15 outer loop vertex 315.726 -156.251 0 vertex 310.683 -158.062 23.1454 vertex 314.44 -156.713 21.6311 endloop endfacet facet normal -0.338017 0.94114 0 outer loop vertex 315.726 -156.251 0 vertex 314.44 -156.713 21.6311 vertex 315.726 -156.251 21.3302 endloop endfacet facet normal -0.47772 0.878512 0 outer loop vertex 305.975 -160.622 0 vertex 305.975 -160.622 25.7118 vertex 310.683 -158.062 0 endloop endfacet facet normal -0.47772 0.878512 1.94888e-16 outer loop vertex 310.683 -158.062 0 vertex 305.975 -160.622 25.7118 vertex 309.47 -158.722 23.6342 endloop endfacet facet normal -0.47772 0.878512 0 outer loop vertex 310.683 -158.062 0 vertex 309.47 -158.722 23.6342 vertex 310.683 -158.062 23.1454 endloop endfacet facet normal -0.511019 -1.65295e-16 -0.85957 outer loop vertex 304.864 190 26.3725 vertex 309.47 190 23.6342 vertex 304.864 -161.469 26.3725 endloop endfacet facet normal -0.511019 -8.26932e-17 -0.85957 outer loop vertex 305.975 -160.622 25.7118 vertex 309.47 190 23.6342 vertex 309.47 -158.722 23.6342 endloop endfacet facet normal -0.511019 -2.66539e-17 -0.85957 outer loop vertex 304.864 -161.469 26.3725 vertex 309.47 190 23.6342 vertex 305.975 -160.622 25.7118 endloop endfacet facet normal -0.373817 -6.09341e-17 -0.927502 outer loop vertex 309.47 190 23.6342 vertex 314.44 190 21.6311 vertex 309.47 -158.722 23.6342 endloop endfacet facet normal -0.373817 -6.07092e-17 -0.927502 outer loop vertex 310.683 -158.062 23.1454 vertex 314.44 190 21.6311 vertex 314.44 -156.713 21.6311 endloop endfacet facet normal -0.373817 -1.71766e-16 -0.927502 outer loop vertex 309.47 -158.722 23.6342 vertex 314.44 190 21.6311 vertex 310.683 -158.062 23.1454 endloop endfacet facet normal -0.227853 -3.73565e-17 -0.973695 outer loop vertex 314.44 190 21.6311 vertex 319.657 190 20.4102 vertex 314.44 -156.713 21.6311 endloop endfacet facet normal -0.227853 -7.48092e-17 -0.973695 outer loop vertex 315.726 -156.251 21.3302 vertex 319.657 190 20.4102 vertex 319.657 -155.489 20.4102 endloop endfacet facet normal -0.227853 -1.3116e-16 -0.973695 outer loop vertex 314.44 -156.713 21.6311 vertex 319.657 190 20.4102 vertex 315.726 -156.251 21.3302 endloop endfacet facet normal -0.0765492 -2.51894e-17 -0.997066 outer loop vertex 319.657 190 20.4102 vertex 325 190 20 vertex 319.657 -155.489 20.4102 endloop endfacet facet normal -0.0765492 -1.26272e-17 -0.997066 outer loop vertex 320.986 -155.231 20.3082 vertex 325 190 20 vertex 325 -155.077 20 endloop endfacet facet normal -0.0765492 2.41849e-18 -0.997066 outer loop vertex 319.657 -155.489 20.4102 vertex 325 190 20 vertex 320.986 -155.231 20.3082 endloop endfacet facet normal 0.0765492 1.26097e-17 -0.997066 outer loop vertex 325 190 20 vertex 330.343 190 20.4102 vertex 325 -155.077 20 endloop endfacet facet normal 0.0765492 2.52987e-17 -0.997066 outer loop vertex 326.341 -155.026 20.1029 vertex 330.343 190 20.4102 vertex 330.343 -155.488 20.4102 endloop endfacet facet normal 0.0765492 3.20836e-17 -0.997066 outer loop vertex 325 -155.077 20 vertex 330.343 190 20.4102 vertex 326.341 -155.026 20.1029 endloop endfacet facet normal 0.227853 7.49779e-17 -0.973695 outer loop vertex 330.343 190 20.4102 vertex 335.56 190 21.6311 vertex 330.343 -155.488 20.4102 endloop endfacet facet normal 0.227853 3.74484e-17 -0.973695 outer loop vertex 331.664 -155.64 20.7193 vertex 335.56 190 21.6311 vertex 335.56 -156.711 21.6311 endloop endfacet facet normal 0.227853 4.16165e-17 -0.973695 outer loop vertex 330.343 -155.488 20.4102 vertex 335.56 190 21.6311 vertex 331.664 -155.64 20.7193 endloop endfacet facet normal 0.373817 6.12875e-17 -0.927502 outer loop vertex 335.56 190 21.6311 vertex 340.53 190 23.6342 vertex 335.56 -156.711 21.6311 endloop endfacet facet normal 0.373817 6.12994e-17 -0.927502 outer loop vertex 336.831 -157.06 22.1431 vertex 340.53 190 23.6342 vertex 340.53 -158.719 23.6342 endloop endfacet facet normal 0.373817 8.01085e-17 -0.927502 outer loop vertex 335.56 -156.711 21.6311 vertex 340.53 190 23.6342 vertex 336.831 -157.06 22.1431 endloop endfacet facet normal 0.511019 8.32994e-17 -0.85957 outer loop vertex 340.53 190 23.6342 vertex 345.136 190 26.3725 vertex 340.53 -158.719 23.6342 endloop endfacet facet normal 0.511019 1.65334e-16 -0.85957 outer loop vertex 341.72 -159.252 24.3417 vertex 345.136 190 26.3725 vertex 345.136 -161.464 26.3725 endloop endfacet facet normal 0.511019 3.31949e-16 -0.85957 outer loop vertex 340.53 -158.719 23.6342 vertex 345.136 190 26.3725 vertex 341.72 -159.252 24.3417 endloop endfacet facet normal 0.636242 2.05803e-16 -0.771489 outer loop vertex 345.136 190 26.3725 vertex 349.27 190 29.7817 vertex 345.136 -161.464 26.3725 endloop endfacet facet normal 0.636242 2.04327e-16 -0.771489 outer loop vertex 346.218 -162.165 27.2646 vertex 349.27 190 29.7817 vertex 349.27 -164.885 29.7817 endloop endfacet facet normal 0.636242 -2.86188e-17 -0.771489 outer loop vertex 345.136 -161.464 26.3725 vertex 349.27 190 29.7817 vertex 346.218 -162.165 27.2646 endloop endfacet facet normal 0.746553 2.39157e-16 -0.665326 outer loop vertex 349.27 -164.885 29.7817 vertex 349.27 190 29.7817 vertex 352.835 190 33.7821 endloop endfacet facet normal 0.746553 2.81116e-16 -0.665326 outer loop vertex 350.218 -165.73 30.8456 vertex 349.27 -164.885 29.7817 vertex 352.835 190 33.7821 endloop endfacet facet normal 0.746553 2.3648e-16 -0.665326 outer loop vertex 352.835 -168.903 33.7821 vertex 350.218 -165.73 30.8456 vertex 352.835 190 33.7821 endloop endfacet facet normal 0.839365 2.65879e-16 -0.543568 outer loop vertex 352.835 -168.903 33.7821 vertex 352.835 190 33.7821 vertex 355.748 190 38.2798 endloop endfacet facet normal 0.839365 1.69812e-16 -0.543568 outer loop vertex 353.628 -169.864 35.0055 vertex 352.835 -168.903 33.7821 vertex 355.748 190 38.2798 endloop endfacet facet normal 0.839365 1.31283e-16 -0.543568 outer loop vertex 355.748 -173.431 38.2798 vertex 353.628 -169.864 35.0055 vertex 355.748 190 38.2798 endloop endfacet facet normal 0.912504 1.42723e-16 -0.409069 outer loop vertex 355.748 -173.431 38.2798 vertex 355.748 190 38.2798 vertex 357.94 190 43.1694 endloop endfacet facet normal 0.912504 5.57413e-16 -0.409069 outer loop vertex 356.366 -174.47 39.6581 vertex 355.748 -173.431 38.2798 vertex 357.94 190 43.1694 endloop endfacet facet normal 0.912504 2.81614e-16 -0.409069 outer loop vertex 357.94 -178.375 43.1694 vertex 356.366 -174.47 39.6581 vertex 357.94 190 43.1694 endloop endfacet facet normal 0.964254 2.97585e-16 -0.264981 outer loop vertex 357.94 -178.375 43.1694 vertex 357.94 190 43.1694 vertex 359.36 190 48.3363 endloop endfacet facet normal 0.964254 1.51212e-17 -0.264981 outer loop vertex 358.369 -179.44 44.7304 vertex 357.94 -178.375 43.1694 vertex 359.36 190 48.3363 endloop endfacet facet normal 0.964254 2.93365e-16 -0.264981 outer loop vertex 359.36 -183.674 48.3363 vertex 358.369 -179.44 44.7304 vertex 359.36 190 48.3363 endloop endfacet facet normal 0.993402 3.02233e-16 -0.114683 outer loop vertex 359.36 -183.674 48.3363 vertex 359.36 190 48.3363 vertex 359.974 190 53.6594 endloop endfacet facet normal 0.993402 2.57272e-16 -0.114683 outer loop vertex 359.59 -184.657 50.3288 vertex 359.36 -183.674 48.3363 vertex 359.974 190 53.6594 endloop endfacet facet normal 0.993402 1.48732e-16 -0.114683 outer loop vertex 359.974 -189.665 53.6594 vertex 359.59 -184.657 50.3288 vertex 359.974 190 53.6594 endloop endfacet endsolid OpenSCAD_Model openscad-2013.01+dfsg.orig/testdata/scad/bugs/gridbug.scad0000644000175000017500000000041111640436732022674 0ustar chrysnchrysn// This crashes OpenSCAD including 2011.06 in PolyReducer due to two vertices of // a triangle evaluating to the same index linear_extrude(height=2) polygon(points=[[0, 0], [1, 0], [1.0014, 1], [1, 1], [0, 1]], paths=[[0,1,2,3,4]]); openscad-2013.01+dfsg.orig/testdata/scad/dxf/0000755000175000017500000000000012110740367020235 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-intersect.scad0000644000175000017500000000005311642654340024560 0ustar chrysnchrysnimport("../../dxf/polygon-intersect.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/circle.scad0000644000175000017500000000004011642654340022330 0ustar chrysnchrysnimport("../../dxf/circle.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/ellipse-rot.scad0000644000175000017500000000004511642654340023333 0ustar chrysnchrysnimport("../../dxf/ellipse-rot.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-holes-touch.scad0000644000175000017500000000005511642654340025014 0ustar chrysnchrysnimport("../../dxf/polygon-holes-touch.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/null-polygons.scad0000644000175000017500000000022111664172103023706 0ustar chrysnchrysnlinear_extrude(height=1) import_dxf("../../dxf/null-polygons.dxf"); translate([0,20,0]) linear_extrude("../../dxf/null-polygons.dxf", height=1); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-self-intersect.scad0000644000175000017500000000006011642654340025505 0ustar chrysnchrysnimport("../../dxf/polygon-self-intersect.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/multiple-layers.scad0000644000175000017500000000005111642654340024221 0ustar chrysnchrysnimport("../../dxf/multiple-layers.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-concave-simple.scad0000644000175000017500000000006011642654340025463 0ustar chrysnchrysnimport("../../dxf/polygon-concave-simple.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-riser.scad0000644000175000017500000000004711642654340023707 0ustar chrysnchrysnimport("../../dxf/polygon-riser.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/lwpolyline2.scad0000644000175000017500000000004511642654340023354 0ustar chrysnchrysnimport("../../dxf/lwpolyline2.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/transform-insert.scad0000644000175000017500000000005211642654340024407 0ustar chrysnchrysnimport("../../dxf/transform-insert.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/lwpolyline.scad0000644000175000017500000000004411642654340023271 0ustar chrysnchrysnimport("../../dxf/lwpolyline.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-concave.scad0000644000175000017500000000005111642654340024174 0ustar chrysnchrysnimport("../../dxf/polygon-concave.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/circle-double.scad0000644000175000017500000000004711642654340023607 0ustar chrysnchrysnimport("../../dxf/circle-double.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-many-holes.scad0000644000175000017500000000005411642654340024635 0ustar chrysnchrysnimport("../../dxf/polygon-many-holes.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/ellipse-arc.scad0000644000175000017500000000004511642654340023274 0ustar chrysnchrysnimport("../../dxf/ellipse-arc.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/ellipse-arc-rot.scad0000644000175000017500000000005111642654340024073 0ustar chrysnchrysnimport("../../dxf/ellipse-arc-rot.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/circle-advanced.scad0000644000175000017500000000005111642654340024075 0ustar chrysnchrysnimport("../../dxf/circle-advanced.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/lwpolyline-closed.scad0000644000175000017500000000005311642654340024540 0ustar chrysnchrysnimport("../../dxf/lwpolyline-closed.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/arc.scad0000644000175000017500000000003511642654340021640 0ustar chrysnchrysnimport("../../dxf/arc.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/ellipse-reverse.scad0000644000175000017500000000005111642654340024177 0ustar chrysnchrysnimport("../../dxf/ellipse-reverse.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon8.scad0000644000175000017500000000004211642654340022650 0ustar chrysnchrysnimport("../../dxf/polygon8.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-concave-hole.scad0000644000175000017500000000005611642654340025126 0ustar chrysnchrysnimport("../../dxf/polygon-concave-hole.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/ellipse.scad0000644000175000017500000000004111642654340022525 0ustar chrysnchrysnimport("../../dxf/ellipse.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-mesh.scad0000644000175000017500000000004611642654340023516 0ustar chrysnchrysnimport("../../dxf/polygon-mesh.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygon-overlap.scad0000644000175000017500000000005111642654340024226 0ustar chrysnchrysnimport("../../dxf/polygon-overlap.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/triangle-with-duplicate-vertex.scad0000644000175000017500000000007011642654340027133 0ustar chrysnchrysnimport("../../dxf/triangle-with-duplicate-vertex.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/polygons.scad0000644000175000017500000000004211642654340022743 0ustar chrysnchrysnimport("../../dxf/polygons.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/dxf/circle-small.scad0000644000175000017500000000004611642654340023444 0ustar chrysnchrysnimport("../../dxf/circle-small.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/templates/0000755000175000017500000000000012110740367021452 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/templates/import_dxf-tests-template.scad0000644000175000017500000000137212014547110027427 0ustar chrysnchrysnimport(); translate([-210,0,0]) import(file="../../dxf/polygons.dxf"); translate([-210,0,0]) import(file="../../dxf/polygons.dxf", origin=[0,110]); translate([-210,0,0]) import(file="../../dxf/polygons.dxf", origin=[110,110], scale=0.5); import(file="../../dxf/multiple-layers.dxf"); translate([-200,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="0"); translate([0,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="0"); translate([200,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="noname"); translate([0,200,0]) import(file="../../dxf/multiple-layers.dxf", layer="Layer with a pretty long name including \\ \"special\" /'\\\\ characters"); translate([200,0,0]) import(file="@CMAKE_SOURCE_DIR@/../testdata/dxf/polygons.dxf"); openscad-2013.01+dfsg.orig/testdata/scad/templates/include-tests-template.scad0000644000175000017500000000250612014547110026677 0ustar chrysnchrysn//Test that the entire path is pushed onto the stack upto the last '/' include //Test that a non existent path/file doesn't screw things up include //Test with empty path include //Test without preceding space include //Test with other strange character that is allowed include>>>>> //Test that filenames with spaces work include //Test with empty file include //Test with empty path and file include //Test with absolute path include <@CMAKE_SOURCE_DIR@/../testdata/scad/misc/sub2/test7.scad> // Test simple MCAD include include // Test MCAD include which includes another file include // Test MCAD include which uses another file include module test1() { test2(); translate([2,0,0]) test3(); translate([2,-2,0]) test4(); translate([-2,0,0]) test5(); translate([-2,-2,0]) test6(); translate([0,2,0]) test7(); //Just to give a top level object translate([0,-2,0]) sphere(test2_variable, $fn=16); // MCAD translate([0,-4,0]) cube([TAU/4,0.5,0.5], center=true); translate([-2,-4,0]) cube([deg(0.5)/20,0.5,0.5], center=true); translate([2,-4,-0.5]) scale(0.05) alignds420([0,0,0], [0,0,0]); } test1(); openscad-2013.01+dfsg.orig/testdata/scad/templates/use-tests-template.scad0000644000175000017500000000260412014547110026047 0ustar chrysnchrysn//Test blank use <> //Test that the entire path is pushed onto the stack upto the last '/' use //Test that a non existent path/file doesn't screw things up use //Test with empty path use //Test without preceding space use //Test with other strange character that is allowed use>>>>> //Test that filenames with spaces work use //Test with empty file use //Test with empty path and file use //Test with absolute path include <@CMAKE_SOURCE_DIR@/../testdata/scad/misc/sub2/test7.scad> // Test simple MCAD library include // Test MCAD library which includes another file include // Test MCAD library which uses another file include module test1() { test2(); // test3() and test4() are not directly included and thus not imported into // this scope translate([4,0,0]) test3(); translate([4,-2,0]) test4(); translate([-2,0,0]) test5(); translate([-2,-2,0]) test6(); translate([0,2,0]) test7(); // test2_variable won't be visible translate([0,-2,0]) sphere(test2_variable, $fn=16); // MCAD translate([0,-4,0]) teardrop(0.3, 1.5, 90); translate([-2,-4,0]) cube([deg(0.5)/20,0.5,0.5], center=true); translate([2,-4,-0.5]) scale(0.05) alignds420([0,0,0], [0,0,0]); } test1(); openscad-2013.01+dfsg.orig/testdata/scad/templates/import_stl-tests-template.scad0000644000175000017500000000030612014547110027444 0ustar chrysnchrysnimport_stl("import.stl"); translate([2,0,0]) import("import.stl"); translate([4,0,0]) import("import_bin.stl"); translate([0,2,0]) import("@CMAKE_SOURCE_DIR@/../testdata/scad/features/import.stl"); openscad-2013.01+dfsg.orig/testdata/scad/misc/0000755000175000017500000000000012110740367020407 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/0000755000175000017500000000000012110740367021261 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/0000755000175000017500000000000012110740367022134 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/0000755000175000017500000000000012110740367023010 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/sub4/0000755000175000017500000000000012110740367023665 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/sub4/include-test3.scad0000644000175000017500000000007411704273262027210 0ustar chrysnchrysnmodule test3() { cylinder(r1=0.7, r2=0.2, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/sub4/use-test3.scad0000644000175000017500000000007411704273262026361 0ustar chrysnchrysnmodule test3() { cylinder(r1=0.7, r2=0.2, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/sub4/use-test2.scad0000644000175000017500000000033311704273262026356 0ustar chrysnchrysn//Test nested use use //Test relative file location use <../use-test4.scad> test2_variable = 0.7; module test2() { translate([2,0,0]) test3(); translate([2,-2,0]) test4(); cube(center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/sub4/include-test2.scad0000644000175000017500000000026211704273262027206 0ustar chrysnchrysn//Test nested include include //Test relative file location include <../include-test4.scad> test2_variable = 0.7; module test2() { cube(center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/include-test4.scad0000644000175000017500000000007311704273262026333 0ustar chrysnchrysnmodule test4() { cylinder(r=0.5, $fn=10, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/sub1/sub2/sub3/use-test4.scad0000644000175000017500000000007311704273262025504 0ustar chrysnchrysnmodule test4() { cylinder(r=0.5, $fn=10, center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/parser-tests.scad0000644000175000017500000000020211664172104023672 0ustar chrysnchrysn// Number literals a = .1; echo(a); b = 2.; echo(b); c = 11e+2; echo(c); d = 21.e-3; echo(d); e = .11e-12; echo(e); openscad-2013.01+dfsg.orig/testdata/scad/misc/recursion-tests.scad0000644000175000017500000000005312076022157024413 0ustar chrysnchrysnfunction crash() = crash(); echo(crash()); openscad-2013.01+dfsg.orig/testdata/scad/misc/use-test5.scad0000644000175000017500000000005311704273262023102 0ustar chrysnchrysnmodule test5() { sphere(r=0.5, $fn=8); } openscad-2013.01+dfsg.orig/testdata/scad/misc/normal-nan.scad0000644000175000017500000000054711676153366023330 0ustar chrysnchrysn/* When exporting this to STL, null polygons appear, causing problems normalizing normal vectors (nan output in STL files) */ $fs=0.2; difference() { cube(8); translate([0,20,4]) rotate([90,0,0]) union() { translate([0,-3,14.5]) cube([5.4,6,2.4],center=true); translate([0,0,13.3]) rotate([0,0,30]) cylinder(r=3.115,h=2.4,$fn=6); } } openscad-2013.01+dfsg.orig/testdata/scad/misc/include test6.scad0000644000175000017500000000015211704273262023715 0ustar chrysnchrysnmodule test6() { difference() { cube(center=true); cylinder(r=0.4, h=2, center=true); } } openscad-2013.01+dfsg.orig/testdata/scad/misc/dim-all.scad0000644000175000017500000000063411664172103022565 0ustar chrysnchrysndxf="dim-all.dxf"; echo(linearX=dxf_dim(file=dxf, name="linearX")); echo(linearY=dxf_dim(file=dxf, name="linearY")); echo(aligned=dxf_dim(file=dxf, name="aligned")); echo(ordinateX=dxf_dim(file=dxf, name="ordinateX")); echo(ordinateY=dxf_dim(file=dxf, name="ordinateY")); echo(radius=dxf_dim(file=dxf, name="radius")); echo(diameter=dxf_dim(file=dxf, name="diameter")); echo(arc=dxf_dim(file=dxf, name="arc")); openscad-2013.01+dfsg.orig/testdata/scad/misc/use test6.scad0000644000175000017500000000015211704273262023066 0ustar chrysnchrysnmodule test6() { difference() { cube(center=true); cylinder(r=0.4, h=2, center=true); } } openscad-2013.01+dfsg.orig/testdata/scad/misc/string-test.scad0000644000175000017500000000014511664172104023527 0ustar chrysnchrysnecho("The quick brown fox \tjumps \"over\" the lazy dog.\rThe quick brown fox.\nThe \\lazy\\ dog."); openscad-2013.01+dfsg.orig/testdata/scad/misc/escape-test.scad0000644000175000017500000000011311664172103023453 0ustar chrysnchrysnimport(file="B-\" C-\t D-\n E-'", layer="A:\\ B:\" C:\t D:\n E:' F:\\\\"); openscad-2013.01+dfsg.orig/testdata/scad/misc/echo-tests.scad0000644000175000017500000000062412006361214023315 0ustar chrysnchrysnecho(undef); echo("string"); s = "stringvar"; echo(s); echo(a = 1, b = 2.0, true, c = false); v = [1, "vecstr", 2.34, false]; echo(v); r = [1:2:10]; echo(r); echo(vec = [1,2,3]); echo(range = [0:2]); echo(str("string generated by str()")); // https://github.com/openscad/openscad/issues/158 rept by nop head // 0.8 should print 0.8 not 0.80000...004 (regardless of internal representation) echo(0.8); openscad-2013.01+dfsg.orig/testdata/scad/misc/sub2/0000755000175000017500000000000012110740367021262 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/scad/misc/sub2/test7.scad0000644000175000017500000000006511704273262023170 0ustar chrysnchrysnmodule test7() { cube([0.5,0.5,1], center=true); } openscad-2013.01+dfsg.orig/testdata/scad/misc/include-test5.scad0000644000175000017500000000005311704273262023731 0ustar chrysnchrysnmodule test5() { sphere(r=0.5, $fn=8); } openscad-2013.01+dfsg.orig/testdata/scad/misc/dxf-export.scad0000644000175000017500000000041011664172103023336 0ustar chrysnchrysncircle(r=5); translate([15,0,0]) square(size=[10,10], center=true); translate([30,0,0]) polygon(points=[[-5,-5],[5,-5],[0,5]], paths=[[0,1,2]]); translate([0,-15,0]) { difference() { circle(r=5); translate([0,-6,0]) square([12,12], center=true); } }openscad-2013.01+dfsg.orig/testdata/scad/misc/vector-values.scad0000644000175000017500000000140312000421643024027 0ustar chrysnchrysn// Value vector tests. a1=[0,1,2]; b1=[3,4,5]; c1=a1*b1; echo(str("Testing vector dot product: ",c1)); d1=[1,0]; echo(str(" Bounds check: ",a1*d1)); m2=[[0,1],[1,0],[2,3]]; v2=[2,3]; p2=m2*v2; echo(str("Testing matrix * vector: ",p2)); d2=[0,0,1]; echo(str(" Bounds check: ",m2*d2)); m3=[[1,-1],[1,0],[2,3]]; v3=[1,2,3]; p3=v3*m3; echo(str("Testing vector * matrix: ",p3)); echo(str(" Bounds check: ",m3*v3)); ma4=[ [1,0],[0,1] ]; mb4=[ [1,0],[0,1] ]; echo(str("Testing id matrix * id matrix: ",ma4*mb4)); ma5=[ [1, 0, 1] ,[0, 1,-1] ]; mb5=[ [1,0] ,[0,1] ,[1,1] ]; echo(str("Testing asymmetric matrix * matrix: ",ma5*mb5)); echo(str("Testing alternate asymmetric matrix * matrix: ",mb5*ma5)); echo(str(" Bounds check: ",ma5*ma4)); cube(1.0); openscad-2013.01+dfsg.orig/testdata/scad/misc/string-indexing.scad0000644000175000017500000000037611664172104024363 0ustar chrysnchrysntest = "test"; // Correct usage cases for(i = [0:len(test)-1]) { echo(test[i]); } // Out of bounds echo(test[-1]); echo(test[len(test)]); // Invalid index type echo(test["test"]); echo(test[true]); echo(test[false]); echo(test[[0]]); echo(test[1.7]);openscad-2013.01+dfsg.orig/testdata/scad/misc/search-tests.scad0000644000175000017500000000503211745120722023650 0ustar chrysnchrysn// string searches simpleSearch1=search("a","abcdabcd"); echo(str("Characters in string (\"a\"): ",simpleSearch1)); simpleSearch2=search("adeq","abcdeabcd",0); echo(str("Characters in string (\"adeq\"): ",simpleSearch2)); sTable1=[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9] ]; s1= search("abe",sTable1); echo(str("Default string search (\"abe\"): ",s1)); sTable2=[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9],["a",10],["a",11] ]; s2= search("abe",sTable2,0); echo(str("Return all matches for string search (\"abe\"): ",s2)); sTable3=[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9],["a",10],["a",11] ]; s3= search("abe",sTable3,2); echo(str("Return up to 2 matches for string search (\"abe\"): ",s3)); sTable4=[ [1,"a",[20]],[2,"b",21],[3,"c",22],[4,"d",23],[5,"a",24],[6,"b",25],[7,"c",26],[8,"d",27],[9,"e",28],[10,"a",29],[11,"a",30] ]; s4= search("aebe",sTable4,2,1); echo(str("Return up to 2 matches for string search; alternate columns (\"aebe\"): ",s4)); // s5= search("abe",sTable4,2,1,3); // bounds checking needs fixing. // echo(str("Return up to 2 matches for string search; alternate columns: ",s4)); // number searches nTable1=[ [1,"a"],[3,"b"],[2,"c"],[4,"d"],[1,"a"],[7,"b"],[2,"c"],[8,"d"],[9,"e"],[10,"a"],[1,"a"] ]; n1 = search(7,nTable1); echo(str("Default number search (7): ",n1)); n2 = search(1,nTable1,0); echo(str("Return all matches for number search (1): ",n2)); n3 = search(1,nTable1,2); echo(str("Return up to 2 matches for number search (1): ",n3)); // list searches lTable1=[ [1,"a"],[3,"b"],[2,"c"],[4,"d"],[1,"a"],[7,"b"],[2,"c"],[8,"d"],[9,"e"],[10,"a"],[1,"a"] ]; lSearch1=[1,3,1000]; l1=search(lSearch1,lTable1); echo(str("Default list number search (",lSearch1,"): ",l1)); lTable2=[ ["cat",1],["b",2],["c",3],["dog",4],["a",5],["b",6],["c",7],["d",8],["e",9],["apple",10],["a",11] ]; lSearch2=["b","zzz","a","c","apple","dog"]; l2=search(lSearch2,lTable2); echo(str("Default list string search (",lSearch2,"): ",l2)); lTable3=[ ["cat",1],["b",2],["c",3],[4,"dog"],["a",5],["b",6],["c",7],["d",8],["e",9],["apple",10],["a",11] ]; lSearch3=["b",4,"zzz","c","apple",500,"a",""]; l3=search(lSearch3,lTable3); echo(str("Default list mixed search (",lSearch3,"): ",l3)); l4=search(lSearch3,lTable3,0); echo(str("Return all matches for mixed search (",lSearch3,"): ",l4)); lSearch5=[1,"zz","dog",500,11]; l5=search(lSearch5,lTable3,0,1); echo(str("Return all matches for mixed search; alternate columns (",lSearch5,"): ",l5)); // for completeness cube(1.0); openscad-2013.01+dfsg.orig/testdata/scad/misc/builtin-tests.scad0000644000175000017500000000002111664172103024042 0ustar chrysnchrysnp = PI; echo(p); openscad-2013.01+dfsg.orig/testdata/scad/misc/dim-all.dxf0000644000175000017500000003420711664172103022437 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ARC 5 43 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 -100.0 20 0.0 30 0.0 40 60.0 100 AcDbArc 50 30.9637565320735177 51 90.0 0 DIMENSION 5 44 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -109.8639392383214499 20 -59.1836354299286214 30 0.0 11 -101.8494886071852648 21 0.3082481011975488 31 0.0 70 3 71 5 72 1 41 1.0 42 0.0 1 diameter 3 Standard 100 AcDbDiametricDimension 15 -90.1360607616785501 25 59.1836354299286285 35 0.0 40 0.0 0 DIMENSION 5 45 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -100.0 20 60.0 30 0.0 11 0.0 21 0.0 31 0.0 70 2 71 5 72 1 41 1.0 42 0.0 1 arc 3 Standard 100 AcDb2LineAngularDimension 13 -100.0 23 0.0 33 0.0 14 -48.5504244572473453 24 30.8697453256515857 34 0.0 15 -100.0 25 0.0 35 0.0 16 -50.0 26 50.0 36 0.0 0 DIMENSION 5 46 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -93.5543529011625736 20 -10.7427451647290511 30 0.0 11 -68.7942446712128515 21 6.2999267338077694 31 0.0 70 1 71 5 72 0 41 1.0 42 0.0 1 aligned 3 Standard 100 AcDbAlignedDimension 13 -100.0 23 -0.0000000000000142 33 0.0 14 -48.5504244572473453 24 30.8697453256515857 34 0.0 0 DIMENSION 5 47 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -110.0 20 30.8697453256515928 30 0.0 11 -111.875 21 45.4348726628257964 31 0.0 70 0 71 5 72 0 41 1.0 42 0.0 1 linearY 3 Standard 100 AcDbAlignedDimension 13 -100.0 23 60.0 33 0.0 14 -48.5504244572473453 24 30.8697453256515857 34 0.0 50 90.0 100 AcDbRotatedDimension 0 DIMENSION 5 48 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -48.5504244572473453 20 80.0 30 0.0 11 -74.2752122286236727 21 81.875 31 0.0 70 0 71 5 72 0 41 1.0 42 0.0 1 linearX 3 Standard 100 AcDbAlignedDimension 13 -100.0 23 0.0 33 0.0 14 -48.5504244572473453 24 30.8697453256515857 34 0.0 50 0.0 100 AcDbRotatedDimension 0 LEADER 5 49 8 0 62 256 370 -1 6 ByLayer 100 AcDbEntity 100 AcDbLeader 3 Standard 71 1 72 0 73 3 74 0 75 0 40 1.0 41 10.0 76 3 10 -100.0 20 60.0 10 -110.0 20 80.0 10 -140.0 20 80.0 0 DIMENSION 5 4A 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -100.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 70 4 71 5 72 1 41 1.0 42 0.0 1 radius 3 Standard 100 AcDbRadialDimension 15 -48.5504244572473453 25 30.8697453256515857 35 0.0 40 0.0 0 DIMENSION 5 4B 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -69.1754244572473453 20 60.8697453256515857 30 0.0 11 -2.0226466794695739 21 50.8697453256515857 31 0.0 70 6 71 5 72 1 41 1.0 1 ordinateY 3 Standard 100 AcDbOrdinateDimension 13 -49.1754244572473453 23 30.8697453256515857 33 0.0 14 -9.1754244572473453 24 50.8697453256515857 34 0.0 0 DIMENSION 5 4C 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -69.1754244572473453 20 60.8697453256515857 30 0.0 11 -9.1754244572473453 21 62.7449999999999974 31 0.0 70 70 71 5 72 1 41 1.0 1 ordinateX 3 Standard 100 AcDbOrdinateDimension 13 -49.1754244572473453 23 30.8697453256515857 33 0.0 14 -9.1754244572473453 24 60.8699999999999974 34 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4D 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4D 100 AcDbDictionary 281 1 3 DIMASSOC 350 4F 3 HIDETEXT 350 4E 0 DICTIONARYVAR 5 4E 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4F 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/scad/non-aff-matrix.scad0000644000175000017500000000027311606445627023152 0ustar chrysnchrysnmultmatrix(m = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, -0.02, 1]]) linear_extrude(height=20) circle(r=10); openscad-2013.01+dfsg.orig/testdata/dxf/0000755000175000017500000000000012110740367017323 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/dxf/polygon-mesh.dxf0000644000175000017500000003046511516152336022461 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 140.0 30 0.0 11 0.0 21 140.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 140.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 0.0 21 140.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 140.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 140.0 30 0.0 11 45.0 21 100.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 45.0 20 100.0 30 0.0 11 60.0 21 80.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 45.0 21 100.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 45.0 20 50.0 30 0.0 11 140.0 21 0.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 80.0 30 0.0 11 45.0 21 50.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 45.0 20 50.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 45.0 20 100.0 30 0.0 11 45.0 21 50.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4E 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4E 100 AcDbDictionary 281 1 3 DIMASSOC 350 50 3 HIDETEXT 350 4F 0 DICTIONARYVAR 5 4F 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 50 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/arc.dxf0000644000175000017500000002643212014540141020571 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ARC 5 43 100 AcDbEntity 8 0 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 100.0 100 AcDbArc 50 0.0 51 90.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0000000000000061 20 100.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 46 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 46 100 AcDbDictionary 281 1 3 DIMASSOC 350 48 3 HIDETEXT 350 47 0 DICTIONARYVAR 5 47 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 48 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/circle-small.dxf0000644000175000017500000002614311516152336022405 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 CIRCLE 5 43 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 8.0 0 CIRCLE 5 44 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 16.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 45 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 45 100 AcDbDictionary 281 1 3 DIMASSOC 350 47 3 HIDETEXT 350 46 0 DICTIONARYVAR 5 46 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 47 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/open-polyline.dxf0000644000175000017500000002661211653240411022623 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 200.0 21 100.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 200.0 20 100.0 30 0.0 11 200.0 21 0.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 200.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 47 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 47 100 AcDbDictionary 281 1 3 DIMASSOC 350 49 3 HIDETEXT 350 48 0 DICTIONARYVAR 5 48 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 49 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-overlap.dxf0000644000175000017500000002760711516152336023201 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 100.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 0.0 21 50.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 50.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 50.0 21 0.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 100.0 21 50.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 50.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 100.0 21 100.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4B 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4B 100 AcDbDictionary 281 1 3 DIMASSOC 350 4D 3 HIDETEXT 350 4C 0 DICTIONARYVAR 5 4C 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4D 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/triangle-with-duplicate-vertex.dxf0000644000175000017500000002657411516152336026107 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 47 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 47 100 AcDbDictionary 281 1 3 DIMASSOC 350 49 3 HIDETEXT 350 48 0 DICTIONARYVAR 5 48 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 49 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/ellipse-rot.dxf0000644000175000017500000002723311516152336022276 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ELLIPSE 5 43 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 40.0 21 40.0 31 0.0 40 0.4999999999999999 41 0.0 42 6.2831853071795862 0 ELLIPSE 5 44 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 50.0 30 0.0 11 -40.0 21 40.0 31 0.0 40 0.25 41 0.0 42 6.2831853071795862 0 ELLIPSE 5 45 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 -50.0 30 0.0 11 -20.0 21 -20.0 31 0.0 40 1.9999999999999998 41 0.0 42 6.2831853071795862 0 ELLIPSE 5 46 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 -50.0 30 0.0 11 40.0 21 -40.0 31 0.0 40 0.8749999999999999 41 0.0 42 6.2831853071795862 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 47 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 47 100 AcDbDictionary 281 1 3 DIMASSOC 350 49 3 HIDETEXT 350 48 0 DICTIONARYVAR 5 48 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 49 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/ellipse-arc-rot.dxf0000644000175000017500000003062411516152336023037 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ELLIPSE 5 43 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 40.0 21 40.0 31 0.0 40 0.4999999999999999 41 2.0344439357957027 42 4.2487413713838835 0 ELLIPSE 5 44 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 50.0 30 0.0 11 -10.0 21 10.0 31 0.0 40 3.4999999999999996 41 4.1016630159954808 42 2.1815222911841041 0 ELLIPSE 5 45 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 -50.0 30 0.0 11 -40.0 21 0.0 31 0.0 40 1.0 41 5.3558900891779739 42 3.6052402625905993 0 ELLIPSE 5 46 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 -50.0 30 0.0 11 40.0 21 -40.0 31 0.0 40 0.125 41 5.0711596506552619 42 1.3258176636680326 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -15.5922593382003001 20 72.9384937745331001 30 0.0 11 -72.9384937745331712 21 15.5922593382002859 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -73.9999999999999858 20 -17.9999999999999858 30 0.0 11 -14.2229123600033631 21 -32.1114561800016887 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 64.5521375021799741 20 -54.850712500726658 30 0.0 11 59.363291775690449 21 -68.7265835513808838 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 49.9999999999999929 20 14.2229123600033631 30 0.0 11 14.2229123600033702 21 50.0000000000000071 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4B 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4B 100 AcDbDictionary 281 1 3 DIMASSOC 350 4D 3 HIDETEXT 350 4C 0 DICTIONARYVAR 5 4C 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4D 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/null-polygons.dxf0000644000175000017500000003044411664172103022655 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 nuts_access 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 2 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 16777215 6 CONTINUOUS 370 0 390 F 0 LAYER 5 43 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 nuts_access 70 0 62 7 420 16777215 6 CONTINUOUS 370 0 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ARC 5 44 100 AcDbEntity 8 nuts_access 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 0.0 100 AcDbArc 50 0.0 51 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 nuts_access 62 256 370 -1 6 ByLayer 10 42.3600000000014418 20 0.0 30 0.0 11 52.3600000000014418 21 0.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 nuts_access 62 256 370 -1 6 ByLayer 10 52.3600000000014418 20 0.0 30 0.0 11 52.3600000000014418 21 10.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 nuts_access 62 256 370 -1 6 ByLayer 10 42.3600000000014418 20 0.0 30 0.0 11 42.3600000000014418 21 10.0 31 0.0 0 ARC 5 48 100 AcDbEntity 8 nuts_access 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 47.3600000000014418 20 10.0 30 0.0 40 0.0 100 AcDbArc 50 0.0 51 180.0 0 CIRCLE 5 49 100 AcDbEntity 100 AcDbCircle 8 nuts_access 62 256 370 -1 6 ByLayer 10 47.3600000000014418 20 10.0 30 0.0 40 0.0 0 CIRCLE 5 4A 100 AcDbEntity 100 AcDbCircle 8 nuts_access 62 256 370 -1 6 ByLayer 10 47.3600000000014418 20 10.0 30 0.0 40 0.0 0 ARC 5 4B 100 AcDbEntity 8 nuts_access 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 47.3600000000014418 20 10.0 30 0.0 40 5.0 100 AcDbArc 50 0.0 51 180.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4C 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4C 100 AcDbDictionary 281 1 3 DIMASSOC 350 4E 3 HIDETEXT 350 4D 0 DICTIONARYVAR 5 4D 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4E 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-concave.dxf0000644000175000017500000003763611516152336023152 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 70.0 30 0.0 11 20.0 21 40.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 40.0 30 0.0 11 70.0 21 30.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 30.0 30 0.0 11 30.0 21 10.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 10.0 30 0.0 11 100.0 21 10.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 10.0 30 0.0 11 60.0 21 -10.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 -10.0 30 0.0 11 100.0 21 -20.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 -20.0 30 0.0 11 80.0 21 -30.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 80.0 20 -30.0 30 0.0 11 100.0 21 -70.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 -70.0 30 0.0 11 40.0 21 -40.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 -40.0 30 0.0 11 10.0 21 -80.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 -80.0 30 0.0 11 10.0 21 -20.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 -20.0 30 0.0 11 -80.0 21 -50.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -80.0 20 -50.0 30 0.0 11 -50.0 21 -10.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 -10.0 30 0.0 11 10.0 21 0.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 0.0 30 0.0 11 30.0 21 -20.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 -20.0 30 0.0 11 30.0 21 -30.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 -30.0 30 0.0 11 50.0 21 -30.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 -30.0 30 0.0 11 70.0 21 -40.0 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 -40.0 30 0.0 11 70.0 21 -30.0 31 0.0 0 LINE 5 56 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 -30.0 30 0.0 11 50.0 21 0.0 31 0.0 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 0.0 30 0.0 11 30.0 21 0.0 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 0.0 30 0.0 11 10.0 21 10.0 31 0.0 0 LINE 5 59 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 10.0 30 0.0 11 10.0 21 20.0 31 0.0 0 LINE 5 5A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 20.0 30 0.0 11 10.0 21 30.0 31 0.0 0 LINE 5 5B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 30.0 30 0.0 11 10.0 21 50.0 31 0.0 0 LINE 5 5C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 50.0 30 0.0 11 -50.0 21 0.0 31 0.0 0 LINE 5 5D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 0.0 30 0.0 11 -70.0 21 30.0 31 0.0 0 LINE 5 5E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -70.0 20 30.0 30 0.0 11 -10.0 21 80.0 31 0.0 0 LINE 5 5F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 80.0 30 0.0 11 -10.0 21 100.0 31 0.0 0 LINE 5 60 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 100.0 30 0.0 11 -120.0 21 30.0 31 0.0 0 LINE 5 61 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -120.0 20 30.0 30 0.0 11 -80.0 21 -10.0 31 0.0 0 LINE 5 62 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -80.0 20 -10.0 30 0.0 11 -100.0 21 -30.0 31 0.0 0 LINE 5 63 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -100.0 20 -30.0 30 0.0 11 -70.0 21 -70.0 31 0.0 0 LINE 5 64 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -70.0 20 -70.0 30 0.0 11 -140.0 21 -30.0 31 0.0 0 LINE 5 65 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -140.0 20 -30.0 30 0.0 11 -130.0 21 60.0 31 0.0 0 LINE 5 66 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -130.0 20 60.0 30 0.0 11 -30.0 21 120.0 31 0.0 0 LINE 5 67 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -30.0 20 120.0 30 0.0 11 70.0 21 110.0 31 0.0 0 LINE 5 68 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 110.0 30 0.0 11 60.0 21 70.0 31 0.0 0 LINE 5 69 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 70.0 30 0.0 11 20.0 21 70.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 6A 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 6A 100 AcDbDictionary 281 1 3 DIMASSOC 350 6C 3 HIDETEXT 350 6B 0 DICTIONARYVAR 5 6B 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 6C 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/ellipse.dxf0000644000175000017500000002605411516152336021474 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ELLIPSE 5 43 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 40 0.5 41 0.0 42 6.2831853071795862 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 44 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 44 100 AcDbDictionary 281 1 3 DIMASSOC 350 46 3 HIDETEXT 350 45 0 DICTIONARYVAR 5 45 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 46 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygons.dxf0000644000175000017500000003021211516152336021700 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 50.0 21 0.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 0.0 30 0.0 11 50.0 21 50.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 100.0 21 50.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 50.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 40.0 30 0.0 11 100.0 21 40.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 40.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 60.0 21 0.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 0.0 30 0.0 11 60.0 21 40.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4D 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4D 100 AcDbDictionary 281 1 3 DIMASSOC 350 4F 3 HIDETEXT 350 4E 0 DICTIONARYVAR 5 4E 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4F 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/lwpolyline-closed.dxf0000644000175000017500000002610311516152336023477 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LWPOLYLINE 5 43 8 0 62 256 370 -1 6 ByLayer 100 AcDbEntity 100 AcDbPolyline 90 3 70 1 10 50.0 20 50.0 10 0.0 20 0.0 10 0.0 20 50.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 44 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 44 100 AcDbDictionary 281 1 3 DIMASSOC 350 46 3 HIDETEXT 350 45 0 DICTIONARYVAR 5 45 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 46 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/lwpolyline2.dxf0000644000175000017500000003200711516152336022312 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 0.0 21 50.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 50.0 30 0.0 11 50.0 21 50.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 50.0 21 100.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 100.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 70.0 21 80.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 80.0 30 0.0 11 70.0 21 50.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 50.0 30 0.0 11 60.0 21 40.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 40.0 30 0.0 11 50.0 21 40.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 40.0 30 0.0 11 50.0 21 0.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 0.0 30 0.0 11 20.0 21 0.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 0.0 30 0.0 11 20.0 21 10.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 10.0 30 0.0 11 40.0 21 10.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 10.0 30 0.0 11 40.0 21 40.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 40.0 30 0.0 11 10.0 21 40.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 40.0 30 0.0 11 10.0 21 0.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 54 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 54 100 AcDbDictionary 281 1 3 DIMASSOC 350 56 3 HIDETEXT 350 55 0 DICTIONARYVAR 5 55 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 56 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-self-intersect.dxf0000644000175000017500000002660411516152336024454 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 0.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 47 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 47 100 AcDbDictionary 281 1 3 DIMASSOC 350 49 3 HIDETEXT 350 48 0 DICTIONARYVAR 5 48 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 49 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/ellipse-arc.dxf0000644000175000017500000002627311516152336022242 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ELLIPSE 5 43 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 40 0.5 41 0.0 42 1.5707963267948966 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0000000000000142 20 50.0 30 0.0 11 100.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 45 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 45 100 AcDbDictionary 281 1 3 DIMASSOC 350 47 3 HIDETEXT 350 46 0 DICTIONARYVAR 5 46 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 47 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/lwpolyline.dxf0000644000175000017500000002622511516152336022235 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LWPOLYLINE 5 43 8 0 62 256 370 -1 6 ByLayer 100 AcDbEntity 100 AcDbPolyline 90 3 70 0 10 0.0 20 0.0 10 0.0 20 50.0 10 50.0 20 50.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 0.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 45 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 45 100 AcDbDictionary 281 1 3 DIMASSOC 350 47 3 HIDETEXT 350 46 0 DICTIONARYVAR 5 46 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 47 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-many-holes.dxf0000644000175000017500000003734411516152336023604 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 -50.0 21 100.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 100.0 30 0.0 11 -50.0 21 130.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 130.0 30 0.0 11 50.0 21 130.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 130.0 30 0.0 11 50.0 21 0.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 110.0 30 0.0 11 -40.0 21 120.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 120.0 30 0.0 11 40.0 21 120.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 120.0 30 0.0 11 40.0 21 10.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 10.0 30 0.0 11 10.0 21 10.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 10.0 30 0.0 11 10.0 21 110.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 110.0 30 0.0 11 -40.0 21 110.0 31 0.0 0 CIRCLE 5 4F 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 25.0880000000000152 20 95.0272000000000503 30 0.0 40 2.7648000000000081 0 CIRCLE 5 50 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 25.1904000000000146 20 82.0224000000000473 30 0.0 40 3.2831937621773046 0 CIRCLE 5 51 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 24.4736000000000118 20 71.7824000000000382 30 0.0 40 2.1381747730248835 0 CIRCLE 5 52 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 29.3888000000000176 20 105.472000000000051 30 0.0 40 7.1070321456990699 0 CIRCLE 5 53 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 33.2800000000000153 20 87.6544000000000523 30 0.0 40 3.9526930566387226 0 CIRCLE 5 54 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 18.0224000000000082 20 88.3712000000000444 30 0.0 40 4.5160605841817496 0 CIRCLE 5 55 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 35.1232000000000184 20 79.462400000000045 30 0.0 40 2.1110300803162443 0 CIRCLE 5 56 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 16.3840000000000074 20 101.0688000000000528 30 0.0 40 4.2183331684446239 0 CIRCLE 5 57 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 17.6128000000000107 20 111.5136000000000678 30 0.0 40 4.5067634861394721 0 CIRCLE 5 58 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 29.7984000000000151 20 116.2240000000000606 30 0.0 40 2.1698170982827127 0 CIRCLE 5 59 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 23.6544000000000132 20 115.7120000000000601 30 0.0 40 1.2457497662050818 0 CIRCLE 5 5A 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 33.9968000000000217 20 95.4368000000000478 30 0.0 40 2.461862969379089 0 CIRCLE 5 5B 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 26.3168000000000148 20 89.8048000000000428 30 0.0 40 1.02910726360278 0 CIRCLE 5 5C 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 14.7456000000000085 20 76.3904000000000423 30 0.0 40 2.9322897537589938 0 CIRCLE 5 5D 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 18.4320000000000093 20 81.3056000000000409 30 0.0 40 0.8749059835205244 0 CIRCLE 5 5E 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 20.07040000000001 20 76.8000000000000398 30 0.0 40 1.455377449323713 0 CIRCLE 5 5F 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 17.4080000000000084 20 69.7344000000000364 30 0.0 40 3.3900432091641579 0 CIRCLE 5 60 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 30.4128000000000149 20 73.1136000000000337 30 0.0 40 3.0720000000000027 0 CIRCLE 5 61 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 37.0688000000000173 20 69.7344000000000364 30 0.0 40 2.335079270603043 0 CIRCLE 5 62 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 25.2928000000000139 20 76.2880000000000393 30 0.0 40 1.3113598438262539 0 CIRCLE 5 63 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 29.491200000000017 20 61.8496000000000308 30 0.0 40 6.6874334688279422 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 64 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 64 100 AcDbDictionary 281 1 3 DIMASSOC 350 66 3 HIDETEXT 350 65 0 DICTIONARYVAR 5 65 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 66 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/ellipse-reverse.dxf0000644000175000017500000002704711516152336023150 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 ELLIPSE 5 43 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 40 0.5 41 1.5707963267948966 42 0.0 0 ELLIPSE 5 44 100 AcDbEntity 100 AcDbEllipse 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 10.0 30 0.0 11 100.0 21 0.0 31 0.0 40 0.5 41 0.0 42 1.5707963267948966 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0000000000000142 20 50.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 110.0 20 10.0 30 0.0 11 10.0000000000000036 21 60.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 47 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 47 100 AcDbDictionary 281 1 3 DIMASSOC 350 49 3 HIDETEXT 350 48 0 DICTIONARYVAR 5 48 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 49 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/circle.dxf0000644000175000017500000002576311516152336021306 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 CIRCLE 5 43 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 100.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 44 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 44 100 AcDbDictionary 281 1 3 DIMASSOC 350 46 3 HIDETEXT 350 45 0 DICTIONARYVAR 5 45 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 46 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/circle-advanced.dxf0000644000175000017500000003374511516152336023050 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 CIRCLE 5 43 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 87.3402112431611215 0 CIRCLE 5 44 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 10.0 0 CIRCLE 5 45 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 20.0 0 CIRCLE 5 46 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 50.0 30 0.0 40 10.0 0 CIRCLE 5 47 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 0.0 30 0.0 40 10.0 0 CIRCLE 5 48 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 -50.0 30 0.0 40 10.0 0 CIRCLE 5 49 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 0.0 30 0.0 40 10.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 20.0 30 0.0 11 -40.0 21 20.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 20.0 30 0.0 11 -40.0 21 40.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 40.0 30 0.0 11 -20.0 21 40.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 40.0 30 0.0 11 -20.0 21 20.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 20.0 30 0.0 11 40.0 21 20.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 20.0 30 0.0 11 40.0 21 40.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 40.0 30 0.0 11 20.0 21 40.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 40.0 30 0.0 11 20.0 21 20.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 -20.0 30 0.0 11 40.0 21 -20.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 -20.0 30 0.0 11 40.0 21 -40.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 -40.0 30 0.0 11 20.0 21 -40.0 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 -40.0 30 0.0 11 20.0 21 -20.0 31 0.0 0 LINE 5 56 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 -20.0 30 0.0 11 -40.0 21 -20.0 31 0.0 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 -20.0 30 0.0 11 -40.0 21 -40.0 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 -40.0 30 0.0 11 -20.0 21 -40.0 31 0.0 0 LINE 5 59 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 -40.0 30 0.0 11 -20.0 21 -20.0 31 0.0 0 CIRCLE 5 5A 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 70.7106781186547551 0 CIRCLE 5 5B 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 80.6225774829854913 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 5C 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 5C 100 AcDbDictionary 281 1 3 DIMASSOC 350 5E 3 HIDETEXT 350 5D 0 DICTIONARYVAR 5 5D 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 5E 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-intersect.dxf0000644000175000017500000002762011516152336023524 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 -50.0 30 0.0 11 50.0 21 -50.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 -50.0 30 0.0 11 50.0 21 50.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 -50.0 21 50.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.0 20 50.0 30 0.0 11 -50.0 21 -50.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4B 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4B 100 AcDbDictionary 281 1 3 DIMASSOC 350 4D 3 HIDETEXT 350 4C 0 DICTIONARYVAR 5 4C 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4D 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/multiple-layers.dxf0000644000175000017500000003256011640436732023171 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 Layer with a pretty long name including \ "special" /'\\ characters 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 3 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 LAYER 5 43 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 noname 70 0 62 7 420 0 6 CONTINUOUS 370 0 390 F 0 LAYER 5 44 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 Layer with a pretty long name including \ "special" /'\\ characters 70 0 62 7 420 0 6 CONTINUOUS 370 0 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 40.0 30 0.0 11 40.0 21 40.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 40.0 30 0.0 11 40.0 21 -40.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 -40.0 30 0.0 11 -40.0 21 -40.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -40.0 20 -40.0 30 0.0 11 -40.0 21 40.0 31 0.0 0 CIRCLE 5 49 100 AcDbEntity 100 AcDbCircle 8 noname 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 70.7106781186547551 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 Layer with a pretty long name including \ "special" /'\\ characters 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 50.0000000000000142 21 86.6025403784438623 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 Layer with a pretty long name including \ "special" /'\\ characters 62 256 370 -1 6 ByLayer 10 50.0000000000000142 20 86.6025403784438623 30 0.0 11 -49.9999999999999858 21 86.6025403784438907 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 Layer with a pretty long name including \ "special" /'\\ characters 62 256 370 -1 6 ByLayer 10 -49.9999999999999858 20 86.6025403784438907 30 0.0 11 -100.0000000000000142 21 0.0000000000000122 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 Layer with a pretty long name including \ "special" /'\\ characters 62 256 370 -1 6 ByLayer 10 -100.0000000000000142 20 0.0000000000000122 30 0.0 11 -50.0000000000000497 21 -86.6025403784438481 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 Layer with a pretty long name including \ "special" /'\\ characters 62 256 370 -1 6 ByLayer 10 -50.0000000000000497 20 -86.6025403784438481 30 0.0 11 49.9999999999998579 21 -86.6025403784439618 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 Layer with a pretty long name including \ "special" /'\\ characters 62 256 370 -1 6 ByLayer 10 49.9999999999998579 20 -86.6025403784439618 30 0.0 11 100.0000000000000142 21 -0.0000000000002021 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 50 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 50 100 AcDbDictionary 281 1 3 DIMASSOC 350 52 3 HIDETEXT 350 51 0 DICTIONARYVAR 5 51 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 52 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-concave-simple.dxf0000644000175000017500000002766611516152336024443 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -43.3012701892219454 20 -24.9999999999999929 30 0.0 11 -49.9999999999999361 21 86.602540378443905 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -49.9999999999999361 20 86.602540378443905 30 0.0 11 43.3012701892219312 21 25.0000000000000071 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 43.3012701892219312 20 25.0000000000000071 30 0.0 11 45.9807621135331388 21 -19.6410161513775883 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 45.9807621135331388 20 -19.6410161513775883 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 -5.9807621135331921 21 -49.6410161513775421 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -5.9807621135331921 20 -49.6410161513775421 30 0.0 11 -43.3012701892219454 21 -24.9999999999999929 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 49 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 49 100 AcDbDictionary 281 1 3 DIMASSOC 350 4B 3 HIDETEXT 350 4A 0 DICTIONARYVAR 5 4A 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4B 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon8.dxf0000644000175000017500000003140011516152336021605 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -49.2403876506104083 20 -8.6824088833465005 30 0.0 11 -74.1459880408624628 21 17.388860153681172 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -123.386375691472864 20 8.7064512703346502 30 0.0 11 -77.0481384643073568 21 -23.7399317434764328 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -77.0481384643073568 20 -23.7399317434764328 30 0.0 11 -93.2713299712129214 21 -46.9090503570592148 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -93.2713299712129214 20 -46.9090503570592148 30 0.0 11 0.0 21 -100.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -49.2403876506104083 20 -8.6824088833465005 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -138.4438985516028424 20 36.5142020840316022 30 0.0 11 -100.0 21 100.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -100.0 20 100.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.6794416688387912 20 57.0665768391163368 30 0.0 11 -123.386375691472864 21 8.7064512703346502 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -50.6794416688387912 20 57.0665768391163368 30 0.0 11 -74.1459880408624628 21 17.388860153681172 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -130.0 20 -100.0 30 0.0 11 -138.4438985516028424 21 36.5142020840316022 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 -100.0 30 0.0 11 -130.0 21 -100.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 4E 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 4E 100 AcDbDictionary 281 1 3 DIMASSOC 350 50 3 HIDETEXT 350 4F 0 DICTIONARYVAR 5 4F 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 50 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/transform-insert.dxf0000644000175000017500000004145111642654340023354 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 BLOCK_RECORD 5 43 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 testblock 340 0 0 BLOCK_RECORD 5 44 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 testblock2 340 0 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 45 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 testblock 70 0 10 0.0 20 0.0 30 0.0 3 testblock 1 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.0 20 0.0 30 0.0 11 -1.0 21 2.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.0 20 2.0 30 0.0 11 -3.0 21 2.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -3.0 20 2.0 30 0.0 11 -3.0 21 4.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -3.0 20 4.0 30 0.0 11 3.0 21 4.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 3.0 20 4.0 30 0.0 11 3.0 21 2.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 3.0 20 2.0 30 0.0 11 1.0 21 2.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.0 20 2.0 30 0.0 11 1.0 21 0.0 31 0.0 0 ENDBLK 5 4D 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 4E 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 testblock2 70 0 10 0.0 20 0.0 30 0.0 3 testblock2 1 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.0000000000000004 20 6.0 30 0.0 11 -1.0 21 8.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.0 20 8.0 30 0.0 11 -3.0 21 8.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -3.0 20 8.0 30 0.0 11 -3.0 21 10.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -3.0 20 10.0 30 0.0 11 3.0 21 10.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 3.0 20 10.0 30 0.0 11 3.0 21 8.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 3.0 20 8.0 30 0.0 11 1.0 21 8.0 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.0 20 8.0 30 0.0 11 0.9999999999999998 21 6.0 31 0.0 0 ENDBLK 5 56 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 10.0 30 0.0 11 10.0 21 -10.0 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 -10.0 30 0.0 11 -10.0 21 10.0 31 0.0 0 LINE 5 59 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 10.0 30 0.0 11 -1.0 21 10.0 31 0.0 0 LINE 5 5A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.0 20 10.0 30 0.0 11 10.0 21 10.0 31 0.0 0 LINE 5 5B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 -10.0 30 0.0 11 1.0 21 -10.0 31 0.0 0 LINE 5 5C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.0 20 -10.0 30 0.0 11 -10.0 21 -10.0 31 0.0 0 LINE 5 5D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 10.0 30 0.0 11 40.0 21 -10.0 31 0.0 0 LINE 5 5E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 -10.0 30 0.0 11 20.0 21 10.0 31 0.0 0 LINE 5 5F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 10.0 30 0.0 11 29.0 21 10.0 31 0.0 0 LINE 5 60 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 31.0 20 10.0 30 0.0 11 40.0 21 10.0 31 0.0 0 LINE 5 61 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 40.0 20 -10.0 30 0.0 11 31.0 21 -10.0 31 0.0 0 LINE 5 62 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 29.0 20 -10.0 30 0.0 11 20.0 21 -10.0 31 0.0 0 INSERT 5 63 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 testblock2 10 29.9999999999999964 20 -4.0 30 0.0 41 1.0 42 -1.0 43 1.0 50 360.0 44 1.0 45 1.0 0 INSERT 5 64 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 testblock2 10 30.0 20 4.0 30 0.0 44 1.0 45 1.0 0 INSERT 5 65 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 testblock 10 0.0 20 -10.0 30 0.0 41 1.0 42 -1.0 43 1.0 50 360.0 44 1.0 45 1.0 0 INSERT 5 66 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 testblock 10 0.0 20 10.0 30 0.0 44 1.0 45 1.0 0 LINE 5 67 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 7.0710678118654755 30 0.0 11 67.0710678118654755 21 -0.0000000000000017 31 0.0 0 LINE 5 68 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 -7.0710678118654755 30 0.0 11 52.9289321881345245 21 0.0000000000000009 31 0.0 0 LINE 5 69 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 52.9289321881345245 20 0.0000000000000009 30 0.0 11 56.1109127034739927 21 3.1819805153394651 31 0.0 0 LINE 5 6A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 56.8180194846605389 20 3.8890872965260113 30 0.0 11 60.0 21 7.0710678118654755 31 0.0 0 LINE 5 6B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 67.0710678118654755 20 -0.0000000000000017 30 0.0 11 63.8890872965260073 21 -3.1819805153394651 31 0.0 0 LINE 5 6C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 63.1819805153394611 20 -3.8890872965260117 30 0.0 11 60.0 21 -7.0710678118654755 31 0.0 0 INSERT 5 6D 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 testblock2 10 58.5857864376269077 20 1.4142135623730963 30 0.0 41 0.5 42 0.5 43 1.0 50 45.0 44 1.0 45 1.0 0 INSERT 5 6E 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 testblock2 10 61.4142135623730923 20 -1.4142135623730949 30 0.0 41 0.5 42 0.5 43 1.0 50 -135.0 44 1.0 45 1.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 6F 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 6F 100 AcDbDictionary 281 1 3 DIMASSOC 350 71 3 HIDETEXT 350 70 0 DICTIONARYVAR 5 70 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 71 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/circle-double.dxf0000644000175000017500000002716011516152336022547 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -30.0 20 30.0 30 0.0 11 30.0 21 30.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 30.0 30 0.0 11 30.0 21 -30.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 -30.0 30 0.0 11 -30.0 21 -30.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -30.0 20 -30.0 30 0.0 11 -30.0 21 30.0 31 0.0 0 CIRCLE 5 47 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 20.0 0 CIRCLE 5 48 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 20.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 49 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 49 100 AcDbDictionary 281 1 3 DIMASSOC 350 4B 3 HIDETEXT 350 4A 0 DICTIONARYVAR 5 4A 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4B 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-holes-touch.dxf0000644000175000017500000002723111516152336023754 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 48.0 30 0.0 11 30.0 21 88.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 88.0 30 0.0 11 -20.0 21 88.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 48.0 30 0.0 11 30.0 21 48.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 88.0 30 0.0 11 -20.0 21 48.0 31 0.0 0 CIRCLE 5 47 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 63.0 30 0.0 40 7.5 0 CIRCLE 5 48 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 78.0 30 0.0 40 7.5 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 49 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 49 100 AcDbDictionary 281 1 3 DIMASSOC 350 4B 3 HIDETEXT 350 4A 0 DICTIONARYVAR 5 4A 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 4B 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-riser.dxf0000644000175000017500000003762411516152336022655 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMSTYLE 2 Standard 9 $CLAYER 8 0 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 CIRCLE 5 43 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 -5.0 20 55.0 30 0.0 40 1.5 0 CIRCLE 5 44 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 55.0 30 0.0 40 1.5 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 156.0 30 0.0 11 0.0 21 156.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 156.0 30 0.0 11 0.0 21 151.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 151.0 30 0.0 11 -10.0 21 151.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.4976541697914116 20 188.9977563603677595 30 0.0 11 1.5023458302085879 21 188.9977563603677595 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.4976541697914103 20 189.9977563603677595 30 0.0 11 -1.4976541697914116 21 188.9977563603677595 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.5023458302085879 20 188.9977563603677595 30 0.0 11 1.502345830208587 21 189.9977563603677595 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -4.0 20 200.0 30 0.0 11 -4.0 21 205.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -4.0 20 205.0 30 0.0 11 -10.0 21 205.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 4.0 20 205.0 30 0.0 11 4.0 21 200.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 4.0 20 200.0 30 0.0 11 1.4031552236521563 21 200.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -4.0000000000000009 20 200.0 30 0.0 11 -1.4148563846039739 21 200.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 2.752345830208589 20 196.9977563603677595 30 0.0 11 2.7498297991646306 21 193.9977563603677595 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.502345830208587 20 193.9977563603677595 30 0.0 11 2.7498297991646306 21 193.9977563603677595 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 2.752345830208589 20 196.9977563603677595 30 0.0 11 1.4031552236520406 21 196.9990366371471282 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.4031552236521068 20 196.9990366371471282 30 0.0 11 1.4031552236521563 21 200.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -2.747654169791411 20 196.9977563603677595 30 0.0 11 -2.7523458302085904 21 193.9977563603677595 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -2.7523458302085904 20 193.9977563603677595 30 0.0 11 -1.4976541697914103 21 193.9977563603677595 31 0.0 0 LINE 5 56 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.4141381897576664 20 196.9990366371471282 30 0.0 11 -2.747654169791411 21 196.9977563603677595 31 0.0 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.4148563846039739 20 200.0 30 0.0 11 -1.4145485302998744 21 196.9990362431889821 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -1.4976541697914103 20 189.9977563603677595 30 0.0 11 -1.4976541697914103 21 193.9977563603677595 31 0.0 0 LINE 5 59 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 1.502345830208587 20 189.9977563603677595 30 0.0 11 1.502345830208587 21 193.9977563603677595 31 0.0 0 LINE 5 5A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 -40.0 30 0.0 11 10.0 21 -40.0 31 0.0 0 LINE 5 5B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 151.0 30 0.0 11 -10.0 21 -40.0 31 0.0 0 CIRCLE 5 5C 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 -5.0 20 5.0 30 0.0 40 1.5 0 CIRCLE 5 5D 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 5.0 30 0.0 40 1.5 0 CIRCLE 5 5E 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 -5.0 20 140.0 30 0.0 40 1.5 0 CIRCLE 5 5F 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 70.0 30 0.0 40 1.5 0 CIRCLE 5 60 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 -5.0 20 70.0 30 0.0 40 1.5 0 CIRCLE 5 61 100 AcDbEntity 100 AcDbCircle 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 140.0 30 0.0 40 1.5 0 LINE 5 62 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 205.0 30 0.0 11 4.0 21 205.0 31 0.0 0 LINE 5 63 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 -40.0 30 0.0 11 10.0 21 205.0 31 0.0 0 LINE 5 64 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 205.0 30 0.0 11 -10.0 21 156.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 65 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 65 100 AcDbDictionary 281 1 3 DIMASSOC 350 67 3 HIDETEXT 350 66 0 DICTIONARYVAR 5 66 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 67 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/dxf/polygon-concave-hole.dxf0000644000175000017500000003321611516152336024065 0ustar chrysnchrysn999 dxflib 2.2.0.0 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 9 $DIMGAP 40 0.625 9 $PLIMMAX 10 210.0 20 297.0 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $CLAYER 8 0 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 420 0 6 CONTINUOUS 370 25 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 43 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 44 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 45 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 100.0 21 0.0 31 0.0 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 100.0 20 0.0 30 0.0 11 30.0 21 0.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 0.0 30 0.0 11 30.0 21 20.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 30.0 20 20.0 30 0.0 11 80.0 21 20.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 80.0 20 20.0 30 0.0 11 80.0 21 80.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 80.0 20 80.0 30 0.0 11 20.0 21 80.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 80.0 30 0.0 11 20.0 21 70.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 70.0 30 0.0 11 70.0 21 70.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 70.0 30 0.0 11 70.0 21 30.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 70.0 20 30.0 30 0.0 11 20.0 21 30.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 30.0 30 0.0 11 20.0 21 0.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 60.0 30 0.0 11 60.0 21 40.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 60.0 20 40.0 30 0.0 11 5.0 21 40.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 40.0 30 0.0 11 5.0 21 95.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 5.0 20 95.0 30 0.0 11 50.0 21 95.0 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 95.0 30 0.0 11 50.0 21 85.0 31 0.0 0 LINE 5 56 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 50.0 20 85.0 30 0.0 11 13.0 21 85.0 31 0.0 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 13.0 20 85.0 30 0.0 11 13.0 21 60.0 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 13.0 20 60.0 30 0.0 11 60.0 21 60.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 59 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 59 100 AcDbDictionary 281 1 3 DIMASSOC 350 5B 3 HIDETEXT 350 5A 0 DICTIONARYVAR 5 5A 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 5B 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/testdata/modulecache-tests/0000755000175000017500000000000012110740367022153 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/testdata/modulecache-tests/modulewithinclude.scad0000644000175000017500000000010312076022156026526 0ustar chrysnchrysninclude module mymodule() { cylinder(r=RADIUS); } openscad-2013.01+dfsg.orig/testdata/modulecache-tests/multiplemain.scad0000644000175000017500000000011112076022156025500 0ustar chrysnchrysnuse use A(); translate([40,0,0]) B(); openscad-2013.01+dfsg.orig/testdata/modulecache-tests/use.scad0000644000175000017500000000003412076022156023600 0ustar chrysnchrysnuse used(s()); openscad-2013.01+dfsg.orig/testdata/modulecache-tests/moduleoverload.scad0000644000175000017500000000011012076022156026020 0ustar chrysnchrysnuse module mymodule() { sphere(); } mymodule(); openscad-2013.01+dfsg.orig/testdata/modulecache-tests/simpleinclude.scad0000644000175000017500000000003212076022156025637 0ustar chrysnchrysninclude openscad-2013.01+dfsg.orig/testdata/modulecache-tests/circularmain.scad0000644000175000017500000000003112076022156025452 0ustar chrysnchrysnuse openscad-2013.01+dfsg.orig/testdata/modulecache-tests/recursive.scad0000644000175000017500000000002512076022156025013 0ustar chrysnchrysnuse openscad-2013.01+dfsg.orig/testdata/modulecache-tests/simpleleaf.scad0000644000175000017500000000002612076022156025126 0ustar chrysnchrysncylinder(h=25, r=12); openscad-2013.01+dfsg.orig/testdata/modulecache-tests/usenonexistingfile.scad0000644000175000017500000000002212076022156026723 0ustar chrysnchrysnuse openscad-2013.01+dfsg.orig/testdata/modulecache-tests/multiplecommon.scad0000644000175000017500000000002312076022156026046 0ustar chrysnchrysnfunction F() = 20; openscad-2013.01+dfsg.orig/testdata/modulecache-tests/circularsecond.scad0000644000175000017500000000003112076022156026001 0ustar chrysnchrysnuse openscad-2013.01+dfsg.orig/testdata/modulecache-tests/includefrommodule.scad0000644000175000017500000000005212076022156026521 0ustar chrysnchrysnuse mymodule(); openscad-2013.01+dfsg.orig/testdata/modulecache-tests/circularincludefirst.scad0000644000175000017500000000004512076022156027226 0ustar chrysnchrysninclude openscad-2013.01+dfsg.orig/testdata/modulecache-tests/README.txt0000644000175000017500000000346012076022156023654 0ustar chrysnchrysnSome work is needed to include these into the automated test suite. For now, run them manually according to these instructions: Compile OpenSCAD in debug mode. This will give console output related to module caching, e.g.: /path/to/used.scad: 0x103612f70 Module cache size: 1 modules Test1: Basic cache ------ o Open use.scad o Compile twice (F5) - check that module reference is the same Test2: Dependency tracking of USE ------ o Open use.scad o Compile (F5) o touch used.scad o Compile (F5) - check that the module reference changed Test3: MCAD ------ o Open use-mcad.scad o Compile (F5) o Check that you get a rounded box Test4: USE Non-existing file ------ o Open usenonexsistingfile.scad o Compile (F5) o Verify that you get: WARNING: Can't open 'use' file 'nofile.scad'. Test5: Overload USEd module ------ o Open moduleoverload.scad o Compile (F5) o Verify that you get a sphere rather than a cylinder Test6: Recursive USE ------ o Open recursivemain.scad o Compile (F5) o Verify that OpenSCAD won't hang or crash Test7: Circular USE ------ o Open circularmain.scad o Compile (F5) o Verify that OpenSCAD won't hang or crash Test8: Dependency tracking of common file USEd by multiple modules ------ o Open multiplemain.scad o Compile (F5) - verify that you get a sphere and a cube of approximately the same size o Edit multipleB.scad: - cube(1.5*F(), center=true); + cube(2.5*F(), center=true); o Reload and Compile (F4) - verify that the cube got larger Test9: Dependency tracking of file included from module ------ o Open includefrommodule.scad o Compile (F5) - Verify that you get a circular disc o Edit radius.scad: Change RADIUS o Compile (F5) - Verify that the disc changed size Test9: Circular include ------ o Open circularincludemain.scad o Compile (F5) o Verify that OpenSCAD won't hang or crash openscad-2013.01+dfsg.orig/testdata/modulecache-tests/mymodule-lib.scad0000644000175000017500000000005712076022156025410 0ustar chrysnchrysnmodule mymodule() { cylinder(center=true); } openscad-2013.01+dfsg.orig/testdata/modulecache-tests/multipleB.scad0000644000175000017500000000011012076022156024734 0ustar chrysnchrysnuse module B() { cube(1.5*F(), center=true); } openscad-2013.01+dfsg.orig/testdata/modulecache-tests/use-mcad.scad0000644000175000017500000000007212076022156024504 0ustar chrysnchrysnuse roundedBox([10,10,10], 2, $fn=16); openscad-2013.01+dfsg.orig/testdata/modulecache-tests/multipleA.scad0000644000175000017500000000007312076022156024743 0ustar chrysnchrysnuse module A() { sphere(r=F()); } openscad-2013.01+dfsg.orig/testdata/modulecache-tests/circularincludesecond.scad0000644000175000017500000000004412076022156027351 0ustar chrysnchrysninclude openscad-2013.01+dfsg.orig/testdata/modulecache-tests/recursivemain.scad0000644000175000017500000000002512076022156025660 0ustar chrysnchrysnuse openscad-2013.01+dfsg.orig/testdata/modulecache-tests/radius.scad0000644000175000017500000000001412076022156024271 0ustar chrysnchrysnRADIUS = 5; openscad-2013.01+dfsg.orig/testdata/modulecache-tests/circularincludemain.scad0000644000175000017500000000004412076022156027022 0ustar chrysnchrysninclude openscad-2013.01+dfsg.orig/testdata/modulecache-tests/circularfirst.scad0000644000175000017500000000003212076022156025656 0ustar chrysnchrysnuse openscad-2013.01+dfsg.orig/testdata/modulecache-tests/used.scad0000644000175000017500000000006312076022156023746 0ustar chrysnchrysnfunction s() = 20; module used(r) { sphere(r); } openscad-2013.01+dfsg.orig/scripts/0000755000175000017500000000000012110740367016420 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/scripts/installer-linux.sh0000755000175000017500000000247211716325611022120 0ustar chrysnchrysn#!/bin/bash # change to the install source directory cd "$( dirname "$( type -p $0 )" )" if ! [ -f bin/openscad -a -d lib/openscad -a -d examples -a -d libraries ]; then echo "Error: Can't change to install source directory!" >&2 exit 1 fi echo "This will install openscad. Please enter the install prefix" echo "or press Ctrl-C to abort the install process:" read -p "[/usr/local]: " prefix if [ "$prefix" = "" ]; then prefix="/usr/local" fi if [ ! -d "$prefix" ]; then echo; echo "Install prefix \`$prefix' does not exist. Press ENTER to continue" echo "or press Ctrl-C to abort the install process:" read -p "press enter to continue> " fi mkdir -p "$prefix"/{bin,lib/openscad,share/openscad/examples,share/openscad/libraries} if ! [ -w "$prefix"/bin/ -a -w "$prefix"/lib/openscad -a -w "$prefix"/share/openscad ]; then echo "You does not seam to have write permissions for prefix \`$prefix'!" >&2 echo "Maybe you should have run this install script using \`sudo'?" >&2 exit 1 fi echo "Copying application wrappers..." cp -rv bin/. "$prefix"/bin/ echo "Copying application..." cp -rv lib/. "$prefix"/lib/ echo "Copying examples..." cp -rv examples/. "$prefix"/share/openscad/examples/ echo "Copying libraries..." cp -rv libraries/. "$prefix"/share/openscad/libraries/ echo "Installation finished. Have a nice day." openscad-2013.01+dfsg.orig/scripts/publish-mingw-x.sh0000755000175000017500000000254012076022154022010 0ustar chrysnchrysn#!/bin/sh # This is run as part of the checklist in docs/release-checklist.txt # # Set this if we're doing a release build. Comment it out for development builds #VERSION=2011.12 if test -z "$VERSION"; then VERSION=`date "+%Y.%m.%d"` COMMIT=-c fi # Turn off ccache, just for safety CCACHE_DISABLE=1 . ./scripts/setenv-mingw-xbuild.sh if [ ! -e $MXEDIR ]; then echo "MXEDIR: $MXEDIR" echo "MXEDIR is a non-existent path. Mingw cross tools not found." echo echo " Please run ./scripts/mingw-x-build-dependencies.sh to install MXE" echo " or modify MXEDIR to point to the root of your cross-tools setup" echo " ( Please see http://mxe.cc for more info ) " echo exit 1 fi if [ ! -f $OPENSCADDIR/openscad.pro ]; then echo "Must be run from the OpenSCAD source root directory" exit 1 fi ./scripts/release-common.sh -v $VERSION $COMMIT mingw32 if [ $? != 0 ]; then echo "release-common.sh returned error code: $?. build stopped." exit 1 fi echo "Please upload these files to the appropriate location" BINFILE=$DEPLOYDIR/OpenSCAD-$VERSION.zip INSTALLFILE=$DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe echo $BINFILE echo $INSTALLFILE echo echo "Then copy/paste these commands into your shell:" echo # Update snapshot filename on wab page echo ./scripts/update-web.sh OpenSCAD-$VERSION.zip echo ./scripts/update-web.sh OpenSCAD-$VERSION-Installer.exe openscad-2013.01+dfsg.orig/scripts/git-archive-all.py0000755000175000017500000001425011701151225021741 0ustar chrysnchrysn#! /usr/bin/env python import sys from os import path, chdir from subprocess import Popen, PIPE from sys import argv, stdout from fnmatch import fnmatch class GitArchiver(object): """ GitArchiver Scan a git repository and export all tracked files, and submodules. Checks for .gitattributes files in each directory and uses 'export-ignore' pattern entries for ignore files in the archive. Automatically detects output format extension: zip, tar, bz2, or gz """ def __init__(self, prefix='', verbose=False, exclude=True, extra=[]): self.prefix = prefix self.verbose = verbose self.exclude = exclude self.extra = extra self._excludes = [] def create(self, output_file): """ create(str output_file) -> None Creates the archive, written to the given output_file Filetype may be one of: gz, zip, bz2, tar """ # # determine the format # _, _, format = output_file.rpartition(".") if format.lower() == 'zip': from zipfile import ZipFile, ZIP_DEFLATED output_archive = ZipFile(path.abspath(output_file), 'w') add = lambda name, arcname: output_archive.write(name, self.prefix + arcname, ZIP_DEFLATED) elif format.lower() in ['tar', 'bz2', 'gz']: import tarfile t_mode = ('w:%s' % format) if format != 'tar' else 'w' output_archive = tarfile.open(path.abspath(output_file), t_mode) add = lambda name, arcname: output_archive.add(name, self.prefix + arcname) else: raise RuntimeError("Unknown format: '%s'" % format) # # compress # # extra files first (we may change folder later) for name in self.extra: if self.verbose: toPath = '=> %s%s' % (self.prefix, name) if self.prefix else "" print 'Compressing %s %s ...' % (name, toPath) add(name, name) self._excludes = [] for name, arcname in self.listFiles(path.abspath('')): if self.verbose: toPath = '=> %s%s' % (self.prefix, arcname) if self.prefix else "" print 'Compressing %s %s ...' % (arcname, toPath) add(name, arcname) output_archive.close() def listFiles(self, git_repositary_path, baselevel=''): """ listFiles(str git_repository_path, str baselevel='') -> iterator An iterator method that yields a tuple(filepath, fullpath) for each file that should be included in the archive. Skips those that match the exclusion patterns found in any discovered .gitattributes files along the way. Recurses into submodules as well. """ for filepath in self.runShell('git ls-files --cached --full-name --no-empty-directory'): fullpath = path.join(baselevel, filepath) filename = path.basename(filepath) if self.exclude and filename == '.gitattributes': self._excludes = [] fh = open(filepath, 'r') for line in fh: if not line: break tokens = line.strip().split() if 'export-ignore' in tokens[1:]: self._excludes.append(tokens[0]) fh.close() if not filename.startswith('.git') and not path.isdir(filepath): # check the patterns first ignore = False for pattern in self._excludes: if fnmatch(fullpath, pattern) or fnmatch(filename, pattern): if self.verbose: print 'Exclude pattern matched (%s): %s' % (pattern, fullpath) ignore = True break if ignore: continue # baselevel is needed to tell the arhiver where it have to extract file yield filepath, fullpath # get paths for every submodule for submodule in self.runShell("git submodule --quiet foreach 'pwd'"): chdir(submodule) # in order to get output path we need to exclude repository path from the submodule path submodule = submodule[len(git_repositary_path)+1:] # recursion allows us to process repositories with more than one level of submodules for git_file in self.listFiles(git_repositary_path, submodule): yield git_file @staticmethod def runShell(cmd): return Popen(cmd, shell=True, stdout=PIPE).stdout.read().splitlines() if __name__ == "__main__": from optparse import OptionParser parser = OptionParser(usage="usage: %prog [-v] [--prefix PREFIX] [--no-exclude] OUTPUT_FILE", version="%prog 1.0") parser.add_option('--prefix', type='string', dest='prefix', default='', help="prepend PREFIX to each filename in the archive") parser.add_option('-v', '--verbose', action='store_true', dest='verbose', help='enable verbose mode') parser.add_option('--no-exclude', action='store_false', dest='exclude', default=True, help="Dont read .gitattributes files for patterns containing export-ignore attrib") parser.add_option('--extra', action='append', dest='extra', default=[], help="Any additional files to include in the archive.") options, args = parser.parse_args() if len(args) != 1: parser.error('You must specify exactly one output file') outFile = args[0] if path.isdir(outFile): parser.error('You cannot use directory as output') archiver = GitArchiver(options.prefix, options.verbose, options.exclude, options.extra) try: archiver.create(outFile) except Exception, e: parser.exit(2, "%s\n" % e) sys.exit(0) openscad-2013.01+dfsg.orig/scripts/chrpath_linux.c0000644000175000017500000004714011714323427021445 0ustar chrysnchrysn/*************************************************************************** * * * This is a pre-configured single file version of chrpath for linux. * * It is used in the binary installer for OpenSCAD on Linux. * * * * This file has been created by running * * cat *.h *.c | sed 's, *# *include *",//&,' > ../chrpath_linux.c * * in the configured chrpath-0.13 source directory (as found in the debian * * package repository as the original download site seams to be down). * * * * chrpath is licensed under the terms of GPLv2: * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * The Authors are: * * * * Geoffrey Keating * * Implemented first version of chrpath.c based on first version of * * killrpath. * * Peeter Joot * * Implemented first version of killrpath.c. * * Petter Reinholdtsen * * Collected both implementations and made userfriendly wrapper. * * * * With patches from: * * * * Darren Salt * * David Hull * * Bradford W. Johnson * * Thomas Anders * * Tollef Fog Heen * * * ***************************************************************************/ /* config.h. Generated by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #define HAVE_ELF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_GETOPT_H 1 /* Define to 1 if you have the `getopt_long' function. */ #define HAVE_GETOPT_LONG 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_LINK_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LINK_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Name of package */ #define PACKAGE "chrpath" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "pere@hungry.com" /* Define to the full name of this package. */ #define PACKAGE_NAME ""chrpath"" /* Define to the full name and version of this package. */ #define PACKAGE_STRING ""chrpath" "0.13"" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "-chrpath-" /* Define to the version of this package. */ #define PACKAGE_VERSION ""0.13"" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ #define VERSION "0.13" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ /* #undef WORDS_BIGENDIAN */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ #ifndef PROTOS_H #define PROTOS_H #include //#include "config.h" #ifdef WORDS_BIGENDIAN #define ELFDATA2 ELFDATA2MSB #else #define ELFDATA2 ELFDATA2LSB #endif #if SIZEOF_VOID_P == 8 #define Elf_Ehdr Elf64_Ehdr #define ELFCLASS ELFCLASS64 #define Elf_Phdr Elf64_Phdr #define Elf_Shdr Elf64_Shdr #define Elf_Dyn Elf64_Dyn #elif SIZEOF_VOID_P == 4 #define Elf_Ehdr Elf32_Ehdr #define ELFCLASS ELFCLASS32 #define Elf_Phdr Elf32_Phdr #define Elf_Shdr Elf32_Shdr #define Elf_Dyn Elf32_Dyn #else #error "Unknown word size (SIZEOF_VOID_P)!" #endif int killrpath(const char *filename); int chrpath(const char *filename, const char *newpath, int convert); int elf_open(const char *filename, int flags, Elf_Ehdr *ehdr); void elf_close(int fd); int elf_find_dynamic_section(int fd, Elf_Ehdr *ehdr, Elf_Phdr *phdr); const char *elf_tagname(int tag); int elf_dynpath_tag(int tag); #endif /* PROTOS_H */ /* Re: changing embedded RPATH in existing executables. To: geoffk@ozemail.com.au Subject: Re: changing embedded RPATH in existing executables. From: (peeter joot) Date: Fri, 30 Apr 1999 16:14:44 -0400 (EDT) Cc: peeterj@ca.ibm.com, egcs@cygnus.com, libc-hacker@cygnus.com, linux-gcc@vger.rutgers.edu Reply-To: > _Changing_ is a little tricky, but the attached program strips rpaths > from executables (I find it essential for debugging the binutils). > It's endian-dependent, if you want this for x86 you can just change > the occurrences of 'MSB' to 'LSB' and compile (I should really fix > that). Hi Geoff, With your program as a guide (and some peeks into libbfd, elf.h, a bit of the glibc dynamic loader code, objdump, and a hex-editor) I was able to figure out enough to find and change the rpath string. That was fun! This program assumes (unlike your original program) that there is only one DT_RPATH tag in the dynamic section as even with multiple '-Wl,-rpath,' commands in the link this seems to occur (they all get concatonated into a : separated path). Thanks for your help. If you want to use this on non-x86 you have to change the occurances of LSB back to MSB:) Peeter -- */ #ifdef HAVE_CONFIG_H //# include "config.h" #endif #include #include #include #include #if defined(HAVE_LINK_H) # include #endif /* HAVE_LINK_H */ #include #include #include //#include "protos.h" /** * Reads an ELF file, and reads or alters the RPATH setting. * * TODO: * modify to add RPATH setting if none exists. */ int chrpath(const char *filename, const char *newpath, int convert) { int fd; Elf_Ehdr ehdr; int i; Elf_Phdr phdr; Elf_Shdr shdr; Elf_Dyn *dyns; int rpathoff; char * strtab; char * rpath; unsigned int rpathlen; int oflags; int rpath_dyns_index; if (NULL == newpath && 0 == convert) oflags = O_RDONLY; else oflags = O_RDWR; fd = elf_open(filename, oflags, &ehdr); if (fd == -1) { perror ("elf_open"); return 1; } if (0 != elf_find_dynamic_section(fd, &ehdr, &phdr)) { perror("found no dynamic section"); return 1; } dyns = malloc(phdr.p_filesz); if (dyns == NULL) { perror ("allocating memory for dynamic section"); return 1; } memset(dyns, 0, phdr.p_filesz); if (lseek(fd, phdr.p_offset, SEEK_SET) == -1 || read(fd, dyns, phdr.p_filesz) != (int)phdr.p_filesz) { perror ("reading dynamic section"); free(dyns); return 1; } rpathoff = -1; for ( rpath_dyns_index = 0; dyns[rpath_dyns_index].d_tag != DT_NULL; ++rpath_dyns_index ) { if ( elf_dynpath_tag(dyns[rpath_dyns_index].d_tag) ) { rpathoff = dyns[rpath_dyns_index].d_un.d_ptr; break; } } if (rpathoff == -1) { printf("%s: no rpath or runpath tag found.\n", filename); free(dyns); return 2; } if (lseek(fd, ehdr.e_shoff, SEEK_SET) == -1) { perror ("positioning for sections"); free(dyns); return 1; } for (i = 0; i < ehdr.e_shnum; i++) { if (read(fd, &shdr, sizeof(shdr)) != sizeof(shdr)) { perror ("reading section header"); free(dyns); return 1; } if (shdr.sh_type == SHT_STRTAB) break; } if (i == ehdr.e_shnum) { fprintf (stderr, "No string table found.\n"); free(dyns); return 2; } strtab = (char *)malloc(shdr.sh_size); if (strtab == NULL) { perror ("allocating memory for string table"); free(dyns); return 1; } memset(strtab, 0, shdr.sh_size); if (lseek(fd, shdr.sh_offset, SEEK_SET) == -1) { perror ("positioning for string table"); free(strtab); free(dyns); return 1; } if (read(fd, strtab, shdr.sh_size) != (int)shdr.sh_size) { perror ("reading string table"); free(strtab); free(dyns); return 1; } if ((int)shdr.sh_size < rpathoff) { fprintf(stderr, "%s string offset not contained in string table", elf_tagname(dyns[rpath_dyns_index].d_tag)); free(strtab); free(dyns); return 5; } rpath = strtab+rpathoff; #if defined(DT_RUNPATH) if (convert && dyns[rpath_dyns_index].d_tag == DT_RPATH) { dyns[rpath_dyns_index].d_tag = DT_RUNPATH; if (lseek(fd, phdr.p_offset, SEEK_SET) == -1 || write(fd, dyns, phdr.p_filesz) != (int)phdr.p_filesz) { perror ("converting RPATH to RUNPATH"); return 1; } printf("%s: RPATH converted to RUNPATH\n", filename); } #endif /* DT_RUNPATH */ printf("%s: %s=%s\n", filename, elf_tagname(dyns[rpath_dyns_index].d_tag), rpath); if (NULL == newpath) { free(dyns); free(strtab); return 0; } rpathlen = strlen(rpath); /* * Calculate the maximum rpath length (will be equal to rpathlen unless * we have previously truncated it). */ for ( i = rpathoff + rpathlen ; (i < (int)shdr.sh_size && strtab[i] == '\0') ; i++ ) ; i--; if (i > (int)(rpathoff + rpathlen)) rpathlen = i - rpathoff; if (strlen(newpath) > rpathlen) { fprintf(stderr, "new rpath '%s' too large; maximum length %i\n", newpath, rpathlen); free(dyns); free(strtab); return 7; } memset(rpath, 0, rpathlen); strcpy(rpath, newpath); if (lseek(fd, shdr.sh_offset+rpathoff, SEEK_SET) == -1) { perror ("positioning for RPATH"); free(dyns); free(strtab); return 1; } if (write(fd, rpath, rpathlen) != (int)rpathlen) { perror ("writing RPATH"); free(dyns); free(strtab); return 1; } printf("%s: new %s: %s\n", filename, elf_tagname(dyns[rpath_dyns_index].d_tag), rpath); elf_close(fd); free(dyns); dyns = NULL; free(strtab); return 0; } #ifdef HAVE_CONFIG_H //# include "config.h" #endif #include #if defined(HAVE_SYS_LINK_H) # include /* Find DT_RPATH on Solaris 2.6 */ #endif /* HAVE_SYS_LINK_H */ #include #include #include #include #include #include #include //#include "protos.h" int elf_open(const char *filename, int flags, Elf_Ehdr *ehdr) { int fd; fd = open(filename, flags); if (fd == -1) { perror ("open"); return -1; } if (read(fd, ehdr, sizeof(*ehdr)) != sizeof(*ehdr)) { perror ("reading header"); close(fd); return -1; } if (0 != memcmp(ehdr->e_ident, ELFMAG, SELFMAG) || ehdr->e_ident[EI_CLASS] != ELFCLASS || ehdr->e_ident[EI_DATA] != ELFDATA2 || ehdr->e_ident[EI_VERSION] != EV_CURRENT) { fprintf(stderr, #ifdef WORDS_BIGENDIAN "`%s' probably isn't a %d-bit MSB-first ELF file.\n", #else /* not WORD_BIGENDIAN */ "`%s' probably isn't a %d-bit LSB-first ELF file.\n", #endif /* not WORD_BIGENDIAN */ filename, SIZEOF_VOID_P * 8); close(fd); errno = ENOEXEC; /* Hm, is this the best errno code to use? */ return -1; } if (ehdr->e_phentsize != sizeof(Elf_Phdr)) { fprintf(stderr, "section size was read as %d, not %d!\n", ehdr->e_phentsize, (int)sizeof(Elf_Phdr)); close(fd); return -1; } return fd; } int elf_find_dynamic_section(int fd, Elf_Ehdr *ehdr, Elf_Phdr *phdr) { int i; if (lseek(fd, ehdr->e_phoff, SEEK_SET) == -1) { perror ("positioning for sections"); return 1; } for (i = 0; i < ehdr->e_phnum; i++) { if (read(fd, phdr, sizeof(*phdr)) != sizeof(*phdr)) { perror ("reading section header"); return 1; } if (phdr->p_type == PT_DYNAMIC) break; } if (i == ehdr->e_phnum) { fprintf (stderr, "No dynamic section found.\n"); return 2; } if (0 == phdr->p_filesz) { fprintf (stderr, "Length of dynamic section is zero.\n"); return 3; } return 0; } void elf_close(int fd) { close(fd); } const char * elf_tagname(int tag) { switch (tag) { case DT_RPATH: return "RPATH"; break; #if defined(DT_RUNPATH) case DT_RUNPATH: return "RUNPATH"; break; #endif /* DT_RUNPATH */ } return "UNKNOWN"; } int elf_dynpath_tag(int tag) { return ( tag == DT_RPATH #if defined(DT_RUNPATH) || tag == DT_RUNPATH #endif /* DT_RUNPATH */ ); } /* Taken from another list: _Changing_ is a little tricky, but the attached program strips rpaths from executables (I find it essential for debugging the binutils). It's endian-dependent, if you want this for x86 you can just change the occurrences of 'MSB' to 'LSB' and compile (I should really fix that). -- Geoffrey Keating */ #ifdef HAVE_CONFIG_H //# include "config.h" #endif #include #include #include #include #if defined(HAVE_LINK_H) # include #endif /* HAVE_LINK_H */ #include //#include "protos.h" #include /* Reads an ELF file, nukes all the RPATH entries. */ int killrpath(const char *filename) { int fd; Elf_Ehdr ehdr; int i; Elf_Phdr phdr; Elf_Dyn *dyns; int dynpos; fd = elf_open(filename, O_RDWR, &ehdr); if (fd == -1) { perror ("elf_open"); return 1; } if (0 != elf_find_dynamic_section(fd, &ehdr, &phdr)) { perror("found no dynamic section"); return 1; } dyns = malloc(phdr.p_memsz); if (dyns == NULL) { perror ("allocating memory for dynamic section"); return 1; } memset(dyns, 0, phdr.p_memsz); if (lseek(fd, phdr.p_offset, SEEK_SET) == -1 || read(fd, dyns, phdr.p_filesz) != (int)phdr.p_filesz) { perror ("reading dynamic section"); return 1; } dynpos = 0; for (i = 0; dyns[i].d_tag != DT_NULL; i++) { dyns[dynpos] = dyns[i]; if ( ! elf_dynpath_tag(dyns[i].d_tag) ) dynpos++; } for (; dynpos < i; dynpos++) dyns[dynpos].d_tag = DT_NULL; if (lseek(fd, phdr.p_offset, SEEK_SET) == -1 || write(fd, dyns, phdr.p_filesz) != (int)phdr.p_filesz) { perror ("writing dynamic section"); return 1; } elf_close(fd); return 0; } /* * Author: Petter Reinholdtsen * date: 2001-01-20 * * Alter ELF rpath information (insert, modify, remove). * * Based on source from Peeter Joot and Geoffrey * Keating . */ #ifdef HAVE_CONFIG_H //# include "config.h" #endif #include #include #include #ifdef HAVE_GETOPT_H #include #endif //#include "protos.h" #ifdef HAVE_GETOPT_LONG # define GETOPT_LONG getopt_long static struct option long_options[] = { {"convert", 0, 0, 'c'}, {"delete", 0, 0, 'd'}, {"help", 0, 0, 'h'}, {"keepgoing", 0, 0, 'k'}, {"list", 0, 0, 'l'}, {"replace", 1, 0, 'r'}, {"version", 0, 0, 'v'} }; #else /* not HAVE_GETOPT_LONG */ # define GETOPT_LONG(argc,argv,optstr,lopts,lidx) getopt(argc,argv,optstr) #endif /* not HAVE_GETOPT_LONG */ static void usage(char *progname) { printf("Usage: %s [-v|-d|-c|-r ] [ ...]\n\n", progname); printf(" -v|--version Display program version number\n"); printf(" -d|--delete Delete current rpath/runpath setting\n"); #if defined(DT_RUNPATH) printf(" -c|--convert Convert rpath to runpath\n"); #endif /* DT_RUNPATH */ printf(" -r |--replace Replace current rpath/runpath setting\n"); printf(" with the path given\n"); printf(" -l|--list List the current rpath/runpath (default)\n"); printf(" -h|--help Show this usage information.\n"); #ifndef HAVE_GETOPT_LONG printf("\n *** The long options are not available on this platform"); #endif /* not HAVE_GETOPT_LONG */ #if !defined(DT_RUNPATH) printf("\n *** There is no support for runpath on this platform"); #endif /* DT_RUNPATH */ printf("\n"); } int main(int argc, char * const argv[]) { int retval = 0; int convert = 0; /* convert to given type */ int remove = 0; /* remove or not */ int keep_going = 0; /* Break on first error, or keep going? */ char *newpath = NULL; /* insert this path */ int opt; #ifdef HAVE_GETOPT_LONG int option_index = 0; #endif /* HAVE_GETOPT_LONG */ if (argc < 2) { usage(argv[0]); return 1; } do { opt = GETOPT_LONG(argc, argv, "cdhklr:v", long_options, &option_index); switch (opt) { #if defined(DT_RUNPATH) case 'c': convert = 1; break; #endif /* DT_RUNPATH */ case 'd': remove = 1; break; case 'k': keep_going = 1; break; case 'r': newpath = optarg; break; case 'v': printf("%s version %s\n", PACKAGE, VERSION); exit(0); break; case 'l': /* This is the default action */ newpath = NULL; break; case -1: break; default: printf("Invalid argument '%c'\n", opt); case 'h': usage(argv[0]); exit(0); break; } } while (-1 != opt); while (optind < argc && (!retval || keep_going)) { if (remove) retval |= killrpath(argv[optind++]); else /* list by default, replace if path is set */ retval |= chrpath(argv[optind++], newpath, convert); } return retval; } openscad-2013.01+dfsg.orig/scripts/uni-build-dependencies.sh0000755000175000017500000002651312076022154023300 0ustar chrysnchrysn #!/bin/sh -e # uni-build-dependencies by don bright 2012. copyright assigned to # Marius Kintel and Clifford Wolf, 2012. released under the GPL 2, or # later, as described in the file named 'COPYING' in OpenSCAD's project root. # This script builds most dependencies, both libraries and binary tools, # of OpenSCAD for Linux/BSD. It is based on macosx-build-dependencies.sh # # By default it builds under $HOME/openscad_deps. You can alter this by # setting the BASEDIR environment variable or with the 'out of tree' # feature # # Usage: # cd openscad # . ./scripts/setenv-unibuild.sh # ./scripts/uni-build-dependencies.sh # # Out-of-tree usage: # # cd somepath # . /path/to/openscad/scripts/setenv-unibuild.sh # /path/to/openscad/scripts/uni-build-dependencies.sh # # Prerequisites: # - wget or curl # - Qt4 # - gcc # # Enable Clang (experimental, only works on linux): # # . ./scripts/setenv-unibuild.sh clang # printUsage() { echo "Usage: $0" echo } build_bison() { version=$1 echo "Building bison" $version cd $BASEDIR/src rm -rf bison-$version if [ ! -f bison-$version.tar.gz ]; then curl --insecure -O http://ftp.gnu.org/gnu/bison/bison-$version.tar.gz fi tar zxf bison-$version.tar.gz cd bison-$version ./configure --prefix=$DEPLOYDIR make -j$NUMCPU make install } build_git() { version=$1 echo "Building git" $version "..." cd $BASEDIR/src rm -rf git-$version if [ ! -f git-$version.tar.gz ]; then curl --insecure -O http://git-core.googlecode.com/files/git-$version.tar.gz fi tar zxf git-$version.tar.gz cd git-$version ./configure --prefix=$DEPLOYDIR make -j$NUMCPU make install } build_cmake() { version=$1 echo "Building cmake" $version "..." cd $BASEDIR/src rm -rf cmake-$version if [ ! -f cmake-$version.tar.gz ]; then curl --insecure -O http://www.cmake.org/files/v2.8/cmake-$version.tar.gz fi tar zxf cmake-$version.tar.gz cd cmake-$version mkdir build cd build ../configure --prefix=$DEPLOYDIR make -j$NUMCPU make install } build_curl() { version=$1 echo "Building curl" $version "..." cd $BASEDIR/src rm -rf curl-$version if [ ! -f curl-$version.tar.bz2 ]; then wget http://curl.haxx.se/download/curl-$version.tar.bz2 fi tar xjf curl-$version.tar.bz2 cd curl-$version mkdir build cd build ../configure --prefix=$DEPLOYDIR make -j$NUMCPU make install } build_gmp() { version=$1 if [ -e $DEPLOYDIR/include/gmp.h ]; then echo "gmp already installed. not building" return fi echo "Building gmp" $version "..." cd $BASEDIR/src rm -rf gmp-$version if [ ! -f gmp-$version.tar.bz2 ]; then curl --insecure -O ftp://ftp.gmplib.org/pub/gmp-$version/gmp-$version.tar.bz2 fi tar xjf gmp-$version.tar.bz2 cd gmp-$version mkdir build cd build ../configure --prefix=$DEPLOYDIR --enable-cxx make install } build_mpfr() { version=$1 if [ -e $DEPLOYDIR/include/mpfr.h ]; then echo "mpfr already installed. not building" return fi echo "Building mpfr" $version "..." cd $BASEDIR/src rm -rf mpfr-$version if [ ! -f mpfr-$version.tar.bz2 ]; then curl --insecure -O http://www.mpfr.org/mpfr-$version/mpfr-$version.tar.bz2 fi tar xjf mpfr-$version.tar.bz2 cd mpfr-$version mkdir build cd build ../configure --prefix=$DEPLOYDIR --with-gmp=$DEPLOYDIR make install cd .. } build_boost() { if [ -e $DEPLOYDIR/include/boost ]; then echo "boost already installed. not building" return fi version=$1 bversion=`echo $version | tr "." "_"` echo "Building boost" $version "..." cd $BASEDIR/src rm -rf boost_$bversion if [ ! -f boost_$bversion.tar.bz2 ]; then curl --insecure -LO http://downloads.sourceforge.net/project/boost/boost/$version/boost_$bversion.tar.bz2 fi tar xjf boost_$bversion.tar.bz2 cd boost_$bversion if [ "`gcc --version|grep 4.7`" ]; then if [ "`echo $version | grep 1.47`" ]; then echo gcc 4.7 incompatible with boost 1.47. edit boost version in $0 exit fi fi # We only need certain portions of boost ./bootstrap.sh --prefix=$DEPLOYDIR --with-libraries=thread,program_options,filesystem,system,regex if [ $CXX ]; then if [ $CXX = "clang++" ]; then ./b2 -j$NUMCPU toolset=clang install # ./b2 -j$NUMCPU toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" install fi else ./b2 -j$NUMCPU ./b2 install fi } build_cgal() { if [ -e $DEPLOYDIR/include/CGAL/version.h ]; then echo "CGAL already installed. not building" return fi version=$1 echo "Building CGAL" $version "..." cd $BASEDIR/src rm -rf CGAL-$version if [ ! -f CGAL-$version.tar.* ]; then #4.0.2 curl --insecure -O https://gforge.inria.fr/frs/download.php/31174/CGAL-$version.tar.bz2 # 4.0 curl --insecure -O https://gforge.inria.fr/frs/download.php/30387/CGAL-$version.tar.gz # 3.9 curl --insecure -O https://gforge.inria.fr/frs/download.php/29125/CGAL-$version.tar.gz # 3.8 curl --insecure -O https://gforge.inria.fr/frs/download.php/28500/CGAL-$version.tar.gz # 3.7 curl --insecure -O https://gforge.inria.fr/frs/download.php/27641/CGAL-$version.tar.gz fi tar jxf CGAL-$version.tar.bz2 cd CGAL-$version if [ "`echo $2 | grep use-sys-libs`" ]; then cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DCMAKE_BUILD_TYPE=Debug else cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DGMP_INCLUDE_DIR=$DEPLOYDIR/include -DGMP_LIBRARIES=$DEPLOYDIR/lib/libgmp.so -DGMPXX_LIBRARIES=$DEPLOYDIR/lib/libgmpxx.so -DGMPXX_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_LIBRARIES=$DEPLOYDIR/lib/libmpfr.so -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DBOOST_ROOT=$DEPLOYDIR -DCMAKE_BUILD_TYPE=Debug fi make -j$NUMCPU make install } build_glew() { if [ -e $DEPLOYDIR/include/GL/glew.h ]; then echo "glew already installed. not building" return fi version=$1 echo "Building GLEW" $version "..." cd $BASEDIR/src rm -rf glew-$version if [ ! -f glew-$version.tgz ]; then curl --insecure -LO http://downloads.sourceforge.net/project/glew/glew/$version/glew-$version.tgz fi tar xzf glew-$version.tgz cd glew-$version mkdir -p $DEPLOYDIR/lib/pkgconfig # Glew's makefile is not built for Linux Multiarch. We aren't trying # to fix everything here, just the test machines OScad normally runs on # Fedora 64-bit if [ "`uname -m | grep 64`" ]; then if [ -e /usr/lib64/libXmu.so.6 ]; then sed -ibak s/"\-lXmu"/"\-L\/usr\/lib64\/libXmu.so.6"/ config/Makefile.linux fi fi # debian hurd i386 if [ "`uname -m | grep 386`" ]; then if [ -e /usr/lib/i386-gnu/libXi.so.6 ]; then sed -ibak s/"-lXi"/"\-L\/usr\/lib\/i386-gnu\/libXi.so.6"/ config/Makefile.gnu fi fi # clang linux if [ $CC ]; then sed -ibak s/"CC = cc"/"# CC = cc"/ config/Makefile.linux fi MAKER=make if [ "`uname | grep BSD`" ]; then if [ "`command -v gmake`" ]; then MAKER=gmake else echo "building glew on BSD requires gmake (gnu make)" exit fi fi GLEW_DEST=$DEPLOYDIR $MAKER -j$NUMCPU GLEW_DEST=$DEPLOYDIR $MAKER install } build_opencsg() { if [ -e $DEPLOYDIR/include/opencsg.h ]; then echo "OpenCSG already installed. not building" return fi version=$1 echo "Building OpenCSG" $version "..." cd $BASEDIR/src rm -rf OpenCSG-$version if [ ! -f OpenCSG-$version.tar.gz ]; then curl --insecure -O http://www.opencsg.org/OpenCSG-$version.tar.gz fi tar xzf OpenCSG-$version.tar.gz cd OpenCSG-$version # modify the .pro file for qmake, then use qmake to # manually rebuild the src/Makefile (some systems don't auto-rebuild it) cp opencsg.pro opencsg.pro.bak cat opencsg.pro.bak | sed s/example// > opencsg.pro if [ "`command -v qmake-qt4`" ]; then OPENCSG_QMAKE=qmake-qt4 elif [ "`command -v qmake4`" ]; then OPENCSG_QMAKE=qmake4 else OPENCSG_QMAKE=qmake fi cd $BASEDIR/src/OpenCSG-$version/src $OPENCSG_QMAKE cd $BASEDIR/src/OpenCSG-$version $OPENCSG_QMAKE make ls lib/* include/* if [ -e lib/.libs ]; then ls lib/.libs/*; fi # netbsd echo "installing to -->" $DEPLOYDIR mkdir -p $DEPLOYDIR/lib mkdir -p $DEPLOYDIR/include install lib/* $DEPLOYDIR/lib install include/* $DEPLOYDIR/include if [ -e lib/.libs ]; then install lib/.libs/* $DEPLOYDIR/lib; fi #netbsd cd $BASEDIR } build_eigen() { version=$1 if [ -e $DEPLOYDIR/include/eigen2 ]; then if [ `echo $version | grep 2....` ]; then echo "Eigen2 already installed. not building" return fi fi if [ -e $DEPLOYDIR/include/eigen3 ]; then if [ `echo $version | grep 3....` ]; then echo "Eigen3 already installed. not building" return fi fi echo "Building eigen" $version "..." cd $BASEDIR/src rm -rf eigen-$version EIGENDIR="none" if [ $version = "2.0.17" ]; then EIGENDIR=eigen-eigen-b23437e61a07; fi if [ $version = "3.1.1" ]; then EIGENDIR=eigen-eigen-43d9075b23ef; fi if [ $EIGENDIR = "none" ]; then echo Unknown eigen version. Please edit script. exit 1 fi rm -rf ./$EIGENDIR if [ ! -f eigen-$version.tar.bz2 ]; then curl --insecure -LO http://bitbucket.org/eigen/eigen/get/$version.tar.bz2 mv $version.tar.bz2 eigen-$version.tar.bz2 fi tar xjf eigen-$version.tar.bz2 ln -s ./$EIGENDIR eigen-$version cd eigen-$version mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DEIGEN_TEST_NO_OPENGL=1 .. make -j$NUMCPU make install } # this section allows 'out of tree' builds, as long as the system has # the 'dirname' command installed if [ "`command -v dirname`" ]; then OPENSCAD_SCRIPTDIR=`dirname $0` else if [ ! -f openscad.pro ]; then echo "Must be run from the OpenSCAD source root directory (dont have 'dirname')" exit 1 else OPENSCAD_SCRIPTDIR=$PWD fi fi . $OPENSCAD_SCRIPTDIR/setenv-unibuild.sh # '.' is equivalent to 'source' SRCDIR=$BASEDIR/src if [ ! $NUMCPU ]; then echo "Note: The NUMCPU environment variable can be set for paralell builds" NUMCPU=1 fi if [ ! -d $BASEDIR/bin ]; then mkdir -p $BASEDIR/bin fi echo "Using basedir:" $BASEDIR echo "Using deploydir:" $DEPLOYDIR echo "Using srcdir:" $SRCDIR echo "Number of CPUs for parallel builds:" $NUMCPU mkdir -p $SRCDIR $DEPLOYDIR # this section builds some basic tools, if they are missing or outdated # they are installed under $BASEDIR/bin which we have added to our PATH if [ ! "`command -v curl`" ]; then build_curl 7.26.0 fi if [ ! "`command -v bison`" ]; then build_bison 2.6.1 fi # NB! For cmake, also update the actual download URL in the function if [ ! "`command -v cmake`" ]; then build_cmake 2.8.8 fi if [ "`cmake --version | grep 'version 2.[1-6][^0-9]'`" ]; then build_cmake 2.8.8 fi # build_git 1.7.10.3 # Singly build CGAL or OpenCSG # (Most systems have all libraries available as packages except CGAL/OpenCSG) # (They can be built singly here by passing a command line arg to the script) if [ $1 ]; then if [ $1 = "cgal" ]; then build_cgal 4.0.2 use-sys-libs exit fi if [ $1 = "opencsg" ]; then build_opencsg 1.3.2 exit fi fi # # Main build of libraries # edit version numbers here as needed. # build_eigen 3.1.1 build_gmp 5.0.5 build_mpfr 3.1.1 build_boost 1.49.0 # NB! For CGAL, also update the actual download URL in the function build_cgal 4.0.2 build_glew 1.9.0 build_opencsg 1.3.2 echo "OpenSCAD dependencies built and installed to " $BASEDIR openscad-2013.01+dfsg.orig/scripts/mingw-x-build-dependencies.sh0000755000175000017500000000261612076022154024071 0ustar chrysnchrysn#!/bin/sh -e # # This script builds all library dependencies of OpenSCAD for cross-compilation # from linux to mingw32 for windows, using the MXE cross build system. # # This script must be run from the OpenSCAD source root directory # # Usage: ./scripts/mingw-x-build-dependencies.sh # # Prerequisites: # # Please see http://mxe.cc/#requirements # # Also see http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X # OPENSCADDIR=$PWD if [ ! -f $OPENSCADDIR/openscad.pro ]; then echo "Must be run from the OpenSCAD source root directory" exit 0 fi echo OPENSCADDIR: $OPENSCADDIR if [ ! $NUMCPU ]; then echo "note: you can 'export NUMCPU=x' for multi-core compiles (x=number)"; NUMCPU=1 fi if [ ! $NUMJOBS ]; then echo "note: you can 'export NUMJOBS=x' for building multiple pkgs at once" if [ $NUMCPU -gt 2 ]; then NUMJOBS=$((NUMCPU/2)) else NUMJOBS=1 fi fi . ./scripts/setenv-mingw-xbuild.sh if [ ! -e $BASEDIR ]; then mkdir -p $BASEDIR fi if [ ! -e $MXEDIR ]; then mkdir -p $MXEDIR cd $MXEDIR/.. echo "Downloading MXE into " $PWD git clone git://github.com/mxe/mxe.git fi echo "entering" $MXEDIR cd $MXEDIR echo "make mpfr eigen opencsg cgal qt -j $NUMCPU JOBS=$NUMJOBS" make mpfr eigen opencsg cgal qt nsis -j $NUMCPU JOBS=$NUMJOBS #make mpfr -j $NUMCPU JOBS=$NUMJOBS # for testing echo "leaving" $MXEDIR echo "entering $OPENSCADDIR" cd $OPENSCADDIR openscad-2013.01+dfsg.orig/scripts/release-common.sh0000755000175000017500000002042612076022154021667 0ustar chrysnchrysn#!/bin/bash # # This script creates a binary release of OpenSCAD. This should work # under Mac OS X, Linux 32, Linux 64, and Linux->Win32 MXE cross-build. # Windows under msys has not been tested recently. # # The script will create a file called openscad-. in # the current directory (or under ./mingw32) # # Usage: release-common.sh [-v ] [-c] [-x32] # -v Version string (e.g. -v 2010.01) # -c Build with commit info # -mingw32 Cross-compile for win32 using MXE # # If no version string is given, todays date will be used (YYYY-MM-DD) # If no make target is given, release will be used on Windows, none one Mac OS X # # The commit info will extracted from git and be passed to qmake as OPENSCAD_COMMIT # to identify a build in the about box. # # The mingw32 cross compile depends on the MXE cross-build tools. Please # see the README.md file on how to install these dependencies. printUsage() { echo "Usage: $0 -v -c -mingw32 echo echo " Example: $0 -v 2010.01 } OPENSCADDIR=$PWD if [ ! -f $OPENSCADDIR/openscad.pro ]; then echo "Must be run from the OpenSCAD source root directory" exit 1 fi if [[ "$OSTYPE" =~ "darwin" ]]; then OS=MACOSX elif [[ $OSTYPE == "msys" ]]; then OS=WIN elif [[ $OSTYPE == "linux-gnu" ]]; then OS=LINUX if [[ `uname -m` == "x86_64" ]]; then ARCH=64 else ARCH=32 fi echo "Detected ARCH: $ARCH" fi if [ "`echo $* | grep mingw32`" ]; then OS=LINXWIN fi if [ $OS ]; then echo "Detected OS: $OS" else echo "Error: Couldn't detect OSTYPE" exit fi while getopts 'v:c' c do case $c in v) VERSION=$OPTARG;; c) OPENSCAD_COMMIT=`git log -1 --pretty=format:"%h"` esac done if test -z "$VERSION"; then VERSION=`date "+%Y.%m.%d"` fi echo "Checking pre-requisites..." case $OS in LINXWIN) MAKENSIS= if [ "`command -v makensis`" ]; then MAKENSIS=makensis elif [ "`command -v i686-pc-mingw32-makensis`" ]; then MAKENSIS=i686-pc-mingw32-makensis else echo "makensis not found. please install nsis" exit 1 fi echo NSIS makensis found: $MAKENSIS ;; esac if [ ! -e $OPENSCADDIR/libraries/MCAD/__init__.py ]; then echo "Downloading MCAD" git submodule init git submodule update else echo "MCAD found:" $OPENSCADDIR/libraries/MCAD fi if [ -d .git ]; then git submodule update fi echo "Building openscad-$VERSION $CONFIGURATION..." case $OS in LINUX|MACOSX) CONFIG=deploy TARGET= ;; WIN) unset CONFIG export QTDIR=/c/devmingw/qt2009.03 export QTMAKESPEC=win32-g++ export PATH=$PATH:/c/devmingw/qt2009.03/bin:/c/devmingw/qt2009.03/qt/bin ZIP="/c/Program Files/7-Zip/7z.exe" ZIPARGS="a -tzip" TARGET=release ;; LINXWIN) unset CONFIG . ./scripts/setenv-mingw-xbuild.sh TARGET=release ZIP="zip" ZIPARGS="-r" ;; esac case $OS in LINXWIN) cd $DEPLOYDIR && i686-pc-mingw32-qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG+=mingw-cross-env CONFIG-=debug ../openscad.pro cd $OPENSCADDIR ;; *) qmake VERSION=$VERSION OPENSCAD_COMMIT=$OPENSCAD_COMMIT CONFIG+=$CONFIG CONFIG-=debug openscad.pro ;; esac case $OS in LINXWIN) cd $DEPLOYDIR && make -s clean cd $OPENSCADDIR ;; *) make -s clean ;; esac case $OS in MACOSX) rm -rf OpenSCAD.app ;; WIN) #if the following files are missing their tried removal stops the build process on msys touch -t 200012121010 parser_yacc.h parser_yacc.cpp lexer_lex.cpp ;; esac if [ ! $NUMCPU ]; then echo "note: you can 'export NUMCPU=x' for multi-core compiles (x=number)"; NUMCPU=2 fi case $OS in LINXWIN) # dont use paralell builds, it can error-out on parser_yacc. cd $DEPLOYDIR && make $TARGET cd $OPENSCADDIR ;; *) make -j$NUMCPU $TARGET ;; esac if [[ $? != 0 ]]; then echo "Error building OpenSCAD. Aborting." exit 1 fi echo "Creating directory structure..." case $OS in MACOSX) EXAMPLESDIR=OpenSCAD.app/Contents/Resources/examples LIBRARYDIR=OpenSCAD.app/Contents/Resources/libraries ;; LINXWIN) EXAMPLESDIR=$DEPLOYDIR/openscad-$VERSION/examples/ LIBRARYDIR=$DEPLOYDIR/openscad-$VERSION/libraries/ rm -rf $DEPLOYDIR/openscad-$VERSION mkdir $DEPLOYDIR/openscad-$VERSION ;; *) EXAMPLESDIR=openscad-$VERSION/examples/ LIBRARYDIR=openscad-$VERSION/libraries/ rm -rf openscad-$VERSION mkdir openscad-$VERSION ;; esac if [ -n $EXAMPLESDIR ]; then echo $EXAMPLESDIR mkdir -p $EXAMPLESDIR cp examples/* $EXAMPLESDIR chmod -R 644 $EXAMPLESDIR/* fi if [ -n $LIBRARYDIR ]; then echo $LIBRARYDIR mkdir -p $LIBRARYDIR # exclude the .git stuff from MCAD which is a git submodule. # tar is a relatively portable way to do exclusion, without the # risks of rm rm -f libraries.tar tar cf libraries.tar --exclude=.git* libraries cd $LIBRARYDIR/.. && tar xf $OPENSCADDIR/libraries.tar && cd $OPENSCADDIR rm -f libraries.tar chmod -R u=rwx,go=r,+X $LIBRARYDIR/* fi echo "Creating archive.." case $OS in MACOSX) macdeployqt OpenSCAD.app -dmg -no-strip mv OpenSCAD.dmg OpenSCAD-$VERSION.dmg hdiutil internet-enable -yes -quiet OpenSCAD-$VERSION.dmg echo "Binary created: OpenSCAD-$VERSION.dmg" ;; WIN) #package cp win32deps/* openscad-$VERSION cp $TARGET/openscad.exe openscad-$VERSION rm -f openscad-$VERSION.zip "$ZIP" $ZIPARGS openscad-$VERSION.zip openscad-$VERSION rm -rf openscad-$VERSION echo "Binary created: openscad-$VERSION.zip" ;; LINXWIN) #package echo "Creating binary package" cd $DEPLOYDIR cp $TARGET/openscad.exe openscad-$VERSION rm -f OpenSCAD-$VERSION.zip "$ZIP" $ZIPARGS OpenSCAD-$VERSION.zip openscad-$VERSION cd $OPENSCADDIR echo "Binary package created" echo "Creating installer" echo "Copying NSIS files to $DEPLOYDIR/openscad-$VERSION" cp ./scripts/installer.nsi $DEPLOYDIR/openscad-$VERSION cp ./scripts/mingw-file-association.nsh $DEPLOYDIR/openscad-$VERSION cd $DEPLOYDIR/openscad-$VERSION NSISDEBUG=-V2 # NSISDEBUG= # leave blank for full log echo $MAKENSIS $NSISDEBUG installer.nsi $MAKENSIS $NSISDEBUG installer.nsi cp $DEPLOYDIR/openscad-$VERSION/openscad_setup.exe $DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe cd $OPENSCADDIR BINFILE=$DEPLOYDIR/OpenSCAD-$VERSION.zip INSTFILE=$DEPLOYDIR/OpenSCAD-$VERSION-Installer.exe if [ -e $BINFILE ]; then if [ -e $INSTFILE ]; then echo echo "Binary created:" $BINFILE echo "Installer created:" $INSTFILE echo else echo "Build failed. Cannot find" $INSTFILE exit 1 fi else echo "Build failed. Cannot find" $BINFILE exit 1 fi ;; LINUX) # Do stuff from release-linux.sh mkdir openscad-$VERSION/bin mkdir -p openscad-$VERSION/lib/openscad cp scripts/openscad-linux openscad-$VERSION/bin/openscad cp openscad openscad-$VERSION/lib/openscad/ if [[ $ARCH == 64 ]]; then gcc -o chrpath_linux -DSIZEOF_VOID_P=8 scripts/chrpath_linux.c else gcc -o chrpath_linux -DSIZEOF_VOID_P=4 scripts/chrpath_linux.c fi ./chrpath_linux -d openscad-$VERSION/lib/openscad/openscad ldd openscad | sed -re 's,.* => ,,; s,[\t ].*,,;' -e '/Qt|boost/ { p; d; };' \ -e '/lib(icu.*|stdc.*|audio|CGAL|GLEW|opencsg|png|gmp|gmpxx|mpfr)\.so/ { p; d; };' \ -e 'd;' | xargs cp -vt openscad-$VERSION/lib/openscad/ strip openscad-$VERSION/lib/openscad/* cp scripts/installer-linux.sh openscad-$VERSION/install.sh chmod 755 -R openscad-$VERSION/ PACKAGEFILE=openscad-$VERSION.x86-$ARCH.tar.gz tar cz openscad-$VERSION > $PACKAGEFILE echo echo "Binary created:" $PACKAGEFILE echo ;; esac openscad-2013.01+dfsg.orig/scripts/batch-tests-stl.sh0000755000175000017500000000045211516152336022003 0ustar chrysnchrysn#!/bin/sh cmd="openscad" [ -x "./openscad" ] && cmd="./openscad" [ -x "./OpenSCAD.app/Contents/MacOS/OpenSCAD" ] && cmd="./OpenSCAD.app/Contents/MacOS/OpenSCAD" mkdir -p output for f in testdata/scad/*-tests.scad; do echo `basename $f .scad` "$cmd" -s output/`basename $f .scad`.stl $f done openscad-2013.01+dfsg.orig/scripts/batch-2d.sh0000755000175000017500000000051011551127020020330 0ustar chrysnchrysn#!/bin/sh cmd="openscad" [ -x "./openscad" ] && cmd="./openscad" [ -x "./OpenSCAD.app/Contents/MacOS/OpenSCAD" ] && cmd="./OpenSCAD.app/Contents/MacOS/OpenSCAD" mkdir -p output for f in testdata/dxf/*.dxf; do echo `basename $f` cat > tmp.scad << EOF import_dxf("$f"); EOF "$cmd" -x output/`basename $f` tmp.scad done openscad-2013.01+dfsg.orig/scripts/update-web.sh0000755000175000017500000000256411777162366021042 0ustar chrysnchrysn#!/bin/bash # Works with Mac OS X and Linux cross-compiling for windows using # mingw-cross-env (use like: OS=LINXWIN update-web.sh file1.zip file2.exe). file1=$1 if [ -z "$file1" ]; then echo "Usage: $0 []" exit 1 fi if [[ $OSTYPE =~ "darwin" ]]; then OS=MACOSX elif [[ $OSTYPE == "linux-gnu" ]]; then OS=LINUX fi indexfile=../openscad.github.com/index.html if [ -f $indexfile ]; then if [ $OS == MACOSX ]; then sed -i .backup -e "s/^\(.*mac-snapshot.*\)\(OpenSCAD-.*\.dmg\)\(.*\)\(OpenSCAD-.*dmg\)\(.*$\)/\\1$file1\\3$file1\\5/" $indexfile elif [ $OS == LINXWIN ]; then file2=$2 sed -i .backup -e "s/^\(.*win-snapshot-zip.*\)\(OpenSCAD-.*\.zip\)\(.*\)\(OpenSCAD-.*zip\)\(.*$\)/\\1$file1\\3$file1\\5/" $indexfile sed -i .backup -e "s/^\(.*win-snapshot-exe.*\)\(OpenSCAD-.*-Installer\.exe\)\(.*\)\(OpenSCAD-.*-Installer.exe\)\(.*$\)/\\1$file2\\3$file2\\5/" $indexfile elif [ $OS == LINUX ]; then file2=$2 sed -i .backup -e "s/^\(.*linux-snapshot-32.*\)\(openscad-.*-32\.tar\.gz\)\(.*\)\(openscad-.*-32\.tar\.gz\)\(.*$\)/\\1$file1\\3$file1\\5/" $indexfile sed -i .backup -e "s/^\(.*linux-snapshot-64.*\)\(openscad-.*-64\.tar\.gz\)\(.*\)\(openscad-.*-64\.tar\.gz\)\(.*$\)/\\1$file2\\3$file2\\5/" $indexfile fi echo "Web page updated. Remember to commit and push openscad.github.com" else echo "Web page not found at $indexfile" fi openscad-2013.01+dfsg.orig/scripts/macosx-build-dependencies.sh0000755000175000017500000003255412076024222023777 0ustar chrysnchrysn#!/bin/sh -e # # This script builds all library dependencies of OpenSCAD for Mac OS X. # The libraries will be build in 64-bit (and optionally 32-bit mode) mode # and backwards compatible with 10.5 "Leopard". # # This script must be run from the OpenSCAD source root directory # # Usage: macosx-build-dependencies.sh [-6l] # -6 Build only 64-bit binaries # -l Force use of LLVM compiler # -c Force use of clang compiler # # Prerequisites: # - MacPorts: curl, cmake # # FIXME: # o Verbose option # BASEDIR=$PWD/../libraries OPENSCADDIR=$PWD SRCDIR=$BASEDIR/src DEPLOYDIR=$BASEDIR/install MAC_OSX_VERSION_MIN=10.5 OPTION_32BIT=true OPTION_LLVM=false OPTION_CLANG=false OPTION_GCC=false DETECTED_LION=false export QMAKESPEC=macx-g++ printUsage() { echo "Usage: $0 [-6lc]" echo echo " -6 Build only 64-bit binaries" echo " -l Force use of LLVM compiler" echo " -c Force use of clang compiler" } # FIXME: Support gcc/llvm/clang flags. Use -platform to make this work? kintel 20130117 build_qt() { version=$1 echo "Building Qt" $version "..." cd $BASEDIR/src rm -rf qt-everywhere-opensource-src-$version if [ ! -f qt-everywhere-opensource-src-$version.tar.gz ]; then curl -O http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-$version.tar.gz fi tar xzf qt-everywhere-opensource-src-$version.tar.gz cd qt-everywhere-opensource-src-$version if $OPTION_32BIT; then QT_32BIT="-arch x86" fi ./configure -prefix $DEPLOYDIR -release $QT_32BIT -arch x86_64 -opensource -confirm-license -fast -no-qt3support -no-svg -no-phonon -no-audio-backend -no-multimedia -no-javascript-jit -no-script -no-scripttools -no-declarative -no-xmlpatterns -nomake demos -nomake examples -nomake docs -nomake translations -no-webkit make -j6 install } # Hack warning: gmplib is built separately in 32-bit and 64-bit mode # and then merged afterwards. gmplib's header files are dependent on # the CPU architecture on which configure was run and will be patched accordingly. build_gmp() { version=$1 echo "Building gmp" $version "..." cd $BASEDIR/src rm -rf gmp-$version if [ ! -f gmp-$version.tar.bz2 ]; then curl -O ftp://ftp.gmplib.org/pub/gmp-$version/gmp-$version.tar.bz2 fi tar xjf gmp-$version.tar.bz2 cd gmp-$version if $OPTION_32BIT; then mkdir build-i386 cd build-i386 ../configure --prefix=$DEPLOYDIR/i386 "CFLAGS=-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch i386" LDFLAGS="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch i386" ABI=32 --enable-cxx make install cd .. fi # 64-bit version mkdir build-x86_64 cd build-x86_64 ../configure --prefix=$DEPLOYDIR/x86_64 "CFLAGS=-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch x86_64" LDFLAGS="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch x86_64" ABI=64 --enable-cxx make install # merge cd $DEPLOYDIR mkdir -p lib if $OPTION_32BIT; then lipo -create i386/lib/libgmp.dylib x86_64/lib/libgmp.dylib -output lib/libgmp.dylib lipo -create i386/lib/libgmpxx.dylib x86_64/lib/libgmpxx.dylib -output lib/libgmpxx.dylib else cp x86_64/lib/libgmp.dylib lib/libgmp.dylib cp x86_64/lib/libgmpxx.dylib lib/libgmpxx.dylib fi install_name_tool -id $DEPLOYDIR/lib/libgmp.dylib lib/libgmp.dylib install_name_tool -id $DEPLOYDIR/lib/libgmpxx.dylib lib/libgmpxx.dylib install_name_tool -change $DEPLOYDIR/x86_64/lib/libgmp.10.dylib $DEPLOYDIR/lib/libgmp.dylib lib/libgmpxx.dylib if $OPTION_32BIT; then cp lib/libgmp.dylib i386/lib/ cp lib/libgmp.dylib x86_64/lib/ cp lib/libgmpxx.dylib i386/lib/ cp lib/libgmpxx.dylib x86_64/lib/ fi mkdir -p include cp x86_64/include/gmp.h include/ cp x86_64/include/gmpxx.h include/ patch -p0 include/gmp.h << EOF --- gmp.h.orig 2011-11-08 01:03:41.000000000 +0100 +++ gmp.h 2011-11-08 01:06:21.000000000 +0100 @@ -26,12 +26,28 @@ #endif -/* Instantiated by configure. */ -#if ! defined (__GMP_WITHIN_CONFIGURE) +#if defined(__i386__) +#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 +#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0 +#define GMP_LIMB_BITS 32 +#define GMP_NAIL_BITS 0 +#elif defined(__x86_64__) #define __GMP_HAVE_HOST_CPU_FAMILY_power 0 #define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 0 #define GMP_LIMB_BITS 64 #define GMP_NAIL_BITS 0 +#elif defined(__ppc__) +#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 +#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 1 +#define GMP_LIMB_BITS 32 +#define GMP_NAIL_BITS 0 +#elif defined(__powerpc64__) +#define __GMP_HAVE_HOST_CPU_FAMILY_power 0 +#define __GMP_HAVE_HOST_CPU_FAMILY_powerpc 1 +#define GMP_LIMB_BITS 64 +#define GMP_NAIL_BITS 0 +#else +#error Unsupported architecture #endif #define GMP_NUMB_BITS (GMP_LIMB_BITS - GMP_NAIL_BITS) #define GMP_NUMB_MASK ((~ __GMP_CAST (mp_limb_t, 0)) >> GMP_NAIL_BITS) EOF } # As with gmplib, mpfr is built separately in 32-bit and 64-bit mode and then merged # afterwards. build_mpfr() { version=$1 echo "Building mpfr" $version "..." cd $BASEDIR/src rm -rf mpfr-$version if [ ! -f mpfr-$version.tar.bz2 ]; then curl -O http://www.mpfr.org/mpfr-$version/mpfr-$version.tar.bz2 fi tar xjf mpfr-$version.tar.bz2 cd mpfr-$version # curl -O http://www.mpfr.org/mpfr-$version/allpatches # patch -N -Z -p1 < allpatches if $OPTION_32BIT; then mkdir build-i386 cd build-i386 ../configure --prefix=$DEPLOYDIR/i386 --with-gmp=$DEPLOYDIR/i386 CFLAGS="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch i386" LDFLAGS="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch i386" make install cd .. fi # 64-bit version mkdir build-x86_64 cd build-x86_64 ../configure --prefix=$DEPLOYDIR/x86_64 --with-gmp=$DEPLOYDIR/x86_64 CFLAGS="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch x86_64" LDFLAGS="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch x86_64" make install # merge cd $DEPLOYDIR if $OPTION_32BIT; then lipo -create i386/lib/libmpfr.dylib x86_64/lib/libmpfr.dylib -output lib/libmpfr.dylib else cp x86_64/lib/libmpfr.dylib lib/libmpfr.dylib fi install_name_tool -id $DEPLOYDIR/lib/libmpfr.dylib lib/libmpfr.dylib mkdir -p include cp x86_64/include/mpfr.h include/ cp x86_64/include/mpf2mpfr.h include/ } build_boost() { version=$1 bversion=`echo $version | tr "." "_"` echo "Building boost" $version "..." cd $BASEDIR/src rm -rf boost_$bversion if [ ! -f boost_$bversion.tar.bz2 ]; then curl -LO http://downloads.sourceforge.net/project/boost/boost/$version/boost_$bversion.tar.bz2 fi tar xjf boost_$bversion.tar.bz2 cd boost_$bversion # We only need the thread and program_options libraries ./bootstrap.sh --prefix=$DEPLOYDIR --with-libraries=thread,program_options,filesystem,chrono,system,regex if $OPTION_32BIT; then BOOST_EXTRA_FLAGS="-arch i386" fi if $OPTION_LLVM; then BOOST_TOOLSET="toolset=darwin-llvm" echo "using darwin : llvm : llvm-g++ ;" >> tools/build/v2/user-config.jam elif $OPTION_CLANG; then BOOST_TOOLSET="toolset=clang" echo "using clang ;" >> tools/build/v2/user-config.jam fi ./b2 -d+2 $BOOST_TOOLSET cflags="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch x86_64 $BOOST_EXTRA_FLAGS" linkflags="-mmacosx-version-min=$MAC_OSX_VERSION_MIN -arch x86_64 $BOOST_EXTRA_FLAGS" install install_name_tool -id $DEPLOYDIR/lib/libboost_thread.dylib $DEPLOYDIR/lib/libboost_thread.dylib install_name_tool -change libboost_system.dylib $DEPLOYDIR/lib/libboost_system.dylib $DEPLOYDIR/lib/libboost_thread.dylib install_name_tool -change libboost_chrono.dylib $DEPLOYDIR/lib/libboost_chrono.dylib $DEPLOYDIR/lib/libboost_thread.dylib install_name_tool -id $DEPLOYDIR/lib/libboost_program_options.dylib $DEPLOYDIR/lib/libboost_program_options.dylib install_name_tool -id $DEPLOYDIR/lib/libboost_filesystem.dylib $DEPLOYDIR/lib/libboost_filesystem.dylib install_name_tool -change libboost_system.dylib $DEPLOYDIR/lib/libboost_system.dylib $DEPLOYDIR/lib/libboost_filesystem.dylib install_name_tool -id $DEPLOYDIR/lib/libboost_system.dylib $DEPLOYDIR/lib/libboost_system.dylib install_name_tool -id $DEPLOYDIR/lib/libboost_regex.dylib $DEPLOYDIR/lib/libboost_regex.dylib } build_cgal() { version=$1 echo "Building CGAL" $version "..." cd $BASEDIR/src rm -rf CGAL-$version if [ ! -f CGAL-$version.tar.gz ]; then # 4.1 curl -O https://gforge.inria.fr/frs/download.php/31641/CGAL-$version.tar.gz # 4.1-beta1 curl -O https://gforge.inria.fr/frs/download.php/31348/CGAL-$version.tar.gz # 4.0.2 curl -O https://gforge.inria.fr/frs/download.php/31175/CGAL-$version.tar.gz # 4.0 curl -O https://gforge.inria.fr/frs/download.php/30387/CGAL-$version.tar.gz # 3.9 curl -O https://gforge.inria.fr/frs/download.php/29125/CGAL-$version.tar.gz # 3.8 curl -O https://gforge.inria.fr/frs/download.php/28500/CGAL-$version.tar.gz # 3.7 curl -O https://gforge.inria.fr/frs/download.php/27641/CGAL-$version.tar.gz fi tar xzf CGAL-$version.tar.gz cd CGAL-$version if $OPTION_32BIT; then CGAL_EXTRA_FLAGS=";i386" fi cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DGMP_INCLUDE_DIR=$DEPLOYDIR/include -DGMP_LIBRARIES=$DEPLOYDIR/lib/libgmp.dylib -DGMPXX_LIBRARIES=$DEPLOYDIR/lib/libgmpxx.dylib -DGMPXX_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_INCLUDE_DIR=$DEPLOYDIR/include -DMPFR_LIBRARIES=$DEPLOYDIR/lib/libmpfr.dylib -DWITH_CGAL_Qt3=OFF -DWITH_CGAL_Qt4=OFF -DWITH_CGAL_ImageIO=OFF -DBUILD_SHARED_LIBS=TRUE -DCMAKE_OSX_DEPLOYMENT_TARGET="$MAC_OSX_VERSION_MIN" -DCMAKE_OSX_ARCHITECTURES="x86_64$CGAL_EXTRA_FLAGS" -DBOOST_ROOT=$DEPLOYDIR -DBoost_USE_MULTITHREADED=false make -j4 make install install_name_tool -id $DEPLOYDIR/lib/libCGAL.dylib $DEPLOYDIR/lib/libCGAL.dylib install_name_tool -id $DEPLOYDIR/lib/libCGAL_Core.dylib $DEPLOYDIR/lib/libCGAL_Core.dylib install_name_tool -change $PWD/lib/libCGAL.9.dylib $DEPLOYDIR/lib/libCGAL.dylib $DEPLOYDIR/lib/libCGAL_Core.dylib } build_glew() { version=$1 echo "Building GLEW" $version "..." cd $BASEDIR/src rm -rf glew-$version if [ ! -f glew-$version.tgz ]; then curl -LO http://downloads.sourceforge.net/project/glew/glew/$version/glew-$version.tgz fi tar xzf glew-$version.tgz cd glew-$version mkdir -p $DEPLOYDIR/lib/pkgconfig if $OPTION_32BIT; then GLEW_EXTRA_FLAGS="-arch i386" fi make GLEW_DEST=$DEPLOYDIR CC=$CC CFLAGS.EXTRA="-no-cpp-precomp -dynamic -fno-common -mmacosx-version-min=$MAC_OSX_VERSION_MIN $GLEW_EXTRA_FLAGS -arch x86_64" LDFLAGS.EXTRA="-mmacosx-version-min=$MAC_OSX_VERSION_MIN $GLEW_EXTRA_FLAGS -arch x86_64" STRIP= install } build_opencsg() { version=$1 echo "Building OpenCSG" $version "..." cd $BASEDIR/src rm -rf OpenCSG-$version if [ ! -f OpenCSG-$version.tar.gz ]; then curl -O http://www.opencsg.org/OpenCSG-$version.tar.gz fi tar xzf OpenCSG-$version.tar.gz cd OpenCSG-$version patch -p1 < $OPENSCADDIR/patches/OpenCSG-$version-MacOSX-port.patch if $OPTION_32BIT; then OPENCSG_EXTRA_FLAGS="x86" fi OPENSCAD_LIBRARIES=$DEPLOYDIR qmake -r CONFIG+="x86_64 $OPENCSG_EXTRA_FLAGS" make install } build_eigen() { version=$1 echo "Building eigen" $version "..." cd $BASEDIR/src rm -rf eigen-$version EIGENDIR="none" if [ $version = "2.0.17" ]; then EIGENDIR=eigen-eigen-b23437e61a07; fi if [ $version = "3.1.2" ]; then EIGENDIR=eigen-eigen-5097c01bcdc4; fi if [ $EIGENDIR = "none" ]; then echo Unknown eigen version. Please edit script. exit 1 fi rm -rf ./$EIGENDIR if [ ! -f eigen-$version.tar.bz2 ]; then curl -LO http://bitbucket.org/eigen/eigen/get/$version.tar.bz2 mv $version.tar.bz2 eigen-$version.tar.bz2 fi tar xjf eigen-$version.tar.bz2 ln -s ./$EIGENDIR eigen-$version cd eigen-$version mkdir build cd build if $OPTION_32BIT; then EIGEN_EXTRA_FLAGS=";i386" fi cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DEIGEN_BUILD_LIB=ON -DBUILD_SHARED_LIBS=FALSE -DCMAKE_OSX_DEPLOYMENT_TARGET="$MAC_OSX_VERSION_MIN" -DCMAKE_OSX_ARCHITECTURES="x86_64$EIGEN_EXTRA_FLAGS" .. make -j4 make install } if [ ! -f $OPENSCADDIR/openscad.pro ]; then echo "Must be run from the OpenSCAD source root directory" exit 0 fi while getopts '6lc' c do case $c in 6) OPTION_32BIT=false;; l) OPTION_LLVM=true;; c) OPTION_CLANG=true;; esac done OSVERSION=`sw_vers -productVersion | cut -d. -f2` if [[ $OSVERSION -ge 7 ]]; then echo "Detected Lion or later" DETECTED_LION=true else echo "Detected Snow Leopard or earlier" fi USING_LLVM=false USING_GCC=false USING_CLANG=false if $OPTION_LLVM; then USING_LLCM=true elif $OPTION_GCC; then USING_GCC=true elif $OPTION_CLANG; then USING_CLANG=true elif $DETECTED_LION; then USING_GCC=true fi if $USING_LLVM; then echo "Using gcc LLVM compiler" export CC=llvm-gcc export CXX=llvm-g++ export QMAKESPEC=macx-llvm elif $USING_GCC; then echo "Using gcc compiler" export CC=gcc export CXX=g++ export CPP=cpp # Somehow, qmake in Qt-4.8.2 doesn't detect Lion's gcc and falls back into # project file mode unless manually given a QMAKESPEC export QMAKESPEC=macx-llvm elif $USING_CLANG; then echo "Using clang compiler" export CC=clang export CXX=clang++ export QMAKESPEC=unsupported/macx-clang fi echo "Using basedir:" $BASEDIR mkdir -p $SRCDIR $DEPLOYDIR build_qt 4.8.4 build_eigen 3.1.2 build_gmp 5.1.0 build_mpfr 3.1.1 build_boost 1.51.0 # NB! For CGAL, also update the actual download URL in the function build_cgal 4.1 build_glew 1.9.0 build_opencsg 1.3.2 openscad-2013.01+dfsg.orig/scripts/create-stl.sh0000755000175000017500000000043711516152336021030 0ustar chrysnchrysn#!/bin/sh if [ $# != 2 ]; then echo "Usage: $0 scad-file stl-file" exit 1 fi scadfile=$1 stlfile=$2 cmd="openscad" [ -x "./openscad" ] && cmd="./openscad" [ -x "./OpenSCAD.app/Contents/MacOS/OpenSCAD" ] && cmd="./OpenSCAD.app/Contents/MacOS/OpenSCAD" "$cmd" -s $stlfile $scadfile openscad-2013.01+dfsg.orig/scripts/batch-examples-stl.sh0000755000175000017500000000025511516152336022460 0ustar chrysnchrysn#!/bin/sh SCRIPTDIR=`dirname $0` mkdir -p output for f in examples/*.scad; do echo `basename $f .scad` $SCRIPTDIR/create-stl.sh $f output/`basename $f .scad`.stl done openscad-2013.01+dfsg.orig/scripts/setenv-unibuild.sh0000644000175000017500000000413412076022154022071 0ustar chrysnchrysn# setup environment variables for building OpenSCAD against custom built # dependency libraries. works on Linux/BSD. # # Please see the 'uni-build-dependencies.sh' file for usage information # setenv_common() { if [ ! $BASEDIR ]; then if [ -f openscad.pro ]; then # if in main openscad dir, put under $HOME BASEDIR=$HOME/openscad_deps else # otherwise, assume its being run 'out of tree'. treat it somewhat like # "configure" or "cmake", so you can build dependencies where u wish. echo "Warning: Not in OpenSCAD src dir... using current directory as base of build" BASEDIR=$PWD/openscad_deps fi fi DEPLOYDIR=$BASEDIR export BASEDIR export PATH=$BASEDIR/bin:$PATH export LD_LIBRARY_PATH=$DEPLOYDIR/lib:$DEPLOYDIR/lib64 export LD_RUN_PATH=$DEPLOYDIR/lib:$DEPLOYDIR/lib64 export OPENSCAD_LIBRARIES=$DEPLOYDIR export GLEWDIR=$DEPLOYDIR echo BASEDIR: $BASEDIR echo DEPLOYDIR: $DEPLOYDIR echo PATH modified echo LD_LIBRARY_PATH modified echo LD_RUN_PATH modified echo OPENSCAD_LIBRARIES modified echo GLEWDIR modified if [ "`command -v qmake-qt4`" ]; then echo "Please re-run qmake-qt4 and run 'make clean' if necessary" else echo "Please re-run qmake and run 'make clean' if necessary" fi } setenv_freebsd() { setenv_common QMAKESPEC=freebsd-g++ QTDIR=/usr/local/share/qt4 } setenv_netbsd() { setenv_common QMAKESPEC=netbsd-g++ QTDIR=/usr/pkg/qt4 PATH=/usr/pkg/qt4/bin:$PATH LD_LIBRARY_PATH=/usr/pkg/qt4/lib:/usr/X11R7/lib:$LD_LIBRARY_PATH export QMAKESPEC export QTDIR export PATH export LD_LIBRARY_PATH } setenv_linux_clang() { export CC=clang export CXX=clang++ export QMAKESPEC=unsupported/linux-clang echo CC has been modified: $CC echo CXX has been modified: $CXX echo QMAKESPEC has been modified: $QMAKESPEC } if [ "`uname | grep -i 'linux\|debian'`" ]; then setenv_common if [ "`echo $* | grep clang`" ]; then setenv_linux_clang fi elif [ "`uname | grep -i freebsd`" ]; then setenv_freebsd elif [ "`uname | grep -i netbsd`" ]; then setenv_netbsd else # guess setenv_common echo unknown system. guessed env variables. see 'setenv-unibuild.sh' fi openscad-2013.01+dfsg.orig/scripts/installer.nsi0000644000175000017500000000227212013171370021125 0ustar chrysnchrysn!include "mingw-file-association.nsh" Name "OpenSCAD" OutFile "openscad_setup.exe" InstallDir $PROGRAMFILES\OpenSCAD DirText "This will install OpenSCAD on your computer. Choose a directory" Section "install" SetOutPath $INSTDIR File openscad.exe File /r /x mingw-cross-env examples File /r /x mingw-cross-env libraries ${registerExtension} "$INSTDIR\openscad.exe" ".scad" "OpenSCAD_File" CreateShortCut $SMPROGRAMS\OpenSCAD.lnk $INSTDIR\openscad.exe WriteUninstaller $INSTDIR\Uninstall.exe WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenSCAD" "DisplayName" "OpenSCAD (remove only)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenSCAD" "UninstallString" "$INSTDIR\Uninstall.exe" SectionEnd Section "Uninstall" ${unregisterExtension} ".scad" "OpenSCAD_File" Delete $INSTDIR\Uninstall.exe Delete $INSTDIR\MyProg.exe Delete $SMPROGRAMS\OpenSCAD.lnk DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OpenSCAD" RMDir /r $INSTDIR\examples RMDir /r $INSTDIR\libraries\mcad Delete $INSTDIR\libraries\boxes.scad Delete $INSTDIR\libraries\shapes.scad RMDir $INSTDIR\libraries Delete $INSTDIR\openscad.exe RMDir $INSTDIR SectionEnd openscad-2013.01+dfsg.orig/scripts/mingw-file-association.nsh0000644000175000017500000001413712013171370023502 0ustar chrysnchrysn/* nsis.sourceforge.net COPYRIGHT Copyright (C) 1995-2009 Contributors Note the 'edit' page of the wiki at nsis.sourceforge.net specifically states the following: "All contributions sent to this wiki are generally considered to be in the zlib/libpng license (see License for details)." The NSIS 'license' link on the wiki states the following: "All NSIS source code, plug-ins, documentation, examples, header files and graphics, with the exception of the compression modules and where otherwise noted, are licensed under the zlib/libpng license." http://nsis.sourceforge.net/File_Assocation lists these authors: Author: Vytautas (talk, contrib) Author: intersol (talk, contrib) Author: chefkoch (talk, contrib) ZLIB/LIBPNG LICENSE ------------------- This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* _____________________________________________________________________________ File Association _____________________________________________________________________________ Based on code taken from http://nsis.sourceforge.net/File_Association Usage in script: 1. !include "FileAssociation.nsh" 2. [Section|Function] ${FileAssociationFunction} "Param1" "Param2" "..." $var [SectionEnd|FunctionEnd] FileAssociationFunction=[RegisterExtension|UnRegisterExtension] _____________________________________________________________________________ ${RegisterExtension} "[executable]" "[extension]" "[description]" "[executable]" ; executable which opens the file format ; "[extension]" ; extension, which represents the file format to open ; "[description]" ; description for the extension. This will be display in Windows Explorer. ; ${UnRegisterExtension} "[extension]" "[description]" "[extension]" ; extension, which represents the file format to open ; "[description]" ; description for the extension. This will be display in Windows Explorer. ; _____________________________________________________________________________ Macros _____________________________________________________________________________ Change log window verbosity (default: 3=no script) Example: !include "FileAssociation.nsh" !insertmacro RegisterExtension ${FileAssociation_VERBOSE} 4 # all verbosity !insertmacro UnRegisterExtension ${FileAssociation_VERBOSE} 3 # no script */ !ifndef FileAssociation_INCLUDED !define FileAssociation_INCLUDED !include Util.nsh !verbose push !verbose 3 !ifndef _FileAssociation_VERBOSE !define _FileAssociation_VERBOSE 3 !endif !verbose ${_FileAssociation_VERBOSE} !define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE` !verbose pop !macro FileAssociation_VERBOSE _VERBOSE !verbose push !verbose 3 !undef _FileAssociation_VERBOSE !define _FileAssociation_VERBOSE ${_VERBOSE} !verbose pop !macroend !macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION !verbose push !verbose ${_FileAssociation_VERBOSE} Push `${_DESCRIPTION}` Push `${_EXTENSION}` Push `${_EXECUTABLE}` ${CallArtificialFunction} RegisterExtension_ !verbose pop !macroend !macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION !verbose push !verbose ${_FileAssociation_VERBOSE} Push `${_EXTENSION}` Push `${_DESCRIPTION}` ${CallArtificialFunction} UnRegisterExtension_ !verbose pop !macroend !define RegisterExtension `!insertmacro RegisterExtensionCall` !define un.RegisterExtension `!insertmacro RegisterExtensionCall` !macro RegisterExtension !macroend !macro un.RegisterExtension !macroend !macro RegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R2 ;exe Exch Exch $R1 ;ext Exch Exch 2 Exch $R0 ;desc Exch 2 Push $0 Push $1 ReadRegStr $1 HKCR $R1 "" ; read current file association StrCmp "$1" "" NoBackup ; is it empty StrCmp "$1" "$R0" NoBackup ; is it our own WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value NoBackup: WriteRegStr HKCR $R1 "" "$R0" ; set our file association ReadRegStr $0 HKCR $R0 "" StrCmp $0 "" 0 Skip WriteRegStr HKCR "$R0" "" "$R0" WriteRegStr HKCR "$R0\shell" "" "open" WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" Skip: WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' Pop $1 Pop $0 Pop $R2 Pop $R1 Pop $R0 !verbose pop !macroend !define UnRegisterExtension `!insertmacro UnRegisterExtensionCall` !define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall` !macro UnRegisterExtension !macroend !macro un.UnRegisterExtension !macroend !macro UnRegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R1 ;desc Exch Exch $R0 ;ext Exch Push $0 Push $1 ReadRegStr $1 HKCR $R0 "" StrCmp $1 $R1 0 NoOwn ; only do this if we own it ReadRegStr $1 HKCR $R0 "backup_val" StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key DeleteRegKey HKCR $R0 Goto NoOwn Restore: WriteRegStr HKCR $R0 "" $1 DeleteRegValue HKCR $R0 "backup_val" DeleteRegKey HKCR $R1 ;Delete key with association name settings NoOwn: Pop $1 Pop $0 Pop $R1 Pop $R0 !verbose pop !macroend !endif # !FileAssociation_INCLUDED openscad-2013.01+dfsg.orig/scripts/openscad-linux0000755000175000017500000000027511714323427021306 0ustar chrysnchrysn#!/bin/bash cd "$( dirname "$( type -p $0 )" )" libdir=$PWD/../lib/openscad/ cd "$OLDPWD" export LD_LIBRARY_PATH="$libdir${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" exec $libdir/openscad "$@" openscad-2013.01+dfsg.orig/scripts/googlecode_upload.py0000755000175000017500000002560112076022154022452 0ustar chrysnchrysn#!/usr/bin/env python # Google Code binary package uploader # with Insturctions for uploading packages for OpenSCAD # # OpenSCAD Usage: # # 1. get a google account, get it added to the Google Code OpenSCAD project # 2. go to https://code.google.com/hosting/settings for username & password # ----- # # security note - # # it's not advisable to use a ~/.netrc file to store your password # keep your googlecode password secret # only upload from a secure machine # user's personal data can be at risk if your account # is compromised and a fake openscad were to be uploaded. # notify the OpenSCAD maintainer if your computer is stolen or # your google account is ever compromised. # ----- # 4. if you are making a Stable Release, check 'docs/release_checklist.txt' # 5. create an OpenSCAD package (linux dev snapshot: ./scripts/release-common.sh) # 6. Run this to do the upload: # export SUMMARY="Linux x86-64 Snapshot" # replace as appropriate # export PACKAGEFILE=openscad-2013.01.10.x86-64.tar.gz # replace as appropriate # python ./scripts/googlecode_upload.py -s '$SUMMARY' -p openscad $PACKAGEFILE # 7. It will ask for username. Use user.name@gmail.com (include the @ mail address) # 8. It will ask for password. Copy/paste the password from the https google code settings page above # Don't use the big bold password, use the 'plain font' password from the 'machine' line # 9. Wait.... (there is no progress meter). It should say 'success' eventually. # # The rest of this file is original from Google with slight modifications by the # OpenSCAD team. Modifications licensed under the same license as the # original code from google - the Apache Software License 2.0: # http://www.apache.org/licenses/LICENSE-2.0 # # Copyright 2006, 2007 Google Inc. All Rights Reserved. # Author: danderson@google.com (David Anderson) # # Script for uploading files to a Google Code project. # # This is intended to be both a useful script for people who want to # streamline project uploads and a reference implementation for # uploading files to Google Code projects. # # To upload a file to Google Code, you need to provide a path to the # file on your local machine, a small summary of what the file is, a # project name, and a valid account that is a member or owner of that # project. You can optionally provide a list of labels that apply to # the file. The file will be uploaded under the same name that it has # in your local filesystem (that is, the "basename" or last path # component). Run the script with '--help' to get the exact syntax # and available options. # # Note that the upload script requests that you enter your # googlecode.com password. This is NOT your Gmail account password! # This is the password you use on googlecode.com for committing to # Subversion and uploading files. You can find your password by going # to http://code.google.com/hosting/settings when logged in with your # Gmail account. If you have already committed to your project's # Subversion repository, the script will automatically retrieve your # credentials from there (unless disabled, see the output of '--help' # for details). # # If you are looking at this script as a reference for implementing # your own Google Code file uploader, then you should take a look at # the upload() function, which is the meat of the uploader. You # basically need to build a multipart/form-data POST request with the # right fields and send it to https://PROJECT.googlecode.com/files . # Authenticate the request using HTTP Basic authentication, as is # shown below. # # Licensed under the terms of the Apache Software License 2.0: # http://www.apache.org/licenses/LICENSE-2.0 # # Questions, comments, feature requests and patches are most welcome. # Please direct all of these to the Google Code users group: # http://groups.google.com/group/google-code-hosting """Google Code file uploader script. """ __author__ = 'danderson@google.com (David Anderson)' import httplib import os.path import optparse import getpass import base64 import sys def upload(file, project_name, user_name, password, summary, labels=None): """Upload a file to a Google Code project's file server. Args: file: The local path to the file. project_name: The name of your project on Google Code. user_name: Your Google account name. password: The googlecode.com password for your account. Note that this is NOT your global Google Account password! summary: A small description for the file. labels: an optional list of label strings with which to tag the file. Returns: a tuple: http_status: 201 if the upload succeeded, something else if an error occured. http_reason: The human-readable string associated with http_status file_url: If the upload succeeded, the URL of the file on Google Code, None otherwise. """ # The login is the user part of user@gmail.com. If the login provided # is in the full user@domain form, strip it down. if user_name.endswith('@gmail.com'): user_name = user_name[:user_name.index('@gmail.com')] form_fields = [('summary', summary)] if labels is not None: form_fields.extend([('label', l.strip()) for l in labels]) content_type, body = encode_upload_request(form_fields, file) upload_host = '%s.googlecode.com' % project_name upload_uri = '/files' auth_token = base64.b64encode('%s:%s'% (user_name, password)) headers = { 'Authorization': 'Basic %s' % auth_token, 'User-Agent': 'Googlecode.com uploader v0.9.4', 'Content-Type': content_type, } server = httplib.HTTPSConnection(upload_host) server.request('POST', upload_uri, body, headers) resp = server.getresponse() server.close() if resp.status == 201: location = resp.getheader('Location', None) else: location = None return resp.status, resp.reason, location def encode_upload_request(fields, file_path): """Encode the given fields and file into a multipart form body. fields is a sequence of (name, value) pairs. file is the path of the file to upload. The file will be uploaded to Google Code with the same file name. Returns: (content_type, body) ready for httplib.HTTP instance """ BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla' CRLF = '\r\n' body = [] # Add the metadata about the upload first for key, value in fields: body.extend( ['--' + BOUNDARY, 'Content-Disposition: form-data; name="%s"' % key, '', value, ]) # Now add the file itself file_name = os.path.basename(file_path) f = open(file_path, 'rb') file_content = f.read() f.close() body.extend( ['--' + BOUNDARY, 'Content-Disposition: form-data; name="filename"; filename="%s"' % file_name, # The upload server determines the mime-type, no need to set it. 'Content-Type: application/octet-stream', '', file_content, ]) # Finalize the form body body.extend(['--' + BOUNDARY + '--', '']) return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body) def upload_find_auth(file_path, project_name, summary, labels=None, user_name=None, password=None, tries=3): """Find credentials and upload a file to a Google Code project's file server. file_path, project_name, summary, and labels are passed as-is to upload. Args: file_path: The local path to the file. project_name: The name of your project on Google Code. summary: A small description for the file. labels: an optional list of label strings with which to tag the file. config_dir: Path to Subversion configuration directory, 'none', or None. user_name: Your Google account name. tries: How many attempts to make. """ if user_name is None or password is None: from netrc import netrc authenticators = None try: authenticators = netrc().authenticators("code.google.com") except: print "Error accessing netrc authenticator. Trying alternate method" if authenticators: if user_name is None: user_name = authenticators[0] if password is None: password = authenticators[2] while tries > 0: if user_name is None: # Read username if not specified or loaded from svn config, or on # subsequent tries. sys.stdout.write('Please enter your googlecode.com username: ') sys.stdout.flush() user_name = sys.stdin.readline().rstrip() if password is None: # Read password if not loaded from svn config, or on subsequent tries. print 'Please enter your googlecode.com password.' print '** Note that this is NOT your Gmail account password! **' print 'It is the password you use to access Subversion repositories,' print 'and can be found here: http://code.google.com/hosting/settings' password = getpass.getpass() status, reason, url = upload(file_path, project_name, user_name, password, summary, labels) # Returns 403 Forbidden instead of 401 Unauthorized for bad # credentials as of 2007-07-17. if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]: # Rest for another try. user_name = password = None tries = tries - 1 else: # We're done. break return status, reason, url def main(): parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY ' '-p PROJECT [options] FILE') parser.add_option('-s', '--summary', dest='summary', help='Short description of the file') parser.add_option('-p', '--project', dest='project', help='Google Code project name') parser.add_option('-u', '--user', dest='user', help='Your Google Code username') parser.add_option('-w', '--password', dest='password', help='Your Google Code password') parser.add_option('-l', '--labels', dest='labels', help='An optional list of comma-separated labels to attach ' 'to the file') options, args = parser.parse_args() if not options.summary: parser.error('File summary is missing.') elif not options.project: parser.error('Project name is missing.') elif len(args) < 1: parser.error('File to upload not provided.') elif len(args) > 1: parser.error('Only one file may be specified.') file_path = args[0] if options.labels: labels = options.labels.split(',') else: labels = None status, reason, url = upload_find_auth(file_path, options.project, options.summary, labels, options.user, options.password) if url: print 'The file was uploaded successfully.' print 'URL: %s' % url return 0 else: print 'An error occurred. Your file was not uploaded.' print 'Google Code upload server said: %s (%s)' % (reason, status) return 1 if __name__ == '__main__': sys.exit(main()) openscad-2013.01+dfsg.orig/scripts/check-dependencies.sh0000755000175000017500000003300212076022154022454 0ustar chrysnchrysn# Parse the minimum versions of dependencies from README.md, and compare # with what is found on the system. Print results. # # usage # check-dependencies.sh # check version of all dependencies # check-dependencies.sh debug # debug this script # # output # a table displaying the minimum version from README, the found version, # and whether it is OK or not. # # design # stage 1. search by parsing header files and/or binary output (_sysver) # stage 2. search with pkg-config # # Code style is portability and simplicity. Plain sed, awk, grep, sh. # Functions return strings under $function_name_result variable. # tmp variables are named funcname_abbreviated_tmp. # Local vars are not used. # # todo # testing of non-bash shells # if /usr/ and /usr/local/ on linux both hit, throw a warning # print location found, how found??? # look at pkgconfig --exists & --modversion # deal with deps like GLEW that don't have proper version strings? # DEBUG= debug() { if [ $DEBUG ]; then echo check-dependencies.sh: $* ; fi } eigen_sysver() { debug eigen eigpath= eig3path=$1/include/eigen3/Eigen/src/Core/util/Macros.h eig2path=$1/include/eigen2/Eigen/src/Core/util/Macros.h if [ -e $eig3path ]; then eigpath=$eig3path; fi if [ -e $eig2path ]; then eigpath=$eig2path; fi debug $eig2path if [ ! $eigpath ]; then return; fi eswrld=`grep "define *EIGEN_WORLD_VERSION *[0-9]*" $eigpath | awk '{print $3}'` esmaj=`grep "define *EIGEN_MAJOR_VERSION *[0-9]*" $eigpath | awk '{print $3}'` esmin=`grep "define *EIGEN_MINOR_VERSION *[0-9]*" $eigpath | awk '{print $3}'` eigen_sysver_result="$eswrld.$esmaj.$esmin" } opencsg_sysver() { debug opencsg_sysver if [ ! -e $1/include/opencsg.h ]; then return; fi ocsgver=`grep "define *OPENCSG_VERSION_STRING *[0-9x]*" $1/include/opencsg.h` ocsgver=`echo $ocsgver | awk '{print $4}' | sed s/'"'//g | sed s/[^1-9.]//g` opencsg_sysver_result=$ocsgver } cgal_sysver() { cgalpath=$1/include/CGAL/version.h if [ ! -e $cgalpath ]; then return; fi cgal_sysver_result=`grep "define *CGAL_VERSION *[0-9.]*" $cgalpath | awk '{print $3}'` } boost_sysver() { boostpath=$1/include/boost/version.hpp if [ ! -e $boostpath ]; then return; fi bsver=`grep 'define *BOOST_LIB_VERSION *[0-9_"]*' $boostpath | awk '{print $3}'` bsver=`echo $bsver | sed s/'"'//g | sed s/'_'/'.'/g` boost_sysver_result=$bsver } mpfr_sysver() { mpfrpath=$1/include/mpfr.h if [ ! -e $mpfrpath ]; then return; fi mpfrsver=`grep 'define *MPFR_VERSION_STRING *' $mpfrpath | awk '{print $3}'` mpfrsver=`echo $mpfrsver | sed s/"-.*"// | sed s/'"'//g` mpfr_sysver_result=$mpfrsver } gmp_sysver() { # on some systems you have VERSION in gmp-$arch.h not gmp.h. use gmp*.h if [ ! -e $1/include ]; then return; fi gmppaths=`ls $1/include | grep ^gmp` if [ ! "$gmppaths" ]; then return; fi for gmpfile in $gmppaths; do gmppath=$1/include/$gmpfile if [ "`grep __GNU_MP_VERSION $gmppath`" ]; then gmpmaj=`grep "define *__GNU_MP_VERSION *[0-9]*" $gmppath | awk '{print $3}'` gmpmin=`grep "define *__GNU_MP_VERSION_MINOR *[0-9]*" $gmppath | awk '{print $3}'` gmppat=`grep "define *__GNU_MP_VERSION_PATCHLEVEL *[0-9]*" $gmppath | awk '{print $3}'` fi done gmp_sysver_result="$gmpmaj.$gmpmin.$gmppat" } qt4_sysver() { qt4path=$1/include/qt4/QtCore/qglobal.h if [ ! -e $qt4path ]; then qt4path=$1/include/QtCore/qglobal.h fi if [ ! -e $qt4path ]; then # netbsd qt4path=$1/qt4/include/QtCore/qglobal.h fi if [ ! -e $qt4path ]; then return; fi qt4ver=`grep 'define *QT_VERSION_STR *' $qt4path | awk '{print $3}'` qt4ver=`echo $qt4ver | sed s/'"'//g` qt4_sysver_result=$qt4ver } glew_sysver() { glewh=$1/include/GL/glew.h if [ -e $glewh ]; then # glew has no traditional version number in it's headers # so we either test for what we need and 'guess', or assign it to 0.0 # the resulting number is a 'lower bound', not exactly what is installed if [ "`grep __GLEW_VERSION_4_2 $glewh`" ]; then glew_sysver_result=1.7.0 fi if [ ! $glew_sysver_result ]; then if [ "`grep __GLEW_ARB_occlusion_query2 $glewh`" ]; then glew_sysver_result=1.5.4 fi fi if [ ! $glew_sysver_result ]; then glew_sysver_result=0.0 fi fi } imagemagick_sysver() { if [ ! -x $1/bin/convert ]; then return; fi imver=`$1/bin/convert --version | grep -i version` imagemagick_sysver_result=`echo $imver | sed s/"[^0-9. ]"/" "/g | awk '{print $1}'` } flex_sysver() { flexbin=$1/bin/flex if [ -x $1/bin/gflex ]; then flexbin=$1/bin/gflex; fi # openbsd if [ ! -x $flexbin ]; then return ; fi flex_sysver_result=`$flexbin --version | sed s/"[^0-9.]"/" "/g` } bison_sysver() { if [ ! -x $1/bin/bison ]; then return ; fi bison_sysver_result=`$1/bin/bison --version | grep bison | sed s/"[^0-9.]"/" "/g` } gcc_sysver() { bingcc=$1/bin/g++ if [ ! -x $1/bin/g++ ]; then if [ "`command -v g++`" ]; then # fallback to $PATH bingcc=g++; fi fi debug using bingcc: $bingcc if [ ! -x $bingcc ]; then return; fi if [ ! "`$bingcc --version`" ]; then return; fi gccver=`$bingcc --version| grep -i g++ | awk -F "(" ' { print $2 } '` debug g++ output1: $gccver gccver=`echo $gccver | awk -F ")" ' { print $2 } '` debug g++ output2: $gccver gccver=`echo $gccver | awk ' { print $1 } '` debug g++ output3: $gccver gcc_sysver_result=$gccver } git_sysver() { if [ ! -x $1/bin/git ]; then return ; fi git_sysver_result=`$1/bin/git --version | grep git | sed s/"[^0-9.]"/" "/g` } curl_sysver() { if [ ! -x $1/bin/curl ]; then return; fi curl_sysver_result=`$1/bin/curl --version | grep curl | sed s/"[^0-9. ]"/" "/g | awk '{print $1}'` } cmake_sysver() { if [ ! -x $1/bin/cmake ]; then return ; fi cmake_sysver_result=`$1/bin/cmake --version | grep cmake | sed s/"[^0-9.]"/" "/g | awk '{ print $1 }'` } make_sysver() { make_sysver_tmp= binmake=$1/bin/make if [ -x $1/bin/gmake ]; then binmake=$1/bin/gmake ;fi if [ ! -x $binmake ]; then return ;fi make_sysver_tmp=`$binmake --version 2>&1` debug finding gnu make: raw make response: $make_sysver_tmp if [ ! "`echo $make_sysver_tmp | grep -i gnu`" ]; then return; fi make_sysver_tmp=`$binmake --version 2>&1 | grep -i 'gnu make' | sed s/"[^0-9.]"/" "/g` if [ "`echo $make_sysver_tmp | grep [0-9]`" ]; then make_sysver_result=$make_sysver_tmp fi } bash_sysver() { if [ -x /bin/bash ]; then binbash=/bin/bash ;fi if [ -x /usr/bin/bash ]; then binbash=/usr/bin/bash ;fi if [ -x $1/bin/bash ]; then binbash=$1/bin/bash ;fi if [ ! -x $binbash ]; then return; fi bash_sysver_result=`$binbash --version | grep bash | sed s/"[^0-9. ]"/" "/g|awk '{print $1}'` } python_sysver() { if [ ! -x $1/bin/python ]; then return; fi python_sysver_result=`$1/bin/python --version 2>&1 | awk '{print $2}'` } pkg_config_search() { debug pkg_config_search $* pkg_config_search_result= pcstmp= if [ ! $1 ]; then return; fi pkgname=$1 pkg-config --exists $pkgname 2>&1 if [ $? = 0 ]; then pkg_config_search_result=`pkg-config --modversion $pkgname` else debug pkg_config_search failed on $*, result of run was: $pcstmp fi } get_minversion_from_readme() { if [ -e README.md ]; then READFILE=README.md; fi if [ -e ../README.md ]; then READFILE=../README.md; fi if [ ! $READFILE ]; then if [ "`command -v dirname`" ]; then READFILE=`dirname $0`/../README.md fi fi if [ ! $READFILE ]; then echo "cannot find README.md"; exit 1; fi debug get_minversion_from_readme $* if [ ! $1 ]; then return; fi depname=$1 local grv_tmp= debug $depname # example--> * [CGAL (3.6 - 3.9)] (www.cgal.org) becomes 3.6 # steps: eliminate *, find left (, find -, make 'x' into 0, delete junk grv_tmp=`grep -i ".$depname.*([0-9]" $READFILE | sed s/"*"//` debug $grv_tmp grv_tmp=`echo $grv_tmp | awk -F"(" '{print $2}'` debug $grv_tmp grv_tmp=`echo $grv_tmp | awk -F"-" '{print $1}'` debug $grv_tmp grv_tmp=`echo $grv_tmp | sed s/"x"/"0"/g` debug $grv_tmp grv_tmp=`echo $grv_tmp | sed s/"[^0-9.]"//g` debug $grv_tmp get_minversion_from_readme_result=$grv_tmp } find_min_version() { find_min_version_result= fmvtmp= if [ ! $1 ] ; then return; fi fmvdep=$1 get_minversion_from_readme $fmvdep fmvtmp=$get_minversion_from_readme_result # items not included in README.md if [ $fmvdep = "git" ]; then fmvtmp=1.5 ; fi if [ $fmvdep = "curl" ]; then fmvtmp=6 ; fi if [ $fmvdep = "make" ]; then fmvtmp=3 ; fi if [ $fmvdep = "python" ]; then fmvtmp=2 ; fi find_min_version_result=$fmvtmp } vers_to_int() { # change x.y.z.p into an integer that can be compared using -lt or -gt # 1.2.3.4 into 1020304 # 1.11.0.12 into 1110012 # 2011.2.3 into 20110020300 # it will work as long as the resulting int is less than 2.147 billion # and y z and p are less than 99 vers_to_int_result= if [ ! $1 ] ; then return ; fi vtoi_ver=$1 vtoi_test=`echo $vtoi_ver | sed s/"[^0-9.]"//g` debug vers_to_int $* :: vtoi_ver: $vtoi_ver vtoi_test: $vtoi_test if [ ! "$vtoi_test" = "$vtoi_ver" ]; then debug failure in version-to-integer conversion. debug '"'$vtoi_ver'"' has letters, etc in it. setting to 0 vtoi_ver="0" fi vers_to_int_result=`echo $vtoi_ver | awk -F. '{print $1*1000000+$2*10000+$3*100+$4}'` vtoi_ver= vtoi_test= } version_less_than_or_equal() { if [ ! $1 ]; then return; fi if [ ! $2 ]; then return; fi v1=$1 v2=$2 vers_to_int $v1 v1int=$vers_to_int_result vers_to_int $v2 v2int=$vers_to_int_result debug "v1, v2, v1int, v2int" , $v1, $v2, $v1int, $v2int if [ $v1int -le $v2int ]; then debug "v1 <= v2" return 0 else debug "v1 > v2" return 1 fi v1= v2= v1int= v2int= } compare_version() { debug compare_version $* compare_version_result="NotOK" if [ ! $1 ] ; then return; fi if [ ! $2 ] ; then return; fi cvminver=$1 cvinstver=$2 cvtmp= version_less_than_or_equal $cvminver $cvinstver if [ $? = 0 ]; then cvtmp="OK" else cvtmp="NotOK" fi compare_version_result=$cvtmp cvtmp= } pretty_print() { # there are four columns, passed as $1 $2 $3 and $4 # 1 = name of dependency # 2 = version found in README # 3 = version found on system # 4 = whether it is OK or not debug pretty_print $* brightred="\033[40;31m" red="\033[40;31m" brown="\033[40;33m" yellow="\033[40;33m" white="\033[40;37m" purple="\033[40;35m" green="\033[40;32m" cyan="\033[40;36m" gray="\033[40;37m" nocolor="\033[0m" ppstr="%s%-12s" pp_format='{printf("'$ppstr$ppstr$ppstr$ppstr$nocolor'\n",$1,$2,$3,$4,$5,$6,$7,$8)}' pp_title="$gray depname $gray minimum $gray found $gray OKness" if [ $1 ]; then pp_depname=$1; fi if [ $pp_depname = "title" ]; then echo -e $pp_title | awk $pp_format return ; fi if [ $2 ]; then pp_minver=$2; else pp_minver="unknown"; fi if [ $3 ]; then pp_foundver=$3; else pp_foundver="unknown"; fi if [ $4 ]; then pp_okness=$4; else pp_okness="NotOK"; fi if [ $pp_okness = "NotOK" ]; then pp_foundcolor=$purple; pp_cmpcolor=$purple; else pp_foundcolor=$gray; pp_cmpcolor=$green; fi echo -e $cyan $pp_depname $gray $pp_minver $pp_foundcolor $pp_foundver $pp_cmpcolor $pp_okness | awk $pp_format pp_depname= pp_minver= pp_foundver= pp_okness= } find_installed_version() { debug find_installed_version $* find_installed_version_result=unknown fsv_tmp= depname=$1 # try to find/parse headers and/or binary output if [ ! $fsv_tmp ]; then for syspath in "/opt" "/usr/pkg" "/usr" "/usr/local" $OPENSCAD_LIBRARIES; do if [ -e $syspath ]; then debug $depname"_sysver" $syspath eval $depname"_sysver" $syspath fsv_tmp=`eval echo "$"$depname"_sysver_result"` fi done fi # use pkg-config to search if [ ! $fsv_tmp ]; then if [ "`command -v pkg-config`" ]; then debug plain search failed. trying pkg_config... pkg_config_search $depname fsv_tmp=$pkg_config_search_result fi fi if [ $fsv_tmp ]; then find_installed_version_result=$fsv_tmp else debug all searches failed. unknown version. fi } check_old_local() { warnon= if [ "`uname | grep -i linux`" ]; then header_list="opencsg.h CGAL boost GL/glew.h gmp.h mpfr.h eigen2 eigen3" liblist="libboost libopencsg libCGAL libglew" for i in $header_list $liblist; do if [ -e /usr/local/include/$i ]; then echo "Warning: you have a copy of "$i" under /usr/local/include" warnon=1 fi if [ -e /usr/local/lib/$i.so ]; then echo "Warning: you have a copy of "$i" under /usr/local/lib" warnon=1 fi done fi if [ $warnon ]; then echo "Please verify these local copies don't conflict with the system" fi } check_misc() { if [ "`uname -a|grep -i netbsd`" ]; then echo "NetBSD: Please manually verify the X Sets have been installed" fi } checkargs() { for i in $*; do if [ $i = "debug" ]; then DEBUG=1 ; fi done } main() { deps="qt4 cgal gmp mpfr boost opencsg glew eigen gcc bison flex make" #deps="$deps curl git" # not technically necessary for build #deps="$deps python cmake imagemagick" # only needed for tests pretty_print title for depname in $deps; do debug "processing $dep" find_installed_version $depname dep_sysver=$find_installed_version_result find_min_version $depname dep_minver=$find_min_version_result compare_version $dep_minver $dep_sysver dep_compare=$compare_version_result pretty_print $depname $dep_minver $dep_sysver $dep_compare done check_old_local check_misc } checkargs $* main exit 0 openscad-2013.01+dfsg.orig/scripts/publish-macosx.sh0000755000175000017500000000202212076054275021720 0ustar chrysnchrysn#!/bin/sh # NB! To build a release build, the VERSION environment variable needs to be set. # See doc/release-checklist.txt if test -z "$VERSION"; then VERSION=`date "+%Y.%m.%d"` COMMIT=-c SNAPSHOT=true fi # Turn off ccache, just for safety PATH=${PATH//\/opt\/local\/libexec\/ccache:} # This is the same location as DEPLOYDIR in macosx-build-dependencies.sh export OPENSCAD_LIBRARIES=$PWD/../libraries/install # Make sure that the correct Qt tools are used export PATH=$OPENSCAD_LIBRARIES/bin:$PATH `dirname $0`/release-common.sh -v $VERSION $COMMIT if [[ $? != 0 ]]; then exit 1 fi echo "Sanity check of the app bundle..." `dirname $0`/macosx-sanity-check.py OpenSCAD.app/Contents/MacOS/OpenSCAD if [[ $? != 0 ]]; then exit 1 fi echo "Uploading..." LABELS=OpSys-OSX,Type-Executable if ! $SNAPSHOT; then LABELS=$LABELS,Featured; fi `dirname $0`/googlecode_upload.py -s 'Mac OS X Snapshot' -p openscad OpenSCAD-$VERSION.dmg -l $LABELS # Update snapshot filename on wab page `dirname $0`/update-web.sh OpenSCAD-$VERSION.dmg openscad-2013.01+dfsg.orig/scripts/macosx-sanity-check.py0000755000175000017500000001071512076013461022652 0ustar chrysnchrysn#!/usr/bin/env python # # This is be used to verify that all the dependant libraries of a Mac OS X executable # are present and that they are backwards compatible with at least 10.5. # Run with an executable as parameter # Will return 0 if the executable an all libraries are OK # Returns != 0 and prints some textural description on error # # Author: Marius Kintel # # This script lives here: # https://github.com/kintel/MacOSX-tools # import sys import os import subprocess import re DEBUG = False def usage(): print >> sys.stderr, "Usage: " + sys.argv[0] + " " sys.exit(1) # Try to find the given library by searching in the typical locations # Returns the full path to the library or None if the library is not found. def lookup_library(file): found = None if not re.match("/", file): if re.search("@executable_path", file): abs = re.sub("^@executable_path", executable_path, file) if os.path.exists(abs): found = abs if DEBUG: print "Lib in @executable_path found: " + found elif re.search("\.app/", file): found = file if DEBUG: print "App found: " + found elif re.search("\.framework/", file): found = os.path.join("/Library/Frameworks", file) if DEBUG: print "Framework found: " + found else: for path in os.getenv("DYLD_LIBRARY_PATH").split(':'): abs = os.path.join(path, file) if os.path.exists(abs): found = abs if DEBUG: print "Library found: " + found else: found = file return found # Returns a list of dependent libraries, excluding system libs def find_dependencies(file): libs = [] args = ["otool", "-L", file] if DEBUG: print "Executing " + " ".join(args) p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output,err = p.communicate() if p.returncode != 0: print "Failed with return code " + str(p.returncode) + ":" print err return None deps = output.split('\n') for dep in deps: # print dep dep = re.sub(".*:$", "", dep) # Take away header line dep = re.sub("^\t", "", dep) # Remove initial tabs dep = re.sub(" \(.*\)$", "", dep) # Remove trailing parentheses if len(dep) > 0 and not re.search("/System/Library", dep) and not re.search("/usr/lib", dep): libs.append(dep) return libs def validate_lib(lib): p = subprocess.Popen(["otool", "-l", lib], stdout=subprocess.PIPE) output = p.communicate()[0] if p.returncode != 0: return False if re.search("LC_DYLD_INFO_ONLY", output): print "Error: Requires Snow Leopard: " + lib return False p = subprocess.Popen(["lipo", lib, "-verify_arch", "x86_64"], stdout=subprocess.PIPE) output = p.communicate()[0] if p.returncode != 0: print "Error: x86_64 architecture not supported: " + lib return False p = subprocess.Popen(["lipo", lib, "-verify_arch", "i386"], stdout=subprocess.PIPE) output = p.communicate()[0] if p.returncode != 0: print "Error: i386 architecture not supported: " + lib return False return True if __name__ == '__main__': error = False if len(sys.argv) != 2: usage() executable = sys.argv[1] if DEBUG: print "Processing " + executable executable_path = os.path.dirname(executable) # processed is a dict {libname : [parents]} - each parent is dependant on libname processed = {} pending = [executable] processed[executable] = [] while len(pending) > 0: dep = pending.pop() if DEBUG: print "Evaluating " + dep deps = find_dependencies(dep) assert(deps) for d in deps: absfile = lookup_library(d) if absfile == None: print "Not found: " + d print " ..required by " + str(processed[dep]) error = True continue if absfile in processed: processed[absfile].append(dep) else: processed[absfile] = [dep] if DEBUG: print "Pending: " + absfile pending.append(absfile) for dep in processed: if DEBUG: print "Validating: " + dep # print " " + str(processed[dep]) if not validate_lib(dep): print "..required by " + str(processed[dep]) error = True if error: sys.exit(1) else: sys.exit(0) openscad-2013.01+dfsg.orig/scripts/uni-get-dependencies.sh0000755000175000017500000000475612076022154022765 0ustar chrysnchrysn# auto-install dependency packages using the systems package manager. # after running this, run ./script/check-dependencies.sh. see README.md # # this assumes you have sudo installed or are running as root. # get_fedora_deps() { sudo yum install qt-devel bison flex eigen2-devel \ boost-devel mpfr-devel gmp-devel glew-devel CGAL-devel gcc pkgconfig git } get_altlinux_deps() { for i in boost-devel boost-filesystem-devel gcc4.5 gcc4.5-c++ boost-program_options-devel \ boost-thread-devel boost-system-devel boost-regex-devel eigen2 libmpfr libgmp libgmp_cxx-devel qt4-devel libcgal-devel git-core \ libglew-devel flex bison; do sudo apt-get install $i; done } get_freebsd_deps() { pkg_add -r bison boost-libs cmake git bash eigen2 flex gmake gmp mpfr \ xorg libGLU libXmu libXi xorg-vfbserver glew \ qt4-corelib qt4-gui qt4-moc qt4-opengl qt4-qmake qt4-rcc qt4-uic \ opencsg cgal } get_netbsd_deps() { sudo pkgin install bison boost cmake git bash eigen flex gmake gmp mpfr \ qt4 glew cgal opencsg modular-xorg } get_opensuse_deps() { sudo zypper install libeigen2-devel mpfr-devel gmp-devel boost-devel \ libqt4-devel glew-devel cmake git bison flex cgal-devel opencsg-devel } get_mageia_deps() { sudo urpmi ctags sudo urpmi task-c-devel task-c++-devel libqt4-devel libgmp-devel \ libmpfr-devel libboost-devel eigen3-devel libglew-devel bison flex \ cmake imagemagick python curl git } get_debian_deps() { for pkg in build-essential libqt4-dev libqt4-opengl-dev \ libxmu-dev cmake bison flex git-core libboost-all-dev \ libXi-dev libmpfr-dev libboost-dev libglew-dev libeigen2-dev \ libeigen3-dev libcgal-dev libopencsg-dev libgmp3-dev libgmp-dev; do sudo apt-get -y install $pkg; done } unknown() { echo "Unknown system type. Please install the dependency packages listed" echo "in README.md using your system's package manager." } if [ -e /etc/issue ]; then if [ "`grep -i ubuntu /etc/issue`" ]; then get_debian_deps elif [ "`grep -i debian /etc/issue`" ]; then get_debian_deps elif [ "`grep -i suse /etc/issue`" ]; then get_opensuse_deps elif [ "`grep -i fedora /etc/issue`" ]; then get_fedora_deps elif [ "`grep -i red.hat /etc/issue`" ]; then get_fedora_deps elif [ "`grep -i mageia /etc/issue`" ]; then get_mageia_deps elif [ "`command -v rpm`" ]; then if [ "`rpm -qa | grep altlinux`" ]; then get_altlinux_deps fi fi elif [ "`uname | grep -i freebsd `" ]; then get_freebsd_deps elif [ "`uname | grep -i netbsd`" ]; then get_netbsd_deps else unknown fi openscad-2013.01+dfsg.orig/scripts/setenv-mingw-xbuild.sh0000644000175000017500000000156112013171370022661 0ustar chrysnchrysn#!/bin/sh -e # # set environment variables for mingw/mxe cross-build # # Usage: source ./scripts/setenv-mingw-xbuild.sh # # Prerequisites: # # Please see http://mxe.cc/#requirements # # Also see http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X # export OPENSCADDIR=$PWD if [ ! $BASEDIR ]; then export BASEDIR=$HOME/openscad_deps fi if [ ! $DEPLOYDIR ]; then export DEPLOYDIR=$OPENSCADDIR/mingw32 fi if [ ! $MXEDIR ]; then export MXEDIR=$BASEDIR/mxe fi export PATH=$MXEDIR/usr/bin:$PATH echo BASEDIR: $BASEDIR echo MXEDIR: $MXEDIR echo DEPLOYDIR: $DEPLOYDIR echo PATH modified with $MXEDIR/usr/bin if [ ! -e $DEPLOYDIR ]; then mkdir -p $DEPLOYDIR fi echo linking $MXEDIR/usr/i686-pc-mingw32/ to $DEPLOYDIR/mingw-cross-env rm -f $DEPLOYDIR/mingw-cross-env ln -s $MXEDIR/usr/i686-pc-mingw32/ $DEPLOYDIR/mingw-cross-env openscad-2013.01+dfsg.orig/version.pri0000644000175000017500000000446112044064332017134 0ustar chrysnchrysn# get VERSION from system date isEmpty(VERSION) { win32-msvc*:!mingw-cross-env { # # Windows XP date command only has one argument, /t # and it can print the date in various localized formats. # This code will detect MM/DD/YYYY, YYYY/MM/DD, and DD/MM/YYYY # SYSDATE = $$system(date /t) SYSDATE = $$replace(SYSDATE,"/",".") SYSDATE ~= s/[A-Za-z]*// # remove name of day DATE_SPLIT=$$split(SYSDATE, ".") DATE_X=$$member(DATE_SPLIT, 0) DATE_Y=$$member(DATE_SPLIT, 1) DATE_Z=$$member(DATE_SPLIT, 2) TEST1=$$find(DATE_X, [0-9]{4} ) TEST2=$$find(DATE_Z, [0-9]{4} ) QDATE = $$_DATE_ QDATE_SPLIT = $$split(QDATE) QDAY = $$member(QDATE_SPLIT,2) !isEmpty(TEST1) { contains( QDAY, $$DATE_Z ) { # message("Assuming YYYY/MM/DD format") VERSION_YEAR = $$DATE_X VERSION_MONTH = $$DATE_Y VERSION_DAY = $$DATE_Z } } else { !isEmpty(TEST2) { contains( DATE_X, $$QDAY ) { # message("Assuming DD/MM/YYYY format" $$DATE_X $$DATE_Y $$DATE_Z ) VERSION_DAY = $$DATE_X VERSION_MONTH = $$DATE_Y VERSION_YEAR = $$DATE_Z } else { # message("Assuming MM/DD/YYYY format" $$DATE_X $$DATE_Y $$DATE_Z ) VERSION_MONTH = $$DATE_X VERSION_DAY = $$DATE_Y VERSION_YEAR = $$DATE_Z } } else { # test1 and test2 both empty error("Couldn't parse Windows date. please run 'qmake VERSION=YYYY.MM.DD' with todays date") } } # isEmpty(TEST1) VERSION = $$VERSION_YEAR"."$$VERSION_MONTH"."$$VERSION_DAY # message("YMD Version:" $$VERSION) } else { # Unix/Mac VERSION = $$system(date "+%Y.%m.%d") } } VERSION_SPLIT=$$split(VERSION, ".") VERSION_YEAR=$$member(VERSION_SPLIT, 0) VERSION_MONTH=$$member(VERSION_SPLIT, 1) VERSION_DAY=$$member(VERSION_SPLIT, 2) # Fix for problem with integers with leading zeros # being interpreted by C++ as octals. Now they're doubles. VERSION_YEAR=$${VERSION_YEAR}.0 VERSION_MONTH=$${VERSION_MONTH}.0 VERSION_DAY=$${VERSION_DAY}.0 DEFINES += OPENSCAD_VERSION=$$VERSION OPENSCAD_YEAR=$$VERSION_YEAR OPENSCAD_MONTH=$$VERSION_MONTH !isEmpty(VERSION_DAY): DEFINES += OPENSCAD_DAY=$$VERSION_DAY !isEmpty(OPENSCAD_COMMIT) { DEFINES += OPENSCAD_COMMIT=$$OPENSCAD_COMMIT } openscad-2013.01+dfsg.orig/valgrind.supp0000644000175000017500000000201511664324777017466 0ustar chrysnchrysn { Conditional jump or move depends on uninitialised value(s) in Nvidia GL driver Memcheck:Cond obj:/usr/lib/libGLcore.so.190.29 } { Use of uninitialised value of size 4 in Nvidia GL driver Memcheck:Value4 obj:/usr/lib/libGLcore.so.190.29 } { Memcheck:Addr4 obj:/lib/ld-2.7.so obj:/lib/libc-2.7.so obj:/lib/ld-2.7.so obj:/lib/libc-2.7.so fun:__libc_dlopen_mode fun:__nss_lookup_function obj:/lib/libc-2.7.so fun:__nss_passwd_lookup fun:getpwuid_r fun:_ZL22sm_performSaveYourselfP22QSessionManagerPrivate fun:_ZL23sm_saveYourselfCallbackP8_SmcConnPviiii fun:_SmcProcessMessage } { Memcheck:Free fun:free obj:/lib/libc-2.7.so obj:/lib/libc-2.7.so fun:_vgnU_freeres fun:exit fun:(below main) } { Qt misc leaks Memcheck:Leak fun:calloc ... fun:_Z7qt_initP19QApplicationPrivatei fun:_ZN19QApplicationPrivate9constructEv fun:_ZN12QApplicationC2ERiPPcbi fun:main } openscad-2013.01+dfsg.orig/doc/0000755000175000017500000000000012110740366015475 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/doc/OpenSCAD-csg.graffle0000644000175000017500000000514611640436732021147 0ustar chrysnchrysn][W۸~‡y9#2+JP`g,a+Nm)N⫒X~'ӾhK{w߅"g^v>ԍwsxuq$\'$IKح7ōaP8=iwZFqt+m4&hCF6.rwJ M]ZM\z9W۱Nm7-|ǧ'5د4`5fgYhݎ-*.y bj{! hi E9s8@S1LQR){Yqc7!WH1n[–`ט`292S[z`$ރ7xHgMr-z7`JwC:}0ڰ01u{,ZU\YLY9D,KշV҄ B/X!~F3?X|C'. Px/G>hp[!HJaP #esyvEa8yNOI#1#;e^`zr&J4dKsɅOJ7z޹$?dP) rt&w;N8 fѼ5ųtsܼ 憙ܹK}zYŕUQ14++ *J W\)W꺸ҁ)jDqL.t MqT+hXc.ɢCKo{(կ*Eq@I*RTR/"g?Ԥ݀`yF}(R-$ p|Cع|^8q°۳(1G~DŽ(tPJ`[Rn?cn1OJ:C3CaD6#EHT.0fEE;8@NbIV#Gߑ;f^~=x\[ ǟtIQEbM30XKBΩ #DAQ+9yXSK*IIKy~0D/O=Z$!I& IIH?9 IIpDAem?jׁYJcʱ⯣v 0뮌Le#\nH> $,SιT ;goF:ejQ?rQozxZ+B9;??\ړd~F}/5eT<Ӛչ0MՋECK2RI_qkJ =bN$]%^¾A-; ٿPM&]ަVdpH/\΁JUre-ޘۖ\ok&j:44vVxΜmoiySo0/QiڦZ)7hoMYe]9Q9J&$!hPTrv6prRkJ(mCξ J ذNMp0|12CDX+gW /!k zrgGeXbl;w՚4<d* 4T(kRebn jLiw-أFuG9::8ß"<`D~ȨnT^澼Y5ޗޞ+_+W~ ˠyCGYlJX5c{WrV^xM_Íc\G *OmR_LՎOަ|zx8<[l# g:7ŀYk7@}B#K'CJآ p'r1)F.6G?ṇ0dfc2)аdEDH~AypRRh 1cny[){y}H'=ct,^@'$|]ȸ&%\ .u"khB7bQV^P- ^GCɨF,˾j hkeLfI cR.qo?e,&QJy~XN (DQc3sx8Q9m /1+=bEMs]zη1^YoZ <.ٷ5*:0@$jU` ިpL(A%!攫^tCNmj,}`{3$oͬM5ד~SϓѠ98*Zn_¯WnNGh\5(͇[w: <}{Z!A;r]t̏%Pb-_^No}w˗{/0,4Ev?>VŠk{HѨ0++(3ըlG˘ G3~WBrXֵ[ y9)h3Ir\;6$yYթ0ŝ0e5c3Ք"*LRL]R!R0ԋOѫwJIkopenscad-2013.01+dfsg.orig/doc/openscad.10000644000175000017500000000341011664172101017350 0ustar chrysnchrysn.TH OPENSCAD 1 "2011-11-03" .\" Please adjust this date whenever revising the manpage. .SH NAME openscad \- script file based graphical CAD environment .SH SYNOPSIS .B openscad .RI [ options ] .RI [ file ] .SH DESCRIPTION This manual page documents briefly the \fBopenscad\fP command. .PP \fBopenscad\fP is a software for creating solid 3D CAD objects. It focuses on CAD aspects rather than artistic ones. OpenSCAD will start as a graphical program unless export options are given (see below). For the usage of the GUI and a description of the OpenSCAD language see the OpenSCAD user manual at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual. .SH OPTIONS .TP \fB-o\fP \fIoutputfile\fP Export the given file to \fIoutputfile\fP in STL, OFF, DXF or CSG format, depending on file extension of \fIoutputfile\fP (which has to be lower case). If this option is given, the GUI will not be started. .TP \fB\-d\fP \fIfile.deps\fP If the \fB-d\fP option is given, all files accessed while exporting are written to the given deps file in the syntax of a Makefile. .TP \fB-m\fP \fImake_command\fP If a nonexisting file is accessed during OpenSCAD's operation, it will try to invoke \fImake_command missing_file\fP to create the missing file, and then read it again. .TP \fB-D\fP \fIvar=val\fP This option can be used to assign constant values to OpenSCAD variables. The variable's value is an expression, so if this mechanism is used to assign strings, care has to be taken that the shell does not consume quotation marks. More than one \fB-D\fP options can be given. .TP .B \-v, \-\-version Show version of program. .SH AUTHOR OpenSCAD was written by Clifford Wolf, Marius Kintel, and others. .PP This manual page was written by chrysn , for the Debian project (and may be used by others). openscad-2013.01+dfsg.orig/doc/checklist-macosx.txt0000644000175000017500000000112212006350460021467 0ustar chrysnchrysnNB! This is the Mac OS X deployment checklist. See build-macosx.txt for how to build a development build of OpenSCAD for your system only without manually compiling all dependencies. o Macports: sudo port install cmake ImageMagick o Qt4 - Download and install the combined 32-bit and 64-bit build for 10.5-10.6 from here: http://qt.nokia.com/downloads/qt-for-open-source-cpp-development-on-mac-os-x o Build dependencies from source scripts/macosx-build-dependencies.sh o Build and Deploy OpenSCAD # Update VERSION in publish-macosx.sh scripts/publish-macosx.sh openscad-2013.01+dfsg.orig/doc/OpenSCAD-classes.graffle0000644000175000017500000001221611713230311022006 0ustar chrysnchrysn[s۶ǟO=gώi5MGĭvڱwAoq;pdgw?twwlwrtxz=x*IvwonnGRh$ƻ',S xOcWG?ӻ}7sGa_E?L萲nk?wcvi&1Gy0/x hCM15s>ScVTtnq${NdMnq} x/ "6Mk#+O+WLvci=uuug. &p\mgOǎU/1j7VwZ/0Ax==Ӵg74& ̯u?{<~<5sG{G=Ga| :JE5s5fX 86TG~HI򼡎W2avpvmVLb9MEq51H-Hr̒hNa8n){C?b?)Uy?\M5O{:#OC z}g&w3ہg>rڱXtSJ4-ŇGe~.4.9JZsgY?h|"UGk/nbC&KU 2ނHi Fh_WC@Ə{尘&הWv'QO!4\Tcyɭn a?,$~&!vD$:J⇁$ɓ>~,xKjswzy[^e L 7T0 hBuYɱ%: `J]mm!&-@ |ZԴ~A`:]oٸono2W 7%[ |o+ OlKSt{ޛh ߪk|V(H>H~&',!T(hHƯ1ӿ;Gڀvrr^x XVR@-Џ*(qzM<&x Kao Da&ј5C.  3zu@9<0 7QwaQؒ  6p.ӞYjjMhX}&rIEĴW\ܪEݕ :~DpeV0 [ Z\ko[;ò1v R06c`K:Xej*V}C`rmw5̩SEL5h6E4Z>޿'\<6S$R Jlj=qalp0ޠ-E2‰a$ -bStCM;ikBh6Z6 Q˞2#gYXj7 ?dn/yFhDw<pi(tXG"b#X?ϊ)&"-x.sZnp^;d5ɚ1Ԭf EQ䩖0"_}uSx'& RbkT] KŴyiӴHD69үu-B۶eǚ4m i]IzDVa! WK $a4&6MA6 Ǹ;qe@[^9%Y8mqyXXpB {z]Z`,{&RtºbgDjҬ@uȭ nyXi,`0l>dֱ&jCAs?c5mޯ4o0˯dw!Zgu];c ɟ _M6ih{zUMH\.qtw)x+,BZ_DwA3:.+enEDANJ暣47!j _g586a^Gױ >nA;Ɗ&qkc@ˉx'QpwJuh)ڪǙVSn|L)/痐67!Z-fr 9xLýh›TH qQJgSG emVaV]3:nhtyRF6p4ڪmaoMZ컝$0mP1 [v`Na;v\(MÚw=mqy`U^uA&a|AZ.ŨEu%",+{AaY\\i򃄲XIZ$9տ_pssgAVus$,,F΂*>-[UMPUP\U_} [aZCΡ~}ѧ7o$~xL^Usb*}) doTj5kCyZ\7O[IC˂ z?7i "7C$&^`WJҿlF3N`3]e20VmHb+ۆ떢DaA}FY'Y*2% g%1+xΘ tLC<Ι޿;v|nEd2 (ӥ *tgst: 90LLg[ØWc;b^9=q6I=ڤަoպ^BM+&Ve)[;9(I̵MaѢ҂>$tWrxe&6jdpoӆ0s +P+ Dl]Ή+Lڵklm)D#t8vhwu)@$kXXts[%_ݐ` w)3#޿䧳 Zg[3% O`Ķؖ5 MW=Sѐƀ 5E{:øͽc6{T\B ٳ~C/Xh5WYCme;yAb7Zb-]QRiյu)#} 3`85JZb\W^Vh|C(jqQؿY"oN!ºx@F<} es| h+uJ8ALUpQ6+6:'<;g'd>}:␼{6KMfq+6WoH=4'.Uꦞi-]U{NyϞ^;fYSo{.9h^ng*@+ "OFa?":c_>`ߏǁsW/M=w'~̿Gn #RiU GDS]yz<*ǣE REUGPKb=iV$yeQ32Pt&Nm\,$ @> ҉9So!'0ɢ,<ׇkBx a<7ܑռ̛HaTL!"4Jx̟Ľ_EYzwQBnIȔ7_O:Y7Mli0i=$*{I{'\24E!ޛ_?aDeᛨӃOp\]L?>COӿxWU_afOrA}>vM:N/(֟,:?Hh=Z^%Çyɟ/9a?beå1}GN*~c޺Ybz&>B w Z"ِY&xMxP2熲3r:\+r|j'mE3}lvGvU7'Vuj'wR;ؾk?LC[p?hT+m/؟wsopenscad-2013.01+dfsg.orig/doc/TODO.txt0000644000175000017500000002717512076022153017015 0ustar chrysnchrysn BUGS (FIXME: Verify and move these to github) --------------------------------------------- o Some invalid DXF data gets pass the import checks and breaks the tessing code o Tesselation via GLU sometimes produces strange results o Export STL: Exports existing CGAL model even though the current model is changed, but not CGAL rendered o Look into the polygon winding and rotate_extrude() problem reported by Britton o CGAL Aff_transformation_3 doesn't support non-affine transformations (non-aff-matrix.scad) o 2D union of polygons with a touching vertex doesn't work. see testdata/scad/bugs/polygon-touch.scad STL Import BUGS (FIXME: Verify and move these to github) -------------------------------------------------------- Using STL-imported models is tricky and triggers multiple issues: (these all fail with the usual "Illegal polygonal object" error) 1) null-faces causes F6 rendering to fail while F5 rendering succeeds. (null-faces are exported by OpenSCAD). Example: adns2610_dev_circuit_inv.stl by Andrew Plumb 2) Even very simple imported STL models don't render correctly with F5 when taking a difference(), though F6 looks correct. Example: test_cube.stl by Andrew Plumb with this scad file: difference() { import_stl("test_cube.stl"); translate([2,2,2]) cylinder(h=10); } 3) More complex STL models with something simple unioned or subtracted fails rendering using F6 even though F5 works. Example: adns2610_dev_circuit_inv.stl by Andrew Plumb with the three null-faces removed by MeshLab with this scad file: union() { import_stl("adns2610_dev_circuit_inv_4.stl"); sphere(r=5); } 4) More complex STL models cannot be projected (both F5 and F6). Example: adns2610_dev_circuit_inv.stl by Andrew Plumb with the three null-faces removed by MeshLab and this scad file: projection(cut=true) { import_stl("adns2610_dev_circuit_inv.stl"); } USER INTERFACE -------------- o Preferences - Beautify color schemes - Color schemes read from file - Color scheme editor - wireframe width - pointsize - OpenGL params - Default language feature settings - Make the library search path configurable? - Turn on/off caching (advanced) o MDI - Think about how to do MDI the right way - Ctrl-W should close the current dialog, not the current main window -> implement as for Preferences? - Menu bar handling: Mac: share menubar among all top-level windows? - currentPath is global but is used by each document, e.g. parser and handle_dep. o 3D View - Improve mouse rotation/zoom/pan - Add modifier key combos to handle pan and zoom on 1 mouse button systems - Show grid - Measurement ticks on the axes that look like rulers that one can turn off and on. - 4 x split view w/orthogonal cameras? - Quick highlighting of object under the cursor in the editor - View All - Allow specifying viewpoint in the scad file - overlay indicator displaying current view mode - Use OpenGL picking to facilitate ray-tracing like features like measuring thicknesses, distances, slot thicknesses etc. - Add option to change lights, e.g. add an optional camera light - 2D objects are rendered at z = -0.1 - why? - Rewrite to use VBOs or smth. - avoid inline calculations - Rewrite to a higher-level library (e.g. OSG)? - Make navigation (e.g. zoom) available through menu entries (requested by disabled user) o Editor wishlist - More infrastructure for external editor (allow communication from the outside) - Preferences GUI for the features below - line numbers - tear-off/maximize options? - Save somehow uses current dir, even if the file is already saved earlier - Code completion/hints for builtin (and user-defined) functions/modules - builtin quick function reference/help - Drawer/popup with all modules/functions listed which can be inserted into the editor by clicking or drag&drop -> icons in toolbar? -> This would be moving in the direction of a traditional CAD GUI and needs a fair bit of thinking. - Display some kind of line wrap indicator - Couple the source code to the AST to allow highlighting selected elements in the source code in the 3D view - Tabbed editor for designs including other files - C-c/C-v should work on the focused widget, not always in the editor - Auto-indent on enter and on tab o Error reporting/debugging - Provide better error messages when polygon ordering causes CGAL errors: o Detect common error: self-intersecting polyhedron() o Supply syntax highlighting of the exact polygon indices which are reported to be wrong o Provide some interaction for debug walk-through? - Provide visual highlighting of geometry corresponding to code -> could aid debugging a lot - Optionally output console log to a file - Common error: detect and report (and ignore?) duplicate line segments in DXF o Computation - Multi-threaded computation (mostly important for CGAL) - Progress: Call progresswidget more often to improve feedback o Misc - Save: Ask for confirmation if file has been externally changed - Rename OpenCSG and CGAL to smth. not specific to the underlying libraries (e.g Preview, Render) - If trying to export STL/DXF but source is newer than the CGAL rendering, ask for confirmation. - Go through keyboard shortcuts and make them more conformant to platform standards - Show design info/stats (sizes, caches etc.) - Support Voice Over and related technologies for vision-impaired users o Cmd-line - Add verbose option (PRINT command from mainwin.cc and progress output) OpenCSG-related --------------- o OpenCSG rendering: Coincident surfaces causes z-buffer fighting. Is this somehow avoidable tuning the depth tests in OpenCSG? o When specifying a transparency with the color() statement, the object is not sorted and will be rendered wrongly o Bug: Using the background operator (%) on the only object in a scene triggers a CSG error: No top level object found CGAL-related ------------ o Hollow donut problem When extruding a 2D CSG tree (e.g. a polygon with a hole), the hole information is lost when performing the extrusion. For linear extrusions, this has only a minor visual impact, but for rotate extrusion, the resulting CGAL models will lose the hole. The OpenCSG rendering keeps the hole, but renders slightly incorrect. o CGAL issues - CGAL doesn't handle almost planar polygons. Consider splitting into triangles ourselves. See WillamAdams/dodec.scad o Look at the EPEC kernel for improved performance (suggested by Giles) LANGUAGE && BUILTINS -------------------- o Primitives - Springs, spirals (requested by Cathal Garvey) - (TTF) Text - Image-based height field like http://www.thingiverse.com/thing:2078 - mesh (coordinates and indices) o 2D Subsystem - Performance: Is it necessary to union children before extrusion when compiling? Can this be postponed to CGAL evaluation time? - Add inset() operation o Built-in modules - extrude*: Allow the base 2D primitive to have a Z value - rotate_extrude(): Allow for specification of start/stop/sweep angle? o Advanced Transformations - Add statement for refinement via surface subdivision - Add statement for intersections in cartesian product of childs o Function-Module-Interface - Pass a module instanciation to a function (e.g. for a volume() function) - Pass a function to a module instanciation (e.g. for dynamic extrusion paths) o Language Frontend - Allow local variables and functions everywhere (not only on module level) - Rethink for vs. intersection_for vs. group. Should for loops generate child lists instead, and make these passable to other modules or accessible by child()? o Misc - center as default: Very often, center=true is used everywhere. Make a global variable ($center?) control this to beautify code and the avoid typical errors when forgetting to specify center - Go through default values of parameters (e.g. cube() has x,y,z=1 while linear_extrude() has height=100) - Add support for symbolic names to child() statement - Add 'lines' object type for non-solid 2d drawings - Is there a reason why modules like echo, empty if, empty for loop returns an empty AbstractNode instead of being ignored? - Dependency tracking of libraries (USE'd modules) isn't implemented. See Mail from nophead 20110823. o Grammar/Parser - dim->name -> dim->label - A random(seed) function - linear_extrude()/rotate_extrude(): Cumbersome names? -> (extrude, revolve, lathe, sweep ?) - If a compile error occurs in an included file, line numbers are global and doesn't say in which file the error occurred. INFRASTRUCTURE -------------- o DXF Import/Export - Use dxflib from RibbonSoft for import/export? -> investigate - Import - Support for POLYLINE entity - Support for SPLINE entity - Support for LEADER entity - Support for MTEXT entity ? - idea: DXF inline - convert from dxf to OpenSCAD syntax -> parametrize dxf content o Mesh optimization on STL export - Remove super small triangles (all sides are short) - Replace super thin triangles (one h is short) o Use a logging framework to get debugging/info output more under control? (check log4j, google project) o Export to other file formats - IGES: Should support CSG so it might be possible to keep some structure IDEAS FOR LANGUAGE CHANGES -------------------------- o More strict checking of module parameters to make e.g. this fail: module test(a,b) { a=1; b=2; echo(a,b,c); } test(c=3); (also for built-in modules) CODE ---- o Refactor from MainWindow: - Put all application-global data in one place (QApplication subtype?) - Fix current_win hack - CSG data structure (compiled model) - CGAL data structure (compiled model) o C++-ify - Use static_cast/dynamic_cast instead of C-style casts o dxflinextrude and dxfrotextrude could share code o Consider decoupling DXF-specific functionality from the 2D subsystem o Visitation refactoring - Make AbstractNode members private/protected? BUILD SYSTEM ------------ o Fedora is reported to ship with byacc, which doesn't support bison extensions (e.g. %debuig). Look into this, either be yacc-compatible or force the build system to use bison. DOCUMENTATION ------------- o Auto-generate API documentation instead of, in addition to or combined with, the wikibooks docs. o Write checklists for typical extension work (add new module, add new function) -> make sure new test files are added o Clarify include/use better in the wikibook docs (e.g. that use'd modules have to be self-contained) TESTING ------- o Caching and MDI looks suspicious when the code relies on external resources which might be loaded from difference locations in different documents -> we might get a false cache hit o Collect "all" available OpenSCAD scripts from the internets and run the integration tests on them all MISSING TESTS: -------------- o cmd-line -D variable override o OPENSCADPATH env.variable o all functions o mirror o scale o open polyline from dxf using new method o linear_extrude DXF o rotate_extrude DXF o import_stl o import_off o import_* - open polylines o include: test subdirs under librarydir (e.g. include ) o variants of module transparent() { %child(); } o define modules o define functions o built-in variables and constants (builtin-tests.scad) o Caching - Test that caching is actually performed (speedup + same results) - Test the modifier characters correctly influence the cache (also when added/removed) - Test the individual caches - PolySetCache - CGALCache - nodecache - ModuleCache o other tests - export - cmd-line tests - leaf nodes having children, e.g. cube() cylinder(); - dependency tracking (use and include) openscad-2013.01+dfsg.orig/doc/OpenSCAD-csg.pdf0000644000175000017500000016167411640436732020323 0ustar chrysnchrysn%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x[F)8uqٖ, R@B&Y6a].nw !6U::.5?_??{O{~G7ǩW|_P~768˗>i7we7^˸7~p{nOeڒ={N;_'}eøH:HTຯX}h߿[׿]qi;=ړ;4=fM? $HOSmX)|AZ7P~Û8 |Soyqm˛W|[UN dhj$تUP#w' Q*wu:h?=/5]b[saǪ˦̣UU MUxRVwT5cUCZCx.u窇f Om,u7E]gvvN|2n nƛG q"Y03NR춍H˱6y+>,RN $M*үo3!w!Hn=R:&$5u).Ø@?:!u )1|a'7Mm Jm)t0,ERXBh7]?WG=|? 洟?5rN9> SCH}螫-SP@H&?8>pp۝ma_D^ 9ǡ~zIV⠥,غ,D8U8°,׌qw<~FN <qޯ)sZ8,iYq.}<}O!̢,S[ikUs>wsLwff8EX6&SL :7, eJsT։-!Ft0 nl/ Ih3_}!sG1L^(fTvL}D6ggnEJJJ ng0f|+c %cmRr]dYSl̝E_ ź~"O g1zCph xJH2ڒuBFM"1G=x`yEJWX.BlQ~ehK/e]8_J߬"¬q-AVb$ۖj~T(MޒkcF`$̧p[,nUZY쥞>,RN,'a[+p7+7q56VLeʏV='bfCUt':t B蠁{F }+]:yU;f^[#UBó<,YU!a`i"i(C'cҏ*vqƥpV2L?].њ!ovS 4Y'>ʃb*^ r.Snp~.S_)e_s?IB mcfDnBIHK1cK iŭZW)W{ZG*WY@vi{N[Φ>{%bsER7PO$lS zeX^^ؕX_\Dz:s+3=+fH"#oTuj4N־FXI6YMQhf.h'jش2@zDռ5 HÅHԽ /ƃJ\W} mOH{?]yl%iˍjeoOx8NTcnyxrԸw`HM3Ib8݊j.b>hG$42^-uĽByJi)NcxŗR[a R"E s蹹nưWM)7`gĈ!~XH 44e8燥TZvY;UL#eZP oAVIa9rE~./m4/ևPԉ3O,\fF)JLm~K@s(2a DHNƸG@zY|_E endstream endobj 5 0 obj 3339 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 745 389] >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 59 0 R >> /Font << /F1.0 60 0 R >> /XObject << /Fm7 26 0 R /Fm3 14 0 R /Fm10 35 0 R /Fm4 17 0 R /Fm5 20 0 R /Fm15 50 0 R /Fm16 53 0 R /Fm14 47 0 R /Fm2 11 0 R /Fm9 32 0 R /Fm12 41 0 R /Fm17 56 0 R /Fm8 29 0 R /Fm6 23 0 R /Fm1 8 0 R /Fm11 38 0 R /Fm13 44 0 R >> >> endobj 26 0 obj << /Length 27 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [457 313 587 389] /Resources 28 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T015W064V046P07S(JUWSH-JN-()MQ(*I)LBrg!K>Ш@" endstream endobj 27 0 obj 75 endobj 28 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im1 61 0 R >> >> endobj 14 0 obj << /Length 15 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [299 278 432 316] /Resources 16 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T0T02P046V0P(JUWSH-JN-()MQ(*I!P LGrgK>WB T endstream endobj 15 0 obj 74 endobj 16 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im2 63 0 R >> >> endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [612 204 742 242] /Resources 37 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T034R020Q046P0P(JUWSH-JN-()MQ(*I P LGrgK>WB 1# endstream endobj 36 0 obj 73 endobj 37 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im3 65 0 R >> >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1 305 131 362] /Resources 19 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T0T060U046P05W(JUWSH-JN-()MQ()J P D}rgK>А@Lp endstream endobj 18 0 obj 70 endobj 19 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im4 67 0 R >> >> endobj 20 0 obj << /Length 21 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [144 295 282 370] /Resources 22 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T041Q04U04P07U(JUWSH-JN-()MQ()J!P LGrgK>WB K endstream endobj 21 0 obj 74 endobj 22 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im5 69 0 R >> >> endobj 50 0 obj << /Length 51 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [300 203 431 238] /Resources 52 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T060P020V046T06U(JUWSH-JN-()MQ(*346PA=S\}\3.|Qv endstream endobj 51 0 obj 78 endobj 52 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im6 71 0 R >> >> endobj 53 0 obj << /Length 54 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [437 207 568 242] /Resources 55 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T016W020W046T06U(JUWSH-JN-()MQ(*346PA=sS\}\s.|Y4 endstream endobj 54 0 obj 79 endobj 55 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im7 73 0 R >> >> endobj 47 0 obj << /Length 48 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [300 186 431 224] /Resources 49 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T060P00S046T0P(JUWSH-JN-()MQ(*346PA=S\}\ .|Q Z endstream endobj 48 0 obj 78 endobj 49 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im8 75 0 R >> >> endobj 11 0 obj << /Length 12 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [299 305 432 343] /Resources 13 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T0T060U046V0P(JUWSH-JN-()MQ(*I!P LGrgK>WB I endstream endobj 12 0 obj 74 endobj 13 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im9 77 0 R >> >> endobj 32 0 obj << /Length 33 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [612 168 742 225] /Resources 34 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T034R04P046P05W(JUWSH-JN-()MQ(*I P LGrgK>WB e endstream endobj 33 0 obj 74 endobj 34 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im10 79 0 R >> >> endobj 41 0 obj << /Length 42 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [300 150 431 207] /Resources 43 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T060P04bcCSsTp<ԢԂL2Cc*3IU54r0 endstream endobj 42 0 obj 78 endobj 43 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im11 81 0 R >> >> endobj 56 0 obj << /Length 57 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [410 0 568 76] /Resources 58 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T014P0P04P07S(JUWSH-JN-()MQ(*245*2P07RzF斖 ɹ\F .@` endstream endobj 57 0 obj 87 endobj 58 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im12 83 0 R >> >> endobj 29 0 obj << /Length 30 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [612 332 745 370] /Resources 31 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T034R066R046V0P(JUWSH-JN-()MQ(*I!P LGrgK>WB ^ endstream endobj 30 0 obj 75 endobj 31 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im13 85 0 R >> >> endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [171 349 247 387] /Resources 25 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T047T06T07S0P(JUWSH-JN-()MQ(27U0B z=S\}\C|@@:} endstream endobj 24 0 obj 79 endobj 25 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im14 87 0 R >> >> endobj 8 0 obj << /Length 9 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [299 332 432 370] /Resources 10 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T0T066R046V0P(JUWSH-JN-()MQ(*I!P LGrgK>WB v endstream endobj 9 0 obj 75 endobj 10 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im15 89 0 R >> >> endobj 38 0 obj << /Length 39 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [437 154 568 211] /Resources 40 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T016W045Q046T05W(JUWSH-JN-()MQ(*346PA=sS\}\C3.|aJ0 endstream endobj 39 0 obj 80 endobj 40 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im16 91 0 R >> >> endobj 44 0 obj << /Length 45 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [437 190 568 228] /Resources 46 0 R /Group << /S /Transparency /CS 59 0 R /I true /K false >> >> stream x+TT(T016W04P046T0P(JUWSH-JN-()MQ(*346PA=sS\}\Cs.|aI endstream endobj 45 0 obj 80 endobj 46 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im17 93 0 R >> >> endobj 75 0 obj << /Length 76 0 R /Type /XObject /Subtype /Image /Width 130 /Height 38 /ColorSpace 95 0 R /SMask 96 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om /@a 0` 0` 0` 0` 0` 0` 09 endstream endobj 76 0 obj 88 endobj 67 0 obj << /Length 68 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 95 0 R /SMask 98 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 68 0 obj 121 endobj 69 0 obj << /Length 70 0 R /Type /XObject /Subtype /Image /Width 138 /Height 75 /ColorSpace 100 0 R /SMask 101 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om ?@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` x yJ endstream endobj 70 0 obj 159 endobj 85 0 obj << /Length 86 0 R /Type /XObject /Subtype /Image /Width 133 /Height 38 /ColorSpace 100 0 R /SMask 103 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` < ;: endstream endobj 86 0 obj 89 endobj 89 0 obj << /Length 90 0 R /Type /XObject /Subtype /Image /Width 133 /Height 38 /ColorSpace 100 0 R /SMask 105 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` < ;: endstream endobj 90 0 obj 89 endobj 61 0 obj << /Length 62 0 R /Type /XObject /Subtype /Image /Width 130 /Height 75 /ColorSpace 95 0 R /SMask 107 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om ?@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0rB endstream endobj 62 0 obj 151 endobj 71 0 obj << /Length 72 0 R /Type /XObject /Subtype /Image /Width 130 /Height 35 /ColorSpace 100 0 R /SMask 109 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0`5R endstream endobj 72 0 obj 82 endobj 79 0 obj << /Length 80 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 95 0 R /SMask 111 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 80 0 obj 121 endobj 77 0 obj << /Length 78 0 R /Type /XObject /Subtype /Image /Width 133 /Height 38 /ColorSpace 95 0 R /SMask 113 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` < ;: endstream endobj 78 0 obj 89 endobj 93 0 obj << /Length 94 0 R /Type /XObject /Subtype /Image /Width 130 /Height 38 /ColorSpace 100 0 R /SMask 115 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om /@a 0` 0` 0` 0` 0` 0` 09 endstream endobj 94 0 obj 88 endobj 65 0 obj << /Length 66 0 R /Type /XObject /Subtype /Image /Width 130 /Height 38 /ColorSpace 100 0 R /SMask 117 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om /@a 0` 0` 0` 0` 0` 0` 09 endstream endobj 66 0 obj 88 endobj 63 0 obj << /Length 64 0 R /Type /XObject /Subtype /Image /Width 133 /Height 38 /ColorSpace 100 0 R /SMask 119 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` < ;: endstream endobj 64 0 obj 89 endobj 83 0 obj << /Length 84 0 R /Type /XObject /Subtype /Image /Width 157 /Height 75 /ColorSpace 95 0 R /SMask 121 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 8 endstream endobj 84 0 obj 176 endobj 91 0 obj << /Length 92 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 95 0 R /SMask 123 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 92 0 obj 121 endobj 73 0 obj << /Length 74 0 R /Type /XObject /Subtype /Image /Width 130 /Height 35 /ColorSpace 100 0 R /SMask 125 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0`5R endstream endobj 74 0 obj 82 endobj 81 0 obj << /Length 82 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 100 0 R /SMask 127 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 82 0 obj 121 endobj 87 0 obj << /Length 88 0 R /Type /XObject /Subtype /Image /Width 75 /Height 38 /ColorSpace 100 0 R /SMask 129 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0!f endstream endobj 88 0 obj 61 endobj 125 0 obj << /Length 126 0 R /Type /XObject /Subtype /Image /Width 130 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`H!L4`k263-aeafbbDv~VvNnn^nn.v#n`dbfe-`eA8n>!1IiYE%e%E9)qa~n6&x:@@DJ^Y]KG@_W[CEAZL2ʚ&v6*@`bV5u  % t3WbFOHtBJz&MAFjbL/3$!0si8G%gUUT(s\/gVPCST]oo*% I,RjNI5mg̜EK0cjG]qZ07\B3-Y`ɂY:j⼭tEx`.Ӷo蝱ph ֮\<$NOQ  " :6~I%-_yM NH r0PCrri6l۱`ۦ5wUe8``煁/9LzaƁo |Nd2N>6FH{q`7P endstream endobj 126 0 obj 584 endobj 105 0 obj << /Length 106 0 R /Type /XObject /Subtype /Image /Width 133 /Height 38 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x혽kP1IC&DC~.`)CKNE )_Z,t>ϒ<=lQlWZ IX$wKͰ,824NS[$l$It;Oyq(@Kr(&~YڲDDht[bR8nKɺEhV(m.0 W A߆B013z &vI_G endstream endobj 106 0 obj 608 endobj 115 0 obj << /Length 116 0 R /Type /XObject /Subtype /Image /Width 130 /Height 38 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`H!L4`k263-aeafbbDv~VvNnn^nn.v#n`dbfe-`eA8n>!1IiYE%e%E9)qa~n6&x:@@DJ^Y]KG@_W[CEAZL2ʚ&v6*@`bV5u  % t3WbFOHtBJz&MAFjbL/3$!0si8G%gUUT(s\/gVPCST]oo*% I,RjNI5mg̜EK0cjG]qZ07\B3-Y`ɂY:j⼭tEx`.Ӷo蝱ph ֮\<$NOQ  " :6~I%-_yM NH r0PCrm@jyǴEk6ص`uKgTg:]#oV5cɺm!ػgÜT$E4.8qK/9fy[(J*#00=0=W`y{V`@0BIFm endstream endobj 116 0 obj 636 endobj 103 0 obj << /Length 104 0 R /Type /XObject /Subtype /Image /Width 133 /Height 38 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x혽kP1IC&DC~.`)CKNE )_Z,t>ϒ<=lQlWZ IX$wKͰ,824NS[$l$It;Oyq(@Kr(&~YڲDDht[bR8nKɺEhV(m.0 W A߆B013z &vI_G endstream endobj 104 0 obj 608 endobj 98 0 obj << /Length 99 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 99 0 obj 1401 endobj 107 0 obj << /Length 108 0 R /Type /XObject /Subtype /Image /Width 130 /Height 75 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOifa * H@16ؒR* hER6bj1ۆ,&j6mmiLM{՛ww/wA;Os#I@\(PBvPIR (@ǀsIVjF (fU4E65t$ r.-g0.-P1_4 9F(Yd_Kvɠe6AJVgqz TmԱJj9NtF F]A%vH(s F[&Go&'ғSPLO$oNႆVJoqO<*@уpâWӀ`dR3X||& .;iSjLʫoPZ)oG{MeKN,ӥPڬ.= 8-:?W7.Vֶ@eVY|8u#x[Qp'|krύ}4>x[]~2{+8ۼ{+k>};8OV%6/rgXY~'TWsw">{[\2}#㹅͝1T; >Ѡ:KdQsA:tG]Yz_ޙ%$ $~~œdN 8Ãyb2A'&Jdk@eZY&1䵝Muiŧ wP}Td[]tXnlwRިtle=SԚh*SxY~S[߄zMe!f5[(QlaTBR.-x'E,/t&_x^\Jy!I'.gM %ITzn6ݙt* zDidrb9Kg |5O$ǡLcW R'Fj"P$2Hd(4D ;gz'5gD y.(85IFUEmlu,Mh{.C@`5Z=> stream x혽kP1IC&DC~.`)CKNE )_Z,t>ϒ<=lQlWZ IX$wKͰ,824NS[$l$It;Oyq(@Kr(&~YڲDDht[bR8nKɺEhV(m.0 W A߆B013z &vI_G endstream endobj 120 0 obj 608 endobj 117 0 obj << /Length 118 0 R /Type /XObject /Subtype /Image /Width 130 /Height 38 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x혽kPm&TMDQ",*J]":ei!%NZtp E(" )HySߒlɹ?'Cg$ՉL$ :N$p;pⓀX)@:`8(/<>QP$91 ^)јXTgiGo ĠD*J:P?IIB\JTgS"IËdx]&Tuv]%/"πAqޠj-lCż[Z*E yIVsպntn*cjN%`$#tQM׷C ~2uVC=x2'e4Bek r>> stream xK"QgΌ| SLc[D0 .}B`+RB(E^Da,HERFdElDs\{y_ Ogs2AZL(4j8W fX!c8) #@R4 S镡#9Ehc+k%Yu5 z4K%Z-,c@" dZɶS;72"X+Dh43 8IDECxb~1 "KD<5EdMñZf3Hv3u,(Ρsl~*|v=5 j'ڥQ#/9+7R ct@[ h^'V ǧ7\V&[ ZPdf|}XAx]>$!EfzS˹sDOWTث3;J'D__NzL#3] "oa>=cw'@} {п#!12|_L w&3꽱9 ݝ;ܿx endstream endobj 110 0 obj 592 endobj 101 0 obj << /Length 102 0 R /Type /XObject /Subtype /Image /Width 138 /Height 75 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x횽kPi&&EQ",*8Dt҂E -U:8DZ E(RAZJݴwùg8xz<ޡqM,` a,43/E$gf'H?.TU wdI ‹r@ EbZ<#!bEލA xɧ5=i2Եx%f9ѧFu#/*$T+b>cQ'rF Y úhlr!Udl0ٶO=$tOYO1Z 3߱2b_HϖMkGx3],gO`?7 l#|ݱ/ sawڵ|2$b0fV\;$,kgзE#hyd.'$o#,$TSgxx\?#a:F%W/'VlZ"eZf5P7I-ﮞ;h׷_x{}~ {L {I{&N\!}B 6WH'B8 ' l>!N`p q+O{{.nlި .2`3`33g^ 6|O()}n:౻Y!wQ endstream endobj 102 0 obj 694 endobj 127 0 obj << /Length 128 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYSW P aQ"TASIH| 8X'6>bjQ1j46Ä`cS AQk` K3\ݳs@) a%S4ڢYbw.*`BX,b24*oIIdbs<. 006 HOς0W #HPPDƀrbLT*0QYYˤBA^ĠQR@$QLv@TTPinԧ 5RQZ$䲙tjR  %e*uYo7::KC^׬S*$<HF%?`]VSS!(YI(D #ڶ}Ƒ)_0C؈fj OFDCpD^]y{iefo`۝urI )SHAp>"ihe3g ťe&X^Z/[g̦[m 5rI> ȧ$W7{N>~n;V7N5pUƚrEMHadsEz}jõݴq N<>`h,=%+ԭݣ6Pv~1pͥўVeɱR}ǏOܻ(+i~ZC)N;*dcaHv{tںbMÇ8=au($I4ZvgrEH=(p^Si@M[` >WCзPgcUI~#dG(UiF+Q wxokJp<(Ypa1ϝ݃HُBD{wޖZ(IE bmKOO^yFgLD/XujEqy"Zw{ܲ nL)ލ?MisO@aI؟MA|d]g!Y>D(Isb8Jo OBJr7S$x3:OD8U'Q'FjeDjaVvfVTV%@(ӌ =gLegLn{s{& d}#!;K2;S΄Lϝ RJBH=9Ru9!BYZD3U+6utLw, L'$+6 endstream endobj 128 0 obj 1414 endobj 129 0 obj << /Length 130 0 R /Type /XObject /Subtype /Image /Width 75 /Height 38 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` lH 3P5#vY9yxxnn.vVVfl bDE9ٱ4_XLRZV^AQII7PRRT0I2 *Z:zPN_OGKCEAF\,I.ֆ @ؘቂOLN3$.-?(-I 7֔d9GXZ'"9lk-M7Ra9_\Q3"w3ffΘ>uROkMQjYLB&Ʌuf[de%KΛ909TCF C&v^Qy+s\v7@ukWX2wrguN/;(>qe ٰy6B` kΙR`, IFΡ޴m݄6^4*3DMJ9L\#jzf.]u={!`?&ٽs뺥{r"ԥib> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 112 0 obj 1401 endobj 123 0 obj << /Length 124 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYSYAQQQE#^F,-t=1qb 5QctDc#ך`@EP(!REfqCcSsK4756hK sX"q0*!-WS^kgwOoJxYP S %/z>Ꮖߺ[t21rO< qB%̂&gPܟ3L?}TV&l/0$(v-O u6VS,ѵ@xo>-n \кi{VI 0Ȯ-@ G)W6v}6Z!ϥN Gv `Ǔ<H M+̙l$-} SE0^=)$+tNX\u_Z۱#öeW܋ a\ H H]x7ٲwx;FGtJE< HT4t6[H\ (v/OeƇq"9e?wd;&`,u芳d"<  3+>G㖛 ]qLe\`p{hq0_ 8y*v/p"=1='b.`6X8iD9=ʦ\q]P'.uģkDg,Z~M~a~wgt{=3ol+70qp3лxJ #qnt p+gil0;^3S)`> stream x혽kP1IC&DC~.`)CKNE )_Z,t>ϒ<=lQlWZ IX$wKͰ,824NS[$l$It;Oyq(@Kr(&~YڲDDht[bR8nKɺEhV(m.0 W A߆B013z &vI_G endstream endobj 114 0 obj 608 endobj 96 0 obj << /Length 97 0 R /Type /XObject /Subtype /Image /Width 130 /Height 38 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"awq>td&-eLE$х0 P !(B.HB l 0"Ae׏ub<;B2Wܷ*RLai`WͰZ524E*qЯAR,A*=X$襀$-OZ̢I0F T DMtL;]qN;&%Ut"!МhO> "uO-F=GBJ- -.GW@d% ܒȫ)ӌrZ,yZ"JC$LEdr^$3;Fj(*F,wt,5Pi #Pls8/!r^gw6c!ĈAP`u-ŷ3g2DnoJgҜ*pT1W0< R}.Ѡk̨voyW'ccp^L|πޅEހs|]_ڇxK3~Ty7!lԟ*~<<# F'JA ͷe DC);ۈDOe˄|BA?TȧuE|kS) \e{{P@^ɥ endstream endobj 97 0 obj 639 endobj 121 0 obj << /Length 122 0 R /Type /XObject /Subtype /Image /Width 157 /Height 75 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOi0p RY)5 4 jHMi*6am5ش6Xk֨'֪mSu'^|7y/~<0|*o3b.fYgA0PE|q KdeR1ASyd60Pk4ZPh4DRQ-F2]dd6 vh0/-`2t*T@u,LfS54gnb1j(-#ʼn1 ^ "_Z͍B"*`Tv #C1P Eoݸ:z\:OM-oIP$'Fˎf .Apךۺw3P>}`lxmӫd&eF{gvb*yLP&BV V_8L/o@}93ufT TI<ʬllۭՅ'.FB1gp< >XMBk.> cvioG8e3SK6]%`K>ߎOqt6,HZ:BI2߀8B{>=b90h,2(Bh9ڪ(9#c*"c"ȘȘ=2h,2(Bh9ڪ(9#c*"c"ȘȘ=2h,N~Wp(9q;oV3щo?}>KsýKҜ\|v]~;sk/рr0:yՍ6(l-ΥI[ zGR3 KkxbD,s }+"Q,.'3̥S#xzSA {?9ɉD,h~ *y`,> p4ڭ:Ll/-+݁P_?(z~pWPi o:]K^`xmɠeP*tZMd젰,dI[D|S[`9"::VCTȇ+U*V!@$ɱWkL*"jJ <[2BT(D$DQ>be`Bi~|R)pi$5o endstream endobj 122 0 obj 1158 endobj 131 0 obj << /Length 132 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xROHQ6Axw )vuYm[Ңgߺ3ӛ5œ]`鲙}v*b{a[QÓ'a?dy֭S{=5ڊ^-CT#hsM9s1F9 1w7;aYf ]%{w;ћ9 \Ir< X}I<>Uw(gRVzWOelπ~v{|u׶>UEP>,l%KTn)=J+vp,ZSk9xw"zmMWzmʨ)(ͳDf[xf8:罊ZIE?9Z*UVPog~~\?A< =ѯ tIsQIi!3NTc)[d@f endstream endobj 132 0 obj 704 endobj 7 0 obj [ /ICCBased 131 0 R ] endobj 133 0 obj << /Length 134 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoE endstream endobj 134 0 obj 737 endobj 59 0 obj [ /ICCBased 133 0 R ] endobj 135 0 obj << /Length 136 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xYgXͲM%Er$HHZҒsJR ""`D `}>ϝ}ݪکw`[v  2=ȋ{(0!I7RX) *$w}W #Y jw0R됂C@#` 1 /woa .V(B "rH7⇠!Ѓ 5H>n#6{vqEŏ`77}y'29,-׏&?^7 3]p3AΜw;W3=fWEp.FnaGk`jD^snƻ9A͡VDpwX>cSFm`rXHLvc@Ƃ  "m @i%pC4. @z!}N$y#G^@Bl#hȘ$%wCFBNg̿,vF^zQz믘hYZ@^43Hhm&Z ѩW"bT|wK ~Yor_DŽ}y;sQ i^Yi]cw_kY@#dd>:#s? @$r#.D_IwO@hE,Pj@ c`lpF2CAGA:'iP*@ p``̃%Mp"Bl$I@2CBP C)P@:*݁B#3hZ>C?`L 3\0,+ڰ l8Nsb ߄8< /PG1P(e.BQBT% u5F-6X4͋D~-A'%ZMtz =^AocNFc9Da1 ]8f2cEJX/6=mvcGso8 'SǙptem(nNࡐ0pH(DE1JbRRҜ҃221<&=: /Qb+Tw^R}x%?/7g ԺN9Q!-#!C#4D4F44I447iFi>R j:^}LLGI'LKFHWJF7IH/CoN@M!AA!a" u$b x8ψea4bebl`b\ab`gcf*edfF1 313273O0`bfd`2ʲɚ:M͏-;]ݒ=.2##9')iY9ː+ W/273/ww"GSs=/6?o1o '~|C|" zVy >R*/&,"l/|LExAUH$V^(ATS4DRVLYOذ8, #^*XP Kك٣'pOIIjImHzə{M&mQJPQ*OԶt cdvϲ$R'r9$VUy yOr D z~**)*^Q\TTrU*STfTPV~QQIRPPUT WmV&vIma>}ϫOkjjӘtӬԜЪz-}YN 5]Un=^ސ>~Aaa~~y'HFuF+J }&&&%&⦡Nxi&dhb̍Oe,|k%couߚhb}M [Q;Z;':5{=|R8;Zqv5:}hI)iٝ;]h]\b\]/nU}s7r/s_!钊HKZԽսOy/h,u%Uk~~v(\F%ӃCTCNքAaZшH(kсу111b b/ġHq=|Gg'B=IIIG :wQtr~T#sii4ԎUG'ʐ8ٟ%UM?!sNWPbnIyysY[Y釅ETEEŦŭgϜ|KWt 8*_nVћ}1G[zfk>-m;wu _ ^\N@럴> \_ ]ů_{Y|}s-smvCy6p[?~ol v u,BZ vwM)W v^h >rF cŸ` +J}*E^2 +}ib 356k([/w:IY!c"OJ,KﭒږqmgWVWSQ]g~N㇖ =Fq]-X&9+zku4svu>xƹk[3Cɓߋ=On-K'X*ԇ&̉r[GWN&%V$9*̘BJFNwp29{lѓy=mT>SSRw&$يs+W*W>UfB훺Ks WtZn^A"ުЦnt˺ý3t/.=Jtdy"W SaMcGgfd6ܛ/xNuab%eW?~Y6|.rwZ? 6mʿ;P,E6?-^Z F#D+J'E`@c dJebc]b$sp) \|/,!#Z+$!'T iM 9J#*DU }XMMHZzx}UwÌFƋ3s9 UKU+9kAof::ZRrp9ipjoiB"b3T%蒭үeKg'+F |]T^HSV'xI~e+MWk]ҵ28ܕ~NCOuɾ6d_}Y*Y)?̍>k~R40A4y*9'/o::~:xo6`.M|ۼw ޷/.?jo_~nUn;?'tPh&]uRtєӞKe$00%0䲞ekdx#ȫʟ"P%xWhQFTFVdY?P@F~t+8zRTo0˽w[ ,M%B~ @e@JCaCM)0.!p E^d!s:]zY`}˂'ۏ AP9h@W0("[s$STxt,Ks|mNϑdi2rr~XI}tC{ws [wx{3n<{$8kdɁg/6f^M]\_X"Zkwwś:[SۡPB{@FXӠ;z?k4iljwl̂*ɺfN>`#搅S.Ʈn?I:['<p/+82d,L>(b+%+5.0^@RdߔWiǕ2KrXr+T?'䩦ss ;]sq˫[]Tݼ=}<(oz1ttIg<643&mBj>W>Y]nb=l̏G[Ew:@!`Aܟ!O *LO'Ֆϯ,6Z?mܼŸEkbbxNNnüdwwQ ap٬Y;n+v^vkjД endstream endobj 136 0 obj 5953 endobj 100 0 obj [ /ICCBased 135 0 R ] endobj 137 0 obj << /Length 138 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 138 0 obj 2612 endobj 95 0 obj [ /ICCBased 137 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 745 389] /Count 1 /Kids [ 2 0 R ] >> endobj 139 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 140 0 obj << /Length 141 0 R /Length1 13360 /Filter /FlateDecode >> stream x{y|T]6K&3̾e23 BC6@4P1Q@DEV\X !—Ru)]RZ 3s߄k~:/s9s}YV:EuZF/o3Bd- oپiYK!t̙~!֖Y~t6h0S,y(^@b}3C|ACGByK O]x,_Y  ߻C݇^$"p5!$^Q:~2UI, $~OriP Y.A{Uz DP}F(qu(DKV< vA0~BGRdC*u2+U"Xy-t' mJ!\5jw5C.)ƻ88 ]r}!u2 jD Njvq]]#uzе 5+O1BtJH*q w\r"zc+=T᡾eww."0 (ލt7u0#7FT"Pau`u+(O9+o 1M&$4ZRJ$Fݥ.(ރJ,{HG;ʍ{ID$$"@x12DCpPKB=orqZʐ@V&KctE,i{ngƎ ݎp>+7oij-Ș0yfWz+'ny Y;L3f5Z-wo=u{w4j-nWx[([t˻Vkq?xW{b}Cĺgw5w5w͐&_1% I P߁\r!"ˣw.g6 WZ L=̀DKK ڊ!r6sxQ;Q6^ED3]@ѫ0~ :6H ,@F]} "2JE#*E];݉v=pOb?]B\=bce2T+qcmȌ6cgccQ5#;k'b/%P:GuTk/"n%o jʫ)KbZ ?B`l&Nœbⱸ/ $Iȃ!rһR ~_oTѯbGcgb rbfwGW5LYvŸ Oo%6|<ٍ?_'jb$d YO:nЯ1<_>wbűƾ+S4EB4 b/\kitN>vԋ* Vkŷx.~브ADGLN tHt:N:K?u8#WōCks;n]S~5/ ˅B?'k;@f é}>  .Yxk!J5崊4Gi݂n-1ݍ>I@;27wC EW(L }TfMFC^MP Ix2+9YmA Ͱ[DŽedF22T?/#xڤ(?Umt{r\~F.'@rw7+•m]Ypȡd#Ta4e(X4[aG}-u*mO#AxGV0Tz2B3Y0mi f,]F-mfb͠0UvUCOqYZ@mBKV66~$Sn|O5s2o[׼f .m YeFu ݖEde6//gݖuˋ=;rSA>a0wvϔ_dGu$9F Ӝ  q-hǑkWޭXM7wiG` vfoomio|گd0nYngff1<\14 6O `MfN E]~6Fple;JݙL (eg+͕LV]qܕ6&'՘o:;F@q<'=n]yO\nAR]äpG-*o.kmlQyqҡ ]:]] ^ODWx=ІPC!QBdx@tM_Spos`[(Sx俉E߅£0%s1BMހmmHpٿc ˿+0•spշPxܿ xM.N}[(\8(JC"Y|aHX kK%5<ڄ$lfco i# Gq:BsaݟD뗟?yG1/^?/}7z:uW~pl` RN NSQ'SD&HKV |Ȓ`φq0\b60&y]?}\΍4'?-Wx̌}b%(yх^I'jA79c2.H^Lu )Z3I7RQJeUxKR.k}IV2iIy oc^& MEM*6Aj>M @" .s*GB>R|H 2)9i$pfzo23@/oe߽.c itYّZoq??ٶwע~k7r쾌NjL@q.2#"b*@x[C&X"% @TĂD({j dQ_ǩǖ3pel_ZEVuyN` t^ /\>d4nkgK+Dy evFz)qT"vby4,Ce\aQLG`5|#@I+@ɤ6$EiG:/y1ʌ SN+ p-bѠPngwn=δ)?]~7l_\I|c<^KbILݫtXͱa9㊆^P3SX`^ɬ1HM;*5RRS0dG(7*CKIJՙ}q/͚!_%/%ϼ [%ׁ>ƘWдHbMZ΅$',i&@YrƧKؑ@69[8@*T8bɐjh4= 1ɦd s?>, 3zMS18jF`ͼ _>Ikأyw] oV| D_n_\V{K2}oj/ݹ9)sN]}o͓E9O YD"$w:>.X$j\qUU[>3;ս]_^ʖ=ꌵ®DGQn]2)T&B*42=+*(UӊE^|1UЪ$;X|Z=B^%**KJ13:O &?7~-K}Vi/I&"M{{ԙdaI+aLAÅdvLv<ؓF:L $:[7ʬ58Z4B&wQcpA>]gA e ##fq==m f1F?UQʱL>SoJOVx ǎlzwZvA`ϙK欻'׿zs&{ +B7T=U^M—~5OD C4EJt:ӡRmf ҁ 9$%y"O֐L=>YP& ?+!1&?NR8@,PJl$):)`Ɖ$/}ů6#h;nS?:ɟSͤhoj4.֬^v_i~yS z}ټSm%VaMLڀYʀbZgoՒޢ"R*!S~I,mdF6R%'6Da6ۈ&@TRQā~.ɇi/}|g>n]\m\ҶOW?i\pTFבB`(J3Ue}$:Hr8$%qT|vR6[]tuz >0x(ofB06`nvH&a2waVz&޲ FzLlΦ|e۶?j;=W>:ӟ@lـORY'>-$=oᢼ$Fh4! ~},}WuFwFOxOjdGj ]T:U>q}ΗZio fx߳=. '{34 '7/YZ*<%8B<'k-'})T?x?v:&яTF'hV4Hf-$M=nZIH/jB K FmTtNpd^{KMOݑk/ޞ7ymFͿ.U䱗Iǿªuuv-9"eQCh1=wH8#N0CD jb0kbAYV+RV;6-bW} nCaqT]N=w]<] e;8eVfJH.hn߻,p8 {D-2 l6jO~)mJHg/40GI,zEX$h)F Jw3`m$:Ǣ J|a-$R2!T 3T$T=Pd$@Z6<>[;k7܈WX{a Nܾqs7\3/#q=ڣwr>KB&&:0aWhHlMUE $ZТMJ,g'os~dɐ`ƏI<#fW2+23d|l?S[%oU9Z40tF-ٲtrnq_q<2u;ݿv\ZI0Ǘ739WuL5COA8N#iFSCR&af[!>)+`a-A)=w Yd1L%W1z/ovhmUR9\[ܷG 7zzb3Qaqs z*=UU)SS&,մ{.-owL`rY\vm&٘eNKT͕B$($[vG9drDFKDɱiL_ Y4v d[r$P!H %6ݢH=uq*%OYoܣqy>[{ %lS<ȓIJJ=*$NbFE g D$,IC 6[kHHP̢ O2VY8Ȑ}5 {T%L 16G ,,W|x57}=w؜_gl_a;h_xqtO^M> AG.=.ç1AsPisNn$|G*j wƥݟ"ju Fb {`ws!J &}!V8!RJPJY̬>?CSf_)^YƄIKC>dG/(Lny83xsOEmA\EI G SODfvPyAIݡUnWTKZ|o礷T8OA %> endobj 143 0 obj [ 584 0 584 0 0 667 0 722 0 667 0 778 0 0 0 0 0 0 722 778 0 0 0 667 611 0 0 0 0 0 0 0 0 0 0 556 0 556 556 500 556 556 0 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 0 0 500 ] endobj 60 0 obj << /Type /Font /Subtype /TrueType /BaseFont /QPGNYP+Helvetica /FontDescriptor 142 0 R /Widths 143 0 R /FirstChar 60 /LastChar 122 /Encoding /MacRomanEncoding >> endobj 144 0 obj (Mac OS X 10.6.8 Quartz PDFContext) endobj 145 0 obj (D:20110902220048Z00'00') endobj 1 0 obj << /Producer 144 0 R /CreationDate 145 0 R /ModDate 145 0 R >> endobj xref 0 146 0000000000 65535 f 0000054775 00000 n 0000003455 00000 n 0000044903 00000 n 0000000022 00000 n 0000003435 00000 n 0000003559 00000 n 0000035069 00000 n 0000009556 00000 n 0000009847 00000 n 0000009865 00000 n 0000007119 00000 n 0000007411 00000 n 0000007430 00000 n 0000004299 00000 n 0000004591 00000 n 0000004610 00000 n 0000005102 00000 n 0000005388 00000 n 0000005407 00000 n 0000005498 00000 n 0000005790 00000 n 0000005809 00000 n 0000009148 00000 n 0000009445 00000 n 0000009464 00000 n 0000003896 00000 n 0000004189 00000 n 0000004208 00000 n 0000008744 00000 n 0000009037 00000 n 0000009056 00000 n 0000007521 00000 n 0000007813 00000 n 0000007832 00000 n 0000004701 00000 n 0000004992 00000 n 0000005011 00000 n 0000009957 00000 n 0000010255 00000 n 0000010274 00000 n 0000007924 00000 n 0000008220 00000 n 0000008239 00000 n 0000010366 00000 n 0000010664 00000 n 0000010683 00000 n 0000006713 00000 n 0000007009 00000 n 0000007028 00000 n 0000005900 00000 n 0000006196 00000 n 0000006215 00000 n 0000006306 00000 n 0000006603 00000 n 0000006622 00000 n 0000008331 00000 n 0000008633 00000 n 0000008652 00000 n 0000035969 00000 n 0000054502 00000 n 0000012334 00000 n 0000012668 00000 n 0000014170 00000 n 0000014443 00000 n 0000013879 00000 n 0000014151 00000 n 0000011064 00000 n 0000011367 00000 n 0000011387 00000 n 0000011730 00000 n 0000012688 00000 n 0000012954 00000 n 0000015165 00000 n 0000015431 00000 n 0000010775 00000 n 0000011045 00000 n 0000013297 00000 n 0000013569 00000 n 0000012973 00000 n 0000013277 00000 n 0000015450 00000 n 0000015755 00000 n 0000014462 00000 n 0000014821 00000 n 0000011750 00000 n 0000012023 00000 n 0000015775 00000 n 0000016019 00000 n 0000012042 00000 n 0000012315 00000 n 0000014841 00000 n 0000015145 00000 n 0000013588 00000 n 0000013860 00000 n 0000044865 00000 n 0000032051 00000 n 0000032863 00000 n 0000019258 00000 n 0000020832 00000 n 0000042087 00000 n 0000024542 00000 n 0000025411 00000 n 0000018454 00000 n 0000019237 00000 n 0000016818 00000 n 0000017601 00000 n 0000020853 00000 n 0000022130 00000 n 0000023754 00000 n 0000024521 00000 n 0000028039 00000 n 0000029615 00000 n 0000031247 00000 n 0000032030 00000 n 0000017622 00000 n 0000018433 00000 n 0000022956 00000 n 0000023733 00000 n 0000022152 00000 n 0000022935 00000 n 0000032883 00000 n 0000034216 00000 n 0000029637 00000 n 0000031225 00000 n 0000016038 00000 n 0000016797 00000 n 0000025432 00000 n 0000027021 00000 n 0000027043 00000 n 0000028018 00000 n 0000034238 00000 n 0000035048 00000 n 0000035106 00000 n 0000035948 00000 n 0000036007 00000 n 0000042065 00000 n 0000042126 00000 n 0000044843 00000 n 0000044986 00000 n 0000045051 00000 n 0000054027 00000 n 0000054049 00000 n 0000054291 00000 n 0000054679 00000 n 0000054732 00000 n trailer << /Size 146 /Root 139 0 R /Info 1 0 R /ID [ ] >> startxref 54853 %%EOF 1 0 obj <> endobj xref 1 1 0000057934 00000 n trailer < ] /Info 1 0 R /Prev 54853 /Root 139 0 R /Size 146>> startxref 58113 %%EOF openscad-2013.01+dfsg.orig/doc/contributor_copyright.txt0000644000175000017500000000044612013171370022677 0ustar chrysnchrysnWE the undersigned contributors, grant perpetual license for the original authors of OpenSCAD, Marius Kintel and Clifford Wolf, to change the license under which the code we have contributed to OpenSCAD is released, in future versions of OpenSCAD. Don Bright 2012 openscad-2013.01+dfsg.orig/doc/visitor-changes.txt0000644000175000017500000000072611640436732021356 0ustar chrysnchrysnChanges in visitor branch: o import_dxf(): layername="" imports all layers. Importing a single layer with a zero-length name is no longer supported. FIXME: The same prob. goes for dims o cylinder(): the r parameter will now always be used in place of a missing r1 or r2 o for(): - with scalar argument now works, e.g.: for (i=23) echo(i) - empty for loop is not evaluated, e.g. for () echo(i) - for loop with illegal value is not evaluated, e.g. for ([0:true:2]) openscad-2013.01+dfsg.orig/doc/OpenSCAD-compile.pdf0000644000175000017500000044534411640436732021176 0ustar chrysnchrysn%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x՝[,qSti̳O[d IpyA$Bw/U=3;0p;򯬬?O>tӇk?<' ӹ=wS+{]o㺯nhcU>UsuTzvSu{;[@sxŷ;u]W3Z_swM5栯95RVs 5CaZjk͇]{zʧO>կ|j?W)kԞ<=On?/0D>EB`N&0[ƉVfZΧ}zng-_M-vhg^u}~><Ͼ}oo7xNݻwo޴~o>San^ap/|o~#<:⾿h7O>?oi_g_Ɲx|/_z=lrLƛ>,/q|A K}!eG䊬c_3{A,|hQW1|S/Ĭ-f\ 'bϛ|!ݿ2x{{ӺA\m0~: xC/E7+ozXm{|ԦK|{^[')\dNނ z d|vAמ D9Xuj%[OB0yy&jҸ5,{qT*Ο^MY_(TF\T :'uۀ#_wv<` qv+D {$oŝ߾iN>Rxʇpk7󴙽"48k *F%G Iw-ogÏ˹#XkO&s;!?QTtE9M[>r>uyO=F`؝:CiOQLz -#GT1>^qgةmV~ȱ] S' #-4L˸0ZcK/422IѸQh:AE qֳ57Awf%W ^ e>~B~~i 蜒~Cq*B{UBw:>1흼,1PPc)(4NU%!L7%iުrRrWqJ٤$EJl!Gs9R*sHR@/#$J ,o&ĔS'Cp&]paQ$19CNn}\兘 e{NgNduhި6G!Ʃ[[:!F, kض%*U .(8LGV#ER=7խWG|U(skwBە]JgjLWٴJ;ޖGL(V0l(vpF/f lwpR[I>"[Hk$-H\9g&1Yc9O4[N1O+h| fT7/۷e݇Oj#Vvr: iJu 8^ q0gN\9E jhG}@.F#B],>;۩QLM hHR.q{q*x@]z, "R&L^j'G70  NP"S>¤5U )^V2 YX(j7ʖpaSrl.|911SͩYIBX%i q% HQ˛yuaszB"r2\.Ʒ[60谹Yh>mw6ָv67݌umVt6ׅmn\˰wn J[uznsO)Je;Ne7 `i &z} 51q[d{!`ns4ܬ'6mܐ!]6׈bs\lK'6 XB5zUnBy 㙀\DAGI bO"MQ{HTxeȢ@|CwDЙRl$NȦ? yrARVoو5xnD':z'L#b~k_t2zFev ӊX@ayuJxSD,'^ۡ :Ѡ\A1pkw^[Bb0Zk8+ ^#׷% sl1g*KgN3T ݩk~>iU2 'Y жhW͉ZgBNٱeФذyYCz}5+3}TqE MXWe/u,v^Y>Z&ʉ,ZG+lx(/ B2z&ObP-R |Hˉ5,d%!~TX}\ą:R?jGTgD1YA"5Ǣm$*^f>E󍓈o0`KC+!,9)/my['~lf`o9*&]# BiPd@&fʼ&y'ys33O EUN+iMo9zEVr&U'UA[$+ʪ^CDR;_z/?krw 2ۻTن/B c^+xBM)}hhH gA]SgF|T&y:( vqT5϶dz DaQ t2ڡ3#y#o"u %"lK袓7L,BTƩc#Cģ* m~&TVEKEF jCsךgl1;\ vj> mz>n@5TP#t{ӂU a@$ *d_dDI*A8ܚ.I IcFWFЋ{:9M5mbTٳΫ,T +FB&@ZҡXnIgr5&"?0=#D:4@lഄQcF4S(ֹӼ-©'^}sμ /pdKvV#nCDTI2>T~?IJP_r쁑PQEұ5klҸQ;7ZdFf4 )Wڙ7%o/YXƕ5 v :U؏|U&y,$0Ǿ ^l.}n+kCt.j?0|;1&>E0\M1 G/ˬT5hZށM[N?buX.qYk%"AKe8Qɟ&VL6 "R6in7E+ ٍM_w$֢^'2adB*i^$3IAה+,|#oDINɕ!)/\[M i`@x ~ &#&asJ@}/\dtx݋E|h3+2f_@l,-8`X*IL8Ŝ dۿLz*nVw~NY[;$\眥+aD?2x_wgzl~f̹I)):3OLl.Z7g Al- ?4enJ~}fn=uI:2ӥhE)u9%JX{mg #bDW2l$9QjN)H|(۔`RV OѬ 6 Hl fgj5K6F{?b?#c@vʻ+w} c~zc+_e'~xIyOx(ePQ^-.dd~Vo RWld \Xɪ(W{| &o׏Q.zd-pA^2dgϛձ\Gj\]X%HnZ!MP"̧Cѵ'̏iC#)BT,7ڮ^yw!W0<+#;+Yy3O>ek~::4'j-ӚAjqAܟ,֜M[%XHknD(WUJ`&ђSދ+sJ [Jܥ#&9(ҩrS`dW*v% AB K Q8F Eܣvʻ %P\ {@P^ $'ϫ> Ցv*&[Ӑ9~u{eø &Z{R"*UCKf8!2Hg,D?FJ@,,q{+1uNI T$sf ;U?4R[rJzAPrJEe?Uu1[ǀ i%Gt$G6DfDY& R _!XBH c҃^kze}Dž Mim;\ Y`G&v߽Bs^΂NFzDA1pVUGoBṴ{Dx^%jad+wʅ)̦TT1V]µG"0vVVK.J5"ʭ}e)a3adv%.{%pʭK]jIw[;&־YО.S4fH[J> |^ I1<4A˛-%8rơ8~vY+eMb5+$,xט &8I.^bEKy kQ r[6c'C&ޫDKLz%G2#'%.RGoFtqO h'|3z&oLTﳆtU0'#vʸ4*ޒ^{&wd{FyoFEz$Qи 6>+lMr⠰3$(oC}ޗT{ybARxvJs(بR5.fY+n$VYJE'k:\JհrJ;."ʲ/Pmt{G d.Oψ~jڔEJBRe OhJi*UW^"4{Kz](QXfEdUźUьoR'1нGqW6)Eh!Hwl\es)ӫW+ 5lL8ed@Қ]Ii®5XmUt!C.K1+i8E. aVs>;-wuWkDp5>jvY Tr+jɺg_z;lA: W%'Kg:r;XlWdlWX()DvρmC v4l'o;ɪNp8.}HS&ZKH*|;.V]'^bR%¡7$[%,$`]۽Mz DG޹;ķ7>n ^ɀaCx]@{l ymcu`NǸ&q'u1nj2p-_0nHCU|{#M#jF9:jfU]4*E٩#v(E!]uM~"{c], %:bAvcԨOk}'M5qJm9x`$: 6ut*0 taQ"^H5uL,부R^N[jI^ʙ/Jv ^C?5O{`= +8.w ]_f_caU/*q''SȼJu(cLiMԵNS0fX OaLoW _֫LTMq V詑>3j49NTY%IHكfr[ ?`^z 3%և|ĥfY 4XQvxQvY3!ɥ39v:.G8L=q3dgf`ww8hK4]h:Є;A{4ڑ+S)FҬv{Q`*f,wʿ̓㸪,%\"W;E]VtWKM=G|MHcM3ِ|Ӳ BHm|D/5N9],w=Ɯ̾foFH=s`zf=zƁD=I:3/Pe*S-cv'VȜhg*-%mriNr{iN5rӐIsl$቏[O쩔[qQ1t]uǞҴ6BĘЮ13YO)M+gI |oHψ%Ik[$ x ʭ3;? 28 x>lu(_) a,vHDV씧Q+Y ެCYg\DKFE SAXnG@l EyH[syDw> [rRx>hؖ};_<w][_1U>>ZkvvsF{|-i[9K_[95k˯0oųPqb•W\dE ފ-a{حA9$H4V#/aIyt^2E S j,ų"o67 R9/}kTB_d%Eμ$|tN8u)V$MݟðD%%=x7^ DH"'Hғ3J`*Z%.Xγ(بz{:H(g?.s|}v‘7zJ_Qy9P#3JRUA)Iݿmu >돳X@ (aQڻC2Jʐz&SaIw{= "c槕\g~Ͻj>8u&S az^rhVq^K[7.v{g^)lHxFg{8F;R_]'X'1hZ[+q1וqw腑g^7(=ͭyfgc(~*R.r!D 5zGf9&j\0>/<"iIyhFOҖ8*:BZa*sF}ϑ-r ]ఴ-=E tcߔHzL\!+€,u3LH^P ck⼬%^lF)N%FG P3jR3F/0A쇏vXNȭ{ЋE'+[ $ 9jnn׏^نuEEl_עs"@?Q[ ~/Ico= )9K7]( hbl:@8*h2|4qږ(`"JȶNVCHD.R杼nE|b|`n7dKei6H_WJ!1 A(m"fY'1rǑsTivL.&x5Wy:o9P{"Kj.zwd妟YU7-+f%nz 3Uo9 P(Ltq #߬L=IY_e9#J(_3kCFДO:ߗ""˹Dٲ+{̀(l>>{/crOgl/GOf`妋5o.K%]ȽHe:!wKz໑ęE+p,s’ K`e3_`|:6DlK?rSFr1 0(CzPQk9,NǸ̻cIcdR'EmES^5IłjN_Uq3RBy[{F؟o;@Q~4<`/MN<)矲8ڼ}l Xl K1#Yid.Xvj5iY?df5Nvkw4C񮴏<((`l>%g2V샡, s%v}S221^Y2fr=J0y+_w| bDE^7z9T̺<IG}MIo8 ưgyl[cx!hyz]gCr ;3K8 E9Qw DN-Jo:ߍ+ȷ45#GUjh;a `E(R:L)G^izk>SmPOY#VX|&$]FnK 3.Nv)=~Q@/^*NuIM*Lg0߻~6qHa*Q*q<+G}UetLTeX@C |})m-IEvy'լp3ιZv;7ްb_xkZL5R)2!;'ήgk4D~dd=~+Hr7(c^$9 y5yf=+ -|C7qJ@3;}(. dJZNGSc49۷0=LX"!j)S?'YfWM ns 9?1'8;/_癣ʲy\FZ|Ow2۬b^ÌC^ʚw %F",2i7SEW@P ѽugǂ֢/VW㶕Yt,?3{HN|k9}_|aB}G>/sEfJD`,eJD$Ҥ0rCZO1g( v㏥0'dHECu >בj^B={TJ ϵWWȞm88$rgB;"PPBG i62<`ҷ7I:E+qCR\eC#Iع<>L%f;ykW7qc,qXKb3U7Y=}DŽ?ȣ;|& CA2+=w!YM2?S,;h6 X&MPjK کϭJv- W rb~i}QU$qagq endstream endobj 5 0 obj 10973 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 1358 815] >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 113 0 R >> /Font << /F1.0 114 0 R /F2.0 115 0 R >> /XObject << /Fm6 23 0 R /Fm24 77 0 R /Fm13 44 0 R /Fm32 101 0 R /Fm23 74 0 R /Fm21 68 0 R /Fm31 98 0 R /Fm4 17 0 R /Fm9 32 0 R /Fm5 20 0 R /Fm3 14 0 R /Fm18 59 0 R /Fm19 62 0 R /Fm25 80 0 R /Fm34 107 0 R /Fm8 29 0 R /Fm28 89 0 R /Fm20 65 0 R /Fm35 110 0 R /Fm10 35 0 R /Fm26 83 0 R /Fm2 11 0 R /Fm1 8 0 R /Fm11 38 0 R /Fm17 56 0 R /Fm12 41 0 R /Fm14 47 0 R /Fm15 50 0 R /Fm7 26 0 R /Fm33 104 0 R /Fm22 71 0 R /Fm30 95 0 R /Fm29 92 0 R /Fm27 86 0 R /Fm16 53 0 R >> >> endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [553 0 643 57] /Resources 25 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T055V0P4P05W(JUWSH-JN-()MQ(*ֳ4s=s \  endstream endobj 24 0 obj 75 endobj 25 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im1 116 0 R >> >> endobj 77 0 obj << /Length 78 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1084 292 1223 349] /Resources 79 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T040Q04R04T05W(JUWSH-JN-()MQ(J!P \KrgK>Ш@#6 endstream endobj 78 0 obj 74 endobj 79 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im2 118 0 R >> >> endobj 44 0 obj << /Length 45 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [299 180 466 238] /Resources 46 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T0T00P043W0P(JUWSH-JN-()MQ(*343S0BSs= &=##\}\c.|qv: endstream endobj 45 0 obj 84 endobj 46 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im3 120 0 R >> >> endobj 101 0 obj << /Length 102 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [598 718 737 776] /Resources 103 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T0P07P04T0P(JUWSH-JN-()MQ(*34P0BSs=K#&=C3Cs\.}\|& endstream endobj 102 0 obj 86 endobj 103 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im4 122 0 R >> >> endobj 74 0 obj << /Length 75 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [943 180 1082 238] /Resources 76 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T41V00P04T0P(JUWSH-JN-()MQ(*I9LBrg)K>Ь@9 endstream endobj 75 0 obj 77 endobj 76 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im5 124 0 R >> >> endobj 68 0 obj << /Length 69 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [943 292 1082 349] /Resources 70 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T41V04R04T05W(JUWSH-JN-()MQ(*I!P LGrgK>WB V endstream endobj 69 0 obj 74 endobj 70 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im6 126 0 R >> >> endobj 98 0 obj << /Length 99 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [600 533 730 590] /Resources 100 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T030P056V04 E y Eɩ%9 E@e i*HU5Wp TD- endstream endobj 99 0 obj 72 endobj 100 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im7 128 0 R >> >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [473 0 563 57] /Resources 19 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T017V0P4P05W(JUWSH-JN-()MQ(*31s=s-\; endstream endobj 18 0 obj 75 endobj 19 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im8 130 0 R >> >> endobj 32 0 obj << /Length 33 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [211 252 318 309] /Resources 34 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T024T025R040W05W(JUWSH-JN-()MQ(*340S0B= \}\K.|Y3> endstream endobj 33 0 obj 80 endobj 34 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im9 132 0 R >> >> endobj 20 0 obj << /Length 21 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [553 48 643 106] /Resources 22 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T055V0P4P0P(JUWSH-JN-()MQ(*T0BSsr=K#=# c\}\C.|q{~ endstream endobj 21 0 obj 85 endobj 22 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im10 134 0 R >> >> endobj 14 0 obj << /Length 15 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [473 48 563 106] /Resources 16 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T017V0P4P0P(JUWSH-JN-()MQ(*T0BSsr=#=# c\}\CC.|q{p| endstream endobj 15 0 obj 85 endobj 16 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im11 136 0 R >> >> endobj 59 0 obj << /Length 60 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [802 292 941 349] /Resources 61 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T00R04R04T05W(JUWSH-JN-()MQ(*I!P LGrgK>WB w endstream endobj 60 0 obj 75 endobj 61 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im12 138 0 R >> >> endobj 62 0 obj << /Length 63 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [802 236 941 294] /Resources 64 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T00R026S04T0P(JUWSH-JN-()MQ(*I9LBrg1K>а@K endstream endobj 63 0 obj 78 endobj 64 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im13 140 0 R >> >> endobj 80 0 obj << /Length 81 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1084 236 1223 294] /Resources 82 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T040Q026S04T0P(JUWSH-JN-()MQ(J9\Brg K>и@p'l endstream endobj 81 0 obj 79 endobj 82 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im14 142 0 R >> >> endobj 107 0 obj << /Length 108 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1107 689 1238 790] /Resources 109 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T0440W0T046T040T(JUWSH-JN-()MQ()C5+$r{* ;$ endstream endobj 108 0 obj 84 endobj 109 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im15 144 0 R >> >> endobj 29 0 obj << /Length 30 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [634 0 724 57] /Resources 31 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T036Q0P4P05W(JUWSH-JN-()MQ(*31s=s \a endstream endobj 30 0 obj 76 endobj 31 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im16 146 0 R >> >> endobj 89 0 obj << /Length 90 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [536 476 666 533] /Resources 91 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T056S017S046P05W(JUWSH-JN-()MQ(*I P LGrgK>WB Az endstream endobj 90 0 obj 74 endobj 91 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im17 148 0 R >> >> endobj 65 0 obj << /Length 66 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [802 180 941 238] /Resources 67 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T00R00P04T0P(JUWSH-JN-()MQ(*I9LBrgK>а@K1 endstream endobj 66 0 obj 78 endobj 67 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im18 150 0 R >> >> endobj 110 0 obj << /Length 111 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1179 532 1358 663] /Resources 112 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T044T056RцƆ E y Eɩ%9 E @y 44b&=C \.}\CK| endstream endobj 111 0 obj 79 endobj 112 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im19 152 0 R >> >> endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [141 169 258 227] /Resources 37 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T041T04T044W0P(JUWSH-JN-()MQ()J9LBrgK>Ь@7B endstream endobj 36 0 obj 77 endobj 37 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im20 154 0 R >> >> endobj 83 0 obj << /Length 84 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1084 180 1223 238] /Resources 85 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T040Q00P04T0P(JUWSH-JN-()MQ(J9\Brg!K>и@oh endstream endobj 84 0 obj 79 endobj 85 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im21 156 0 R >> >> endobj 11 0 obj << /Length 12 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [400 48 482 106] /Resources 13 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T010P0P0R0P(JUWSH-JN-()MQ(*0T0BSsr=K#=# c\}\##.|qvh endstream endobj 12 0 obj 85 endobj 13 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im22 158 0 R >> >> endobj 8 0 obj << /Length 9 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [515 118 682 175] /Resources 10 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T054U04P043W05W(JUWSH-JN-()MQ(*343S0B=K#\}\#c.|aLs endstream endobj 9 0 obj 81 endobj 10 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im23 160 0 R >> >> endobj 38 0 obj << /Length 39 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [267 114 384 172] /Resources 40 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T023W044bsS Tp<ԢԂL2t*$*{p Jw endstream endobj 39 0 obj 77 endobj 40 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im24 162 0 R >> >> endobj 56 0 obj << /Length 57 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [670 292 800 349] /Resources 58 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T037P04R046P05W(JUWSH-JN-()MQ(*I P LGrgK>WB o endstream endobj 57 0 obj 74 endobj 58 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im25 164 0 R >> >> endobj 41 0 obj << /Length 42 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [377 114 495 172] /Resources 43 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T067W044b S Tp<ԢԂL2CCs 453i32UHU52r{ endstream endobj 42 0 obj 84 endobj 43 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im26 166 0 R >> >> endobj 47 0 obj << /Length 48 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [876 476 1006 533] /Resources 49 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T07S0bCcSsTp<ԢԂL24t$*{+s* endstream endobj 48 0 obj 73 endobj 49 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im27 168 0 R >> >> endobj 50 0 obj << /Length 51 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [876 417 1006 474] /Resources 52 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T07S014W046P05W(JUWSH-JN-()MQ(*I P LGrgK>WB : endstream endobj 51 0 obj 74 endobj 52 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im28 170 0 R >> >> endobj 26 0 obj << /Length 27 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [634 48 724 106] /Resources 28 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T036Q0P4P0P(JUWSH-JN-()MQ(*T0BSsr=#=# c\}\#K.|q{P endstream endobj 27 0 obj 85 endobj 28 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im29 172 0 R >> >> endobj 104 0 obj << /Length 105 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [670 618 800 676] /Resources 106 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T037P03P046P0P(JUWSH-JN-()MQ(*I9LBrgK>д@^< endstream endobj 105 0 obj 78 endobj 106 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im30 174 0 R >> >> endobj 71 0 obj << /Length 72 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [943 236 1082 294] /Resources 73 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T41V026S04T0P(JUWSH-JN-()MQ(*I9LBrg!K>а@M endstream endobj 72 0 obj 78 endobj 73 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im31 176 0 R >> >> endobj 95 0 obj << /Length 96 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [528 618 667 676] /Resources 97 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T05P03P04T0P(JUWSH-JN-()MQ(*34P0BSs=K#&=S C\.}\c#|i endstream endobj 96 0 obj 86 endobj 97 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im32 178 0 R >> >> endobj 92 0 obj << /Length 93 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [467 533 605 590] /Resources 94 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T013W056V04P05W(JUWSH-JN-()MQ(*I!P LGrg.PK>WB E endstream endobj 93 0 obj 74 endobj 94 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im33 180 0 R >> >> endobj 86 0 obj << /Length 87 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [408 476 538 533] /Resources 88 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T01P017S046P05W(JUWSH-JN-()MQ(*I P LGrgK>WB yu endstream endobj 87 0 obj 74 endobj 88 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im34 182 0 R >> >> endobj 53 0 obj << /Length 54 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [876 358 1006 415] /Resources 55 0 R /Group << /S /Transparency /CS 113 0 R /I true /K false >> >> stream x+TT(T07S06P046P05W(JUWSH-JN-()MQ(*I P LGrgK>WB  endstream endobj 54 0 obj 74 endobj 55 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im35 184 0 R >> >> endobj 148 0 obj << /Length 149 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 186 0 R /SMask 187 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 149 0 obj 121 endobj 118 0 obj << /Length 119 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 186 0 R /SMask 189 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 119 0 obj 127 endobj 158 0 obj << /Length 159 0 R /Type /XObject /Subtype /Image /Width 81 /Height 57 /ColorSpace 186 0 R /SMask 191 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0`g6 endstream endobj 159 0 obj 84 endobj 156 0 obj << /Length 157 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 186 0 R /SMask 193 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 157 0 obj 127 endobj 132 0 obj << /Length 133 0 R /Type /XObject /Subtype /Image /Width 106 /Height 57 /ColorSpace 186 0 R /SMask 195 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om_@a 0` 0` 0` 0` 0` 0` 0` 0`ށF endstream endobj 133 0 obj 103 endobj 120 0 obj << /Length 121 0 R /Type /XObject /Subtype /Image /Width 166 /Height 57 /ColorSpace 186 0 R /SMask 197 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  O( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`n endstream endobj 121 0 obj 147 endobj 176 0 obj << /Length 177 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 186 0 R /SMask 199 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 177 0 obj 127 endobj 170 0 obj << /Length 171 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 186 0 R /SMask 201 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 171 0 obj 121 endobj 144 0 obj << /Length 145 0 R /Type /XObject /Subtype /Image /Width 131 /Height 100 /ColorSpace 186 0 R /SMask 203 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`   endstream endobj 145 0 obj 195 endobj 164 0 obj << /Length 165 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 186 0 R /SMask 205 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 165 0 obj 121 endobj 180 0 obj << /Length 181 0 R /Type /XObject /Subtype /Image /Width 138 /Height 57 /ColorSpace 186 0 R /SMask 207 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`g`\. endstream endobj 181 0 obj 126 endobj 138 0 obj << /Length 139 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 186 0 R /SMask 209 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 139 0 obj 127 endobj 130 0 obj << /Length 131 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace 186 0 R /SMask 211 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0`z`;s endstream endobj 131 0 obj 88 endobj 160 0 obj << /Length 161 0 R /Type /XObject /Subtype /Image /Width 166 /Height 57 /ColorSpace 213 0 R /SMask 214 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  O( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`n endstream endobj 161 0 obj 147 endobj 136 0 obj << /Length 137 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace 213 0 R /SMask 216 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0`z`;s endstream endobj 137 0 obj 88 endobj 140 0 obj << /Length 141 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 213 0 R /SMask 218 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 141 0 obj 127 endobj 124 0 obj << /Length 125 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 213 0 R /SMask 220 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 125 0 obj 127 endobj 126 0 obj << /Length 127 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 213 0 R /SMask 222 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 127 0 obj 127 endobj 184 0 obj << /Length 185 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 213 0 R /SMask 224 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 185 0 obj 121 endobj 174 0 obj << /Length 175 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 186 0 R /SMask 226 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 175 0 obj 121 endobj 168 0 obj << /Length 169 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 213 0 R /SMask 228 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 169 0 obj 121 endobj 152 0 obj << /Length 153 0 R /Type /XObject /Subtype /Image /Width 179 /Height 130 /ColorSpace 213 0 R /SMask 230 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` endstream endobj 153 0 obj 328 endobj 154 0 obj << /Length 155 0 R /Type /XObject /Subtype /Image /Width 117 /Height 57 /ColorSpace 213 0 R /SMask 232 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0`GN' endstream endobj 155 0 obj 111 endobj 166 0 obj << /Length 167 0 R /Type /XObject /Subtype /Image /Width 117 /Height 57 /ColorSpace 213 0 R /SMask 234 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0`GN' endstream endobj 167 0 obj 111 endobj 128 0 obj << /Length 129 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 186 0 R /SMask 236 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 129 0 obj 121 endobj 178 0 obj << /Length 179 0 R /Type /XObject /Subtype /Image /Width 138 /Height 57 /ColorSpace 213 0 R /SMask 238 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`g`\. endstream endobj 179 0 obj 126 endobj 172 0 obj << /Length 173 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace 186 0 R /SMask 240 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0`z`;s endstream endobj 173 0 obj 88 endobj 134 0 obj << /Length 135 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace 186 0 R /SMask 242 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0`z`;s endstream endobj 135 0 obj 88 endobj 162 0 obj << /Length 163 0 R /Type /XObject /Subtype /Image /Width 117 /Height 57 /ColorSpace 186 0 R /SMask 244 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0`GN' endstream endobj 163 0 obj 111 endobj 142 0 obj << /Length 143 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 213 0 R /SMask 246 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 143 0 obj 127 endobj 150 0 obj << /Length 151 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace 186 0 R /SMask 248 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`30\ endstream endobj 151 0 obj 127 endobj 116 0 obj << /Length 117 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace 213 0 R /SMask 250 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0`z`;s endstream endobj 117 0 obj 88 endobj 122 0 obj << /Length 123 0 R /Type /XObject /Subtype /Image /Width 138 /Height 57 /ColorSpace 213 0 R /SMask 252 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`g`\. endstream endobj 123 0 obj 126 endobj 146 0 obj << /Length 147 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace 213 0 R /SMask 254 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0`z`;s endstream endobj 147 0 obj 88 endobj 182 0 obj << /Length 183 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace 213 0 R /SMask 256 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàS_Pa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`ށV endstream endobj 183 0 obj 121 endobj 203 0 obj << /Length 204 0 R /Type /XObject /Subtype /Image /Width 131 /Height 100 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xKpݯ5LBQD0Txi$C@k1/dxIf úhUa˅nLxƵ@b0ekF<9ūίe3Z$(g(NRTPkuUF}Z hreX=«=[(細WD0h*_kKf4ëƾڭZ> l2!׋u۳o'^ͦ[5E=,ql '?OֱQJ_D94ghxūtdlBQIp> stream x\W] B -  ^5A4D:AJ0H@0;_{s&oQnٹ3wgonOYzj팞F hVcSS3s17355622nkh,,I6d-U- dia "`F&lkGspr#qsӝhT[2AljneMsp3}XAA,Vӝ`gk n@M-Hd;G|'{% r;S-̌n> `30$ˋOJ}OHOIqC.4[k S0L< =?^@Ʀd;gwV(~LXexA~tdnCaLLLL+9'0,2.5#'7uYQm]}CCCZQueYqa~nNx^8lG43A~ҊD8Db k3#vdQދJѻ-m]nwʒg9IQA>nTkhI6= f~ŚyB|1GlfIsŕM:|t dTixhO& .)d$ݻ;P)hN. //o//ّF%,͑U,7Sp V6T'wf(/9YquC60,_X\T(f'FQic~`&Íh>LV;$ۡ!l3B Q8 7$7+ݝ5R1?56 =1pԴ̬G9O>~~L;nLjv~Y]ldr~Ypxt|| lm*G;ŢB))Gťee_{O c3E1`s0[?v'1!(jYRm`߾n)?Z꫊ _WoH$M uWOQ`= F_4lE:2X!w" %&܇!((N̯l^?wTyQ-H;ZD'dabtQHŦܼ&={0eqYM2E!AjlGm$.YЧϓH>O_n4Ԕo cy`Ì9giEUۺ0խ'5xjH @?3%%ebanpITB uw [A_6=!ܸYO +q%-mm]=yīcZ[QMZg/67T+ˋvD(5*"b"qbR E .Yo048 djê̇;*Prnm7<88<<<8 -/LqX '[үcF((%=+kn443 2U m?0#߱ E<̷oׯLJ{;k+3ݒ#_gɓuۋ:Ig$Pmlፈoĸ? }p Fڗ瑦זg2IGIwyj08/ɅmH#8[G8,`w]9 0 `$+N|VAusϧi{/h{; aaW ӣC'4&CX)4\zKӾGh0<3"m(}eۓQ53ރ& {b ;ϩ חk|S%$=.~1aK{0mL tꛐhLY0si:>pkefԻL:\g4 ;% {jc>U}rZ`Tz/|: JFw_j+~?[_/Ylle~XN*_=J_fu]1.k(Ίf{؟+4qwbic)^ȍY1J30%;'U L+oP`H=jМBgF<9)% xwmaT[ʊL{Q%_۽)F:qYtM?=(]ZI^nfrjY*B,QdԠW@hwmq\T8 *nj[vы ^5;kc2qyn I*E@Y kMPGmaVlL~0njK5xg,7;+o%c"_ޠÐTsKI_gnu$P =KM߄ ceVL#䋁+? L)of!!/M)Ȉf8ؘ7%eQN9fK[2s? I3rteu̩vo5J**NgAf\gկJ7y+N{& cO. c uwhܣOsƐ!ZD9I8c;ˬobeWJzWw[ׄA d?g>4C3el ԑ}ˀمo Y7h ryu;a%G[aiS03.I|iAޝ*(T@G_RPgCt5(0ҩfsWpTڳƮIv8.p'㛀y@Ό-يJ V@ 3A=A@[mQN_36/ۻs _%Yuf`0dy{uqOR-L53 2-\q`MzTX#8:)WE$0cEۆ9 (1{ vTBcG :! jƖqtZhu K#\C1|̹ll$\ nƠ pb 6 Ϡԧ ґٕMub^j3NȚJrBK2a"x]52s#T¼Mu3nAZ%kY>E˿.z77H2OT&Ayq0‰U(\#:p ū}ς.rsj'vNeȸ.lΟ, Cӳ W=xebo#%C LDSܧ-jRDy K%w}D/%>MkWX1CD\D%gj$ů1aߎ6Ӄm#A 6i1ٯ4Gcֳ-CX*HjKe ! yoؒ~uw bl=u՝+Az肺$|F 9quVw!, ^CǛ+q`(@}t ]*IrSuM1`"276> 󅹧; LQuCªZ0U^w͈:2 rY mFRn,8hQs6~S,Ԑ,(.~w4H|zٟŬkKh˵q 7(Rl^𧗒?Kd;`c$ll)|r4=o3oDNOķpSj]L.yLBH/4PR >0|Іwڱ&~L-QSmj aʈ0(=%ǁSfac#?/7| R,6gw  H%oKg&`* 쩧+k#:.S;8j?>0powgؗ@"藲ֆBAZ,"Q 1v~co? yk E6j vbo*>p": _ǚZQ./mjB>TS"N{8R~.s(0oG?U;S U-$Sh@,Ay{~T;;359 *~|D"9 [By9uFTNE!,/b@(3gcV(m*'Ã}RC"BEDes3^U7 'glڗŹM͠ _jq@vJ js5-\J\cKj[}㓳 KJ꺚[ B0ĥɱ>ຏO/E<9[k˳C=m =μF-53P.ʊbԧM5eEybgS" Ń qĵr0 %?x(~,<1>xR־w~"2b.gN"džiΘ 9A?51>&>ba_(4`kht-x]!h 6r__GYwW{/y@.6thvb6 E1{ fCJ؁~] U@^ﴟ8@AaؔGEo޾kh77okkJ>x sO>XY%1QQg]YԘ!L Mamm b(4h$7y^..|!} #34>ZD$(`h D0_f$rC]nae?ַnC\ⓠ!C_$;+#~r|47<$( `K+~."QA \.ϹhG!A#\$D LupAMsءwBTLl􈈍E e2ܡM/ T$8il@&fQ@Az7 L|{۽`斸53 %bzyBk"*BxK(onO #Вz N72½~gWdD h@ ,0g\N; :oYl\}£3Weյ "7thH@֗hveOXlȶ !Tb ? 1=$~ًW%U"ڷꪊR诓X]nڟ Ԩ;49cEt`³@}htƍIHM{o rPCqAG1>#p>Q$ccu5ZT+84Am'%A(uOg V|O@S>S,p}bicKsr9hu7 qs',Htq : }ĈN+fI Zøy0? mϼ#?.w zs[O4hBHG]يZq]n?pv/16G-B&X#W{^[IA'),f(Ÿ?p5YuB{Ai? AG endstream endobj 231 0 obj 6505 endobj 189 0 obj << /Length 190 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYORmÇ z5_b6SG4dVTf״ȥ8?(b_{s?}k="^?}.~~B &ȈCB!L\!tK \π >"6TFx|A(_pA e <ͤ. If%y¢b,XE<8KNJc9"4GZ(+ʕWT*p"TW P28l€ L47_vY^nJ{VS],E3yR1X, &+ëko4M3,LML%ɄL4Hݺcnou=~;lm;t5jEQ*.tY\XZRQ5mڟ>y.z<{j L,L…J2*ͦ6[jLxFr:l5r ~G :NL|?{oj;:鴚 uRL,h $&V[ g|gxX^^ZZ8=yjS˥hr\@zxUp y}+@k0 5X,.bSx)J}ks396["m+ f&=ΎVFY$"*GW6鹕@h+~ht'XpWgD̑כڻ]y0H?E"u7 Ww{d('}o'@$? &XՄ,DtD fVǁcCr ̌*D$2DerEK6X:_ M|H %X4T^qmkH4#! E#Yk5eK![ )u&{z8x9{405k7b/:"̽TYo9%:ߤ.]KBYP*U{c3ۤ(0?},)@==Q,8W)jO_6wZಳӸXD\FL7 +4Zo&Q'82,J6V &*$@>>pҦVh%WzcK$maAC> IytdHyav?\ endstream endobj 190 0 obj 1463 endobj 201 0 obj << /Length 202 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 202 0 obj 1401 endobj 232 0 obj << /Length 233 0 R /Type /XObject /Subtype /Image /Width 117 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xX[YeCE@epK"M,37 \hr( 2-7L)7,4A_} ԇ3||{9X,PA>1֝QE|qD*[$Ww O-x}>{XRnǀXh}`ܱ]R~ݜ>mZ~c& #:z޽DAU'YMvU)|t91I9m%/V=Ovsm_SN3 |H\"fs{w:Q2m/{c}-w**Y/1q27V} mF3 Zu9N ')C%6  Yq0݃j=?3|8I`lmeSuX~Յٗ=kRcyM"E`w;_L;ttOgs4?MʣʎI>vx`=&>-7H @zX&Ej\tkӭm[s{szgo$vF=c{3^˞G23nD}~erÃ@;,9&X9Hr!T倌a~`iv(L@#itS EZ u>gy~vI_ةjbe) ПPX ^rΎ t6WivA Dcݫ.aly6<9;v(J@nxxl(P)bw^0_9go-=Wo!y ĎsNu* Ofv+|˰q 9F^mt<.}rbpw[sme:K~hTڲ{^>-aASKje۵a)?sꭺ-!8bHwtZ͍O*cS$؉3"";|IEUu흆F?PX_gY+7 bǀH49XJ)CWZTU/'JsbYrR!AR 89sDd:4gg Hp7Z/OI'W Wi( Ivb8҉!etH:$&aS'BZ;JdH$rX Z}NЂ5 kN #@Œ*_bf" )3 =KGBxyz`8 9 endstream endobj 233 0 obj 1858 endobj 220 0 obj << /Length 221 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYWRV #4C%+ eP T6,nt<d^i%J;h팻0t6XqJU5>TUUUV^Y]hr _Hd*/gjueU֛]?x84<‹_{{KÕ3LyE=$ :Q\^tsۓɩ7fLO=yn5-LʷBй,DIzg؄gnϽm5Uϔ\:%2DdK(IW45lvaiϷ>o=1e(ҦK,9bKGrM;cӞec`}cc+66kԣnXsDgDp*?>onuoi=e[H&?I_{{l?@)X{7~tRMKDecC[(!2`>/M`,Ȗl^ƒ<2W_=8YZ@ފADE4em31RU&{Ka Y _`ߓ)j%gٿ ` _6˞v%:e?B$ŧ_ ?s׿a-a"$vREq9bq LA(<lY[|1l7]8 ArV[)Q}|j,`Jc efHw۔/_Bl|7 b.? qaW K@I@T&dK0~nrRQ)E$; RIz?/<)Ge?_?HU\@.pt TRc7WtAr)Cc/_yzKGTf`e&yI'_m}+ ueGmWϟHuewCݡ7+C^X@,+ہ7SCwW5GW[EՅ:_-7}9Jq|R/VQ:vfH2Sk mB["!n WO,RCW6\\]?*!$)^_]|xTYⳗ11$*Ko}ݝѽ8aZ_N9ZM(nEU\ :%*5ŗNkV#Tۮz_O("J~"Ys5͝}ӳK+Ph}TcAɿ,Nu6ל;%#*-bjsMAn=οt٭j8hI] QjtƫVsh홇ӡou͏kKp:rvZuDa )I3Eƺ{'3pf_xo5pX͐8o b8{zr: =]NwHSP(LnQUL= ǟHU*il$zP[۷EH L! $"K$Rq*9.^p8l4yPțД fdT*hLȄ CF<O& endstream endobj 221 0 obj 2163 endobj 226 0 obj << /Length 227 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYWREP  !%QS#-j]&D-K3QZ$U1"ݵ9c?v\s=W\?^ r}9 `8pX B" BRC!x$ۣ1;5Fg$3,6+l̠)$<S!H4O.?=#P;s|n +)J"`1Hϑ߁'s¬2~  *y1✢wiply:9&]_)V, w+emU*iITQ" P82=E$/ԵF&Zt=[^XXt߼SUrQJ'E@b ,vKDžeφwǷbdmog"Y+%H+oL/'g;@{-ҧQ\)IcPD$`Դ>zaYxwa7DL|=:: ϳ֑5%slZH,&:'>8=޽_c=8燉AND csdz2.Զm=H_ Þwuf6Ֆ3X\D`ԬkM̺6|@8CL gRA"%!3x֞Q?oUс˼mPcWGe 4 yb6 _n\`RqDi);[+[@ aka}XA""@KR^=y; =\!Wߎ<]Wfhb"WCc-xvp9D!Y{7D":HfǦk2֜c[l.1G|Ox/ NA!Q 枖|IThb{3\ 2nY( 84pC%^crT+$$D3`-aK? +rPs{1;/`^uo$q{FbHtF5&ԜC.Ay.撘K'w&^T-Ӌm 8C} lQ-:E!;>ް#q$@ Dq@"2cF;κkHHA[c\ uѷ?pڣ<=<חoG{שI@|J10fs<^~ exL^q9lMLU'>9k{ vw}ScsU\ȉ $+5->\v{7`ǽ윳O-5jˠDK>\ʫ5s Ngt.ڧ^0=\UfQ_ &|5hlTXL٦>Ƅ }62۠V+6|?ު7)qH4HJZ;G+X`G;ZoiKN")tINQyu~Gף&S_?,3?긯o./ʑ)L d'].6w{w[Zm<ǢO!RP ђSbBUVVUÄJ暺D i 2K"XPXX#,:;mZH`LD*D)R2{@3L`dsRi<xiTɠQܟ϶2O$z"#艴x*u Dh D" Fx7B9 Phph8b9e?+)?` endstream endobj 227 0 obj 2181 endobj 214 0 obj << /Length 215 0 R /Type /XObject /Subtype /Image /Width 166 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSYǹr)x u ż2kiH:n`cx RIDIӿEArqkv?!H`߳zvח^Z" O9Of e]#,6;@ qL{٨U^$vv W6,;>xaXh063+2ٔ*BYmclsCd ? [k k)O:z1_l^Zwyō8QBώ}qjϵҡ#J.{ 3]L3< u/Mv7)KL{ Hɂ{}oVnj*-q2r D=g0~D {Gr%z8|+W?΃>.q3W?QĹY]f&V D8+_K=]3zCqmt@Dph'DD= cP(ɚXK)mp/J|{{(諃IQ$ yxߓ=09;ys3t9~MrXǤ>}IĖ endstream endobj 215 0 obj 1537 endobj 205 0 obj << /Length 206 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 206 0 obj 1401 endobj 191 0 obj << /Length 192 0 R /Type /XObject /Subtype /Image /Width 81 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xX[i: r@@BG4L(ˢTtMuqIVռFEvq%-7tLf^mgg^99;GA`0Y=d0FP.{a\(DqX( &b+T)ju*jJ,KFB>+ӴdNo>[GW+Cf3hPjHCl9J\x$ϘH}Idj2d)>]Z^QC|TVVΔ+kUQbYDk9es8/(lpDL!DŒJ'"R/;hjiroP}h.Jpّ&Y QE׹=(svowAs"Md1ZcsWѨw|ƞmw՞-2hd"^t&*HR lox'gf1;3|tĔ&e˵UΎWK>?%|sSއ}V#0 @x3oW>Qamuoa MRD4cUƦ߼_[ܢ;TX ҙuWF&k[[W|sC=Oj>E厎饏abb7?_|dZ#`X\㳾Ս}1Bvrzu"?D*=Q{x&$ }-_hƚ|1f7LT C:djÎDZ'0j-LUa$Jv•{3ƭo ֝6e$`j0JWXu;a،xWGہ*RejE6۝=^h& 2vQZv zsE#yη5RGH eP±!?QTC;H 3OHcˀoBBWbr}T9ʯ/Q@ u5J1 ^T^lʃ@L$2 2ywlw I84W mmw`JZ-uEJa"6o_.Z~7?9{Cvk ?X\3/N^ Aq9iDBe3T.ڃ cåWEjnYTSп&ƥt@н!f"^cӁ*+ρr$% \p8yBcV:;G߭~v|lmm[ors:1B`23Vwgjq\> 1pB!| mK>{J0bBtwr39 *3yWñW/Pa~ѡvgä#{084s_;<b /&ܻXk+Ч¨1`2bc+?xtx`u05,j>&rI)dls/.z{{n^hqW,ӕ9@g"P%/_Ϳ6:N3T|0X(`LI7'lU5Q]]UQf+6J0)Eb*Z Miɉ`Oa}a p0bB\7)!h<FcAGjS웻`஧LIMhLJFNQ zA` lR< }>Q\c-}r1,!A@>\0C m¡ l6\óU d&"y=eK endstream endobj 192 0 obj 1795 endobj 222 0 obj << /Length 223 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYORmÇ z5_b6SG4dVTf״ȥ8?(b_{s?}k="^?}.~~B &ȈCB!L\!tK \π >"6TFx|A(_pA e <ͤ. If%y¢b,XE<8KNJc9"4GZ(+ʕWT*p"TW P28l€ L47_vY^nJ{VS],E3yR1X, &+ëko4M3,LML%ɄL4Hݺcnou=~;lm;t5jEQ*.tY\XZRQ5mڟ>y.z<{j L,L…J2*ͦ6[jLxFr:l5r ~G :NL|?{oj;:鴚 uRL,h $&V[ g|gxX^^ZZ8=yjS˥hr\@zxUp y}+@k0 5X,.bSx)J}ks396["m+ f&=ΎVFY$"*GW6鹕@h+~ht'XpWgD̑כڻ]y0H?E"u7 Ww{d('}o'@$? &XՄ,DtD fVǁcCr ̌*D$2DerEK6X:_ M|H %X4T^qmkH4#! E#Yk5eK![ )u&{z8x9{405k7b/:"̽TYo9%:ߤ.]KBYP*U{c3ۤ(0?},)@==Q,8W)jO_6wZಳӸXD\FL7 +4Zo&Q'82,J6V &*$@>>pҦVh%WzcK$maAC> IytdHyav?\ endstream endobj 223 0 obj 1463 endobj 244 0 obj << /Length 245 0 R /Type /XObject /Subtype /Image /Width 117 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xX?[YMDHܢ!▢!#TKTR+ )ZT)&7 !a~-1fs|ss>k' _ܵN"H-5O (TAQ)d K^H,6q9A@:L ZJg"bqHQxa1 ퟈2ɴ@/L OLR`BRF) Z䫖'Q,^XTVb@ZJU$Ċ|NլGH*nAQq5z}Iq|mnfMST30:e4 f- DiAK0@ UV7l]aĪuɡ:\,`HR$ZP$v殁٥ 7c-m̈T/R|Bx^j`н?e\+!H/̀B 9ݹ=>>+ ue#y i%a\7KD(Z8WJrb~Y%\VAqвb=B~z߶E&Y*`Ow*,UXI_,%2R*`/).:X."΍|C}H.z5rAy)**DbPj(צ(t/_S{gmaR绦D'BW1`Y>^ BOT, 9^5Hjt_>um}y>p~TVht<ٶk)`ptk_ k n6sFJfD)r |5468V}7#.C;*Jȼ_[$ :<:ٝ{ojuYJƦ)oGk]ێby($uqJރIʥ= F8wֹўJ]:87">CWlwXD+"3maMG]qB"`Q/fPm\]T;6g܆ x [řM 8"8>q08".Mbneή G=řnCu$ɥebyf~yuݾqbζþi[~ZSI fp2#*nT6{GgYƶkUҼebZfnaL^DR]Pnz~2;ya >}y|J%Q) G5)Tc߽5w6<~U%Ht> CDYwT6L=>}m~'CCu!x~ɅZ`EtQUmCӏ-s047={R/Ra\N':'Wdλ{X->73E#@OA!%\V]$>Q|E4[i1b!/W~Et YK`b%*P*$,:frNL3Z  $Ri4jHRHx DRL+P!|qA,_cRie ߿{!/XۈM&SL8, ?7F8V\oo} endstream endobj 245 0 obj 2061 endobj 209 0 obj << /Length 210 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xYORm÷!8~aqLifҐM|[bRi \r"Jn gJF}Hl{tp;yn T4 # @g0XpAdAt/<Lpy<>_|>E l4: q*p@4 %yI4$._) brLs2TlY\,S]QqV_Q)Y6*p̔€ 4'O~Y\nJwF[U),A3xR1XAU57 Mfssc*Mi1&rXd&\![Toݱ޷?ǏvV˝[j0r,H"+.Ou?} =ϻ=uZF}ey1&%B%` fc~5vh&Co^{ojqɅ~|k#` M ML|g`75162YL"h DS;>anaqyye<,//.}yeo1j2T+8X]c;݃cUz 5 `W|cCnjUy)I UZCK;96["m+ g'VU("*GW,vg@h+n4O;햺J eddm]n?Dw'";iQ˳3BcQU޷ xOYl󓃽O*BV"CT:"պף#Ly!WgG=M:\*D2%W/}K_ M|X %X W\smkۜBh,;BAߏFBkscT(/hlכ=S_=N}Hh`ìNjBvX(REodS0K0uI]v#O3#}ֺK9"YP*{]kۤ(0?}")h=Q,8W)M7wN[ಳT\FL7+6\o&3 /LqX!, PHP9!)?UH*݀JuH%}TM JƲ|_I.xbMA?b'sed! 8 SG9+#]vqxoK6+coWOȒ& Jvך{ n!~vH9;'8P5Zlݧ$R; DӃ)3WZS+" pFNw:Ÿg7/ p(,.՜C C t9m׷%&gfk=iw}O>C > IytdHyavx?C endstream endobj 210 0 obj 1458 endobj 199 0 obj << /Length 200 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xY;[&~-DwēƘQԵz<͸6ѸBv !霮plOw߷C@RxC ીAPp00dpPY &xt&; DXX(fЩd">d ℅ ظ8!2DaPN!? .O0ءXl(YT*BɤIĉ,˦S5@CԴB%MD s2h~(!PIZV~e?!CEV{LSR}BaPU `B2C䴜e5u M-L}3G,pT5\ V(U,oy67V'MUy?J ےpx2+<.5Wk2ZVkߍ{]þj3v5Թq<O ŕVcw}9::F#ϡ{oanj 1ƥE+k3/۝{㓓?Kqs/~-W#ehܨluU[Ȍ?<:'$~piΌ~ d^_kJOb9lA{O΁WO+2a|zGEM>L %5T컇_[T} KMI $hj;\oD`$S`)JK.PKe'qʔMU*dv8F_}MI8M>E'ڜ rގ?R p;{_Y;[W wueއw~$-qp*φgïxWCצufYV)Xmqx*7J7N =u^&'sQ_#R}}ؙQF7_WC@"p7> stream xX;[i}_ B4Hi/cB>A[Ujm>ڕa,ERTl!5ڼ^ܿȹ.Ϲ<{ˁI O <AR K-$'Q$tLn9w#n}҄ieN\xVJ[\bpLz##z~o[ n_o(@  5sM)B?I/JAMAM?n9FPPOM{VfDž{oje9ޡ.wwcg}XUm%N5W .NGLMtU:!#Sgj? Y[3/jKRW;|mqpvu^ @@ I\)l X`oP.G0pf[L#98sUp /+uZM (`F#V4w ͬOWUnc}ci4#VϦ\ I1mѹ݃S0 fc$< ~Xj W/g:,cs+`E'Cd]n.֨dI ϛ;ݽ},۵o~\6?{Rgx]fp@*7@J)hwg|ް,Όju9 R?pE Heᱚ}s»٩APMTsW Ợ\i0YF'&&~C81>62c|P-dPx"+K*j~1=1zP]^q_)!wbϝrœh,AL-.XSb0>EVqՊos`V4Bu/%3H[r-r]iIAnFr2> stream xYWRV #4C%+ eP T6,nt<d^i%J;h팻0t6XqJU5>TUUUV^Y]hr _Hd*/gjueU֛]?x84<‹_{{KÕ3LyE=$ :Q\^tsۓɩ7fLO=yn5-LʷBй,DIzg؄gnϽm5Uϔ\:%2DdK(IW45lvaiϷ>o=1e(ҦK,9bKGrM;cӞec`}cc+66kԣnXsDgDp*?>onuoi=e[H&?I_{{l?@)X{7~tRMKDecC[(!2`>/M`,Ȗl^ƒ<2W_=8YZ@ފADE4em31RU&{Ka Y _`ߓ)j%gٿ ` _6˞v%:e?B$ŧ_ ?s׿a-a"$vREq9bq LA(<lY[|1l7]8 ArV[)Q}|j,`Jc efHw۔/_Bl|7 b.? qaW K@I@T&dK0~nrRQ)E$; RIz?/<)Ge?_?HU\@.pt TRc7WtAr)Cc/_yzKGTf`e&yI'_m}+ ueGmWϟHuewCݡ7+C^X@,+ہ7SCwW5GW[EՅ:_-7}9Jq|R/VQ:vfH2Sk mB["!n WO,RCW6\\]?*!$)^_]|xTYⳗ11$*Ko}ݝѽ8aZ_N9ZM(nEU\ :%*5ŗNkV#Tۮz_O("J~"Ys5͝}ӳK+Ph}TcAɿ,Nu6ל;%#*-bjsMAn=οt٭j8hI] QjtƫVsh홇ӡou͏kKp:rvZuDa )I3Eƺ{'3pf_xo5pX͐8o b8{zr: =]NwHSP(LnQUL= ǟHU*il$zP[۷EH L! $"K$Rq*9.^p8l4yPțД fdT*hLȄ CF<O& endstream endobj 249 0 obj 2163 endobj 250 0 obj << /Length 251 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xXSRY\xyEV6C-Ib6h>St4lii _9X'$NڞBzQ/|== L g8PP0L:R8Fg0,`2tJE('sZ*Jg< '!a<IGud0Al.&RTFRT"NI 0. P~4/LeJJ>jJgHE&SԴLUf~AaaV49*L$hg7HdƄlmAd*H2cAKKl$AXrZPL-M Uw r2a< Em)(3>)M+2V֛_Xz n}\fɄ5f I@@+j\Xp6Xrl1c4b> =vF+E^O.ڿnw=ıv/X߾h,s-\2JgݯXXw=^!Qx=ߜkڪ~]M`QWo?~E>׳X~h*Tl81H \kjm]x{>)νĥsS|2X=> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 237 0 obj 1401 endobj 216 0 obj << /Length 217 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xXk[ZW]n(Jڢ(JHCb6 ) ^*$Z/$yщF/&h~/~`\w?*Ph  a+A2D"1X<PLV:E 'b`}5K QhL?#K$HrA"g.ωD9J( TgaSf"JSCZVUZ)2afHJr5cK ZZ3ureςIxp`@oFNa6vuZLF] Dܙl`pD%UnatjbL8#A !&PbrCj1ԕEt DpzLgtOxfh{>`^Ӓ2i[^Y5V^NݷYhp m6O_o([sXMrDk]xtC})W CR¥plj(LyEˤwmg?F#6,_$x%R9be7~~8;:5bP`sׅۇNHwcǴ~ty67Ԫrx4qdP^,oD&?Foqz`@I1BMsλHB0:^ a><~lnǕL=@̑kVwm76N]MQ609d,˽3ن}pqwbjK8'$df˳,> 8E[t%O5bdcu?]?@,NH&m^-ӉXb@#Ty>Hn#ɼa!PV?HʂֲgN4O1݇W7bw=#<ח{xpzHtA~z8_K|q*9n0Gf^n|a CMu.Qy9:mhr} y'5JCjXYss|nDH 1~ngud6%Y1x [ƽDRn Sw_JE>p Y$㗬ǡx z,ؽ\=N0!W:P)'Fm MHK47>x߸:8^zF{AWd?ynͶ7!pKa4Z}촚yƩG$5酵h+"ppoz'Gz:j] $ouyV7v} xZBTfS4YlǦ_,66Pas÷nnGP̥A;dмyZC/.-ҢwmKSJqF08"y`t?x/H endstream endobj 217 0 obj 1825 endobj 254 0 obj << /Length 255 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xݘSWƗ嶺\/D@cAKnAc j4fFꨱ8QU'(eF7No3>_7/yw? Ʃ5#S@4Rg $Lёhe0@(CcXzpy|P(%PqLA` - cʼnLC2T(%arV$,(ALT_*(#]HċbXtir&RUYw5E%@ ,*.*U+8ENA <=R[N!^#mE&G"qP:>90rE;Yjꛟ;:qhhmyQ+F>1)yXb7 ©nBVD0a ĩ9%5Mz_|mƥ)W#FmQol|Xˍ>^2ERU~USileceVŹY耡Wr0%(r Y}Xv:]8tno}Zw,ڦFZue%K$M/i5Oۗ׷wܸud w(%&hHhnHX7ɃF]qT8aǦd7v,X#+sSCu$Xљ?>0t6XqJU5>TUUUV^Y]hr _Hd*/gjueU֛]?x84<‹_{{KÕ3LyE=$ :Q\^tsۓɩ7fLO=yn5-LʷBй,DIzg؄gnϽm5Uϔ\:%2DdK(IW45lvaiϷ>o=1e(ҦK,9bKGrM;cӞec`}cc+66kԣnXsDgDp*?>onuoi=e[H&?I_{{l?@)X{7~tRMKDecC[(!2`>/M`,Ȗl^ƒ<2W_=8YZ@ފADE4em31RU&{Ka Y _`ߓ)j%gٿ ` _6˞v%:e?B$ŧ_ ?s׿a-a"$vREq9bq LA(<lY[|1l7]8 ArV[)Q}|j,`Jc efHw۔/_Bl|7 b.? qaW K@I@T&dK0~nrRQ)E$; RIz?/<)Ge?_?HU\@.pt TRc7WtAr)Cc/_yzKGTf`e&yI'_m}+ ueGmWϟHuewCݡ7+C^X@,+ہ7SCwW5GW[EՅ:_-7}9Jq|R/VQ:vfH2Sk mB["!n WO,RCW6\\]?*!$)^_]|xTYⳗ11$*Ko}ݝѽ8aZ_N9ZM(nEU\ :%*5ŗNkV#Tۮz_O("J~"Ys5͝}ӳK+Ph}TcAɿ,Nu6ל;%#*-bjsMAn=οt٭j8hI] QjtƫVsh홇ӡou͏kKp:rvZuDa )I3Eƺ{'3pf_xo5pX͐8o b8{zr: =]NwHSP(LnQUL= ǟHU*il$zP[۷EH L! $"K$Rq*9.^p8l4yPțД fdT*hLȄ CF<O& endstream endobj 194 0 obj 2163 endobj 211 0 obj << /Length 212 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xݘSWƗ嶺\/D@cAKnAc j4fFꨱ8QU'(eF7No3>_7/yw? Ʃ5#S@4Rg $Lёhe0@(CcXzpy|P(%PqLA` - cʼnLC2T(%arV$,(ALT_*(#]HċbXtir&RUYw5E%@ ,*.*U+8ENA <=R[N!^#mE&G"qP:>90rE;Yjꛟ;:qhhmyQ+F>1)yXb7 ©nBVD0a ĩ9%5Mz_|mƥ)W#FmQol|Xˍ>^2ERU~USileceVŹY耡Wr0%(r Y}Xv:]8tno}Zw,ڦFZue%K$M/i5Oۗ׷wܸud w(%&hHhnHX7ɃF]qT8aǦd7v,X#+sSCu$Xљ?>`^Ӓ2i[^Y5V^NݷYhp m6O_o([sXMrDk]xtC})W CR¥plj(LyEˤwmg?F#6,_$x%R9be7~~8;:5bP`sׅۇNHwcǴ~ty67Ԫrx4qdP^,oD&?Foqz`@I1BMsλHB0:^ a><~lnǕL=@̑kVwm76N]MQ609d,˽3ن}pqwbjK8'$df˳,> 8E[t%O5bdcu?]?@,NH&m^-ӉXb@#Ty>Hn#ɼa!PV?HʂֲgN4O1݇W7bw=#<ח{xpzHtA~z8_K|q*9n0Gf^n|a CMu.Qy9:mhr} y'5JCjXYss|nDH 1~ngud6%Y1x [ƽDRn Sw_JE>p Y$㗬ǡx z,ؽ\=N0!W:P)'Fm MHK47>x߸:8^zF{AWd?ynͶ7!pKa4Z}촚yƩG$5酵h+"ppoz'Gz:j] $ouyV7v} xZBTfS4YlǦ_,66Pas÷nnGP̥A;dмyZC/.-ҢwmKSJqF08"y`t?x/H endstream endobj 241 0 obj 1825 endobj 195 0 obj << /Length 196 0 R /Type /XObject /Subtype /Image /Width 106 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x7[iƓ'FnT$-3D fQf2V!:"%kH%:N/y&QA;wKB$2("$"GD)05 衈FC*Iϱ`:pb _!0# /A(N͐HelΖI%BA,V0 1y TIXyKR&p▲X&bԈ`("B℩Ry;5ju]]=6թյ5w+J$>;:Q`:/JYV]ߨiiӵwtbUG 5JDP<nT}uBѠQwۚBYJ; 0Yet=Qqra}oF]%YHIDJ ?<4ka~l2~PH  قtyZ=|lY.le[YNzZof&r 'i\p: pWI~Iލ$8#(*;ӫsӵM;-mi8TU,MSDO-k{rzBҾgr[2=5ScE3w'V]ρ_/wYF~nVf HQM+Q 3on(CZҼOG$G1+~\ma~¼^Hww 3,cyxHDQ`G|ێ9 ?Od'v =W#սK<)ĞW@-jO 'n\~}hﲽk@~3GK8ٗO^/7ߗa5|̬A8;?agfB~s.0sfw>(\v,+F( ]h}:^;KLx@װ`) '_׎y endstream endobj 196 0 obj 1272 endobj 187 0 obj << /Length 188 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 188 0 obj 1401 endobj 197 0 obj << /Length 198 0 R /Type /XObject /Subtype /Image /Width 166 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xWeQAAE1 E"4448&0-rQS$(N ^_;8٭}Yq=}* FcX\b@LԯD,O  5 P(dA_!"*=dC0PFF!R_sBdZp(|~,AbyQVN!)tFxd_ ,JI@)"QrPqa!TDc c(ÏOJdJe9ryn͕ȑI3%8^$3JcH<`qBDz#NUuMM-S^V\+'GG2)DwI ә|aJfNAi]euӓfIѿEy%ABRB£[ꛟk;t^#Wm3AuY+|Ne U/zC C7k֖f\&|:`奵5k;?~0~2BS__>/[B8!I'0gWxO chtbj̃=8&Oˢ L,"-}Տ_u|}nX5:?}P^qGĜ͹ ]p.kUe 9D4Sr`Ҳ@K[ț {k۶DN%Pr4 C@i֕\K0(N^‘yvx|/LVur{;{һp\ed0?{0p_+k{;>pKZ[CϮj2y(sC L(|6Y;2LC@Hz9S-^+έQ۶b#Ⱦӷ̎뵪rY2/xA(L`~7jw:{{goAq|8 &̫;ǘ\7=n}if\^_)Og"!QղLJg"x ^1O t6/v%Ã@f͚?FMM{٭8`smW̓[U@+GbœѩS@?g8&{.c}NLY~l:Nm܍}\ȷE@QQ㧬#HirZ˴ya 6667ksn_gnqX 6P9(ݫoy;0eѺ8nxQMLe+< Ӳ[u=F'So3۴ĘaMw05΋O_V[~axdh 1G C@R^YU,HiA a͉Mn*7i:t]{z{TooOΗ aSA}j9_I Q &;ˋ xDy:K!'HЃAM7@R0ޚ.kg筏Si4zDz TGIO x<q 609gd/z endstream endobj 198 0 obj 2358 endobj 207 0 obj << /Length 208 0 R /Type /XObject /Subtype /Image /Width 138 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSRYyEWQ|J1^4l5%),um-WKMQt(E3f=PRqޙOpsιyG}|T4*N`@98\0t` q\ I EI(LLD\ `6qqև5ߊvS}UqN)**M}6˽8k= }wד^ c̈X,SVzGl? >mfO z{P[Ք構)[ˇ)nh~88f!8"O'CMqo˕Y)0S"> qE2bcǓW.O$OaJ瞟y˅<ˤn|IVQ{temA,+ˎ3P0{򂱽̾GR-n_0P(f?j-V 0=2Q(L(Cћf9;a(շ_kAz9 ZzF_.x%;{ؕi>htJ%q)Ke%+m}/^-| [ȻBaўd!O_] % l|.zsY`F-@;N8}! Vc}mW~$$$ 0ekZBg⬝X>o(I=9 ذ==8r]pրpnjp h1]5`ҎDR],QA t_`!Fs=s_)x-!v C!F7 j"cAL5@!L>B |!`qf p ?_R^ endstream endobj 208 0 obj 1421 endobj 252 0 obj << /Length 253 0 R /Type /XObject /Subtype /Image /Width 138 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x7YMMBBTB*u mA)%M'ZNF˔M_"!kDR_fYyY߽moCi.=>#Hh $8@ "ɏOP4FR(d2 ) z 3csPZp0 b14 ُ',Bgbn8/-@eWㆰY Z7Y|A\+-'&%I$RD&  |^Ƅ,+DP'Y׳J D\)+) " A.J]_я 22OUQ)))Ee%%u G&qX4E(L ňeYyEڇM謩IX_[}T]̐=DJ+U7<::ZgG_Z>Ԩ 1+Up? ɮJz _^WIBOğ]|$J 'SW?z7a4QڔޗjJ BF'A8?=8R$jj5f>-..--Ņy`OJ!D%I__MV޾z83iٲZ6T|mY,+ fXAPL2)  $){GMs[=j۵,k e`iQ$tvd|Fawtzajw:Pۡyݶ}4<}ɑ X@% hF7l{Σ㯚Cn]3l8+1DNˋ:h8W!Xv7ڻ)W(D(Иk9mOgAܯ}q˫ ekyfiͭ>!)A&Ctm.M* \xɋjp9\z<1T˄<{μZ/. ɡckij,W*x+Z 3K_O@|>v7?}ood'E< ΏH%ڎ0y.W$^3koe#0f#Q18vgܼ K\!-7ScØ}cSokl<ÓS:r p{} A4HwZ{fW^ijw}eqj~<>z^x8f;nwc#p|,|$7Y|m'0D V kV "trpCsB2cY6Ou4Wb> ((Լz}܊fw=!8٭].;sDapA2.<{vmkce~fKWM0I൘ō(~ c& [եƑ'%b>%KܢiXP^g`Ìy܋fm?h 2\Q@xEgJ5ͭ]=c)Ղ)Ӥq|t㩶ǼDuQ';  (j5ՔH AE }%<&!5NEEiUEs丨A(t%+ nTPPWSU)S$ #CX@I ,8]aĊ Y4YHy]/ ( O 8|PtRFSvqW#  Nh#,T }$/,1ysGTw3i720AwU.8%5x`{tT@99iz!zZ^@ 34™.'2 endstream endobj 253 0 obj 2186 endobj 238 0 obj << /Length 239 0 R /Type /XObject /Subtype /Image /Width 138 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x[R~) b$54M޲Uʎ״(ҤL[Q[C)̅v|QYsͱelЩE M~@nH nL賌N;Wk-/H[W/5R!F|m -*ʪ[LwsK.Ϧ a' usv|$G>,Z Gf%9Wtͦ ?ݝp8{W'{US WKQfaE}{urѽn!/* ~p9&,݆TȢ+,+Z @]W9n8X{YW|! @lQfM](BDq!)2L26V ;뱾_C1pg(AەErQ" >PrReyi/ Ga l7IbcɑZ'<~P#(;!G S@zdlDH *m1>zg~b (󞮎{+ Ϣr`nPŲtM:a38젡3,#.  L #48X$E$;߉i NG^l4# endstream endobj 239 0 obj 2255 endobj 228 0 obj << /Length 229 0 R /Type /XObject /Subtype /Image /Width 130 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 229 0 obj 1401 endobj 242 0 obj << /Length 243 0 R /Type /XObject /Subtype /Image /Width 89 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xݘ[9AWA ApQ)EcxH,mxNMTi^!Z(sm?/řvmx]z |? DP$"@GTd0d2h4 _ـ%ShLv 1 |n4ŠU $rx1B8A*&b,/h"~BJKWcTz*%'8ᲾI.3 I*M/yzLrʤ!CfŒ'.e_3Lf,2ʌni3"C''Uu7͕u`0^rY%G84Y $+4U涧ϭ.lvv?j4">J '()#P~YπmdlF\K 3%FU7*,mݶWso Xel3iS$1)e'gݩ7:v/O u?-˿qa%I(L/y;6t1v97זfnfi0d&B&ܻ ׮g<{;N+[GL(9egk^p{ޣc,uޯ{.d[uIJ(\Ih"{ܾ|9.{ٹ:?pF.'St7nzO>G˓]erAc2Kږqs_l=Y[{I,5=  d{>jm0eDXU|z'w>.m($ЂGs/(ǃ>}E ^n~,(:{$_]Rt5Xw"5yIAcAf"UncdkGڜi]Iv iCiyt d׳6?qvNjN+k+]G:KsT `,GX0sA>=8 9fw3ؼTqcl^*v=b[d^ATko'}#Tb8CȼV? gH>ێʼn\ 8rջtCŮ^-9i!Уg{/0QpŃOjx2oU7vF21ǎŗ͕\z?.bVs7Cr~z?;a19/y8z*d/th]D_kA""ԥq2mAmfűA_{vUMR\8xܪj]Ũm7zzel4R%zzxa&6m|\_]y3eT^H:sq$E{\:8}qԘ 3;^+5M=ck^N IcuY6U*n mX|<]WdW׏A}}gmM+K *YLY!^7*k465`Qs տoT2M;3)O$9HoMw+pMS4φ&>Vy %?fdrbSA>LR.@d2ōI?341IP YB 4Ƌr< rYDl4a#@E.M~2}`0YlfL&F{j4X U LB_XwV(=YO  endstream endobj 243 0 obj 1862 endobj 246 0 obj << /Length 247 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xY;[&~-DwēƘQԵz<͸6ѸBv !霮plOw߷C@RxC ીAPp00dpPY &xt&; DXX(fЩd">d ℅ ظ8!2DaPN!? .O0ءXl(YT*BɤIĉ,˦S5@CԴB%MD s2h~(!PIZV~e?!CEV{LSR}BaPU `B2C䴜e5u M-L}3G,pT5\ V(U,oy67V'MUy?J ےpx2+<.5Wk2ZVkߍ{]þj3v5Թq<O ŕVcw}9::F#ϡ{oanj 1ƥE+k3/۝{㓓?Kqs/~-W#ehܨluU[Ȍ?<:'$~piΌ~ d^_kJOb9lA{O΁WO+2a|zGEM>L %5T컇_[T} KMI $hj;\oD`$S`)JK.PKe'qʔMU*dv8F_}MI8M>E'ڜ rގ?R p;{_Y;[W wueއw~$-qp*φgïxWCצufYV)Xmqx*7J7N =u^&'sQ_#R}}ؙQF7_WC@"p7> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 225 0 obj 1401 endobj 218 0 obj << /Length 219 0 R /Type /XObject /Subtype /Image /Width 139 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xY;[&~-DwēƘQԵz<͸6ѸBv !霮plOw߷C@RxC ીAPp00dpPY &xt&; DXX(fЩd">d ℅ ظ8!2DaPN!? .O0ءXl(YT*BɤIĉ,˦S5@CԴB%MD s2h~(!PIZV~e?!CEV{LSR}BaPU `B2C䴜e5u M-L}3G,pT5\ V(U,oy67V'MUy?J ےpx2+<.5Wk2ZVkߍ{]þj3v5Թq<O ŕVcw}9::F#ϡ{oanj 1ƥE+k3/۝{㓓?Kqs/~-W#ehܨluU[Ȍ?<:'$~piΌ~ d^_kJOb9lA{O΁WO+2a|zGEM>L %5T컇_[T} KMI $hj;\oD`$S`)JK.PKe'qʔMU*dv8F_}MI8M>E'ڜ rގ?R p;{_Y;[W wueއw~$-qp*φgïxWCצufYV)Xmqx*7J7N =u^&'sQ_#R}}ؙQF7_WC@"p7> stream xOia``K/XEm^)#6x5j-f jjhiQ#xXk2[8}gshV~Auk?2`&$c !@zB.xq$CQ.B!H$09'EBAq {bIT*E-$S"θ 0>a3!tf!h|.syJ0JyL'ţX1\~".f)UO?ƓʊrU2/K*\`C$ tivAɣ:FԤ5G-QQU=*)Ȗ  < ϐVkt-m]=}$E(͗g/B ESNg`hd0I7 =.ʑDB`6f*Jw&s Iܬqj0񼡪DlAgP,%Sն O͚Whlli֔*$8Wv#'sKk}[\زZwvvIΎòû\q2 7#qQVqՀhZfݷ;rtxhߵ|[3 Y"A1XLYL?`^Zُ_n<>س/M^5JY* 3@BL޸i9\3{NϙY7Z)B>r kF>.nZsϠB>߹y`\8TPnĎ?'ne( yabPP'ıC{5} "+3cݺ{DE9*uic4@V~ l&ߴU9D O(yP5lNμ!xϜ/Nm .y jm.F` io&M{wr-vmexY_,OK@ҳUj־؆.Ϝ[SCz*; `n(qE,B,m{CY( gYL endstream endobj 257 0 obj 1401 endobj 258 0 obj << /Length 259 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xYgXͲM%Er$HHZҒsJR ""`D `}>ϝ}ݪکw`[v  2=ȋ{(0!I7RX) *$w}W #Y jw0R됂C@#` 1 /woa .V(B "rH7⇠!Ѓ 5H>n#6{vqEŏ`77}y'29,-׏&?^7 3]p3AΜw;W3=fWEp.FnaGk`jD^snƻ9A͡VDpwX>cSFm`rXHLvc@Ƃ  "m @i%pC4. @z!}N$y#G^@Bl#hȘ$%wCFBNg̿,vF^zQz믘hYZ@^43Hhm&Z ѩW"bT|wK ~Yor_DŽ}y;sQ i^Yi]cw_kY@#dd>:#s? @$r#.D_IwO@hE,Pj@ c`lpF2CAGA:'iP*@ p``̃%Mp"Bl$I@2CBP C)P@:*݁B#3hZ>C?`L 3\0,+ڰ l8Nsb ߄8< /PG1P(e.BQBT% u5F-6X4͋D~-A'%ZMtz =^AocNFc9Da1 ]8f2cEJX/6=mvcGso8 'SǙptem(nNࡐ0pH(DE1JbRRҜ҃221<&=: /Qb+Tw^R}x%?/7g ԺN9Q!-#!C#4D4F44I447iFi>R j:^}LLGI'LKFHWJF7IH/CoN@M!AA!a" u$b x8ψea4bebl`b\ab`gcf*edfF1 313273O0`bfd`2ʲɚ:M͏-;]ݒ=.2##9')iY9ː+ W/273/ww"GSs=/6?o1o '~|C|" zVy >R*/&,"l/|LExAUH$V^(ATS4DRVLYOذ8, #^*XP Kك٣'pOIIjImHzə{M&mQJPQ*OԶt cdvϲ$R'r9$VUy yOr D z~**)*^Q\TTrU*STfTPV~QQIRPPUT WmV&vIma>}ϫOkjjӘtӬԜЪz-}YN 5]Un=^ސ>~Aaa~~y'HFuF+J }&&&%&⦡Nxi&dhb̍Oe,|k%couߚhb}M [Q;Z;':5{=|R8;Zqv5:}hI)iٝ;]h]\b\]/nU}s7r/s_!钊HKZԽսOy/h,u%Uk~~v(\F%ӃCTCNքAaZшH(kсу111b b/ġHq=|Gg'B=IIIG :wQtr~T#sii4ԎUG'ʐ8ٟ%UM?!sNWPbnIyysY[Y釅ETEEŦŭgϜ|KWt 8*_nVћ}1G[zfk>-m;wu _ ^\N@럴> \_ ]ů_{Y|}s-smvCy6p[?~ol v u,BZ vwM)W v^h >rF cŸ` +J}*E^2 +}ib 356k([/w:IY!c"OJ,KﭒږqmgWVWSQ]g~N㇖ =Fq]-X&9+zku4svu>xƹk[3Cɓߋ=On-K'X*ԇ&̉r[GWN&%V$9*̘BJFNwp29{lѓy=mT>SSRw&$يs+W*W>UfB훺Ks WtZn^A"ުЦnt˺ý3t/.=Jtdy"W SaMcGgfd6ܛ/xNuab%eW?~Y6|.rwZ? 6mʿ;P,E6?-^Z F#D+J'E`@c dJebc]b$sp) \|/,!#Z+$!'T iM 9J#*DU }XMMHZzx}UwÌFƋ3s9 UKU+9kAof::ZRrp9ipjoiB"b3T%蒭үeKg'+F |]T^HSV'xI~e+MWk]ҵ28ܕ~NCOuɾ6d_}Y*Y)?̍>k~R40A4y*9'/o::~:xo6`.M|ۼw ޷/.?jo_~nUn;?'tPh&]uRtєӞKe$00%0䲞ekdx#ȫʟ"P%xWhQFTFVdY?P@F~t+8zRTo0˽w[ ,M%B~ @e@JCaCM)0.!p E^d!s:]zY`}˂'ۏ AP9h@W0("[s$STxt,Ks|mNϑdi2rr~XI}tC{ws [wx{3n<{$8kdɁg/6f^M]\_X"Zkwwś:[SۡPB{@FXӠ;z?k4iljwl̂*ɺfN>`#搅S.Ʈn?I:['<p/+82d,L>(b+%+5.0^@RdߔWiǕ2KrXr+T?'䩦ss ;]sq˫[]Tݼ=}<(oz1ttIg<643&mBj>W>Y]nb=l̏G[Ew:@!`Aܟ!O *LO'Ֆϯ,6Z?mܼŸEkbbxNNnüdwwQ ap٬Y;n+v^vkjД endstream endobj 259 0 obj 5953 endobj 186 0 obj [ /ICCBased 258 0 R ] endobj 260 0 obj << /Length 261 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xROHQ6Axw )vuYm[Ңgߺ3ӛ5œ]`鲙}v*b{a[QÓ'a?dy֭S{=5ڊ^-CT#hsM9s1F9 1w7;aYf ]%{w;ћ9 \Ir< X}I<>Uw(gRVzWOelπ~v{|u׶>UEP>,l%KTn)=J+vp,ZSk9xw"zmMWzmʨ)(ͳDf[xf8:罊ZIE?9Z*UVPog~~\?A< =ѯ tIsQIi!3NTc)[d@f endstream endobj 261 0 obj 704 endobj 7 0 obj [ /ICCBased 260 0 R ] endobj 262 0 obj << /Length 263 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 263 0 obj 2612 endobj 213 0 obj [ /ICCBased 262 0 R ] endobj 264 0 obj << /Length 265 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoE endstream endobj 265 0 obj 737 endobj 113 0 obj [ /ICCBased 264 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 1358 815] /Count 1 /Kids [ 2 0 R ] >> endobj 266 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 267 0 obj << /Length 268 0 R /Length1 14580 /Filter /FlateDecode >> stream x{ tUU]]w%t'tw:${ (QT6GAGDE W\d:O6??n8#29nu@ygy]|fݕW#ڌh$,Yٷ?}/$/XH@Hd+eU!fۥX6܈2:ijT˸R)u#>p%޹q({[__ի֮(BzqB׊m߉1Ch H(SG+AٕkN&RPL_}IzݩޣB|JQԯz ϲ/]h߃(4*#(_90~x,tcsbYAdN)k / 6Qr?dp^!rz"6QIev hԬUP j$b(u CF3Df!* P%7%2E%^к_]qqZܸrWȃv1Axԟy<=M+x NǝNucSCL RJå'KחJ O]gSoMU;U}TS՗LU{;~ġiwiwjww턺*a/$ܑh=oGCsq7`f('q^+axmPCj8 CP[34gIcVY>p'4 Eu7pp(!6(!HCsН9 c<.l!,ذjNdže.gwdƝlE]𗭹$Ih%{sήa|u04, $T>О'P;ơR(LMn)v(-G ۻpkn0 tabhe#]ŕW8DK+yq 8P"] J@D9ZlUl%6/9Vl[l ?I]ցoyo[!w ,7/xOy]uբk!fv`Aƿ0 υfiABcm@<ـ>CId>nA-g$MG#?OB! m䅷^R4΀vz܊A{G&QmV Q\VrjV݋^Dax2jE9t)ZV+Ѝ3QӆNtʣ7_Ǘ@`+]߰9?8>s5#Q&<'(<]=? 5zɽu O шf٨-X_&}h?DvcS4 Lf_GQ8 sRvIҕ"z70Nf)~n+,),- /<>~G`5^X 9h v&'x VvKx^B/ߡSsrVD,nuj <g>}xހ7<}0~ s ?(b)+SAJOZF-VR:H ӈn>x#7d:]r f.3OjfǤch`<黿%h='HM:{ d/p@qG53T e ! yv9%vb6 zըUJ\J jRo䃽yI<>NEoUm{=yɿ= =1ɢly{x0^0 nO~Twb^ y^Zך6:ڷ495WvGe 862:yv`V]]=vKw hq/]ԕT/C[\ros~1OtR%[Nl+oőEk/(+}`27?,'a5$Aۗ׍a\-G pgi0zѯ_7Q# pi$y#@E->]{(< RxQ0*%<oC!2/ʢ6Xu97v)K{<%1q Z'BƁWnaU15+9Wr@#]#] 8RH7,N9k./xqA7۷1gwK(1 ab.UNx[B*x/eu` @ U o&`U"A8@8oA8}a߃p 9M @yy)M>B lPq*$PCB=&B>ɏ Z>:D߆!!_ i)ԗB^}K!2 .hH?<[M6Þi=h@WA!9HS1[ h&D /t :rd!h%9!kZ@>@"<Q|9):I$o0~1 (@W?V4+~VW=9nZ]w] fa}F f@v d MSvM&6L?Nd;,j̎eSUV$t^]>O/ ӟ#hQNj *8Tj JMb[,v{D\O 3 cDSZԲZ)̰&dZ,cSc_%8qIQ,, )BiE&Moq:ÞIkgohۯ™+';W]1^݇05T³& %hicm,҈aDm3FLWZ'c4HƉ[Y{$p @10&|fCqi2MWN[k9>Gs((2R (JSy]-xsS$xϨ8+z -DSJlg32/2O >SئNZT(hkG,{v<~gif?`l GA8 |T_чKDW$Qdҽ.F׬)b}b=SܙQ8{iY/ *h #$AEDD%1ҦI"lH^"MbZo ^Ӄzz]u}dz~,:.JP6 /67\UM^7Ÿ L^{3_xdL8F _Yy`0lƔR-}Y~?CF :$2#cUV8W/Tj28A<ne:Nç# 3tFM|R6HPcGOg*N(8\*' -w Gi=8 RjQhF6`DdFjS(RAN[m:U(LØ-Qt/^&&8]#~wװ1&J9v^9 *7\c%%fL0yu:P35M@&Nv0V.Bf1kvC57*2XC .tˈ^/~Z. &(s0@ ~^y;J$< ɢlܓ2'RI. "X^8L@_᪵FRF1wp%~SaǦm3yj-.t;waFZ.S23KsXwfM\icUN`KtX/ǸcaMLfZmӌ,0b LXe{#UlC:#ܥ\phGxu@aLt4}2)* bFU",rK!a4|ŜܾД&rj}jC!޺u5w+7 ŲWlK#=LO+%C7,<7qkTj-{I'?F@fM?2ˍo\ZrXV(3/w{ 1rA~upGK1Ry{JOi?=FB7$.ꑱZX%J $ގ 4G tDq p[o`gO3WxOvܯ2 FFHǵZdt^~J]P嶍Y@h ^X\eM*ia&^4|8fU~O".̭&sc5LѠeM,{WMLMoVqfM&)#8ŧ ?3+C<~V0 #z|`4ࡦ@K[O8tI ~ҳ}o-A1pA I)G'iS忐xűʯhe6QB)UT2U QfLXCJ)kW6M7 eT0E5T5Kr|li&$zj DO$XD "y*l.HHu |ʂY*J Hmoq!\8TJPc22҅."GD)1a"zM5t*$u+4踠Fn6)=4Aj_۾3h^_@w\ FeXL09+{րL@MmZ8kF* ƺ,8f.^:{I\՘u6XXUkiJC`W}'Ak”d#uZ;bV< rrkMך2Up+eXQ'`wɡfm.&'>Ch̸:L̬ NZ*`8 x!R\ zAQs(%#4(S׾!y+|e3cL+of*bIk.4WwMg~KfETlFעO>]N/R2v}lG3gc/F^9{x5:2-L21I¡ܩsy,Nk".H|8oZ\lmC(U$q}H` l:Pǃ:a=D;#XN;HBM$"[h2L)DHuׄk-`-h +DAhN"jq()(Ed^d-@bJU`PVY) [һc?]ۻywEzLPhIeW1jyf}ݹ_6UcKUɯc. n?y?—} 7Br *kUtL4g깲Kdɛ%'erJ\AKAu`-u88 .RJڤV:R{'5 3F'[γH'LSS4EnR.l2::1DT<Q/- l3 fq=%?vÿϟz4 eIrzkMcᷱJjʮ)KAgj!V`ܦ0t#r?{x fnkBLd`@A<# 8q6< wuBS==ݓD/+*꣄;ˬ܈h=:>ۉDljl:q-<I׎ ̩}Jg2i]E_yl/mm۸QNhb`n5o,Xn[(+(7K u> pyH#ϓkD¼]GKCΤE[w~>nBLJ,CwB,I0=H$KP֠kr((i*kآτ6ag%5J:K5Vv]hrZawU-Lr(뮠$iʯ\؞ɾW |7L kT _( Q >!ȫ*G=87/n 9؀_Gy7r{>CqCkQ29wkߢCMRICycl4R_f7_V#V(MU+ؙTCzVH^?m%&T+k>=]PÙ݂ѫIjNNBK,f rP q p5T0e=Jck Kgyf6f[TgUƳ3'XX&Qi5|H٪=󤆚:=nL8¯=:@+q,`49{ZGO7:!.{z+f9 *'|&o! ]WF5Pɤbji{LS/y$nU6.oEFeB)fjLVuNٺ-oԽI !Kb"t͜CMغvqKjiNhΕ~nmT 6{ڭyB܉^ cw:<*rEfzmҲ*GQVjIN)}(i H$HȒZLbr/@]`HLȐBV{5eH=kލwO&eT:AoK_T=}N\aZa^]/%q`(X*pL̚Q>!SL9~Dӂ7HRψ1[#FEPamYhS3 k%q }AD;;, t؛o`ɹڥܾz]l(1l?TCs*KpH^hסSw!"'Տ}2EHZUVNd%pWfb\,(wT rx* hEH;aQGl`vA "E/Z.jRK fIBTI @@qMsM(ĵ 4Orz CEb}]~˧^[xuQ"P3# \o党j^UЭkт|in }dZ4M7ɥ[=5_}TS8E  Fۄi#.awj [m!lU4]tf'8+n'D7۱=bM v8:g!} ;@pBi!g4M^E@«\cJp*3IgOUvזe$^c`Upu/kd Z(`PǖRoU*L ^2`3VgTUT˪pT wB Dp)0UpA* šPڤnSwB7R9#]]ob\܋wL'm΅ۢ jr\P~'vX\XT9X W1Tp].~U98|]z2oc'k's,T2'2") nRP4!J'iޔ+}>.=$P*BOabRHeUXkFRg;t"-U$u:ݔ:ҷN'-JpI}e67z[I-sl1&DH2. XȲ+V ~p FTB"p6Pp|" 9\i 5I|,L:"uʲ nNt22[pYj\ ֹ^v8;P?L!^{mr륒_ qc:q:ǾJQn7 {WkK0Dvup*r gӁUpz|L ),9:eF'UzJ=,$YbT5 Z\z&WGh 8e=>#J8v [ϧP?/3(9g$—U>>%wNsP|j^ﱞ;Ҿ-|e[^w~Ѧ|G iZچ1&21|  `{:\hx7 08#M#KcV;tq%RK*io amNlj .-&DJڴ^XL1*f6wjY5 bᖐ\uͧ l,o ^W%~zۍ8, 2ҔKbasr8#9ף9aCF6> endobj 270 0 obj [ 250 0 0 0 0 0 0 0 333 333 500 0 250 0 250 278 500 500 500 0 0 500 0 0 0 500 0 278 0 564 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 333 0 500 0 444 0 444 500 444 333 0 500 278 0 0 278 778 500 500 500 0 333 389 278 500 0 0 500 500 444 480 0 480 ] endobj 114 0 obj << /Type /Font /Subtype /TrueType /BaseFont /FEGAOG+Times-Roman /FontDescriptor 269 0 R /Widths 270 0 R /FirstChar 32 /LastChar 125 /Encoding /MacRomanEncoding >> endobj 271 0 obj << /Length 272 0 R /Length1 17052 /Filter /FlateDecode >> stream x{y|TEpUݵt;}! YY KY0QA$2 ." 8 "::3|@;u;盟ͩ[]N:u,\iP#bЈqMCo`Bl9pZ8;a7sI1͛>'O#tMyYΨ45֎:7.pΉ3,\ mpx)3iIOS`1}`a O[P}?yh.R1! J75U޸^{o޸ΐ)_pAs?=a)C{9(v4  %j;ѓ/0h&~-X [x++FȁFT.cS<c9'a;ޗުA;<<` A4K=oT`1<Dn1+s-VP; _yNkM}agkgomwcxi =䙚%Nz }LD+yr]W=vI'ۼ@Dq6xCUp P29 U!M'eHM@x'>欰RGCR$!(x$DբREo->TlwPEcU⫇EV$"M]_bdjtC\c^xXZcu(D E-WoIrd620ggr]§di^WQח]+"L)FIy%U8aN||;p6߉9|7eZ~ 0DAJd4LFiddf(3i,sd9ȚJvZa±Ͷs@5rkw_[Z.5?'~4h< 5tMŏ桤 d4~Һ-GkhG^t $e6bK 0)>"pR(H'j1NV)s,C0J-Wy[u-l?xp¤[.TT~O>7 n3wNsg$vgNTo2Y_k-rJ?)5PomFy[*f4ו#`2-*RAE-Yyuhc哦YS^54:D>AhmfRm ҧXe-el?=4@ŤH\QlZkɪښJ, Y?iV0iuDmA#jZ(Aݑv=l+b?> z8e:[SZ)'bLgP a-\`Ȥ=d(W7UawFku~o`~eR>F:н҂' @g36c V~)k(-&0#j|-ZdvQsukU;*sw"4RQY$-.$ꭀ/WPY6yLmVxg0 M5't|1R[ɠGZxì7Y2S25#kZ["e0 'FԴɭz)ϴuӜ 4g%C{N-4+j;G}-'|Ў-q< '/^dR(=z'<!Y.6E8<6{Gz"j#2KCs8\8\Km)+8<6K79 *sxU??wRzGwR8" _qcbq@ 5h {{fhN:ЎF4@0_V3h%5y k%@m:@ x#U^=k=9)5DJoEh@NI1E ф)TAlHeOCgD&/!dg;C|碗܀{J@~9(Bp- "dqd`(<, r ɕj!JF%L"y]ȱ4n/w_oO #BbQqVqESSWI Z_WnทuN:݇6khn|xŴG ByLI,&f :@q3W .\AGe^I9 oИ̬O(e׵w;~cP;[ur9p(f>@DgY0Æ|CjzU(*)geb/d{gk;m#)讓&IG02# ^aX1FׄG:Qv!{UvTח}JJ3D:Oǡ`(3fTްt}EPtHzO/+f?{8pQcz(/hzqFJ&?|%BѐׅL[جx J;EG8o%þ>-?xއɩ̎z1 3Gu::# eedڃH] $2b2 ;$ؒ0$PP} LS?O`InxM͟ n-?&_~/@PbB~l:0Π[ʃ\k~l)!l=x-Knyx oe/;֑r\$:Fb3PӠQLț9Aܡ$TwZ`vl}o҈ W9=̫t$a e WPMBz_.ГW\^t-yr~i5'0:}Vz҆!/Jik1:ǩ@_]a'ÂAM洆! GqBM4%ՊZ}N % aL'deP^y\6Z4Wolk|vv)WV/NdqpA "S}KM|\q!XY0<n ]k IA J$px-fXI q& acJXE0[qmDiD^d8vG qsJZ÷v"mnF2e6Tb-.)SAN_0Fvnd;-Zj&bMwXւ 6`?cYU_cϿK$ 0Sn `.sk:)6Ma[cF̣.w1fv&"nxwfM6պ`ie :.Q#5` jAE4&]66t01iU(aCA'6+\VpO H3靟'k[V|~֍ON~"}<0}ұYԅ^(LI)/$>ͳǷ W@n4NxV7Hr䶊bv㢯aM5<@%ђ  /p+08^(U6Lʦ#4؄ :I aL߱ph#Iϟ%qƮ5ۤG{͡z~s gtRRlzՑDͲ* K ѭTjV$E ȮѶcAƞQ~*jI1X螑ٌ݀ LJG̃7OKۤҽ>-J^@0bT(e/_fewɅhCѩTLŅxQ0.k\DcF7DzB,z hN6 fc5 ?6)2mO}&QٔD^y|pB%!5އ΀ u$l29Vd#Gn!w'?x_v?B.ON'aҟ1R?1wo8}5 1y/ !^_>O1;x=tQ0# HFf|sѰgʊaD!`} TV_jZ@oQ~|9^fxfao"ex(X`,\œ;*^=0OUՔG ;l&$L( 4d,i B`FIJm`xQFXX(=1j<0 pS}i\R}tw#=IJ+l| #A3jq 7jZ‰chlG):|"cp{LN3s[LlАp#"^pH/zfOd͌w` '/6lfl~C0%Xw cLH&SV˦ԁ`pvfP buwrK Lgsޟ3yXN`TJ5.0y-tKJ#kbtw+L>c̊6O>bJ2Rdb8.󴹾2D}Mk Z FퟐdXQSFFa(2R+Ϭ<#mVqL!5:]-;:2(\K} MQ]W] q})HJg(gnbN( j-$*\:(A'p3`u&#\*U NNޝv  |o87n &Wz^0xKTd$NH>mYx 8/·lnp,^P>!ꃁrm~qCf˫܁zЛhoւi1 Jr@Wi}(N\ APic`)'Ĺ$Kb[ ƫ"Ej㬢Uk !PcTUj@pJZ>ե;QB Wa%cͭBtUwz8w8&Qnx\ Xr,@^ kXXbaGx޴]mlƖ;$Vu|}#>ETdc:@:̟ ˛_(p&51tI!ަR: vdw3)1mK Ѹ|KWh@k1(}θ:"+sE$< - 'z~tL.Ο}.u%Ijȟѓ-&3WNKxV^ɤ/.vTvn7P#^2XR5z0` DPeTғ P4PSAuPp-ԁp r0M#7K}*sW6mz 6wJLĆ? qMlw,} aTz t>Qt7k!0Ge%Iש.k]NUlD%xpBݟe98G xg۵AX>=.ncc&8'&ٙip~@c(=8$^u̢qcS>8v's`ݐbO7ݛAd=A=3 1AM>SɲZQG BꕢÈχc;.3Ǡl@.SS`Ӻ~Ek_tT90o2yAt ]C0gG(Pl61m1oI<_224&qlhZRRRmaNT#Ʀoui8LH AdS.ҷ2VGpxl[:0)(YZOH7Y.Av0J244C çC> p-dao\1`@ 飙X[0WMbB/Ǐhɹ[Seg.'߉S =Ě;~z "{g,O^|t'wFqcSoB򐇶n܌ٕՑdѕZ?y dQp@;z]-/00YNNo}cW0&0&nJ3"NDFɁ 6dʰZp0%o*/*~\I1X>L?_aߍ> QhKo6:.D G=Yyw=3j A'$?Hz)> ft~5 &" )grk3YN@fiwk@˶G3d!UH̓_x  p="frS/iAc_|ѽI X- p/tW)eȥ EaH]CsiЏ-,R{ ,jW`XWf*f ! jj썬d*`q0DiW)!ss*4aXj ʥUBJI%bc&YE}? 3*XհNTA 6aO) mj08,w*Vv d(F~2*n.`E v <1 5 ,Goۚu-ȤRCG1V떟q=SWhyœxK{6ܱ˿;&X +s ,glXʒy`4w&ۃawF.;C J ߅E6ckҴ6^|YlӉl5ÔWr8_\c DW5ā;>NOrAn݌Lޱ5P>*@ ?Fw%8 n4E5;;F,xa2~vC™S&wP|-@'<N(oijX `?\p 0A.o:Ij'@*@1pX `?\b35 Bu}>xR<OS}>xV<{n?޿~G|P^W!}>xu|D|T|t>}{To})}}py"/O/?__o///p endstream endobj 272 0 obj 11526 endobj 273 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 717 /Descent -230 /Flags 32 /FontBBox [-951 -481 1445 1122] /FontName /JBBYHV+Helvetica /ItalicAngle 0 /StemV 0 /AvgWidth -441 /MaxWidth 1500 /XHeight 523 /FontFile2 271 0 R >> endobj 274 0 obj [ 278 0 355 0 0 0 0 0 333 333 389 584 278 0 278 0 556 556 0 556 556 0 0 556 0 0 278 0 0 0 0 0 0 667 0 722 722 667 611 778 0 278 0 0 556 833 722 0 667 0 722 667 611 722 0 0 0 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 0 500 222 833 556 556 556 0 333 500 278 556 500 722 500 500 ] endobj 115 0 obj << /Type /Font /Subtype /TrueType /BaseFont /JBBYHV+Helvetica /FontDescriptor 273 0 R /Widths 274 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 275 0 obj (Mac OS X 10.6.8 Quartz PDFContext) endobj 276 0 obj (D:20110902220055Z00'00') endobj 1 0 obj << /Producer 275 0 R /CreationDate 276 0 R /ModDate 276 0 R >> endobj xref 0 277 0000000000 65535 f 0000144092 00000 n 0000011090 00000 n 0000119880 00000 n 0000000022 00000 n 0000011069 00000 n 0000011195 00000 n 0000116163 00000 n 0000020807 00000 n 0000021105 00000 n 0000021123 00000 n 0000020392 00000 n 0000020695 00000 n 0000020714 00000 n 0000015873 00000 n 0000016176 00000 n 0000016195 00000 n 0000014646 00000 n 0000014937 00000 n 0000014956 00000 n 0000015458 00000 n 0000015761 00000 n 0000015780 00000 n 0000011786 00000 n 0000012077 00000 n 0000012096 00000 n 0000023255 00000 n 0000023558 00000 n 0000023577 00000 n 0000017937 00000 n 0000018229 00000 n 0000018248 00000 n 0000015048 00000 n 0000015347 00000 n 0000015366 00000 n 0000019572 00000 n 0000019868 00000 n 0000019887 00000 n 0000021216 00000 n 0000021512 00000 n 0000021531 00000 n 0000022029 00000 n 0000022332 00000 n 0000022351 00000 n 0000012594 00000 n 0000012897 00000 n 0000012916 00000 n 0000022444 00000 n 0000022737 00000 n 0000022756 00000 n 0000022849 00000 n 0000023143 00000 n 0000023162 00000 n 0000025721 00000 n 0000026015 00000 n 0000026034 00000 n 0000021624 00000 n 0000021917 00000 n 0000021936 00000 n 0000016288 00000 n 0000016582 00000 n 0000016601 00000 n 0000016694 00000 n 0000016991 00000 n 0000017010 00000 n 0000018746 00000 n 0000019043 00000 n 0000019062 00000 n 0000013837 00000 n 0000014131 00000 n 0000014150 00000 n 0000024084 00000 n 0000024382 00000 n 0000024401 00000 n 0000013429 00000 n 0000013726 00000 n 0000013745 00000 n 0000012188 00000 n 0000012483 00000 n 0000012502 00000 n 0000017103 00000 n 0000017403 00000 n 0000017422 00000 n 0000019980 00000 n 0000020280 00000 n 0000020299 00000 n 0000025316 00000 n 0000025609 00000 n 0000025628 00000 n 0000018341 00000 n 0000018634 00000 n 0000018653 00000 n 0000024911 00000 n 0000025204 00000 n 0000025223 00000 n 0000024494 00000 n 0000024799 00000 n 0000024818 00000 n 0000014242 00000 n 0000014534 00000 n 0000014553 00000 n 0000013008 00000 n 0000013316 00000 n 0000013336 00000 n 0000023670 00000 n 0000023970 00000 n 0000023990 00000 n 0000017515 00000 n 0000017823 00000 n 0000017843 00000 n 0000019155 00000 n 0000019458 00000 n 0000019478 00000 n 0000119841 00000 n 0000131447 00000 n 0000143818 00000 n 0000036467 00000 n 0000036740 00000 n 0000026455 00000 n 0000026768 00000 n 0000027722 00000 n 0000028055 00000 n 0000036760 00000 n 0000037072 00000 n 0000031410 00000 n 0000031723 00000 n 0000031744 00000 n 0000032057 00000 n 0000034234 00000 n 0000034541 00000 n 0000030136 00000 n 0000030409 00000 n 0000027412 00000 n 0000027701 00000 n 0000035188 00000 n 0000035461 00000 n 0000030783 00000 n 0000031056 00000 n 0000029802 00000 n 0000030115 00000 n 0000031076 00000 n 0000031389 00000 n 0000035799 00000 n 0000036112 00000 n 0000028738 00000 n 0000029120 00000 n 0000037093 00000 n 0000037366 00000 n 0000026127 00000 n 0000026434 00000 n 0000036133 00000 n 0000036446 00000 n 0000033062 00000 n 0000033577 00000 n 0000033598 00000 n 0000033895 00000 n 0000027078 00000 n 0000027391 00000 n 0000026789 00000 n 0000027058 00000 n 0000030429 00000 n 0000030762 00000 n 0000035481 00000 n 0000035778 00000 n 0000029141 00000 n 0000029448 00000 n 0000033916 00000 n 0000034213 00000 n 0000032734 00000 n 0000033041 00000 n 0000028410 00000 n 0000028717 00000 n 0000034895 00000 n 0000035168 00000 n 0000032406 00000 n 0000032713 00000 n 0000028076 00000 n 0000028389 00000 n 0000034562 00000 n 0000034874 00000 n 0000029469 00000 n 0000029781 00000 n 0000037386 00000 n 0000037693 00000 n 0000032078 00000 n 0000032385 00000 n 0000115293 00000 n 0000087017 00000 n 0000088593 00000 n 0000045333 00000 n 0000046971 00000 n 0000058716 00000 n 0000060685 00000 n 0000079735 00000 n 0000082073 00000 n 0000085548 00000 n 0000086995 00000 n 0000088615 00000 n 0000091148 00000 n 0000066280 00000 n 0000068627 00000 n 0000046993 00000 n 0000048569 00000 n 0000037714 00000 n 0000038609 00000 n 0000057118 00000 n 0000058694 00000 n 0000091170 00000 n 0000092766 00000 n 0000064625 00000 n 0000066258 00000 n 0000082095 00000 n 0000083505 00000 n 0000118939 00000 n 0000055384 00000 n 0000057096 00000 n 0000076282 00000 n 0000078281 00000 n 0000105246 00000 n 0000107593 00000 n 0000050646 00000 n 0000052984 00000 n 0000060707 00000 n 0000062345 00000 n 0000103648 00000 n 0000105224 00000 n 0000053006 00000 n 0000055362 00000 n 0000097623 00000 n 0000099199 00000 n 0000038630 00000 n 0000045311 00000 n 0000048591 00000 n 0000050624 00000 n 0000068649 00000 n 0000070848 00000 n 0000074684 00000 n 0000076260 00000 n 0000095171 00000 n 0000097601 00000 n 0000083527 00000 n 0000085526 00000 n 0000099221 00000 n 0000101257 00000 n 0000062367 00000 n 0000064603 00000 n 0000101279 00000 n 0000103626 00000 n 0000070870 00000 n 0000073208 00000 n 0000073230 00000 n 0000074662 00000 n 0000092788 00000 n 0000095149 00000 n 0000078303 00000 n 0000079713 00000 n 0000107615 00000 n 0000109191 00000 n 0000109213 00000 n 0000115271 00000 n 0000115332 00000 n 0000116142 00000 n 0000116200 00000 n 0000118917 00000 n 0000118978 00000 n 0000119820 00000 n 0000119964 00000 n 0000120029 00000 n 0000130910 00000 n 0000130933 00000 n 0000131162 00000 n 0000131627 00000 n 0000143246 00000 n 0000143269 00000 n 0000143511 00000 n 0000143996 00000 n 0000144049 00000 n trailer << /Size 277 /Root 266 0 R /Info 1 0 R /ID [ <4bbafb38cc346fab9c1c11f3374e5162> <4bbafb38cc346fab9c1c11f3374e5162> ] >> startxref 144170 %%EOF 1 0 obj <> endobj xref 1 1 0000149872 00000 n trailer < <4bbafb38cc346fab9c1c11f3374e5162>] /Info 1 0 R /Prev 144170 /Root 266 0 R /Size 277>> startxref 150055 %%EOF openscad-2013.01+dfsg.orig/doc/testing.txt0000644000175000017500000001104212014547135017713 0ustar chrysnchrysnRunning regression tests: ------------------------- Prerequisites: cmake, python, ImageMagick 6.5.9.3 or newer A) Building test environment Linux, Mac: $ cd tests $ cmake . $ make Windows + MSVC: First, get a normal build working by following instructions at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Windows Then, from the QT command prompt: > cd tests > cmake . -DCMAKE_BUILD_TYPE=Release > sed -i s/\/MD/\/MT/ CMakeCache.txt > cmake . > nmake -f Makefile Cross compiling Linux->Win32: Please see openscad/tests/CMingw-cross-env.cmake for instructions. B) Running tests $ ctest Runs tests enabled by default $ ctest -R Runs only matching tests, e.g. ctest -R dxf $ ctest -C Adds extended tests belonging to configs. Valid configs: Default - Run default tests Heavy - Run more time consuming tests (> ~10 seconds) Examples - test all examples All - test everything Adding a new regression test: ------------------------------ 1) create a test file at an appropriate location under testdata/ 2) if the test is non-obvious, create a human readable description as comments in the test (or in another file in the same directory in case the file isn't human readable) 3) if a new test app was written, this must be added to tests/CMakeLists.txt 4) Add the tests to the test apps for which you want them to run (in tests/CMakeLists.txt) 5) run the test with the environment variable TEST_GENERATE=1, e.g.: $ TEST_GENERATE=1 ctest -R mytest (this will generate a mytest-expected.txt file which is used for regression testing) 6) manually verify that the output is correct (tests/regression//mytest-expected.) 7) run the test normally and verify that it passes: $ ctest -R mytest Adding a new example: --------------------- This is almost the same as adding a new regression test: 1) Create the example under examples/ 2) run the test with the environment variable TEST_GENERATE=1, e.g.: $ TEST_GENERATE=1 ctest -C Examples -R exampleNNN (this will generate a exampleNNN-expected.txt file which is used for regression testing) 3) manually verify that the output is correct (tests/regression//exampleNNN.) 4) run the test normally and verify that it passes: $ ctest -C Examples -R exampleNNN Troubleshooting: ------------------------------ 0. Headless unix servers If you are attempting to run the tests on a unix-like system but only have shell-console access, you may be able to run the tests by using a virtual framebuffer program like Xvnc or Xvfb. For example: $ Xvfb :5 -screen 0 800x600x24 & $ DISPLAY=:5 ctest or $ xvfb-run ctest Some versions of Xvfb may fail, however. 1. Trouble finding libraries on unix To help CMAKE find eigen, OpenCSG, CGAL, Boost, and GLEW, you can use environment variables, just like for the main qmake & openscad.pro. Examples: OPENSCAD_LIBRARIES=$HOME cmake . CGALDIR=$HOME/CGAL-3.9 BOOSTDIR=$HOME/boost-1.47.0 cmake . Valid variables are as follows: BOOSTDIR, CGALDIR, EIGENDIR, GLEWDIR, OPENCSGDIR, OPENSCAD_LIBRARIES When running, this might help find your locally built libraries (assuming you installed into $HOME) Linux: export LD_LIBRARY_PATH=$HOME/lib:$HOME/lib64 Mac: export DYLD_LIBRARY_PATH=$HOME/lib 2. Location of logs Logs of test runs are found in tests/build/Testing/Temporary A pretty-printed index.html is in a subdir of tests/build/Testing/Temporary Expected results are found in tests/regression/* Actual results are found in tests/build/testname-output/* 3. Image-based tests takes a long time, they fail, and the log says 'return -11' Imagemagick may have crashed while comparing the expected images to the test-run generated (actual) images. You can try using the alternate ImageMagick comparison method by by erasing CMakeCache, and re-running cmake with -DCOMPARATOR=ncc. This will enable the Normalized Cross Comparison method. 4. Testing images fails with 'morphology not found" for ImageMagick in the log Your version of imagemagick is old. Upgrade, or pass -DCOMPARATOR=old to cmake. The comparison will be of lowered reliability. 5. Locale errors "terminate called after throwing an instance of 'std::runtime_error' what(): locale::facet::_S_create_c_locale name not valid" Is a boost/libstdc++ bug. Fix like so: $ export LC_MESSAGES= 6. Other issues The OpenSCAD User Manual has a section on buildling. Please check there for updates: http://en.wikibooks.org/wiki/OpenSCAD_User_Manual openscad-2013.01+dfsg.orig/doc/OpenSCAD-compile.graffle0000644000175000017500000001141111672262023022006 0ustar chrysnchrysn]mw N>g" DӳҤ/49Mޙ뻺cN0t_ l8 vK5kVGBH[[[6p,m`Gaw귝ο^l?_g넑r񡲳0lH9;9>Px(;(>߿Q-a@g?dAt{3 nIr*ыŁ9_ىu˂c˾=+'N{;,?&9 [(PszzX˞-r*B+'&7EA?0Jo#?~hy_w 5?kbp39dv8WN|c`W?I%n `+nN|w4\+6,vb}>l~|51"ZȊX@$ ԟL/7Pz IWg*ҹ4GN8tG԰bQLơ0hI5R;`@ޤǏZa6{Zc|HLҼeV7$0z|]5([*RB*arN.{i; Ԉ1y;T!v&TN6ytayR+ 3* QZȱW?E,Vv4Ņ帵75HmD6npͨk_y鏼nVB7E*E?v܏e֠o Y5s*Gr[T_SLuUyeU X^+Q߱}۷%K85l|/.NtzݷE@yܯŨM\yKw' ۉ!DNB8@|hZl Ʊ  O->t7vxV4 ,7mo'EGX=(T,Ŷ>S KX_9~K)=?Px~)OJw4yZbsW!DbB>(cf=#˻"֏igW5K٠3HC0|ϸ b]h 0Xէ0l/¯_+88t= \HCם&ߝ֎c}ѷS"S4ɻ%f2Ol|?3W'HnT`P]%g<sH&L^LpiSu?;21ƺS0%H*X/*;W}> G``踬KT ׀ TH)K޼^ϯGԮ*@?p]v *$",I;]ﻳRZ>яV9x(T3TH5`T35BnJ>:Qnk*:O)%~Gߋ!b]I}W-^36mH:BU'v7ԡdO8K^mbTY򦚮 6oLA*vRHe Tm(7,80CF`!ˈb1TC 5Un!VKC'jt=Q~hpgWI?P2[$udpW *ulV0pFꦊoG>gVwX+XiLxcBT?܅nZb|ؼ>X1'`>oHNuH@۷s!U*B<4"RIiT/_l/0ց.#kQc q ?Xe(-fJg`W:%WD!5|nfhC S:;CSPJ")[Ŭy Bk4VdcYtz]ꍵM 5׿pf- u5ǭ**יjәJ UkTjHKL5Rgc]t}5iHepw_^pdL@Ý\}/t"O<Љ=r[%úddA mBJ偏yX$x/P8imGj ֳ8 wUڷ#^]"=%`K%l7 "t[8hlD#ׂeG)`ە(k4d.w0۪[KMyWBk?*},t QpXJhr q$P:Ǫg/{p?`߬ecXVDn`;;|* ѥEM6 ,"P4,]}+p<~d+KZq*׸>8Le^T=URC㽈T'({8/ljJ005!tLK'.HF VWY{T8# o+4;C-i pYմX[-y'klr2 Г cVMݑ˖HHXEK%OE|ݤnj|hzJ1""?y7 L`Se4PBDfTXT<ѠGzq$z#n *5X7=ĂL̋MbUQjiV޾O EehMVc/Z5rbR?5ړݳ>xNKϭ&'q^{'56@ҺI'I6Ci3I餖3ɇmTd.1LiB"Hl", "*f|,Q5kdXyCΕw(t܁>erp]zu;ݸ7&?u/5]ęT "Hq{g{7>d'Ӟt*)]e_Arq*JVpOO[$9 cUlk\$Oy[2>x26ے 4Nms ]b4Nܓ[wD)K( "r*H% =$.0h6iN74~zutYx,rU柳e+Txhά+lD&89HJlY."vw`lxVS8q Y, #6H,Y ozߑn4C/?pxu[رN{}ϲT>xV\ǜU US"S=gFNCjb3{ui\9^3SY)@d~]^+ .,вMkzGN8tbi&΃c8SU7~l2nUWb]=*0c) i=U\2MQ*9e+̧Rn(tŠ,{:`E;.K+ 1]8QUi*Hl|J_UsYCQGVyD=`iPP~Ag*DL@D5&֜)yxꠓt^/y_6q/+qpҏ"++9fm]! o_ `O!=_뇯ߟށOοpiIObJ}ƧTlB¼Iv,wy\װr.:㵘=ۻ{gLʔ_">aez>(.ƀ[2]J=(%NUdǘO!d ~"y+z<|nM:=Xpa]fhn$@nC r*R[xu:)x޳DY|F߾?(2gCY#+&openscad-2013.01+dfsg.orig/doc/OpenSCAD-classes.pdf0000644000175000017500000062601311640436732021175 0ustar chrysnchrysn%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream x]ْ6vS?W*UlO2RKmqKvͳ;`K\)lnYǯ)_?/kSM]_7WU;c>{T'{VsjFѯni Gfr8_7z MzA~AGtAשuzAGitzݢzAi~AG0 zi0 G00zi0 G0L0Lzi0̚ G0̚0zi, A}˗dZkk2M7ES%Wd(?1.:^M0}!!)sUl_HK_lFHZ0KCIFa"RŮ4Kwi #"2Ӧ7BekotĦ$""" QYMY"2S8in s ;ԘLLV%p[},$/܉O;/\RcYE 댶0Dn!#d !am0m4ຒyaʉL6Sy^c=@R o9r@7 x"pe\BYw}jT'|麶znhT@ѸLf~7{Vh73r(']{5Z?oĊ9Zz#P+w0BӵƵ@sp F'4{yk7Sw l$ f- +cnb27ao>wWa.W0+mMKlOPn!*X>Yi 5;qh0x<[Cz`{^%ӫ0 RLH:e#<,8zXyą/=weI׵?>/Ly1^-ͻ 9:X%j[HR \]tв3 T|)ޒ )/YlJµ&4"ޕ!babR."HxgwLEmkJ>!-knA-$mnE _f@['%>)_8܇C(K]:Ζ؉P*bϰN) Z Ï1@"nw|[tH_Py=IjQڐ0Bn },6DYc#Ҋ5EJrD{1` 3ܜ:M6 eʿin{3 Uns͂ Jl f1A3Hظ#&1{lp' S611Y,el/]ġЌ΁H%qQJe*+o$="IUZ&ΉzS ns);JQB"+3L01}?KAd_,=ndOK 2TRqQ>QFVEh#.oeyICy]/N Iʱ`l.urvjzB&PffkI("\=ه9#)S.Exö!Ee!][xyҧuBGv⦃٩,s0a 4MKg@ϕtT~OW X7οiZQNkOEQFlWW;Gv8TBC2bԶ 壻 "Ӭ#T11iXP"Ps:LPHhUsf˫8>HyjWL@C͐G6~ );G cC>&SKWh9Z=~WNfzV -z80U ,ݶ$tSt_z ~IpX Y^[THLQ0D#BvO#(Hq񝭥7Q^ BU3{h YιfXn AgWeTdI?тT4 ޒfiRk۱TL)]9g̏EH=4i!͇>'0R 0I}^B5'T3@pOjuykF*mn(Q7&}ݼKɿ#=) G}#" UEAiDc롺 NE}T0200 YhTc-|oh'ৄB=EńOwLM!*$@whU^+HN!l&mQuZ`id|϶}Ə[ݺ6fM60J(ͤ ̒q}߱L,$fR*gg9NM]ua`EdGTbբmM`-9EcDNBhBXMJ&H MXFUHʷ$јJ7Έ-60 +~(I FImd$܇DIIN{}B{&$9ojA'xp 4yb^UTJ SHe;Biȱ*|8cI X!lzuyAڂXJYX!'Dꀋr+\at\0zH/L4t]ubiM{Y=}TWfqxmG}H}s; YE+tu4^!h_vx R% ] % {̶7 H-cR-6#80bG<em5~ ,!КLc]A0ٮi@+X*[a!^6`nu!=CLlqX1yB d 9c cLJfH—j$zHZ0wʓβdpPYyoMXtqjb_\ߟ`TՂ[g]-62Im#96W Vrf3}3]GľYe`6+d&#% ~ 6ŐfEݑKrZtj"G8X,8AF/ @o޿#9XqQ8Yj ܳ5GsjNd[icQ+T Xne=,yK^C7\2CC $/)cqZewm~62WND1}"Ka5wNeBf,cS|Rom(7NxQ[O]|{3[lK}H"8sAEb*)vFasaLS;vB"KWF7+#c6#@1 | `C(P(̪Lۉ胭.2>ƫ6a,r0zрDLNݱG79pD5#GO#*>vspg[D"$ƭdXBQuI:;_9`A1>ޒTO/N5'?X`VC9rk>]/4t(RdgZ2h"'.-񜒸{.±b kJg~oܿp-70q}k^{n ǎzB,^mĽzk&P ʬ31_3qX({34CΕ^b5PnԐ/&7IoyFj~E%^)w}ז<_`=x!]fg <\yL`cx %rÑ;S8! SQ:|}Yߊ2r<2 vφۑV82JK Gm ϾpE$:95OJ:4lI">2irPm0yZ* %ڐm>fs+unkY}IάhL#єYxg/C^Lp" VCfM@Ky 9-j/hlI8NB[`O0Йzta B5?hy@ϔ7Eb~آ:Bڶ8 NXrSƔv v8Ν:ˆvS>`Ҳ <7^N][xz BEbV@^CrU DLZ'&X7V)"xHdmas> Zކrl o6(g!Q y§-!ӧa}E nĺrp$8G`c ǿNX~F2k0\~>0Q+0A]Wq%@@eܥHົF5^Du]{ Q[? *##l%-D;GTFR ATnLNTB|a$5L5Bܴ[okL ;IDjn"ήc^9XLcN4(¥O zg?}w7[78&HRr=3rb>ZH|ܐc U_WӣW&{yfEǑt!kv %XQl."b䇘& c4DvI-~;1M=5It;r첣є]@sKi\ٚ!LLgz-tytH;PM'h[[ڨH"%ah6iy IE3h颾OeR93OKYA6~ĀcS$ֹ/$Т,*j@NQ3&=s+?MDԤf ~G|{D&z0_1[rkt&">Dp7#Ukǵ K GmR*)I[,Q({ˈ.%8D!r`{Dɹ,ܜ">wvFv^N|hJSR@dph2V`E- Ȕ56ߓ=kfz:kfLp L{nQNUPH+}hj4W0&DKe,Dh[kS8uZ쐈w@e'/$aA*{ "6hzt!o ABD.j|*:PF(!?XE/?:8!=v Fe3s,H|vQ5P@Xи>JȒ"BE-3PbaHfB!5/"섪>rTTa+%m.9q&J2)TSTl%TAKV !Jmj-Dژ6,LM&ўhzė3j#0INܓC2܇ /6AQ5dbYcQ6WH!}Km-nW] O7Fy(ضԕ1`J'Ԃ4%FhkV ]WkO D/cWsE,%2q(ʄRT@48M,Xh~AP_;(ؕ}RLk[|n1քR>!Ħ9L8jY]%qM y&buė_@|@ c/u4:"_9!>Dɝb~=<6C"r>*>V̥"HDBE}k1"uX@M gF=9"g9A60$ {|r+}e\fLH{۪+c<6:b݌")3A?!ctѠ$lJFI5LیQ Ltc,7 'J_CońaB =|(LlJ&X e0?AyQ? [))3""̀>ceA\zT,?>ݱRwOxp |"8ʬa8%{\"2j6Kl:vS3Hr=baPMf+w*~{xRWn926v)urz۲ReQ hi!+{|*QlcfBJs,V,|,(U]'Y]ʧxdbDn;70lZd7=*6Ze Ϛ~Uٟ^EP{i D<.l :l̜-$ҡYo-b^ iO"X9 gԇ-/8ghoLdխGIk~ 3^hkj.Et٭c\X=%6W^dF Ғmj%b!sl|h/˰p1_ WF}`s}aHwN?FKc#vi+(` F3р S E[#e8-m'_Rhca8KPjw@d3>vqFO j_>HOԴ^CnG: ]0~& !WһmnuP4Vm 8#J6b5gqƚ&N Mȓ@٫&={ =dA{@.` R>){xOtr endstream endobj 5 0 obj 8248 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 927 1410] >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 7 0 R /Cs2 290 0 R >> /Font << /F1.0 291 0 R /F2.0 292 0 R >> /XObject << /Fm1 8 0 R /Fm22 71 0 R /Fm26 83 0 R /Fm6 23 0 R /Fm36 113 0 R /Fm59 182 0 R /Fm88 269 0 R /Fm17 56 0 R /Fm80 245 0 R /Fm84 257 0 R /Fm27 86 0 R /Fm54 167 0 R /Fm29 92 0 R /Fm12 41 0 R /Fm91 278 0 R /Fm86 263 0 R /Fm31 98 0 R /Fm18 59 0 R /Fm93 284 0 R /Fm85 260 0 R /Fm73 224 0 R /Fm52 161 0 R /Fm28 89 0 R /Fm69 212 0 R /Fm16 53 0 R /Fm89 272 0 R /Fm3 14 0 R /Fm60 185 0 R /Fm44 137 0 R /Fm81 248 0 R /Fm50 155 0 R /Fm75 230 0 R /Fm46 143 0 R /Fm94 287 0 R /Fm38 119 0 R /Fm55 170 0 R /Fm65 200 0 R /Fm51 158 0 R /Fm56 173 0 R /Fm48 149 0 R /Fm14 47 0 R /Fm61 188 0 R /Fm30 95 0 R /Fm4 17 0 R /Fm19 62 0 R /Fm9 32 0 R /Fm25 80 0 R /Fm70 215 0 R /Fm77 236 0 R /Fm11 38 0 R /Fm90 275 0 R /Fm63 194 0 R /Fm87 266 0 R /Fm79 242 0 R /Fm64 197 0 R /Fm34 107 0 R /Fm35 110 0 R /Fm58 179 0 R /Fm74 227 0 R /Fm10 35 0 R /Fm5 20 0 R /Fm71 218 0 R /Fm49 152 0 R /Fm62 191 0 R /Fm23 74 0 R /Fm42 131 0 R /Fm40 125 0 R /Fm39 122 0 R /Fm92 281 0 R /Fm33 104 0 R /Fm76 233 0 R /Fm53 164 0 R /Fm37 116 0 R /Fm2 11 0 R /Fm66 203 0 R /Fm32 101 0 R /Fm47 146 0 R /Fm41 128 0 R /Fm67 206 0 R /Fm21 68 0 R /Fm7 26 0 R /Fm57 176 0 R /Fm78 239 0 R /Fm83 254 0 R /Fm8 29 0 R /Fm72 221 0 R /Fm15 50 0 R /Fm43 134 0 R /Fm13 44 0 R /Fm45 140 0 R /Fm68 209 0 R /Fm82 251 0 R /Fm20 65 0 R /Fm24 77 0 R >> >> endobj 8 0 obj << /Length 9 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [4 1352 129 1410] /Resources 10 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T0Q0465R042U0P(JUWSH-JN-()MQ(I9TBrgK>WB ` endstream endobj 9 0 obj 77 endobj 10 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im1 293 0 R >> >> endobj 71 0 obj << /Length 72 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [232 1275 357 1333] /Resources 73 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T026R0427  E y Eɩ%9 E@u i 45k35SHU5rY4 endstream endobj 72 0 obj 77 endobj 73 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im2 295 0 R >> >> endobj 83 0 obj << /Length 84 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 783 528 841] /Resources 85 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V00V042U0P(JUWSH-JN-()MQ(*I9L)k4,KE endstream endobj 84 0 obj 77 endobj 85 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im3 297 0 R >> >> endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [581 722 727 780] /Resources 25 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00T072R041RRS JJs2@@hjӡghfk4,Li endstream endobj 24 0 obj 77 endobj 25 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im4 299 0 R >> >> endobj 113 0 obj << /Length 114 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 904 528 963] /Resources 115 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V40Q042U0T(JUWSH-JN-()MQ(*ILBrg)K>а@J endstream endobj 114 0 obj 78 endobj 115 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im5 301 0 R >> >> endobj 182 0 obj << /Length 183 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 292 194 328] /Resources 184 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R04R047R06S(JUWSH-JN-()MQ(I)TBrgK>WB 4 endstream endobj 183 0 obj 76 endobj 184 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im6 303 0 R >> >> endobj 269 0 obj << /Length 270 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 14 265 50] /Resources 271 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R04Q021V06S(JUWSH-JN-()MQ()J)DBrg9K>Ш@$S endstream endobj 270 0 obj 78 endobj 271 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im7 305 0 R >> >> endobj 56 0 obj << /Length 57 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [607 1169 738 1227] /Resources 58 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T030W044T046T0P(JUWSH-JN-()MQ(I9\BrgK>и@oFv endstream endobj 57 0 obj 79 endobj 58 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im8 307 0 R >> >> endobj 245 0 obj << /Length 246 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 126 220 162] /Resources 247 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R042S0P06S(JUWSH-JN-()MQ(24W0BcS=S=C\}\K.|Y9 endstream endobj 246 0 obj 82 endobj 247 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im9 309 0 R >> >> endobj 257 0 obj << /Length 258 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 70 219 106] /Resources 259 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R07P04W06S(JUWSH-JN-()MQ(*I)DBrgK>Ь@; endstream endobj 258 0 obj 79 endobj 259 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im10 311 0 R >> >> endobj 86 0 obj << /Length 87 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 945 528 1003] /Resources 88 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V41U042U0P(JUWSH-JN-()MQ(*I9LBrg!K>д@_,@ endstream endobj 87 0 obj 79 endobj 88 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im11 313 0 R >> >> endobj 167 0 obj << /Length 168 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 203 428 239] /Resources 169 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S020V047R06S(JUWSH-JN-()MQ(*I)LBrgK>и@p4i endstream endobj 168 0 obj 80 endobj 169 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im12 315 0 R >> >> endobj 92 0 obj << /Length 93 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 467 528 525] /Resources 94 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V013W042U0P(JUWSH-JN-()MQ(*I9LBrg1K>а@J endstream endobj 93 0 obj 78 endobj 94 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im13 317 0 R >> >> endobj 41 0 obj << /Length 42 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [581 643 727 701] /Resources 43 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00T031V041RRS JJs2@@hjӡghfkh4-aH endstream endobj 42 0 obj 78 endobj 43 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im14 319 0 R >> >> endobj 278 0 obj << /Length 279 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [148 732 273 790] /Resources 280 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P076R042U0P(JUWSH-JN-()MQ()J9LBrg)K>д@_? endstream endobj 279 0 obj 79 endobj 280 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im15 321 0 R >> >> endobj 263 0 obj << /Length 264 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 42 219 78] /Resources 265 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R01R04W06S(JUWSH-JN-()MQ(*I)DBrgK>Ь@;T endstream endobj 264 0 obj 79 endobj 265 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im16 323 0 R >> >> endobj 98 0 obj << /Length 99 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [607 1352 738 1410] /Resources 100 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T030W0465  E y Eɩ%9 E@u i 45k30SHU54rmTc endstream endobj 99 0 obj 78 endobj 100 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im17 325 0 R >> >> endobj 59 0 obj << /Length 60 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1 1052 132 1109] /Resources 61 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T0T0405R046T05W(JUWSH-JN-()MQ(J!P TCrgK>WB D endstream endobj 60 0 obj 74 endobj 61 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im18 327 0 R >> >> endobj 284 0 obj << /Length 285 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [148 862 273 920] /Resources 286 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P03R042U0P(JUWSH-JN-()MQ()J9LBrg%K>д@a6R endstream endobj 285 0 obj 79 endobj 286 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im19 329 0 R >> >> endobj 260 0 obj << /Length 261 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 56 219 92] /Resources 262 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R05S04W06S(JUWSH-JN-()MQ(*I)DBrgK>Ь@= endstream endobj 261 0 obj 79 endobj 262 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im20 331 0 R >> >> endobj 224 0 obj << /Length 225 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 283 438 319] /Resources 226 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S00V00R06S(JUWSH-JN-()MQ(*I)LBrg!K>а@K endstream endobj 225 0 obj 78 endobj 226 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im21 333 0 R >> >> endobj 161 0 obj << /Length 162 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 334 194 370] /Resources 163 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R066Q04f E y Eɩ%9 E@U i 46j3UHUw T\ endstream endobj 162 0 obj 75 endobj 163 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im22 335 0 R >> >> endobj 89 0 obj << /Length 90 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [148 945 273 1003] /Resources 91 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P41U042U0P(JUWSH-JN-()MQ()J9LBrg1K>д@aO endstream endobj 90 0 obj 79 endobj 91 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im23 337 0 R >> >> endobj 212 0 obj << /Length 213 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 222 194 258] /Resources 214 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02"#Cs#c3Tp<ԢԂL*B5*$*{(s*<V endstream endobj 213 0 obj 76 endobj 214 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im24 339 0 R >> >> endobj 53 0 obj << /Length 54 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [607 1222 738 1280] /Resources 55 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T030W0422R046T0P(JUWSH-JN-()MQ(I9\Brg)K>м@ endstream endobj 54 0 obj 80 endobj 55 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im25 341 0 R >> >> endobj 272 0 obj << /Length 273 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 0 219 36] /Resources 274 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R0P04W06S(JUWSH-JN-()MQ(I)XBrgK>Ь@< endstream endobj 273 0 obj 80 endobj 274 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im26 343 0 R >> >> endobj 14 0 obj << /Length 15 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [118 1352 244 1410] /Resources 16 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P0465R042S0P(JUWSH-JN-()MQ(32U0BSs=.=3\.}\#s|c endstream endobj 15 0 obj 84 endobj 16 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im27 345 0 R >> >> endobj 185 0 obj << /Length 186 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 278 194 314] /Resources 187 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R02P047R06S(JUWSH-JN-()MQ(I)TBrgK>WB #p endstream endobj 186 0 obj 77 endobj 187 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im28 347 0 R >> >> endobj 137 0 obj << /Length 138 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [581 560 727 618] /Resources 139 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00T053P041RRS JJs2@@hjӡg`fkd4-`I endstream endobj 138 0 obj 78 endobj 139 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im29 349 0 R >> >> endobj 248 0 obj << /Length 249 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 112 220 148] /Resources 250 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R04bK c3Tp<ԢԂL*CKs 46j3i34QHU56rJ endstream endobj 249 0 obj 82 endobj 250 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im30 351 0 R >> >> endobj 155 0 obj << /Length 156 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 362 194 398] /Resources 157 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R063R04 E y Eɩ%9 E@U i 46j3UHU56Tp T^ endstream endobj 156 0 obj 75 endobj 157 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im31 353 0 R >> >> endobj 230 0 obj << /Length 231 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 255 438 291] /Resources 232 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025bSC #c3Tp<ԢԂL2t虙)$*{q K endstream endobj 231 0 obj 77 endobj 232 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im32 355 0 R >> >> endobj 143 0 obj << /Length 144 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [149 500 274 558] /Resources 145 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04T050P042U0P(JUWSH-JN-()MQ()J9LBrg1K>д@]\9 endstream endobj 144 0 obj 79 endobj 145 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im33 357 0 R >> >> endobj 287 0 obj << /Length 288 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [402 864 528 922] /Resources 289 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010R03Q042S0P(JUWSH-JN-()MQ(*342U0BSs=s C.=K #\.}\c|  endstream endobj 288 0 obj 87 endobj 289 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im34 359 0 R >> >> endobj 119 0 obj << /Length 120 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 825 528 883] /Resources 121 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V02U0bS Tp<ԢԂL2tZ)$*{rM ^hB endstream endobj 120 0 obj 78 endobj 121 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im35 361 0 R >> >> endobj 170 0 obj << /Length 171 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 189 428 225] /Resources 172 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S0T047R06S(JUWSH-JN-()MQ(*I)LBrgK>и@u8 endstream endobj 171 0 obj 80 endobj 172 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im36 363 0 R >> >> endobj 200 0 obj << /Length 201 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 311 438 347] /Resources 202 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S064T00R06S(JUWSH-JN-()MQ(*I)LBrg9K>а@IQ endstream endobj 201 0 obj 78 endobj 202 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im37 365 0 R >> >> endobj 158 0 obj << /Length 159 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 348 194 384] /Resources 160 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R06P04f E y Eɩ%9 E@U i 46j3UHU5Pp T|m endstream endobj 159 0 obj 76 endobj 160 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im38 367 0 R >> >> endobj 173 0 obj << /Length 174 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 175 428 211] /Resources 175 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S047b#c3Tp<ԢԂL2tYZZ*$*{[r sx endstream endobj 174 0 obj 79 endobj 175 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im39 369 0 R >> >> endobj 149 0 obj << /Length 150 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 509 528 567] /Resources 151 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V05T042U0P(JUWSH-JN-()MQ(*I9LBrgK>д@]; endstream endobj 150 0 obj 79 endobj 151 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im40 371 0 R >> >> endobj 47 0 obj << /Length 48 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [796 1241 927 1299] /Resources 49 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04S0421T046T0P(JUWSH-JN-()MQ(I9\Brg!K>м@\ endstream endobj 48 0 obj 80 endobj 49 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im41 373 0 R >> >> endobj 188 0 obj << /Length 189 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 365 438 401] /Resources 190 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S063U00 E y Eɩ%9 E@e i 4636QHU51rK endstream endobj 189 0 obj 77 endobj 190 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im42 375 0 R >> >> endobj 95 0 obj << /Length 96 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [149 458 274 516] /Resources 97 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04T01P042URE y Eɩ%9 E e@i 4531QHU51rM endstream endobj 96 0 obj 77 endobj 97 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im43 377 0 R >> >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [583 1033 708 1091] /Resources 19 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00V040F@BQBB~@jQrjAIibBQ&PHMZL-s=sML\ endstream endobj 18 0 obj 78 endobj 19 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im44 379 0 R >> >> endobj 62 0 obj << /Length 63 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [148 777 273 835] /Resources 64 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P077W042U0P(JUWSH-JN-()MQ()J)P%D)kb4-bY endstream endobj 63 0 obj 79 endobj 64 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im45 381 0 R >> >> endobj 32 0 obj << /Length 33 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [410 1124 535 1183] /Resources 34 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T014P0442Q042U0T(JUWSH-JN-()MQ(I\BrgK>м@~[ endstream endobj 33 0 obj 80 endobj 34 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im46 383 0 R >> >> endobj 80 0 obj << /Length 81 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [349 1275 474 1333] /Resources 82 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T06T0427  E y Eɩ%9 E@u i 45k35SHU51rq endstream endobj 81 0 obj 78 endobj 82 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im47 385 0 R >> >> endobj 215 0 obj << /Length 216 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 208 195 244] /Resources 217 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R02P047V06S(JUWSH-JN-()MQ(247R0BcS= a`gfkb4,J endstream endobj 216 0 obj 84 endobj 217 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im48 387 0 R >> >> endobj 236 0 obj << /Length 237 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 167 219 203] /Resources 238 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R043W04W06S(JUWSH-JN-()MQ(I)TBrg%K>Ш@(A endstream endobj 237 0 obj 77 endobj 238 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im49 389 0 R >> >> endobj 38 0 obj << /Length 39 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [262 1052 393 1109] /Resources 40 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T023R040Ɔ E y Eɩ%9 E@u i *kIU55r0 endstream endobj 39 0 obj 74 endobj 40 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im50 391 0 R >> >> endobj 275 0 obj << /Length 276 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [149 414 274 472] /Resources 277 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04T014Q042U0P(JUWSH-JN-()MQ()J9LBrg!K>а@J endstream endobj 276 0 obj 78 endobj 277 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im51 393 0 R >> >> endobj 194 0 obj << /Length 195 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 338 438 374] /Resources 196 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S06P00R06S(JUWSH-JN-()MQ(*I)LBrgK>Ь@8 endstream endobj 195 0 obj 77 endobj 196 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im52 395 0 R >> >> endobj 266 0 obj << /Length 267 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 28 265 64] /Resources 268 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R0P021V06S(JUWSH-JN-()MQ()J)DBrg1K>Ь@9 endstream endobj 267 0 obj 79 endobj 268 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im53 397 0 R >> >> endobj 242 0 obj << /Length 243 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 140 220 176] /Resources 244 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R041P0P06S(JUWSH-JN-()MQ(24W0BcS=S=3\}\S.|aK endstream endobj 243 0 obj 83 endobj 244 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im54 399 0 R >> >> endobj 197 0 obj << /Length 198 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 324 438 360] /Resources 199 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S062Q00R06S(JUWSH-JN-()MQ(*I)LBrg)K>Ь@7/ endstream endobj 198 0 obj 77 endobj 199 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im55 401 0 R >> >> endobj 107 0 obj << /Length 108 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 592 528 650] /Resources 109 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V04R042U0P(JUWSH-JN-()MQ(*I9LBrgK>д@^G endstream endobj 108 0 obj 79 endobj 109 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im56 403 0 R >> >> endobj 110 0 obj << /Length 111 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [149 585 274 643] /Resources 112 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04T00U042 E y Eɩ%9 E e@i 45г0QHU55rb\ endstream endobj 111 0 obj 78 endobj 112 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im57 405 0 R >> >> endobj 179 0 obj << /Length 180 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 306 194 342] /Resources 181 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R060S04f E y Eɩ%9 E@U i 46j3UHU5Pp T|c endstream endobj 180 0 obj 76 endobj 181 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im58 407 0 R >> >> endobj 227 0 obj << /Length 228 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 269 438 305] /Resources 229 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S02T00R06S(JUWSH-JN-()MQ(*I)LBrg%K>а@M endstream endobj 228 0 obj 78 endobj 229 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im59 409 0 R >> >> endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [410 1079 535 1137] /Resources 37 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T014P040T042U0P(JUWSH-JN-()MQ(I9\BrgK>и@nl endstream endobj 36 0 obj 79 endobj 37 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im60 411 0 R >> >> endobj 20 0 obj << /Length 21 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [583 985 708 1043] /Resources 22 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00V0U042RRS JJs2@@hjӡgblkf4-dU^ endstream endobj 21 0 obj 78 endobj 22 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im61 413 0 R >> >> endobj 218 0 obj << /Length 219 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 194 195 230] /Resources 220 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R04Q047V06S(JUWSH-JN-()MQ(247R0BcS=S= K\}\3#.|aL endstream endobj 219 0 obj 83 endobj 220 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im62 415 0 R >> >> endobj 152 0 obj << /Length 153 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [754 682 885 740] /Resources 154 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T075Q00R046T0P(JUWSH-JN-()MQ(*I9LBrg1K>д@aO endstream endobj 153 0 obj 79 endobj 154 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im63 417 0 R >> >> endobj 191 0 obj << /Length 192 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 351 438 387] /Resources 193 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S065T00R06S(JUWSH-JN-()MQ(*I)LBrg K>а@J endstream endobj 192 0 obj 78 endobj 193 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im64 419 0 R >> >> endobj 74 0 obj << /Length 75 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [232 1352 357 1410] /Resources 76 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T026R046F  E y Eɩ%9 E@u i 45k30SHU53rl<` endstream endobj 75 0 obj 78 endobj 76 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im65 421 0 R >> >> endobj 131 0 obj << /Length 132 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 985 528 1043] /Resources 133 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V0U042U0P(JUWSH-JN-()MQ(*I9LBrgK>д@`Q endstream endobj 132 0 obj 79 endobj 133 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im66 423 0 R >> >> endobj 125 0 obj << /Length 126 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [149 628 274 686] /Resources 127 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04T03P042U0P(JUWSH-JN-()MQ()J9LBrg9K>д@aY endstream endobj 126 0 obj 79 endobj 127 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im67 425 0 R >> >> endobj 122 0 obj << /Length 123 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [148 904 273 963] /Resources 124 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P40Q042U0T(JUWSH-JN-()MQ()JLBrgK>д@`R endstream endobj 123 0 obj 79 endobj 124 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im68 427 0 R >> >> endobj 281 0 obj << /Length 282 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [402 738 528 796] /Resources 283 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010R07P042S0P(JUWSH-JN-()MQ(*342U0BSs=s C.= \.}\3K| endstream endobj 282 0 obj 87 endobj 283 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im69 429 0 R >> >> endobj 104 0 obj << /Length 105 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [754 989 879 1047] /Resources 106 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T075QT042U0P(JUWSH-JN-()MQ(*I9LBrgK>а@R1 endstream endobj 105 0 obj 78 endobj 106 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im70 431 0 R >> >> endobj 233 0 obj << /Length 234 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 181 220 217] /Resources 235 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R00T0P06S(JUWSH-JN-()MQ(24W0BcS=S=3\}\sC.|aMy endstream endobj 234 0 obj 83 endobj 235 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im71 433 0 R >> >> endobj 164 0 obj << /Length 165 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 320 194 356] /Resources 166 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R062P04f E y Eɩ%9 E@U i 46j3UHUJs*W endstream endobj 165 0 obj 75 endobj 166 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im72 435 0 R >> >> endobj 116 0 obj << /Length 117 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 634 528 692] /Resources 118 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V036Q042U0P(JUWSH-JN-()MQ(*I9LBrg1K>д@]N: endstream endobj 117 0 obj 79 endobj 118 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im73 437 0 R >> >> endobj 11 0 obj << /Length 12 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [61 1275 186 1333] /Resources 13 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T03T0427  E y Eɩ%9 E@e i 4535SHU57rJ endstream endobj 12 0 obj 77 endobj 13 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im74 439 0 R >> >> endobj 203 0 obj << /Length 204 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 264 194 300] /Resources 205 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R023Q047R06S(JUWSH-JN-()MQ(I)TBrgK>WB h endstream endobj 204 0 obj 77 endobj 205 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im75 441 0 R >> >> endobj 101 0 obj << /Length 102 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [610 1275 735 1333] /Resources 103 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T034P0427  E y Eɩ%9 E@u i 45k35SHU57rno endstream endobj 102 0 obj 78 endobj 103 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im76 443 0 R >> >> endobj 146 0 obj << /Length 147 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [403 550 528 608] /Resources 148 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T010V055P042U0P(JUWSH-JN-()MQ(*I9LBrg9K>д@\: endstream endobj 147 0 obj 79 endobj 148 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im77 445 0 R >> >> endobj 128 0 obj << /Length 129 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [148 819 273 877] /Resources 130 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04P0T042U0P(JUWSH-JN-()MQ()J9LBrgK>д@b [ endstream endobj 129 0 obj 79 endobj 130 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im78 447 0 R >> >> endobj 206 0 obj << /Length 207 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 250 194 286] /Resources 208 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R025P047R06S(JUWSH-JN-()MQ(I)TBrg%K>а@J/ endstream endobj 207 0 obj 79 endobj 208 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im79 449 0 R >> >> endobj 68 0 obj << /Length 69 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [754 1040 879 1097] /Resources 70 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T075Q0401P042U05W(JUWSH-JN-()MQ(I!P \KrgK>Ь@3 endstream endobj 69 0 obj 75 endobj 70 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im80 451 0 R >> >> endobj 26 0 obj << /Length 27 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [581 682 727 740] /Resources 28 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00T00R041RRS JJs2@@hjӡgffka4-bW endstream endobj 27 0 obj 78 endobj 28 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im81 453 0 R >> >> endobj 176 0 obj << /Length 177 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 161 428 197] /Resources 178 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S043T047R06S(JUWSH-JN-()MQ(*I)LBrgK>и@qv endstream endobj 177 0 obj 80 endobj 178 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im82 455 0 R >> >> endobj 239 0 obj << /Length 240 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 153 220 189] /Resources 241 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R045V0P06S(JUWSH-JN-()MQ(24W0BcS=S= K\}\ c.|aM endstream endobj 240 0 obj 83 endobj 241 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im83 457 0 R >> >> endobj 254 0 obj << /Length 255 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 84 219 120] /Resources 256 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R0Q04W06S(JUWSH-JN-()MQ(*I)DBrg K>Ь@= endstream endobj 255 0 obj 79 endobj 256 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im84 459 0 R >> >> endobj 29 0 obj << /Length 30 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [314 1199 445 1257] /Resources 31 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T064Q04T046T0P(JUWSH-JN-()MQ(I9\Brg)K>и@oSy endstream endobj 30 0 obj 79 endobj 31 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im85 461 0 R >> >> endobj 221 0 obj << /Length 222 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [256 297 438 333] /Resources 223 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T025S04W00R06S(JUWSH-JN-()MQ(*I)LBrgK>а@M endstream endobj 222 0 obj 78 endobj 223 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im86 463 0 R >> >> endobj 50 0 obj << /Length 51 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [796 1294 927 1351] /Resources 52 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04S044Q046T05W(JUWSH-JN-()MQ(I!P \Krg9K>Ь@8 endstream endobj 51 0 obj 75 endobj 52 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im87 465 0 R >> >> endobj 134 0 obj << /Length 135 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [581 601 727 659] /Resources 136 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T00T030T041RRS JJs2@@hjӡgfhka4-_NG endstream endobj 135 0 obj 78 endobj 136 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im88 467 0 R >> >> endobj 44 0 obj << /Length 45 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [754 722 885 780] /Resources 46 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T075Q072R046T0P(JUWSH-JN-()MQ(*I9LBrg%K>д@_'H endstream endobj 45 0 obj 79 endobj 46 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im89 469 0 R >> >> endobj 140 0 obj << /Length 141 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [149 543 274 601] /Resources 142 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T04T051V042U0P(JUWSH-JN-()MQ()J9LBrgK>д@`K endstream endobj 141 0 obj 79 endobj 142 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im90 471 0 R >> >> endobj 209 0 obj << /Length 210 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 236 194 272] /Resources 211 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02R026S047RRE y Eɩ%9 E@U i 46j30THU̵4rKq endstream endobj 210 0 obj 78 endobj 211 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im91 473 0 R >> >> endobj 251 0 obj << /Length 252 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [22 98 219 134] /Resources 253 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T02RP04W06S(JUWSH-JN-()MQ(*I)DBrgK>Ь@? endstream endobj 252 0 obj 79 endobj 253 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im92 475 0 R >> >> endobj 65 0 obj << /Length 66 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [4 672 129 730] /Resources 67 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T0Q037R042U0P(JUWSH-JN-()MQ(*I9DBrgK>WB  | endstream endobj 66 0 obj 78 endobj 67 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im93 477 0 R >> >> endobj 77 0 obj << /Length 78 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [349 1352 474 1410] /Resources 79 0 R /Group << /S /Transparency /CS 290 0 R /I true /K false >> >> stream x+TT(T06T0465R042U0P(JUWSH-JN-()MQ(I9\Brg K>и@ot endstream endobj 78 0 obj 79 endobj 79 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im94 479 0 R >> >> endobj 323 0 obj << /Length 324 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 482 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 324 0 obj 114 endobj 473 0 obj << /Length 474 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 484 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 474 0 obj 101 endobj 379 0 obj << /Length 380 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 486 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 380 0 obj 116 endobj 307 0 obj << /Length 308 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 489 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 308 0 obj 121 endobj 335 0 obj << /Length 336 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 488 0 R /SMask 491 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 336 0 obj 101 endobj 433 0 obj << /Length 434 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 493 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 434 0 obj 114 endobj 315 0 obj << /Length 316 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 495 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 316 0 obj 101 endobj 331 0 obj << /Length 332 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 497 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 332 0 obj 114 endobj 459 0 obj << /Length 460 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 499 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 460 0 obj 114 endobj 359 0 obj << /Length 360 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 501 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 360 0 obj 116 endobj 351 0 obj << /Length 352 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 503 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 352 0 obj 114 endobj 361 0 obj << /Length 362 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 505 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 362 0 obj 116 endobj 413 0 obj << /Length 414 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 507 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 414 0 obj 116 endobj 391 0 obj << /Length 392 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 509 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 392 0 obj 121 endobj 419 0 obj << /Length 420 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 511 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 420 0 obj 107 endobj 403 0 obj << /Length 404 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 513 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 404 0 obj 116 endobj 445 0 obj << /Length 446 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 515 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 446 0 obj 116 endobj 321 0 obj << /Length 322 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 517 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 322 0 obj 116 endobj 305 0 obj << /Length 306 0 R /Type /XObject /Subtype /Image /Width 243 /Height 35 /ColorSpace 481 0 R /SMask 519 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`b`c endstream endobj 306 0 obj 133 endobj 377 0 obj << /Length 378 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 521 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 378 0 obj 116 endobj 471 0 obj << /Length 472 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 523 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 472 0 obj 116 endobj 431 0 obj << /Length 432 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 525 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 432 0 obj 116 endobj 313 0 obj << /Length 314 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 527 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 314 0 obj 116 endobj 329 0 obj << /Length 330 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 529 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 330 0 obj 116 endobj 457 0 obj << /Length 458 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 531 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 458 0 obj 114 endobj 411 0 obj << /Length 412 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 533 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 412 0 obj 116 endobj 349 0 obj << /Length 350 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace 481 0 R /SMask 535 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`a endstream endobj 350 0 obj 132 endobj 389 0 obj << /Length 390 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 537 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 390 0 obj 114 endobj 417 0 obj << /Length 418 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 481 0 R /SMask 539 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 418 0 obj 121 endobj 293 0 obj << /Length 294 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 541 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 294 0 obj 116 endobj 443 0 obj << /Length 444 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 543 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 444 0 obj 116 endobj 303 0 obj << /Length 304 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 545 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 304 0 obj 101 endobj 469 0 obj << /Length 470 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 547 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 470 0 obj 121 endobj 375 0 obj << /Length 376 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 488 0 R /SMask 549 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 376 0 obj 107 endobj 401 0 obj << /Length 402 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 551 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 402 0 obj 107 endobj 333 0 obj << /Length 334 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 553 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 334 0 obj 107 endobj 429 0 obj << /Length 430 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 555 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 430 0 obj 116 endobj 319 0 obj << /Length 320 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace 481 0 R /SMask 557 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`a endstream endobj 320 0 obj 132 endobj 299 0 obj << /Length 300 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace 488 0 R /SMask 559 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`a endstream endobj 300 0 obj 132 endobj 455 0 obj << /Length 456 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 561 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 456 0 obj 101 endobj 347 0 obj << /Length 348 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 563 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 348 0 obj 101 endobj 399 0 obj << /Length 400 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 565 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 400 0 obj 114 endobj 387 0 obj << /Length 388 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 567 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 388 0 obj 101 endobj 297 0 obj << /Length 298 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 569 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 298 0 obj 116 endobj 441 0 obj << /Length 442 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 571 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 442 0 obj 101 endobj 467 0 obj << /Length 468 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace 488 0 R /SMask 573 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`a endstream endobj 468 0 obj 132 endobj 373 0 obj << /Length 374 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 575 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 374 0 obj 121 endobj 415 0 obj << /Length 416 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 577 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 416 0 obj 101 endobj 427 0 obj << /Length 428 0 R /Type /XObject /Subtype /Image /Width 125 /Height 58 /ColorSpace 488 0 R /SMask 579 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`T endstream endobj 428 0 obj 119 endobj 453 0 obj << /Length 454 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace 481 0 R /SMask 581 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`a endstream endobj 454 0 obj 132 endobj 369 0 obj << /Length 370 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 583 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 370 0 obj 101 endobj 327 0 obj << /Length 328 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 481 0 R /SMask 585 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 328 0 obj 121 endobj 345 0 obj << /Length 346 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 587 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 346 0 obj 116 endobj 479 0 obj << /Length 480 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 589 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 480 0 obj 116 endobj 385 0 obj << /Length 386 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 591 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 386 0 obj 116 endobj 439 0 obj << /Length 440 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 593 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 440 0 obj 116 endobj 465 0 obj << /Length 466 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 595 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 466 0 obj 121 endobj 295 0 obj << /Length 296 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 597 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 296 0 obj 116 endobj 301 0 obj << /Length 302 0 R /Type /XObject /Subtype /Image /Width 125 /Height 58 /ColorSpace 481 0 R /SMask 599 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`T endstream endobj 302 0 obj 119 endobj 357 0 obj << /Length 358 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 601 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 358 0 obj 116 endobj 425 0 obj << /Length 426 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 603 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 426 0 obj 116 endobj 409 0 obj << /Length 410 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 605 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 410 0 obj 107 endobj 451 0 obj << /Length 452 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 607 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 452 0 obj 116 endobj 341 0 obj << /Length 342 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 609 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 342 0 obj 121 endobj 397 0 obj << /Length 398 0 R /Type /XObject /Subtype /Image /Width 243 /Height 35 /ColorSpace 481 0 R /SMask 611 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`b`c endstream endobj 398 0 obj 133 endobj 343 0 obj << /Length 344 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 613 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 344 0 obj 114 endobj 317 0 obj << /Length 318 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 615 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 318 0 obj 116 endobj 477 0 obj << /Length 478 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 617 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 478 0 obj 116 endobj 383 0 obj << /Length 384 0 R /Type /XObject /Subtype /Image /Width 125 /Height 58 /ColorSpace 488 0 R /SMask 619 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om O@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`T endstream endobj 384 0 obj 119 endobj 339 0 obj << /Length 340 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 621 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 340 0 obj 101 endobj 437 0 obj << /Length 438 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 623 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 438 0 obj 116 endobj 367 0 obj << /Length 368 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 625 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 368 0 obj 101 endobj 463 0 obj << /Length 464 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 627 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 464 0 obj 107 endobj 309 0 obj << /Length 310 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 629 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 310 0 obj 114 endobj 371 0 obj << /Length 372 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 631 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 372 0 obj 116 endobj 355 0 obj << /Length 356 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 633 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 356 0 obj 107 endobj 365 0 obj << /Length 366 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 481 0 R /SMask 635 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 366 0 obj 107 endobj 423 0 obj << /Length 424 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 637 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 424 0 obj 116 endobj 407 0 obj << /Length 408 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 639 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 408 0 obj 101 endobj 449 0 obj << /Length 450 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 641 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 450 0 obj 101 endobj 395 0 obj << /Length 396 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace 488 0 R /SMask 643 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Oo@a 0` 0` 0` 0` 0` 0` 0` 0` 0`J endstream endobj 396 0 obj 107 endobj 325 0 obj << /Length 326 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 645 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 326 0 obj 121 endobj 475 0 obj << /Length 476 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 647 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 476 0 obj 114 endobj 381 0 obj << /Length 382 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 649 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 382 0 obj 116 endobj 337 0 obj << /Length 338 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 651 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 338 0 obj 116 endobj 435 0 obj << /Length 436 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 653 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 436 0 obj 101 endobj 461 0 obj << /Length 462 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace 488 0 R /SMask 655 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`W endstream endobj 462 0 obj 121 endobj 311 0 obj << /Length 312 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace 481 0 R /SMask 657 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 8P endstream endobj 312 0 obj 114 endobj 353 0 obj << /Length 354 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 488 0 R /SMask 659 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 354 0 obj 101 endobj 363 0 obj << /Length 364 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace 481 0 R /SMask 661 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0`F endstream endobj 364 0 obj 101 endobj 393 0 obj << /Length 394 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 663 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 394 0 obj 116 endobj 421 0 obj << /Length 422 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 665 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 422 0 obj 116 endobj 405 0 obj << /Length 406 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 481 0 R /SMask 667 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 406 0 obj 116 endobj 447 0 obj << /Length 448 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace 488 0 R /SMask 669 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`  S endstream endobj 448 0 obj 116 endobj 611 0 obj << /Length 612 0 R /Type /XObject /Subtype /Image /Width 243 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hzACOYREnRa%gL2VGo^'B ~Ԏ J2+y eIGi(#e90FkIJdcc *Iuc$Cg8@)v,$j,XE,v*zFSc8gZvVon fV-3U( 9 +ZnTml\,ڞlTK9M\Q2cotȢw\gdfHg[U^xE T-+Ld5m YDAFLvaR"[8 =U)P֋uw+o~tnPFa7`?M_d0E״ aw/_bx}q|^ P/en/SŦL鋡PxLa+Bap2ر3mӊn&5(<2W/, endstream endobj 612 0 obj 564 endobj 519 0 obj << /Length 520 0 R /Type /XObject /Subtype /Image /Width 243 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hzACOYREnRa%gL2VGo^'B ~Ԏ J2+y eIGi(#e90FkIJdcc *Iuc$Cg8@)v,$j,XE,v*zFSc8gZvVon fV-3U( 9 +ZnTml\,ڞlTK9M\Q2cotȢw\gdfHg[U^xE T-+Ld5m YDAFLvaR"[8 =U)P֋uw+o~tnPFa7`?M_d0E״ aw/_bx}q|^ P/en/SŦL鋡PxLa+Bap2ر3mӊn&5(<2W/, endstream endobj 520 0 obj 564 endobj 511 0 obj << /Length 512 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ys/7=y?$##myA| XLxcߚ%BH$7@Hi"TbYAEܱ$NgbNJiTkϋ倄T-h?G.ZSh*k؜ BLˮ͍/ıѬ*e Ea6dE˭͖뵿Gs[ji5)2["JfҚvqtw묕LyIUuznOx-^H3G8&h?𚶡׬6qL.w북Tf S45=~MP90t|tt2t ;:C=$֦4f[/}7 ' endstream endobj 512 0 obj 565 endobj 587 0 obj << /Length 588 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 588 0 obj 651 endobj 645 0 obj << /Length 646 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 646 0 obj 654 endobj 591 0 obj << /Length 592 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 592 0 obj 651 endobj 565 0 obj << /Length 566 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 566 0 obj 569 endobj 609 0 obj << /Length 610 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 610 0 obj 654 endobj 491 0 obj << /Length 492 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xMKP$&i&EZ aRX2*KA]2A7SY0>,=s>0 (ba˱E綅b8ARM R($p̖Nm[)E%.ci #8I)Zo_z5U H&F2hȰ ÑpHfA;c 3p3PwڝPq:*HpJrז:]K3 Άhq64sC.Ck!ˀlg=#.u/ W endstream endobj 492 0 obj 614 endobj 569 0 obj << /Length 570 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"QqG?̏(SDȰȌ0 !b+!B.dBB6-Xv,ֽ4;p~gygDaX,# R TT*[1 ph\J %EQ*Ppk+$!tF1\:}zU)R m#La1yPO2 i%2Zgal~˺6fĨS+dq(Nt&NgLX;cҩHmK61.O`>]Etu%4MF#5Qw6%vbo'gQo;J<.olҙSPdҩ{L+qC[Y( gٓEӪdpP6fwPKa<`@+G q=˕ڜ{ܨi˵&g!vpZEpz[LZyryyLfWwgPﮊf;i}KT O\*[ᰄp8_^^V)ac&op0ܪB/5Ϲp>|KFdK#\P8jG B彼5p>[g>^%>>"'G|䀈O-µBB(B}m!TWaOUa UZ\ZW+j)ʻ_-jOs9ꍤ'< endstream endobj 570 0 obj 735 endobj 521 0 obj << /Length 522 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 522 0 obj 732 endobj 583 0 obj << /Length 584 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 584 0 obj 566 endobj 509 0 obj << /Length 510 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 510 0 obj 654 endobj 629 0 obj << /Length 630 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 630 0 obj 569 endobj 657 0 obj << /Length 658 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 658 0 obj 569 endobj 563 0 obj << /Length 564 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 564 0 obj 566 endobj 637 0 obj << /Length 638 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 638 0 obj 732 endobj 615 0 obj << /Length 616 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 616 0 obj 732 endobj 559 0 obj << /Length 560 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홿kP͏$M ED(uqS,RpRS@JKA]"RAk/ -!%˅C9qywMۄ ItKIq컕CfXۃDz Mb8~D1Q}c(@|d ,COPIĥX$$y/y$'TFBEͤ,/GϐpbbTV2B\BR.rE^"!A:_:kz* ]部3`kDP?,kZ8=kC}vj4aZ9($EIt1/=t/NkyEy#oHVK6{}kpmC+rːI "\2hκ6[Z.킭)Zlt|ou;F엑*j'fvXBe0'Z1%}qB7u1Z/b!ׯzZ~f#͏<> stream xMKP$&i&EZ aRX2*KA]2A7SY0>,=s>0 (ba˱E綅b8ARM R($p̖Nm[)E%.ci #8I)Zo_z5U H&F2hȰ ÑpHfA;c 3p3PwڝPq:*HpJrז:]K3 Άhq64sC.Ck!ˀlg=#.u/ W endstream endobj 660 0 obj 614 endobj 621 0 obj << /Length 622 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 622 0 obj 566 endobj 541 0 obj << /Length 542 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 542 0 obj 651 endobj 497 0 obj << /Length 498 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 498 0 obj 569 endobj 515 0 obj << /Length 516 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xS[aم<,,Skr|@qb@oc1NifӐ=a4Mi6:dR43:v^]>ox9gwG")!J߶ZP 01 !ar\ DMl^RkIH3L,6RV1tώ8-8;,8JKrRxR ^p% B8 kr7x>Xz= n_aeH#JK[+wK?]ᠿ-TZi +e ` mK=}AX z.@(d;/]k}.ݾH"w; sWߑKQ%ix&_b2HSc7J4iJo9Qw+:4zvvo_F]gNX* t{Vr|f~1 xVt{r6dzni%k&'''b+kbcmÛыHWNj&ҙƏac#IO< rDf8י΁p̭}LtqqZ2pSKҶo>bJ@ɔL&xX*&d?bӷ-X}4"7@7x] ٥ñW؝^Eq _VsX_v@|ѩUX|]^LO޹oXztzccÃWOZ g5i>^'Ǧfޥanfj,7S*fX<1,5ԳDx<; endstream endobj 516 0 obj 1066 endobj 517 0 obj << /Length 518 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xS[aم<,,Skr|@qb@oc1NifӐ=a4Mi6:dR43:v^]>ox9gwG")!J߶ZP 01 !ar\ DMl^RkIH3L,6RV1tώ8-8;,8JKrRxR ^p% B8 kr7x>Xz= n_aeH#JK[+wK?]ᠿ-TZi +e ` mK=}AX z.@(d;/]k}.ݾH"w; sWߑKQ%ix&_b2HSc7J4iJo9Qw+:4zvvo_F]gNX* t{Vr|f~1 xVt{r6dzni%k&'''b+kbcmÛыHWNj&ҙƏac#IO< rDf8י΁p̭}LtqqZ2pSKҶo>bJ@ɔL&xX*&d?bӷ-X}4"7@7x] ٥ñW؝^Eq _VsX_v@|ѩUX|]^LO޹oXztzccÃWOZ g5i>^'Ǧfޥanfj,7S*fX<1,5ԳDx<; endstream endobj 518 0 obj 1066 endobj 482 0 obj << /Length 483 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 483 0 obj 569 endobj 507 0 obj << /Length 508 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 508 0 obj 732 endobj 661 0 obj << /Length 662 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 662 0 obj 566 endobj 665 0 obj << /Length 666 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 666 0 obj 651 endobj 589 0 obj << /Length 590 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 590 0 obj 651 endobj 633 0 obj << /Length 634 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ys/7=y?$##myA| XLxcߚ%BH$7@Hi"TbYAEܱ$NgbNJiTkϋ倄T-h?G.ZSh*k؜ BLˮ͍/ıѬ*e Ea6dE˭͖뵿Gs[ji5)2["JfҚvqtw묕LyIUuznOx-^H3G8&h?𚶡׬6qL.w북Tf S45=~MP90t|tt2t ;:C=$֦4f[/}7 ' endstream endobj 634 0 obj 565 endobj 527 0 obj << /Length 528 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 528 0 obj 732 endobj 579 0 obj << /Length 580 0 R /Type /XObject /Subtype /Image /Width 125 /Height 58 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"aqGQ̏(SDȰȌ0 !b+!B.dBB6-X˴mmnq(aX*" S :da8.qL"|F4.'HUEQ4(;T$!tF1RMnjC۵Pьob1dZ!LM/8B&m>vI:Dh`z aAuY78.Ɩ@[^7kY3\Z7œ[_A">נQKbBp5cWֶә!(|3be8!DAl.z wTQ ;ᰌdHrP@P] Hǐ/SF }{_8Sk&!#q|x~9_mPe`FWg!A%!|E{"7S倥%$Bj*CPLS-B M!ĴPCџ TJZ\ZOWRj[ 'A9=y *< endstream endobj 580 0 obj 733 endobj 625 0 obj << /Length 626 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xMKP$&i&EZ aRX2*KA]2A7SY0>,=s>0 (ba˱E綅b8ARM R($p̖Nm[)E%.ci #8I)Zo_z5U H&F2hȰ ÑpHfA;c 3p3PwڝPq:*HpJrז:]K3 Άhq64sC.Ck!ˀlg=#.u/ W endstream endobj 626 0 obj 614 endobj 627 0 obj << /Length 628 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ys/7=y?$##myA| XLxcߚ%BH$7@Hi"TbYAEܱ$NgbNJiTkϋ倄T-h?G.ZSh*k؜ BLˮ͍/ıѬ*e Ea6dE˭͖뵿Gs[ji5)2["JfҚvqtw묕LyIUuznOx-^H3G8&h?𚶡׬6qL.w북Tf S45=~MP90t|tt2t ;:C=$֦4f[/}7 ' endstream endobj 628 0 obj 565 endobj 655 0 obj << /Length 656 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 656 0 obj 654 endobj 525 0 obj << /Length 526 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"QqG?̏(SDȰȌ0 !b+!B.dBB6-Xv,ֽ4;p~gygDaX,# R TT*[1 ph\J %EQ*Ppk+$!tF1\:}zU)R m#La1yPO2 i%2Zgal~˺6fĨS+dq(Nt&NgLX;cҩHmK61.O`>]Etu%4MF#5Qw6%vbo'gQo;J<.olҙSPdҩ{L+qC[Y( gٓEӪdpP6fwPKa<`@+G q=˕ڜ{ܨi˵&g!vpZEpz[LZyryyLfWwgPﮊf;i}KT O\*[ᰄp8_^^V)ac&op0ܪB/5Ϲp>|KFdK#\P8jG B彼5p>[g>^%>>"'G|䀈O-µBB(B}m!TWaOUa UZ\ZW+j)ʻ_-jOs9ꍤ'< endstream endobj 526 0 obj 735 endobj 593 0 obj << /Length 594 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 594 0 obj 651 endobj 577 0 obj << /Length 578 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 578 0 obj 566 endobj 607 0 obj << /Length 608 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 608 0 obj 651 endobj 503 0 obj << /Length 504 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 504 0 obj 569 endobj 623 0 obj << /Length 624 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOǹ;rppƷ-<$es10O+ lDs2i6L\t|*?s( nzˇo=^{o@ ~RhaHTYDHp\*PDz"b .WjҀԤRKĈpλ1\&1aLF]F%1^\:n3uVEfcM:JKKEb\ѳֆvw(- VVQbQq0"Sy ;hc \(ұfP`$ @蜷T8Z 1O"~7v}?m1D!k]ORӠH=Ǣ}{H)"%GC4(N&cCƣzRxhbr.>F5^Swlze(>g'n],'4fsӗ˟66齫=nά!J+'G8O0~ շӉhVp‡/;aYr8q0*Yޑ\~(󹏋3ɑSNuZvPGuU4Qm2&Sm2B ^{0d o[Lz` sWs[b+s;N16Gs(뫋sƮ'2՟HN/d@YYJw7*ñ}ԋ KXx"5>;t̠*RERgqfb&\'4S: Goމ'A߹ ϸLbBp] CёQPD.Z9^MbHZcB}/uu:V!-Q" 'icjq{:[\N[&qHZs:٬AK h1,kf:RZ^xcR4ZMk5I1>>yq; 8^+^h@Q1HPAv ,0xx?; endstream endobj 624 0 obj 1062 endobj 555 0 obj << /Length 556 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOYaU He@XZ(+!5T ڄ,bӆ`mkYް&VVMpQey9gNUUņmR^ƅ (a3P=FqP,5$I Dpsjg@,#TFBըZx]yvKFl`a y(Rw $5jw>?=>hILM-l|=8ҁɢ3^\q 6Eꂟys6(;3 endstream endobj 556 0 obj 1063 endobj 653 0 obj << /Length 654 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xMKP$&i&EZ aRX2*KA]2A7SY0>,=s>0 (ba˱E綅b8ARM R($p̖Nm[)E%.ci #8I)Zo_z5U H&F2hȰ ÑpHfA;c 3p3PwڝPq:*HpJrז:]K3 Άhq64sC.Ck!ˀlg=#.u/ W endstream endobj 654 0 obj 614 endobj 495 0 obj << /Length 496 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 496 0 obj 566 endobj 575 0 obj << /Length 576 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 576 0 obj 654 endobj 651 0 obj << /Length 652 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 652 0 obj 732 endobj 667 0 obj << /Length 668 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 668 0 obj 651 endobj 603 0 obj << /Length 604 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 604 0 obj 732 endobj 643 0 obj << /Length 644 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"aәiFm)sF(+ĺЂ0P b+.D(.d&B6(BXvlq׽_Wsy8<>9;(%̒bIp(DQI%mr|(pXxnG6$$CT/ ;n#FGBê, } {0L *^!P{⼊fL pgiCSf#+hF,Z^m ̭.1CYV/0MfŽq|W̯eѱ#яW(AM'J8*勓t|2$ 10ƈj8::8}Vv.VEVހargwhSNlV~U&~v儸ot2%pL{˴7;r/UپT7T7KU\T #HT9iW7irg9-j#@.l̬v)z=M endstream endobj 644 0 obj 615 endobj 551 0 obj << /Length 552 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"aәiFm)sF(+ĺЂ0P b+.D(.d&B6(BXvlq׽_Wsy8<>9;(%̒bIp(DQI%mr|(pXxnG6$$CT/ ;n#FGBê, } {0L *^!P{⼊fL pgiCSf#+hF,Z^m ̭.1CYV/0MfŽq|W̯eѱ#яW(AM'J8*勓t|2$ 10ƈj8::8}Vv.VEVހargwhSNlV~U&~v儸ot2%pL{˴7;r/UپT7T7KU\T #HT9iW7irg9-j#@.l̬v)z=M endstream endobj 552 0 obj 615 endobj 539 0 obj << /Length 540 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSkYveese%C0˜eP#6eya&HGrb ?zk.μK&5q%>uiL6Xr̓;Nؕ{WnMeV󟾀S~5{JkJ zG[gOL9r)74c竅˯ٱP IY.2{lX˽|;TTo% ]](:Pޅ PwDŁ-_C?olnesKОkIy~ۏM]h9Asjt7 _pQWs xs鷹|,=mQv]̧ү%*^jw8]gji M/ohj(E]k/F2kjibJ)QbF[Kn U7URo;/X> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 648 0 obj 569 endobj 635 0 obj << /Length 636 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ys/7=y?$##myA| XLxcߚ%BH$7@Hi"TbYAEܱ$NgbNJiTkϋ倄T-h?G.ZSh*k؜ BLˮ͍/ıѬ*e Ea6dE˭͖뵿Gs[ji5)2["JfҚvqtw묕LyIUuznOx-^H3G8&h?𚶡׬6qL.w북Tf S45=~MP90t|tt2t ;:C=$֦4f[/}7 ' endstream endobj 636 0 obj 565 endobj 567 0 obj << /Length 568 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 568 0 obj 566 endobj 484 0 obj << /Length 485 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 485 0 obj 566 endobj 543 0 obj << /Length 544 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 544 0 obj 651 endobj 613 0 obj << /Length 614 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 614 0 obj 569 endobj 529 0 obj << /Length 530 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 530 0 obj 651 endobj 571 0 obj << /Length 572 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 572 0 obj 566 endobj 605 0 obj << /Length 606 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ys/7=y?$##myA| XLxcߚ%BH$7@Hi"TbYAEܱ$NgbNJiTkϋ倄T-h?G.ZSh*k؜ BLˮ͍/ıѬ*e Ea6dE˭͖뵿Gs[ji5)2["JfҚvqtw묕LyIUuznOx-^H3G8&h?𚶡׬6qL.w북Tf S45=~MP90t|tt2t ;:C=$֦4f[/}7 ' endstream endobj 606 0 obj 565 endobj 486 0 obj << /Length 487 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 487 0 obj 732 endobj 513 0 obj << /Length 514 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 514 0 obj 732 endobj 489 0 obj << /Length 490 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 490 0 obj 654 endobj 505 0 obj << /Length 506 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSk]veeceyG!IK`1M FlHԦ"iNi02Tt5Lh7/sw9s ֜0P$@" QFNU " uH1eU*AQ`匌LsbR(TZz^R0RR̩oo<b ͪ &kP 89&%bv41ٛ]^_NPky]vI]RVcv]H?("gC.iְR^wXD2&ؕqP\ GO45Rom:Q NLE*ysrt X C" ζ@,K/f@Kc6g#?BG:Fn̤?A.gnu9:O\5(/E!{4k U:7pLn(>s/vݮ8);z+bur/1I>rRnhFOK__KOӣ!_%?K>x^XY/6~?HFV",WHsoW}W~8>+WRd*ERd6<VRmoAh %o-${Ȳ}˷uP|uH^9]78{m*(>޾|8 zu5;};hmG{.^Y̾*K(^eg^9jN,Lmi:d_EE63;;jQvf53'ggAxiavzr0b) s2ry"sww#'=BmU0Fh,-Sĵxkc)ESCa۶@Hе[|tp}ݾV&F5wF1Qmn_GwO @Owl3* (ՌRo;/(}(o3 }?E< endstream endobj 506 0 obj 1083 endobj 639 0 obj << /Length 640 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 640 0 obj 566 endobj 599 0 obj << /Length 600 0 R /Type /XObject /Subtype /Image /Width 125 /Height 58 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"aqGQ̏(SDȰȌ0 !b+!B.dBB6-X˴mmnq(aX*" S :da8.qL"|F4.'HUEQ4(;T$!tF1RMnjC۵Pьob1dZ!LM/8B&m>vI:Dh`z aAuY78.Ɩ@[^7kY3\Z7œ[_A">נQKbBp5cWֶә!(|3be8!DAl.z wTQ ;ᰌdHrP@P] Hǐ/SF }{_8Sk&!#q|x~9_mPe`FWg!A%!|E{"7S倥%$Bj*CPLS-B M!ĴPCџ TJZ\ZOWRj[ 'A9=y *< endstream endobj 600 0 obj 733 endobj 585 0 obj << /Length 586 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 586 0 obj 654 endobj 669 0 obj << /Length 670 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSk]veeceyG!IK`1M FlHԦ"iNi02Tt5Lh7/sw9s ֜0P$@" QFNU " uH1eU*AQ`匌LsbR(TZz^R0RR̩oo<b ͪ &kP 89&%bv41ٛ]^_NPky]vI]RVcv]H?("gC.iְR^wXD2&ؕqP\ GO45Rom:Q NLE*ysrt X C" ζ@,K/f@Kc6g#?BG:Fn̤?A.gnu9:O\5(/E!{4k U:7pLn(>s/vݮ8);z+bur/1I>rRnhFOK__KOӣ!_%?K>x^XY/6~?HFV",WHsoW}W~8>+WRd*ERd6<VRmoAh %o-${Ȳ}˷uP|uH^9]78{m*(>޾|8 zu5;};hmG{.^Y̾*K(^eg^9jN,Lmi:d_EE63;;jQvf53'ggAxiavzr0b) s2ry"sww#'=BmU0Fh,-Sĵxkc)ESCa۶@Hе[|tp}ݾV&F5wF1Qmn_GwO @Owl3* (ՌRo;/(}(o3 }?E< endstream endobj 670 0 obj 1083 endobj 619 0 obj << /Length 620 0 R /Type /XObject /Subtype /Image /Width 125 /Height 58 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xS{YveecuyF!IK`1M0FlHԦ"iNi00Tt5L=h7byÛroϙs?  \s0"X,BQ !!0 ) $E8&B2uH0L UV0r"0iKHPiz8zJH sJ46C-8l jJPx؅FҬdovy}:Aqu5M&1>t!Xwg nYpt'ﰘdT M"#+ >ijP1>tXHd`eӱ!DB+mXr>Rj>9)qPq2l{?UO#bqPĮMG§-M5"BAlaP EuZmZ^ո(Fi5}=^Pz;|fQPFAbzyxAq;f"ļ qs l젰Y-zZis39c8E3N@ը,CS8%'v )Es3H4MI9y-~$8\q~?q.9`n =~ʯ$< endstream endobj 620 0 obj 1085 endobj 663 0 obj << /Length 664 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSiYveesuB iZ 5bSF_Im*‘oJ0/CEDgtDyv9k`4Sr~`~>"2|a:m4x P/~~1:m֑z M|(>}x2}wv<\p2ջͭmPlm{d9>P$e NߩH旯{z/9sXiiTնZo_ w!S2!;P6^zK?C({upD dQw <7z>Nllî:_z3Y˿okͫ^vB0jعK2e3nL;涨>C]擫̯ȤWW+R hvvGJ +D42lVВ\`3_@_vZR&IF=9\ťXxQYɐR,"Un_?p:4逿vԬ QFҬhkuy#ݠ8y]6I M HiV7ZZqb1U,-P DDRȕ&N32R"*G#(>rg P4z)G/e8ART H($oDb11HW> <߄|< endstream endobj 664 0 obj 1073 endobj 493 0 obj << /Length 494 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 494 0 obj 569 endobj 601 0 obj << /Length 602 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 602 0 obj 651 endobj 531 0 obj << /Length 532 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 532 0 obj 569 endobj 545 0 obj << /Length 546 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 546 0 obj 566 endobj 617 0 obj << /Length 618 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"QqG?̏(SDȰȌ0 !b+!B.dBB6-Xv,ֽ4;p~gygDaX,# R TT*[1 ph\J %EQ*Ppk+$!tF1\:}zU)R m#La1yPO2 i%2Zgal~˺6fĨS+dq(Nt&NgLX;cҩHmK61.O`>]Etu%4MF#5Qw6%vbo'gQo;J<.olҙSPdҩ{L+qC[Y( gٓEӪdpP6fwPKa<`@+G q=˕ڜ{ܨi˵&g!vpZEpz[LZyryyLfWwgPﮊf;i}KT O\*[ᰄp8_^^V)ac&op0ܪB/5Ϲp>|KFdK#\P8jG B彼5p>[g>^%>>"'G|䀈O-µBB(B}m!TWaOUa UZ\ZW+j)ʻ_-jOs9ꍤ'< endstream endobj 618 0 obj 735 endobj 537 0 obj << /Length 538 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 538 0 obj 569 endobj 631 0 obj << /Length 632 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 632 0 obj 651 endobj 561 0 obj << /Length 562 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 562 0 obj 566 endobj 595 0 obj << /Length 596 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 596 0 obj 654 endobj 649 0 obj << /Length 650 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"QqG?̏(SDȰȌ0 !b+!B.dBB6-Xv,ֽ4;p~gygDaX,# R TT*[1 ph\J %EQ*Ppk+$!tF1\:}zU)R m#La1yPO2 i%2Zgal~˺6fĨS+dq(Nt&NgLX;cҩHmK61.O`>]Etu%4MF#5Qw6%vbo'gQo;J<.olҙSPdҩ{L+qC[Y( gٓEӪdpP6fwPKa<`@+G q=˕ڜ{ܨi˵&g!vpZEpz[LZyryyLfWwgPﮊf;i}KT O\*[ᰄp8_^^V)ac&op0ܪB/5Ϲp>|KFdK#\P8jG B彼5p>[g>^%>>"'G|䀈O-µBB(B}m!TWaOUa UZ\ZW+j)ʻ_-jOs9ꍤ'< endstream endobj 650 0 obj 735 endobj 581 0 obj << /Length 582 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xO9B IJF0ai$VF_R[E:iYi}բg,˾he>_g_mǞ) H@o H,ƀ#PRFENU" .%H0+9VZʙJ"0 IHPiZ`jzJH T&F%RULz!`9&.H՘nXP}FI$V I2VcvzhPgiְ2-6XL2=\zN6ԩR o QnLJ*ysl7X C6 DB+͡x"5_|z&uJZl6TvޘJ/f/,n v9:E#X='.ܚ}J>}4{k U;F:/xR'|(,en_u;F\h$WXYՕBɽf^N2"xh2ti돿P`( ER '<ϯ ?V$gN#+mEnЇ)ި||F|F(#> ?QʟϨ|OAd89ǵ }|l.9i'g޼m(߾?1;"QO<|n*P>/{p&몶kxuj>:_XJ!:3?ubQvNKT-M ?{Yko+8]crD&gxqnzr/2ХFdxYܽ=u2lk$1JcqNEcã@I\EO\M~BAWlM~wwuljغ BvtC@ vv=6ҮDԛn}i7L!.m!.$NIך-V(6\W+8!.R}5GN Qk:h5%qQd*)Esp*irў:K~\݇Ipb%Wq_)5F<j K3K { d| endstream endobj 582 0 obj 1093 endobj 523 0 obj << /Length 524 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q/gtmhr2aXIԋ +HB)*"1.DB6!$d"%!_۱Lv٫Ns\9rg$w`F >A''L&6AR _7 I);hV_CI2J` )Tj7tAm3:J!ñv0˕jgd1h~20jG_J\ћYqAqn75Jiv#(:xh(`z E`a)IwY78.A[^7kIi3)q囈/\Oc kpC(bÞV:=E6Z] y@^:iYZK_AQ<֖f.71Rcd`4-+@Q);hc{#!F&_T/Z)3!ЙAv|k7/+:-#J*W:߁~syZʥV¾Kp?H珫׷w?Aqw{]=Χ~%RL3I#(ra/ 8{ˈⶃ:o?mBl2b̻^^}|۶CS d#\ȫC㒐b{D>"rrҒ!!i) bBm&՟AůUO-kN󣃀9<v< endstream endobj 524 0 obj 732 endobj 573 0 obj << /Length 574 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xO9B IJF0ai$VF_R[E:iYi}բg,˾he>_g_mǞ) H@o H,ƀ#PRFENU" .%H0+9VZʙJ"0 IHPiZ`jzJH T&F%RULz!`9&.H՘nXP}FI$V I2VcvzhPgiְ2-6XL2=\zN6ԩR o QnLJ*ysl7X C6 DB+͡x"5_|z&uJZl6TvޘJ/f/,n v9:E#X='.ܚ}J>}4{k U;F:/xR'|(,en_u;F\h$WXYՕBɽf^N2"xh2ti돿P`( ER '<ϯ ?V$gN#+mEnЇ)ި||F|F(#> ?QʟϨ|OAd89ǵ }|l.9i'g޼m(߾?1;"QO<|n*P>/{p&몶kxuj>:_XJ!:3?ubQvNKT-M ?{Yko+8]crD&gxqnzr/2ХFdxYܽ=u2lk$1JcqNEcã@I\EO\M~BAWlM~wwuljغ BvtC@ vv=6ҮDԛn}i7L!.m!.$NIך-V(6\W+8!.R}5GN Qk:h5%qQd*)Esp*irў:K~\݇Ipb%Wq_)5F<j K3K { d| endstream endobj 574 0 obj 1093 endobj 535 0 obj << /Length 536 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홿kP͏$M ED(uqS,RpRS@JKA]"RAk/ -!%˅C9qywMۄ ItKIq컕CfXۃDz Mb8~D1Q}c(@|d ,COPIĥX$$y/y$'TFBEͤ,/GϐpbbTV2B\BR.rE^"!A:_:kz* ]部3`kDP?,kZ8=kC}vj4aZ9($EIt1/=t/NkyEy#oHVK6{}kpmC+rːI "\2hκ6[Z.킭)Zlt|ou;F엑*j'fvXBe0'Z1%}qB7u1Z/b!ׯzZ~f#͏<> stream xOY;_әaS CZVJJ (VQkQ! E]C F@[b2O~ys{~:o0diA$A8 )SzQ&Ch!‚Fܚ4`x(RM;.:$Q<4ZNUؔ.ǫCz]"&-)n_D("G$:IӦڈhQT{ñѱx9cCp^ :"j_l49q5==XY}͚Y.ҷesȑp;0fYc$0Zͅ\ux,[:;-F@6F1^|bk[/V-N]j֬YZ)ߔBbae)sec3 k~wy[CNqsS]hXsfGO41]}ޗoeۗٙDaYsm?9\r|߯_-%J[ڬO'gsk;?9~M+ͬYoZ(|GOw7Q9׬ {?YU*~@rk^i=941`ycX9JŭsC'Zk@b*ͯnlcsc5L%4TF xѡǧn->|9.ޚdu#hNv8ܙG;ųcVۓ(ၑ˩IH]ܲhd5 8(._o(<3gcP%dmE[8D&UpRojW].r*vE0r}=jӴkeHhi" &kYkIaX[99 4@Z(֍A?6&~i endstream endobj 550 0 obj 936 endobj 501 0 obj << /Length 502 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc` DK32geafbbDvjVvNnn^Znn.vY9yDDiDEx8XYUPTRPRT`ca<#n)yeu-}C}]m i1AVfh32s(kXX9888XjȊ rs8O@Pp@P?+4ܙظu-}BR3i2Rc]UEx9!+*i]TVUM+PU^f _BI'2V(3PUJX8Ԍ jz'Ϙ9F`p7sMYan\B3-YF`ɂY:j⼭tEx`s i[y7X| 4kW.\o( vVnIۼV`ˆU vT9(!YgZ1mњ;vعeҙ=ՙNpYyD*f,Ym{l߰|v_]v;G- vP>hGh 7ZӥJjYY kt+lde jKeL ̀F 8܀@2 +À:mvPoqf #6~D> endstream endobj 502 0 obj 668 endobj 553 0 obj << /Length 554 0 R /Type /XObject /Subtype /Image /Width 182 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ys/7=y?$##myA| XLxcߚ%BH$7@Hi"TbYAEܱ$NgbNJiTkϋ倄T-h?G.ZSh*k؜ BLˮ͍/ıѬ*e Ea6dE˭͖뵿Gs[ji5)2["JfҚvqtw묕LyIUuznOx-^H3G8&h?𚶡׬6qL.w북Tf S45=~MP90t|tt2t ;:C=$֦4f[/}7 ' endstream endobj 554 0 obj 565 endobj 597 0 obj << /Length 598 0 R /Type /XObject /Subtype /Image /Width 125 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xk@5&iҐ(*P,*Jx),"xʡJ"-ڋPiAkҲ {6C佼yaNR.SI j q>LxcP8AWe,dYxpGJ$"QA8ƶow'ËR@QcZ<:E*bD͉rHՒlP,XeIM "GSۥa"?Z^9g!I`VNҼ'&z8;oa:?3z8<,XPv&0=(}8H eCuv%a]G@u}> endstream endobj 598 0 obj 651 endobj 557 0 obj << /Length 558 0 R /Type /XObject /Subtype /Image /Width 146 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홿kP͏$M ED(uqS,RpRS@JKA]"RAk/ -!%˅C9qywMۄ ItKIq컕CfXۃDz Mb8~D1Q}c(@|d ,COPIĥX$$y/y$'TFBEͤ,/GϐpbbTV2B\BR.rE^"!A:_:kz* ]部3`kDP?,kZ8=kC}vj4aZ9($EIt1/=t/NkyEy#oHVK6{}kpmC+rːI "\2hκ6[Z.킭)Zlt|ou;F엑*j'fvXBe0'Z1%}qB7u1Z/b!ׯzZ~f#͏<> stream xS[aم<,,Skr|@qb@oc1NifӐ=a4Mi6:dR43:v^]>ox9gwG")!J߶ZP 01 !ar\ DMl^RkIH3L,6RV1tώ8-8;,8JKrRxR ^p% B8 kr7x>Xz= n_aeH#JK[+wK?]ᠿ-TZi +e ` mK=}AX z.@(d;/]k}.ݾH"w; sWߑKQ%ix&_b2HSc7J4iJo9Qw+:4zvvo_F]gNX* t{Vr|f~1 xVt{r6dzni%k&'''b+kbcmÛыHWNj&ҙƏac#IO< rDf8י΁p̭}LtqqZ2pSKҶo>bJ@ɔL&xX*&d?bӷ-X}4"7@7x] ٥ñW؝^Eq _VsX_v@|ѩUX|]^LO޹oXztzccÃWOZ g5i>^'Ǧfޥanfj,7S*fX<1,5ԳDx<; endstream endobj 534 0 obj 1066 endobj 547 0 obj << /Length 548 0 R /Type /XObject /Subtype /Image /Width 131 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kPi& VMDQ""XTfqS,"8eh) RpPHiiAk7ڔw!o Y>VP)h9CIA1/|.<|,C6R@ҬEbB#Y^7;UiꚒ%?% 8 rI[FopՒ,ݟ$sJiܘw.ѝyc4J.[I.vZAo B.m8S)[3eyif/\/ϳyʙ8| Ro]m b>\9н{jq:OY1xݛSmW`ׅ^p]6 pW"^pOЖ:43ųY$n;;@q>@oip> a &{ endstream endobj 548 0 obj 654 endobj 641 0 obj << /Length 642 0 R /Type /XObject /Subtype /Image /Width 172 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK@k63bҖ @.B.C )hzACOYKQdQD\ mV*ufey1;9A}ؑu8ol*Q!D A(K"ڲD)ˉ'BXK%$_DJPIt6+&!z>IJ XHH2Yv3!U0"  "TqδJBzb[fPr@Vjl^+!=٨Vs"+/d,9nBwgZ$ [U^xB T-+̕d5m !DAFL!`)-TNEgp9: T Tު^?:On~d|{~fSpV8<_>$0rE}4nz~4=>O n2iza^o_\?MpnxJQ0EOPRo1 M}M+MsMCдeٻc=ٌH˞py?U endstream endobj 642 0 obj 566 endobj 499 0 obj << /Length 500 0 R /Type /XObject /Subtype /Image /Width 197 /Height 35 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOK@o63bҖ @.B.C )hY)=EdQ v/EEqE(۬V*suy3cw/"/^ACfhx;1Tb'쨘)X0)b_Oga+ endstream endobj 500 0 obj 569 endobj 671 0 obj << /Length 672 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xROHQ6Axw )vuYm[Ңgߺ3ӛ5œ]`鲙}v*b{a[QÓ'a?dy֭S{=5ڊ^-CT#hsM9s1F9 1w7;aYf ]%{w;ћ9 \Ir< X}I<>Uw(gRVzWOelπ~v{|u׶>UEP>,l%KTn)=J+vp,ZSk9xw"zmMWzmʨ)(ͳDf[xf8:罊ZIE?9Z*UVPog~~\?A< =ѯ tIsQIi!3NTc)[d@f endstream endobj 672 0 obj 704 endobj 7 0 obj [ /ICCBased 671 0 R ] endobj 673 0 obj << /Length 674 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xYgXͲM%Er$HHZҒsJR ""`D `}>ϝ}ݪکw`[v  2=ȋ{(0!I7RX) *$w}W #Y jw0R됂C@#` 1 /woa .V(B "rH7⇠!Ѓ 5H>n#6{vqEŏ`77}y'29,-׏&?^7 3]p3AΜw;W3=fWEp.FnaGk`jD^snƻ9A͡VDpwX>cSFm`rXHLvc@Ƃ  "m @i%pC4. @z!}N$y#G^@Bl#hȘ$%wCFBNg̿,vF^zQz믘hYZ@^43Hhm&Z ѩW"bT|wK ~Yor_DŽ}y;sQ i^Yi]cw_kY@#dd>:#s? @$r#.D_IwO@hE,Pj@ c`lpF2CAGA:'iP*@ p``̃%Mp"Bl$I@2CBP C)P@:*݁B#3hZ>C?`L 3\0,+ڰ l8Nsb ߄8< /PG1P(e.BQBT% u5F-6X4͋D~-A'%ZMtz =^AocNFc9Da1 ]8f2cEJX/6=mvcGso8 'SǙptem(nNࡐ0pH(DE1JbRRҜ҃221<&=: /Qb+Tw^R}x%?/7g ԺN9Q!-#!C#4D4F44I447iFi>R j:^}LLGI'LKFHWJF7IH/CoN@M!AA!a" u$b x8ψea4bebl`b\ab`gcf*edfF1 313273O0`bfd`2ʲɚ:M͏-;]ݒ=.2##9')iY9ː+ W/273/ww"GSs=/6?o1o '~|C|" zVy >R*/&,"l/|LExAUH$V^(ATS4DRVLYOذ8, #^*XP Kك٣'pOIIjImHzə{M&mQJPQ*OԶt cdvϲ$R'r9$VUy yOr D z~**)*^Q\TTrU*STfTPV~QQIRPPUT WmV&vIma>}ϫOkjjӘtӬԜЪz-}YN 5]Un=^ސ>~Aaa~~y'HFuF+J }&&&%&⦡Nxi&dhb̍Oe,|k%couߚhb}M [Q;Z;':5{=|R8;Zqv5:}hI)iٝ;]h]\b\]/nU}s7r/s_!钊HKZԽսOy/h,u%Uk~~v(\F%ӃCTCNքAaZшH(kсу111b b/ġHq=|Gg'B=IIIG :wQtr~T#sii4ԎUG'ʐ8ٟ%UM?!sNWPbnIyysY[Y釅ETEEŦŭgϜ|KWt 8*_nVћ}1G[zfk>-m;wu _ ^\N@럴> \_ ]ů_{Y|}s-smvCy6p[?~ol v u,BZ vwM)W v^h >rF cŸ` +J}*E^2 +}ib 356k([/w:IY!c"OJ,KﭒږqmgWVWSQ]g~N㇖ =Fq]-X&9+zku4svu>xƹk[3Cɓߋ=On-K'X*ԇ&̉r[GWN&%V$9*̘BJFNwp29{lѓy=mT>SSRw&$يs+W*W>UfB훺Ks WtZn^A"ުЦnt˺ý3t/.=Jtdy"W SaMcGgfd6ܛ/xNuab%eW?~Y6|.rwZ? 6mʿ;P,E6?-^Z F#D+J'E`@c dJebc]b$sp) \|/,!#Z+$!'T iM 9J#*DU }XMMHZzx}UwÌFƋ3s9 UKU+9kAof::ZRrp9ipjoiB"b3T%蒭үeKg'+F |]T^HSV'xI~e+MWk]ҵ28ܕ~NCOuɾ6d_}Y*Y)?̍>k~R40A4y*9'/o::~:xo6`.M|ۼw ޷/.?jo_~nUn;?'tPh&]uRtєӞKe$00%0䲞ekdx#ȫʟ"P%xWhQFTFVdY?P@F~t+8zRTo0˽w[ ,M%B~ @e@JCaCM)0.!p E^d!s:]zY`}˂'ۏ AP9h@W0("[s$STxt,Ks|mNϑdi2rr~XI}tC{ws [wx{3n<{$8kdɁg/6f^M]\_X"Zkwwś:[SۡPB{@FXӠ;z?k4iljwl̂*ɺfN>`#搅S.Ʈn?I:['<p/+82d,L>(b+%+5.0^@RdߔWiǕ2KrXr+T?'䩦ss ;]sq˫[]Tݼ=}<(oz1ttIg<643&mBj>W>Y]nb=l̏G[Ew:@!`Aܟ!O *LO'Ֆϯ,6Z?mܼŸEkbbxNNnüdwwQ ap٬Y;n+v^vkjД endstream endobj 674 0 obj 5953 endobj 481 0 obj [ /ICCBased 673 0 R ] endobj 675 0 obj << /Length 676 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 676 0 obj 2612 endobj 488 0 obj [ /ICCBased 675 0 R ] endobj 677 0 obj << /Length 678 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoE endstream endobj 678 0 obj 737 endobj 290 0 obj [ /ICCBased 677 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 927 1410] /Count 1 /Kids [ 2 0 R ] >> endobj 679 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 680 0 obj << /Length 681 0 R /Length1 17296 /Filter /FlateDecode >> stream x| tTEp[_/}t}@^B6L$A" : )*nЈ! (6"q(Jү[yx?gv}[ݺunU%@ѨaF{W'?e"BL]a؋u%0&#Du0#ϛG(ssDPz.\r]7 Wώ\7޵H$஫v/Au5KPnZ7}CH 31p\(h63'Wȯ{ȟT^u빓C~ jO)O.3\T7 _!Wɧ(&P-h|Դ ZD%v2H8ZřZה:gYSRuȉW.+O:xtŨpADe,* (g9eΟ9ηcE5Σpy85@A7`1FE)F:pϹE7:Y>P\< -}m|7冮%W POv.&9gXT9[ -9cGu>n0Lqnt>grDrhtm8ӽ;S=ɩZ=< A WcȇU4 }5PlU\ gDs3@!1&~i| Ļ>7) BP+B)@ S FH1䛑: ŲVf/6d[eoo4ァnJS\R 7_tQOM^kӪ:&,thDԏsч8>BGm*t Zk PBep,2buheЯCFڋP7[Vfv"V NB їXAX8S֡hvcNŗ6Շs]YhZ }8 -?:t-5p,D7h+zZkǚ݁3GP)_GGCόd^z/nsp~?_?SET;]Bt1mh-z^CYԏΣ fx"^ ;GRۨwt 3[}!&^<МRHPꀣ]EB7cmB;@S,`9Oŗ+rtގ_')| )'塲M:iKzz >@B̘V.'I> e6XFc #xmGOgP tt}C`p\\$p^7;nrއx )%A]FS؂6SQn:Π)􏌏,bV2=f6Ngg]Fv7{}nn;ͼ~{.h Fu:ۏ^AWt=DL =0/Q)35.TF?N+qn+ԔdIt qj1.FQX0JTzz$Omm=pm.8U}=.\;\N쌺S )߉uRTzVz\2B>!ۥfG7y\=?!YOi|HXzqRb?}`w=6o*ro+)erppPujH=MA֤ަ}*fj&CdbT\¸Ę ݂b!SˣѢ!ax ,OӔC0PZ,^,EeR9yzy80t=x~t< Fl=rP-$2jq>h1 kJy>}Xd~]?I݄ %%%S,'ed8'ɟTzS픚srnCs<5(?K=W?USjuQL`1]mtԶcg3ٹ59 xZn$ 5X2*˦;Fxq-,1@rVۢ8/~|. )˟M]E3ۛ:fRόSWXh|vyue<~izɼkܙ{2w k ?4ـW> 9X\!Xyׇ6f6 ,bȔrxє#080V}i>Ȗ5 l1h`YhJ4` Ecc!c} ;+v!%%RC ӝX{J\J^ )@+eh=v9dFϕbI-$H``"tCޡ5QB@9IlK"@N2[ȪduRr.lP)kS2k-Ff3~y :~]@0c(P*K\$.`8@ W%@ԧ)(v vuǵmiK'~c]66cki}Y)$ , JW-s 9L"|f= ݺRJ{ {nH̹1- ~)^<^%t~4$<iv jӟ`3,*NH؏R)U_c muENGRԴq(ɐE\|$22X!LLF 52a!2`&`bH:~ o_Pu"T g,hՋ*+-"PGҾWפe:]pk'g&iܪdzK8N:)ӅQЗQͱM2}^e^S>2}l4*P(r'MJȪ(r&wLQpRK@)*$Ȩ@ú'2@3rs G[쒧fґ<~5f9qNG Iw60=g~a/_#Gq>nq\)Ms0~uaa%s6ӛ͆i jVZ(+9gLt,`.\$O!tb0x*Nhŝu/]v_[}mR_j%sphZ"8"=JA]* V99]cQp%FҲs0Dždh:̧fJBHE:GNH STpKCE+|J 8.:dM[s0.!x}=#{u+>RwfRdwl~~0(ujScb LIBU1 Kħbt_kOO/HlAf%L©, ^GL_u"M#BYY;_U$y\Oh˯+7ڃ?o*uK硯pH_>_+U@uA,E VJCv{r+? jɲRPagn9srϏ^PnS  ˛ ZW;˽kn\BCa'UseB *,JcE S@/_*t 8:1#{pF:'`FDq [ve +Ҕ^}/P* Q~9Vݪ߂?տ)~QƱ AiQؔ opjHeŗ e݆ >FdmxZGVA+L!F؍`mvɓ`N6~?#4ZN^`DL3jYIS`ߓRV24҆b8/J9>.f)EquN )Y<'oyfY-zLz='N~tH:g=KqcG_1ҏ*❧zߎ7~ҕa Hh1nQjP]Z:5siO AK_IV`t6'R!2f0|΅qOk_>i6K0)AS#fx|x_ 5)1v;K:L,G:-M:m3G;YqǰlX:k;OʝJSBQ#CW䱧gD1>`=|_C$Ԭ%W(Y֥H _dc2tzD+r!gĦn|`Gk9[;n^`ߤ{^<iNjxQ[8i! oiMi?cr?7|ߞ76`id| hS] 37&RS("ޕh䬉\5vΑd{Zz'DCCc$dg#X<30^y -VY*CV3q@pg9[4Wt6*ZN SuZxZKlߚVW>pjʦfwxKb}9 ~yp?ddn+b`'K]eIͼ/3T)s#?\k~|vYY˯_3bHJ9}V/Qblލ+2Ly2vO:QqO#Y 392'32q!/ @Z#C1fa`MA>q8p{&P+)uV(붞nڈ]5>P,rkY:,>vSk2WM'xGu~*Ν6ma$E5RyQ(pSXITr.p824pf`9,HoJUAipp Cr@$?'Z`rb1 E*2ۭp YdTǠp܉+[q}^\2vtt㺱$__Zzv߯9KyA:;2 ,b3)PU)X3XGCw3vDP)l(R"' %w"'`HpЃXǒ"1j`@iLT@U98UeZMw̭Guz dZM]caa YyBkRJ*NUeS/3K٥R s̫܇i4lg0tn~=d;NPeW[tϫT}?'^(;Qy@ XpY3R0,ujҔ*Z`95ӐZ8~@-g+&h~zb ԯZ75=e_G(ެTc(+eCM+:\q&='f +YN:jX׭n@[hb*[[:Z,-#\\qZ]c Q̛ZKk7[ * M%҅֕ mՐvx)vcV\N"9՟fp ql8|BN /8xwĿGXס[=Q#UTµT`ՌۆIK=yU۷Wfyy lٷ`,hX9`em"3@1+ܩ *@ 2g5'<=%i7n;YZ6q6NA݁H YFև[ae&7= <{$ۢ}Sl9}tU]oT?[1 h*a5 Qד OM 2JdSNN7:rnPsr/ٰZ՗؂V -/4L;2ᕀȔ3@A2^E,D "꥞5WSqj\kVH%Ņ̅[S׾='}zkkw l8⿢bkuuw9Dc)?դeLVR{nnLps|Бu=}`;YH]G 2L N`.uԦn /ͬ#4Qwaǣ6ٝ M\xq~̃w$y0jQr$S20XZ6jr;F4z5BPY@t,\$D(t24f!9 IaԒY fL4~M^i9N<=8a>vO#Lhm ,qΰݫ򂠜|xVfW,ߋ+`QaSMy:>fr(W@(^( Q-,< P0ɷ o9VxB j `qa'( {} 7\TsU68l5r$u8D\p ݾIkһ `~r1-;M2,S}D@O";d+:ڪtjhk3*Ve)Bá(^kؔC+}$"hj!xԅ̘:{뭫Vuw2o۱)}۷ܹ}{_$n[;xTwTN\z9nŲk!{>9qązkZ4 ub `H`QfloY/LIlF%`Y G`ɯ I[BV.ԑ߱ yHuc;p ?zi`CYw"GSǷ/k UVUmVTɤVh(Z7@҉)Bᇽj+J7:u1&Qap7uÞH]x?>= nx))3E 5x$<&Ӝ~7Ⱦǻ6]KAELff=#>$1)J;e5ʿ0)3O*c)_fWRa}| F+6XcӰ#GC eCeCr^ S, ; 0]C/ JPYgnLf:ČĿwbxj<]mZV-rjӅpg8 /$¨N瑩GVg[$=Iiԅt46D8]H&(Bb鑰]8))XoJ@wP[ uqMƆm&}r*OF.*V%xûNsznB<` UojXAm:b d4~W8 M_625b+FXH1ȇ#qzq j;,X2ov{F 搻.|NA i @.6.8DPt.l `5m|= @hhX `@/c|Bt.l14\ǰR~(9 OiQ(|fϊgGs(3 " ϋG pO\4dyu/a%/¯—Fˢp\qW\b/> 1 endstream endobj 681 0 obj 11526 endobj 682 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 720 /Descent -230 /Flags 32 /FontBBox [-1018 -481 1436 1159] /FontName /ANDJPR+Helvetica-Bold /ItalicAngle 0 /StemV 0 /AvgWidth -479 /MaxWidth 1500 /XHeight 532 /FontFile2 680 0 R >> endobj 683 0 obj [ 333 333 0 0 0 0 0 0 0 0 556 556 0 0 0 0 0 0 333 0 584 0 584 0 0 722 722 722 722 667 611 778 722 278 0 0 611 833 722 778 667 778 722 667 611 722 667 944 0 0 0 0 0 0 0 556 0 556 611 556 611 556 333 611 611 278 278 0 278 889 611 611 611 0 389 556 333 611 556 778 556 556 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 611 ] endobj 291 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ANDJPR+Helvetica-Bold /FontDescriptor 682 0 R /Widths 683 0 R /FirstChar 40 /LastChar 222 /Encoding /MacRomanEncoding >> endobj 684 0 obj << /Length 685 0 R /Length1 10724 /Filter /FlateDecode >> stream xZ{|TŽ9}ds~lv7BYB#1$ L@PTPQS>SRX@,Bm+XEjZosbk+ٽ9Dk{Oٙ393o~̞5wԅhT}%Wtvx4 ڗV+ oҼ4^ó24Uwi!t C6<+b VErw,c+އڟӔ'h)r"^*Q u(EP;.cߕ~#?r1 ՜ݧpJtt>sEP{s{+wwF09 v nw/͑lP݅P>?rL+@D@g8Ss~Nns{2Ir$ |ʔ_TlV|9n_"sFV~˧)x;ot(hKq|, FK/ʙ/`>@1aNNqx֋!7CR\ R$ Ĉf0~4¡MKnEMrH/ vϮw6sI"lnIgǝPR6vݡ[MM;[-MgsKR^-Wwze. w:˽e iWh_kJRbq}5ŤFW#kqh|y[]NOylO8. ߎ; QS&hܕgL,??Hf(HZP'?ts8O5^oÿRz]Gt5^GY;9U؛ȌVmѝB5wLC[E/ ?IT >Seb)5eҨj u:EnOп` {.vG+}T$RTnC0v4E`N3}; P@Xm8W]op~P0RfAQUT&ETz}a=cdf03#*fܻL?[Nel>B/a/ \/}}jq/Afd>}-ex1 nF= ]KCW;J5T6H+n]^M/Dަ@RVB]hSQ6H S~_7IwmVd4uZ1AR*c([ Œ[YAho3d4ߐK['!5Cј!l\Pfh&=Ũ8#S]D~ *9N$ rKk'<֞򦲌t|4p(3҉!i87 M'56oYy4ѾᚹevIj<Ȫ>2'zXԻH-n"a!L5ia,l^59*0hnp DG]fM ai  [mY~[&+0ﷆ2~ԲH͘1<$ˆ$Oˆsv( |=KN$LB=K&Np5`f3=Lо0a,\ӊ~&#NX&4p> D DJ7;[-V2ߐ46žo2}v)jbMT< >*}"(N'V2=sOgOO(hi'4z 5G- ,{-SJ`LiMpW=*kY=YS> rF9m .hnܸ|8?93JT>\ rAp=!M_`qxTu]Jd2_ev+'r++|)W ex= b^JXB88Аߍ 4.:&a~1hEӲs6\{#LWp&hFQԐ UMfMq?{'~* tF_)-Zՠ=-elLV4L=GY3nYxEpIXt}3c~}OlXu-7ᔏ`Oc~ Ho~9zK j0U*O'o wzy.lvasgV.vMg.oa KoŦm۟l/c`$ܐMTJ ]/*AjPZ/HKj*\`YڍlZՓ rYH<yFZlx_ `KH?}]h2r}zgL\`sN(XDbL1ҢE: 9bXI}QfZoҊ܉8<fZ2.8Rn^ʗ1@w9g¯3g1KG'P[W/+8Sb/׬~̖oS?_'H t%%P~MN^T \ZQTbM BԌ`alD`!i[w1t!\GpsR.p^ !QN~hYҵȃ{{!69:<ػ)I"BRRTՎ@^ئX!N|)EiTfHUӉ<+8IfGf83U3_U; |0uom=蘕d2ehX ]:=" `I6dfyКR0јՇ %dqx<P)Ih"%!,aѰ,>l"g D o 'I<{\8ft< &fMm ۥUsTIʽ_;y٧viS&ܳı=-H{iYJ!ݒnNjݫOVVHMj\񳇶=WꌽS`\=xA' . Z˩Rc3qiAE@:(Z\5t劬'i q,:4q?)!2f?+\~ 4}>OKi ћ3̦ξ/-M-ۼѻgbO g`Z4.Vu+?|aǢ򚀓A?߱ S~k{WwkNQecI^:nmf5T"k0jtFCH2A:Lůgo (.~bī:= L.x$9iR=# +ϔsVjk $gxCYDU ˍhܬQ6e%\ Kq/f G'Epj_=ӏ]N#Q M,"'%I31qJMKnDj D8 5:apkI tv<:/p)vݴsOحJ={Yef~ܕ}Lc͙5{̛¥QOT3Vx't8PhJtJ+mЬu\7X- z4# lrMf#ܜx&p[2M6;ZO@ml鄅GbRȞfM"^5\Y0k̉!"WiZR{}JkUR'9GS?q-H/ )HC_mxm`y0@͉ 7hrv(LRCVwU'?vu۫V:p틶^?pK8:KlhfC׀WJ'1S)ǡpN#iU XlJR0)MF *P?0k3~d&UGY<,bGՌϙl7|Ÿ8DkRU;^8W#f ] _[v{gGc|vmCz֠hDzh( u@ bU 6=Zd#/P-]dU4/XZ]|qX*G WhoN.Jcoчn pb']aqg* HҌɷ%/SKXv$w:]{46#nvX̔DU(_RI[^u8<ܕQes[Lyjr4829TH!YnC"p %G:JY-KA>_Ҹ%O%0~+I%A`'1IBR&A(%)86\"!a "ɛ:9EdD-?9dS&c7n1'3Ww)?}tj?IJ*m{Y}-':/.h;:Tj;˷;?d}F)j<\1B3iZk8c")j-ʆ,š+ #?ýs\7 on*WaW!ܷ:E]ᜁRUo5pߧy%,. o U6f_1)UDyK@ǰDY$[/S ˷\}LPa턦 ~DiyOvSo4S& e3BQ+J/~?0^0<rq*8,v4G#oX)꣎aEl<8jsn؂Uib*>H=w]Gu4͠8av ǵb \z]ig+OFd[}3\. dz#2T*KM}h>U֣ sKѼys*+*[Vvt-i:RRC[!<>m/zB2  ̃BBxވ _McG1''vc{35h2/G/Gsqƕw 7/yW~8}fv xqt' endstream endobj 685 0 obj 6933 endobj 686 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 717 /Descent -230 /Flags 32 /FontBBox [-951 -481 1445 1122] /FontName /TMTLHF+Helvetica /ItalicAngle 0 /StemV 0 /AvgWidth -441 /MaxWidth 1500 /XHeight 523 /FontFile2 684 0 R >> endobj 687 0 obj [ 278 0 0 0 0 0 0 0 333 333 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 722 0 0 0 778 0 0 0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 556 556 500 0 556 278 0 0 222 0 0 222 833 556 556 556 0 333 500 278 556 500 ] endobj 292 0 obj << /Type /Font /Subtype /TrueType /BaseFont /TMTLHF+Helvetica /FontDescriptor 686 0 R /Widths 687 0 R /FirstChar 32 /LastChar 118 /Encoding /MacRomanEncoding >> endobj 688 0 obj (Mac OS X 10.6.8 Quartz PDFContext) endobj 689 0 obj (D:20110902220103Z00'00') endobj 1 0 obj << /Producer 688 0 R /CreationDate 689 0 R /ModDate 689 0 R >> endobj xref 0 690 0000000000 65535 f 0000193471 00000 n 0000008364 00000 n 0000172949 00000 n 0000000022 00000 n 0000008344 00000 n 0000008469 00000 n 0000163113 00000 n 0000009886 00000 n 0000010180 00000 n 0000010198 00000 n 0000040028 00000 n 0000040325 00000 n 0000040344 00000 n 0000020574 00000 n 0000020879 00000 n 0000020898 00000 n 0000027614 00000 n 0000027913 00000 n 0000027932 00000 n 0000034633 00000 n 0000034931 00000 n 0000034950 00000 n 0000011106 00000 n 0000011402 00000 n 0000011421 00000 n 0000042917 00000 n 0000043214 00000 n 0000043233 00000 n 0000044573 00000 n 0000044873 00000 n 0000044892 00000 n 0000028435 00000 n 0000028736 00000 n 0000028755 00000 n 0000034221 00000 n 0000034521 00000 n 0000034540 00000 n 0000030090 00000 n 0000030385 00000 n 0000030404 00000 n 0000015222 00000 n 0000015519 00000 n 0000015538 00000 n 0000046221 00000 n 0000046519 00000 n 0000046538 00000 n 0000026380 00000 n 0000026681 00000 n 0000026700 00000 n 0000045399 00000 n 0000045695 00000 n 0000045714 00000 n 0000019749 00000 n 0000020050 00000 n 0000020069 00000 n 0000012746 00000 n 0000013046 00000 n 0000013065 00000 n 0000016871 00000 n 0000017164 00000 n 0000017183 00000 n 0000028025 00000 n 0000028323 00000 n 0000028342 00000 n 0000047872 00000 n 0000048167 00000 n 0000048186 00000 n 0000042509 00000 n 0000042805 00000 n 0000042824 00000 n 0000010290 00000 n 0000010588 00000 n 0000010607 00000 n 0000036290 00000 n 0000036589 00000 n 0000036608 00000 n 0000048279 00000 n 0000048579 00000 n 0000048598 00000 n 0000028848 00000 n 0000029147 00000 n 0000029166 00000 n 0000010699 00000 n 0000010995 00000 n 0000011014 00000 n 0000013986 00000 n 0000014285 00000 n 0000014304 00000 n 0000018927 00000 n 0000019226 00000 n 0000019245 00000 n 0000014813 00000 n 0000015110 00000 n 0000015129 00000 n 0000027206 00000 n 0000027502 00000 n 0000027521 00000 n 0000016458 00000 n 0000016758 00000 n 0000016777 00000 n 0000040849 00000 n 0000041151 00000 n 0000041171 00000 n 0000038370 00000 n 0000038671 00000 n 0000038691 00000 n 0000032567 00000 n 0000032868 00000 n 0000032888 00000 n 0000032982 00000 n 0000033282 00000 n 0000033302 00000 n 0000011513 00000 n 0000011813 00000 n 0000011833 00000 n 0000039613 00000 n 0000039914 00000 n 0000039934 00000 n 0000023895 00000 n 0000024195 00000 n 0000024215 00000 n 0000037532 00000 n 0000037833 00000 n 0000037853 00000 n 0000037117 00000 n 0000037418 00000 n 0000037438 00000 n 0000041680 00000 n 0000041981 00000 n 0000042001 00000 n 0000036701 00000 n 0000037003 00000 n 0000037023 00000 n 0000045807 00000 n 0000046107 00000 n 0000046127 00000 n 0000021403 00000 n 0000021703 00000 n 0000021723 00000 n 0000046631 00000 n 0000046932 00000 n 0000046952 00000 n 0000023057 00000 n 0000023358 00000 n 0000023378 00000 n 0000041265 00000 n 0000041566 00000 n 0000041586 00000 n 0000025965 00000 n 0000026266 00000 n 0000026286 00000 n 0000035461 00000 n 0000035762 00000 n 0000035782 00000 n 0000022234 00000 n 0000022530 00000 n 0000022550 00000 n 0000025139 00000 n 0000025436 00000 n 0000025456 00000 n 0000018517 00000 n 0000018813 00000 n 0000018833 00000 n 0000039203 00000 n 0000039499 00000 n 0000039519 00000 n 0000014397 00000 n 0000014699 00000 n 0000014719 00000 n 0000024309 00000 n 0000024611 00000 n 0000024631 00000 n 0000025550 00000 n 0000025851 00000 n 0000025871 00000 n 0000043326 00000 n 0000043628 00000 n 0000043648 00000 n 0000033396 00000 n 0000033693 00000 n 0000033713 00000 n 0000011926 00000 n 0000012223 00000 n 0000012243 00000 n 0000020991 00000 n 0000021289 00000 n 0000021309 00000 n 0000026793 00000 n 0000027092 00000 n 0000027112 00000 n 0000035876 00000 n 0000036176 00000 n 0000036196 00000 n 0000030911 00000 n 0000031210 00000 n 0000031230 00000 n 0000032154 00000 n 0000032453 00000 n 0000032473 00000 n 0000024725 00000 n 0000025025 00000 n 0000025045 00000 n 0000040437 00000 n 0000040735 00000 n 0000040755 00000 n 0000042095 00000 n 0000042395 00000 n 0000042415 00000 n 0000047046 00000 n 0000047345 00000 n 0000047365 00000 n 0000019338 00000 n 0000019635 00000 n 0000019655 00000 n 0000029259 00000 n 0000029564 00000 n 0000029584 00000 n 0000035043 00000 n 0000035347 00000 n 0000035367 00000 n 0000044985 00000 n 0000045285 00000 n 0000045305 00000 n 0000018103 00000 n 0000018403 00000 n 0000018423 00000 n 0000033807 00000 n 0000034107 00000 n 0000034127 00000 n 0000022644 00000 n 0000022943 00000 n 0000022963 00000 n 0000038785 00000 n 0000039089 00000 n 0000039109 00000 n 0000029678 00000 n 0000029976 00000 n 0000029996 00000 n 0000043742 00000 n 0000044046 00000 n 0000044066 00000 n 0000031736 00000 n 0000032040 00000 n 0000032060 00000 n 0000013157 00000 n 0000013460 00000 n 0000013480 00000 n 0000021817 00000 n 0000022120 00000 n 0000022140 00000 n 0000047459 00000 n 0000047758 00000 n 0000047778 00000 n 0000044160 00000 n 0000044459 00000 n 0000044479 00000 n 0000013573 00000 n 0000013872 00000 n 0000013892 00000 n 0000017691 00000 n 0000017989 00000 n 0000018009 00000 n 0000016046 00000 n 0000016344 00000 n 0000016364 00000 n 0000031324 00000 n 0000031622 00000 n 0000031642 00000 n 0000012336 00000 n 0000012633 00000 n 0000012653 00000 n 0000020162 00000 n 0000020460 00000 n 0000020480 00000 n 0000030497 00000 n 0000030797 00000 n 0000030817 00000 n 0000015631 00000 n 0000015932 00000 n 0000015952 00000 n 0000037947 00000 n 0000038256 00000 n 0000038276 00000 n 0000017276 00000 n 0000017577 00000 n 0000017597 00000 n 0000023472 00000 n 0000023781 00000 n 0000023801 00000 n 0000172910 00000 n 0000185483 00000 n 0000193197 00000 n 0000058038 00000 n 0000058340 00000 n 0000067035 00000 n 0000067337 00000 n 0000062508 00000 n 0000062810 00000 n 0000060924 00000 n 0000061242 00000 n 0000067358 00000 n 0000067663 00000 n 0000058684 00000 n 0000058971 00000 n 0000054451 00000 n 0000054770 00000 n 0000049643 00000 n 0000049950 00000 n 0000072181 00000 n 0000072481 00000 n 0000076637 00000 n 0000076937 00000 n 0000055760 00000 n 0000056062 00000 n 0000050600 00000 n 0000050887 00000 n 0000069956 00000 n 0000070258 00000 n 0000060585 00000 n 0000060903 00000 n 0000054128 00000 n 0000054430 00000 n 0000048691 00000 n 0000048991 00000 n 0000074706 00000 n 0000075013 00000 n 0000065087 00000 n 0000065394 00000 n 0000056083 00000 n 0000056385 00000 n 0000050908 00000 n 0000051208 00000 n 0000059948 00000 n 0000060241 00000 n 0000049971 00000 n 0000050258 00000 n 0000075678 00000 n 0000075980 00000 n 0000070928 00000 n 0000071215 00000 n 0000068967 00000 n 0000069274 00000 n 0000069635 00000 n 0000069935 00000 n 0000065415 00000 n 0000065717 00000 n 0000061571 00000 n 0000061858 00000 n 0000057050 00000 n 0000057368 00000 n 0000051873 00000 n 0000052173 00000 n 0000076958 00000 n 0000077245 00000 n 0000072825 00000 n 0000073118 00000 n 0000067684 00000 n 0000067986 00000 n 0000051550 00000 n 0000051852 00000 n 0000052194 00000 n 0000052496 00000 n 0000077266 00000 n 0000077553 00000 n 0000073139 00000 n 0000073432 00000 n 0000071559 00000 n 0000071846 00000 n 0000064779 00000 n 0000065066 00000 n 0000072502 00000 n 0000072804 00000 n 0000063478 00000 n 0000063785 00000 n 0000059320 00000 n 0000059613 00000 n 0000054791 00000 n 0000055093 00000 n 0000049320 00000 n 0000049622 00000 n 0000075355 00000 n 0000075657 00000 n 0000070602 00000 n 0000070907 00000 n 0000066061 00000 n 0000066363 00000 n 0000062200 00000 n 0000062487 00000 n 0000057389 00000 n 0000057689 00000 n 0000052840 00000 n 0000053147 00000 n 0000077574 00000 n 0000077876 00000 n 0000074392 00000 n 0000074685 00000 n 0000069295 00000 n 0000069614 00000 n 0000061879 00000 n 0000062179 00000 n 0000059634 00000 n 0000059927 00000 n 0000053482 00000 n 0000053784 00000 n 0000078220 00000 n 0000078522 00000 n 0000073776 00000 n 0000074063 00000 n 0000068330 00000 n 0000068623 00000 n 0000056727 00000 n 0000057029 00000 n 0000052517 00000 n 0000052819 00000 n 0000063806 00000 n 0000064093 00000 n 0000057710 00000 n 0000058017 00000 n 0000053168 00000 n 0000053461 00000 n 0000077897 00000 n 0000078199 00000 n 0000073453 00000 n 0000073755 00000 n 0000068007 00000 n 0000068309 00000 n 0000064114 00000 n 0000064419 00000 n 0000060262 00000 n 0000060564 00000 n 0000055437 00000 n 0000055739 00000 n 0000050279 00000 n 0000050579 00000 n 0000076001 00000 n 0000076288 00000 n 0000071236 00000 n 0000071538 00000 n 0000066384 00000 n 0000066686 00000 n 0000062831 00000 n 0000063118 00000 n 0000058361 00000 n 0000058663 00000 n 0000053805 00000 n 0000054107 00000 n 0000078543 00000 n 0000078845 00000 n 0000074084 00000 n 0000074371 00000 n 0000068644 00000 n 0000068946 00000 n 0000064440 00000 n 0000064758 00000 n 0000061263 00000 n 0000061550 00000 n 0000056406 00000 n 0000056706 00000 n 0000051229 00000 n 0000051529 00000 n 0000076309 00000 n 0000076616 00000 n 0000071867 00000 n 0000072160 00000 n 0000066707 00000 n 0000067014 00000 n 0000063139 00000 n 0000063457 00000 n 0000058992 00000 n 0000059299 00000 n 0000055114 00000 n 0000055416 00000 n 0000049012 00000 n 0000049299 00000 n 0000075034 00000 n 0000075334 00000 n 0000070279 00000 n 0000070581 00000 n 0000065738 00000 n 0000066040 00000 n 0000169230 00000 n 0000100304 00000 n 0000101048 00000 n 0000126484 00000 n 0000127225 00000 n 0000131228 00000 n 0000132135 00000 n 0000172008 00000 n 0000133084 00000 n 0000133913 00000 n 0000085306 00000 n 0000086095 00000 n 0000141587 00000 n 0000142331 00000 n 0000116973 00000 n 0000117714 00000 n 0000097013 00000 n 0000097757 00000 n 0000161517 00000 n 0000162261 00000 n 0000155311 00000 n 0000156154 00000 n 0000112879 00000 n 0000113623 00000 n 0000133934 00000 n 0000135192 00000 n 0000101069 00000 n 0000101976 00000 n 0000088737 00000 n 0000089566 00000 n 0000080386 00000 n 0000081126 00000 n 0000132156 00000 n 0000133063 00000 n 0000097778 00000 n 0000099019 00000 n 0000099041 00000 n 0000100282 00000 n 0000079626 00000 n 0000080365 00000 n 0000087047 00000 n 0000087954 00000 n 0000151102 00000 n 0000152009 00000 n 0000109492 00000 n 0000110402 00000 n 0000105214 00000 n 0000106121 00000 n 0000128858 00000 n 0000129684 00000 n 0000143199 00000 n 0000143943 00000 n 0000158642 00000 n 0000159883 00000 n 0000153320 00000 n 0000154158 00000 n 0000145657 00000 n 0000146401 00000 n 0000122910 00000 n 0000124174 00000 n 0000096166 00000 n 0000096992 00000 n 0000127246 00000 n 0000128072 00000 n 0000143964 00000 n 0000144705 00000 n 0000159905 00000 n 0000160734 00000 n 0000154179 00000 n 0000155290 00000 n 0000122099 00000 n 0000122889 00000 n 0000156175 00000 n 0000156915 00000 n 0000114903 00000 n 0000116141 00000 n 0000157783 00000 n 0000158621 00000 n 0000093735 00000 n 0000094573 00000 n 0000147269 00000 n 0000148010 00000 n 0000091117 00000 n 0000091858 00000 n 0000083691 00000 n 0000084435 00000 n 0000125722 00000 n 0000126463 00000 n 0000086116 00000 n 0000087026 00000 n 0000129705 00000 n 0000130446 00000 n 0000152030 00000 n 0000153298 00000 n 0000117735 00000 n 0000118564 00000 n 0000111270 00000 n 0000112011 00000 n 0000106142 00000 n 0000107050 00000 n 0000149812 00000 n 0000151080 00000 n 0000087975 00000 n 0000088716 00000 n 0000136905 00000 n 0000137734 00000 n 0000081147 00000 n 0000081973 00000 n 0000103606 00000 n 0000104432 00000 n 0000082844 00000 n 0000083670 00000 n 0000110423 00000 n 0000111249 00000 n 0000148031 00000 n 0000148860 00000 n 0000156936 00000 n 0000157762 00000 n 0000135976 00000 n 0000136884 00000 n 0000142352 00000 n 0000143178 00000 n 0000120360 00000 n 0000121267 00000 n 0000130467 00000 n 0000131207 00000 n 0000112032 00000 n 0000112858 00000 n 0000084456 00000 n 0000085285 00000 n 0000078866 00000 n 0000079605 00000 n 0000128093 00000 n 0000128837 00000 n 0000092807 00000 n 0000093714 00000 n 0000144726 00000 n 0000145636 00000 n 0000139035 00000 n 0000140295 00000 n 0000095404 00000 n 0000096145 00000 n 0000113644 00000 n 0000114881 00000 n 0000107071 00000 n 0000107860 00000 n 0000107881 00000 n 0000108621 00000 n 0000089587 00000 n 0000090331 00000 n 0000146422 00000 n 0000147248 00000 n 0000104453 00000 n 0000105193 00000 n 0000124961 00000 n 0000125701 00000 n 0000091879 00000 n 0000092786 00000 n 0000135214 00000 n 0000135955 00000 n 0000160755 00000 n 0000161496 00000 n 0000121288 00000 n 0000122078 00000 n 0000081994 00000 n 0000082823 00000 n 0000124196 00000 n 0000124940 00000 n 0000148881 00000 n 0000149791 00000 n 0000118585 00000 n 0000119492 00000 n 0000116163 00000 n 0000116952 00000 n 0000108642 00000 n 0000109471 00000 n 0000090352 00000 n 0000091096 00000 n 0000094594 00000 n 0000095383 00000 n 0000101997 00000 n 0000102738 00000 n 0000140317 00000 n 0000141565 00000 n 0000102759 00000 n 0000103585 00000 n 0000119513 00000 n 0000120339 00000 n 0000137755 00000 n 0000139013 00000 n 0000162282 00000 n 0000163092 00000 n 0000163150 00000 n 0000169208 00000 n 0000169269 00000 n 0000171986 00000 n 0000172047 00000 n 0000172889 00000 n 0000173033 00000 n 0000173098 00000 n 0000184717 00000 n 0000184740 00000 n 0000184988 00000 n 0000185666 00000 n 0000192692 00000 n 0000192714 00000 n 0000192956 00000 n 0000193375 00000 n 0000193428 00000 n trailer << /Size 690 /Root 679 0 R /Info 1 0 R /ID [ <604388c9f45962aea2826bf781ab1feb> <604388c9f45962aea2826bf781ab1feb> ] >> startxref 193549 %%EOF 1 0 obj <> endobj xref 1 1 0000207511 00000 n trailer < <604388c9f45962aea2826bf781ab1feb>] /Info 1 0 R /Prev 193549 /Root 679 0 R /Size 690>> startxref 207694 %%EOF openscad-2013.01+dfsg.orig/doc/OpenSCAD-polygons.graffle0000644000175000017500000001016711676153365022253 0ustar chrysnchrysn]r8}NB>1;L:S\ݱ'v.Wh 9Hb{Ro"%(%$,,q{&ߞ@<oۓvxG{tƮF/ut+ۓӎG{IEu?Ra8"vd$w/dGwzыǏ/v{M"xU^tH E<ξΒg;=;9MdfmuТV]$u}rr!;-pJmZp7KQ'CS{tYyVw-{׮#q]PzJ@{vBl17Spd CdX8`85|eTB"G,TrK!fkr`\\~>+T*~CEQmF(t|b#N$N|K4+Rx29L@Z&ʼ=ĖK͗٤&abvC"XR-]zlG} ST6; sC unVEXo+\] 1x3YF'rlcn@ƣo7l=$YTWQ0 ?~kI!~m:ڼBJ@ - (a/qӁ^ġESޒqhxC!8Ix5 dZ2hɰ Y\evdf;KZhdђ!q`ad *VS:|srnG"@SYyo ,Ţa(ȴra۷3zHʡъe|2Ti8 AvZ=5A6UęJtƀCC9(:` T 'f&нWz%V[߶ɆPDE!rtF B2ԙi1er Y$.v^«/  r }5.>MhCL 0fVf~8(v1@jk 6,rFz͘l}[?x xUc5TJؠ/>FGB)Mu~;]1hvgA{06ot.6h| B,n!bcI&8:-{TEBq)-}O͵^051%3)GytWtre`IJpE[HԚȴ:ڿ|N&j}~-oH%yP+yM5Mj6O>6*B OV` zZk5ķ8!5L0B9r~㤈Q&.̐8ǹ:CU{5Uo;#?x,@$ e/iEM%R JTd. ٲ8\[eõ`pmR9tZEۉJtC0M,^-myrAkZ{r!8T(rۋo".巒`*h*;'a `cKa2A]V\>Q *: #dUBݓ-p^u~먏S(zy"}=@ds,n("ԇ7d1TI=Tr[Ve$҅+jj6$ނ(;L*yK=S'MMS}Q\"Co:;龨b޷H ܁hϨί ^]bF8}?T^rw~$n'T b0o^:$ GKY_6q+K㊉EHVs0w++Y&w o/bno'}_{OO'_ͫ/뢯I >b#(_Vdz~Ϧt&EfS5^9',^/oe_ )k>U6ﱞ茳1Ėȥ1ĉG^O2mYBqEN ߥ3 Z@ɟ/ipo ^?>Ϭ/:h~tkdNDwrD/f|viUO;bw`Ĥ=X9']Q)>~9v%^<)2openscad-2013.01+dfsg.orig/doc/release-checklist.txt0000644000175000017500000000441412076056204021632 0ustar chrysnchrysnOpenSCAD Release Checklist -------------------------- (See bottom of this file for how to build release binaries) o Update VERSION environment variable export VERSION=2012.08 It will be used by the commands below, as well as these files: scripts/release-common.sh scripts/publish-macosx.sh scripts/publish-mingw-x.sh o Update RELEASE_NOTES o Update copyright year in AboutDialog.html and mainwin.cc o Tag release git tag "openscad-$VERSION" o build source package scripts/git-archive-all.py --prefix=openscad-$VERSION/ openscad-$VERSION.src.tar.gz o Sanity check; build a binary or two and manually run some tests o git push --tags o Upload Source package $ ./scripts/googlecode_upload.py -s 'Source Code' -p openscad -l Featured,Type-Source openscad-$VERSION.src.tar.gz o Remove VERSION environment variable $ unset VERSION o Update web page o Write email to mailing list o Update external resources: - http://en.wikipedia.org/wiki/OpenSCAD o Notify package managers - Ubuntu: https://launchpad.net/~chrysn - MacPorts: Build and Upload Release Binaries --------------------------------- $ export VERSION= $ tar xzf openscad-$VERSION.src.tar.gz $ cd openscad-$VERSION Mac OS X: $ ./scripts/publish-macosx.sh -> OpenSCAD-$VERSION.dmg Linux: 32-bit: run on a 32-bit machine or VM 64-bit: run on a 64-bit machine or VM $ ./scripts/release-common.sh -> openscad-$VERSION.x86-ARCH.tar.gz (where ARCH will be detected and set to 32 or 64) $ ./scripts/googlecode_upload.py -s 'Linux Binaries' -p openscad openscad-$VERSION.x86-ARCH.tar.gz -l Featured,OpSys-Linux,Type-Archive openscad-$VERSION.x86-ARCH.tar.gz o Update web page with download links Windows mingw cross-build: FIXME 32 vs. 64 bit $ ./scripts/publish-mingw-x.sh -> mingw32/Openscad-$VERSION.zip -> mingw32/Openscad-$VERSION-Installer.exe $ ./scripts/googlecode_upload.py -s 'Windows Binaries' -p openscad OpenSCAD-$VERSION.zip -l Featured,OpSys-Windows,Type-Archive OpenSCAD-$VERSION.zip $ ./scripts/googlecode_upload.py -s 'Windows Installer' -p openscad OpenSCAD-$VERSION-Installer.exe -l Featured,OpSys-Windows,Type-Installer OpenSCAD-$VERSION-Installer.exe o Update web page with download links openscad-2013.01+dfsg.orig/doc/OpenSCAD-polygons.pdf0000644000175000017500000034075611676153365021430 0ustar chrysnchrysn%PDF-1.3 % 4 0 obj << /Length 5 0 R /Filter /FlateDecode >> stream xݜ[uS 9rHC;!%ȟ_?G 9p4\{p\w.w/^}t놿kk秹~~_򃫿= CWy(y*\?gWvb8eNWapRv]I3 5_R]U_ߗZI/)hK rڒ-֖%mIA[A(h.C}' .r_zeC.nz/<4ǁ~f/Ԫk׌ssx#}}nht$bz,H2XQ@#Ʉ_ԯ_c.4^AkOMJ]ڦsLQ.g\/ 3veejgP&5 [ 2/U?Nݼ|gs?Uk P!2Zk^Ň~;p; '=_Z z_ZL5Q}_o<)7}Z~py|. mMŋesÿ}o-p|nYjG'CYiru7DjPlyo`m˜M@'6 ˕ފ ;B} ( H+/O]nQa`-i' tQ%.țF2DX! Z4"|PmW{u}ջj_g? SyZ%!_(@6hφvkߚaY3-¤om?"=FގOCEi3Dv]{A_#GG|#)G3z*΂=9f\Bt}{%1t5O|뗾 (o}*OoS ~a|TmՑ Vp͹ibvQI-zP tzJ:& 1jAcI%]>= +X?DV% SZC>~̏M>^ 9_{AuCu`Rdt)jS?ezEz&}Oeo<M<_/yަߪOvX OՈZ=YR9Am1oLt\u̅DAXL|di;$7\V`iɅ [$G|CqRgil-OvotLG5%٨A/q'6x?2-/.ЎwRKs2iaGZƺ2/}_ =h&p?kܘh[bBg$u- TM>x"mU\T$+0Fg;Nrlz8H;"VϠi ^oʩ "YĀp@kw;{l.]7b^ˁ=Ƀټ0]1[=enF/AG)xhMC akeY ; $#a?#glB0{*c}*DP;{<ʡYv1f`<#̣5,͗ Qx9p#>=1S,=ܰm !@+b9ZV'S. 6)oYyvfwh:)*ĵt)<dUXP tEWȖq=w1[VY>b mJ-{Twښ.m=XU; RrkP`fiY h=ʶ CmF6 *q馢!0Mibd}%")Jj۽2/~-b;ٗg,xz~ŞP;,GW|*U߁ۆ/!7%tl1U`ʈ/m 9PY/Pws069kάBE)TLDi{?'soi%Է a/%ꢓV땥fIF̡lɭC[j[osLh.*R+]Q*'f 3}Ҥ_CzUWSR\u9e ^l7l&}=Q0ϬhIMU -8Ia%p`P$]|'ieiR #0q2A#|, }@"[$|)AaJx\ϧqۚ2f<"s7O\vBxo <~8Qs@ <^| 6Bm x/ _![L@ e97Zfϑb||b[˟kqoXU&^01Mz,*̻ę07޳-@GUɷdbi0X"Y?on,D@=y`8=aaHQrYA|o>sbI<#VVaܵͨ AFEϗrՀy/j@C=H;f,)Пm؃:ڑ֧AyyAޛRp4d{ ŒQozS3iRՍpYJ}HFckox޵lJ {@lǞg6? %募Ns[q#nVL&e'oc>KVVZ,pmV uBfDipv12'y E<q'AZY\(heb@,%m)H?}Pˑn'b1ϻ󯞽&)ѳDO0smbTv6>S&_diA ("+Ҳ,jkO\2. NTQJ5pRlYרMTb+҈,3vx*QMsqZ:9?GJOR*K"~M7 F/Zz(&8;VdkB/7 fAceaf&`M/\肛q6](U4m-)U9hvJ_Ri>7Ӕ]hb5b~lhdt r].sxx"'&PpϦ2evuR%R 'JTޥk'C+r}٤-jֵ7X{Vy:X]r:REIʰ1`XM nNC.LU2A6"JM-y{9T@*㬖}rZbzW J@GgіsjD]pىʌgTI >[B@neFj- gj !i2E4e;w%\8+⃥T mBY8 )!i킧Uw^K$%TU93&q؅r'uLI8ua8J ͂Qٯ֐xp܎wDQ< Gw3 ]#b6}my2ğ q~Ȭx1vV(m,4qsʱ<3%2GWET|~jrjϋ5l1 /Eoa\4 >ഷ. w}O}`2m\# c9tvS ci"?čK$#f{8w,1 q6?809 ^pVsCHs=\Tİży}uC ]ȵ2 *XI[uHH='1w .Ra>n (u|~9Q2w&/&ڹX {3@$3VxZUͧ8 C8幯uy[j1n{'c t3c# ~K)%oc %k"p`v0"}DODq tS'60 rP:[!4U_}H~?Cp endstream endobj 5 0 obj 6054 endobj 2 0 obj << /Type /Page /Parent 3 0 R /Resources 6 0 R /Contents 4 0 R /MediaBox [0 0 943 1289] >> endobj 6 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs2 122 0 R /Cs1 7 0 R >> /Font << /F1.0 123 0 R /F2.0 124 0 R >> /XObject << /Fm35 110 0 R /Fm24 77 0 R /Fm13 44 0 R /Fm29 92 0 R /Fm15 50 0 R /Fm34 107 0 R /Fm20 65 0 R /Fm2 11 0 R /Fm7 26 0 R /Fm37 116 0 R /Fm26 83 0 R /Fm31 98 0 R /Fm17 56 0 R /Fm1 8 0 R /Fm4 17 0 R /Fm10 35 0 R /Fm3 14 0 R /Fm23 74 0 R /Fm28 89 0 R /Fm19 62 0 R /Fm22 71 0 R /Fm11 38 0 R /Fm33 104 0 R /Fm36 113 0 R /Fm25 80 0 R /Fm30 95 0 R /Fm16 53 0 R /Fm5 20 0 R /Fm9 32 0 R /Fm12 41 0 R /Fm14 47 0 R /Fm38 119 0 R /Fm27 86 0 R /Fm21 68 0 R /Fm6 23 0 R /Fm18 59 0 R /Fm8 29 0 R /Fm32 101 0 R >> >> endobj 110 0 obj << /Length 111 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [192 1086 304 1144] /Resources 112 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T04R040S044R0P(JUWSH-JN-()MQ(34T0BSs=KS6=SC\.}\C|0 endstream endobj 111 0 obj 84 endobj 112 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im1 125 0 R >> >> endobj 77 0 obj << /Length 78 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [469 71 593 129] /Resources 79 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T01T07T042Q0P(JUWSH-JN-()MQ(242V0BSs=K3=c3sK#\.}\#|y endstream endobj 78 0 obj 86 endobj 79 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im2 127 0 R >> >> endobj 44 0 obj << /Length 45 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [117 404 270 462] /Resources 46 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T044W010Q045V0P(JUWSH-JN-()MQ()35R0BSs=Csc.=c3sK\.}\c| endstream endobj 45 0 obj 86 endobj 46 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im3 129 0 R >> >> endobj 92 0 obj << /Length 93 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [187 686 299 744] /Resources 94 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T00W00S044R0P(JUWSH-JN-()MQ()34T0BSs=S3#.=KCK\.}\| endstream endobj 93 0 obj 86 endobj 94 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im4 131 0 R >> >> endobj 50 0 obj << /Length 51 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [121 330 274 388] /Resources 52 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T042T066P045V0P(JUWSH-JN-()MQ()35R0BSs=c3.=c3sK\.}\S| endstream endobj 51 0 obj 86 endobj 52 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im5 133 0 R >> >> endobj 107 0 obj << /Length 108 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [181 1157 315 1198] /Resources 109 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T00T0445W046Q01T(JUWSH-JN-()MQ(36V0B=KS#6=sS\.}\3|! endstream endobj 108 0 obj 85 endobj 109 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im6 135 0 R >> >> endobj 65 0 obj << /Length 66 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [303 71 427 129] /Resources 67 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T060V07T042Q0P(JUWSH-JN-()MQ(242V0BSs=3S&=c3sK#\.}\s|q endstream endobj 66 0 obj 87 endobj 67 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im7 137 0 R >> >> endobj 11 0 obj << /Length 12 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [377 686 500 744] /Resources 13 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T067W00S042V0P(JUWSH-JN-()MQ(*I9LBrgK>д@b` endstream endobj 12 0 obj 79 endobj 13 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im8 139 0 R >> >> endobj 26 0 obj << /Length 27 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [21 827 173 885] /Resources 28 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T02T02W045R0P(JUWSH-JN-()MQ(I9TBrg%K>Ь@: endstream endobj 27 0 obj 78 endobj 28 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im9 141 0 R >> >> endobj 116 0 obj << /Length 117 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1 1213 134 1288] /Resources 118 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T0T0424V046V07U(JUWSH-JN-()MQ(J!P TCrgK>WB o endstream endobj 117 0 obj 74 endobj 118 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im10 143 0 R >> >> endobj 83 0 obj << /Length 84 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [132 598 285 656] /Resources 85 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T046R0P045V0P(JUWSH-JN-()MQ()35R0BSs= 3.=#3C\.}\CC| endstream endobj 84 0 obj 86 endobj 85 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im11 145 0 R >> >> endobj 98 0 obj << /Length 99 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [819 0 943 58] /Resources 100 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x1 W C Q!LED 2VKn)ϻh{GMG ^" #A΅4< endstream endobj 99 0 obj 88 endobj 100 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im12 147 0 R >> >> endobj 56 0 obj << /Length 57 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [121 245 274 303] /Resources 58 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x1 vON~.l29`"*D/kۂRe<&l Tczo?Q` 핰f> >> endobj 8 0 obj << /Length 9 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [55 908 130 984] /Resources 10 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T05U4P07U07S(JUWSH-JN-()MQ(*!(34THU54r/M endstream endobj 9 0 obj 78 endobj 10 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im14 151 0 R >> >> endobj 17 0 obj << /Length 18 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [368 917 480 975] /Resources 19 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x1 vON| .l29`"*D/kۂ=[82 5a~z4lz!xҽʱC̃ݖ-M endstream endobj 18 0 obj 87 endobj 19 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im15 153 0 R >> >> endobj 35 0 obj << /Length 36 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [127 497 279 555] /Resources 37 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T042W04W045R0P(JUWSH-JN-()MQ()J)P%D)PWrgK>д@auS endstream endobj 36 0 obj 79 endobj 37 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im16 155 0 R >> >> endobj 14 0 obj << /Length 15 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [183 917 295 975] /Resources 16 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T00V44W044R0P(JUWSH-JN-()MQ()34T0BSJ c=s C.=KSK\.}\.@#ÃI endstream endobj 15 0 obj 87 endobj 16 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im17 157 0 R >> >> endobj 74 0 obj << /Length 75 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [128 0 281 58] /Resources 76 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x; SYN*kC(LD~2J{GMpA~n{1:dyKV9 endstream endobj 75 0 obj 88 endobj 76 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im18 159 0 R >> >> endobj 89 0 obj << /Length 90 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [132 643 285 701] /Resources 91 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T046R031V045V0P(JUWSH-JN-()MQ()35R0BSs= 3.=C3\.}\CK| endstream endobj 90 0 obj 86 endobj 91 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im19 161 0 R >> >> endobj 62 0 obj << /Length 63 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [128 156 281 214] /Resources 64 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T04P045bcS Tp<ԢԂL2S# 45337363TH52Pp9C endstream endobj 63 0 obj 86 endobj 64 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im20 163 0 R >> >> endobj 71 0 obj << /Length 72 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [305 0 429 58] /Resources 73 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x1 SHKKM&gCLD9*܀YR~@b+ }/փzb?"2% endstream endobj 72 0 obj 88 endobj 73 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im21 165 0 R >> >> endobj 38 0 obj << /Length 39 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [441 497 594 555] /Resources 40 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T011T04W045V0P(JUWSH-JN-()MQ(*345R0BSs=&=S\.}\##|? endstream endobj 39 0 obj 85 endobj 40 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im22 167 0 R >> >> endobj 104 0 obj << /Length 105 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [181 1176 315 1252] /Resources 106 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T00T0447S046QRE y Eɩ%9 E u @hn Ңgij֦'r{+ k; endstream endobj 105 0 obj 84 endobj 106 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im23 169 0 R >> >> endobj 113 0 obj << /Length 114 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [17 1095 118 1171] /Resources 115 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T04W044 f E y Eɩ%9 E e hTiRnig Ԑkd4/ endstream endobj 114 0 obj 82 endobj 115 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im24 171 0 R >> >> endobj 80 0 obj << /Length 81 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [377 598 500 656] /Resources 82 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T067W0P042V0P(JUWSH-JN-()MQ(*I9LBrg)K>д@cWU endstream endobj 81 0 obj 79 endobj 82 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im25 173 0 R >> >> endobj 95 0 obj << /Length 96 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [469 0 622 58] /Resources 97 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x; Sm줲6DT_'SQA.@Ah+N%#ͦ#A } T90]} endstream endobj 96 0 obj 87 endobj 97 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im26 175 0 R >> >> endobj 53 0 obj << /Length 54 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [298 245 421 303] /Resources 55 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T0P021U042V0P(JUWSH-JN-()MQ(*I9LBrg9K>и@t endstream endobj 54 0 obj 80 endobj 55 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im27 177 0 R >> >> endobj 20 0 obj << /Length 21 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [606 917 758 975] /Resources 22 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T030S44W045R0P(JUWSH-JN-()MQ(*I9LBrgK>и@t endstream endobj 21 0 obj 80 endobj 22 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im28 179 0 R >> >> endobj 32 0 obj << /Length 33 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [303 497 427 555] /Resources 34 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T060V04W042Q0P(JUWSH-JN-()MQ(*342V0BSs=3S.=S\.}\#K| endstream endobj 33 0 obj 86 endobj 34 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im29 181 0 R >> >> endobj 41 0 obj << /Length 42 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [293 404 417 462] /Resources 43 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x1 vON ?.n29`"*D/kۂ -5iXSyD=!btd{5d=bĒYb2I? endstream endobj 42 0 obj 87 endobj 43 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im30 183 0 R >> >> endobj 47 0 obj << /Length 48 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [298 330 421 388] /Resources 49 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T0P066P042V0P(JUWSH-JN-()MQ(*I9LBrg!K>и@rv endstream endobj 48 0 obj 80 endobj 49 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im31 185 0 R >> >> endobj 119 0 obj << /Length 120 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [1 1194 134 1234] /Resources 121 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T0T044Q046V01P(JUWSH-JN-()MQ(J!P TCrgK>WB  endstream endobj 120 0 obj 74 endobj 121 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im32 187 0 R >> >> endobj 86 0 obj << /Length 87 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [378 643 502 701] /Resources 88 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T06P031V042Q0P(JUWSH-JN-()MQ(*342V0BSs=c#3.=C3\.}\cc| endstream endobj 87 0 obj 87 endobj 88 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im33 189 0 R >> >> endobj 68 0 obj << /Length 69 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [128 71 281 129] /Resources 70 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T04P07T045V0P(JUWSH-JN-()MQ(25R0BSs=3sc&=c3sK#\.}\c|, endstream endobj 69 0 obj 87 endobj 70 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im34 191 0 R >> >> endobj 23 0 obj << /Length 24 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [370 869 482 927] /Resources 25 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x1 {_/Nr6vRYBa"*D/dڙ)(OQ6\k1=﷟Gӈz2‚d˘ ?đM endstream endobj 24 0 obj 87 endobj 25 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im35 193 0 R >> >> endobj 59 0 obj << /Length 60 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [305 156 429 214] /Resources 61 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x; {ONo]ކN*kC(LDL;3-j† rM5h6` AJu3bdm~< endstream endobj 60 0 obj 87 endobj 61 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im36 195 0 R >> >> endobj 29 0 obj << /Length 30 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [12 686 165 744] /Resources 31 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T04R00S045V0P(JUWSH-JN-()MQ(25R0BSs==KCK\}\cs.|y endstream endobj 30 0 obj 85 endobj 31 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im37 197 0 R >> >> endobj 101 0 obj << /Length 102 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /FormType 1 /BBox [643 0 795 58] /Resources 103 0 R /Group << /S /Transparency /CS 122 0 R /I true /K false >> >> stream x+TT(T031V0P045R0P(JUWSH-JN-()MQ(*I9DBrgK>и@v"p endstream endobj 102 0 obj 82 endobj 103 0 obj << /ProcSet [ /PDF /ImageB /ImageC /ImageI ] /XObject << /Im38 199 0 R >> >> endobj 127 0 obj << /Length 128 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 202 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 128 0 obj 115 endobj 147 0 obj << /Length 148 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 204 0 R /SMask 205 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 148 0 obj 115 endobj 141 0 obj << /Length 142 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 207 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 142 0 obj 137 endobj 133 0 obj << /Length 134 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 209 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 134 0 obj 137 endobj 189 0 obj << /Length 190 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 204 0 R /SMask 211 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 190 0 obj 115 endobj 183 0 obj << /Length 184 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 213 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 184 0 obj 115 endobj 157 0 obj << /Length 158 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace 204 0 R /SMask 215 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0p70J% endstream endobj 158 0 obj 106 endobj 151 0 obj << /Length 152 0 R /Type /XObject /Subtype /Image /Width 75 /Height 75 /ColorSpace 201 0 R /SMask 217 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om /@a 0` 0` 0` 0` 0` 0` 0` 0pA endstream endobj 152 0 obj 97 endobj 177 0 obj << /Length 178 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 219 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 178 0 obj 115 endobj 171 0 obj << /Length 172 0 R /Type /XObject /Subtype /Image /Width 100 /Height 75 /ColorSpace 201 0 R /SMask 221 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Omo@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` <W endstream endobj 172 0 obj 122 endobj 163 0 obj << /Length 164 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 223 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 164 0 obj 137 endobj 193 0 obj << /Length 194 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace 201 0 R /SMask 225 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0p70J% endstream endobj 194 0 obj 106 endobj 199 0 obj << /Length 200 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 201 0 R /SMask 227 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 200 0 obj 137 endobj 137 0 obj << /Length 138 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 229 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 138 0 obj 115 endobj 145 0 obj << /Length 146 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 201 0 R /SMask 231 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 146 0 obj 137 endobj 149 0 obj << /Length 150 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 233 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 150 0 obj 137 endobj 187 0 obj << /Length 188 0 R /Type /XObject /Subtype /Image /Width 133 /Height 40 /ColorSpace 201 0 R /SMask 235 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0`y`>X endstream endobj 188 0 obj 92 endobj 181 0 obj << /Length 182 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 204 0 R /SMask 237 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 182 0 obj 115 endobj 175 0 obj << /Length 176 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 239 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 176 0 obj 137 endobj 169 0 obj << /Length 170 0 R /Type /XObject /Subtype /Image /Width 133 /Height 75 /ColorSpace 201 0 R /SMask 241 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`t endstream endobj 170 0 obj 153 endobj 139 0 obj << /Length 140 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 204 0 R /SMask 243 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 140 0 obj 115 endobj 161 0 obj << /Length 162 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 245 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 162 0 obj 137 endobj 155 0 obj << /Length 156 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 201 0 R /SMask 247 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 156 0 obj 137 endobj 197 0 obj << /Length 198 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 201 0 R /SMask 249 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 198 0 obj 137 endobj 135 0 obj << /Length 136 0 R /Type /XObject /Subtype /Image /Width 133 /Height 40 /ColorSpace 204 0 R /SMask 251 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om( 0` 0` 0` 0` 0` 0` 0` 0`y`>X endstream endobj 136 0 obj 92 endobj 143 0 obj << /Length 144 0 R /Type /XObject /Subtype /Image /Width 133 /Height 75 /ColorSpace 204 0 R /SMask 253 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream xЁàSPa 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`t endstream endobj 144 0 obj 153 endobj 165 0 obj << /Length 166 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 255 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 166 0 obj 115 endobj 125 0 obj << /Length 126 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace 204 0 R /SMask 257 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0p70J% endstream endobj 126 0 obj 106 endobj 131 0 obj << /Length 132 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace 201 0 R /SMask 259 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0p70J% endstream endobj 132 0 obj 106 endobj 129 0 obj << /Length 130 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 261 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 130 0 obj 137 endobj 185 0 obj << /Length 186 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 263 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 186 0 obj 115 endobj 159 0 obj << /Length 160 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 265 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 160 0 obj 137 endobj 173 0 obj << /Length 174 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 204 0 R /SMask 267 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 174 0 obj 115 endobj 167 0 obj << /Length 168 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 269 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 168 0 obj 137 endobj 153 0 obj << /Length 154 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace 204 0 R /SMask 271 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0p70J% endstream endobj 154 0 obj 106 endobj 179 0 obj << /Length 180 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 273 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 180 0 obj 137 endobj 191 0 obj << /Length 192 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace 204 0 R /SMask 275 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x  Om7@a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`e endstream endobj 192 0 obj 137 endobj 195 0 obj << /Length 196 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace 201 0 R /SMask 277 0 R /BitsPerComponent 8 /Filter /FlateDecode >> stream x1 Om @a 0` 0` 0` 0` 0` 0` 0` 0` 0` 0p10R) endstream endobj 196 0 obj 115 endobj 251 0 obj << /Length 252 0 R /Type /XObject /Subtype /Image /Width 133 /Height 40 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOjǷݥ[n;F22&S qpcЅ( b ( ۀHp dGYe.??'}"J+ !|T@$|_bKc*ACbD R, cbBE:=Ta:R)[  U4c0g UfCH #ARz[eN_q:y5)@PPt5=^ش{M.P@ @0Jo]m@o6_m֫XAB"%F+7PtRTBɰ5spxr6p𜫆eĮQkij%lRO uV%CK5 g{"#Wo`3Ujt$sI# Ԝ JN.,feiav"y+yB} 6df~y-Mfmy~5ݗ uběk`]fa䢛ԑJcuGac3|t#;/H gS󟳹ಽ~JuqrOR b,䋹Or?a3܋`@O%xO0|h5 sD?xzF6__?p4ko]36^ZK;W} h'; 'gҋW`q1=3xҬrx=KOϾKx26?n?0T>X|Yj6gcX玨 rp5x7c n F@c ޾H6o3hLMMwΙhxEP)P댜wkT3@Z,?@E,\aS۪9VG$Pjte+aòBQ {k H0 (Քui-Vd-r! @9@ E!%E>#9s!)Ea# endstream endobj 252 0 obj 1038 endobj 259 0 obj << /Length 260 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x혱k`Ԙ4R& JjBHt$xS&!)Z uA)q%iq8w7d~O( A;@q oEp APt ( 18u5î`q(".0Fl:+bI!bAȦYt[Ʌ!#hērVW΀k(M`0~{nq8yo-|;oJE,bd2-H; 5TI[u3).+VԦntޥ ˞5Z// +nZvcm5ER4{~PVۆuG o+hBf?@o/B k;@&{ꍪ3ćJ2GŚֱƏhCP=.՛FNf30dft̮$e^ F/t40[rY˴oϯ?xz֙vwF% &7''`TQq;<!|zw|FoekM>gڧ[M+ * (@kLZM͋(#+Ƀq_c!zǀ-\h#`0[Ɛ6Է[b ߖzֻV endstream endobj 260 0 obj 696 endobj 241 0 obj << /Length 242 0 R /Type /XObject /Subtype /Image /Width 133 /Height 75 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xZSWu] aߢmTZ$ƈb:1Q6v1A;5Edk˲x~a/=oX\ Az8x<Pp`p( B$@ 8(D+WT8x+HgY 2:AG& I`0:Z%s,8F@&Mfs.DM9DmLB \T œ)FsaI&,奅_eh! b:1#jomZ[m u7\"@).F' ,u{]=ξGR_UmPD|F Kƶ}O\0lLJ֯z4,%b)fKcc`lr=7?? ֳS??r`KMXX,ks ML/,oagǝ,R%ţ &s`½&<o^ v5W&K~j?>Ãn/Lܫ/ɼ!# B3l|rCDy]MeY.vL{pt|B w>9:zVfFR&!Rs,vǨ{ų~߷[r""e] 'Mbul1]"&e_r+!*5P|O#?p27.߽`B'&pt.cF-^|݁ w{kmW[򶣂.3k偋_*7Y-yt@;'߬ś /ҟTOC_fP1r54\$? x(L<{a)6B&D`o~nLt?n$Lә P.n.olvhٚnߪ,3&%E@0J%ĺLS^QIYyyDRyʕ!%ݘYƌ$Rr=5 Uĩ7HCI괚xzj,j$8?!p!+'@sR4P>.Y BIꯓ顆j"535 `(^/) endstream endobj 242 0 obj 1350 endobj 277 0 obj << /Length 278 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xS[YveecuyF!IJ`\4-)#fRp;ePmktVͮs`羹|^9{*X~:$0 A !{QHp &} m1BJѴ))m+f hU65Zueh xnݐňF7-V 6ܨW+CeC7+fqvz%û#M1Ju`trVQP|٥`kzG0=õ 4!UU"k&ǣS~ESKaNFdd"uI%&/GNzF Cv^6t[\~Źp@讚-mbso`ȿfc,j9QQ3ZދWg U0 KW/i5/߮~\շ/LJf]-Y38wl˧wGCP '͍o-&\KE-IY&|𼰶o0|X+<;TVf檮fT埫6W͵Un}YsA(#mBc3+WWgBm zG{Hޓ|qmO0O%F03?𾸒ܾ~)NzN\(/B>hąfOP> stream xS[YveecuyF!IJ`\4-)#fRp;ePmktVͮs`羹|^9{*X~:$0 A !{QHp &} m1BJѴ))m+f hU65Zueh xnݐňF7-V 6ܨW+CeC7+fqvz%û#M1Ju`trVQP|٥`kzG0=õ 4!UU"k&ǣS~ESKaNFdd"uI%&/GNzF Cv^6t[\~Źp@讚-mbso`ȿfc,j9QQ3ZދWg U0 KW/i5/߮~\շ/LJf]-Y38wl˧wGCP '͍o-&\KE-IY&|𼰶o0|X+<;TVf檮fT埫6W͵Un}YsA(#mBc3+WWgBm zG{Hޓ|qmO0O%F03?𾸒ܾ~)NzN\(/B>hąfOP> stream xZOg;88@ /|1JՂ6/&#i-JVg8YQRT6pSl3Y3vwP~{?B.𼟻#P -0*0!"9**E!%I.d2R*!D8(RKHERMi:j(JTȤCb"Pi&Zkj- :R.,Rg^n;.\.PGjYRowz:n|.X`v^B R-P f֝@0P0xvw{RHp@Ie~ >xP6gQ-'D0B57^FǠbԣ@N+@ 'Uz(d.Rry"c͖+&J&:;T,Xpdz!V &6~ZD:NA)$*5n_`Br}U:مLˍ@wsRI`rpt.kzo =l6{mc)hj4ߙ.U=w'Ww=ѻݗk}m(')t87OlX7go?Sa[ NZ#Jȴ%chؿ.~fA˪- auBL#CDIԼ&q !qO*VR Ip7tkt{%QHN>' PT'x%=+ ^ |OJ@zoQi @NeH*/9 Ω@SO©y)DC;gQ<+8:c>_rX7?^6L m_M~*+`mC}Kϗċxywy_O.,HXY sFmm_#S ͭmy"w7L4Թ}s'?q6'? nx$:Y V!Ti[7P4Qk(Hl.\.ꇜ.E&!Vu%Mb*drRddN Fo455H~~:@ &&Ie$a`& E<u endstream endobj 254 0 obj 1176 endobj 255 0 obj << /Length 256 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홿k@͏k&&DC,*J]":ei"S*"-uH;HA Rͫ}{CY݇rq=퇃vT$ 89:I8M1 (aYe @1t 聃( n1 f]Ba{EҦ{?h!$9D$%hU6NRC J< E8L*Rl08seRZQ˗t< ث sEIk77Z]-]d&h^t5] ΝnhRZDީ1qxDN՚zgp\B:r`鏤J`< G8OƃިRլ;dZc<9fiktͪWzqXa2~Wj6*Ԝ+[c8}{_zF% W՜NhX}lZFf{5~bbL >7|2jŤ챟l0昖ښn-o沚x(:nx6Fwgn\n6t a0AB!L m2Rdt+.D7`} endstream endobj 256 0 obj 640 endobj 223 0 obj << /Length 224 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSRYǹ{Opy DHE0-H\Y&7҆p2#ʌƉLׇ5+173-'þ9w>9/2G |A30 AAL($)H( N iT rTLSA0"Qiu,xuZQJi O#I 7%1 tjDƝ$\e6{<KMzMN"5Y'gWo)`hEu5ξkiLѭ+V}nR.Er>o~dž7VTs9<7/67Hɶ B)[R?|9_X}7{e3͕ҪIRKŬjRnd}Ԓv1+Y_)]J&FWJ-iS!T=t٥O߶v靃\:sڗ 471:,/Lz?r푪SE&f/\H8pOzoRMQg`٫wy;?=uC|OHՆc]ׇ7S5k)W 3tt$[ޜ DJy Νp_aѫ$7T/nwv_ Hqn ,p:{ +bc$G[h \ir6,EJ.¹1&Pcr[&ZEz]&E GqJ`t`|*Q_\%Z>'E"UR1RAR,o''(Eck_D]jg (|S%g\ $ endstream endobj 224 0 obj 1131 endobj 227 0 obj << /Length 228 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kP1IUDC~D(uq蔥NZtp PDA* k7W-{{s3Yp~y 9pg/pHlS!Hy4I8}u3H@ r.Hp, a8(=>A ss }d^ K hD giSl*1М[HrL'S'H%JLg`8In1$+t6W( P,"D7KpB8ɟUjZU33`EP7 'NjCl!кj4!ElyQR2zUEyz녑/{}c0S͐+o׮N#saۭm/kyyYKZ_v^VmUee-k_cyFu><y*hT;L1$}v~{K'$k endstream endobj 228 0 obj 664 endobj 211 0 obj << /Length 212 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홿k@͏k&&DC,*J]":ei"S*"-uH;HA Rͫ}{CY݇rq=퇃vT$ 89:I8M1 (aYe @1t 聃( n1 f]Ba{EҦ{?h!$9D$%hU6NRC J< E8L*Rl08seRZQ˗t< ث sEIk77Z]-]d&h^t5] ΝnhRZDީ1qxDN՚zgp\B:r`鏤J`< G8OƃިRլ;dZc<9fiktͪWzqXa2~Wj6*Ԝ+[c8}{_zF% W՜NhX}lZFf{5~bbL >7|2jŤ챟l0昖ښn-o沚x(:nx6Fwgn\n6t a0AB!L m2Rdt+.D7`} endstream endobj 212 0 obj 640 endobj 237 0 obj << /Length 238 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOaǹos (#+1$[&t~)ˬ:7S,isjtaNN֕ں/{syAP ph_G H\ HE@Q14:I3DUeDe@ ҤpiZZ.UNJHC#C)9tc yƜ,VЀA g5:jAvR`T Ïf5zYS{ W]WCp4J gݍ;^8t{n6/Y2ζJ.Rnnz;0b>Yp4`W{pdlb /|zDžlgP,1̛;(rM:1EΖ{C˫4zQWnP'H )yvwۣQp6.N u]d#t.;0 {ȃj!!OM wLW6C{P^_ysY7W6?}=<~hc)0qr"A2 MgֶNNapr|uynf'T5s#L\3q RK*?; *N ]|DZGSrga` WcF\Ј8p,iitW͆(#UJ@e'y<)glJv:r_@D̸ }?oo endstream endobj 238 0 obj 760 endobj 202 0 obj << /Length 203 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xS[YveecuyF!IJ`\4-)#fRp;ePmktVͮs`羹|^9{*X~:$0 A !{QHp &} m1BJѴ))m+f hU65Zueh xnݐňF7-V 6ܨW+CeC7+fqvz%û#M1Ju`trVQP|٥`kzG0=õ 4!UU"k&ǣS~ESKaNFdd"uI%&/GNzF Cv^6t[\~Źp@讚-mbso`ȿfc,j9QQ3ZދWg U0 KW/i5/߮~\շ/LJf]-Y38wl˧wGCP '͍o-&\KE-IY&|𼰶o0|X+<;TVf檮fT埫6W͵Un}YsA(#mBc3+WWgBm zG{Hޓ|qmO0O%F03?𾸒ܾ~)NzN\(/B>hąfOP> stream xOR{99<8pHM$es10,J4[#{hV&3fOˤ5M筼kK޻//g^}?oHKb RN$bPdr'eHhd,F2\&+%J\&EX* f Ta,fCN1>XVTVZ<(,' HqjOZmq6NXNK%Ya0"SR&^~ ;RogMRr:B}(x"}sFkh6S뱻QƮ z%&LJ$2!k]OSI>Ǣ}{H-zA4v3soRy373 t{I9ͅk;/ N̦ާ~)5;1:|YsQwLjy:x>.fo]5*Ur\ OK/޻*uD?yѩ+ͯ;Yy;5 z#<ij_!O]>*hy{(1qc{/lo|\N urb**CJ):|RPURMс૨j_E<|TSt *?[`h.CuStf۟I\ ;\{ޭmlw&G?h_y4OfmeaSɹ*xˋsΓ5=\c:p'22|z~<_$F"=4}DFunxN>~x{0wY dv%4S: Goމ'߹ ϸj:/h;C]t4sV1E0"W՜Pz<`8INWOrګ4c^AzSesNoq:91Ib#Tm03,kV2fM C"o0BER:=MW:T)G}T(˃۫ZEm˿6\NχK?UVD endstream endobj 232 0 obj 1102 endobj 261 0 obj << /Length 262 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xO}9B IKF0eP[i~aKm292*zZ=cY>d{z{=۳/gl>H$ @)i Ab1 # a~P0p&ھcr+@T4%'b2^ )aUNVSb1^l$F1Qj uf4JB0Z*:x}z܇]AŋIڻ=tws&IP|KhozG09ŵ؍54!1Jkm G&Ŧ61 7[UL49'×'w.IӤT` Bq[\yŹP[=/Rcm<[N̋t\gUSIhūKWrW٫uLы7zb_]ko_> UdYmtr>}O^O9{F.4_|66?y qE/DΚ\3ozxeb?VzoSjGUJ5W6v^_zoSjGUJ5W6v^_7.y $}~^[} ~w28[{=7~z.poӰN#trz57ϭo_9m<'.Zxd@6~pk MP<7rc6J tj%9{cA}"U֞h,1\ZRr>U,%B0ɛOHoN:v=KaH~{td8zeWÑǽj1EbWZ φ> t=.Uh#iVkv4}\۱k|&Y$GC0*Ӭh55ᐫf6jXZ.C sHT :3LZ(HK$x1aZ5QFV34ԐxQ}8ART ($|bbJR R~(";Wug Mn›, ! endstream endobj 262 0 obj 1107 endobj 249 0 obj << /Length 250 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Qg/ykrT@0$CDf$Q[I" Elƒm쿶c /> p| AFD$l_2PL,qT* f[1Y..Z f.%!Mgmc0I FO}&5HFJ1Ȕ6`h>``$5J}2`.M Ԡ٠UĢ+`85X('= OPxr"8N;)AKX "{,Ė_EfB>eQ-_" 3 Sx" 7Sxt2Q\EFL6w@lfg}u!*}~`T6݁aJ\m7e-_\kP,+T_Z9)Mr&יG[BZ @WjZum_ M.n~sqV:M╗:揬5Z?f~ '3wz2 d+M+zl/+ŃT4'AٰM^lT^l&/6*k/n6l57 z_M|玦/xzkܤ3̙L\ʗ\ P3%["wܷkk:99_{XA0= j|*p=bez~TyG! endstream endobj 250 0 obj 766 endobj 265 0 obj << /Length 266 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOgǹN;8rD\A-ĩTV#1jյenŚZFͭkvZfý~{'yy]r["@rha) R (8!jPVP֪5ZJu-IeB$E1TS:db2t$0Vgb՛N6ٝ jeq WazJUV~')}qwz>t{=np L5X CA z;F#E( %z;tDl8谿 YA2ejn?wq$7sI%n~4 w9i]-`R̙D`m#%xo?ˮ,܈}tDpy]X]Ͻx4XKM Yu$К['O|&˭Lmӑ_ef^&R;CʝFm(^ojuUu_E _<;.DZ ųBE _<;.DZ ų&+7{ǡ}v3aǷ;~xN%c\6ڻ>ۼ--n Dnks#8Y|e* )V-,?^dɤܻd/ρ1n9= pZ"9;=_pBCi6/}rb^XGry!*3&@3G/yZm )4z;?^Ol)c9 [wIm=̴ux{noW{jd{K`Dn<( .l5? "Fer7,BC|\?$amJ]NP} }W[7[RN,l5Z)L(`]n8-Ϳq endstream endobj 266 0 obj 1070 endobj 235 0 obj << /Length 236 0 R /Type /XObject /Subtype /Image /Width 133 /Height 40 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x혽kP1IUQT@RNYZJHKA]"RAT-.Ggɖ{X, ~6~Է XY$ Ǿ $he9!X)@~pP ǟ:\(a#qs }3L坢!6yD'Ҧ`89"JXW+pb_Vbt&/&ˤ1Ev"w h*{QR˕*l*etMEπAqN=/5фMJur]͋*zKmw`Ӿ[u\L)[ d9U>lzF745=vL, 8|dVp Ѹb2s (jOtdd[Z)\^BdK0z~/`3y=tK5c0y}[`|{ z9 W'81Wwt|_}9{wJ>wj|WٸiV mnտp̷Q:ք)HLLvQ '+$ΘHȢGOf@~b~S 迏#w/$/ endstream endobj 236 0 obj 621 endobj 273 0 obj << /Length 274 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kP1IUDC~D(uq蔥NZtp PDA* k7W-{{s3Yp~y 9pg/pHlS!Hy4I8}u3H@ r.Hp, a8(=>A ss }d^ K hD giSl*1М[HrL'S'H%JLg`8In1$+t6W( P,"D7KpB8ɟUjZU33`EP7 'NjCl!кj4!ElyQR2zUEyz녑/{}c0S͐+o׮N#saۭm/kyyYKZ_v^VmUee-k_cyFu><y*hT;L1$}v~{K'$k endstream endobj 274 0 obj 664 endobj 267 0 obj << /Length 268 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOKv^v7nA+-*ȥTbb Ǡ QĘQ o"REbM =*{3#>_f?퓙;y7?,1PF$a^b)qCo/!X%\I)J RJ9.#Š7c\M cØ:Jc8m Jgb6{&tw ĸRgM']m.0;\'^ŢaD" Cw()Q\cH yoթpbrak708|#v/C^`b=c}$C,ŧ`H=Ǣ|{H)6HIfoH,9=6 sH"E56o<Ϭ|ȂJf~:1~Qck]=5Y] /뫙W|6* s]ͭ6?zvZ3kҬ &r[vm+.=m &/~Z 'GCGY 2uK.}vN!ii69Ҳ_gJM][mmV+ivEU]jU+R9#ux3};ͤ^Vzy0F~_0l7޿y[SuF.㉫{Lz73 ˫u0dWf7ýMTe8rf 21zfq o^&'"gZTHB,?` 4~ endstream endobj 268 0 obj 1054 endobj 243 0 obj << /Length 244 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xKpǷMԖ$QdXAdFBJQq@%\`Wq$D,t=^OG7}k$"aA$ ~u>E1)N$ILCW`S.ZM_KIIΆ '*Z }F0V)HԍLI3O0 aۀ2m K2FodN7}ǹvvФ(eRIs4z3)0&'㜃555Fruu{3Rl hx&u\ڌ8MEb0lo&Ȕ5dR(bN:=C6Y_]yF@7Fej[H掋_P<6V.A-kFcr^pR|C|R%A5jK՘\kL/oeJ;R><1i .nj?P8+gvNѪZmR] R.Y_E[D:Z i>;hDJ1@$yP(_ꏿX] HP/1Z||c&66{j-'6\bs=]Oj.St Y؈cX@Gq3r򁣽=C qYqh?P^y%ڢXTZފJH@= V-!nT> stream xS[YveeseayRDҒ!aL2L2|`&GSZ9= &F eͮs C;|9{D}  Q0T*AQw!1J0 )E8&A]nHH0+%VZ*J"0 2R4: ZAQ1 RƻKLNZV:Cz٨ei K-F0f9kñV0s,MbBbW tCg#}` ;c8ZqXJ2}ѡؕ10\ EN6iR '(VowG&n&S!91nw,![j:WKw,M/,a!=[\ujZl3hi1^dC61v<'.ݚ{߁!>5v1ĎZ/]].|뗂>~GM* ΖĽ'`X[-K 8 JRT啯+OS#!QP%r %<ϯ?W$cg.+lS~U,{ors\v\ tk[M?{q}c ۗgݾz}>`t]N/d^ +`(_e^:j>J\lrf1"r/23sVm kM၉0<^6khᤉ` =rX j ėͻUZCj;`Y-7E 0 c8E3F`q5ٰ3iBN|8 J|0'I> stream xK"a?FI2aXIԋ +HB)*"1.DB6!$d"%!m2mۛ}j.^ywaAPՅ#0\DX,W$ q fXJJRN\5ɺaFpB,SNg^֪21C0B"W~u령_O{kFEZgbl~'u9l̐QKDhT:cg'Sip NM'X;cҩ(oJĸ)< gP|u3@0.p4 ; ; < dDžNZڼNZ$$ Q@ODHP@t :-!0ƁHe ]cןrHP8$Ik endstream endobj 258 0 obj 737 endobj 215 0 obj << /Length 216 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`! fbfVVV6,LLV-cae.`وO@HDDLL@LTDHa6n>!1IiYE%e%E9)qa~n6&hx22mWV7000PQ`e'#3;7#Հ 7{@H+:{P yؙɊsBC[HJY'$:!%=z #51&Z_UZyr&QEeUUŹ1An: ,0%l|" *ۺzڛ2c UX!iSPJ)8w򌙳fL+N w3הZ%$iY?cޒ˨,5&/JG^fw\~C׮@5v%vzbldQбK*i4oۨlXpjGEZ8uzټcn[-SdGTQ>(kƒuvO-w ge9H9?jn40Fs40-TG Bȴ2TTU@ ?ѵIV4}t1sеG+ty G;&@?}u2zDDZhÎo endstream endobj 216 0 obj 666 endobj 217 0 obj << /Length 218 0 R /Type /XObject /Subtype /Image /Width 75 /Height 75 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSW) (BMh[-j$b21M(Q JGT!FjQ*__]>>fawsG9YY|A%ATomo}pv{y=zO\N6mT!E e3yR\zx}C/GID~A~jom5WhR3b`Q18zãɩ`p. / `pvfzj?:ͨOPLdwzC뱽3)ýzh㴛B&*HQnw LGvGͧ?3C8JD':r4ӛFy)a(ogSHe u{.B4 jpb\<ɤP_\kCm8|@\p}\$H`yc/.@S^t90r֋B|u%fa95A>(T^FJu ȀJFuYYb!BkFɦAL6+(@O/I%BfBlh3]`a ( `NjTkRC;SڹC>K{wBFXq<{g0=[ endstream endobj 218 0 obj 1963 endobj 225 0 obj << /Length 226 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x혿k`͏I4X5E%DbiH`)CKNE R]-{9|,/I'`?9$;pqv$IDZJGFfXۃ Dz M @1 ( >1 hHL'dx$R, <6:a9}uقG̬aZ9xy͋ӫfm]v\ZYs$#oH֊ٴ=?Gui59eH2ֵ};M1Vg.@LWvǾOgsx̦;6+y%`tR`Zb gㄸZ6.iq:/ՒqbB+ךWlz~j17:|g/(gNZd\eOQF`ɜ}m.~*.rl\ن2(7˶aI嚿0?|WқC{dHoшg΃vz 7{ĭm'A9>}S!mk?*]? endstream endobj 226 0 obj 649 endobj 221 0 obj << /Length 222 0 R /Type /XObject /Subtype /Image /Width 100 /Height 75 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xWRkEI@%AEQ1 SQR9izBQˡ,,ySq3ԜV~x {}_<ϖӿD8Le=77C=x<@r9zK"x#pe5ǣ$2JPA4N3. PFg)p X $h m 7&fs8.9;b1taV`pI>;Jg0Y.)\ E"oX,H/G""@q9lAR.D"s 3lC%Hd z:(_W(2_[xM㰙 +H肃5)t;_ Ƀ!a7QMLwۦ8xDGEފPTsg)dXRpx%~r24\#9^jZz^ʶ)++3SHOKKJDR Da$™ • 7]Jj>~n~AaQqPZf4+**m(/RYaIqQaܜ,}zjrRB|l:48@*$8t_K=,5V>yRWZZX_imMգ 0?7[/)>:\/dDBpx*/FI/6VV76x]gWWw&8DwoMo:^67VUg܍(`q&2x"yXYgM/;L]=}CFFF,H6!|6zghomzVm,Nֆ|7 ѶY$*[$M}G,SӟffgA"V4qjr2:b27rS2/'3A9'~җյusBQ}mmueeŅٙ1sOru 1A[:! M+iL/.- IWlO殶'q~@k;9卦MhM:>?<-Z^4w6?KT˅T(l\+i̭l@oĮ~t01(%J͡sZڤ45c#a_&jT荕9K tvve da7٥&}ѭC:fj˱PiαAScEn/8GI-j6 LhC [l8 . }c ۖtדJ g:W$W'dT7utO~πL4Y]bHlRXɗ%0dj2:>{:M*u_J%"T y%^6D X#cV(FCz;^lkixVSQQ W;IT&_եV<WUq!׍9x뎎ZU?*7g!">ꂷQ~Ј;{YYTb0Ry=`EmjllښGe@ g$D~B>SKcrbY2Lw4}&Ѽ? K--`%rs33%b"7~bY. !d*|dxU#5x&$&!ȋ(/`^ºip'6`>"͠"lG &$ ,_-JoZjQQ^We~R˓aDId w|D%R 1w +[;Bc=PXvX$xr@+°-8pcx !=FCo Pf8(5pc@@86@ q|+e (A) X-@i ?P?=`Q4L(R( GAeLX&el EQchdfmz; X*O endstream endobj 222 0 obj 2580 endobj 275 0 obj << /Length 276 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSRYǹ{Opy DHE0-H\Y&7҆p2#ʌƉLׇ5+173-'þ9w>9/2G |A30 AAL($)H( N iT rTLSA0"Qiu,xuZQJi O#I 7%1 tjDƝ$\e6{<KMzMN"5Y'gWo)`hEu5ξkiLѭ+V}nR.Er>o~dž7VTs9<7/67Hɶ B)[R?|9_X}7{e3͕ҪIRKŬjRnd}Ԓv1+Y_)]J&FWJ-iS!T=t٥O߶v靃\:sڗ 471:,/Lz?r푪SE&f/\H8pOzoRMQg`٫wy;?=uC|OHՆc]ׇ7S5k)W 3tt$[ޜ DJy Νp_aѫ$7T/nwv_ Hqn ,p:{ +bc$G[h \ir6,EJ.¹1&Pcr[&ZEz]&E GqJ`t`|*Q_\%Z>'E"UR1RAR,o''(Eck_D]jg (|S%g\ $ endstream endobj 276 0 obj 1131 endobj 239 0 obj << /Length 240 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kP1IUDC~D(S,"8eh) .BiiA(RZ˅{s3Yp~y 9gO}xd$pf[|Dz Mb8~;Dq>(1R&00uMo4еAٍ <6^#rf_Zq  r`͋RPu3OO^Ղ"<?,ʚ1Ckt5C+䰟!> DSy6ϭd:7-5Ƌ ŕb|b>=^T!.irzszfz94RZ lEoX>:ilB>d蜍&>Ob2:4½y.fˇWؼ,gn'o߽`[^Bwrrjܼ%/7/g 8vYΪP! #B|y/BUTѨQwxyPݧbHڷ .}% endstream endobj 240 0 obj 666 endobj 205 0 obj << /Length 206 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xc`hc1FfV `Ĉl=bV6Nnn^nn.vH31sr  rq fdfUPPR PRTdC_DRNYMSGO&@_W[CUAF\l\"RJ&ֶ4V:r<L4PpM@P7jnA EsG਄Lڀp7C5Y>H3Ȫ8F$eUVTU[*IpBfWԱHɯhh jo)Ɍ p4VY) b_;yY43w֗fDxXhɉ@ kxFyKߌy. Xpκx?[=1^h:c4ɫ랶`h֮Z2{bKYj8;$p i[$5O|m[6Z8:3HEa_Riԅ7oߵ&`fDJBfdQеO.x]{ݳc㊹ n&jRG pڧd6P&d6hJ kی{Z@>s1\Os8:pc)74f 7Z0c 720 f:#00s# =U endstream endobj 206 0 obj 667 endobj 245 0 obj << /Length 246 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kP1IUDC~D(S,"8eh) .BiiA(RZ˅{s3Yp~y 9gO}xd$pf[|Dz Mb8~;Dq>(1R&00uMo4еAٍ <6^#rf_Zq  r`͋RPu3OO^Ղ"<?,ʚ1Ckt5C+䰟!> DSy6ϭd:7-5Ƌ ŕb|b>=^T!.irzszfz94RZ lEoX>:ilB>d蜍&>Ob2:4½y.fˇWؼ,gn'o߽`[^Bwrrjܼ%/7/g 8vYΪP! #B|y/BUTѨQwxyPݧbHڷ .}% endstream endobj 246 0 obj 666 endobj 209 0 obj << /Length 210 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xO}9B IKF0eP[i~aKm292*zZ=cY>d{z{=۳/gl>H$ @)i Ab1 # a~P0p&ھcr+@T4%'b2^ )aUNVSb1^l$F1Qj uf4JB0Z*:x}z܇]AŋIڻ=tws&IP|KhozG09ŵ؍54!1Jkm G&Ŧ61 7[UL49'×'w.IӤT` Bq[\yŹP[=/Rcm<[N̋t\gUSIhūKWrW٫uLы7zb_]ko_> UdYmtr>}O^O9{F.4_|66?y qE/DΚ\3ozxeb?VzoSjGUJ5W6v^_zoSjGUJ5W6v^_7.y $}~^[} ~w28[{=7~z.poӰN#trz57ϭo_9m<'.Zxd@6~pk MP<7rc6J tj%9{cA}"U֞h,1\ZRr>U,%B0ɛOHoN:v=KaH~{td8zeWÑǽj1EbWZ φ> t=.Uh#iVkv4}\۱k|&Y$GC0*Ӭh55ᐫf6jXZ.C sHT :3LZ(HK$x1aZ5QFV34ԐxQ}8ART ($|bbJR R~(";Wug Mn›, ! endstream endobj 210 0 obj 1107 endobj 207 0 obj << /Length 208 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream x홽kP1IUDC~D(uq蔥NZtp PDA* k7W-{{s3Yp~y 9pg/pHlS!Hy4I8}u3H@ r.Hp, a8(=>A ss }d^ K hD giSl*1М[HrL'S'H%JLg`8In1$+t6W( P,"D7KpB8ɟUjZU33`EP7 'NjCl!кj4!ElyQR2zUEyz녑/{}c0S͐+o׮N#saۭm/kyyYKZ_v^VmUee-k_cyFu><y*hT;L1$}v~{K'$k endstream endobj 208 0 obj 664 endobj 229 0 obj << /Length 230 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xSRi97 ǃ\N"$(.^0-X)brIgpKɌJ*3'2]/kVcnfZ:- N/{^-7y.7D9 |}!@t  AB!Д=+aTLPFPP)2&q ɺ!I i5ZDʝ6䴂l)j=\l*kX$N/9IF fkY2Q' 4=m%J^ث'?muUtj0F98rζS[Q+%+Vk9 "ף@\}t*prl`kqpȽ} vFIc77ƒ#O=Brb|txӢcfh"#S @|[W*I{ :D |arf ^$Dz4 9Oi?Zcm#>M>qnϪYbޭml}/LJ/w4Ujz|z* w6;FBi'z;a{stv9ìuN[o|r,sYò+)|혉P:u#u#/@X}=ցkZoݝYZ] ?'džzE{8>yJl|r5 ./NOFCglA)U'/ftr,q !SѶDi LMN ԖԒt2u|h`΃Ƣ`Vira\[ܧȍm [\6#ҭ=,cYM>0m- z5C #Vk9=3s@l?kq*-B#{R8Ϧ"ir%0<ǩUtg"Ѯ[LD02`0<+ߕé1q1H:3BoCFL% endstream endobj 230 0 obj 1081 endobj 269 0 obj << /Length 270 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"aggX;-_HP՟~굫r0 8(w.|q.xq#mZ/7ܦxq#mZ/7ܦv_0&㻣ዧ4k47L)9S}|\i 5rߞfFoO'mNN^j0V=}񵷂=_Ϟbe{~T! endstream endobj 270 0 obj 750 endobj 271 0 obj << /Length 272 0 R /Type /XObject /Subtype /Image /Width 111 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xK"Q8·Zm)e*%.REEa,Rv!}@R`KH-k;~-Eg.<> stream xK"aggX;-_HP՟~굫r0 8(w.|q.xq#mZ/7ܦxq#mZ/7ܦv_0&㻣ዧ4k47L)9S}|\i 5rߞfFoO'mNN^j0V=}񵷂=_Ϟbe{~T! endstream endobj 248 0 obj 750 endobj 233 0 obj << /Length 234 0 R /Type /XObject /Subtype /Image /Width 152 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xOR{9spɣgbHR2 3M0&2|`Km]i=j5cQJu_'C_7ko>c|J9'AQXB,( { !0 ) E8&B=baEW3N:9[T]1NKBR34`irFFJ8!`T"YhirrᐣbԫXZ*A"Ijvb3Yʁ Q\ƪM+<@l0w;LjV?$,&ecHDG"{ ) (VkuuǦn& 956tY,!%/ЊFG[`4O-OƢmF-AJ#7fS˙Kd3˩G*-&n-< >Z5qۢf]/tv:R'>V/6Y=Vj!^|ͮ%yf_pl&t4535^B58g7l~__?; TTc[q_{U:We T/>5?_|^%Pk~*K5_Z;Bgo?ol`cgОeGg޼u_??=w!ΫF?|i ^= z5;#hG{.^]ʼ(_gf^9jDu.:=μ܋Lzn:zլ޹Ot[\~ŹPXO9&잓˓䝻 {'>2l%1FmvO#bqĮMG§N¶BA魭a EuZ::OButz[Ca{4*F3]nf)*B\ .0NL5 VԠS9-.rƵiN W5ZhԪzqZܪ)Es iruھOբ\)IpQ-U.hlalA <[@*K_! endstream endobj 234 0 obj 1092 endobj 263 0 obj << /Length 264 0 R /Type /XObject /Subtype /Image /Width 123 /Height 57 /ColorSpace /DeviceGray /BitsPerComponent 8 /Filter /FlateDecode >> stream xS[YveecuyF!IJ`\4-)#fRp;ePmktVͮs`羹|^9{*X~:$0 A !{QHp &} m1BJѴ))m+f hU65Zueh xnݐňF7-V 6ܨW+CeC7+fqvz%û#M1Ju`trVQP|٥`kzG0=õ 4!UU"k&ǣS~ESKaNFdd"uI%&/GNzF Cv^6t[\~Źp@讚-mbso`ȿfc,j9QQ3ZދWg U0 KW/i5/߮~\շ/LJf]-Y38wl˧wGCP '͍o-&\KE-IY&|𼰶o0|X+<;TVf檮fT埫6W͵Un}YsA(#mBc3+WWgBm zG{Hޓ|qmO0O%F03?𾸒ܾ~)NzN\(/B>hąfOP> stream xYgXͲM%Er$HHZҒsJR ""`D `}>ϝ}ݪکw`[v  2=ȋ{(0!I7RX) *$w}W #Y jw0R됂C@#` 1 /woa .V(B "rH7⇠!Ѓ 5H>n#6{vqEŏ`77}y'29,-׏&?^7 3]p3AΜw;W3=fWEp.FnaGk`jD^snƻ9A͡VDpwX>cSFm`rXHLvc@Ƃ  "m @i%pC4. @z!}N$y#G^@Bl#hȘ$%wCFBNg̿,vF^zQz믘hYZ@^43Hhm&Z ѩW"bT|wK ~Yor_DŽ}y;sQ i^Yi]cw_kY@#dd>:#s? @$r#.D_IwO@hE,Pj@ c`lpF2CAGA:'iP*@ p``̃%Mp"Bl$I@2CBP C)P@:*݁B#3hZ>C?`L 3\0,+ڰ l8Nsb ߄8< /PG1P(e.BQBT% u5F-6X4͋D~-A'%ZMtz =^AocNFc9Da1 ]8f2cEJX/6=mvcGso8 'SǙptem(nNࡐ0pH(DE1JbRRҜ҃221<&=: /Qb+Tw^R}x%?/7g ԺN9Q!-#!C#4D4F44I447iFi>R j:^}LLGI'LKFHWJF7IH/CoN@M!AA!a" u$b x8ψea4bebl`b\ab`gcf*edfF1 313273O0`bfd`2ʲɚ:M͏-;]ݒ=.2##9')iY9ː+ W/273/ww"GSs=/6?o1o '~|C|" zVy >R*/&,"l/|LExAUH$V^(ATS4DRVLYOذ8, #^*XP Kك٣'pOIIjImHzə{M&mQJPQ*OԶt cdvϲ$R'r9$VUy yOr D z~**)*^Q\TTrU*STfTPV~QQIRPPUT WmV&vIma>}ϫOkjjӘtӬԜЪz-}YN 5]Un=^ސ>~Aaa~~y'HFuF+J }&&&%&⦡Nxi&dhb̍Oe,|k%couߚhb}M [Q;Z;':5{=|R8;Zqv5:}hI)iٝ;]h]\b\]/nU}s7r/s_!钊HKZԽսOy/h,u%Uk~~v(\F%ӃCTCNքAaZшH(kсу111b b/ġHq=|Gg'B=IIIG :wQtr~T#sii4ԎUG'ʐ8ٟ%UM?!sNWPbnIyysY[Y釅ETEEŦŭgϜ|KWt 8*_nVћ}1G[zfk>-m;wu _ ^\N@럴> \_ ]ů_{Y|}s-smvCy6p[?~ol v u,BZ vwM)W v^h >rF cŸ` +J}*E^2 +}ib 356k([/w:IY!c"OJ,KﭒږqmgWVWSQ]g~N㇖ =Fq]-X&9+zku4svu>xƹk[3Cɓߋ=On-K'X*ԇ&̉r[GWN&%V$9*̘BJFNwp29{lѓy=mT>SSRw&$يs+W*W>UfB훺Ks WtZn^A"ުЦnt˺ý3t/.=Jtdy"W SaMcGgfd6ܛ/xNuab%eW?~Y6|.rwZ? 6mʿ;P,E6?-^Z F#D+J'E`@c dJebc]b$sp) \|/,!#Z+$!'T iM 9J#*DU }XMMHZzx}UwÌFƋ3s9 UKU+9kAof::ZRrp9ipjoiB"b3T%蒭үeKg'+F |]T^HSV'xI~e+MWk]ҵ28ܕ~NCOuɾ6d_}Y*Y)?̍>k~R40A4y*9'/o::~:xo6`.M|ۼw ޷/.?jo_~nUn;?'tPh&]uRtєӞKe$00%0䲞ekdx#ȫʟ"P%xWhQFTFVdY?P@F~t+8zRTo0˽w[ ,M%B~ @e@JCaCM)0.!p E^d!s:]zY`}˂'ۏ AP9h@W0("[s$STxt,Ks|mNϑdi2rr~XI}tC{ws [wx{3n<{$8kdɁg/6f^M]\_X"Zkwwś:[SۡPB{@FXӠ;z?k4iljwl̂*ɺfN>`#搅S.Ʈn?I:['<p/+82d,L>(b+%+5.0^@RdߔWiǕ2KrXr+T?'䩦ss ;]sq˫[]Tݼ=}<(oz1ttIg<643&mBj>W>Y]nb=l̏G[Ew:@!`Aܟ!O *LO'Ֆϯ,6Z?mܼŸEkbbxNNnüdwwQ ap٬Y;n+v^vkjД endstream endobj 280 0 obj 5953 endobj 204 0 obj [ /ICCBased 279 0 R ] endobj 281 0 obj << /Length 282 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xROHQ6Axw )vuYm[Ңgߺ3ӛ5œ]`鲙}v*b{a[QÓ'a?dy֭S{=5ڊ^-CT#hsM9s1F9 1w7;aYf ]%{w;ћ9 \Ir< X}I<>Uw(gRVzWOelπ~v{|u׶>UEP>,l%KTn)=J+vp,ZSk9xw"zmMWzmʨ)(ͳDf[xf8:罊ZIE?9Z*UVPog~~\?A< =ѯ tIsQIi!3NTc)[d@f endstream endobj 282 0 obj 704 endobj 7 0 obj [ /ICCBased 281 0 R ] endobj 283 0 obj << /Length 284 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xwTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf endstream endobj 284 0 obj 2612 endobj 201 0 obj [ /ICCBased 283 0 R ] endobj 285 0 obj << /Length 286 0 R /N 3 /Alternate /DeviceRGB /Filter /FlateDecode >> stream xTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoE endstream endobj 286 0 obj 737 endobj 122 0 obj [ /ICCBased 285 0 R ] endobj 3 0 obj << /Type /Pages /MediaBox [0 0 943 1289] /Count 1 /Kids [ 2 0 R ] >> endobj 287 0 obj << /Type /Catalog /Pages 3 0 R /Version /1.4 >> endobj 288 0 obj << /Length 289 0 R /Length1 15532 /Filter /FlateDecode >> stream x{y|չ9]gf23 d YYT$!FETeUV5C0p)E[[**.Պ.m?\ };INsg;'jE1h *@Y3kE !uVG/U2EsF =o?uT? yi4xm IՍ=,cV_6O]8㞾ьrd,cI;- T{-n7~o! @#_ BEK᚝pkdm ?ץW}z5zL4(9NRcU=6#?In MʎU%7 = ROP;fa9񘈊dvxJ{~`v}A?Cx2 ӡk7ZSww{p  "x_0FpD(Bs":qt؛;xwx7xbngKewޅمr1[DT2[D \8oV᯼ 惗"˽; <0#xކa(pmYeQãB8o \ AJVH2 iY4zQ+E(B ]ཨ Ȳwȋ\ ADs,)0/Fۣ%(/O5zBː@ VY;U-.e汓{"ZHo׼.j;qEԶkk[GhGW_D;|Q&8}6h.Dk|:uϡ}hNMMDZk;"5gV/n[k|l1LAj3ZZfFfߢ7zI;pvX_4sRt)MQߌ5w!8sGQ&9|E(y'nN~ɝBߘ CHGm h34ڞz9AyhY4=hڇBd8\ggQ*C 7;z'%})rxJ9BFxh]s>ن{ mG?Gd[#y&$-=3}(TP"eW 9xhŷvo"aWqDFRy P:"vFϴ3%KX%I+j1<.#xoěoH4=K,e~.auV^:y$y*.!7-FN3x po#v|WGBI;@73wtg$ugdNU_US&4A/+rYeI|_OF::kC 27 RGAڨ_Su }Lv M5i m4 3/ xճE4cjS% Q&j[jv5QYLKim:גUMQ | }Q9:MlvFMݎCW!ސ{+$}>Ns}'?|`Jh3%ȖѤ u*:ՌaQ<\`Ihդ>[pJީ3ίA[O}-|@5tx%g; 6:Bo4&)k&sƐb|>7prU ո6 s(ͫC%7$(uW|ѳ;}u6`&6 ٜtB7#ia|xnl7{rS~n*e7MhIFja}omn 0ϳ\8fAq-`W4wvwNjK㝝it17DbBI+ó4y$h5S(5K'2M.!(\1u+(Qxu HFd W(qi6jy8]^9Ca#8k0g n,Vbb>n>Z2Q GA7d%üYpf0[حʘ"3aDT( Q"0Jemf cJ簊`x psDa^d85{JZ]Z7 v4^7;4a$*:AʗYg,xc({yux60lwRq҂Z cfo{W}F,7ŏM(Bff]cQ25$swr_ ME*Ҹ-x3x}֚I"`܌zE!)$Bӧ(t89}QMH*Z6 lSPH "1닰Ѡ .q)˜Ү.B:#$/, W+!T"b>:2ECK+JPP."X/g%:A>7xLFEXD0O~c=2PzY5w4u"VfyFrSyKߒ9!'MBjWu8\Gl& Ǫܚ" E#C3O1Ta@C~1_n߽f_bjEAkNy%OoH:q6q9qp/Gy v, #&pr"0 pۤRlkԃiB `du)r{6x 2\ǂ Ɗ{3acV'&!CUZa'-2eL&D( cR^-6E4J/jL/L&0wā^p\*/?uʦ$lӨcxOnB\C޲8j.w-w$vǐPbon?GDk)1 {HfVrK?r:sYPy(. 5/B7Ml}@0`T2J%E{cjE P`:+Tg1 -zkt P~ O|yq12 <}ʭlգwtY ) rZ|Cɏ-tL0A".X8=ByP(BN , E Z"E)BICɦaġL+B.d /8-R/>`Db1%v'/xi1JSo[lr_\EL$}<gK2q*֥>n*þ:(yyƥeFvf^ffcXV)ިffs! \-"\`lY@|`0ZLR(L**-"N'S̊{$vrG?>b2=4̛`?Je70O_L B`T["giP.ڵiֶi3Jt%ú] ;,[Q@Zѐ,(0b Y F@i~`4- KŔ!@G/nS<$H> 29%fcɛ,l\6)BlP<( aHS~RQW B\ y٢8uaLM_??οm|7nMm5)T7JB& D s(CCd. G41=Jq,+\Qyz\4LZpl8XA*FPÝB<q*JYgpH Be#^[ roF}Z='DTU/p0%L м޼^ r3KZvpNBvy n:J$t$l ߳eK̖ñn:k..4&,]pi[:Ԅok,-Y8 \H}юlǐlɲ*MGo|kJY\Vʟ9ܩeMz}ۨQ[[\ JW#濲f&|ʒ'l;q*Z!tbEܜ`Pz*9$:}<}#-JY8 ~L=+9JH,-M O^0$()3)`gQywtUH}NΪH Z^gmZ.$@ČrܢRJP6 0&e&,&Cng퍀 8B1z/-}[$@xn> tG4߹1'09;{7f ʨeS7%o~G1rdaاߢ3# pMO| YMv=XNDy9ܻ}R"7a\߳u- dێW"1ei=x'?m&?KyiflyYvZޝ{4RUܬKܡm/0.FCp8,$s)B3-`Mi5`IlUU&Hv b%N%YDXhB"~}z=c-6'hV`tU/lnUl=ߎu;6Ox{|`>/`FБ еekwHs"xۥJגݙKP j BGctY A㬐`6<&yX_jΨVS ' >R4U۟\:go^1uߑO;yo`n3:1U H05CzՊzUHР&Lm"0bVJ] j: $}ހ2<;gwkrta1kq|+]XM8/2Vn V,>3#*-Cs2jj;Ϯ晐Ӓfs-Lj H ]dM]nV (_wzV{6"3(2ZoH? ~+C<>t,RRn8Kp%WB 8֏ %v tҵ1p0PB@cpIOyTMyg@f~Ƨ1-Y ^˚C~?0N05foZ7x﷏${'̫lD>ꔀS &O6,o}uE,ɝS'g>xxɖ() &SXkJ5p#֢c aZaGl>bOtW +ju#K޽AKc 7Ǹ)w7kL*L+6pEsXtȰ(Lar3@#NDFɁ v;,yʰZt0E~m@e'TUI"3)DFP`!˜ZCCnbR.NO2}ה핳OϺ鉉kN>!͇$W_Em˯fp;."uRˎbrӜ8:sI&Jƒz1AYhx xx~!DU0 ygcVtaLqH}i߮U®oU@BʲNX 0l( \{9uqSo}6~( a~-x.؉ʴ]9 J3(P =@10<=ΐOO-p$ MiئcLJ-x闉o x)Xr+@Ʋ$F65=_uZweQ&\nnay+jbbۅvYXK [ýΑvٸLnYNU: ԚAieػ?}'50% @ibdžxy0łօFaL'A/r&BiNpa#g@daQBҡ#P>Hά~jS'?K_Fhob/f&KĜ^|^KvqcS11PjVrGDat ^'q^ 4ԾrHU@{!߻Kg{z_q] 'Kv;9U)q<nʧ,Y8%G aB|ՠZT'h*$72ft P3GT0Wy85'm=uAGkY3'Koy\:E;@&@(&6{l8 >E`"  `@@=kx"w@ P0 d2FAux~zS_<7?PhP}ؠ p  ToToTqP}Auu6NZT5>{P]^{Π0}oޠAuvy1hP}Aury];T_z},!x endstream endobj 289 0 obj 10275 endobj 290 0 obj << /Type /FontDescriptor /Ascent 770 /CapHeight 717 /Descent -230 /Flags 32 /FontBBox [-951 -481 1445 1122] /FontName /YWKYGI+Helvetica /ItalicAngle 0 /StemV 0 /AvgWidth -441 /MaxWidth 1500 /XHeight 523 /FontFile2 288 0 R >> endobj 291 0 obj [ 278 0 0 0 0 0 0 0 333 333 0 584 0 0 278 278 0 0 556 0 0 0 0 0 0 0 278 0 0 0 0 0 0 667 0 722 722 667 611 778 0 0 0 0 556 833 722 778 667 0 0 667 0 0 0 0 667 0 0 0 0 0 0 556 0 556 556 500 556 556 278 556 556 222 0 0 222 833 556 556 556 0 333 500 278 556 500 0 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 ] endobj 123 0 obj << /Type /Font /Subtype /TrueType /BaseFont /YWKYGI+Helvetica /FontDescriptor 290 0 R /Widths 291 0 R /FirstChar 32 /LastChar 223 /Encoding /MacRomanEncoding >> endobj 292 0 obj << /Length 293 0 R /Length1 10124 /Filter /FlateDecode >> stream xZ xTյ^{眙$d!93LBC2 yA@ $@@AF)A Vu"K >P)E9sי"~='k^{sZ{Iʛ!Mz ry ,ZM.Z\Þ.b@rwٚO ]pӒ^,dn\7aPku8ㆮ{1_iSX{ҊZ`)h`@Aw;kzܖ$>y/ysΧtW{i" |T2t6R֪%AG*GW "O CE~$ϯ͢>yƍ,Ԁ;V|dR4C)ȁ_SC +A/?/!}?sʯbWJX?$ğ ]}idDyȋeCJL˻Ko#RˬH;Hv ~y7D;"ݸ/ܰ/H//w AerL]$!Q}l<{\nPюJo/vG$6}PΈd{y>92+Hy>#]ッ$H.FPTMn&o2ckEx/a;#c83p >Of*;>r`0Ť Kco4RF9 8֙uF|5p [H[b\2da[0YhT9 LTg]yt?Vpog1q9#;]NMŴ aX.,Ai#~K&}#'HzQ *¾“C#\1"7 Gi+"W~KW}'#G$ZE?pu{ȍBNEiDnMnFO:gUsϼQ(-s s­#^pܪ"QO(c)$DRDy)kq&`15!%͸g^GL's+ʮtJi4o~1Q| %TrS0Nf$MajB \C}!tF}O‚"E>r;Uym;U.p=PNKːzWZ-mf7;v~+>H $sR2) HDh$y&rLjuHZ yp6bk%$qHPLK6]+٫/ZCeeg(@9k>TX|>, e7`(NG mlzO@*, AZ܈9q#$4 >Jک -}УmKnMao!wrMbcמo'c}/ $Z.v]0JFN*r`w&ωq5h(>1 Q%N%LҨ91hliIÛn ~$ʱٿz_%_&SJX9?w.-Tڱ㤛wh5x:?#Dյײw1q;n|YfMV5|n#j >gsl0!u0PQ1|uDǥJp IF^XH'cNk?8~ՃPh]R檇?Z0+)(:k[oqOpA|l7 -~ef gf|v$ $NY F%3FQh\&O+9#&ܞ >kR?)_5ከjBz,ŢIEcУbP/N KՎ^UXֵyZ/~sQsLnuHy}TiV3o9U>U}|~솗IoOJT}{2 @i%'2vz A2UhtsP(,09q;wqO#K<gQt.e$ԕB4T/R/gסmhlZags i pfˉQ~`09Q٨nF&"+BV> Q,U9k1 }D16X6JXj8O-$)Xf':w]ؒb` fY3sjrƖ!)+M7KDs2}MJdܑ3"شOq8TaR1OmZ[iIu-I;g3 ̧ͯ7OUҗ `ЦYeEkYkމl1 [ɷޗo˰%Pg+( T4ūb= s8 2NurH1Kɥ:q|fY<p1-I26DPL̆˫oyu+qdLM9}e?I;ߚnJ75nR[M=sfxI{}I u #nZOUMbAwcDZ\Iؓ$e}芏Dds%6=/=/K-`iI9d!KN05Bcބtޘ+6&&6pB=&z3gx8bjQg' 'w zKn-M'c\C%X<qi&nrijgMם*)ÚĴoʌ'1Z~GFxT.)^:h'w=M 4]Gc7w#H9/%d^f]Rk`40bZt@ENĕz(2FLΕ޺8vQLțO]޼[ְs[W+)X'œq{iv6Ԋ' 9{W!ٔ0 KLc1%,ⴤi)vcB;NQ5s9b&RJZZƍFJĒ@6C7t,6‘dVgFSeTN[VS2g*-lX¶=J^[bf{=USNÂngX"66K5'DAZ"-bfɪ}#"*5_ YQ+a w$΋zwd5fB y'ʇxB1/޽wC=ʣyʯ?~r2C[uT$Jc6imb5DoOdٜi۝MWgEu6bNL ߆GبNQW7]"EAeo ݾ[֥:aN~r-Hw4e:^JwMCuSv2ێ3k`H>[:$:A 2f."1}Φ9z"bd(* DYujTGhMYqMtbl*lZ϶fh_%2^ͩ9 .XO'I//eI>g* ߙOp.\KRca0o'{ƥ4Y2)P^y9tx78B`hT`M]bͦYR [&հSM/=>!=>%/IoKgKe,x 54VIQVIO  <;RFI#p!RsAݟܑ~}l[ݏ6[bȋAeh_>0` lqMom?ksk:n@o EL&N;WvCd?͠V(C:R-@;K}^i#mvKK?=$?RR'RzD .k$Oz> U_76>Go(~(kq\#_ϨQQ Gu#v> endobj 295 0 obj [ 722 0 722 722 0 0 778 0 0 0 0 611 0 722 0 667 0 0 667 0 0 0 0 0 0 0 0 0 0 0 556 0 556 0 0 611 556 333 0 611 0 0 0 278 0 611 611 611 0 389 0 333 0 0 0 556 556 ] endobj 124 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ARVDTP+Helvetica-Bold /FontDescriptor 294 0 R /Widths 295 0 R /FirstChar 65 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 296 0 obj (Mac OS X 10.6.8 Quartz PDFContext) endobj 297 0 obj (D:20111226105955Z00'00') endobj 1 0 obj << /Producer 296 0 R /CreationDate 297 0 R /ModDate 297 0 R >> endobj xref 0 298 0000000000 65535 f 0000108609 00000 n 0000006170 00000 n 0000089733 00000 n 0000000022 00000 n 0000006150 00000 n 0000006275 00000 n 0000086016 00000 n 0000012308 00000 n 0000012602 00000 n 0000012620 00000 n 0000009830 00000 n 0000010128 00000 n 0000010147 00000 n 0000013541 00000 n 0000013847 00000 n 0000013866 00000 n 0000012713 00000 n 0000013019 00000 n 0000013038 00000 n 0000018118 00000 n 0000018417 00000 n 0000018436 00000 n 0000021020 00000 n 0000021326 00000 n 0000021345 00000 n 0000010239 00000 n 0000010535 00000 n 0000010554 00000 n 0000021856 00000 n 0000022159 00000 n 0000022178 00000 n 0000018529 00000 n 0000018834 00000 n 0000018853 00000 n 0000013131 00000 n 0000013429 00000 n 0000013448 00000 n 0000015625 00000 n 0000015929 00000 n 0000015948 00000 n 0000018946 00000 n 0000019252 00000 n 0000019271 00000 n 0000007744 00000 n 0000008049 00000 n 0000008068 00000 n 0000019364 00000 n 0000019663 00000 n 0000019682 00000 n 0000008576 00000 n 0000008881 00000 n 0000008900 00000 n 0000017707 00000 n 0000018006 00000 n 0000018025 00000 n 0000011891 00000 n 0000012196 00000 n 0000012215 00000 n 0000021438 00000 n 0000021744 00000 n 0000021763 00000 n 0000014792 00000 n 0000015097 00000 n 0000015116 00000 n 0000009414 00000 n 0000009719 00000 n 0000009738 00000 n 0000020603 00000 n 0000020908 00000 n 0000020927 00000 n 0000015209 00000 n 0000015513 00000 n 0000015532 00000 n 0000013959 00000 n 0000014263 00000 n 0000014282 00000 n 0000007329 00000 n 0000007633 00000 n 0000007652 00000 n 0000016882 00000 n 0000017180 00000 n 0000017199 00000 n 0000011056 00000 n 0000011361 00000 n 0000011380 00000 n 0000020185 00000 n 0000020491 00000 n 0000020510 00000 n 0000014375 00000 n 0000014680 00000 n 0000014699 00000 n 0000008160 00000 n 0000008465 00000 n 0000008484 00000 n 0000017292 00000 n 0000017595 00000 n 0000017614 00000 n 0000011473 00000 n 0000011778 00000 n 0000011797 00000 n 0000022271 00000 n 0000022572 00000 n 0000022592 00000 n 0000016041 00000 n 0000016349 00000 n 0000016369 00000 n 0000008992 00000 n 0000009301 00000 n 0000009321 00000 n 0000006908 00000 n 0000007216 00000 n 0000007236 00000 n 0000016463 00000 n 0000016768 00000 n 0000016788 00000 n 0000010646 00000 n 0000010942 00000 n 0000010962 00000 n 0000019775 00000 n 0000020071 00000 n 0000020091 00000 n 0000089694 00000 n 0000101008 00000 n 0000108330 00000 n 0000031597 00000 n 0000031889 00000 n 0000022686 00000 n 0000022987 00000 n 0000032223 00000 n 0000032546 00000 n 0000031910 00000 n 0000032202 00000 n 0000023674 00000 n 0000023997 00000 n 0000030617 00000 n 0000030895 00000 n 0000026929 00000 n 0000027230 00000 n 0000029263 00000 n 0000029564 00000 n 0000023330 00000 n 0000023653 00000 n 0000030915 00000 n 0000031254 00000 n 0000027251 00000 n 0000027574 00000 n 0000023008 00000 n 0000023309 00000 n 0000027595 00000 n 0000027918 00000 n 0000024975 00000 n 0000025257 00000 n 0000033899 00000 n 0000034191 00000 n 0000029929 00000 n 0000030252 00000 n 0000024662 00000 n 0000024954 00000 n 0000032889 00000 n 0000033212 00000 n 0000029585 00000 n 0000029908 00000 n 0000025928 00000 n 0000026251 00000 n 0000031275 00000 n 0000031576 00000 n 0000033555 00000 n 0000033878 00000 n 0000028903 00000 n 0000029242 00000 n 0000025599 00000 n 0000025907 00000 n 0000033233 00000 n 0000033534 00000 n 0000028559 00000 n 0000028882 00000 n 0000025277 00000 n 0000025578 00000 n 0000034212 00000 n 0000034535 00000 n 0000028237 00000 n 0000028538 00000 n 0000024340 00000 n 0000024641 00000 n 0000032567 00000 n 0000032868 00000 n 0000027939 00000 n 0000028217 00000 n 0000024018 00000 n 0000024319 00000 n 0000034556 00000 n 0000034879 00000 n 0000026272 00000 n 0000026564 00000 n 0000034900 00000 n 0000035201 00000 n 0000030273 00000 n 0000030596 00000 n 0000026585 00000 n 0000026908 00000 n 0000088792 00000 n 0000047609 00000 n 0000048849 00000 n 0000085146 00000 n 0000068589 00000 n 0000069431 00000 n 0000071618 00000 n 0000072457 00000 n 0000070314 00000 n 0000071596 00000 n 0000045817 00000 n 0000046632 00000 n 0000040158 00000 n 0000041398 00000 n 0000059756 00000 n 0000060597 00000 n 0000060618 00000 n 0000062755 00000 n 0000057554 00000 n 0000058801 00000 n 0000063622 00000 n 0000066377 00000 n 0000043629 00000 n 0000044935 00000 n 0000062777 00000 n 0000063601 00000 n 0000044957 00000 n 0000045796 00000 n 0000072478 00000 n 0000073734 00000 n 0000048871 00000 n 0000050148 00000 n 0000076515 00000 n 0000077782 00000 n 0000053703 00000 n 0000054499 00000 n 0000046653 00000 n 0000047588 00000 n 0000067727 00000 n 0000068568 00000 n 0000037349 00000 n 0000038874 00000 n 0000056631 00000 n 0000057533 00000 n 0000069452 00000 n 0000070293 00000 n 0000075569 00000 n 0000076494 00000 n 0000051474 00000 n 0000052415 00000 n 0000035222 00000 n 0000036435 00000 n 0000041420 00000 n 0000042771 00000 n 0000042793 00000 n 0000043608 00000 n 0000058823 00000 n 0000059735 00000 n 0000036457 00000 n 0000037328 00000 n 0000050170 00000 n 0000051452 00000 n 0000077804 00000 n 0000079044 00000 n 0000052436 00000 n 0000053681 00000 n 0000055380 00000 n 0000056609 00000 n 0000073756 00000 n 0000074681 00000 n 0000074702 00000 n 0000075548 00000 n 0000054520 00000 n 0000055359 00000 n 0000066399 00000 n 0000067705 00000 n 0000038896 00000 n 0000040136 00000 n 0000079066 00000 n 0000085124 00000 n 0000085185 00000 n 0000085995 00000 n 0000086053 00000 n 0000088770 00000 n 0000088831 00000 n 0000089673 00000 n 0000089817 00000 n 0000089882 00000 n 0000100250 00000 n 0000100273 00000 n 0000100515 00000 n 0000101186 00000 n 0000107881 00000 n 0000107903 00000 n 0000108151 00000 n 0000108513 00000 n 0000108566 00000 n trailer << /Size 298 /Root 287 0 R /Info 1 0 R /ID [ <233605d85d57dc9549d112a8222a650d> <233605d85d57dc9549d112a8222a650d> ] >> startxref 108687 %%EOF 1 0 obj <> endobj xref 1 1 0000114809 00000 n trailer < <233605d85d57dc9549d112a8222a650d>] /Info 1 0 R /Prev 108687 /Root 287 0 R /Size 298>> startxref 114993 %%EOF openscad-2013.01+dfsg.orig/cgal.pri0000644000175000017500000000136012005335315016347 0ustar chrysnchrysncgal { DEFINES += ENABLE_CGAL # Optionally specify location of CGAL using the # CGALDIR env. variable CGAL_DIR = $$(CGALDIR) !isEmpty(CGAL_DIR) { QMAKE_INCDIR += $$CGAL_DIR/include win32: QMAKE_INCDIR += $$CGAL_DIR/auxiliary/gmp/include QMAKE_LIBDIR += $$CGAL_DIR/lib message("CGAL location: $$CGAL_DIR") } CONFIG(mingw-cross-env) { LIBS += -lgmp -lmpfr -lCGAL QMAKE_CXXFLAGS += -frounding-math } else { win32 { *-g++* { QMAKE_CXXFLAGS += -frounding-math } LIBS += $$CGAL_DIR/auxiliary/gmp/lib/libmpfr-4.lib -lCGAL-vc90-mt-s } else { LIBS += -lgmp -lmpfr -lCGAL QMAKE_CXXFLAGS += -frounding-math } } *clang* { QMAKE_CXXFLAGS -= -frounding-math } } openscad-2013.01+dfsg.orig/openscad.pro.user0000644000175000017500000007647011773712623020252 0ustar chrysnchrysn ProjectExplorer.Project.ActiveTarget 0 ProjectExplorer.Project.EditorSettings true false Cpp CppGlobal QmlJS QmlJSGlobal 2 System false 4 true 1 true 0 true 0 8 true 1 true true true false ProjectExplorer.Project.PluginSettings ProjectExplorer.Project.Target.0 Desktop Desktop Qt4ProjectManager.Target.DesktopTarget 1 0 0 INVALID qmake QtProjectManager.QMakeBuildStep false false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false OPENSCAD_LIBRARIES=$$PWD/../libraries/install MacPorts QT4 Release Qt4ProjectManager.Qt4BuildConfiguration 0 $$PWD/../openscad-build-desktop -1 true ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb qmake QtProjectManager.QMakeBuildStep false false -spec macx-g++ false Make Qt4ProjectManager.MakeStep false -j4 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false OPENSCAD_LIBRARIES=$$PWD/../libraries/install CCACHE_BASEDIR=$$PWD/.. PATH=/opt/local/libexec/ccache:/usr/bin:$QTDIR/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin EIGEN2DIR=$$PWD/../libraries/install/include/eigen2 Desktop Qt 4.7.4 for GCC (Qt SDK) Debug Qt4ProjectManager.Qt4BuildConfiguration 2 $$PWD 3 false INVALID qmake QtProjectManager.QMakeBuildStep false false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false 4.7.4 Debug Qt4ProjectManager.Qt4BuildConfiguration 2 $$PWD/../openscad-build-desktop -1 true INVALID qmake QtProjectManager.QMakeBuildStep false false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false 4.7.4 Release Qt4ProjectManager.Qt4BuildConfiguration 0 $$PWD/../openscad-build-desktop -1 true ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-macos-generic-mach_o-64bit./usr/bin/gdb qmake Clone of qmake QtProjectManager.QMakeBuildStep false false -spec macx-g++ false Make Clone of Make Qt4ProjectManager.MakeStep false 2 Build Clone of Build ProjectExplorer.BuildSteps.Build Make Clone of Make Qt4ProjectManager.MakeStep true clean 1 Clean Clone of Clean ProjectExplorer.BuildSteps.Clean 2 false OPENSCAD_LIBRARIES=$$PWD/../libraries/install Desktop Qt 4.7.4 for GCC (Qt SDK) Debug Desktop Qt 4.7.4 for GCC (Qt SDK) Qt4ProjectManager.Qt4BuildConfiguration 0 $$PWD/../openscad-release-desktop 3 true 5 0 Deploy ProjectExplorer.BuildSteps.Deploy 1 No deployment ProjectExplorer.DefaultDeployConfiguration 1 true true false false false false false false false false true true 0.01 0.01 10 10 true true 25 25 true true valgrind valgrind 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 openscad Qt4ProjectManager.Qt4RunConfiguration 2 openscad.pro false false 3768 true false false 1 ProjectExplorer.Project.TargetCount 1 ProjectExplorer.Project.Updater.EnvironmentId {b7a15081-01e1-47e4-b2e5-20f6404deb62} ProjectExplorer.Project.Updater.FileVersion 10 openscad-2013.01+dfsg.orig/setenv_mac-clang.sh0000644000175000017500000000064612076022154020477 0ustar chrysnchrysnexport OPENSCAD_LIBRARIES=$PWD/../libraries/install export DYLD_LIBRARY_PATH=$OPENSCAD_LIBRARIES/lib export QMAKESPEC=unsupported/macx-clang #export OPENCSGDIR=$PWD/../OpenCSG-1.3.0 #export CGALDIR=$PWD/../install/CGAL-3.6 #export QCODEEDITDIR=$PWD/../qcodeedit-2.2.3/install #export DYLD_LIBRARY_PATH=$OPENCSGDIR/lib:$QCODEEDITDIR/lib # ccache: export PATH=/opt/local/libexec/ccache:$PATH export CCACHE_BASEDIR=$PWD/.. openscad-2013.01+dfsg.orig/icons/0000755000175000017500000000000012110740367016044 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/icons/icon.png0000644000175000017500000024551411702450355017516 0ustar chrysnchrysnPNG  IHDR&iCCPiccxڕXT[> H EEW)AޥH HH ET@DDbADPA4)ox[﮷&w̜q )+kfP LR#nd߶ @ /5z"HƬn;b32;acq&+~v]2v=dDp#}U]HٙDq&U??  ᱌0"ewplZ('<'MvraHGv(V~{{Q[6YۿK7@ݛH wy!dyx CA2=͗d_1W$Ŀ-.[8PdZ\S\T"КӑGu;d7-)PQ :֬^8{S7N@ޠp yE-t]}1۩ͅ-ѽc밷Oo3Ză$@ `ä*kF>%-Kq~!c-Iג3SBSt3dre1fSd/]ɭsI|W^<(,* *ֽ{u4̤|ZJ*|<5ڡ7 , o}N]s{g[Soy@z(pYGYg#.OO{ʞ?|y[_|v`Ő۰e#v/9_| Ѳ1rߣ޷NLJN~Iki}qt~:`l9;k? r_]XbZJE+wYlJ͵ mXv`C I1IKXÞ&(_e a+6Qaև:$9/5)*%I^Z!DUiIE\F-^5QZ81m:a'Of^+/742ahtڒ֪6m O[| .uݟx4y{%y8K%2頉!oB_ o( ;g-C;qy\K|EBFbX[a\*wvdz{FQfro\;q~ޥKg./^y\[Z$S(Z\rԼL|}*+Rorn|_!Ii;蝹h-l o@!o;}Ǥn' = =6^x\Oa`pn(m˺W^o}?̸{ ΉɁeJP|q Yۯ_=˞\\x=_~F//U/gį=m鳣?=pA"i ¤Qy(.'31y3lbؽ8JS[ׂ{L`@pHwpHpQG1A1q&_~ Y|$Tfsr4r# x%~egjc+w5jyS_ԙ8]ݫznZiFG>_412e53+7O[ZKZ/ܳ={Z]}#S!Ιy墫ۈ{iOWOoO3gUҝ@AR!ҡòW"=)EDFŸǾ>g/@0؟Ԑj&ΐ&#-S(~]6&gP·ܫ.\&]i).)\*j*puqiJq9|uJt۪5Z+7_g6˲#wq--?i+Iz|#. ݊O{ ?{EžsL=e%в`c-)#:S@x޿@ߐs &^؂h!.HR (J&94@ {D 1XE 1JAMQRXQP t/ sGIܢ2*Z6ACAH󀖋6vNG!a1q)0G YY!(6sWqhp|ܗ̩˃k;?+W4ϹI DEĚƉKI,;\%r$@騩!9!y.EN%e %jf4|5#r گt#']_q)06o>in`mfoP8GuNppun/=*6^Ɨ&J&~N<5q8;O2[ͥ叮 TWU?8Y%]"=mRևGZ8δWnخ~3m8nJln%ocw@A Vq !}\%']ǙS  _$,bx@T-I`x!ü%'<*=(*)*'_PxKMJ[o655Ŵxwm:O2_236>ae:n.io9ec}Ӗtݦmu w &/6`q?-")+#+l1<#R\w,xIva阌YM9yy R4yVp^뫌0Nu64ު*6)׵֓ki ώԿSO}hyMh>O2Кv9Um9s?ºc'^ P4 Bp#$D yCPU_(>y.~(רf]?8L:~ a0fderdfce efbJ`?qSuۍGgNNl":EO9udxl\PTUUWQs?[uiS֙9iD_ 21e00=j;_wul΍gQHu8 <."8I$y=azJczE%p땁ܒ2 UꕚfBVn48 >m|X{7s Зw^>fm;ى6֦?L|>W2߲ʿR~/r,/Uܵrlno5}uqZںzo.+~OoondmߘdT؜:ugkn[pz;knӨ58=MO;O fu203FZ  S<|fFW{쨥 cnKk}Xϕm:xhg7 O_s=>{%d = \H?6Maf{c&#^~&{V]@zpb܀ z@h`#?`?V;gp3 L#ڵx F;Q0b[ ?<9Ok%PE w0J %@TQ ¢8J%PJpB\qvs=^]@NF|/ حw8p N&X?Svǝ%IIJ*@k+c bKGD뻥 pHYs  IDATxu'H Dqw%!N\ IH{RH--!HpYs֬6{{|>Rq'3{~r\.W[r\.9\.r p\.@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.A.r*x.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\.*s p\.U@r\.́r\.Wr\2r\e.r\.r9\F5=hŹթ.xf@F5n[|re-+O}O?i؆\r prg/nԮFp oL\pr%΁rT:'5zNmmapJ"+ k^ME56ͩ^_*.W@rׯZ䟩i@AͰm jldr9\ηW%B@P* 39e`팣 *\.~8mwqHRoN hfW_3Us pL ` Ѐ-Ms<dઈ9\zݟY>=U}WMu2pU\y_uy9T4 Z qiG/xTq\΁À];Ӊ zɎBu}#p@< `h<r Kzw9-0%L%G-tQG˕\+zެWV{BZnO6K%?=0p\_S<@x5-X6{`cs p~|.P ]P &X``h唣LX0L{WI@*/[zj + k4`)G-xԢq W@*yGLQW :Y4rMUS} FW3ұU29UP^@\Z738U,PmXF8J Wy@G瀲\3j &p ( FmrQ`j{,;71q`Ղrr pv x hzK',WmGNX*\w!^y]7AaA| ƂcS3,0"^+7@*koN @x}4@@P p!`ģ,=X=-ӧJ~ @VT\OoPR:l98 1A`k,7H0`cV)\6oUcyρU:сAPC/c7[>(3M]@6 &@ YP>uDǂr pMo)W)MJoi G> ~gCWݧy}TQ Q1XT"O~7 5p p ( VLp\DQ&XHׯꨛ YeЍrc9@_J$W! xPE耲 AyK 7Uc} ^ HRW/wşpA~} uwsriZ2! Yt$4+eɃx&]eXd/ ~KU{EAAs@^ہ`–8Bs0-M.LзUnQyHnȘ%zf09 bs p=<9H @p p ( L`xxqlߪ#G:kҥ@__ +WˁޮOe4  88  &4(Q0tĊM@XL9>Q`_C@ADChoq4`Dm8 (@kc@}=eB>Ѐy-JD Ua9)Lzh> v=@WP + 88(A@(N,i@ `jj~QtLЯS%b`(+@vx@Rȏ "( ;8X4P A79L0L/eވ]*{},)}\5+RH =4RH@0@~N Mû^qX @ Pr\~@@JGA?4+A 5uG/ 904AW}}:], ˪]cln*g% 4 (M<PԒ荃Hn?BM0,4`Wvå: :)@ lr pe*>vb(&^?z988@{q@&K& ,웠 ny}; h&p pem'fFOS/3Aq"*N 8>j1 hA_ j мGbS 6iCC(A0LzqC9%g\ Q PUC k1@G.,A_x<@!! };GG/4%PeXῆ;O١Iߧ4 &9!~c݁ `)T# <$.0MP$󅊖.Ci@IQA5,A< L{H0x}Hp0ઔ lun_(I!~( 2+,|`B4D ~sɃ&@Sn &8́ |xP῰;'\(PNAr `: s+[!lhotIhk/ *vކ3jg; &}K+fy7Ai X1(A3'>0𞕇tU$5t53{--yU,u(^/4"NJ98!Fې!ze0GA` ƧL0`H$&  !eg|~huT;5iTCgI(`́+cAL0@0 I=$ L 8@.>3AZ` SJi Fu p ( @ X` h X~86\tD cV  L5{C@pQ+g* |D9@@@Y r6xQjO#L0+܆ 8*   :M m|t?J;ⰁƚqGA@&p p (5ӏ+&b2d и~FN{e?+!]$ :-hG%57 ubA  0>Ø&AiCCLb @÷)@BQ@ *GAK Ca8w(W͕ rq4 0[S tc%AA/?A($Eh*PTp pGnn*G)gMR9884n1j#U|2n>@! |e!_uXwNa ( SM@PN{~d~!MR$Ήf* Ār p p mS}̣!2ODӋ!o5fblj`h/ YD4 @еnp2AXv@L( Wrn1m4V ¬P!AE56 A hPdOD ㉠1} F L0[4zBCh f |P AgA?DI\_5#M0К Pj`݌19$,]q&D20F`(AA[|LP8~7/~dsaF:*. m klS=ln4!@ PFp 5>$MpZ?: (s pemi(kx ~X k{qX j`/e~2ѡB&R+LM @ R*dor\Wx! o/2A!u( !WhiF{5A< ˟,2:kض@P1A5#&7Qa~ᖣQ7U d  nP \ 8`@6A(BSr p%CR5V @37x@=eY'5@PA@c14eoU S c AЗ땇u{BL Ap@pN!A۔ Z42W>H$0׸kћEl QXdSF[K`yS;.ž5艭RoztX4mA @ VO?C𛇨2Vh3@k{x 2L2A uB/@j{Zch h< ?qwֱL >W@6XL ಳ@x 8Ձ2H(P@8T ?K]25ԁր @ \]Tn΂ P)=>Ҵ)};`GU^YGk`-C@ 5h*j G CQCz)Nr9 0U k  Ҡ@~6/잋94 xYEj!6^uţ~&&X `쀬S@P @ pZqmKЉB^80>pC5+:vh1N/XN!3 | mLжDw V76k=ô42AV@ϟGA&,HtXY=: D@@2jMma ~4@&@|Q`(Î&FQ#{ -Ξ!3@)zy`.J"@@M@P"Z_dg{!A3A rذ   x0{mA{層2hr2hC -pL @Њ~l!u @p;Iy2AԋG/8}]_DSD~?&~u[x }EO0UYaA 8@A;/-6 @{~fj ع$[d5@&@ صhLD XԊ#A !@!ڷ@&@/BlsZ(8w|:fn Q1-H* Gt (f ?X]#h%*x,PN( $4FX ?,dA H@A]y9iP  (@ gq@@pR/Ís C4]1 Qt琏"@ LPu޵Լ=+LR.᫐\|4 @@Pr zY/5x`UЀ5~W9AlF29:X e7@`@~M- `?BZ},$5 `[ P|!-B !&4AdAlr`r4B  =@!ŎAE@pհqerA3?)`Q6nU(>+xhsMM…C~ _L C_ 1p.^9 ]l4:.AF p!Bg@СMR |Zxə; 8T>h<Hj-Xi4 k9g@QAa|E;u8HAiSqLg`Can1 ri^C4hB `(oW  eg }4@ 8(=}A|kjc AM{zSn `,dŀ7/Ω1XkvL(=rK@w 4 e. !g.5M 9"w`pC "  hD 6\0FCZ &@{Bвo0 [},!)%F?~t  OR?`l w lwclY+6+Q6  L(08H0Rҁ@e@X3h@}L 0n# ' l"ojzqώ^FԀAV"_ KiM,Xs<  h7p\;D @D 0@@& `4B@: 8Mn|*Фn`> owA]_i5{<^.54A`xH@?ygA& ΂U|ŀ^ @P&m3% P)2 MBҀ`!@pHf ;?HjL "p_#!A֠zk ?$6r (U?Kx@\O< %ԂpS?I?-$=Xdڡ o ":lO;)֚l`*/CV!j@Br7iL0n}#&+4!u F_D4 0o9Y3!@8偠iv@rLx L5SReߧ~9XiT#ZzlvX l-V j N.,vh )Z׀ Q i@!7$Z?n%8!M@44M@Ӌ o9ABA@' Tp x5{ sm4Pc (5}C2gA&on{ڦѭƜZrp/F,ߨS>OPL@dp޺04Z&X9 P!t;0Eu0eҊ#ye@wG@nv]!=$hp (Zb$1.dmyAAP8 gK -jYӃ['~˸ӼƟ!|Z?*M@,@' `]~GAdz6 ^J(0f{q ~O @n>A@&sC `XU!gڃL hi+n =o!>$08|S-!{!=@@̚5@;~P=Im&mZozDI^cOt&FDӣ)9x靡d P t w,A hhm!5M L B C! `hA&Pl483FA[88x hrILʁVjJ0{qBAx g j@}N?5@/ : p|㯘GYa8)mCI_2tLcAMN8;|GJ6[kbJܷKUA @5 S8 ajcSeTa=+=@0sd0D h6u 70 p1B@|kA-yp p (_}oUUF45d@G?_ `_/. ,&}F֋}(n 2:E @qpp &@ P-" -f [ RX<9##g CR &Ud:@o > 3 7@g͂ڧ>ch` 2dx(  d tvOL @(H 2dЀHl7GB`j0q!B@ t5@hE@ hsZkhA ?qC Ḱo=,Gߪ(AMs@44 KVBf5^@Q;g YËb${O@ `: pŀLf/n7ˏd+ pn1j@bn6b P4 !B !LԣaT+B\IC\zv\g @=q_B@p^[s0ȣR &p (D\mrA<$0gO:dE~Y."F#״1 7s~= :4h"XA3׀2ӷ«ȉ5yt' ! + hZ#fHda!E ud@& `4BF\ =v`C*2Jr*#ql !P#-3 l?A*&Hw/: (n ƜV]DxWB PJx7 | PRR@>=@&ؽҋM8nWvqȇ f1,l >O%B94h @  F 0΀VC_ pZc&8A$C+,7Nu (M%].-/) @e `b dA݋3 , &Hf wk xg6Tm^ ' dЀH8@U[0&b7h# LP/S7wlLD n0e0|x_z6FALgh;WX P%hhx@h+'y`iྕx:5@ ( nu _w:?X$ i@6l rt`h<"aF!Ε^B;@8@@P F402>' `"&Ch7 mtA^7o ]x@W\@`,(d~oدK΂~}/S {ϧ}:L*A =v wg &}ǂ nѤnA0 4@&@ pCF`HT~Bo "@ ڇ 8Z d>B0!A@L@!U&zPwgաB kˣ|<@7 |zOmA~y.?#^o~5Wjװ^RԏRY@GNzpe8NhFd9 P($ `+E ( VDAlF u|0U!M3hqF+=DAo Jcdȁ/;=W}ή'[󫁟g/2yY`>KE*AK{|uEP Й %Cgn Ko@!(@ `hBC pиb|i@⻏49 @04M @l"ኣԳl!,Y"\¤ x^/eM8atl݀ ()GP2@ &~oU"{]H}obS>sA @^L 6 F F\ Y&?Hph+p (r~}Y!Hj,>3|P ȤXQh8u?a|mw (1 %*Or A P -&;f{b9DnsJ &i 5]oX!ѡf @ O5W4 8ko~|)AiG䬀z&q!4 3AdX{< h@3X[i_A?=E($ `>\@kcM8`w@aDʉ+@J6i@?=A %ȒCa!4{ħqS8 tnۃ0L&jlHfA 땇U4 l[9s (3XfpL`A 2?+ ikYh|@ x\j;W\¤ MǤ\OY'VG&P(>! & ' C pK=DB’C7h# \ " jT"C@&4p~ A8M@tAmCzv*(At>= >g2@@NlЀnax_?^/ *&&Dx9g8N*A`8N(,NpU(D ` (p" Pd0J0D AF6@pWpT 8W'xKM CT"[ A8(MVo2{< |f $  B`@OF2ڽa <3 ˎ ]1}1K [{)A0YQ PžClA0J:)D(B4Mް^^x&? h@?K 0?$H%B dKJT gx<`(|&}u(a7 wȎ{/Ś౭5) &@ P u) &2HSLw{I\8A SBaR -C Wkz | EʁW`Vl穉pShW9\k7{ #}qMiҽ/4r&@ Aű&;Tk@ @ ;Wـ`݉B0_Mh|EQ P @!T[!sHHi@SJ `"&@^ܦY@\{H B @0s E64~@ )!AA`V ѭLD_ jck|bx:^|SAA) P ـ6#|`a!zL&P.>滏mH"aL [P8пv(vz[ .;թc=:z * K;:mH h@>I8=M@hX!jsAp@C_=$8 ,4p^tRa"@M*@:5 'WK|wJM6~}ѩD #e3 D&e@%Ce8BO)<'\.H㘲4;k=3alqBD Ҁ`EA @~@daú17\z(D ߦT"1 D4&ҁv" |+.98yD}ך16 WӅM4:*h?f'W 4Z$k e|h$w _3"H^.@ %'=#pe@gtB( O>&@ P9#d8@i'ܣ2ŗ*hA@Ck&B `5ZxخyO@Nū;oF˼=|Ѝ*(Bzh'~1fۀ6,7Ŏ)ba@ު\)I@ l32/*nL\h=b_%z;H]~2ݤƑ5ii eDaڂw/dc˳7JܱūR&'j@0+L l=Yzs  |Y^t(`#`c DƂM 5@ ,Wڋ`~*)`@" 8&oy=@yr|X Y_h`3V(`zgҘ;]E* X*0< /8 P^'ěO3(7zsesCbqB4?=A03_h>! @i# pvB ڵ8Ap^ 65(O0h`A^/wR /0߅S>$&I_ĽGP LtT0s~мm-g&<2D K~5RĂHo;O P<&Q@ 4a:"0hqB` q1Q" `+ zj# PdFc Ip@]uXkשU* P-@!hu&P>Л@-#m=w("y  diDJ6 "SdrN @LOd@qQ@iA0V5A ,>U/?KRM`R4r"CM4L@qxAsv@98螟L?…+>- *?ӾXceҫح*i@N,B{ $YH8i@!AxH#<[zM?@Ȗ03: 6ͭ)A #D`xiL l=拏I@@&iyP|L!9TM@hXaMψzv<T 6&F@JAX  O4ぴzqQ8B}qA@zg@ABa"x  <3o Ёuad&PN'ĖLZ8%(LtQo8dO*Aco=FǤ2M @]LӋ# Z @ o!5nQ"Ps Su9|< C%<$QjxHhs0t?@ L2w(֢6.Y(IG^͋=E`dV ,dݔb3 Q " (AM k@pu~ŤF{ W  +cna1-> vùŭ '64' P2pzH0{@_gX@8X :dǿ1.ܡ[bgfx MH2r@W J@73y( s&0%$p (@W'p P2f p  uSQHC&&YC%w v&f~6*5c3QǏ 4`8BUÇO%7%<&54:5R(r ȣ %Sqd4 @_*[4@&@  `_AµCaFpˀ@patF!D hFI] Og>B@8A{kojCwSr m57{l!/' by ts!%J8zf8'IB@,¬@qB"|H@7X!zt& ܻ.k@YDӸ⩑ 3EhAe4i@@ \wQWFz[ec ; AS(.F p@KϊڋK+ Vylߪ 4 f6T+ |kL U`F%Juw ͳMRf @o4\@6AAhm!S; x`cH%泄x)gGi@WXA /d $<& p0ӈL@{IF c 4R_XD@[{o 8H 0L%A`xH _79?3<+Bm@ty%#JL8BD2(NC gU1g lV'@9ãGq +Dk@Xy," `4 @ 8"c Ss!Aˆ x|x}@.W:Wr+'B9 jLa ׀ !MeǿÃiLoJ &Pjh;P!ı#@ hA!,,A79;B6 xxshpeX^}QQ &P+6< U jdoi; c\|,y|F!|ѹ1r#\<$C|k0OM|<.9 ~{H`O:vPJ }b6w Vi; O'. ,Ğ"|ϧt7t2OV / BP xlkMk@7=@&0*ƄF5Ab0UD!jҭ+ }hD!i@7A8V?Q8o@. 8`@ #zU)p m7_ πs5=$@`4y~^:@OtrpxPb4はC ,6AKԯl}AvA h s&Hˆb p:!Q@ WPඥad aD7UAd"srV1< \.'Cd (.>@A= C|1i4 6 !T 5ppX!y!]=LrD9Au" hF_J }ڥ  3忹Ł,.-ܯzby0CǝLA ˿B ő{ 6"f޵! ؾaV1:@7M;NM+2𾀛>S\~(k@ 2 P,WJ\Y$\ g3 A Qy|IQڵnA ɞb&H7V,ho?) `W 4NHx bp\DA So{Y,H'{X@G)w@?Xy` ( x~hA ($ `. .1Z'ьyM hHA0m0QAKAk[qI Á ŒBO s ~qSm |?<㯒2"Awf^G" 8I8@07x{-! Ŵ&@t&e^ṵ@wPpk@>N p (@p@& `/ KShԋ4@ Ť4A8"`"o%n"AcSQi 9ۿa ٗi@ W MayE > HoqvgҼ Ă :og#3!OT)Bq^R6iYMA\ ! w8:x RЙ`K&/ t wQ<xHҀhԀ43 @0..e&!n^yMU&@P(@~x#})G}H -0JP?P,?+@aY"(oŁ ) :/12?$xt9@w>v&W@n!L 0/&@ & Htͅpx ό+)F HcEbTup r Uu0h$(gȁ Ώ KhO9:<$0Q7$I7;U-򤁬"Gh z=t r |b%FJxS @L رM\Lmd@^.xm(%A5@ P Hd~i# +S߻p1նyA@c # 8?A  ? cU~ۿՁ/b -&|A =N!wGOwo^X;by~oaP,(|q @{@9rAR,H8{Œ@\lC0h{ֆ@@x`(ѹ+&E)A@e@}k@ /z_{8$' L@ \?@dc C8tE D;v @0y~+ 0u])>$HdW ~Bmث_X"N!; 8!p1x )[\ďA'S{\ߏ$(3#wø& ܾ, mBlS@ EQ &P^.@ 0CԀ`~  FHgm3AЁQ ' >d *A!qɱ?)O4WkCUF*5^}|8ЏkV8&xhsKܹҋ(39ҁ&Й6+A~@_@pVq@b@c6"5?:`(M[M2W[q=GAY Ά Tƀ`_/ ~s/6 iblx npb>8 =P~u‚@6A Pl0RŻ"/1}BCP z"].@ 4Q@iND /HQ A ;2j4qp2" hFatnq A*`#: ()R }{_Gcp_‡vXi?D!ǿV<. bl@Op\?i@}71<%`b ze Bp$ M``rGS:5Jȷ d w1 pxA0 h @&N hh7Mht1O>r@;WU  5{8m 8d9n=~+@bo(^4!-0^_6A;^6naqs[w Oo$>) Al ٵNR ވ[u^ABv,@ `/%8d / dg u (2iM`y,F cy0Atn~#oA #zUӷ!G? @@|6 XrHc eg9>@&nu#o_%|k37tto ؟bW ,o1xpz =0SV);lazQtBt ;0@ r4rpP@x E+azt<c+W $7; k0>lI g2/0^륻O2/,4["ك`0xh.e@,傩ۆʉ\A5@&g uJǮi4@&wI~ˀ>PSb|;!A+R oWF@0uY "~}JFDi@M?? l8n|V|r1A&HЁ@HZ{8»@Y l q Ăօ503ʃJ(/(5 3" g־ma\Z7 ApF@85 oznL+m9d/^M 12>: +go8`XJdC`bMEam&Ԁ|~rQ 0!|Szd!Zċdl[΂XXn5}bMsIH < k% @*lCn5A JB*A />|yG:L|QG' 8d-=(T2:|ecKRw} o sͷ x t l$";jy%@T SZ6Iqt@rl`~A2C|(tN @4jL@+t@&U|gmO )G' 8dEA? d\<$L Owq@^C*mME NE d’ ID{"Y4D0(Ax`t _(Ar7r6K%D}vk" `oD仑Hu^k/B@={}FAP>(=zLLS ј7m AMDYy/Jo@>(Z$Vm4kۖmgЙ@@`X[UrA8{W*fD 7A\isk5Z4caN 5521nL9A@Qp*|!8yHtԁ|Axnodzo8I,PmX4w N (@zQ)—:A닔 @; t&5"t%`꘠+͏&\@6LyPM+$@\h$?A& `Wx@x<Q$ 1 50AN!aN8=H)p BTAS/TA ,<0ˇReW߯8 5}rƓ\%obA0|09b>}|𿏋)' w t Й v @Bf`[0S\.м)@@P 87r~e5q L5 #(D!ei# hiC0[ 4,[D) k U /FlE~+_{}ǿŁR6smd*?.D  Yg ?m%dX@kg @-spQ tPyp4 ohhB 1Ab\?8>UdJ dBvz9d  ş[wU H@xR3UW9RMU^Pj'͛>Lrxn9PIA T!, L 'P g]k`t @P2@J}`x$t@yPy !ip   AtAzÌOoCQM@s tc%1kP>(@+@f6o 27|kcݣ~MB> ^/| 37ȁ" On+H|D1%n_:n =CF%5 ` /t PT8 t S&.r ph4750SGsLXuY )` [Ԁ6b !V 4 9_/&Tė\%el}P(C11՝|֚JC\&𐀿#^¹ F(  L$( rnʗ  A_. h\PhӁav\~2p ,pTSs e;!'sss|{-?Ѐ&mpxvSQ@%x@@iKÉwD(hJ1 - Lt P2¹2EM L"mF.=TqȅC4j@8=H-%{Bиi%{BGhC @"]< S1kđsTp BTdO G6 *o%('7oH&yNn!e(6PGd2rA<#)5h>!3ЀNk@iY@ &p8Kq0r u|\5@ `: 蟈H ``z`-Js2ݧOA|:sA;[CO RX+[E6O:&ab>l &0Ln!?.`~<^Z. #+{O'?'M"`fAV;Gp@ 2R p:'@\ +&P^.( @}! mЖ" `iAC W5]IWs`MUF@0sؑJA} I$ >3J?͏?`0|+/$IhyrbAz,&MvIDATx@ `D;xPo(98 m+P;CXgŚ` 9<A@`\2n.4|B HB|s 4m4@*A_@ApϢ3plӎ.i @O-@~?w*!F9sK@`6QDا}$I(ȴ@U7eza& Н,E(M` O&o+\i(h`J/N ̫q Ad t 9: aDAHzB p4@&0` c,i@o1 D2]y~g ZA?hcUx,tTN8/E?|n,؛`_ܫ_{}ˏýAB؛i&J*h R<{O%)  ?B UӼ8t&YM[5 p@9ذXw@yz=!8X ׀4@@?Kb@ @ @ޞC_=;.48îAiQs!8Ӄc!' _fh^7,M ͟Z$#*6AqՅgz "{ \T^U0_]0/%Jz*U:.puB y?H>B(꽊;2&Hm‚cAsI@,<Ѐf 8D2t 2mFV ׀xjHsH+ӈ?!  4!] `c-xTP@րws H9 x..7I@acOՁӸ'ʷ 4 ]"{&a4Uެn*J{{a PV RA薚nZ_@`Ӝ 9HHd  a\ݯ6M'T>2p4A /yJP!} p,\d YA@`݌K4@NElMA 8:S >֜@3_42=K(> +-%(*v1AH޶[]RA >~T,o 57É}|ـMł`V,7Q@g)C:4&@ 8Pzhʞ4oG4 9<4@ = L A?2bQH·2缩D? >$A~1q>>ub_ 0 H4E@^|f ySmKz$uƖ 5J !EJ(AmdzJ@xMRR2VY(v\eDA #2Hd~i@  (@@8PP ]F)(TXW" ȿ(Ǟ^%rnv67 W b7( YD "w 3`т@iJĂm5!yU>Cn_.r%@6҉ L0[uPU H&f ~ $L 8|0&lD9 yk\wq)5@ DhE 8JYN&x_.\4RogUs~\7T~.(5@7 W boZVd><6@ 仅Jf r=s A]e$ 4:)`0"gPS, PJ&0\.N6 mqhAN hB 5py j@ l4_|L@qv(I){@!񿦃 d$~H3ݗ>v_]@ۃy1Ԏ'o zbVuOýAŁO]JUME &|V +d@Y9lॻ")na + 5 غ t=VN9 439'M0f֣a^q ㎪^iL `\h @jA!hn] h,AIP ; yp2,gŻ.{ae@vI-`{ǿA5ByR"bm*G+5KmA~8FEA?S X?ziQ 8}o," S4nG67ˇST ,Ps0vn*ݦ"n{Xg;?w8`6 08נ A؀`jUex S@6frr6M>= 6@Сi(k a2i" @Ηق`5yP`IhX 󾅐A6A+ !AP a;_ _PC9X]% H?M x=녙\YT &f eJ@ `l5JC <0&'@31%t7 0ӫmQʈ/4Yox8!i4 @x_O4;?!}=!45A0VQGMAPp 2b > (s>bÐAh]%P-"{2^Hgt~? ;k{ ,A/&PP:'@Ԝ @0i`Jv MLW@y vPm8P@h35Ayp50G}pGJ/$( @ [4)>$ dBkΡ_uNǿaaq l61R .cbaVG4xAB}RSr L\p|a "@peN7@87@&8.@U mCggi!iL \1 W P4=!5Z 1҉GztPs ȴ=~G)|GD 2QHP'~ w6 t @ ތ?AlE7P\ r UJĂ Sd A0&B rABNNj{| 83v!@y5w tə!b A+ @lGܜ:lR!`%A5@'=|~WdۗwSK.?kYPǿy!&yq {i@^"O L@Y2F}:cüI5@i{E X;USC L@ &x0M`Y@qtPx0 |}Ap4C+-H綉h@ 4 g$b7Ms?>؁ @  -OR@lQۻ̲W)~/d&{R؇fӃp@[˗k-DNĂD ?"$g4p>0s @@A3\+4ߤO8HkL\e|YY҅C~!=E 0@ J,~7ϭ^D |m; @o?Bp<틗HG 0l)48(KJ Mb dGOBDW E:^rqQvApjJplVuL@2dp$ %)A \.L@2qBz<쬣mauZVNj\U0V@48zv 4H<} |VLQ 4`A@=ڮl@Pp} )^3$|O-|2$+zАpP@(L`yY 8@C ABi`^,O> 49 Ѐ`hD* t7 )@y!kAm/;kuA ʒܸ2]8gp?4p9_u!<(˄ 0l46k$@4 2Hi%<xXA `ҠиT rn` @7 ˎ|n)A,@,AuIp4 MP:TA3L4`%!S@@4j ;O{@0/v?@iQk~Z*‚DSt 0d1W рz?Oٸ^&ÃodRz䖚r= P{%|g%  t/4A*rO@dDT@w -bMY@&  t,^F @0o(58elI)@R AAj`_j#~d8"&x߸pL`7Q~h=xӇ̇s>|89xv֒{bNA.@pR1Vf R86@ L0m7Fր<@`YCSm\:ϩ ju1aF't0}@?V^(`Qۿ#'>t/ 遶??y=4@ ۨAR@IXˈ 7 cg ,_ (ӰY@>(6yԁ9꽊 %6@^U k>C P:,)`:9[]5A)o, 2| oQyy __L7$4? Yk  |ǯ(XE|r<` JX..[_E & @ǁ(@ ,@(`6A,@@& ~P onS _ <<٢y-) Y`3VHyq a X9JªTmAWBIB}dAb!Ma?N.sX0Gat PP`DЁ'/|t@l(mY>uGY?X'(D  p iMNڋ%xaݮ uMB 偠( =m>A>B5(.)(:G\ "C4@ .np03A &)P>A@^{rI \ fw|V@B ON\ 0N)@ | Hf@j`#i؉s# ( dQ^^ow/j6A@A1Ly$ Scv4(@šBBh*F X-Vu+x-._Ϗ 6wd P4 6 5``d&~~z[2_5M} 4fi`KM2 u@jA@?>FA?_|N*uabi?-Ga/n>O*i ! (\à!aܐx_Z_ PATt@ dx@wqrl7@*( 0 `pDJM% uDa-YAF Bg5RR~U!ht1x(9devw!/ )Hz`8{2 G)ஶ_@}!5hO@fzeN_Y]#T+`RـF/d p(5<<`wr/}Kw=IvEO%r X9(% rOtdȧR@QAt5ƦC'40w]NQ X >˽R gpzvh I (o*(ڀx:@0=zn/nZq d`唣/~P`d*7|;W\w8E 3vۚIopA;A I WE] ȳm(# T)P o[4ALNX)}&yaX=h rtD O A o c}mE,5HzvxrPk..cB  }?9s?؉ ' A`exsHJ5}Vsxx%ۖLPl-)@Om(\aY !KiIJ޿9I. [n:wEA*]]N0b B q3R/bA0_UN 2T)A˂,z_{h%玃` @N5PA`Ol W{Co J#mJS/~Fh/4-%zrm%(|#| /w ǃlA'Ӂ@hKMel<K '|Pt B)Bn<Ά@ "T AQA @~B @~V[ ?|fe?7!R@ J S@&1sBA<-,A@5 [ր 읧" DR^(xzg-9YnOS]zq؃A9 ht&SsQ~K3-MƺOj6 rq@fjӁ`@Νğ5rMQ (w x9 ؀ +7 KJdB˹J.ՀPRY>Pj' Kx#!PB P tӁ(@ XVX!]+ p2 ,)r (}tGA1, %I^9Y/|P7W pg~KAEφe à (+ n7@X_ag@F_2Y `4 o@MD  X2S( Uy$-}XP2AtsMw\nصŖ gxZu)W J @3 ͑2Z6ͩ4Xp2Ahb!}P<[A(0i , НC3y7?a׼Q (q$@6AwGrRRFh3W  ,@@%/m|@& Y`O@=AǶ֔( A*cN:8R@kt5APX `,[,⫙1}S iA_d }1{7 W<tӣ}w )iiP(@ *5}H@wx4j ; ]dA@` ]f( !`\03 4A) ,P>*02R  X>9)DK l e+_@# `nfHoXPjŵ?1`l <8iQ `@yo8.+@tc hC (R`P) @*`9W ^[lx@_Xe  ^{܋{ш 3@\Y^rCA P`Mq hg 3 (r  3 2|@ # @n,:WMy ˻p PI>}r9d+`3eHVlYm)|TL  [@r7ZrnL^`gxcTK@@(4, }: P@ \A '@}bJ<ܻ4((f ( | Aݩ@ÚCe3W f"}ܩAXPZ Й%@-W^fh9 n4_)Ô O]Q`؉~ AP 3be֟@&@ų [m^p PsNP XJ TE<4RJ@o?y2t 'ʽv &'t&"n_\R]\ u @ &n n!և,(9D$+/=}`qAa)cC/J3 dol 6 DRh=] xÃ*]{,oJEYA&ۍf<5`0w@,UAdA죂B,A?h-=AP.)o\ wLMXP2Po$z \ GN0@f<<-ŞԞ)fEo8NNp@~@ .) Ƅ2nA4\+k@op)=z̑kĚh j`#] (å`;ZjA(lH3x(ݶ 3xJaaA6 ! xͨ3d4]((t&ϭ.Z3E 2$ (=uQІXQ`gAo =K,i~IB,AP.)?>7|vYC\R`PPek6 =v -"J 'No($ @ A z0 رӒAxB$|sd  L[=2u#$ d"KP(!%$k@கQ)PRAiHʩZK OڳEcZK @ 6), RH7eրPzx;t2@p@ YP Й Zdc, Й3 )j! (AP,}/ 4p˼ExAPO4zfil3 `iO9R7 Ă*^'()^,eL l4d VrRLX/zHJᣛ` ,  h @[ oq"!4ެP* ܿҀa=wǩ xSWLLA( z^ *Eܶ[֐Zd`OA <``qsL!)+ vΚCz&(Ԁ!ۗ.1= P4 Ap  &):+Ir9ܝ+ xׂr KݹB|+L@e@l2`YqM,R@0Gy8X3;*dp `so\S`N%2>};q>hӁ)A vY@gf?HЁ@c[k=Y|5(tK o2:v @bAE &3t&(Nȏ d* (G HR&0' @uP6BЁ@+Lp 0`l/E  ?RA@)A0%tu @c&40y)My`Gv_-/*uAK^y샛*^fnRZ@н5H0D dw&K;堡veJ ij+ʭE & 3P1(MPr 86A_# Q뵄` wkP P{GM ?<SkED M ,,YC,6@g%t&Eɥ@o\TFU k &Nn1ejP , @P4=(A,lQz@H*@h% bA -iҁۊ@vYnn7~xWŒ,A..$j &BRdXP dO#[j3ہ l(@n-Y {˹i-Bwo;R@XL2Pj@_QhbN{NxeoAEL X5MzkQhW ӁA5֖@дsu6$D U};T$ %-퀲]]R3d=[M / ފ.'L ym1 1&xE3W(AaCͺ Ӳ#P,)!t,(4Xhu9T 3h@ w/НL;òK6 vז8vo9 2PjAfgqz '= xQ7hZB `ra,-_ye2@րEq HlrA `r%e+\N@ Й# vk=L ڽ2Vp ̙}:] @:GAo <A-=Ɓbiz|~zki-2Ю g(΁88 $@@h7rL@ Dd *X[`GQ@`:9^٢B̒i?*:ݫ< pp֞ @AJ:ܱ꬝+τ"pܾ,Xp;~ %(S@Faz P9wR<<ײA8^>L@ A@ł3 ٥j@I^xy;MP,V+<Ձ Bhb4cWعVm_vj"Xu&j"\si@6ugܶlL0`禳S(Qgt)6^{B@Nw5UP@JQ؃ C( P`XʃV* @+ÒRCd΂b;X ر8޵>с"i@- POlhuIMq&( ر,Ҁ̂ O, vo4 9^أ.w Ѝ"6+R,P,5+7x W-(!9(`@opOhR/{ Hʂ"?Xp˼(8T<<@L(@e0MuQ{Y}y`2 v Xql_wD8(2!HXI l/w/ZTA @=r@c@?Mǿ\<,5-)`H(Re탖 h1'n-' DiaC2AV(0k=)m[@`mK;` n]q&V_8ל &;'@FOI7{RxI#[jB mlF)`6-R%zaJк00VXAgձ?[j:T @ @` PШN~)Yeq{L@,ضD ,ض @ gB΂mkĶXp뺳0x䙃@ ۊ ! $g: (۱XG%L@0ori`|0d}¼QZk3 x`BO/;@-5@@ `c-f `E 6/h&@ME غL@ `3!'ˈ@(CPy9Ak8߳@A,(@PAȜO,hE sAH( 8@6ym1]`h `lY}j" %8 M]vA A`|5@Z{zrAh,P@Ҁ[ם,(-}B,&(7o?޿,mܮ ]t (vN#d<݆b9ȎBï:u춐lۂ(΂[tdlY&@lYy%(@ &=SF2$k78 P.& 4 XP@%:"AfX14 (ؾ gYy`1w8@@zk0=l FP+Z `΂sڀ(nM w8 6<& l^}<(Lp0=P/>T9֚^![2!oЊ֐M#)@ A*쑑5L0OLP@րEu@6 ZhAځ 5)u3 j  6"pl\5@6 6Ii@6 `ÔD JhO1lUAp R)t& 3(& A9m΁V>y1d ,QAvpܿGt pA# `#]F^SZ35 "p_4@ql&`S4HJrʐaRAvAj @ E2H  ΊhQ4@eȂ=X s屐AsT(tQ`էBkf)MlX܎Y?M%ড়2d4' %bޠ/$6ERSiĂL@Y#ӈL &28L8)0fBrO%t& rt5q%-A{xNFjӉg&&`v7`v`7` A|%17!()^T, ]{,66ήL  1; [EVYC]ϗB =*(Ȃ; }\{NS+N `LE&,X3;L0ym! ۢ(Z_Ϥ@ `@KWD,@==BɃˎQ}Q e I/(:BN  HCսr) h 'XOA@Ҁ q*(A(0>а.|&`0紁2 Y88Tf_7{kÞ/HH y`4J8,`VJ0CKF P%kC ]?)Ca^0LYK( P5*sű8U趥(ua e̫,4<@ =vc|P@yrPbA pAEKO.B Pddk ,X0%hLxi@fPM$`% C(y`R`8LA  $ah/55P(p7r%%t5̂{{f/,DC7,?Y0o| @ &g &X<5%`֔^ #ԔcA<Vld1E* ł,@ର*[FhuiC, B&?% jOø  gq _g@ UIwC @XPpdk_=_ΰטJSJ N LQ@4( (^Lt֨f@`- 7`VX`i@`Ô t 0HʝӁ@H9l CX@0U)J`&(,Z_H;f/8Nu004uL@, B,;%F& ̛ B,XM`9@{X-5 x 3ܱ; %E\pL)XOп8x@J:{ .'LJ Ck:8D!מ8A 3S 8 @'d̙54Q2 _׿smaR8)@ 8 d̂Yd̚4@ ,;M@, a  wliwzu@JPP,]O0s_ H`ZjA9C]pWcXP^ ջ- _. !@P^x(-n\ ,1:L@,}b J0-!(Ci@. ].nweziG,E؀`l߰[j,`ĠI؍Dxhg3 *;>W9EQ)s%d175߯a fdaMl ,>hL0sb A `v4n~ >Ё@9T عDݶ5m[]ٺG+Ïe²  H !X @&0HQAy @ TQx(@-PCph,:) LB,9%L0i@%|0Cݟ+!t(,H n+L&VS1C8bYf Gk0@ >MU@1eh1r΂`X9#T(m{wU5 @~0飛Iؒ/w&(OۃwA&+N `c:- (@ѣ!ܳ@0`c4ߨhB &?) R (2f,@&H\+DY;P2 S]nʩt_Y @ݾ"@0ix0_d-w0$j"W-RSP{ `x @ &; Z h@mQ(/+Ă5Ы+ͦشM -Mlg  xo_)MP(=swV d9t D&  UoXЈ( A G o &=1 V5pSSAO&@ea@" 1hA 0'P5s>@58"|_1ż -AX)))] ذA'xAPMpzEK(@ѣ7ܽ.&Y?M `FL0Gd4ISҘCƠ!a@@ m+JǿhL j@MAN5ɭM*,d ᣂbl+f Z*- P;>םQ us !6g]46AkOdIs Ȕ6ϭḳ){u'*vW R yYc$ (!Z:Q=7Ƃ"yP84(`p@ң9 `=:L ZgP7`؀ 44W=Aз[mH  M /dݔn*J U)G# WMYj^34sǷb X83NF"b@qh q [RD&(- zw<5t:,|Sch3_:ݯ?J';hlJEY]X@MԀ~7T01i`@o-f9ZH`$_)0 B \xzBEhdAEp@`Iu퀁ЄK"' !о!>=BJH q xb@AݾL=W`bRGPI Cf -F 5ADk`ͬXxwLo% r@H=@@`[S*Q z\u2=*Ծ7CT~ zՅ 9Ѐ>+OwRR@`v@tP P⠡E5nM t˼6Sb56g8RG@& 0>ER@L"H[z@xiQ`!YW4nNh6!QJYyT9 @遠^S+i P].=+Oם2bp؀`MA.t Ӏ74%S@0V5,bkk䣔-Pn16{đa=* )5h`Ȧ1ͽOhhɭR @ `gJ5 8mx*E?)A`0AYPro@E~_@`A1S*i @y!Fn$`pOJi@F &0@@* d bA@e@b@@0Aj`ѤV|,R`֫P>nC `,h%8(P4@%eAQ=*(D'P}_@`?&j4t ү>M< @p'?Ahja"xE(P`bc=J $M6z_{8:Y͢c"0f@(I-jA{>$h| oP+i : ӽh@ם @p'0&(~o0 .u"ݔ܂OIQăm/4 81P# ƵJ(y4`6mISغV_wؾ˒5%5Ax ARD)ApC6PoOO:tKi@ <4 !\\& Xq ,PtǷHK&80!ỌeA{4 عģ ܳ{לssX{}tAd p MAIP*E  ԯu յ6h@מ)A= 2 A8Vh(ӎ^dh\5eICJ | !R@xR+`T?_S*j`[uZaP`\)xpݹni?̱ Go;ρ C~`7Ё\w2Aˏ8t& ,0!^z9to9d'l6&QǵJi`DO夁>06^>-C) `v v-?ڳBA[;LAAp,08 s pzgj@zԁt Q2(`Wq54rP-T$`un@`0Az ["3i= `yc[P40駯Ji`6f8Wvm @;v8 RPS8D/p HƖ ((0%ۧg]Pګ šN H<)h`gW6)  I::2Ak"ٌ4@ X4%jAlj`Q| `@ sn@ A x! @-QPUgMQAqس OhƀƥE% Ё[gOJ\wׄd^  L`F# iK4v~zY!$ @ ) @0_KSavhvP`GEmkٙP@^{u@i  2?X8d RUB@пO~7S~㩠%ӀW\Z |{0 AY@ YPp`A (⾚tP`(yz53ZG(0;:=jVRe^Xu L}ǃ+ J=*Q81uJ%AA!% +/ 4; 3(8 p $A޲""K'5bi@ؔ槮,sKQs4 eAI ) ~ORO") U*ۣNnA:VRkOt @pM~t t@ `Ӝ b-+A0-!  L 4@ X=5j`]JP `.Qsٙw`E@֜0l@X=AIP5IPSw:Q'C:\u@{u@*3hAY2pl5])C34cE;t!@1-PPC ,|j `@,By۶=j`xb)pʳYQuӟ7ٸ8dUPw:%:p A+O (ApɅAܹ"R <Օ, ,(8bAA\B2P`x/P v:Q` 2j`(ݶ A;Vs+9 Tl,(i qB܂h)@ (~  sSݛzU.vt\}h@ K/ A hG3@n E8s%] ,hAlij`QPP(ca(v/4p׊N>qA ,p r7 POu@{SBtTЀ@LeAp9@@2Jy:o@u!PPcTL 3xaH 54ȣ6[l lÃ@ n[;x@JT (  ^78dB9CBOgS[WO:\DH &s4e$Ҁq@X,@,04ehy}ccwb<+LkX? j`sJ[@ @;Xh`q ΂Rn{5= xE)'>!ѽvnu ړ %.P@((Jpp L(Y )J> 50x`Vj`EJP `f8۽gܹԣgFo>UNYPG8A>NiQ@# Q's Ӏ_wA@&!%.5 L*}Q틃b ̂@`f{aBnK 0X=ˣ6^64?Bxv.]KسL(psFm   gʂ:'=$(~ `7+f pUg::tt ןUWq  ΪŃ[,3nX*b 9.",N=X>}FUm#@BDI#M si&hA")rHDFh$cG6w׽onߧ]]izwoLU޻)5pkBwlMh`'({ k(7>gAgg5i L֖QV8Jf‚`w  \z rY Sݲb)pt5pfOw%4pNAw?lࡽc(AO2uUl'`0 2$"K+:wn--+< lQ3A0~9 =}' uQPL@gA 0Y sYk:" ܻ}EQ:4HAi q j& X䁠ZdAcsECS3j(+&5`p;w}WtA` d +;N&Tnp Qc P5pNkBAgoŬȂ LAdc<EDY)@yC̭VA& 4ͮ &+ p&ƍ;bܷ74 ́VܚvpNv+wb{[K!5j:6pwƟ vxxph>A'{x}ף( j`(eAsЀ iڙ)+&MHYA0~9fT0L & , u #Xwo({?쿘BjXPᆟӆyL`vϪaEY4)3J ! p\&8"$M@eAJ)ynpQv{aH8;GSb@Q੃{kxAKDٛU}xHP,8"*@Q5 C(+L4``$ƟC@13 켮h@r逌Ap|ˈgn1=<0(s h>* x (C⢀,jh9U)+ " XA01' ` PǭS 8n7l=Cx$^& ) bn*f%# () \B@M ( ::UuV[AP\NYA0Vh SN@( @@]CZ? r <\L5 #9jbvAw>{0qKv g DYj 3 5n:;`0 >Q`΂  -VLk ) / ;;n$2 Xo޾5g, p1A Ev"  ؾD; @PP n^w15 ps hj XA0c`ҀD))+&O0fN;C9jsڠd,@74@f>\ PxtϘ˶^ 5Э@MtpC< YQA(0~E$*] XA0u SL85Ils@5vP )C\՗k E7ix<X(pl(R,=OASAcC9eQ@0,x g  @iykڹAQĹI ۣɂ/ޮ uAU,FNyv%eIdA, DמN,KYNrc{r! J(poR>*},fP@6AsPN h92AT3 3tA`9~: X>j-9yA͸dSFekW@GE!,G  -D\A( 5`R`ߢ hi2AR?5nk;\fPWƕLAUZY+xsoB]KgEA;vF˯6`vk%i ր~\7DAKJAa!A`e֚T?AA(WoR{ # vv|ōxG>dQ ֶ*Ҁ VRBs L$RA0NPٻPvN}7^p  A`g' Xv98LG5K@`p{TPoxKM DEA (`j WX*mM rib P44׆kNSSY: ԯ,' 6d3_Ͳkvk]! AQwdiu)@ݹkd)pR۪H&H &Yf0AuePAf$ 7ʂcլ+<@w=,"  Lѧ,j1:ګH&gW47ULW4 <hyo$l\WM " p^L0^h@ O `Ay ^B4&4 P7gN5iAGk%iA{" DJ 1 6-$#Vh & PSsQ;"2pi`.<= 7_^BT:: DO[+MtTR&:+ &]).Pق!A 3pi@f,e`x1z~W].{p&0AQu|ϨhR@AgG5iAJJS&Lpm^ޟYvQ_dA6 0e | ElAM£{{@PrER@6wN5i\RB\T0xm f<8( 0[>ޕsN -$)CMS{Y 98 2>AHxYPd 2A(En8ߧ4m" p)͙UӷLJAֻf .ו hhάfa/I6jI\.k;xxYjQA4)`ޜjZ(@ZIm 0h@.4?MDŽK|@P_IC5 ˒%! |0An*7:J0A0 Ȁ> f(!+Tf ;@b~_kʂto* 9 Y@@tM& yTP^`L HmsYR@&قA L1 o=*c 4dVE"j)@.+ai`rpΩ&T!>Ȁ`%=F?ɚkeA_߭O3,U) P-7;RIDAT<(}%v^JeL.<ӄB> W^G- X(S;n%(vYAZ,4x @6\a)@Y( 2fi?7R0$]a)tu穖rYgMzYs 5s0W ;^ L BZA -tQ @AQڽ}{FPR@49u8 \-m; PC\ It7{7,UQWEC N@aAxRE-z1dmPKB4qaL7)5 @ҢqTqYRԀIj 'W@N,H &dN S&^Ur j!ApD@,S ( N Q@P@X3€f ^.RYA  9ev|O/ƜeCd[0@5F* ! ց ̫,8$rB;,)`jwh*?[/&ɂ M“F@twiͪB)G i(T{W\S *Sh[&GDD[p&TXM a& rj V#oKu10e(K>]C ~ v(Y莣c5 =!/2>L0< & & | p] y+Abid*\ ȟ d,W,(\l6h : 0ANLЕ (I UDƒ^ Zx, 4@ W 5Q ;>I !YP aW@Q (vuVC/m }8c"󢁴@%CPaMS{ 6$28:sSDDP ӆI@3A] [Y!N {F]pW&84(A 4  wTHt$DwA`@=U_I"A +88!Ϊj)k@`.{6pa4`,MePA rKj1TXA>ƂtA/0RZ PY[;v0ȋ~IDn3$M7ٌ+6rA)0A(ƛ{ J;"(YZ|AM؋FKY@=OIh,PM% 2x`A-'rQL+@E> 5LR FQ f & 9ƒ?( ³ )YPD 4P|S@V< ArP^第@7ħR@A $2;h@  \ KLs\T(pK* ܖ6﵀$4aG& HF#p`Z ;XZKaAWA븂hA VPE 0Amk+]T€$h|΂mQBzqGغ&(G@EE@P GS WsKaI, 05Y1 !E K&zDp\A׿AMhȊ`Z { h RN OL%AG hmR x`͸fSFl3^.`ku~ā/i=(5GSor@j܂) m-L pV Xo$*. p,pLzQ1`8#ȲxƀxJq`d`AȒ?(&ȕ &Ȟ9*ykG 'Xjp 0Yꩥr@eA ַ kc #9nB̘WPo>oCEYDAM rE 83 hx) Aa@@c2lA1^pDkx^J*FvoPp Ѥ=\' TLe JD_AG&ZC HDt) 0pd=mpA*)C@L@\cNi &Q dQ@]jC0ֶPz쮉CS} j)A0{F/&a@!yF /)0c@j@f|OԪ×&(7xU؋4` { pG.3D!A@5Nd7ɂ䂧!AM5b|9{ϒ.j8 Y :]ӽx"[O0@H,a@o?0G1 rZşVY 65s4` !Q5C_֢Ҭ@75 Y$vH(X(@~،?=9%PD@.<:&X.AZ<@ @` ȕ8"#L@  laS2d |T@Ï_Y@) >lh)O S8hj]@ S/I#{ W!'X~!Ng`Xۥ*P5& ~󒠀Kh+JyjMgm'9{ IxƼcX W %X| qV Pwjz"Bxik!r2/٧t] LByG(/ k "\Rg4G 5y" N_{| 0YfL1 ~d}dm~[ {|\AaAݥ"LVL;R.)@F7u^;@[Or󠛐 Jhy, 0Ym\GSC(  u+ G o^$ &Mp,aGIDrt)5u$xbws,n pI I& z ӄc:i:[PZG_x ـ@.`G j ,o z(4Э*n@@& x,wra)|E~ aokhp4Rcɂ4ȿ<ֿAOq\7L`q)f&9 ~T Y׻ ;*" |^=`A`m7_"WOA v+yF[}K|`?N e Y 0A~R w*+&€`^CE-\ j% Q?߮;vJ0A"~T@?6Z^30kGw.Pm7] € ] c}ږI5N @`;hRK"@mli(w K:`F`Az f@` PO e^.Vh1 6GHV PYG] XG @ͪjբԌU* QA,La| tJ0A^-ʩ.V 6ޓu}~|0A`L@4B9=(@9+9hHkI)z ,WA ѣ{4@~?^UD7(l75x&b򀥓\3M<Ե3VՕu͍DA; gSyT_P fL FR@>RHkTI _֏ xTqټAr^4@/W+)n]SS\=mUSEdje͠3-Օ]?k0U D\g~8JA r"-W|뀴@` d р." +Z;*$ JcO.ٳL(-A>?BTr /ݻ|@6郮6hA2eՉg ^0(|7kkrO|ȩOŃ~~l N>Oc5D*K05zZs h )C TƷ a~Z& RLoP+k P+f)#PjV5Ň _N(8D@Xe^P]U~ژ 젔 ӎJ0!mK{X́iTA@˿ ,WƩ n\a 5B ׯ][WF&XU[솙& n}ڤͭv <.:8&\[Yڮ7뇼̛˿&J~VXrv+R$>0z*! dS{q5;v~su\_[O%FqlZ֟2$0 Q')7*Hz )@1~/Yw1iu?yS@ !u ^[σ)q'B<ٕ[*(mUԞ9꽝V7 G ~8`/? uٶ<{kh7қ.O 粅.Abjҝ2:hhy.^:֕v^wzd7< rݫDol! rF߽xq`M^D, $66Wlh[ * H:D}sIC)- ݲ# =[쾱oEXEWzr +]@,pH9? 0 `ʐ [\cV-+fR`5-+sEg ` ~L9SW/V0X_U7\VsH pAj}ہ "u,4XA(~6~ʣE>}_ީ P b0A@&Qr[3U`[[U,D]DwwT =9\^&%{+ebc/MM.m4T4 \':L;eQS2ILRG|)@i/߭GxMҨ d 0k7s{V^zgx@kQ]=%^;yjߤ?rF?X@{oB\g3 YE0Ƅ(ݜ+o#{-4 2d4ti|ضKbܺ,Dgs=G~#7=vx#{v;GwQ9{q?})@1x_ީ&^ 1 Ң^{V+ ry)pdyu@݁/~ m!r[ A9 m08 k@- ̡֙VxC&2m\cH6{o A*XNRb s·(Ӻ#b0AeF_o,vxs/ysGOo?z_yxA/Y Ԧ XOM0;(-| XQʁB21O6Sh:fZa @xB 5Q{$`Q\ܜXCZf}04]zyp@:Lf S X Tm[ҒP5IH dN%x너O|?J@iE1r@Uu7~ ='4O~H8`lBB|~ Y`fl~]`[  '^j.9Y@@!sVk \@K2M!9v2 IG T ^KR"p+Z~,(1|% Yr@P=w^Ăq=iU1c xud7 z M܂xb?ZXf-/c.r}]6MJh278(g Wj~k)AY47b7R) 2v}e?& |yG|Bv *20,"F,y&aȅ" ď/Nx0*i_T]S~'\k${m0ꄀ̆ Zs08@˿mʐMsjAC(!F];ϖI~p}El1 5%P]&@1 q& j)A`)uSj \c[E8UtvQ% xȣ_^(6QP+b\`  ]8f\OoTi'%^40 mz_ScpS; >d,kc-cAz/ ?vԥA|U.(Ԙ bH,i<c6An` e s%cl@0- KQ̵/ 7B[jME@T+"0 8LΜ2P5` iYC;@&o.~Q=9,(8ksAr'J ͭ,tR.7 rA=r|ޠ ^_$U"|"DQ)a@ Pq1D) \9P 24JuI|m8v ?7b*`A Bw\PvqĂZL MRfA\2۫})d.*?aX@Z f@`HY Z ZGp !@]R"˿2GS M msV p ~ܚ4XA`+p\s7eh92>OhxNzgwmC^]޵?{V#U| 9@|cQDҫ vKy Alvu nK;oncȴO~zd@ ^&گ L yJ7;ўR[Byj`DZR$Lk:_(9W`[;Ϧs+ S Qzg0A)@_wJJlxQҮkv>Ԙ :x,H,rρ __P6ruצ?Ֆv'G˿\¯>-`=@!.€@K c\M 7SXZ$s%&b-@-n4kozֹIBι{1‡1dtyK!;|9(&P+% `rA|-ωZlE퇴jέp077ێYƯ2P_{E=kZ*yM "d=1h[o!py?0Ht3S$*+5+dz2I< m @E@ gS>fFʱadL! W[O4( o#t#TjU N*xpH-0H0y/ч񝃂( @ gPQ@횹KZG2  4z> ->k|[}זpn&&,iK> C5_3 ضt-y%@:F(A`#ݻl#@M5@K{>LK?y-PYA+}<9k1/ m;Tku7?k);0 b5E@ؤdj@up $zK{p~ !`A#z)k(~G@` STy}ʺlb"Sl{|IdyP0:'`&̵~CA‚ %caBF1HOw0~؋!~L9~?U9B䱂٪EWǗCj]N4 + rN0{be,-ZaA vԎʽ)R$ܳ MzG7Y'6j' azxuD$a|#GOsW R {ZiD'*L#`^ze|K!x/[ myOZNJ|H"Y&RefzcW~DIp഻c-ZrL ' )y Q@xERG.P ݸT_fbWo'pD,+_Og ɟi}@ʼn?=,-VYt zGW n"3/$'{ @=; Oʳ9u$."^<**6 @h:g~Bv\@k',bOYOć? m.֖y)dvF`fa.#6Aphݙܑ 3GcɩÉ=r@P (_}ښJye dXbA_q}~^>P?QOyߟE^kkZـ`wxug nP{]H(g'—){91u+ayC19෯TbO]D-KQtZ۶ؑ7d^Y~O]u}p()jKS;,,ڡAsyj@q@&`=8gԃzvbp@<_H9ϖ{G{D. RmoqepY?L^]A>{=Ce0%j_O2H\HW -+ 4〟KOMSp~@?]n]ۿra_ߕ^Á#;XkrnO>2p׎ˇR?},>dL_2d"^,*`BZ1boI[.}Y?fc+`o 0@e#,SqU}=hKn-Xʽ䩁7 /kx @(+CʴZkccjkh/5s`lWp65i u^$*Ƚ`]+T9?|9A(j堽ϠoK6_1%\[ŏ;*{=k?3ig4Hi8mCֵ;(VAJ'( (IVA) oBb@|pPdq{Vem󢫭ք{6ԿmU"5ߵBߒߺ,3F3mH"c=s@5mUySB h)͏^Z~ /SVtSM¯ekOxz&мIȼM~qL 6/m NF zoTAoe&bP4XuB趭grKK//rysַ_},?m\Bm1<&X΀--* ۽ G6%B.'% 7?qaWr 8:So[ۏxO+ / R @(}lL= ?[y'Z_M<}hɭ:=P zAj~`(OBι{ٔX{yEgC@@$Pƴ`N@mb}V BS~ @Pq?ɿVػNuO |;BfB%Gc|柳0y+Q= % B! B @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!P @!PL!B<!BB!BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBQo$%tEXtdate:create2011-11-07T02:03:53+01:00h%tEXtdate:modify2011-11-07T02:03:53+01:00 IENDB`openscad-2013.01+dfsg.orig/icons/openscad.png0000644000175000017500000024072711702450355020363 0ustar chrysnchrysnPNG  IHDR`DLgAMA asRGB cHRMz&u0`:pQ<bKGDC pHYs  IDATx݇Ց?㟏`LB$@A!@"(""(@@L068a TOuu۷{'T= Juzz:?;W$ :ÇoIceЉɰSQgqgɉ#wڵ+=f$V$ X-IZZZZZZZZZ ǟLvPv `G\W$g'#Pjiiiiiii5~*;H X?BF^+ܯVKKKKKKK+{C`ZifgjiiiiiiiES[.`!]{`$wTjiiiiiiuQ>NHl#ټJAAחV_a(^رDr׍?TjiiiiiiO}cSv`':$sV6,EA:_J X X+vv Z------: 48lU a.K~ʿ{o_Zo uY?#* V tdaN:*d:> hןp(` XL7]}ݎ3wPjiiiii[C, o VIȮc)+fZx@_>>zx(`9b v쌕M`kd`Ŭ+7LծVKէd<Z[ jPdF0ZtBVKKKKKWWN+̋2i XlQxMX cW̮Bvɴ* &mjF+3@׫ ^ Xl5WW,Z6 Y*Lkתyپ!N X XȜ|,@fdOVjiiiiiR7U&WVXl+X3;: ]xhiiiii VEjh7WΟ_v,GV[`!s1@척;``5Vf]bVKKKKKUNop(` \lm6 Z!@ i5y :@UXع;5yB6k6L[)۫e)5DQ3UUX^-"d]]jGv긭zmTd[Y--- *=ʢ` `WV[>`Z E,BpS[G^vbVKKK+cW ׷eZ1WVz}j-Xɗ|l'5LߣS---,(Vw'<KU*`ۆLyXdtvYWZ`\ 0 wRk3U*`"' &ogBv \ZZZZ2s8mZkp}gU*`m؅d Xl) vʸ*Win(7\DkYp59V7qV\ UU`9b]::NbU['l][Vv2yjS.@Vb% U*`yX@,#L!bq֥Dpmo4e2]׷k"1^?fʒ# X׬xm&`Cz[b'$N!vc/9[F| K*` ,ⵙFr"`y'vc눅[q5Ď9![ᚵ*{F9OKK_2$ WīVUHWQ(dڄ:b'A瞼Ef*\ӏ $ZZZmZ^W뽔puREU*`}4J@; N`p {~ʑ:*:\ZZZچPp'NVY}ݎ>jClw[=>L>~l=e>j2_0*^'$ Xll?gNI%F;j8Q~2ⸯUWEWc; X;(`]^XV+i` C, b{Ru.VZ>\1sAٟ#ZXtd2*?O XVk좤.A%@`Aµ5JSJ--p>b{]\?V*` $ںpާ MN٢rΉ_~WABkJA{Z*\ +MٟCJȊ,^sPh"|rXwU*`;`Kg쐺 X87k;S=دUZ e{m*b#O)` Xl&Ek뀽mM(bN%"bBk\!UST--&Tl=V6 סVVXVX#Q,"!+!wacϩ6r*\K+Mٟ[ *cIx=pZVUvͼG,2`!X { _ _(\ˇ"VK̻ղBOpVm`1ٵ ,dbM놡=c0eʩ"xv$8j p庛t,`9b V,k;>+Ȁu!;'n]M.ac=QĖ׬h*b:`U:LY)i2\,EVXk+C aa ]XX`(ȓtbO UXF6  WVTWXHkV>pU*` ,,dL XL:Fva'&o$y1``! JVk3f5\)sV6 >wp[ cV:`w"Vw:bQDl;$*bڴx"xul;շ K\db' ACPiY$JpUji@[5;P+l ZJU*`yNV"bE;v\"b앣 `҄va]tֆXks᪈*"x}?Z\ X޲pʚyߏpR)`1UBo̚5 vkZ KSr-*wZe=\f,"VUv/`1XzZV,fmYYl ;钭BBDĆ]yX,d_!ᚄV+E+Oٟӵ""xMh$e׵@ XXV] spR]0i; `1$5ĞEX= ~R\hb3ZZ]=ҎWW]U*`;Ԁ7~+P"b Xi,Ed`hV GGµ9pŔ]Kc j6 ax- 4 XV[,d;+lVZ;`g] #"A7bF GۮpMBkUU`Ϋm@񊀵mkU*`L] vM",E,c,"`ث|$-M`q";$C>o: UU@{^m:e XVWX,G pRv6,"ABx XXAؾ}pm>\TOٟھ$ZҪ,~@'e9`1BfO: ,G ^Gta7XkpUji5X!^; \ga p\ Q*` XۮP,^䢀 Oges&ncP^}Q `+V#8#օR {d 2} -Vxy:PZXՅW۟o X]KXD,tR ^1ӡ[[U&_ZGD1B?"\״WWM6oeI\x((hwZJ Xlgv[,c"^墈XȅkXL ,E%gta #8įPĞ@j`F `V|*`RTw׶īE"VU`1Wz̀_fO"^1X:BX 눝pޖ&XS0 {L.xp.bݯ2H6j}aUmwUV݅U*` K~`oQ1ؕsPB` EYE;\2n+5$l Xv Sl ]XDAGE\Ҕm-,k.x|%jGVU"`1!z̀, PRĆ` `g1"bA.U|+15b"]X: R*\W8^c >Zؑ"*` Kw1x ^)bA,=h:~b".rQ"b1;-L\cء G] |[}j+VT&~We iӮ?b X?`)^W >3 ,ll=Fkj1zЀ""`1XH#c`mյZ {p-4eAK2WuY[Ɓ rk3᪀ Xl;v],,D ^i XD",|;`|"ԣ=1؅= &Xl}U6 X-땬z]m72 X{ xW p@`uz1"=f (bM#KA>[+{r{f3k `.؅"?WQ6X-h /m뵭F!] 3;f0 Xlvӊ]*w,·G\","{-,$lq~2Fr7Ll_5wa?,*\q{Lm-RAU+[I^?iw]fءuA[9 U2`HVXV@,_@(`!x++ l!e)`/gGAB=i {vM ;Xb[ܫ\q|(Ҕm -V֠zXu]PykG5ڮy6B~[(`,"o!૴*e3v0EKAcoT.8ӁeʱvIgÚ"V$j[ ^9`p i1Dnlb쳛O<0?o<57ɓw xݰl CMw 嫴Wڋ\+^v=:`!8B@ XJ 2vvV7xqi+rG[e5`f|,nd)bmDǗkQ6 ؟wF{b+OG]{]C-W|E+Z1k\ )Kk\+.NX,$l^1g_iGTօ=  JS/ {qo~$<ܒ6Hxز8b[w?VSuڅ{T Y!ԍA1uJњ\9Z yt A6LL+q.a(` @[+B{k&9' `YY, oo=-Lؓ7#/Dfaa@*`:ǫ.˾ղq#FGlY- ټ 8dwL[?&'yCS6`7"V\p'XKt BkN"`k (`Y5~d5xREBþb;/]Xk1pUjut׿};׎k6XX`q^X٢c)dn Yy>HpMW#7[;*2 xt.a(`5Z5 ^1Wz"׸&G˯qA,E"`/!E:`cꀍ!6F<*NL”AK+2ގ+ͼZ^lWآ[-@fJD"Z}jCk3*uTr,5xk[uM(`2BgWi!^i(`)Y+=)/r%yQfEVkcXڅ&w+ ᪀*c^?dI^Ɓx^1E'^ؼ!|,,52phMk pܞ3,SEl5pKZxk(`W$]'mKɚOR55E.hXH_sB .,ykpUjuTx}]x혇["6Oqd+M F _v W1 yhqh'`i^)biG,,"Jk_EK;`)`q,,E, xPBϨOc ;AYX*tZQkpÞenj̱\EH׶ʬex4 ز?| %!X YkZy5*cj9 (`5`D,@x[vH AR&]㢗 W ,v̈gVE`XD,?K!b)`6ŸS W?7hie*Xu+'ɧ28"!⫝̸+k>[ Bـg=\!:'\%ွ f_ `7 +"kUs"စ ^)bDltVXzȀ"Pb 9ok\u8)KB>u"bYc1_ ઈjۊ{}O}  :n@qp SHl;Y ]$ȶ|,=XDjEZj+b~oF(`W XiYhHpBhq5Z тPB)YDd(bט.X XD, `#VBµXBإgJٟˌ[I}#5J-c'kQBcپ0n\= p6gH}x4WV#!ֶBw`1t+KWhvκ|k XF\䢗5. XX<) `!U C;:`},p-4eJVf'v,^ԅ ;Cc-cт$Ė1+A/[ yr5OѕY=gCnDB,UB,<ܺsi=X>x[pF6iF wK;}NxP9Y!sX,G,=υF U6:}l}H6g ;PPͧ۬<zqȦlpm@#p5YIp?MB ^1 &m+!6P^5& X,X X8f@b#xH]bB b઀j­ ym}EjVV]}Xǜ{dB604i yνB ͫv5g`)`Y+GBѢ]tv1VK`! X<'=(`Xc'rD +\+ZZсV [r߱[C[6V[1u5Y@lѐ-k>U;8VnЎbp # x@B,•& Xi}]g!b -+#_9`gEˎ@Ƒs"O"`XV,E,{jꀭ>QkpUjL+5pK}ODEqZ>8dBcWP]~Y0K\KN| wג\ڰW=kKG$Ć ĺq|╯ hAK큭C񊡀R^1X,AB(`T#3,G,v\=#j p- X }86% .,kUrݍm&dW^yQt[k } Mo:fm~>#UB> "BbXBvmc3qXW =#Eb(`! sA<+cX, 1!lօU6WQ̄B ˌ[)l5WbWV2``#s}GZQ Fc]]3ʚk7,f}MN8w pd+t]16_#f"! re}UK/pPRZW ,Gߋ_)`X4 Oɞ-+2EғXD,ųu@>hUV>"x%׆62["^?6~Drd5S|xUTz: iֹvECL|{W 2`{UëX#.z}# ຎ!V:# Y1Xi,xb(^1XD,KRB(`!Xqfx/E∀u.,gaֺ ᪈*뾾7}6Zꬲx^V;g]5GB(`/?dcBœX1> kuB5_*`R+xn?"[$b[9̽fH,>~8r`EBl {ע[ W6.R ׆CBJl^*/>JjC,•#Ͼr޽ XX~>6EQRg`x"bc;` `9bXX|EK@ƜMī,"EB,3@BB,v`*\+)8ZZ[Y^m_ ß٣.4 "]k2k uÂz@"Үppphh}}#IB4*X.X~:#*BJx刽a&X8b0mc;`)^)bt2E]+ uXX) pŸ7]gԺ )9ZX#*Շ[)7HMl#Vi:^? ̽jl-oPkx]Eج- u_<_WL`6K@@{prJĆX~:v"^9b9 Ar3 ['^!23⛑+,쀅33a.,2EĚj:`!~?>Uկ XUUXm}U0BLiu@=:wU?윛W|XeAux=Pf,+(+mLЊpxK pmOW 4`pAVӱxy"=xPPRJ;`|vy[P^|ַb+\X+EBS,` A7= .lU WVenan>oօX/kZ/kֹ&v_ ^y60ckCl} ZQa4d3ucgoA{uG7# \i\+Wn̈́+YӱG\: YEZ_ ̽rBX~R"bXD,=%xPX,W1 ő,ta?xy9@B_2]XcPWH-7KU ઀ʭL56A nElx-?N/H"w_vX+xxͱo:.+&wίCծfIpB~x!V¾`H8`m]XW b%W W̝˪px o Erp+vc ^)bX+F:dxŜPb_ 3/cX8\Їl!@Bpvpmv86I]Xkv*`r)p!Wgkg)`k^a^} ?{jyd8WD uDnY*pOzT4>Eľjပk&•FBl.•FJc9bW̪BJWgQb(^*X S<+!'oəpFBk"bX!ꀅcx.u`)E},RGb刍_Wo>ߧOJ_`o9!6xcWX\wCԁ!*v8` ,U:mL8`XDtJk!+񊡀׸ R5]#]X,taUhAx2E!oP6H< ͻJRtD,ͧMbݓz_RHz1h+!;b9``[I ^\b$ĺpAnYSW RW+GlxBZ וG `v9dHI PB(`1<)' X"Zk ]^@,|[hVX7H1:+qW7h9ZZ>ƒf4zIx?F?'E_ҷ/K>B4YԅM36X@+-YoU{.UQrpQb8`p+E,uL8`Z,#xŸ{2q28 ^q,"7@+v^10=XXvS \7{@VU}}u_[yӡ-2ɐr׶|n7(6bXr,kfHx4yVB/`:Y+ͽrںM^׷W`XD(^9bX"bW B(^)b)`t,"t3kE"`XD,=f`,BD: x{j.,ۀ]XkpUjJoハjՍƫ}}%qط*g|GX׼+!QjHνrH,ūX.+ ,=+!0uۛP"^9b|,G씱[p.X}W&#5RB(^k\ P8 ,l+_K o9۳YpmXTe>9u k'ַ$+-6|+v_j, w &`o<ph JnIuua_Њc[`}o=DN\o9XX%VzEAb PR"^9bWXA%.X,"EB,쇥E,uaU]Y!4x_1`?/^?–ou@,"`qMVF[?x, wׇFw彗FxmA(^%J倕hoR"2p#6-atؤW}upIb(^9b|,G,倝6{1B(^)bWXXX~  XzX8fK8M .[Tu,m#/3*β=޲mOOvxmt=VɌWO^z,l&W b)\4>Mx-m5إQJWXi5NDB,+E,#xXo͹XWX+,PYMA5f+,?dpQ_ 9aH,lxw=W rpW"tX,|;]دW.pm X-g|Wg9P eI: jk®W<kz{ k[h8^"W?JXDܫ- b}opqn{zl=, ,JC N +E,"KWhŎCF xPk\N+>₝XD,,:]XP6W'g|avA$lV5,M+*5T؜@G+G[VֵY_VB,5vqWĆh}FoǺ6\ilx5īXe,+,Or \ G 8`# X~_ CcfXX6 `1µ1zʶVUdY>I4f= [Y:k>gb֧*V"_ޢpM-i;9^1p"JC:{&p}BJxER1 (`)b]b(`!n%k\~ 1sT!|pMWV>zM;FBl+6֢lÊ} x6uq8b|mtkg <4ج-p+ 'i-(\XZ WX W t,BX+G,p+ W+\zd5.X@){9Y," B$b(|5;\!;|ͤBetuV}V|'`}2ZmyU$^h ҏiހ}Dl|k+-GV V[X~25 `oX {EXWb4b4`al#VRRr^bjb)^)bW pBvߌ1WK\v 2(`82,uX`a,"{I[ JSZk:M}>څmi\ D myt6&+{W"uizM X[X .9&-`iǕX>6}ks`yUBl.@uYe`W %xb(^1.,E,=dxq,"pB ^;+\UVluVX5݅m&`θ64'^x{^} lb x?yMXqA36\]GoKF,ǫX4WX Y•FrB\W< ׷8`!WX~1E>΂PX,\B"b1RqB1kz*`La?J,?*>lވu4O6!5& '^=Yzm> |X XG[µ-iub%x:Zi|k{ `csf_RAl4\_1DB,+E,#xޖ&3:4t RB%`k[ K\5Z6Bl/X>Zdv̈jV }gI~*puVֻ`t+OSOfAi2U~l:+Rm޳׬-ׇ`wm-~~2X V_yE뼼k}E<e@g_%J8^%X) PR"^9b>~Fn,=bA\"^kJ 5.k `1R:u Q.5\i6VI-_X j I٢;z,`ux~|lxW3)Nv*`%ȵpm[iƽ"- X[W-DVع.,+**r. WX+E,"E"`K\ ~`"W o NL ./D+l+}ˑ«ki:i5ÌXKJX+lpؤ[\6RJ]6c lW  qB(^)bW 녧Ä@(`Iʏ@#Xz= JeAb:BK+M;^XYw~פGZYZt5WzjVze}JX>زnh2`k[ē?#h42ؤ[>xz% EP. W +倅_.瀅PR"^)bW tQ  XB_V:`,o3A y`kzҔ)&y!L_ 1^+nWcF6 ru.i p tu&VWWyEP^w& WX+,C ׷ JC񊑮pQB%. Xz w"`a,"w"`I= lpUva+?^v_%˹TB`ӌ|:>&+g=FMyM|֠b}XY*z-pnwv`]\bYn\g&>M{>vͼGB{W x:VB,+E,+,*~ٝ*ȩ6Dp+\ix=16`,nR|t"\}\]X؁ֶJ+ ~Y>ئ=81VN3ywM}Vkj,kgbmbs,϶VSi:YnΫ/`qOȯ_SVB`ŠW ხݰ) \z^?I>JkTSu_? w_.lkzkހ?؊i@;b)\%^1p:BJKJ xPb8`)b8xWp X^B]゜08X`/ ]ٲO aC`锦BiJN?` 9N^xv_G ls $χ94,Dz%]4XX V_R>$}xf^m^%ĺ.oaV̪giV.[vΕD •J~DŽoqB(^)b)`WX,"JKwR"bmd9C9C>K XB )WZ|ҍt_q|r6`};PՅ}YGU5ok4r `#{}kXiNXc-l[,ElҹX_r>s&.rĦ}yhsi4.x{j +k+,#xM`OBW(^!A\l @,X@ _ tpUvA'M5W>gdtaXlaxu|o>NC{չ5kk^; if5XX_r>wO5V 6Ħ}Ż$X:rR"^mo@*vحL8kWX|E{_yw`.`.,">BB 0 `0 pUvA.JIJ WZIfkejj 1$65m"5@{^SX vF.m=q@,VB,\BHuuacH$k;X`C,{mt}K, PR\1"`(^%J ΋BJ7PrG\t w"bX XD,u9%L'e)`?&X>1xp+dQ ,3>'w.i@:#k 3#;āR/|Bqg\[Rw_]G kZ6`cwX,|X te˶6K<`9bmbmM>a0."ZeH|z%U%!VgIc)b@(^%ڶG\㷊"ֶxP,NZ%]$] Ped%.+^,qApg-¿ g WҔ, >~Fp(:yǿ{ 6K6i3c{\3nH5`c z"5`fXbxgYM:+֧ MP&!uplmtX~XiGk| ^퀕7pR"^9`;zi-pvk!QpN"^9`!ؓj (`+G7^EWlfWl؁/`Sva/1|<ӌk+|/l%IX۞W_&~G^ X ]g6 nXX߇[!^U:˻Iuu6H\i8^mNX+E,#xPb(^)` XX. Xz ,:;#PUkz1;m'eYQZk7 ض ~[gl- ][ .mJ9koumN: taˉW#YĦ9^c V3YXw/`V- M\7 x!u:֧oQBl+ xEr ^: Ȥ gd ЊW8`K\5 ߁8F0uV\Z|,lw.ta}n%4 T}`xIsa dv_{^3MqͲm ̓JO.lIֆX ?AdSZ16rҎ Vb}bW Kr&m q\W +R(^)b\`9bXD(RFN z8]`!X"`a@Wl| BgdlBo_?Ek$<h}dA~сI"b@AW 8\ye5#=w XXשX YV 6X xvSӱ`- XW KpEJЂM`pBX&'),^◸׸dB8`a-9PN p= eK+ǂO}NF.rJX{f#Ff\0k+ֵ& k=V?_f?G8qAX ?UJ/`!V :6N"`m,n7JW +E xEr7Kb'׾#W)H>%0tԣjBJy/ne8 (\ivV(c^̿`IM"둗ψum &Vr辦\el캖I[p3۩XO+XH̃it\ Ť,EwcyMuA-Xl,Jlcm;`moEoi"ARR"^)bW WLZB/ Xs ^aqQB عWmSQ&UA@`߷'G^M笫ퟝi@]׵,cVd54>HAZ 4FRTl<`mp}z^&Ie5 >l{_]gc]Wؤ[ 4G, nԩ[,+o! ^1tzĠx!`x;G ]Xw \\!}g^ʡFMYi*yV!הjMV i6 t#`mpG[Igb,G+MB<Wf+#jC,t %B(^9b x{CQ +B xIqF/q!,6P0FWv2\ܲg.li5P0>1,}Bp1Pz6uɺiZlygb\,OXb16nq W 1&Յ%Ӫq6:J p: W +;pQL|KpN{L:o ߯}=m֕yl[Q᪀퀂Oj B,l䔬͠tc l](MҿC.k 7)KDluk0,sifӀk+MXټ+^zTNS4i}x]4>Abi8`:*!v#q,Ķ}@ xm+{:b)\)`)^)`t++X . X~X{n !v*`;ТW" oBl٬&#--iiD[) RP`t_lcy ??;麖9Vb|OTlV)YK.Rn^U/`7KjC,e^%ĺ6 `ӱ>Wk}UB}]JXbrB(^1W,+_~x=~RX=eLo1Fa|ր$Wi@*9P mHs"ZNR6p}&|\Ю"qõk;b>. n5 ΫX>2X+F `[p+mx{BD|KX`hMaV_"}F6 XD,2lFUc* W9}glie,G bw n*HfE <&m{N+܏2ebsl`?x.!66 ?Bl,UJRvjl$f^%Bl,lӱF#!ֶB" xprVXX*^06p Xڅvk^]pM+U ?;0@b|yZ|ה[Rm\S6v&6{UBjV~Ȭ`%`T'b qu]}KJX߇[4.J'c%>`,+E,+  xERkYX*E,c X=!kV@SX| 0zXkEHlnH\k@Wp~#v̈oK+=BbWM_=bWށ\uq9/ ^1XӾ,̥Khغ* 8\1e[L+C/Y&6F2;W.{麰1~I=눁O4S[D,x- l K2ɢlҦfzt&V4X Hxuu`9\]]63恴Kw^iZWW X=c,}E~[l&V_!η `}Wf:Zi5Yo6؍w \,xpu!p+,WXi•U ZMC ʑEwrJݱpXuqWl!^qw-|lu=3!e{L+efX b+=jl$lZ>8diV-Ie /6WC, l#lo1R5ͺ,,F,lB#ʓw1"ʓX>2HyUb9^9`]p)vi8^)bW +,º(^)` -<%{j,M+\?e5 Wl|" /p9˺ei;bY·͵Isw@36 dYWep Oju `m,hD,= iU)Y `,r}Ult06ںW #OD,+"xER* ^1x Ucꀅ``Lv;\mZe ]:be#4 U[<ν5a Ö4+[EV6-b_6'b}!K#wa$&62,pnpuw^9b[[ZK*!+`N xHW+qٯ^:k&X~uKe*\9ze{L+Eg ",GnX)^R `IgV![Rz;%`9bdVsm`31[XwVzj*>;9Jsw;x};^ŤūeMVCxY2[c-׃=yƽHxX+On\,& Ib)`4Yb9^)`mes +nxMԅMX+AӚCuv"'`%+!vݢj8^]u/q}ˆXXղ>˺}U4>`:GH,DZc7# W ,uƱ_K,D,EC.k4wϴM'5;`%FZ:u[/K3.xtT3jxV3 mպa `s^ݘT}5MEt_; >'b,?+5 b^Y&$R$6\lX`6D^B+Gs}V? ǫaxp1Hx4H .,wM *\1eL˳>) iva߭+m+1ʝܠԆVaxϸe `@Ax, m =z\,"p&!V(Z9`i$~a$fc\Mzy=ޒn]ktO\EJxbFp}uWpQRb# hQk\`,.QFS˴< _x\$pFK!FJ X b%JzEVtSjrۿ>yHȪ M&Zez}y9`kZi@`1>MBt&VkVs(\} hnHke<X恤W>B î% K: KHW,3K 9㘯3~ - W 0ۍpUF\,}ش]X.>ԝSf$j%i0q5Ն>ӚFk{%=jU吵v@k#s` `\oU,dL.rlp<>5xp$t_C9TB_ՂH+(^%B C'dx !B ?kp=ejvg`pXzĀu`Jsiź =->h+^-~H+,~85YPXK X {S`^ kbmW IEK pi}>˵}]EK R7PO؉v!Q` FK,]xv@M.j'dc#(>٤_i6 JlmL{;xy9FdORVQ{^ }^H'b `7]Mb9\v*bo]Tι ֬bpulv^1IlV1I4Xi}+,=@K xPR^1W c,_d9`g]clQp:.P4\mT 1l9`JM˧;'Hߺ l-ҮȢJZ%>ԪOڔUYH!Y}Wc; XY3ckU, lPp*#J|*m ? I2u_Xbֶq5/siaY5y$>ڢf^)bi(\mM<qmH0x=y cWXix=dϙPG5,(^)`EbW%)YXKUf+ `k4Z`-_vVmom3.X$ V^}csMe/J[|2u_}N, `ӬL,Ek#EJlIp =p@<@wm+ف> 񊑶pR"^)`WL`ۅxmx <'{e2` +`ۢl!ͨIDAT:3Fхg2qF8mfBzՒT2lHa `y2sMV nh`}jk _ zrE/`X[vӍ?%-`[иhֵy@:<`JueW~21B(^1XW,{QBo8ka#rF AN ::`mQo SٻRw0q> ooZ6 4 3s)Vd&-i.jk3Xko8@̯_LQ,?+.mq4i o8\}hIB,XQ[::w^i, XX}AbPK,zйxx#tnwI]7~ yzmQˑs94M&+&A5+*, ٴ,? H ؔRmHkd ؤZXbօX7E``mpqvpJc,Elң-Xk`m\Wkktv`%Y YWX:J񊉍0J o  l=}7~dc c;:~=(j >Qr'|˳"`Rl.lVJ3K>ci*q+^Zyg@[ Yyn(\ll=p ؇i`,t IMu2mM8^%lpYE+;F;_KJ˷pJEXa,2*\!X^ ?.v \/ؽgliy|3F+|vI]X/:>gi%&w7m!Vۿ>w [|>[ [u/q=jcWm@k,`ՖFq.d,' iP6i@^)b6@Fxy•&y% C:4W^q XWgo ,;sn^m 8` 6K^b]F uU Pͼ*ik I[Rnp>JW:rkklh}IXGmօؼO4 X\;EyWW`gxYW`4WX+U%w_!p@ZEuu`)`X+AXXsX8fp+ W^} weLˣ^ >'_I};u[ݰKbv`XmCyUXB|7 xo~L<ʺ"+,یk{^iֆWl:J'bi콫{}MhK<`,"Jcl~XюӱW +"VzE+Y`qϿ"b鿃 cbx!`Xx@_7UFk*b} hEGw]˗~ &r#5,`0f2`iRJixM; GZ~'L+ֆVl҉X< P%-`V4]uu7LA8`C\2ɗBd}6b)\%JIW/k+E,}EJK~vW QHW+dVY``+5@*`۬rkM+M;b%~W7ՅTNʬR5Ö aO\|WdI<K#rEy倥y]; m"5+`]޿v71ΥHxuh:hI,G:pu2^/w<޲rV^ǫXMg xpB d9`9jc $^x7M$BSB``cێpUWltyR"Vl҃7%`1y<z#6z̡@~ǂUX} xVee|-yPLj=ۚjA^yl1@jˋZ`X ib)Z}+u\}lF>*vZ6\ilM:KB,R:}v"`4+Ä}?gB*Ђ+_j:W,]!f,F gPY}ݎnez&Bvg|R+9XF7ڊXM,m⼩cXkZXiˀ׆Ofjq؏_' yrֆW`R]B ~"#5 ."XyXZ`9]mK+ pp:P"\m/ݯ6RRJ(^)`|}{%*:+d¨9 xE0u{Wk!Ac._RAlAYTH%캺vz]a>r1w4XLl&=$k iƽLyX"ye<>嘥hֆXSpMB"ǣ-`;'aq6i!#V:˯ozLhjxPb,ūXC#`lv4,|?"^)` ?9z6v \mV~7`X闦݈XUC;#Y  wS]HM${lw熁T[[ uBՆWuW5Xm M<ij9?SlZֆ׼KR~#Hxm&`]EJgb9\3 V`]EJ42XH;_9b?ImpͿe1]F`\(Gm@d}XW +E,ū/`.,"Xڡ/_Ile&qKu*^۬(o`!PDl yΓ#ybInB6\y,[ݫR\Za5S+=kZo(`<$A덻D"p.&-`t?زGB,@Նؤ\3\9`}VgIxM8^s"`9^1 -W_xPB(^;eLi?93quW{*W]i:weM8`߯!6 ވZ[O͏n=1=T]!51ؤ:>g`}7 H1SE{Bx^N8刕.lI).VB쭋Y $R;lrh\M:ӦY#[im}WXXi|;G`y_u_ivq_3E"z ;S7]9Gl'UۆE`!pyt V6&nգj[6 4iE1;`yXsyM zZֳF:.56.V,M`\ 9\ gE9\]umE:ty+,+,#6+Ͽ^1>ErB ^ v"`aک`;zL(cZ)8`QClLf~ܱJњ7\9Z;>Gn>>Tv&l9?T'! ?R$)✫$XC-c-CrZ&`Wnk&ޞ<{Y}6 ku+MkExx _d,jΞW:ހŔXb)XXz.5-` ^]IIPwm.3+mHYWOXi} x8$ `91ځoX iX|?.]⢀||w2\mXz w(`k]A,?=6 g%\Zs\55j R=WayqK-OR7 *^X)ܷ=ؗrӰX<Kʓ73Ac,Gldޕʲ!wE+|$hK,XitF+•Vz_W"Cx~cxuJ xE6='~,, ۝ Wȼzƕ1A^>'`,$ WppmIh-WSymTϙnjMN֡~麬~vwkl+  i+Y j={V+BJaڰ56x"VJ"bZi ב p[[qEK6"\E8^)bG[>IbYe>ZE;W W , X xCֆWb׶R,`IXؽXV_]%B I[a66Qj]z; >i0.,i|$X>  NSr1_ ûN XD,*KZN=BʶVk~ AZqVp Wozr6؄=i7 ,OGZ `x`kl^mxd XiX)yjKR/!6J=qk闑8|uHEڶp{څ{TN8wHy@k,~.+,v)^%"b+Ӈu`gOvn1l EUk#pUqYxD:`%~ѕ~|L׏9^&+ p=g Ⱦ$CiVdQЦ+?Qpk΀u=32C-YXzVJk:+v7~$Ytzih Gk-`fNR~,ҤA,,E,ԍM,uttU,"o ߟIWHfFX\m̹6 )aZ  {*]cS'cMZZ W 1ľܮ|l?R}tDCOzҙ֬zVYu=ݓZ(}yfx}@{J9n,Ʉ46J^%#H`}`8$&m)Њ =K #.ݫRd b!^|dF _GHs~:`3].6͸@U'pUZ!xmv[+ <|͕ ^tX_nÀ'`ixdem5Oj(ǶiieX^)`%U)ibV5EK شklPb8Z)\)`1@X,=tz[ ^GM_"^#`K\WkO?W XԫY{7IW-u"wo5ņgW`ck9)G\غIErJpEld%RR"^W +3/3U p]ӿHj ,Ǐ2x`:JkL5xh޻tXj^lW^g]y L^\Ãt=` d)X~HiXKblx d06&5,E`![^'pp}mmXWȎ_~e*>Xfc;`)^9`(`cv rWk컏 7x}׿׺UknW+b~{VّXizw^cã efy5*riJd,yՌCgsj-23#6 Cr )5Y XXK㈽uQ46il @1sxvL|fM`I[(^}\*V񊀥W18`.,/qv+{Ɣm/ʼ]z(;GR$ ׻-m4Eյt 4i{ ] "К\y5FiyrͲW'Lb,OX[Wt`cO1YXL'b)Xy*h`lx;o^mJq@ZU4\)`1Im/ǺQZ1ϴw`'^+,ӀW;V+]CmU, !`9*Q2e]Vüiq5EzŤ^e )K:^]Z1C%Z{yyz^LiXĪFfގd,' V$"Zyl=ؒs͂Xnlk@6>VxW4r& +WXǖ"ꂫkΕUFW}XH ۊpc/\!  WD6յ }u=J XUMVH@u=ӳYB5 VX< OFI XĉW`J `'2s ,}-lbzجc0Z+`pG\Jj;6)ob,} bkp4T*,]>{\#)K_ūF+(BZ[q"`%ȶ`)bӰ5JB*V fњK hI,E rYp\2wd˞E ЊlT}!^q=;XX+\X(\ӎ 4li%pǏ"ݯfe+E+d&Ih 4>{\-5Xހ%ū+ `{o$y6 yg ֆuHp zzr,\BJVB,,UJ1 ,R2kb W9VP%g XD {"m*^[25lm(`1NJ cJ3yĞQi`WGd@Zd,"B^0S`֤}l5`1Ig`is/g,'2Ⱥ P%hlxM"XH8b-`[66ҍm F xEҟ|WKvU1=3-K5 W`mUt5+\]hEҤYqM+ `&xM"ˍW`1y.v,zU`$• 2c$ ,yz\?Ar;\?0k#(@#p}US&\![+=UXI&%_֓`͌ X#-n- XD,,ll]VeNMLR"hR6 Dk`a'(G« $ VF!ۊccE `"| jp}*XմHlH WR*\mJpm(l+rĺXw^ `i^4 zP뗏0`h IE>~ǞR4`o~X$Jhs,"(Ҵ Wȁ[̝x]Jm5RZ`O;'~ SO([ T k#(+ʁ+E+ py4XBi=ilJF`y,i6vXA֋Z6eV4<|5 x) ~Bv$B-]blYXuiD?L:p׵\dfJ5'{pM{p]7I+Fl),}x7xHl#uUX<,Dk^4in!Xy4`OV`Wb[n!`!W W W-S͆?ZuνWL# .quc6-`1})/,&@Ÿ(`{]t ,'U^Valx XVej <&2`7use>m,"Vl+5,FnV5WC\#W_f+}äl ż~XjٽZ潭yz;Oܹ5M^l\<,+ 6Į"E >mppMk;ֆV+2k[+k+?vkW-g1Frv;\1 W: X+Y״xxK X[^}@F[ `l~Xl.,Q4 } hIk;UlCŏ# 1 0}cuY\I~j9VިV¶2ieb6"6W `y6"#օW X)zk *X R+@ &!`T,GkV.v0YW`)XyJ)p۶gΔ*bӌ|, D,mJp\-Ptu!=M^p倭waGpiG:\i{\=Kb,_V /I.J) I-ػlxvͮpXbof` X V)=!jL4^; ,EA 8`!s" Xk vx<Փ7ikekxV@, H}uS`#^ _XצI"B,<¹?)yWd, .v"\%"d+Źj,6npjZ}@`Gp=N>mK\yp-ʆ}j:np]ya&W{\@N+zϹip% b+qxm˃ ߉X=&U6:ȟRyfVkւCMW" X4x`\<>xM XlVW_,3`m5&! إHpEl`cdܫha7.Nīziwbvlc w/^+| #^#]µMlhWRyf!!` W;\]פ]Y{d Z8o<ߧ&IVcX_=`_dӭjmƒ-,,?qVӡ iJp'da>%B7ͯ~"^wkTl`[۷ӛ Y\E piWҤ<Ÿh,\O EQ[`EF̀BH޻zW1UYAD,D/b%)OW"b)Z}W_s5+\]vEB$^-9,cXk WٸlF1 U\!K& \9Zy!H# 뺢`lub1GZvǛyνz6q׫yCh U).J6{alxvm4eՅW\iU y 챂,.,yɀUh f5} l W\!_vpLfJYٿt 4x}Dz 7< SQ xuW^Xd Im`iX V`X24.&!VW\ɓTk֮\9`; i Y2`DKYelP6;?Y]*^N9,5WL^˂R-i=bR^~F.lb)XYX"],6 Wlɴ $(\9^)i' ȶ|,x^!׍+ꀅUx AY` xp WWv6j/`]hZfVKCXx8q.pAlX V \\,G R8^+O;rN=qT%/Ķ|,, 7,9XYW?ˆO?^k`]x {Y8#2nr5º;8 ]ٴjU6 taoV+fUt \%Ҵ*\!n `)G6#!BQ#Wbm+^O ?`THрu"x^a X^5R`d(Xy| hŤ+$+\!WV? M. +`[dّW y5j'\mhK{W^t@JƓ"x!M'H@MXXXW+ `mlJ#9D='a] $T< `>p.Նf2wQir68VWnP`VS+MW-Z+UȆ$W ՜K df5-`MX?84IHsX5q]JtQ >t[\'a,@DkXȜۈxaU e•jld;y>Xsm7,,$-\iaV\mh-e 'V y ,l툵mH«膁ޙb,/ٯˇk{#jiQRJ$v긭J\OWkyGVʆ{&||bCl7dž]T`l8Jt \i+ 2{ɝr(Rm_?#ӳ bi,wO ElÀ˄=8d)`%ȺX^4.En'&-`i8Xy۪p]_$rW 6 2Vd]>nlU6[)O'جh)I ,>x k<;_RcօWXn 4~|0H:<=ҺCV,/`7,_DR`)b<, >hy֑dl;xaJjlnlAXo{+`ˬJIlZt \%n?P?ٗq>p %X{ʤp޽5DŽ1╆"DŽxq<'–Bp-b?.ixvĺV`U>WF:`mI2PAҦU)VlVYXĪEκbX\u!ꋾ[xw:nQbEAcnvliU6[9آJөplqx+f4W qpွ. w׭"6ĦLYM:XL@WX Aڲt4XeV~c Yp(d;q>v(`[Fb+v Wp*\ms0WY >}K4d<w_xpPf=B}5%`m)Cn;VY``-U[RV p6iL `\WLUY=zL\)icX+?ޤJ>y! i ӉplX>~PW؍ cC5G!v|Z8`)b"!Zyld=B`[j#r `y+p ,R XCs;;+~l$U[,bUJv \!9*\1XBV,,ο>?G[B ViJ*pMB+$ kFU=L;o"B6cXٍC(`%n XM.d'+ZyCbi5J. HuӯRY3n5YK7`o5yveѤl3j[Jp5;]q,ȶ|Uu<g6+`^eՓآrA+%CB"d/ƆX w—JW ؍C(`%ף_w&UZX"KJ!!X< +Ņ$'b9X,{ ׹sWZ5pBگ `lR l z[rpŌ* G,BvMGGb,f+z@Z`1|U3+MW`)dɡ`xV/`4< XxU[*" `޷f`aƾlu] v˫ ״Vk'L']w`WۗK!{a&w刽#c G,c\!H㊏,͋zZC{(`\e" b9w+s6Y` z(b9do]6#v HE:BZ(`5XY`yݭuVl^Ab=6 X`pzl 4E@ ,)`KQN:`ˆ+MՅV ׫+! p{ۊ {|Zl=-Xkq!=D4 XW>}1F/}B6orȖu;:k初{6W:s pu6 2nU,V麪Fa;%U`UpY3o@k cCɒh$Ȯ[>4 G,C(`9do >`8b)do[]vă-Y4؟;K[ E֕CjV/`XYwv Οm$yO^9: Wp8&66ҍĵ[{VPM/ܯmjv e)p "CGBC(`%Ȯ[>$+ :zedo_X|`5ؗAk X^KZ>ǑM+vqFBk+?)V_&!bU LJxm:\צW+ūbu , l[`J)p\ {Ӣh$Į~ !pĮ"!J#!6״}c`>{\v"XR,Mv‰X^%#\gLkK{K[dhlO`Y-.ҤBl#r@XD,k」BVB+=њIxU;OYV6:VJ-j>8>mrv WW31@e'sub+^1bW-` p)-#!6ሥyy57OfY$]Ғrg`#ɡV!|RiWڮjIXWuWokB*^qwt\YW  Vp5`;Fl2g.u !r^Y+cX ٛnlB+Av!!^i8b_"ֶ++`XjKZ:⺤9[dj+[s&Ī{Eߍxm%RJDϺ X}R6`;A+•#J]1D,,`uaxwz Cb p]|h5XYO=6 `1 ` EIX)XL 4?} ųm2VdYo`u m1؎yxq WnR4\Ed&!h1-Ɔؕ#^]]$d,ƆX+&W@J)Ow:V,fC6-`'aq#cօ5-`mxM פX6z \x+MVĶXAQfQ!l'7v :\]># ~a%3c승b~W b8b)dW]tpbpW-@+3` d%5UswtR]i lppٍXWz`٦*Vv+dbu!&jlڹ2d]FB,1ٕ JCޒRN4#| V&pݼfօo_zu]ٸ|g/3mYX)yv(\hIpᵝ![X ls`;4o#Av# ^i$ĮX߄wg9b<+H]k;@VH[ ^(`Eғ<.&ֆX<pMG:rK#4nX Yt_:*mHhm7^|b`17<q 6޸( 7AveɔF,OVj2\]x۪ͣ-k%U<+M'吝116b8d b$.y E,by^4X "k =8P`n (`9bzX(X7b1+. iWTwlf,\9^}ԽVaʄld,οPeïSnpjNw`ee `1׹b!v^ ,@qb郫4x cmE 6 Y_Jh8f)XyX +iw&u]IfAc:ZB N mw p\>j&X YD쬫AJ.@.CK!낭ؤXcm f6r/fY3w6 m6`'_ZV_N 3S$p l'4/kluJ`Õ#JsEvy5!h^ `mna(b)d?U {&,MZõiE\ҺSZ9`1˪XW ,!tp} ^1 Zu> Ga~ fWt\!B:/' "24ል@z9o16#^m5 4`>ˀX iv X`m 9WncPeحi҄v5ⵝSΫ2!McImIy`a+& Z4_wⅽ f6NL16&!v {  "`J@yƆF5` d Xd YVY D,3eb3xvQ XM/y!H돃> md}X(F_'õlJ4^9T+Av+'hA~m,4b8ԄBv쨽d X[7 #Ց2![$`Nf`c(VP/\1-+vC#,;luZ: Fg-p}.Kj0 xœX2B] ޽rYY*m-Vـ!XnOȺ;EkZI|L^5,Xz<vaօGD p `!+/ OyPq!!ێc:>BU6:-EE&/R*\=Xe_^&. ?zo` Y|Vh57br,OҖ)vKqՆX^k;p$83vٜ~18+f灖 zN+[:>U6:-tYpAk#p@7\znY^hcN? "0f_`ǜIހm+Z,V, ?rKs \삩xE^?:^ `ΩAҔC>Nj*|vc>pLh+zi!{q=իorU ˂ q"u `mXU=Vb  XSfj O5sbjx]\+,pp޼xP"d 6B`.Bu xxʫOҫlub:4W1g^z^ ;L80/eţxu3w<XBikk҈n!V%>ByuM+)ؼX@*= I 5·ZSF pxE.}d5+oBjk ^o~ɺx- xٍ- li(`N+J3]*矾[e*mޑWıUt?'`/9/$?W_ుf]jbCvE vNY=wGgڡ g`1.jJga!. x倝W+,•vɬ#xv~"\1k 񊀽mɐB,O^XĖ n+HN=1Nk pL]ԫL WK/5 W ,G`K' dC@6 `i$ 񊀍"x\1sZQ&k +eCM%╦Qȶs7]na>5lub6>c:t3\{ՄM\$^#Ϋ OZ֬ZOрI K!+vr .u5O^r"AֲNNv_q֕AWk 7- +g߸XīB=n Z^,pt3\m2Nk`/,xW~W+ 0Jlqb`o^7 u=ZuӍ+Ve?}WLmwȶXlxE:U6:5 Wn+5r.5 ^]=] ^1`y`kހp]kBY+Z,ϾJiVVtW`  N=Ԅz`͎FuW+Z}58,ct+êArתܳ\q++ÕGYīP N t*\!sI mEB.W+{W&] `d H`ǜ+ؑ5JM꺎W/5rb'`S6W dӞUJh X+)xE\1ץp`"\)`)^!tEu+d^.wrMp=ܛq!V!ۺ`u}V Ut2\iB\^_"`/5 WسNACঀH2#;\]Xs؋F p ^b,+d(^6 ^/Auc\)^_{Ƀ7g"5 bvK`NNӍpuq& xMy02P{I?~NY]J<^GXL+Ss 3r_ ȊZ#"x.j+ujjupX+eL(^wus\ -W]97/Vwcש1N+MU앰5H`{'vٻ pH1UO>X)T]xp`F@F-$V WiDVdJbN:^k]=^ox]=J`+f \lrj8\zBe+ `1 օln,v_ Vt^wAa W;v yusv7qv)?0MBCΪ ^g`nv+ l)XF[u=,%p`FgWJu^WxE6 \13ZKכp]|QXl{k W4 >h- fuհ5.$ =ī gkq],ՅX׍w,B6`d[> ^j< wm_Xf^:\)^!W +Ex]kCCnX^ږ\ ltcˆlc>U6:9gp V+ ?H^]=xoX,X >m&:BJmGξbX^eڄq^|ַbov#C"`Wέf~k+jȖW(\a5ȶs76+dq-Ye# p̻஁ .e1xu3w5xr 7AR X),b}k,6Of;BFha뚖`1M츑H`uzW+ ^!W +V%CMz,x #xi!\Iط.MDB!6t\%: 肽 ^]yV.v&ik[}7`}Cv,aZ0)q I+.pPM 0u"\!;CܷX.Z_j*bZټūluz6د+p8OŰ5 W \k^Y]|g+Xv̀%E&KfBxE8_55q:^WxupƣLddF M Ɉm}m*yn+Mu|K^{I .gXk`O8fcb\˃rR?!;\ZӜ`Yg~3 G ^W \ `7-X_E=b6.^k+Z].@i=r0i{ ٶnh*xn+dUt<\1.;f'`GI`<!^mb?znXWr1 dlG|O)ز{9ߊU采x\1Usx\1W Z^7jkڜ# k]vr6 t2\]{.?r$BIhS`m5W.v`1 ñ*XW̌+,c W;@׵yv=0$ W rG޳H6`m\[<Oǚ;dY}FU6!W NΫګry{&3l=V+]wU$`;\ l` VmXe3+7Aqx bZ +t]W޷LhPYp0"m6q )jV+S Y~Q^2xM,c)'coo`]G- w2ڪ ة2^ EӾU6%E5TB.; 1TsX+c92Xds;B0ӞP~4zE{j =lQBk\W_7v z;kdz2#GU]kxMtu-Lvl_JvKmXe-pDb./w`/Esa5 CW` XWpUr~EXL+(bX~]bU R}]1Iր0W :^plͻ޻ k#nP3l"!ڰ]7u \)`ˀe0Z\md>I g,Ejx"6qkP"{Vlag`-A J[,Ū)X)YpDk 4ׅ6;Dj ^7_vkUȺ! ~ l;Uٸt \1_{hRjF^9.m9{i?0ဥbl6d[װlʑ̀%![&`!-I5Xx]X+] ^7LC  8WLimvv_۴ʆ]4▁cW"`?oOW`G '}`rOS`T/gXv%Gӯ+Zݡ'_$-0#Oޢ2jP<ւyZ뭋ZA+^)\MU4ؤm;6aMpb\`Ԟ.Ej'~X+Fy6ik [>4XL^֢Xb[JxE6 [ yE¸+t]k׍02 Zp}pͱ٫4`[ Y?6a-&Rv\]}^ سGj)'أءvcU`]Y}ݎaҞ64A6`--?+% `+ uC w-nf]a\`֪A!^K:`|b[zYy nS{ WWȒ)t\%p/W`ρ܀= ^]=;8[+ASh3kKW;`XLemM4]j͋w^o[<<Ժa W[\1X+MClf,t__ vaM&ۮp5W{8k. .18B0rf% R]m"`9aWXؓak`>z`6+-`9d6pUW ؂+@6 `e-U)؛kpF.0.pI;6 ^ ~ xêluSM5pr { qS`1`,#6 (b9`9d֖3+KBz9Y p \~uu]sT ئ  [b:>QU6-34݉յ.p<IF^&FQAb""CwЊt]@EAQQPco]lb46 D$&y\gYkjW]1c&Zs`RO '`gQؙ3(KpKpKp2`y.+C6 `W Y`uT^4pڢPgӮ'`^Udil O`;5EC pmerSX `(5xU`m18U`m7O&Őm$`]4μo^2^l:mN 8}Nn' T[%ri={« 3d6 3Xk5Z/ro(g;R5O0]0XL>T-~]42|kfFCӷqN+J]b9^]53 lW6rkl XWoA(V-!>[UyVdq I! "*E#5'=\MmEJΝ;HYam%rmE jǙrU^MXXX[sYB0o[Xf]p>۪.V_+: ħY`pvl+Õ|Ҽ} ]a]E-YSGx Xb^l+i1R]MXvjV| N_ݽnX;.TmerWa9am=s \` \`鷓nʩ> p`Cֺ ހ;`qX S`JF\mur%`?Rm3-jlzVA^Ẫz6m4=`J&+4d W-E#jBl+UgyKAm >;'T Xl@t X[yJ@+ꥇ{0gY[`? ~3j^3`q Q 9f! NoÕpxu՚ST]7gf Pvn ^MCeZiꦫ &ClZ6jX543`K" X-đmW>}ju͕#Udcƫ W s';g &]ZOzNl-ZUXN3mV,g^ޱT4:]9m*p˧6ng6ع:`MzX߆,ޒ%',#Ig9ټhL;(ؼ{}ef KE fV;cJ߇['E*\mx7\W;g 6逝O\ ` T+U_2mѪ&&,4k# fꧩXze-ۨ_gXƫt4i,n!R4k-\5-Q&. >& jlO&t \,4 `M5Vk6Y۵v$շhuHrW5Y:}_IYծpmu2`{^m]H+1]9v^Mp=tj[jWbzGM#$d[s,+`-Zܝz `9E6 dq6/p Ijp5p.Z8T^m] j,+gdm]zGZK.f3\Wy]B0bOLorոXf}xo.7Sm5Aַ!K.h`m]5ŚVVն{ֲ&&AlBOcquɜp \ׯ?a&. ~$KpxM W®#V&|Vk:؃Uvdm-ZcZ9d/>_Z+dqq gѴ."-V#]*.p5viPW`xWY X[ 6iX٬5a6-`F-EP/jlѿ$I-eVd>N_R4аVp>~mW@IDATeNRxviU 9-CґC_[ʵ! Z4EZ5 ^ W N+Bլp5V"ֶ5)`m%PAT U[[ z<ŵ!K^1 MKa[ Nl.vc֍ Z2`$MX,]>v:`?c?g>7 ^?moVPHh $xWݗc{ 7|V]jë ԝ;.,g\)-^\,@דY`eo5 Z\|v_oc۳[ `G [)H t۬*xE.EC u#jluzXi.kZrMV/8LU_,٢[_ւY`e 5k ؗ?^XE,4ǵ/qi 5; i)J 6rbդp]<4K|5Akl-Y- X d%`MؠcG=cםupۈX\+bdҬ)jˇ \פ#+Cĺ5fݒsXmkKֵ|pj[@-!n_-(Q"v[*+)j?pÕQmpkj&YjlK;;QYji@, H 1`fC-a4 s}:@ Gl+Xu|> +& dmX UK,6`E%<2Y>?W7d[ZA+>zxEZ1E# Mf,jk%rk9ޮ:d۳,5aހ=w~i6h*`yn6OYYHhn]2}kB>Х0iSZ ,շ;IVN-g/90R]7` 7ώmį WYbq wV!vz~YS} lF3OE͊G_*Q zB ZZ]-$b\qXZ Yߖ*j5Vlm%r} .ꀕM2e&Al3]+hVVxǸ:Y W WkJ]eYj7`sZrM ؞[f^zYCQͺE+o^pF;\~qjU%`"=;^i E گ p>d+`Vikֵр֩VRǏgpQZ:lwxD :b<k!;!^&i34=b_ڪpn ^8\i[5;l5մֵA6_!HrB B6)b@y5ӵ 34b, Sd-6+z׼j)ic>l-c z]쾪 ؤVМ+iV"afClmIJׇՓv6a%ڔUXz4QuշsmK Xyj''l]+(rvl\+ ~ޘaa)fh *=pÕMXVX3dOueF`XӟV0b[Vz $^o`M(CS"'DluՆN+ZXd}[vvPmZ`eX>lU\Wub|Ibqu0^լOWb[- 9u%#\\*Wk\EBokZ.<+[`]m D Dp˃rlZA=Ż+Thzzئ ?3MXDWoF &VoVևS%kl_g嘨4e47R#V4;4i?~qYK CkCW vi{VVrIkRښۖ f+^ X_XB $]H`gyZA@J#A)dh8D- #\Mx?{zz5PgT4;@kkڒe@,oò- bVb5$uJs'/"JO*xEg +p5Õs'GRg(չXd%#: kl]z Xܤ4+iYARh#6Jp}MW>2`T|V¬XS@`];v~Qm pIM4uSWXٔxNՇX\+hG^I!xUWI1֎Xˈԟ<>9Yy5•jZת-HX$MI~YLY&̦ XY`MYihX}ƻU4^_:Ec 7!\vkXIJUI[ +hi:VX9Ʃ Yk5VBֻV_777 !f,NcZ"RsZ{7 KS X5}vFQƫ$Vr]sZSZ::@hPIX|c#vil^+_6 R4|yp妅+5濄RMe4ue,uB*Wu0Hʚ+tV5h?>&< ٱV"HR4lan e O\+p}6 pҀK Z ;X YVYk-3\INV4ֳR! V_R%~xE\S4l]=@!dk 6Vu{k Zok Ik[Z+`9<4a_T،KV_B`k-kV =ǔ.)ah~ x J Wẫ=OffO:P5 `MMXWٴKZ*1ۊe Ao=ؼ!JcZ: xEFhz8bimexJy)Lsʪ LԱSl ,Uu:6-`c3@gmkk6! Zx9瓳WwFf(mލv+U+t**;S2ϕ@1jKnXY`-lJRט-jEwJ``{gه(JZA Q G+4,E fV#Ơi[ \lϪ\M۳lx*%:uڄ0 +`}՗ xAֵ00t l[]`TEXuru4kTW+44E ͧ? V]-HҔpeﺀ {2ˈWX3=լT Y xeچ5ok-egu6X3ZyiW[%`WniņQ8-4!^iy-q/4?Į-K5۩pK'V:P]55 `ʩ. KpJYkl#Ok'ݖC*Scd9;UV"\Vѿ~#Hǧh|HF#k 5rmvQF o0Ku A5 `M^ +k,O TY<3\I6kMhuV"tkCN] WWE&IBE,="XylNpM74jT^Cֶ4 bmC%؄eidTRRm Y>Ջp< X}ִ]0c .ZA>%2^?{{+y^R4JҵF,6lVkґX>4B,#Vv $2PeMMB ٦쩢&ʿ' `]?GyOڶhsk 4VBV"zƶO^JkaW_Ҕ)^h~en(_- hWO9-\]p}YF(տ\$: `eoHIg $րYߣϓV״]<`cHvmos! V@p맪\Ϋ:y}wL+BOB+i,}r1kp Z w_vBՄTת:H&ĚzM[,[|c||L"X-\m94ޫ!6 dq YqZW Z$LB-<`V]38^k_MpU%•k% 2d]u&<4Uvg 4KbU .?\u!U< ##Ry+^R4|bDvc`صӏ+]5#l{/v9:!0z)֤u.`.hv?po86 8 `{L]9Ps`-9X,ZA' T+t(׿: +b1AWOO_X3uϼ=+O*ʈuLTIj-+[ykTZRXsY7ey|?? glX,Bizaj觚4f}ࣗGDp+x%JcWqKW5箛y|ڮ<̀啵M \pݹrDiw] Kƪk QTHM6v"Ae6:45ŠMZEvΛgn"PZoU5qerQ46t#T%^i%x%J7+}?`7곖zmU.@%^]>er+=Di7 {A(a޺hpu\|X'sɥVP=}uAZZ|>Vb6mX 6ɦ,--Syo:oU;*XݬumrmѲrMhXlyZ+ɫ!^yLӷGa+tb^) kBh:>\ݼDU:y\MT-K[bޱ$-m[zRiJw-V3]OV%޻25#SKBC%:$]H'9I!Մ$5uЯeZʧcC XY+`Zu "[MhݰR6vQnm熫|tIyDoJ ^\7곆aX:idy,R%`o70i2`^.Kݶ:LUK^1kpAgLJ$IORMe1FT=wRGJY4sZyKV{J}[lv1u󺰷^{TT`=V}˧x%{<"xk})ah>p6* s 2 W*Jxkx:$Ea5WУ,ӪNY[72Z 7 {Bl^ޱdawp5l9tdX,53=L`*?RrAU>f!t Y48,:W `m\ۼ)`R{hht QU`J}1޷XfVCKo\W+㟅p ?ũ+ 14]UEAM=bUwU?rp޶(,+vKw_>\%ב!+=תi4!V!ބTf+`mM hcVU\VY x\45ٗ謜h 5 -Z\ZM#jh6ZhJRԏ^Sx%,0eAGFZ`}py^- Ѓ,zNXRD%n)_u!u«l;\sYW~xw1HʻͤW%df!5-`g{NXyi@V6 `Xi 5 `."0Vu5U,aU n +ZOc_xh*UV?p2\?ymdW*OcJ_ÕA<)fhrYݶlh鎥Cdo_zR)+!򄁭oo-uU]ŕˇOG5PeP*W8!kbzu2l;9N k\4Ϣ hu^m VoA`5T^,!6ZDpa֭W.cTcۏbsogsF``UFkO UpZ4"ắ|Jp2\Sp H3,p}>˹_gMci8IJ?he޻bD잦cVU>W:2&]~k?)Tcu]9]Sp6"zVqrֻ)k6e`mk ՎMZ X-W*cbݹت޿:`V\F+p̰\W*Õ)tJx-BAZ0E# 6 \O_gW +yy<5l(8 ;Xh(ӘՐM*5 Dk& HX'Y۰1Wր4]2fYB«ouVUSX<U,UoUG;NPNTʣCx%r%\ _RX 9hW YBݹ*@ʓUwfҏX3U! 1bڵ~`B%ee|dI dI~+lEj#cqv55 `.55 `oZ{.H,ƪ^wT !^UWU*her%\~6,G2\ |] uA6IXCx /M쳘)}^{Ji%G|b!Mnbң.~@jlHVm\K &$Ҍs oֽLU l!V6-`6ԕ=Z+jj*kjëu1Jh}dQ%Zgg2ZQT+a T9a GZl=J}>{}wZIt:4!˯ | Ȑu'Gl1f=raKh&ĚfJ+dk:~YњN׵%3 g}c.&m+յ@4tEʀ-#ʣx[͕`hhe2Ze%\ڀ2衖2P+] {+x\{[7)\%^U pB,ݝdꏋ+6V-}CӒlaT1\vA|aKim~z}~?2?8b+] y@« i渚gf o@ՄWU ;>k`+GJɡW9e@Uv}5>e~C-L@a)q\\mi>l[YBY~D@BgVN h\R>9NqOcִA˶̠&]j}^,@Z `]k·xSVN]:ciԕm 5XWj%eIhh7VU+UVU*h)V2@p\xw])(ECShxH0i(CK%|;24!kW$d?kzteŬ 6VNR]lUH= XTzV6ˢjoԱ5 `Zo+U؛Է ڜ`UֶEj[D /"h3]%ZDUt{U\ VVY}U.밨|h2\*hAHkxm$\eL?d,߱$)-Cl4t5=n9h԰J^p!T+m2u񬃝s Vݰ+;ޑ"*U/h}JE\}€\FhJR|ߕJU# R)z$pe2\:m#*P'=K*!!ˣnim|~)#v:bC 6]_smJT9K X)ke`I9YkB*`Z@V6UiV9K+5Z]}uէ Е Wz%ٰ_+UÕ~"Ң)|4peW= Y:%Ҿ{,c fO3bI}^,QB6R L6_kzdkSj+fF@=Y,^ujo؝j[Bqj^Dִ@_FO`TF+U=*h,B+iI=\@ R4ڥXW=4ߓ!].AvN^;H(C ;iPTVi8u!'<$^* : U)kv`cDq\qP%X&YB[DggX"WOxXj4ֳ#\F|*pALl&=CqJy|JHU.M^;W_n5>`ѷʼngs Y穩թd^}Q UV6,ט+׬VoVk^cltUuq湖 JVrƫ>U+UjZF@heeGZZU\+ !؊m\>yoWxo ˸"*M`L)ZWLu?yy6_ TlsWyևFWzj{Mhu9UT7U65ZBc@<˶@G2X]WFHf~jVy.V;cE AK(lFb2Kh4R!d PY>+zmƗSo[7Y_SWIW*\_6 UarU2˜$Zi*Gm#|Sz6(,s\9ZDUSWY} *+J}S{-ZW*?@Jp/AO0l+\0d%AwF;zu@{$.Q*?gjX%f*WUǬs댃VYY7J1˄W,^|l%US Ygw `}XM\ \Nh W+ جY]/ Tѷ.>9F Z5K@+:{RPI7}4,7!TkAj. ~eJkW/=Z碁UM ۮ;m1X:Zex{c%Xms\,םa%Z?y`W9˕'2Z+燫J+ªoppEJXl,P$`gȪB asW+z>2blŷ۫}K߄Rc[^U}jғV<($/؛uGZ]gkmV׻ˣvV*X@ 0Zeu-5.p=WrEI dNe煐]^~E8D EڞI Y:UDf{myUP5}͵`hAad IH Xwcԕ T֕MW߲ T mwkU<*W\4ϵ\F+Wr-UpZÕ {AKр,^J!J,CvYZ~ϐU{| ui ƍUe꟏ՆX5{Ngz%g`Z7_eoMYa`xuϽau>{~:$WZ*r AVWڠw\9 H˧hL6k8%!Y,=2b^WnʻP,]U]X/M51eܕk#sVMlحm,AV\}c$`mcdqBU V VY,U4˕J_8 Z"䞢aوC/NtEpSW/kz}/MtyuRyif)Iu& ku-U7I (, GX5uϽqX V^JeQX V9*hV.tUӽ8qEiHFf f}{z]+,]5 uGJe.Jس}+>`$ڐ|'5X+a*u o91XT1X8,V*mz!QXT^*gr \ߕaע ґ)kQd,CͮZp$ok\ߎgJ8Ʈ.XPj;5\C[zU}&kZ2|ZhM3 뮍DfsMp҃nom iGaQ 3\oaIY/w\V啯 O\A"E4Ki 0Kw3 e5FY>΍}I2 )TV}>sE_#l cַ*++3P}LKI<ĺCê^I\iXW(,ªqVVY9 *fUVuU|8mEi Ryqu^ꪁxp/ \+P2dns=NHQshU/l[exo.X׊ |ZmsT]\+$}w0O4`GaY;|U;5 AZ.Epml(vY1'xd+RuWk&k2 $3Y`m-cԪW)I{vƫd_f,غWqUuHUy~! 9hztWEtH< ~|mt'6&|Hm%T kŸ#S,!uY|@UؤSVV$9Q@_x#^rjV:qw\ys\J`հV& m?<}M hELaUn%2y~)K?ԆΤsV]_sM(7uܕ5 `MllS~=ƒ`uMi$>M`!Wj1K\ A"zԋuGFw6շWU@Z^/vI8u}A+'lxL M&ꃪ)i' +hk^rմ1m*WAI6aNmru:IWR,$WBS>'zYqYZmubM9e n;X6I4E' XmYCc-Y(WߖE`h٭[ Ԗ[qv9awC_Q})?f٨8IGU%e2Ϊ{M8]}tXO3{,ScpÃMYTצ,-BNU " Rl>ĚO?pHx422E7:fn^Wz]fuN ku&LL \!$`zx ܽn4BBk># aD:aZW҄Mq~95?_*h+\V[̵Avªjz=RXcYސXA/WڵoAAܵ1H(}+~]>Cs/鄘j^ڑj SV.;N06+)]}釃jzez1ze " R!5=O#] 05cXϛQ`״ʦme˪n?^.+Ujڊm2s YJW">+?}WE{  [r<* 4R]OX/GM} PH?)65ͣ+VVmX58|a܊EG򸫢BAiX_0P:Xy%RoT?Q ;(c: {GW&g}pvOYk  4]'U;˯%0wnWy{j*hu:^ףvT]>YҕR;YRiR@>  lF)"(6]LUiZTm{+r6_]沚AAcBBBxoGfl=>2[}pgUZ `]"aQtGZѩjAAO{g۪; Z1j~F|_/4,@껳ʧoOTFAAO߲7}s%oFVT[}Jx$7%                                                                                                                                                                                                                         zqO{*B%tEXtdate:create2011-11-07T02:03:53+01:00h%tEXtdate:modify2011-11-07T02:03:53+01:00 IENDB`openscad-2013.01+dfsg.orig/icons/stopbutton.png0000644000175000017500000000247411516152336021004 0ustar chrysnchrysnPNG  IHDRĴl;sRGBbKGD pHYs  tIME 57pATIDAT8m[lUn-ke)D(bTDQcP"U.ނJ QDc|1}BB/Q4DFcT hMUnK۝^`wrۖm4nUcmӒ$̜\nzU~`Yc3\9lo!!:8p%ٮѯطq ;]]EŎי5o3OD< Q wq=78E z5K*Nڊ@jɹ#x/;0R{poFE bfl& CSL0q!^YmIM+J0ȺTY~+5kT]+۶ ?{k.`"c[)p :2-O1XEup 8޺'p0Vn"}ߣ2ݽe" C:tSbXՔ./ZG;Efi˞y\0HgJ/XbcYwn;_uo8xOo͐뢔b1| f2Zz9&SCꎛOF ~~Ej{leY,u÷//68::Jv4փO_TmH*. ZE :L (ň^H3GFpyLfr*iPg_ҽxϿL݁h,~Hl1s!tm==+3L1]8;Hϐ;[P%؉i8f{)D?ΣGm=<TO(LqL|F0]N 􂃾q6'Ɍy]Zi+뿮t[d<ߐH{*Y^6b`یD#fmYxy"G)זL xZ~?0y'.3s_0NIENDB`openscad-2013.01+dfsg.orig/icons/OpenSCAD.icns0000644000175000017500000073202011516152336020264 0ustar chrysnchrysnicnsis32܂ ݓS%<\x֒]@ֺ˱Y`YؿYI$DZiNfeʶzQl鐎ȶ薔p͹*nr~nьhUOZESn  ߘc/Goq؝hLpQ7Ө|N.4sO8 ó]JP-jµn7}{7TonCNuukv|]>y)qepb3P\LF5ZR;H_ ڻX|ju%-BcFkdCnJ#NK=}KUuhDS90)NVTIGH=90"MHA;4(v5]7JA<5-'=2?:MB:5,/SZX A>:63-"4c{f#6Q;() $rv DQ9nl]e d{s8mk@\ w\>|?.Õe߄/!yvmmv6HKy>3zIil32 ÈjosC))BSbot^T;7L]m|pcC45K\ht~pJ3EVwfKUílXplȾtO_i]@ƸpPUTC'_lKZQ$"MŹyeH[f0?hȽvZCaX[ӼrCWPR{ɵ˻A2mZĊ!ssǿ~ƻ{}l|uu`lwtېpticw_ɔkxnfGڂ׏sneXL?n{XUJEKZgK?HIP[iuƞzddlvƍpx~P33Nar߅n_D@Wj|}gd`΃qP=>Vixkee^G~THMO@LTIQH2(3;BMVZ) GGYWDRr+&0AOHPK-(}JXWWQi)/Sad)%8,&ՀcQWVVUOi]LQUNE;72-& GXVUTSRJKLHC@=:61+%BnLUTSSQPPLIGD@=84/)#"OORRQQONLJGDA>:61-'  DZWRSNNLJGEB?;73/*% !BvYb\7RJIGEB?<950,& '+%r&aRP8KFDB?<951.'*,L6)BlMGE(/TIBA><952.(*HF?\KF(>99?SWN?=;852.*&HTYcgbWe7:<:9AD<:741.+#2S\fpnl]+/DB<;=82630-)%!JU^xurrcWKJD:;2.1.+(%$GObzwwrz?SL:=6%*)%"!]]k{x{n&VUCGE"$ rlwzs#`SO\M7fmupzO&QYb-;_g^s:J !&(0?m Z7$8j齑vmql8mk[ů>e/7dpgqoFbp}Tסow?R`} ÀEls%ߑ|Nc|!Bd]xgDrƶi~qm~vezu^Pzq+xzypsj~zs/w|p Tv{q)]|}zBruM uD :s^!it32k|Ϲ~y~޲Z;)$(,4:@DHMRTW^dp#pH7211.39=BGKPTY]bejlnonnv+؊XFGIFA:4-06:@EINRW[_cgjnswz~}{~/]UYVPIC>83-06:@EINRW[_cgjnrux|1k_c`YSOID>83-06:@EINRW[_cgjnrux|4hnjb^YSOID>83-06:@EINRW[_cgjnrux| @nvnhb^YSOID>83-06:@EINRW[_cgjnrux|>u{snhc^YSOID>83-06:@EINRW[_cgjnrux|>|xsnhd^YSOID>83-06:@EINRW[_cgjnrux| ?xsnhd^YSOID>83-06:@EINRW[_cgjnrux|v ȿݬM牅~xsnhd^YSOID?83-06:@EINRW[_cgjnrux|sUԅ~ysnhd^YSOID?83-06:@EINRW[_cgjnrux|tqQ҅~ysnhd^YSOID?83-06:@EINRW[_cgjnrux|rcR∆~ytnhd^YSOJD?83-06:@EINRW[_cgjnrux|{n\Qysnhd^YTPKE?93-06:@EINRW[_cgjnrux|}viUQ|ytnhc_\TLB@?83-06:@EINRW[_cgjoswy}xpcQźQy|tnieWNRZlZ@;3,06:@EINRW[_ciklmosx{~zrj[PzStvpd\{PTG;34;AEINRW\a_`iy|tldPVz~Rlgxi_YQF:4;FKNSXVXqհ}vne]De{yzkRef^VNB76EQNOrϟ~wog^S?z|yxtokgGmqid\UM@/7hxqi`VGH{zxtokihXHv{tnibVQbǽyqjcXM@^|zxtokhfb_]XI{~yomyrkcYODIs{yxtokhfb_\[[J̋}|3¾yrkd[QDE[xxtokhfb_][YURJUHǽxrkd\RGCRkpkhea_\[XUQMJJ:B¿~xrkd\SICOajea^][XUQMJGEE4zG¾~wqjc\SJBK\i^\[XUQMJHEB@=4AD}wqjc\TJBJWkaWUQMJHEB@<732$D¿{vpic\SJBJUgiOMJHEB@<730--E{uoia[RJBIUbrPGEB@<730-*&&cDysnhaYRIBIT_u^>A<730.*&$#%IF~xrmf`XQHBJT`qq;730-)&$#$&++?<|wqkf^WPGBJT_kD,.*&#&*.269ܐG{upjc]VOFBKU_i]#($##&*.159><אI~ytnhb[TMECMV`j}u"##&*.159=@CCڐI|wrlf`ZSKCDNWakx1#*-159=@BFKL܏Jÿzvpje^XQJBFOWbmvR&359=@BFKPUT܏K~ysnhc\VPGBHQYcmwl.:<@BFJOTX[cL¿|wrlfa[TMEBJR[enx9@BEJNTX\aax N~ytojd_XRKCCLT]fozHCJOSX\`dkgP|wrmgb\VOIBFNV_gq{ZKTW\`dhnvpQ¿zuoje`ZTMFCHPXais}lR]`dhnsy¿R¿|wqnmg_WPH>=IU\cku}ZeinsxTxuvjO7XbWPF:6AXhmvcnsx~n{|qR/%%God^WOD74Mrzny~q~[/#*13>soic\UMA2I}{sۿzE#*147;>r{rmhbZSL7Vtɼ¿n6&147;?B@p{wqlf`YRE{t뽟佻B&77;?ADIJwzupje`Sbt͔ظ¾~}J5@ADHMRS~~ytoic]ɍi¿~[>GMQV[\}xsnc⒘esOR[^ah|wnei]ei{x哘JyoŐeJ S땊~}O͋镊 ~}}Pڐ~~}~Oݑ {~~P~~|~땊_}~~}{{~ym|Ȍ镊~L}}|~yvow{򚖊 ~N}}||{{wrodļ|w}~~}J|{{y}~xsnk^¹|xxȎ|}|5zzyx{ztokf^i~{yq̀Ð\z}|{zyyxwxvqlgb^U~zwsnۑI~zzyyxwvuusnhc^[M}zwtnr̀¼񙖋vyxwvu3tpje_ZXOp|yvspg΀̀ Exwvuuttsrmfa\[ZVe|xuroldρ΀̀ԑȐDsuttsrqqjca`_]\a~{wtqnkgbox͂΀̀ 镍Eqtsrqpopofedcbab|zvspmifbdî̓΀̀הtrrpooqtxnh+gjb~{xurokiebZo”̀͂΀́ΐ}npoqtx{{lm)aL|yvtqnjgea^ToŒʀ̀͂΀󜖌Fkrtx{~xqpWKK{|zxtqolieb`\ZMy響̀̓6qxz}rOOVW}}zxuspmjgea]ZVVE ûˀ̀̓4{}^U^`}{yvspnkheb`\XTRPCf ˀ̀4xbe}{xvsqnljfca^ZVSPLJ>_ź̀G~|zxusqomigdb_[XURNJED>UֺˀG~{{yvuspnlifeb_\YVSOKHDACFJȲMtxutrpnkifdb`\ZVSPMJECBEHNLՐKorpnljheda_\YVTQNKGDACGKOTSjIomkjhfdba^[XUSQNKHECCFJNQUY]a񛕘Dȃdhedb`^]ZWUSPMJGDBAEIMPTW[_detܑ>Ι]ca_]\ZXVSQOMIFDBCEHMOSVZ^beimpyǏAΘX][YXWUTQOMKHECACEJMPSVZ]adhkptxzt|?|ɪsPVUTRQONLJGECBCCGILPSVZ]`cgjnrvz~sr<9;*y8vulcZM@?O]]_yikfr|vpjc[TH=HKIFC@? ><9876517yrjbXI;Aiugej|wqke]UL?@HB@? ><9876546%tRÉ~xpf_bohk|wqle^WOD;H@??><987653310.)Sȑ}|vqlf_WPG;DH=<987653310.,.Uҟ|vqlf_XQH<>P>77654310.,*))#2V|vqlf_XQI?;LM453310.,*)('%&Հ8¾zvpkf`XRJ@;EW=010.,*)('%#"#eZzupke_XQJA:BTP-.,*)('%#" ) U¿~ytoje^XQJA:BM_8(*('%#"  Y}xsnic^WQJB:AK_P$(%#"  Y{wrmhc]WQIA:@KWe-!#!V [zvqlhb[VOH@:@KTjE  7 [¿}yupkf`[UNG@:AKTe_&Y|xsoje`ZTNG?:AKU_r- Wzvqmid^XRLF>:BKU]tK Z¿}yuqlgb\WQJD=!$'()% V|xsplgb\XRLF?:?GOXaiW!$'((*+2 ^{vrnje`[VPJD=:AHQYbk}m !$&((*,0-IZ}xtplhc^YTNIB;ELT\eoy:$)),/247<-ƺU|yuqlhc^ZTOIC=:?FNV^fpyH#-/25799CKPW_hqyY&4569;?C8pq˻`|xtqkij^A$]re]RE>ES\bjs{f-88;>ABGBƾhcjU¿}zvrmodE =rld[OA>Nflt}w2<>@BEM?tu}ñvfic[|xsrqM %xrjbYKIHGgHB_~|ztWUQJHV¿~{wxb%$-//8h?IGfHC[~|~|ywss]KRi{wwA(11U@IGeDQ{{xv}~|yvsqolj|yuyJ*ŷ:JGeFMxwusqwzvsqnlihf}zu½i@IGcwvsqpnlpqnlihghhi¿}{t¿RDHGHDltonljigjihghijjhpF~{vyDG HCcrkkigfdcghijQljt}zxrCHG HDWohgfdcdegjTklmnls~zxswIGEPuuwxy{|~rprrs2wwqlgb[c|yvspnkfw:JG Fnzy{|~}qs6tsutnid`\S~{xvspmjgc=IGHD[~|~us9ttsstrlgb]ZM|~|{xuromjgcf KFGFIy~qts8ttoje_[XOi~{ywurolifd\p j?IG HCbtsst0ngb^[ZT_~{wusqnkheb`W| :JGFJzrt1unec`]\Y[~|zwtromjhea^\V| CHGHBdqut1usgeb`^\Z~|zxvsqnligeb^[WYƻh@IG t3vx{mffbaeZ{}{ywuspmkhfc`]ZXOe˦ :JGDHC\|rttvxz}|ihhiR-o}{ywusqoligdb_[YVTIgΦPEHG7HBxqwx{}vmh=% b}|ywusqomkhec`][WUQPBr򼠸;JG8HEMv{}h,%+&b}}{ywvtromkigda^[XWSPML: IFG6HB_}7"..iyywusromlifdb`]ZWUROLIG9` ;JG5HAvW.,i{utspomkigeb`^[XVSPLJGCA5XHGGD\otrpnlkigeca][YVTQOKHEA=<6M:JGPHEKqnmljhfeca^[YWUROLIFB?<9:>AUCHGMHCSgkhgedb_^[YWUQOLIGDA=;9AEGKORVNDHGHHCRwX]ZYWUTRPNKJGDB@;::=@DGJMPTXXs<:;=@DFIMPSWZ]bbߤ:JGCHEHhNSQOOMKIHFDB@=;9;=ADGJKOSUY\_dhkn;KGBHGISggGLLJIHFECA?=;:;;?ACFIMPSUX[^bfimptvzr:KG?FBSbfr|Y?@GEDCBA?=;:99<>@BFGJMPRVX[_beilorvzd:KGFEJ[hhfK77==<<;;:*;=?ACEGILNQTWY\^aehknruy}z8JHG KQOGzD9CA==<<=,>@BCEFHJLNQTUXZ]`cfhkoruy|:EJG=HILKozGFLJHGFFHHIJJLNPRSVXY\_adgilpsvy|J=JIG>HJCGnpMNTTQPQQRSTUWWY[^_adgiknqswy}v==GJI=KD:[Ã[V[]\\[[\^_`bcehiknqsux{~tF:<=:R ՝q`aeh ijklnpquvx{~ܪvv+ymknrtvvwyz|~&ή{yz}ǵ  ׽gaeghjj%Ɨe># !$('*.4@Rk*xE$"$(+.0358:<>><98?Oq-ąF' %('#!%(+-0257:ABEGILPOI@J 4_>6;:51.+'$ !%(+-0257:<>ABEGHKMNQVR?2g毀WKg?fDCB?;741.+'$ !%(+-0257:<>ABEGHKMNPRSZU+){ۊ&'MtGLMDA>;741.+'$ !%(+-0257:<>ABEGHKMNPRSTW[93z@OIUOHDA>;841.+'$ !%(+-0257:<>ABEGHKMNPRRUVWX8%Wr+@oFSVQKHDA>;841.+'$ !%(+-0257:<>@BEGIKMNPRRUVVZN,-@UJVTTQLHDA>;841.+'$ !%(+-0257:<>@BEGIKMNPRSUVWWZ9)+('rBGQVTUUPLHDA>;841.+'$!!%(+-0257:<>@BEGIKMNPRSUVWW[G)+($#PEVU;VUPLHEA>;841.+'$!!%(+-0257:<>@BEGIKMNPRSUVWWZO,+(&#!drHVTUV;UPLHEA>;841.+'$!!%(+-0257:<>@BEGIKMNPRSUVWWZO-,)(%!zlHWTV;841.+($!!%(+-0257:<>@BEGIKMNPRSUVWW[J,-*(%$ lIWUV;841.,)&!!%(+-0257:<>@BEGIKMNPRSUVWW[>,-+('$!yGWUVW=SLIEA>;864/(!!%(+-0257:<>ACEGIKMMPRSUVVZS1/-+)'%"9HWUVW>VNHEB><:,$,9P< !%(+-0257;==>@CEGJMRPQSUVWZQWSTVZD01/-,*(&#! KTUUVW?VWTGB2M>52,%&)*-012>P^dffdb_e:3UXWE120/.,*(&$! [ZOUUVWV>WWB|_5:50+#%,+,=Vfifca_^]Z`"I@2421/-,*(&$! |IVTVWV>XRx8A<83/*!5Ughdba`_]\[ZX155320/-,*('$"YEVTUVWV?UVIW;GB>;71-1>==;;:98653210.-+)'&$"  wHUSTUVUTSR9QRRPONNMKKJKJIIHFEDCBAA@@?==<;98765321/.-+)'&#! UISTUVUUTSRQPPONNMLLKJIH)FFEDCBB@@>==;:98764310..,*)'%$! wHTSSTUVTSR;QPPOONNMLLKKJIHHGFEECCB@@?>=<;:98654310.-+*(&$#!  JRSSTTUUVUUTSRQPPOONLLK/IHHGFFEDCBB@@>=<;:988653210.-,*(&$#!|ETRSSTUUVUTSRQPPO8NNMLLKKJIHHGFEECCB@@?>=<;:98664320/.,+)(&$"  KVNRSTUTSRQQPONNMLK4JIHHGFEEDCBA@@>==<;988653310.-,+)(&$"  *CSRRSTSRQQPPONNMLLKKJIHHGFEEDCBA@$>=<;:88754321/.-+*(&$#" sFRSTSRQPPONLLKJIHHGFEDC)A@?>><;;988654310/.,+*(&$#! " PNPQRRSTTSRQQPPO>NNMLLKKJIHHGFEEDCBB@@?>==;:98754321/.-,+)'&$"  #CQPQRRSRQPPONMLKJIHHGF.DCCBA@?>=<;:988664320/.-+*('%#"  !}CQPQRSRQQPOONMLK8JIIHHFFEDCCBA@@?>=<::98765331/.-,+)'&$#! $\IPOPQRSRQPPON@MLLKKJIHHGFFEEDCCBA@?>=<;;988654310/.-+*('%$"!( HNOOPQQRQQPONNMLKKJIH7GFFECCBBA@@>=<;;:887543210/-,+)(&%#"  ( @ONOOPPQRQPONLLK JIIHHGFFEDC.A@?>==<;:987654310/.-+*)'%$"! '! ?ONOOPOPQRRQPONMLLKJIIHHFEEC0A@@?==<;:987654321/..,*)(&%#"  !%(EuAN MNRSTSQOOPOPONMLKLKKJIH9GFEEDCCBA@@?>=<<::887643310/.-,*)'&$#!!%+ ~aDMLMWaeedc_ZTQTOOPONMMLLKKJJIIHHGFFEDDCBA@0>=<;;:987654320/.-,*)('%#"  !%-QFLQ`hfdba`_^_S5RRNONMLKKJI?HHGFFEDCBBA@?>>==;::9876543210/-,,*('&$#""%.BGPXcgcba`^]\Y^>ESMNMLKJIIHGFE9CCBA@@?>>=<;:9887653210/.-+*)'&%#" +82-' #&/P]`dba`^]\[YV\(4SMLLKJIIHHGGFEEDCCBAA@?>=/;::9876533110.-,*)('%$# !@740+$ #&/ ]q\Zba`^]\[YWVTX&QLKKJJIIHGF'EDCCBBA@@>==<;::8876543210.-,+)('&$##" @?;74/*" $'0Hq"]\`^]\[YXVUTSQ  MKI HHGGFFEEDCCBA@?>=<;;:9876543210/.-,+)''%$$ 9F@>:73.( %(0&O&Z$^\][ZYWVUTSQPN  PKJJIIHF'EEDCCBAA@??>=<;;:98865432110.-,+)('&$"4MDC@=961,&%)0*Y$_ZZYWVUTRQPOMN$OIHHGGFFEEDC$BA@@?>>=<;;:8876543310/.-,+*('&%!+7RIHEC@<841*)1, YYWVUTRQPNMLIN'KHGF,EEDCCBAA@??>>=<;;:98765443210..-+*((&&!.CA9VNLJGDB?;84+3${KNTTRQONMLJIGJ,CPFGFEEDCBBBA@@?>==<;;:98866543210..-,+)('&!,DCFG@ZRQOLIFDA>;3)ZKGHOPOMKJIHFDD< 2^h^IEFFEEDCCBBA@?>>=<;:98165543210/.-,+)(''#+CEFGJO+Q[VTRPNKHECA<$|5 HFEDJLJIHFDCB@C=Yd^\aWDEEDCBBBA@@?>==<<;;988765443210/..,+)('&$(DGGIKLMTA`[ZXVTRPMJGFA&"CECB@EHEDCB@?==8@R^`\Y\\[^MCDCCBAA@>?>>=<;;:998776543210/.-,+*)'&$$AIIKLMOPQVU89e\][YWUSQOMKH'o&>C@@?=ACB@?=<;98MXTUWXYYZZYEBCBBA@@??>=;:688766543210/.-++*)(&&!:LJLMOQRSTUW^ZA]d`_^\[YWUSPOL,4 4C>>=<;>?=<;99:MSSUVYOAD@@??>==<<;;:987765433210/..,+*)(&&!3MKMOPRSTVWXYZ\hhdcb`^^\ZXVTSO3 )B<<;::8:;9:;;:=MOPRSU E?@@?>>==<;::988665443210//-,+*)('%#(KNOPRSTVWXZ[]\ahhgfdca`^][ZXWOAA: 987799:;;:;?JLMNPQQRSM??>>=<;;:984766533210/.-,+*)('&%!?QORSTUWXZ[\^^akkiihgedba_^][[NY=98789;;:;<:>EHJKLMNOPB>>=?<;;:9987655432210/.-,+*)('&%!,QRSTUWXY[\]_`bmomljiigfecb`_]`Jx88789:;<;::988766533210/..-,+*)('&%$"9887765443210/..-,+*)''&%$ 2IGHNW[\]_`bbfqrqpponnmkiihgfdbdMÊ <9:;;<=>?>;<;<<;H@A>:78;;:98877665443110//.,,+*)'&&%$# ?IILMOU]aabckttsrqqpoonmljiihgfaa =:;<=>>?@A>;< ;?B>;:75998=7665443210//.-,+*)(('%$#"+JILNPSSV]chqwvttssrqqponnmljihj[  5==>??@@ABC<<;<?A=:8526876554431/..-,++)(''%$#"!?@@ABCDEA;<;>?<964028656544322100.,+**('&&$#"!#IMOQTVXZZX\xxwvuuttsrrqpponmmjf?A?@ABCDDEFG=;<;1=>:742/-6654332210/..-,,*)(''&$$#"! 3QOQTWZYWXW^yxwvuutssrqqpoopcj 4DBCDDEFGHIC;<; =<8630-*2531'00.--,++)(''&%$#! BRRUWVUUWXVc{yyxxwwv uttsrrqpprb GCDEFGHHI=<;6<<;:741.,(.421100/..-,,+*)('&&$#"" !NUVURQTVWXVh{xyyxwvuuttsrl} >GFGHHIJMC:;<<;0853/,+),3110//.,-,+*)(''&%%#"! -WRPOQRTVWXVn{yxwv uutssue4#LFHIIJKLLNK;;<<; ::741/-,++0%/..-,,+*)(''&%$#"! 9RKMOQRTVWWYvzyxwvuttqyyCJIJKKMMNNP@;<;:7320/-/., **)(('&%$#"" 3AJPPQRTVWVb{yxwvuxh#OJKMMNORG9;:;;4321/.-+ ))(''&%$""! QBLTSTVWVl{yxwvwt{4%AOLNNOPPQRO::;::;<=?8532140*,++*))((&%$#!! 0ܞ^FQWVV\wxxyxwzjRNOPPQRRST@9:;<=>@B@6556% .)"(''&%%#""!4XLYTjyvxyxyr7UOQRRS5UF9<=>@ACDF=96,(('&&%$##"! EyJ^vwwxxyzoe LSQS/TTVN!  & !#$&''.;FMRVY[ZTI2`0 *-1  '!"$%'()++-17=@A?@5;K 3p ( !"#%'')*,./12346;93^^"H ( !"$%&')*,-.02458=<3K!6 & "#$%&')*+-.02359<81AE|H !""#%&'(*+,-.02369:41KDy g'!! !"##$%&&()*+,./136884/8aʼnSDEQ ֔S("%&'()*+,-/124552.-8T 'դqG)#%)*+,-./--+*),6Jm"ϮoZFA3/01223CH[m ͂ t8mk@;Px`E* 7n伄NVx)Bf _$ t+3DK>+X /YlommnnjY33n 5aojfeffeegjoa2}0.bohefgggggggggkpZ(_dhgggggghhiiiiion1Yiaiggghiiiijkklknx>v_jghiiijjklmoooozO_liijkklmoopqrrp~G^mkllmoopqrrssts}>`omoopqrrrstuuvv,erpqrrsttuuvwxx|wjtrstuuuvwxyzzydnvtuuvwxyzz{{|{=wr0_wsvvwxyzz{||}~~}MR$Ypxxyzz{{|}~Y_h^~o|z{||}~bbiu}|}~]j)klz}~ZwU] ?~4fDӃ *6·Ooc擘  ˒_癝 /Аc㐓 cA|^*W۶~|y~#]ackը}~|zvL ;[anjbިx}zxu~U9cp_fmnodw|xux{OFiphf[hoopsd쪒vvx{e)Pyyxvt`hqpqruiu{e1;}zyzz{}qgsrrrtyfe2?yxzzzzz{titsuvrk"xyzzzzzz{tvtsmmʊdyzzzzzzz{ug}䞁yzzzzzzzz{wИtrDxzzzzzzzzzy~^cyzzzzzzzzz{v=u{zzzzzzzzzz|q~yzzzzzzzzzz|q|zzzzzzzzzzz{s+xzzzzzzzzzz{ww(xzzzzzzzzzzz{u:|zzzzzzzzzzzz|q }yzzzzzzzzzzz{sv{zzzzzzzzzzzzy|Tl}yzzzzzzzzzzz|q]yzzzzzzzzzzz{uFxzzzzzzzzzzzz{w>*xzzzzzzzzzzzz|rw{zzzzzzzzzzzzzy~bcyzzzzzzzzzzzz|q@xzzzzzzzzzzzzzxc{zzzzzzzzzzzzzz|qhi~yzzzzzzzzzzzzzy{~R _|5 *Wy˲g8 )0////0ic08 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 $=?wm!i3ЄjtA)wM;rF܃2.HŁ~eFr\kjʹ^BI4tj*9.-m&]Re1^'Tsg zlnld8w7!_mH{ԩOF\8>eXRσ.խI(LyV2Cm(Z uxXIE |\Y"үԥ_gQ2-%si95owIΧeRJMKc!`W{)7ZsXuYu:0?.i+4M:Z Ine96x݆։#6ls0ҿM(t/c37[䥡ɳ62,1b~8yR;mاiv0K UT~!ʢp<)"թ,YWk.I'~ 1,NrSv/0uGOGx}~ *ǪA,AnU ^KSW^\>ʙ[id]e>*!ZXU{ut"O_b΍ ='p&{ *~sߊ[K(nBUXbgk-Oܠ~G .o{LZX_~31OrS];VkUZԧ_׍PzeMPYn;ǁvc\4\M+g$K\&zD9W:|X>/I(6eU3AHQ"#,kp?E ǁ"u`Nq[9} >+4aI?[a7݇0OlccJPf2F^7p\xrO,oH&X r48kR)> Է,^=+~D:%},c0[J?Ա%Qǭ(f.YxY0 /y :XᠱɈ$l Aכ( n*/ #Zh^EqYm<$XuVĦW B$K%Y&Ch~hzmgdn뭬LV؏gcFg l4 FN yG Ldb|w1nհ}mq- kCr/&3 N \~O@ pjNnqhugTVU:3pZD1.V,[h])w"kUD(Ģ| .lޱ-@,39a{H-EV> K[֜-d7(c4#.Ε Y$*cZW7X ,Mi9`+[JʭZԾvf~#c߲]2/cZsYTd^ W-/"#(7# Z4 O6"&jlRu}j#dXbiW<>ihf%}#iܭ+L]?UT5'`aC2G*MnN3^, ݁%m <#.@D&Oc69s=SF[\8V=Y[] LkiMaP"L?NmQ9A83&@Ɖ섡rt QǢ8Уމf 8U?5 +pUu5n'6YYs+/u5Rofj$<%J3}ȶY)DuH̪B i?|vBF]52R;/WF.}}pwE^n};f`X"`L.l`$cz xçw#x)_ԗـfnǧ 4pk¢I/sn(0 i8LXOγζl(=VrMJAFѵ,ұ)δ0K ײΡ> tsl'FE=Q.J__) Fkn \2T݄ء}I̔z`WCȍBq5,?5#U-j&cq=!vڸ d "\@)7 P"|4KF9S0ZhvKNdjz`Yڛam( 覙cΔ4_?2cl 4" \XH־b _>(+ !u9 @+@0}~?:V0pSA3&9NN'*%n*`TjٲpJ-/'=#5o|lg[\*bv3A;XI~h(w|^}2MYa U6iMwcq]9}' R2L `ާ]SlgkTHjn;F1r_6ݩ-[tNN ?͍eF[M # ӘfHhHT,iHg["]􌏃/o}y] \K]HBd,:)\ >9܋͋AMD!sC:863hOKqqJG\k]ay6&ah ֢b9`6o9 _CRK5a?7 >ZL1q| |(?\jwKp3ܦhklFI@F,A0#8de? mfdpe%m>x(`{qr_ciPZӛ#>ƛ?mO i&qt gi/ )&!5?~$+oLALښzSJr1:i|{7 QكMcPbljDDYj7Rv23=Fa%UD %QKu,~T19w-I`lc |]1&탾nrC Q(J[bwdipX7#xA[iLc3 2$uabڧQc-ZQg/i"{b(_Cw+[Vk̷CbbYÅ-)ڻq|b, \[]T#]ubG}bG1Maj`ieiVR{Qר\XFrJ^(%LY|W9$C4/`kpM+uUc0JzՆ=:TЍvRC(tf88M@AIoXi}ihU˃ن9 4biZ͖ZuRnDu~&jQ^ CuSaX7q}BN })&5>Y$*pC㙤75Ho 4A>T<㹏bܼ"Y*W/Zo.D~eVƯPGq] HU4 $Ջ2 C|D z_ǫSV.$bIlkpnzB#2Ӂ ) 49<-ɸ7vs&=`-ƚ|+_"E]%"+F;)c8>54jG:6@5/к x h1KImS3JI7pe㥈AXLH2+DN{4jQ7cAmz !VOWwc*ԶS#mM-?I3@$˒GY[1(_*ifE>m ~q0mn+7fs4dA/E}]>8UZwԐOpH8|0sLjeMWd=yі ^ӅG&-dSBY.%|D82[߂թ C(0Xg+ZP4qԼX[K3sˇ7஻"r@->(*YGԫIW^rMj.J^KM95zPj )e`דՕp?HVLG &t lKnX/ǀ"m R8q!CH`ABߩ.x:UjLCb37~!0J³0pɀ:Dw3QL~~vvSwRcYU6tǽd{| ׉O]F&kqME$lUXZvi8wmf-va7s:r7v*L7P(MhlMp%^u5{-0A=Xz=)Ɔ+Tȶ,+UM6} AZnK H}:3 0V9v5]WQi3&'kRIjW 2~C7gO*xou:n4CrJ%,G#5W36^vKQ@ȾU`Lpp-xp o[MXfgJy}۱ ̂iSV ; t=yW `wL"N_NV!UO&xya,Yˈ[z >553pgǨS4ZM!cXSfL"W#a$P4r  r-+R-TH殼 a)S*4sڹ<1$L @$K]`.HyTbUl-@]DJQYxkgˈd sN35T"$/aepL$ Tjv=>..I݋@w =]$'MPI`vL˞mJţp@U 팳@C𩭼VVOda?)ȁik;}ĸj:&y0\?ByQlaKPznW9cΞG_EKg Ч`9;:0 .BUwP4S}(d'ϝ}qM޵*10/JM"#7}6OV[p[os7ad\.d%q*UjN[ K^EO^`@vR٫Y/5E4Fdɓ(aVC|l7y?"6>%9z|}t;CH$ٰhm@8RMBǃexgrP\1/QyzjbNuwmZbB?yyuyߺj:+e i‡UG]z|Hl**5bI9u 6'1Fڋr\D2[z2TRpU݆BU'cY*WiQ[=&_(b #%D:+zSE0x9>FɌJ& |561I*2X`vj<'m$' 6.>oN%>&09>nb G59Hj[ѵ-v5B"e+vl,? 'O ,=]l0#dRKksLA_sC<莰! ZdClWs>_8.])%7pE~gmTR Xϗ3<!UAn O2aq'v2G_liPGm^(Pqh/ʖ=ar6xAdzY.[9$ |'{2(@ WEU;;R+.B?uÌѯY%﷊dLVRgVv1HɏHvp26󍗌C]JϘ9LVR%_0d[msa+a~;rĠ$dAV6,`]'"8BF'zoǡ#w_:ooA[QNM*U#M4cIEP%@d{o2+ ='򞄭g wm5Up~8Eqbd4'׷wʓQꗫxWj/GbMFO/R2ӳa_3U۶ZNQ-OFq"V԰Ox=&Qgbr0,&fȰm)++_T iZ)5Dw{ŃUiڣ^NE;9+'r!Ι/ެxAH$pˆ"IF2&ƍt_Mx_$^(Km@dm2-a %u .ڨ+xn%/(6A֊OTw@'GUgm"Jr4tgUkbYHڧk6#~ 7,R=2uic9# p0e,zTEoĦic!96j250VrIYur4XHHj#3kwcB`S)GޘZ ;:Ė1jP2QE߁Ev;)؁sQt^~{L)3 ! Ce?7=U.+,z0eSLߚ6c=O->DMJݾW0J@Ԋm,p  l,c0EyHx}U3-_di!qѯ\aR"tOoMZ9,jrq,\h)߷fB4^H8ALj!ź,I1pu+$:XXO1~Ez#N4Cض@OGrkS b11SPK#zgkbX >[pjF.yZfڷi W.Lp? n(BlZ,bSKSl<;7{VlR_%])voq I|Z<k|`ܰ?@*?J]֎9#R+O4ZUdU A|hJuZOɇ«ӎ튏|B fŸ6XTAuv_h rqtIୠyleFMzVє*%I:ecz zi^H#&Rb ,B%s< yҥOF֫i.ANBdN|VmA~c;B=7hldE $heݙ4UWOGŠveQB @oFo r> Fl0 OB r#%f I*Iw怶m'Yҟ 2J0|r5Q` krO^zQݘUƩ|3YQ|BTGr퉪J'XT68PdܤܜaS%w6n-s(6@D4HrG>WRzYSwdzD}Qd `DVJjz`fu*N1۲Ȑ֋DgA֞_+'oO'v_}VeFS~c&e\znʅ..>;:<)0SbVXAAH^ϭ Tnk!% jnmD)eaLn;OZYq\-I}[y9!bcUQ7xqѫTpaĻZ0VŊ&wXr|ew1AlYXOfTU]h";iC6A|&N&zDښhÌNWf^+9ʋw;ts8}aUeڮ;"0w! RCS_XG^_Jړ{Xtw^Ӳa/ց/^J%WiQ٩)NJchg""ٻ Ev%g1&ZU,6c|!u^ri0,wGL)&wC6b*“ġLK`ɑcdr11-ݝ>N[H"E4*}66wg/Úw>CS1,"C{T׾ ϵj8Jo$ [PخVD};k怜z=[=" gy=? rEҩh~Dd>vǨMĺH<.Nj࿜^C'(B:J| {4G'zif޲FMzVd܏~lpi \qfb#]t6<_,lxp {% kUB#BA 3KJyxɁy7X;&)Ge Gqͼ(+o+&>p ӞQ1@ EK)$W"1ZEb0 F.D>/g%/D;Ao%VUk^KF ]r`qJxԋQɬ?kפvikw'p.?W89$t Q_Nt֐Oy;:ukzlM PH;IlyYH{7c^׮a0KOq4tuݳo$oJȝY6%9aďT#8N~h jq VЁ@c9r5ӻ0hgK^J.k \{Qk?] _u$QZ^?r 侤Syk-(~S[ 5%bVʿv\ɮBnTZ f/*ccV3lf$Tq7]^y( P*/ g:opSϊfL8L"iTB#Y%q3T,/,|2)|j FgƦA `+ d8כa?gG<ѼhiFE$G[ckzlZR(5+]G-`#"YLH.|!=sPӢ;ؑ#qMr1`FL9 +sFAb~׵>.\.9P #z&ú)Loe #bjyڕR:RfM.]uP I.u[Qg7(Ub/oίagn³-/ltGKp[;RFyR JdH@uU//{ ~*|%'MGQzƅ$>~}sTv:MIHIb8O2Y_~Iw89OGDPo'lyeʜ`'$?=4Lq!ge>cB!(gd u)#Y ʺB q%%^}>Y8jk1J{CCC39AdYJKC-qLX95-^:Qq@X J>I8d@,Ie?8,ސ\gן9E0cګ8B@ Opk,Yvl?ۢc#=URIngmVXzu{rd& Z!IC8٨C*!EF)| DQQ>k ^^#*s(cv0Or˔$peTxY I‰RCa,GLv ^=gD,bx` g#ꩂShv -̮u @:N`SSl+͍{1`Y^ /${&?"LZ( L Ң&T?Qi 긘B_Gxͩ1zD\ x j9VsoGNh5/Ԉy,a <%yf3S R27ีYIL/8| }L!t2=/#ur9u+Ro-Fe'd_,@s;GP'Zu8ɴfWeQRzZoOp/$ͥզ2j2PfXn /Tnƀ3w hͬ3} 59]y&5Jg>J,..hˤ#| 2ٹ_ߚw{$`%o_kx˞0KNXV,]Q]% WfKURZA+D٤CВ負Y7B밵(t83t=>})էN_K'zIUq;ߺݼɛx3 zBش)??TDq:B¬;+ eJ,߸W9Ȅz&yhmR2ї'.PIlk55wF4D0Faix3Fzo3܉$u鎰hNFbc KP*T|E6Fu$+դ+/ "{kK &n?QOeu8gBM29 uk9Z1> R4J jCpjҬP~rp*R5~]˸܆ccHDڗ;lr &-ղ2bgn撑MFhw֨q3.kj&jT,v[IPCϳOvO!85#%;Efs2?qT ʕ`짰ۘyE7ZxcfOJq3VckA8V"JaF. oxFvI/])v`F'칮6n8;#`fxY 5O~ô݀-7dK} 8lǮ^2̴uklkcMyŨGo8+p?Y3d-*щh-jF(s4友i^ y<MB"UI;_*OvSs|Ś3mi4YjSm埘`UG>SN8k(;,AEX"/'dI[]R w 7_&E8g8ao)KnPs3:LCT/P5!u3!8Ycl)BxFu {UVqc\H[$Neb.Q7P/YYR)Z{c2^.<~r!-uȻe]8;%R9K'ր{  ?^zJaLocϠ8»l@DYW:7\)?/sF"m8V[v쑂RG]tukv5{ =tim\twĢͩ= $ qǕZ6d8S c%7PMJKb|@DVGMm"y1Hӂbw0"C.fkRgŘSYN|aEl9X' ʮIb dW2$ϼeۗ{d(l i7A Q@9s]*^'#F͓oXS Y{T)-b{ '4BoVѧ_'mJa8(ؗ#Қwx[.XL{r.oq2i!J_KY_<7;ԹCPJE^˒zQ[7'Ba̝dީT2lE!2{pR|y AJdƲ3֐>&@i6"mg>b7n f׃_XCW@JS¹$>#J׎Y6#q1TqlA`WbX7tBC x{ሮmj)¿hu=qܰ^hv*f=|BfFU65,gތ=Qٽ{ Yai+Ie]^ `P֊" ;zPM!8*t ֎}H!kL>M+~Yw~:rw{N )/8]Q /j=Ήrx68-ž 2˧?#{ӌq }x$r8TM*HIKBo s<5^}J9s% v"f[ -~G$>ޑA.QjB"܌5DgCԜ3yס sE &ܸmtg:{جdB *ET(dJ5A4.Mi/X+iBȽ O- Os i5la*/v9NF]-%InX[=ԄZ(D!rGݛFӝ}q(Vd5)n~ -!iS#m,՝0#`sH$jq*niɮ ` (o< PSjbNх^Y Mq/QF U$LxD1 QG,Ȋr -vPry c4z" Mzp*o~ j=/>}qKLNv-*dԚNnRK^s0}xJ+N{6]/wRCo 'OFA!cjkѕ5_HM- # qnBl_`7A^>PRi608# QEeym3Ԑt+W(T1Ie쨤ejW`K+DV}g d;̌[88^B$ĩjk8 /n-ejGKY߻Yrp /5 BY&p|Z#`{ IϿ2bL1A%K?A;c O ,^ZЫb'TtCj$0]T20"L dp#8ޏ=׃{~$+Z [h ң]#^QC=;>ƸPN6oJ*cdXTi˂nG\"OĐhXn Ю様~=kbOrNd]nh߈xK)~k PZ`t-;"ə$j1a}A spU]?EIJ/N+/rs^FjQ=nh ㏺BzRQif=223O`ÔǣWv쀰-CI (BR5옋 9AY 'f`橸). 0O`K><%OG?Ib!%bSEwVB&h}M-SFO[쑺!iȱ(KDFV ÃCJx9W橳rf^ {+Ml4uvmiߎھm]QA_YDw^SPˋ`ƤkI0J"siįaKnX=X=&dEq|L9qٍV4(2l)0Xꢶag`N W/H'M~m&y:b҅@QıL!5kU-ٮSPL CFh8%) T HUB/l+G;hjK9[=VH|< :!p26LSO:yQPpͮuMѡ1ԎXnۄWvetnB06} ba:b\/3a|ˀ4eW55׏9m%u 7XVu)Nwcƛ !J3Y(>_,*2_/veDMy>Έ. 4NOR p lfI:i6ys`U Y&ƪT[EjU߷x,mM}xv.B lJIׁ0Ů[yV֚{(66{R,a?ϸkr璞3:&T(x l7J-IP~w4䖘{c/jߞi{`\ft# 47ƞ q?v6h3>'a})}+SnV4CnZx @4>6ʻNVKj\Iw훽/mLb ȄЁ&Z": 56I(,}~\`#NF;6+7i- R n =5%bA <n&EE+My ވY!KH0{YpRY!ʌ91.V>z HZ l(NClpje8 MQŎER?hנ5C{ )2hZƽ6z[~?LnwN1}VQ iUkѶ,_oNUHf9lPa+ (cc % .T ʯۉr$^H:"zMڪa`w|D 5o)9nCsc2TAO(₍:͡w02@0Z4zd11s7E 3zgUQ}˰H= FF5bU34J7q?9ea:\t{ƔNC @wi'5ec20ۏ?wz-pcù'^>mK71&$:"E6">w1F !&*Gߍ3|G:f,sӨoz?n$`=&OW$Ry2zg'WlM3;VwX>|؝>H乎@kưCM: i'+%=0Mt0ɏ \ ^PT[zmtND{IV?ü"Uڦ:[%H'9SQPx5؞ "fL̥ԟϵ|o->̃j[X {`&L"L*L , S\>.;F?,Oe120]JdabR$怴JE?eJņ]e} "ؑ!Zϕ pI'.ʒAb_}1Qm=&bƗ\ʒ2 }۴ N7seoe6%-fHMAAW݃Bdk&mEL.1DnގD%kA'"^s|,ɞ ՜4ø 27.Cr-::o׳T Ain/W7A`_"dRl?fǁw+_RA3nV_^t(1[6#6~|)?фWHL0|@sz ZC,cd643`͓19 !0N13k2D8!B1 ª,j4 ዆ܥ^,,>^;Û޵)[Ӈ3tWu_`6dڦ`NPTZTb 5b1R`vqHa%=kǙܜ;6'J䷶BЏ{Mm4_%|?yJ[a,QZ3t-̣{+|&G6WK7SzVn'#ஈ?uįMg߄9J1STfw%ʢ=7>Jf3 2/aZ,">#^@DT [403gi)k׈`<=%, `u损t ?gAn&#GQ%*Z ?H=a}}t%ђԆ:)͒6R='F=ECeRy'«\} EΚPJk,g>}@:Lpn{+1@ r;K]PTd:sR}6رg#[ףizB+~rtox.;-+L9'$c$.M8x h?OX:gLvj,*rҷ !,Kkw&o%w 3MQyP,t%ul.2vyd| H|'C{2IH2dϨ5,q1)fM, ! =!&{iƚi;YX@)-ߟNAx\7|U5^FiQ];0D-U>DNrkdmgN] 1!YXR.|x&!TL?"`6X4}3jgS+pYK)k}aa}MDi9'SKo?֣29+>15K 9 >C~?]&JaIP/REEWtuKEpgm`ry;Ңu͏2qMX7Dqo T߭;;e=(ץϑLЯZ/%RM;P"Co(jKQ-Zc_6eʑe֛/+ɚс~060אcŶL0=Б7.qmn|`aٱ --PO y%g+Ι|,K{4Sa %rʳ_&]` NwaJPמ9O~t_EY1r }7"<ǎNY|ij&OeqfNo]f7Yw𥻃Py!(ֹyD1aJhղgC&G/\q Y[nzU=5n*RVt,c2&npZ~^;HH@ܾGKΓhR`9j|bHf tlE696 OI2L 5>˚B(T.<KsQ+\0+n#Vud5s]^wv(5Pa3Y/idX{lXmBffCāf'tR{P*G~Q(JH5@ oxɹ1xO 7YZ\j\5FCf>>t?nm੹5.nX%O;uGט+vtPsa`&+niα@Dr1Ttd AFv&DNjJŔ:UnZc\)Z닼-@{0?j4.|vpX&Ā.>6ESNצ ʺ%3NZ F?m^lF4wj0x8t)uVW;D`d;o,OSu* ܲn6!܅}; HMF,9a-ٵ(|~Zϖ,֧ˏWJlf+0FxZSyq5>nSuU5hGΓxi=g M$0onY3ǣܫ-aaVײ'Mi1L7~\PB!&˫k+̢YNCBAI?v:zoqѮ@6 J0ΉwfMVaQej^j%D\"NnOvGY8QsH5 7J64b'1J4S(m~0M Pqm(bw?\/ځ3K}tBIZWɆqibC HTc:uQWSrRvrr[p?hR$Teҥ-j @W_\Ng@WCޠ!cBx 7V#rn%R 2`pH|gXW?z/b!NOz:/^S\;IK~L} e<^8ؾ7Rǹ ㇃~%ʟ<-z"-Pr7b𱐠ņw4<;5 K΂8yp eV'Q&hz}Q dND:Q[f 󹚑]a\p$ Þ~7HOvzZų(UZdnZ'^"KbGYulcR=,m3@4) Ȉ{=  ۜ*TNwpӥ mQP^tnЖ!h$<bnpRlgNS)_DwrZmp񻅇%vp$n63L%wTL&!zZSzqxh[^wCf PQ\HS,1* k(&j0>h-ȹ zrjqN/ pc?w+#1SyFoZvs jjɏr.=1lK6`g `Ѽmf N:,,ћ|q>moMs=I~=Pҫ˫||^tD^3.O~y:Jޜ Ve] v2`q{"ba1gYtըھ ޏS'3:ݳW!L&L Jlo5CD))G2A}+;bCȒwg9CtJ;KRGLӲS~3Chqc:eK2`FU0=og.Ifl)d U`  [@.FqO%،g.Ĥ9\(Vx%8BmS}|'P uDvf})qWZ60a;Jp&Kdio!%i*5X!`nUGT^@Y!V1Xb傾7c}89;pZK#/*s Λ<}j +.HMm+wId]5<I#v&xwc? #WM3OՕ^&]{xb0q"H"f[ ?uLm EDe Yfh/ ~{SۈՍxa>X7.[ 7BUDE{ J%e0R@*t &-ay0NV-)4%Bkp2ƠWӯ2ӭB~輈l@tVyz&9T3f\|>Wd2<PTbc dԙ@육p>rv|^ z*IW~q(`F;>뒞lS`‚lNy'p`rF8IELPBU[!u̕ aE;K=&57{t@1Wh(ԏ HH$䧘SsG*fj$$=`m€>0+X,CմXr|o D[ҭm"c6!.^DZMs֗L6% &8LX -ap%$ܹ́jdAo1phlO8)i #pd@Dgܯfq)ʘ\S 8Mv9ezw Em,b#h3~@޽CD5CjXdUd (p('Y&y9ƣ{ Uϭ\d?^CReKcLe,|?= 5 yp qOe+&"< ^{E*&h%H1T`ݏw|† '\d: r2|2F\9֒mv:kNʄAX$^);[W)ӤEٵz'u2i~"l3)R9̪&zHAg<Ã1itq6S_Y{OćJwR_e30vfWڝ>h zބ3wE[okxFu,>aib3)ߏp}`Xհ@i|iށm}\A1r`^0!M5tnsW2J7b $t¨3@U<캦>e:[fɰQB*u@PԴJ[d=c!•Y ~{01ѮF˸tEj vb_ {ʑ9~]Is$3f8fDMYęF3",' &h,F6b99'fr&Ԇ}LUM~쐺I0mj S^?ҭĠ,!z;+0".᱆ xTb/1fA  il$.OPmU?MhiF%Q5a}w ;Rvҩjqߨs98G voaw 2$Zϕi7x[ Z֣i hW+<.Z9y\H+}nx҅HY˽jD&ֻBZxF9um]kѴSQPxe xn3?gДs*H|?{4 /ZTjf7nա/=<920hq@?^sR>>@I}=K7HE3hyэɮD d:yŹ(#˴kus,{8˶ sۼd!85tc$ioDe9̑gįd.ڈOר!Kޚ1r+V.&"\a#˫" utM,|˫1gg5l9FhGZf BDUeԶdeT8[ \r\iG:LEs؉::CQSݘO(r^ Fiņko}kQظҴl8Vu]#(h$ǢfaAMpG L='ь[6vT"ji'z5CuEF#h8ឧ8,)^ *vSei~WPӋٜx)Vm0s0Ҁ?vbJq-z=_GJ7C#i84nȞH{`35 j.4G^De"2ˉš퇟ȕtKcFE'\tN9[ [A1&(6:d  i CSQMcyYN:_vA![y!KeTzec&ܱ湐H(ksx` ^p *yP?: $(*ᣛvhO+sEK64"X[h IelS[QQʼ>Qz") i0O>6r- AbgƭtK':X/ckk9vBOЋ7ۆK)eW(D4m)]$Z?'hmKr_?lG]bu%\{*[U1Mw˗vD#{7* %> :C r9<ҍ1oR%F`8&ڌ_pNy">sGu[ϝ38wv50n bTirw?$פH~cwg:V<=vjl3W`mA`VO4vk<֭~!ѴN>Q1bIN}],NLO|&uVK_dgNbzգ$/29p`,@<¥Vx fs^#F4)κd4+9Ic Hc:ZH[d/BN,NC$lL55Dt/L'_~:&D߹!(2NKS'9uEՇPw$O@6 km2vRv10CPg\@c rϛ2g:B $#ļpOl|;.g]"`su'OCaE[ϑT=' InvJdļd󥱾{!wG2u)W!JI>%gz&^ l'\CѹXަ'p$p ֖EW8%&^r@Y 4or_RnS7? \scMruvVpn o^i$c:WeFUW7Z"hvx.DvȞsBgsp%μ7gh8Qhojʎʛ%iY΁ݑNt6i(rAwXdC؎Bd'Hen4ukhp`ZsX_/:fcSECky I<lj%w#9Ѧ5O>﫳S$p3_WjSzuxzuA4t380F 3H_DYS:Zw{aH 1@G? >?"v?p}mX£?mdx"MyCz!sD %da֪7`(%J}u`+')wv=^t? ?Y>K0}{fNWU:JX׬Yz~<Rp*B W*lt%g-l,veJ >+&IIaKf㈌2ikO;h!P@yk1g9dD6 >9zBbHw5bXJۉuHVe+:a:s|V#{-Z.5b&G]S8t[0y3lli'`fTLq|&>Lmtd"moި*p-b?wOI/_a&9WGV_8MjY9R!/OGZmv/tBeVZ{!LZ8h}?]֢ycO)U}JE RC_i-˻:4#QZG gՐ5.4zag$*E&ISA*(2\8M!DzxU^9;7,< Vp7rӗ髀>&^v)B],b&q} =`x.ŢZ!nb<` WM2g@)#-$iBبك~>$j6!Chi%qQ~5b!TLװ~x%e=*Qi$KK7oEZ A9h# ]].d ߆1@F# tj IdO0Ɍ0Ɓryۃ)mT@g݀۳p4Bw\.De')}fOu*+yϭVVeB ىۄp_t2VfAq%bHs5h6`)Q4>vבowVѼ~W\LV?C7_P{ 8)k 5yb%cQv1xHҪiCf7s_}\HemK3"6Nm*|GBh@z!*r4ިlࡄxOUȽ 왔qBuA~yB+#5@ 4-y`3+g 0;gXB?۱f+R/F|?X  >5d]bĩ,CB>"6!`2ā3)צtkasdE"X5Xw,:l Z*qNSbnW',ZLx!Av[k dY\VV7Z2ELt_F{&%C%|Rpnx:b DTp D ^rrIS0}N:+ T>"+%i8Ɵ[[2$OF:ޘGIR8JpO NEGTFpc^!23gL9LӢ.MK$҉aIL0%k$0#tX Q1'u812fHļxVKoEx$63x؎=q^ -j0ϟ'.욭7ŀ:IVcN\Y'ZtV\BhF=T3эǮqݜmZu ON ={9_>U]Z/tL2z3 :d7 𭎫5&f_M,i -B8BV(C@L'ki % -bk6?QrFu?"܍~TE!X#K󡤧콻Dx LSfa/IvCʞ3li-yR"[9 j/~tK7Eduڟ>!=+.Ql*ZN-=|Df%V?=p[|[QH(CgC}t5̂G09rċC^-(as4Pubg1DvBPJu|1p$j1#qsR~يZG}X*`0EoۘAi̱播=rX L?ӌH.^1)V{f_Y>{-HYm]S1 |Nw}=ܓGtSH88rO|2ٝXj/.Oعv.8xfR0o|߾+J^"7զ<LfR1#KRX : N2CRP?zf)栍]PY%oo '' S(K}Յ]RB H-ԭRNLk<%IN~^L艢ȋCĀcFWxpxVV{"燕H׸;Č #}KKI5#!ř)6H.nc؆<.0*t.<7{bkG%N_& @7!ñEs7ԁ12z{,ǬB\3'ռ7yP_P9H]c;S*就]зq!:_*CrWf1Gƨ N;m]-oNֈ06mTF 3f[hQ*0 fo\O3D Er7d׶—ɮ|a'mǯ}{s#P:S%| WGH@!DN@B_4V#UՍiQpʨ1][a̿/vSfĠ4d1}I %BSr>bfdK%U=@d.̴@ɆhZF 97 ԏu>ső>O$(zqm[pMs D]^=)ve2}O&2+/ ;@i? )DvH7)lU.VY(H7d/(Ӈ̇v]u!ӊ9Nо%4~_Z\B2\^놜ib͡ޑT| K6!iGEZ}u_½\7x+MVT:YszN;BL&Z[Rp_{j޴U9Y ՇzV2©Â,XlM6#}E$džυ1/]Ʌp>ź%(D>r{03Mi{Sv QHgckY&Wgr.d[?^.e[(@g.ʿW7^kE.s=S7РQ$r?:#PnUT^#A56;*Ğ"uf&ō9 iP2x˂(:oǮ$,۟vfk㰈 UƩXRl0jjl-92`öfd.ɦ}]Y=9+Ldߜ@γu`=f6 tl˱q q*Qaˑ&-r+*yzWR*|ѝ6h1};E7$-_e^$"pC̎՟]%+k|Xt aug 3,߇SVX䥨|p1Bn(D 訮, @z#5({%v& I"! 6WsZk.qؘ&xx;&i]{hB`ե"p C9гcF *{^j5KLQdu(FIs2#"*4^I=,לbGHtp̑5(dŠ,X+vZhmX<b<즠{wE'0s(ILtҞ1mW9vŶ!+l Vq1.uaCΩZ:rVY,Nq] U ALx0̚8S~8 cI "ies'$K-qm;x:LTn N<@t6 00֨^o.MdEhM(PHчeypw'>˂=p'oĔt#aJ뵨\%\HZK~+~Hى->♃긊+mcK &Z2Xp1Oq8r/JEo*(ؓ챭[8 YFp"\8#0u5Æ7.>JV0:ՠSܐ%+JG} t>wj۞"2ܒ+~ͣh;M[K=`IJ}~L: j)E@(wC3J9s!'j;2>q|)Y @i2n8ozdK|N{Ք\Zr3ɾ} YV4$ZZ]1b%޵-0SL+5ūULLk;N>=u%]\ʭO.EǃT8գX+zZƥر(>'TckY?Po`S[q">O[E#hih ѕ`PCջ*, xoTP+Ny #aaJ39)GHXmyPgX YYVpۙkWJ/:ju})~P[6KMóc qU\ Ku]mS3tn6ebYd!]$+PϴAs8;m?50EB.'x}2Vj}ZMYd섽)[z_7ڀ~egiߴs/+E=)SyȪ)&G_+;⪳2r)< F/8q ;ӰۏYv]HxSJ08;p|7 >IՏ%GH-^/IL8LZ'Q#ҿ&16=y 4iFUG/qJD2tُi#9]zŗY׆֮HЊп+@˩pUGF}Xj5Θ)hVz.ϻ|3va3.gh bm`z$-6 ꍼLECOFzs̃IF6]~JmUces"^t:u!HqґEIcWӼ~˴r-TK"6OܴkxuIY{}pG (Qڤ_wz_{ J`8IEBP تDmG@Y0cͅ\J! gA秏o1)8u3ړ>qb[X/M1џ̦1!-&5T$k& K`MĢ'z`BZAPfaZ¶:o #E։S}aVi#t? LUrz[Dno8wJ@P(D78;99BgHN~ėJ1 h$mT:4G0kj=FNib&:A]yA$X= (?_w+ɶ83t]}Ä$o0YBի~~ѵTG1?YcSv!]#v]>`[(]{*CȾmFe_nϗOjäk:W;G'ff8UwS}n8O-MLwr9 7KpE|+;M҂hBp ֭ miъ?+5^_TrֳOVϩݙFQuQiǹf7t ^򚶸q/N``v)C4/7xwx 0]ҥ߯ wʭE=Xz#n(?=xƎ5]mԅh%\6[lWƵ;)+"m$ GqlHdgJ6jy ng[O=f3z9+Huj0|шQι"-qYnGƧS0&c4ҦޫP%Ucfjmd$6{!?]}"r0tO!`CnMcQ4P?Xhxz1<Z J=Z%s+w.Xkf"`܁PZMLx6 t剼R9_ 25_( MFSm1liB[@llvDYD^< 5%KP2~i_Ln|oJKqh0S+v *њb| P'jhSi XIT>h]&z1Im߈}7\r!|w}W]끙0&G~>0{(,t@"RV2lB +h~Q$.ݼiҸgU3y,Nq)Ȟ5>+ 8P ^5:p޶τ>jċ~4U:8F^~\6jշX)[n «8v$/b jGPPɂa\D6ܳ/㴭6ץeF$),j8,3g1N?RNN~U/eK{}"Ќ CȑQ29N" =z%\[è)yoADh-\ wc,ek `e8$Uq8vYQ=>ɾ]v'#_r''= m!ܜs#8ao,&Fgz A"myn62gp{XE\_+#Ǭ=S'C>N砚4(` ^)0fr%SS=/bb[C8w(o%qu})tT䄇Κ8BCb<ߪw5J S>A|m/`>Z~Ĝa롹ޒX؂z:8p6Goqۉz`@WAT<'H<绷~Ez EOOp %f›ٗ-Ĭ)nf"'tk7nG&hs+2.2RYrU1f p#`Ï0L~&h9pԨ5!Tk峸n"p%V1a'ѭ+]Z1%mh<Үn: 犊[Ӹd{iN!U t@zmV&T\ZTLV . h7HknTڗM.T>))Bz&xTo p\Gi垣G#a/?gd֠`A܂_-6^3ّ=L8#vO"ԌJ]aXY0p2ߑs }UUD|5B3*~' aO#IfDd1:yr!4@)AMOKOW_0|E*%Ñ/+fx2isQS\S%&usswTvIX骶eGn0,_܊G鮞[@gI15Q9u6?,k=WCY k 0BvAS6xRpݑ4,ܾM+M*뵽/ˮ{P&.Z̷ǫ5/ԨymSdP)g4l`.#.Jg(+0c&M tz y oV(mckl.Rq:$ +\6 uМn@V|X  ujǐ_^68 N P#:!kdMɝs5%%G=MOhC׭0}benePJ}!\5z_P)Sl 9tt5j6d ^C sZ eu.Yyy0Q{g u (f0|SI+oS]Kd4u[fSUux}`a *p)9ɴɌ]pl [[;h!r@V@g#8ޟ;9Xlo$.3 aS\nc*][FWhɂQ=j K4V֝ :\8;R5M{щb:9/C>b^!hTPy$f"FL=3At ('ű(eM\Onfy !$MGZq(1l tbW3Z2^Pк(ry>w $6Z"1 v?Hźa'5.E(R`c Q$[,f[+&O-bg=AÕ&5T= b($XUG$6h)M52ϴ ?‡bmxuo[$bD?&f^Npgݫ lD,h@iy$Qw0"7XzAK{ gQV`VOOcĦ @1h [0Gϟx3~'-88-DGaGeWZp<3 VJE#eRcdˊ6 QϫP{86nPJs]CȆ?333V}~S90kCz6#j%23X$ +\3tA"a'G޷o (m+6Rm נbZ^ ҫËd:L(?c}zHلoROKx8qD&J pn4 Udu L(z VM}h<~G>0٧! q2tYoHF9sA`ߤ;G2R͢< ZN:_gU-=q||sCEgF{vܫS4[#P1€zxʔ`t&C mI+{OQٛ5r}ۘI*Ʀܺ,i-d#dlxZM!4^:JEaL YwLh`>d4w5Lz\ lW^8S7hrizp'H)^tTT NXvuN99"1Gw9.eld/US/-a3:F&K2;?N,\o*QQ$OvfذA~2n]EKK} <Qně"u"Rbq"I2ϑ!俦|_ YzQ=+O^@0](󂰪CgsU˗l*Ó_U&7Wщ'JԆn.Χ=d÷~RֽK c u6 v\C%U ۱ɬFx5т0kl[YG('ֈJE\9曾Y"  Jz5s&4>8UbDpgNQ]CL>7LZ Ң\oVl虚!!5Pyn`&tLcyJ~,sn!(#hGZVLdweÆ0rƺH;]EwZg$JWGcQY Q0àylJw6Ct5Mj#D U±9X,g]y3űiK/ ,7QMF (EW"~̻lqngfG9DF9~w+M7dmֲ$ \ϥ_8}TeT#E1ƞ-IGv 8BZq*ڼ7i4*PW NC{ύ|vuԂuTf(HE  w?y816:N=Ul*q7$t7//V$qL%N. y 3s5(݆x7o^,STQ(sB%k4;>m &G,G;NqQuL$͞eppSjeIenM8օ\xye35L aiyQ#~n b h7uߥp0>EE8^͈*N$kq?;;N_Bw=Tge!ZС5PTu!l_%!_mNVF5и:UaߞlEN ҁ@Ql?Ϡ$4 Mv4W߉4'P!W3?)(WZUjj,)ʒ x]N)§*|"#ICy%ԋ(7R"&]:-D&Yb2NhfJHvk+@Y&ݗiOo`g k\SE.J\P6/v8v_w+^WF_[1/EX}Z蛗*t孴 W4.7s)k7Ly>*k0d6 EdղDB?1o)^oOK#;z#gg`Sؕ/Mp RfwM]6uBщrNrr\38~UE>"c&Zzv{[83hң˰ hN% !%uy6j jO[?$7/;Qs2!:5_f@/ ~:Z$3XK.t ]s%)M/ePt$2`WZ>\+*H!UMH9ɟ`=H̯|! %H4;ӞYS̻~1M +5`6";_۬95vz ݹ\Oߏ۶R@񧁧@N:#Үy8#(Hea[;ZuXB ET@,o!揟L$MV`S[2VFKY"YBeB@>2 `/V-)FE3JgAjN''/v@ǽ,PߌP{)̎V,OUj*uzB;b" IǼ+xH1N@]!yC8"wEVwiIXHɦ>{Ss )j´]&< iV(4DlcM4&_ga*p `A"lC@aA8|Q(4/3Kq,~ +c2:Y %d=&2k<|#{mv_*Efdb'=c2Ҵ Z弫 &Uܔ4ARi9u/r\6iO,*{"B[s&^ OX%7Q\icgS_KsTq U; O(t\ocoY\isXa$L2IJxG%w\ht/i7>ׂÊ ?hQ $,M3@!}0c/xIn+ѴӚlV>Vjjm17NތVcgW:S\UI]tyվQv˜,'!Xhwnw] oKr*H <d/b 3q,i=VRa ?ۮpϮk2UUM2&ꪔ%2st@ ^KS@OTϘOG݇.fl.ai'"ɑTX=<=ՎI[b)MUH\XRx!0yɁMe: $=e$P5}=VFST y\䡆ּ A1XYq>3F玵>}ڢГ |%tYmaFh5d Y'M*$9d^?$*#zZ|\:fġigА7lFv/Vga u 4t+yoG$&_@3grkwɑcG~NDp>NrK_T@Fן;O'WNyæƜ)f<ܺD9 CSڢ ?+& )̝wzV E)J&b8Bzaye!䇑PNKQ'P;p"enBEWbGmYT+c..U?n;`YGj n;iTtFmt _dj.&`ie\a#\aLrR;KE`sɔTEjNUFArRu|GWiAhn$GEo)(ixb$*G~9})'4nҘnc3J9AA=*)!10'Kר*ez7aR:s_'jUЪSo& O0D/ 4rdھi^ %3vyFbe k a*m_4sё)0@/Nf B4^Rv}69hFPfNk2z"((ύ{R$9dLmbw~55#AØ8ϙ|l"2oO?"R:)I2v{*ca LV# 6= d KBHǑ퍐HnFkR u$VLzpx(ז+f8]9_^[FOP cBB?C8LP/<}~-G(Jq]5ޮ 0b tLnS8\D0s䜯Z;CYH 0NMfX !l0% %( uzp>2Gp7i 0gq4Nq0[^ȣb,qѝf+Zɯ??O[XҰxI<; JBּM K/l]T|gA5r|U>N1=`~yYL3#MAIa6*_)g6P#~N( [5q "p٘a/ݸI6:7yCJ^ }2; x쐺?IN_tnbAԵ\zG(Yܬ/< ޒu=h\yjT<3^a/mN FnM]"#.R?؜U &rfL;3٘72)}>!6pܘ.['w h}y?'Yo7v*,Dh`72n<66ӺWtU$E۔̜媷d!ߕ_N @^r4xrn;w0 E"p)@0?vd] cʓ2F uܦU8GM&JBmE^?+Hv݉@=SL>:a0CȜ㎟nhCkZ~" Dhd`V7Ix޴v/?bU Ve eR]/8+l+6VtpO$4PECMK%A>=;THs`\l;Ő!QQ2].zRғI5NHJ@S#1 F=9,'/}cUW~{ꅚ^X78<]'7t7]v87"El=C} vGFh3"c M:c@C?2ـQgۍ0"! dC%oU s iupIHq5Q^ø<}lIc%10C+!~/3'$A%c;F4tax ĴkSy߰) MSt[`+Z޽w00m'i2AMkaz҇ߝږRn F/%iK8#3ٽ3guEDˆ#QMfw"]k- ]X:JtPtd]3hb/guZKz3CZpSU0 ~!&澷ʰkTg)CAeShPK^,_fy"G'ofJƦ$-?~(Buk.XOEY)-Qϱs'-:NѸWGFؖ>NS<{3ޛ?t(< 0tw>էx= oSRɏblVXtŪ &D1p7Lt hpTV2if':-C'w9q`hٮFQhsb!Oen!lPvf#4jxҺCY:\U?O q39-9U (Sm:#p lJTgW P+O ̱c<(1q1g={WI.!lu  >w ;9R1bVăÌZ`=JScKzJ>:2% ƌ`jɶjjk{~ȓrsq2Hc`oa+!Hɒ4FXY %;]_]!h?% ,UNLhay_A0dM'5O?K5DfC6r9h=a2y:kQO> V<<y]f1oݺ tµ<`YҘK8H7MqManhߝi"OxM & j9Y*y"!R9WZRFwg؇O|f@VVU(b)b'ˊ"susjn"hipKkʲ i %)<z#H0r"tRaB`%2+ǘt͡P5Fyc&9G)P\1nZgqj l<nk t_Cvk.RN܆u3lOؾ賮n*oۨca93645F_q4w`pSH  ]aah|kmGn!R* ,|b{hPTEz%͸!  ;K|peH+` IhQyT˸k˽fic09, jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 ,'&? *!*OlfBֻpsg$} AAJ=˵;g4%2Ί, 3 ޺K @.8pTKF;IJ|I]*Z%e#^/,a?zL8&'N>ޘ4756Q5ݟZN!F_˕G¾ [676?V٫r#(Og`kǞbIdiyyb҄v4K kghwSm!|[1ѺR0r`A)3@κL;췗Bv"(T_ ALzZ5ݪ/p r,loj "X꣟&D#ȄbnW)p_>^HTaX18Hb0E-]k­Wq"At!kYIeTGA[aELCΑ5)f>6,z!O ܟM ̀ {ؼϪi@c =~aSv)ދ%\ΰ-[SSj#)!Rd|tj=Nݣ,O '0i>haP=Ƭ lN$㜐֤${e4iJ! Npf_`۩eXN!(4EL_IV/8㑀6wVX{wrv0s,KK}`tMۨ-'fmιMHB@qjT1'OH'uʼKi :΄1r3iO1em4k=G=ULy,-[P&Yy@[LlpTf!AkTZC ctm0N",^U5ja5O=_g#P*.).a N-9 ٖ'N8z_%z∇ f `W|UFֲ;ء"^s3ڥcF?pf鵰A t_{Hb|PgIoǨbiW4 fz!pq2em"u`Nq[9̴5c1NhL-U^,4uWYy"! \_AigEt7fgLp`(mJoVwq{\̘ET`Lj~摴5487Cñf 3Ɠc|hm0=q ZF0 /y -hבY)Qa=<39rmm11КHkgjrx)RFaΰLtrMZ81#ipߚ-0oߍ_jӾ&EҊ{6aGeJtJI,A'tuaՐ}mq- >oF4@e]kUd]d@bzΑbGK 2XރLOtas ~lrZ88F)G$:5Y- TAfH?&dm*wՀt;%IVD]?UT5'`aC2G0Jd M}SW2Q`eKeq xdt)[3y!!AZ\;RTŧN'P&,h߻a8#HBkI Y"Y6ۈQ9A83&@Ɖ섡rt QǢ8Фut-1t8$Ֆ)*ܱflouHJ{w_=$Crwq7@gd\ErΕf~/ћI MA>7D6kd5qZ3F6ȑbeL.ggnv2٫:[isLwvۮ dMFz1tLY{~(/t $-9 9~JUtw:k)+[2MzD%0ش_a bˑC '|D!MUCw۠#M%7/yl]\j \߷FCunM%4"D2\:bf`5,Mﵢu Krwt@W~݃];jՂݑq66$Buџ˿3Lʶ|EY4\jwKp3ܦK`pܜ QAљ1 ^BGE (]b/ UT`^IwN@eHzݗ~6RoZaA,'U-TQ5Ξrhlޢ\=Ń :P3rC*]=0A4](di8' Y pǟ?%%ezAٷߕN_ݬ?KVZE4Ë7 KZ[QJ':i=I AoL̶yLHt|;6&5B sJBCHkW{hER7%cz_0WfQ׺#EM~Vy=44W# {j>)1}G.! vl' [j`+UvbЪmUO76d+3<:-.G(wc2\NW*[OI.=_3Y%@ 9\.hPIxNt"?J"q*"{sFЄV-‘m3hRiwOOw.'K;܏K{Hj2HLM]TTm#5%_hA߾q'[+Ҧ^1M\N1si dE~/w~lSj{ ґUz)q9̑V )ef>!g=Q0a Xv1Ft{zsH%4>),=- ~"Wfj{mV (jtyA` *VT A!`T,Vq# ,DQ~^[Z YiWv6LqKP2%HN{4jQ7cAmz,KG,W@^-&H&vyf+[|%& 3F9*X> '?v?VS8H`l"8V- Jl)<>+tYh`HW;"RmL|& g@(t"wb-UmZ<Կ$HUߢ UK ϛ 9 罩VoT2H)%V8#V[A*}@WA=:ݾ^Hl /x]vOgcC F\`iA S};D K&\ē%*\Թ^ޘ -C1qv۳3Xئ :Y "KdAN_DF5I!J0v{=/~qF`"`!XnuJ8I}wFƖ7~!0J*H X@#1yBKAT8 nAn_,Q({ \%*ҙItXyo))E=E/^fG1{$‚e5hŤn7qOͫS &7〴F "5!TB 9W଑ Sd0:1)hKJOJ[$HɵLh3h\s TV{ :ڍֲ* 6Ml[FvǢ:W:L~O$|[av20T]_ia%DNK.EZFnCuGVm/d=z2WVT&\QR_ Z'N=tcMĤIcK? j(}۱@̂iSV ;@ڻa)lhB *ekY8+5~8Ee?N= LˎrĿ`<.ka2'#~㿏zZ9 [<9mhL_b=۴>Sfمxlz܈252LR*Ivڅ]{܀ Fgj,dEk><9lk_O,ҴFdA Ug)ZkmHr_҂-.ﲐ^]"$;leM${|DY\Wb3j"/pOUuS#:I2՘hԆi1$82Q jqc⊷:DRIֱT[Z-tACh8/q<#6εp6za7Cxjk dJBuܷb:w +uX X%? gV\)ˑ2s>ݞ<tqJ5ȜǽӽU2ʎ--` Ym&ϏPF KQ۞P̢A#oM8vPI&pbI$1C)lL? 'O ,=]l0"o3 } E {L$IJBS~J )m]8OV PەA|:]).{ov)PcfX>ɵz!aØhyw[C60Gpu@bq]Z";΢*VGj>cPdZkH+h4957£7OժI#TDEQ ~׳$W9; Fq NBS5ǪXXa@$hg; 1<  X״& q8OpDK !Vb'/ !UA&W̯o:f[@ {QM؛gHƅ#~9݁i}TGޫQ- n.v "vGzDǜb'>>#[^M 8SR.8NR:h7Tvv 3"Uy 1bT+zq{˝ep5硁T㮏ShP+ 6naUW\jS-Ko,O6_?ɉ8!*ϋ9.MVϾAӈi{J <h~L,(Ɵ!\ck~u"?D,[;څi hUI캼B :g$Mol8 \,g(0ҕ}f*f-E)bRx)ywp\oJ[k^Z>W#V-]g]d, >6Gǻ?`pᄉOB=RjAacQZ2 1y%Q(UH ?eE vsEaUd:0ޘc ;(n mS_IO ,}g'C^f&{M%Ow˄SHr.BN5d1cm(n.p]:c0Fݨu9Jvo!\ϛiS,~v/ V=} K?ڋQX%;<: ",46?t7P_RcoAJZ6.V[ 8u)7/zb??婗ah+KPeBʛFqнE'#?D0z˰jjtm؅J/`þ×]PɽXݨcHC]sX袈v[ Sqځ3a1&1|RPc{**|_(l*Zw5sinrBͶҎ}\ӧCLGȠH A-5ouZ\τV[hnYn_`R^軳69Bb^*YQkaF 4֫k-˫%zځ8, sӍs}}f yR@鰨q~l@I)i)V&tԦ]ϛq+o]M#)g5وo<ѿ"il(ATs37D7fɔ$%8bO}N]%Իjs!h$@\$;%:oM3M7)p~޵O?ARE{`AxƧNabb3&ӀL #GI '\򹯛`iĈ]%*Cr Eϳxi+m-j g4`ܧmȕܫ,8ZG@'м&:Ś҂b@2Ǐ6S'"{L5؄ 0x#ԨSǰNCڒHeE;ApIx̋'°3{K|7t9^?W-};lR,`Z۠L%Np%Λ mXQ~HׅHI/90[%CV<7m{'];JYR_®$o7] G{mql4B (8,QiUCn.ȩ-ކӭ0#_“]6,~d)2KD?~-N}$;l0(=dJZа=?:* 24D>Œ+ú-Nd nlBcf3i{=J3 峞.Bنv& +vXa|:l4/{1V[L͚u@(+T(R n-^92,1l^I\u/8ѽˡo,Y\n%}wYtȥ>R#/{Jg-{jӅRyi"Z`!:+W"Zx@,#j'_@cKr^Ux3؇HBhӮ\?ZnwD""IIb8-yFvjAt5!Bսk!꬜D% xw_xN3T/SP* !PrjsUQe{O< uUOZ|0C4j8N &1bbV̯Ks gO=k,2xG<)M2 ͛/q0wM,hr&C8o_%4 7hBy`œCP2wb8%07@-}.9PȣY}9HxWfZrfyw>kO`C$ 粗|3>@e.C&vq Z ~(>T^ B~;:r><(nՖ_*D[o`BT12j)٥|Pj<+YbAFdh^:^sN[_j:wG x~yʫj!a~O{}0eEՀԌrA*h2:bd%sU2O0!;tķOOGwFCa΢iD\ 5%)(Ǽblrv?$ϝ&CIC E@SRM!Tq=[y4,x9XSi7`=NdXBZw(bZ.rmf~*3/8[{Üi.]f#E~cṟ u_G;%H#%`]~AH&~șJDHc') Zzj@"S< ~,~i f\<`Wma;11 N0V==G2Jp!aˊK4ipmW; qx!O7p\:ld ^q͎ Zf:^nA .xnCX8jA܍UA0צG}2*E8͹*eڔH7YA#@m0:= l2ӧQE]@A,8ӤoWM5׷hi{jj]ٮGw4*<\%p~dP&r6lVZD3^lEBɅw2g֜ 6 '1 pK*u&Ϧ7gpݳ"PE Hθuc,ݤTg ״^'9vo)WD&_3`HzEBoZK^?PK6/h r'gaw ]70]κrM[$Xj3(1s{CưECRg Qk*<"Ʀ*?y-M r4Fly>tts؞-Dqs\zM'ϝs@^F $5d$G, 7@xxlSuu! iѺ[.+Ld}HS%FmP3okuG1޴[ ] 郹}2 *HZq"ak8 gq Aoц|E{'½{ hju@78oT r1hqY˪NT|44s 3 [UWxyI [t߲;(4Iߥs7P+|P:,!ߔ4C['!f) :|Md畕?)\3./!=E;_hbֲhgK6Dձj.OnpՑ͗)sɘ߽-cz.V| DH} %( HPkX)@1z&FKP=^i9`뒉Iu'*Hޥe`gXҺ'ї_xfq UIUq!r!4Yu?zRG"0>+]#cyJz_i.Z\P0e`y;ih\WW:7/.*59P-pp%JWK(=`{TC}UTΘ{/i'SP LAnL=Kg"fTwgLJףS[н],.>!7Yq/X:A+ ׌^<ô.6AĿ^')%!1dF*N9`MSVre5׀" 9m#&?[2bRƗ.ʜ3|_,^ŞOt>b)i}u8<ўnju9N\άFFS K Br鑃NY[ ϘA+M+R=Fɲ-XnҪ=̉ˑh|L(Cfb)['&:Ii\9V=.Y]a@Pd cGdz = ,!ow=e1U/ŵm)KYٮhV2 PCGJDz=`iB?{,ّ-n <+U~Άy\9mZ>ۖ Ykr]mϱw6~u?o#h0B::R//>W6CX#VM,Oc6e|rR,MFΣ~ߩ`0{h^XV#J(060GPIS?*$ݠuP|Qa6{5NQWm!c^/RXq(ԯ%F`a[d"kQOcvJ\zp=R{[pQJT,FrH iK{ē1šgźVM%U$tRT$ʛl 7µkSw="a1E67^2!f/tsڞNx붺$@ܤ;.nP';3 f“r@]L+ĤQ"PކEm୨1tIx2v_C[_:)[t1W$sdl%&K @Bg{+)D:* 3mbۥdm', Zduq$c#~tу}/[g=Ԯ %]N!xC~[ptr2beNS1؉hW +GL(jIYc@X8ȯS | 'tя`/=M'W& QEt[  RtX&ZeYzBu۶z *jt?MU#mv&)PMWx`+K,2[v|gA5aϩjCG9 :fѩs!|PE|F1i'('-`e);ïXmUX:+*wLO d*{9; =9-UG^M^͖_Eӗ(n=cv_y.Umȡ]ˀK#d{) "g=PPrs:DM 4e&䚪s3O3wt1jL}= w姚=/.OڝMH]cPs -Yb R/~L8FQT yTAj9ͼ+2Pßi?&Q!GoeaԄO4xjeMR{R9UŘ!;("CVds$ΣZu+ lPYW˄bإ_17ssT> XV 3 [6)'OW^Aۮ)?ybmL8|*?T֙(M0Am|W_gneq]&yuc639K4u:#79ކxFt>0dhi9rDظ0ER |^nOL:.4CWej-ott,5LWd;EqiK+ r{> PܮA l@G5Q+`kq7V֭"RMf2wg ɣoJMcwH^4lG2,T9bfP0dHóɛ]s8r4#lF Ehx >2K3lK9R:Fw j+RDwawǞ]v; zz\PمcZY#S֕~ƵN,6GYј~CV| *W7$z̕!ʹ+@|Ij*4# )_i/z 68{2òjyJ#m$r@K`$fςr>ssAƸcxY8,2`>6bo(.p,>6@MF 0LC>/GrENCYs'^xzkʁ$Ow5!?ba\\QQk^"HKEzuڻJޞeb OOv _5ۨ׷OQ:S%gr0[zȌqE'Uβ>_}͞bEiwh2pnYr_Zi.ig;vdf)?Xk>!,k,+*MQ ^dZ6W|tԯm57ڬ-2(&宴nOY 1y0FS%Rl_e<dZx p0oT7 3ǿ8x0\>M[]=w9PAm3[u;#-O-P&v4)-J'A틽}7C{}4'zK@Rn XYYX 3vRjل(l<<իBci -DKX@dG`.*yI"ZPdU]$`J%}#IC+?gkoZsd\7YQj0b%qUd^jyp$n݃!r]oKMg xうl'~u{CwQoU<3n;@~&.;bDI |>\|/UHNT 4o fW:eM{l6 {dynBog $Mss:b7 ¬P͔|C4Eށ V$>T|'O"-b/\8{__׳U@Lo ݄{rDgש`bMBT\GܐI7~Ah,[ÀZ()@*:!d~:hsdpC =`[za@kNbK4^?OnNo,ϏPq}h$f2s2Ѣ_֓F^u{=\kU}pN |HlwPㆱO;4$Yio ) (~6@7 l#$ԄUdqVB0ܗ.2t_phσWM7rUAc!WOī\JoJ';g^ za)0m EGU讁Ѩy|QIi pu"Zm5F/Wf7c枖&$KM:5XIƦUxɕ\H>"ux Z@E(ك l6ae;S S :~玗1ӳDu[$F2:p q_Sg*.]._AAuG]njnP\KlhPuu<% ۺ7hv|=pZ_2/gZF{ַ}^ҫĚ?} 446\9?c֌{a=>Fªؕ.k;怵G2 UU),D8;\km" H|V֧LrۈY?e8/Y(t?mYzo}V?NuO}bzq?ÿ']YweAh&?kS=0MRa:j<@ ]-:KZ^fqe?l"Yȩhll"2[5FdpjKvQ%EM2.#ngMR8CΰmÆb1J17A@wqU/ALjԏx#+Kͦ#9>.aOPd?w|u@^z,~v!gVL@P&gh\&dѸxІa&o glH-?*ʗ;iZ9s4y@)t8P$* :,՘zu vmY[z1(kP>6?*9u˹ڟ[UpU$J+6KQM{*G?}]@~Jj~P(qSY|'`Q2ǷoR@$B_Ƿq 8tZ~MIV ך*SnS4-1H.*#45{DrA $DsbyB2T~X;^̘˥R:gT9C>"fD [>pso~r( Xn"rAqǏX~< \c@\n <pW%kOR`"KX KSV ;~~$R]5 b i_ߐ ~ex;NNȭ%SEi(xM>g-۱Z6tD5púo۵ʿ*,Ls#[ds kdy:+nu1=>.Uc@N,Mzw3GƆrWCsa>Q "FM{"E::2=7lY /cwò`5Sj]znpmF]V,7iPSQz]I>ko)d!K+D d(ЫWؕ 6H|^fvHd$i /g>R -p\ ^u )A}pCݵ}|t'&*CjҽJ$_I՚Wm"D_3]|[xm(7i*S&L,RtVm30ooh߄ [F+)TyUB!,L)S5EI({v1/ ˴P0FŤԴ/4oN/5l4LO$^~@2랋J 8k:a?Ei)&\25Ӭt& -^!Sbm\9hhT0AcV; /%.*Mb? ґR?f|c2?sPHv:ay͌n\#-CFŐ qS,bG,M,Jqw.Ao585AǕ:^A HgmUt>Qg#i;#O/2o*M mvQ׌mIMD륞snϫ`Q̌)Ʉ+:a9m$P {C gBƞ^ȼMS,hr|v%PN,\բ%VGZtj+X>ϦUh2 fs~TrmW!`>@Y(lKb#d6P Y[<=1NNH18#*I? /n(;bcr҈Y\k D%Յ.9~q'\S4q nbr&M]%YyzW[HY# uKoҸy-hG'BmuȀW3*l//I>kk+4s΍#|0thr}IwPb@V HSOW/9oo7:`l$b-@->ݐByXp\6c\d|0^y疀T6Nmq^6jzZFm)JP t?ܵ;m=*-nCd y$yG3/6y#DdAW|7,OM` 7ߓX`kVtd~̲QمN%+qlKz(*OsqկY7i^Q† Gh{s8@lYpN.=f'U2VVwgEDoqIL pn@"hO%fHy\'#+(ԡ\ܬDHس " Zi3Dt&@2fx7nQ =sar^:#Ys$:v vj ,҇rr76'KʫF2C===A&~Cj@_Cv^LJGŀƎlJLиSٺBShnsl߽C:pi*MSIaPd譑Du]$ =:7Nb}Zr!ܠ/M y:Z ̂gJˠ0bCo5Tj/X׶CH|o+՜^Ơ``[;ѯ}pFog= \]ن1HrֵJ=ïe./!Z9%h}U:vpaFd˽~r1RЩ :}bjM\%/0 Vj$)/x:PE>{EA9IEP "8}эDk,scy&[~"cʓR{J|g*)—RmK$>{F}Įv=QׁP)Y%n@}6M츮,ҩ4)t@@@ԈRu r&֌場b *&cE"`xo 霙h}@qJuuӳ-1Hjaˠ^(BlZPM=lIb$D?QūAx#LsA.'+rEk?,'޻v{ )FAkgmQV~w FziU {Ȼu1nj<5h!`I?.W@Q+aXTOhOeA٥}~} "?o%I3F幯M8 _%@>[޲0Pc5hb9e $́ ;qhPNwKCl"j6yM17yW:XZ]:ѩuս֪p,7 UeBh |813Ⲗ(n+~7UL?rm/DV2.:ӗs؋̞Y2p ]p<r (C7ɳ)2b.q, ꡛs* x30悍}Haw.A`mUwcG>]2}F Z8n0; XEۖ9'#J:xwz?|W 9㰋az:u6܌b8+7H&q6Qx0dRV8ӛIif\^c+ѓإ09KOxeO'^р[40NmNծc:#mqdCV|^aoJ0rQ{ -`U["kbʠj)xܐ>ІlS>tYE`a7;*eA5(<^D탙9Ys#3զwrFw*;5OM7}CW>oUVrd"rer/(HUhz]ViΞ{T{).mB%8~I%]*+r wVl%c,q@I8D:ۚ#i7}@OL Gd2rb6ǫJwf}T*.r9*Zuk{0R0d{4|.) ɢYL4O9̸Ԟ{5y,3^N{F=еE9ꉰF/芔79߱fa~c,zz΋K/w<}ي!Ά*zOZ P\|"Jq3Ĝ3䝸J)[},OQL5m6R tPܦpS>|3x4͹UQ1~|Ne@1#}k\-ZZƺ(Gy3$3r)3,:Qp+͗szNb|H #S*A9z]6@1؜[%Ko҉ 8=4>]e#_-Xb)#AQ?a32 s槜Ϊ"]u Fͱ!iE}|eT-MLatM)<פ!`AT+(ޯ:]R pY\>1Uzv93^7-ud,dF\g1o!2(#TzHM\0: af}aV)lYꮑ"[ɏ 0كzb&Kfʴ4:* 6V SآXΏ8-:ޠG@o7H-$zU@76+]9eZ1($=80l*+넜k׃].!mR\ " Dќ޾:^wW%k x:*E2N=ӟPE i6!ЗO}1iſU+x'V,Z/8^Gְ{+^/~nUշkGwt)t$'x{ gkq~at( = y;t)]~&cnI:w($uGŴӯh2C5P8}dL*E)`J#^02,^XýNs']D0\pW,6;g痪!C#šY +֡LNc ?\=N R~nA)b̈́Y0!#! 2P{+ʶōrЭHACSqtT&2 MlȐmEy"mlC1B4/Gq/fB Н,nE@Ǭ8Ӕ v֘URFIhǞr|/M؞fPz62D;&V 54 Ub6vydFujR'G;Z>nj<}+ s9$[[yd)i1?iwW 6-` AZe{YB-үEkU[DžzٴF W%`SC`ЏyɂV''XJ[,MK|aCMG-V *=aBtZ+V2 !Xk2buhZt5O =ٶ R8 Ћn%|^}N_6ثf6^v书֝:f(8pyx=񫪅D )]Ъ'cTp\! ~e-B]!Z?vuLL4,`-a# LD-ByNQ,g8#3֦߻V^ xzRA3Yao{5YB1yA)#OeCSE2z IyZ^1{M4wݟc'-J?d֩Pr:ȇ _|tḇ$U>xQLjYk\ $?14ii j+wǒ O'Ә51뀅9QN0_giݵ8]kY}B;0J~R (F^G~/C74ehQk%. 1ٔy@-1CW9]u=8nG4MTX+PB##0wH?%C˟f۽7ׁ̌6t*ټg \|?䳀&M>/+O%$c" ?hO,fjG(7ze 0mJL90к\j2E# NP2Q<2!خU`:]"49 #D4'9q׍`l7@_(2Ua"`~pf3Jd}^B pHw~di`KM7O4MoNϏ ^깰eL@ΟK=٣G|0MQ]NGsp.m| ʷbjtVd6ƝTF_vFBD @jv+DZ% ¼mtۢK;jLv79#=+\Y@kSr5}ǨpF%_F̰؝訡·>Ut5iVsm[G%Ǵj9zb'9SDT,z{ b|NjDup,6+/ةҹa,HXT|ΩFw$M^@)+`izAaf'dϳ4E'Fn`*o?!/16 M}@16%6 LH#s*lɦdD v՜zMV,O*n$4 o/Թ5C4y?Q]qܥS\Ӝ|CFtj 7U-RےLM:@c>,wM'+)"HY?E#A nB T]櫛 8;2]o|p+IECҋ/q0K:vEdkݟċ82%1]չIc0yEx$=uK\BaoZ*Nć!!oȂZ"uԌ"rtڔПƽpr-(egX]Oюi2rb8w~K6goɌz߄&H]BY,X{T|}Qq ·?=Y:a)\;ǿ$"~.xʗu'ZhgRXVU/lh[ܟ4?+#q*qF`Ճ\:*׃aaQ_-ǑLSaxc^bulu)$2I^r`'fA[VUL\)8'p-qWO*Wd{8-Gg-'.He`|L"f?^{qLQdR l@>n8mMiOFẒB yly`;ԊsQgN,]Y!0ow| t0[9H%EkYg`)DekIA; N0KRHT۠թ~Ew{?xxg2vj;}gi G5=no- 9؊J2P(*f U5Vja)1f9r@>7&pV K"cƊ) ,ӕ9IJKF 퓣w?Ă#i/\*\Ziks|cM:8䮏\5 1?S 92¶PfM?ɇY%RdH>4jpgv/2{+1oBoΫ&:0YH%bnzS ium6aMvJdLPh賓Cʌk9m] &2>UC$ ۢ.ixJmԿarٛS}vπI)ȃ0uP -xM|݊K}06JWqLrQ(#뗀[!ԃ|k] Cǽ>Q(%9cNR0K_Z%ç>$9VڜQGXEU:UbP1w#XM\b+4ӂ z*݉r 9L+.*KI|d˹% Hϑ|zj!_9ߋ1I{*NR*k̔䨮\A}58?ֆ?}8M˥<((->b@/) jg%_氵j|qTIZ E m@7_OԀ%#l1cǨ̮9m~7H!;F',J{< [+G+B1dzi00Q-b/I|\]&?ȴg̷EuU._q˄%"bpgIƯ`V؎ ZOn7OjeZJUJ0"LydX.w :~Z"vp*Gv>>9A/6ݒAi/O?xO .ћZFTwf7:`{B?@ cpX~H 0 @ Y:>sK2Sy<ɖǖ dir~ EO,0.@rE g-d.VK,_-QFhpN HC$7ξ\ 1dD-o2b4ڂA{_;ȯyyΨMinPM-´|=9K7k3&.(TlȺY/w+ZVY4L[Ma ՟ĉ[D"q6Ǡ ׍;x+qK!M8'0C}xq^󇌸S~E_*.o$"y]\7l^ef)<P*i sr߸ŀ߆%H "i" ~b S%k>ďxq w5ˣa@Tmĸq[tMG'$u9[7ҊCnms\ly L*^C_X-DǐꀡZ7n2C"Rv\Vp2B~]n_"Ý_v&T,jw_0m 倡m+LJ!mt^/bߏwIg)us$WU/:|UtkO~o* NX12Ry\w * g\B,7ᆕ[ۧg+-$k.as1@hiz˼ b^D֪I*G/j3qXx=|`J2/an~_ 'cb!˴`Ȯ1έiQ^#3Y)rf̵W,Iȓ*vqd̜ R@r}旌" +Ut^nġ=={t88dju܎=VG#iu$M9>Lj4<&hJwl>%ǵE]VuLPRsaap tӥ;>y 7 &l *A4clb1OqtuWKNM@ eļUX Gwջ@Rl2"R!i e Jl0臲&//-yu[-O H_bgI灲\-F;mLYjwAd9WNfG*2[G.#QUQ ,2f7Z]]ol D&|x*&d $34=@(A}ﲧ}lV JoS:GBDi8ƕ&3$k@ӊ*M\qL{;_CyDT"IJ٩d.QgWmZԏY?BL~: j.myREMtcH˹ A3Ԥgc#A"#V1~sKw٠4'GD ƶ G>ehHӻ eȍKpa8$Q^N q:ʠf3 #,[αǘlGbB&S4s  unNDݞC3VIUR/_hF|2d vO lrYw'y$4l)7Z Ieq7gbMGVtJw8=R&يN9Π i9L GA#CQy|mYbbr 8Wun0m,9MC]7'4\T/e u!ͫ7+֔z/UTjbȫ+0(VChX!H7,&g˃nȼFs6<,DBK ]g1 dQuLy ǀTo=Y-TUOy<7:!>q1EWL>d!C6o8V̢ܡWroz#EZ}0}/vn-,o8o1Z9+2TN/>K)Jpx< ?/Sս/b ٞ9%SU0kuzBxm+a(RL@z>Μ*Go~O1p~)uvlz`Gb>8 d0w+O"A3H7>OX#@(CӚ*謓WEaڎoq8G|lBK!1x@:+ Rz_(T0衛2@6XP0j8,gKjq@*4P6$YIy&bCw5\ԔFԘx_Z௦p64I(|l L:OB4}"*>Kkג7½:FQD>vY*PS 4x/P7JbQ?ͣƶkȄ@uDnt-"_n>YNSNU<&;[#.;!hKDLF w1k fQ暪c,u/B!dz%&1MTܖg6eRY!rM*Q3?ޏ@#as6c2Y&-ZWS-0O`܍*ΰ14Ӈe\J-y~~8ұx-h;e<C!K4e"^Wa?_qs7붡zrIiZ{P)h(У_Vϱ ER]MSXBԣyw|׻]}l1^I~-˸+dʍ+Y] 챼Klɝ{qEk-Pgv+BNv˜ꥺ&V6|[E#I{~H\̷G@cW|yhܩQ rt-XN[%C}""e!y sVkɒV^+&q>K DXhs9+Ap a4AaEC ˩R&/R`^AYJc8cXoޝ7FnF tȒ ) DϮ{5I2r36PiKb:%^qNV(L-] hzJ~ |Ecr1' l,lA \z\)eRyǧ\ EsIלy8&bM  uGy ǭӁHw!P71果v1\=\xnyMz_ߋ4bORYH;+/@uEuVL.}`}Sq|+&t"є]`C⏑ցS՗AroEs?̮`f-D .Hu%D)U"1E!0φuՍuL&ٽ8shnT1[73, l{!ifG)D4p;W$1ɇ2G"鹢“O(@gGfKS ⠿~tezԠ+،w|$9*+VPD;̽szQ>#Q1̇eZGH̚Mh$$In-= {/Ӹ%<|屢1Jz޾E6$Lbŗ,l–8-9rv͓,C[w/i];UP2Oywӄ4 P$Dl˿{'h#/w盿o} ۣÚC&SOZ%+YPYt )ۺ@Nn<mS} ^ 2`{LM9.so؏?ʮNk!ydlv/vL.GwjYhos^l,8$a׹כfa>jqSw^џ;.A@)@Gv0OJO?_߉^" 5,MO@ITdbҡd]|jhhKv^I4JNXgCMcRW?:q*V+]J!]0'}G .L^<7HC@2̭rJЩ(+ED_R1 CKEmCwuxɉx[8A&^@@dftUnhDj-wʽ \V{kJHqPPX्-m[Y8^^1ӗؚ+ڈ BܽM1A0%yr@o Gy 4HXGC&? wq ;h@U]i\3{^X >{>`&6q裯t|z zGhdkP(2LyIoY7)J\FMAoXRj:!}6IQvhWJS+B/ .0 {\'}~DY `^;;<(%+RP'Tc䱖Бe,l(UhEt JVc\MV T[L CpKiq9\NSL=ތ9M?[}g qC0dAkMM{^GŶk-eh=&2BWM8\44-:GDnB>+Ղ}[,Y0rF"&r;yDYi&R6V/Jݝk$GތOkwhU @"<7dEwsK2B7B :X]~W]U6gRy{ޱ@*4id5Хx%be-ɩ):~ oa5wV0YLe(zA5`BNvVFN}ԈvR GK(Vr]ja[x8!_e4rl0cX4P+f2S c-=Y߿Qϗc6rV7v !א5N'³dN/QlݸyeY쿣Fa8YSeS/xr2eOQhLX\C[1{9uAuR_~j[{c\@ mԂ4rbT:T،)`ҀtPq~N_#Ctcدlim.}2|oXԝ; +Ӟ'$! ވB߰,B83#$iݤ:W96o{꘧b i'D&h_ Unݓ-bR!ڥl. Wġ϶5Ph5jp#/5~ MJhn躾^ 6}wJ I&G:TWŁλI3bI ޓ(ϰΝVJ4+# E.$_"՞Yb̓ZS]X ya%!bU*o傌J kw{L{ǻ<)J,NGñ9j ' =Y[ZOVM&\j! )]m"˟7JzA&6"ysEhfԤ= ?$47Pl H'! h/ys(d/qoPi(]imK8kӏ½'-4)%vM)§( YqM1 9=ȝ]w. X.}*H,c)wXXl96f?sftպG}yzZQx sBEyYyuz~Qo4'"Cvmɾ-i.K`| , B߁>ayP (E< 4I9nҾx)sߠ~@A(j犏C\jz0UG=%q0؏zP0G蒻 c1ߟu= 򍾧1u&͎4r<_F-|x4WI¥pI5kMzeЙr=K֘ mQ[V4v00lm\<8D$aT|[mԟ!xe A A}GE%A!53{ם>5[ZэYAre&|Al賄H]CFƾIw]HFb܎a|>V73`1GL ƻ*wo`8"QN^ ]pQV GL!ְ|UQ.ۉ2gbm'=@Dn!i8_ <Ŵ*=A?\g{xhf$sV_`gh#=Pv"m/ \Mr40Z*2* B&#'G;Q3,{Eۡ3DW*51Kww gGu w 9? U9pF~AVr2 'k||7ۨ)Y 2!ſPfa  ^Q8Y< QY vfħ~ѱZZ8Bn$Dy־!>|tWSIV&8Kz1 )& r{ZJ "MWt!:uZ:bkM:}~-Xˇړⵄ'=þ[1'5Kd趪*c=tz1ѠqDFi;* vof+7; *y{djʄ_\m\mperr0X,H/<x9V Q̶QЖ1\6aiᓃƯ6e ejs:"˪}7*xAۘԻ2{}O2p&\]QVD4"݌?(>0tqr>g‹JM{/I& ;5bԣ ~CJ)ȻZj&>E+bD.Ci؇Oh]J~al~qL~hӎa}cJWgü#ʯQRJh\PRYyoV|?.F޶iy>.ȳ`XSO~t%0ݶr!^CDFa]H 5WMhCYO.2I)dWGk<;`r? v䏄"uղB}',7Qќird3[o߭ZЯe[N`fT̨t%(0$WA5;%37-p`>/o)j)ex?5+s7=C6_XWNJSpar"!Iwi>00,;_<gqrJ<7ױjgY3W Ę+cڜ#\,TXmk' .9}S^*xFQz q][ lZEUͮ&?Rɇm[2rQ7Oਯ1t,C&_Z-tmFj A(x3Xi-8SZXˀb$*o2жݦQ 4 Edc@͑ GjvYdqFq8ըNDfQ[gPW }JpFGUHaVLIYaesmITƿ+E8"-Kb5P3 $$Ȼt|Y˞5c%˷p+9rh8*A&԰ Qqɢ !pQ8 yr|`r$(]n˾MQG 8*ͽ\ix|V΢ăG]]t39f RI! y5ΐ%nPpL tl:fnti!/6 gu_g֛; JQ$l6.lg&wdʴ9%CAD;r @PyIBuKoܯa{W6vAu^&HDMb]WnOC%9ǧ+o@B(92ۻ@D:qu kY.A;cJ. 8?XyX)4?ܪdS^{vո66HE uTW+rXޜ!j|֨.\caԵ°@{~BH`{]zqgtb?Eֻ`0h%-XۼcAvɞ&dvVS蚼96 {1e׾ɛb5|j-Nfυ Z7[{B ѭ6p;dk](Tr(Uz27o-tER"|[71">0r}u]y1}êÍ.11]֗@sZ=˪LhyczZn3B`20e~O[/F?+c):T,`xV"YƔ7")UeE8Z_~-q7CvRnkCNs`72i{BF8z axKg4{l5R;Q0 &z "ŜLr,$ .!dYr: 4%A3*Hu~  #2ӓ ('I$hJ2k\y\Y)7=z.DG7+B? (p}VKPɨbXQHo6m4Y|˒J},O䰺e1A)+߯wKTf XMߛJ^+CvpoK*&}eގmxo D\y7<u{r*nJ/tr8wfOfži[ -:?'IőKAjHhM\o TmII0K" KvMX:äķhMNӛ74I쵘)(q\,VbRJ] 3cA(O N;*y!|+5 \$zvQ3r̓[QI2{5˗3pFU\J*.%;srBWI("Ei1ݺjua'%ꡧ5 Ⱦ La,gE< ň8Z c!ؒmdPg.S;4`ܗ!Aolya@d%&N[C9gI\ }2T롛f(Ɋ;R͹dARʲ(NŘ ;Q{CN"%Hs$|,<6 ęCIZ6|Wg1,J?rgu-3;rɑdY{3=7zC)Pyc#/!)ֆ׉sK \sCJ=਻GEj"m.yw%#7+C Ds[U^TI#,5@0<( `Jf Pf~t U2nV8RЯ͕Nײzb9ҕ$<V^OS+G+ҋc0xv?%1oxW=йYϖg= э}[ݑCGO@_Om.˻NI.}EL,NxI, w`>F&[guPМLDt:/"+, ,6:'8h!kt$g5¦Pi0/Ñ2uCYw蠏I Qf=@W@/':ww_vJ*u\`a`^arɮ ^A1&R{+>,R7|Noq_TIпPB (>?&_a~ݭֵm+GF1A).@1Z!f"@R# N7-jp iPS Ӷaڂ١ckw6Ff eP! H*ʲ20DDL7S I@SNޙR{yqsvispuĄQjܵ#p|n΁}V\+8UP9$Uջ ghbLS5)/\Jtڍ|~%'s/Arvc"/0>8SⳔe!iӹ;=ѸJ(մ9۲y$Ue* t/)Yt+Pz+tɗ:RR2vdf)˛R,-!L$0xŢF2FM \\/ jm7>SQ J+6I1z-ybB%'Pz^gsg<;&bK PX)ndjl :,^ ^V`t!- n|qJ \3cmk w +2 o%)k8=B3iN}6sėS_5k}5YGsjxtw}5lNT=$j޷!A$?fwlU2b vΞo,C͞\k!XY$ 4sd?޶AutCI)O+EIBx#ٹ BuaFWѠ- (F>^5kkX lkNf2Е]qZjxހ;F:l />TaϷQ}и !D#s4FD$[t&_+eEhAQK8E/푼.~Z}rzF ph:|W(6Ŵ>M0H(Gc6XWq48YNf,"P|6[2T'8I9C2aHNb܀/@cK v#k*jyeذ gqs)5*]ϳ$2|pUԙxߑW~L`e#L٨O/Uq;OuR"Eڱ}d=9y1#W\w7i&@!.iCm#4R :nAg驴2WNy75X"C,6)Pң۝hָ@<PC:9X}WV{yiW5KGkJ~;LVi .I En_Nc4yB| m4+̪s<7>o}UVQ,糟QL u{y].|Е\_TÌhu5Y83d q8{Bd[;/-J l9 3.܏4kBaH}^{"KЍwR#f/m\ήR٤QߣIyV/Hc7z^?o>)7v0O)CZXQ~!{]< I2={ 3 e6d۽!pXwaɑ;q%AT s Q=O~?4'0Bq<@E('\ɧ= Qެ3X1^֧)tZnzBZWW0xn;;Dq'ƊR{53gC4rH:?(##@]Jq!5Lcp}ra Oa=M$³O8_8.:ʛ_ 1uPhm(nH./AdŰ}\Ӡ\YnV'['6BDcVZpsT j0VP[ M?%dW?Qbnw5VstD%K6:Π<,5X|TЏG;e |_wPt{DŽkpvj KijL$H8Ja kH66T |ٍX#W ,{V{^kfd)^w q4sL'O sDl+.›}{ː Qgb.e[+bT5LM^d=A^)p(c;Ϩ<2&CKDS8i 5Č!o 1B%#W&GK{IB* ah7CO>5ڬj{Ƭ`wz!CP[{Z+~U> U/K܌[9c£+u0fF$kr;C2ʡ{j]i>G~ i]RM^K ӿ @r:ػr Q^3ǭ͘o3Ⱥ8CxDo6Y`/wqq6< QRi?_\B+n!r0U>//lG_ٱ[ a&W ].,ؾdjpVL_yH=tNov5W3F 7̷CWf.U췷Mg4TR5c|"<:"Y'"Jv^8AB !g)L[cFX3cT\:=4x4&u$oHVGPpÆc,Kqmv0eS i@Wx4P/Sd#l_ ;APfNl8ukȰL8LAE{ч?++3fʉ$^\_t/| - Ry{>BVJfD nb^LNƦ: D۰N 5K@T+P ORݷ MCPYCoKY&^)&u,L$=2==r)gXe>;VUd6tSzD { B<Ȧ6fq =Bf Rԗ/oϢRۡŒ}ab(&Sh2y3caOa-j'#rq9P<Hشj(LQÊf > G#)3$-tbb  >o:L'ݎ A%I\G՜X4dHҔ8aH bdT)Ǫ\ ryM(-K`Ir\L)Tezv ْ;ϯ"4o 5Yw}a<^Dfٞ:4N~T=$ Xo^$?dH9 E1$r 8qu5/MOIEdp 8`ƣyj_|N aDϭQ=Ò̳d81RdУLОYc܄Gz9'CgiX,^bȄ`2Em\&:(z]`fdLjy?ӟe"NXjp{LL|DIGT.F2,O<,i'Ƥnjs,ZH@[H1[*$B{}8І܆r:fO%6xE:*Y"4} fbuac(5pU: qs&G}l>QSY*w[(B&p`0UA,֭u Ycp9xXBi͜7kx%zi@}^ ;\ )ʂ;9qh2⏜Dj9tv"0P۱^Dޥ(Gȶ-;.{!B;' k9Z`vi(,^b.x1swRWmyyqt>-ȴƳ[swNk.FkMV^+|*R%2$[6T*bbQ[ lOyNST\n$'8a#ƻܾ# T6k4fiTG8ѥd*6@+'Kv nEo"ҶƱIuPm@23%hF#J#a# 3.I$`peu!,y*Լ& "=:;er2uҏ=c`Ս"ݮ@vsy^IdѺQA-\rR[?d}ie9 0j m 7 G@㲹@w9vi>ũj4@I^g׏,R[2D%.[M<"tON|h(O0>}8ǔi.cųz~{V-HXsʜIOʞאJI#aJCI?d g&zlE#AϷݩ04P_IUH])l@-e蜥Uʍxgb ޱ*T6I.:HlU$/¿:2<@$]ʶI*фRL^ヂC0xAJE|Ywtx^wd(q#Dkh 3M${Fx(nUjTJUfJ?c6YV÷evZqBpąpe־̚:5Dŏ A>8$Y% ̮{J,}4a.v<Ž[\3I<5v'}`zޟM8&*B`];mU4Im} ˎw)e[^Kbx.ȭT$cN#.WYE9N%aL)O s /m?<?Zr~lxͥrwj0c' ҹgE)X$qkԯI).M8qhty 3M6:@mf7U=mk2L%>^wuݥ^ %6v|4'  0G,QGVꝶɳC1I  /-wC fxpޓ.xՏq.f uI#C-"MP'&tl,*wW,dy m *?,AE1s1a)t~n٬`}( %0"oR~f{LAȷbE$[DC-T7خ Q1KR8'*|-"IZ3!Cbzz6Uܣlߛ[cLvYǶ5XFucnfۂZr42'dXecb;; js%ž:bҎ_0-Z{p/lMHܲ7դOQ`uet zab82z=Ԃm,??0Ƃe /=,p}Hջ]1;]`05TRG'IZd Zi?icM{ޠi;GKz:R=LZrv4p#zt~_ -k_ aO`[,6#>ym51:;Ə2h_M HH?$G 12OSZZu&nH޻=r{jwG MZF3OF-{q_Oq;!; _]:[ Ԛ0,jzo^ʆ!+{zD|(sIz}$qo9_Ⱥ'OGl ź15E|}pUT-1SqP(bHjVC nnl'w)s\4ḃdjwVVg+;FLnFG6e͌MwځMi|w|LPdaj'7hBy91 6o=;:x͑ ;-!IhΑ51$p-NKҢ"$):}b'Qd͟`/O~P,a@JfN6-E-"x΅Bp xByKIhӜE@{К$eKD y=VMQɄTŮ5ޔ(Г4z wMR7b=8j Q3]jv}~${ 2{Gp5#GpLC6c|+=h.)/nztiNav\JW\--" ļYz?mCU:`aBwY}O-wN) L#zhj̬|rNw^ŲNZJwn'4'ً}p:VN_!,[ĕ?J<ްj vۭ:)GCd V_b|D-'1K՗pm_œ%d>$u[U凜ֹ .Inl%RZW]e/i}Lҫdyqx[pgDd,!$5LCO+oѰCߦzEڤZ{Yvl6ڊ ,bkRqNCYZ?W:}cCSH-r]h!л_Aj'N ^(xX[hx7ɚ!NQ Pڶҿ.< AI6}Cq N2X=_B*kNa :"o#OzErz{?Sn}b !Slb`zGUDA+/;;)Fƞ'dĜ< {j=zNpT7CLH"U);ȍfJ"gˬ?\+])ibEyhd+3J#ޫK`1;QX /B_݌C  ЬR5u#MF&~ː1H7ڶ& XHJF VĢkHV,4.d͢2x_7}tzQF,;_8H C2 <~։NwG$ƻ},  DhS?aWDRR#"7gФt{;;UqމD4Q/0[tq ag}{]j ۗq鷁ۉ+'%VzITL˒F70=jE h ?mi"R/˪vbTHE%+ūt+T/!ꢄ+w1LVsU/C.v |QS7I̼W(D&Ĭ0CLT=8@:?Rvar_N[/ ^Zl|]s*Λ+yd9~/9&_њOy#,g[h˾5kӵEzHRbD\Ftc%<$:z/>G8&MQ&FPy%N""6,jOR>O6H.)T|u.'k5*<#*ML4S2N9 &rnYGI[3Iě.!F0/hH)(@"z܉>@"kZ`WoF)aCm,g)c?2l[FAV4,5=j7M/jQk6 ]$RzPBвeһ-JI,q9g겆#epfvUm|(lrx}F jWM~™}diMz>58 k3,NM="UF0M! B @AwNk` Rⷄ{:~R|JSTolx<Ai\\N؇i:.FjiEnqSq!/rTPo\ 6U+>+Q(#&3imj݌(:L,R_3Q"4jN=C]n@@=V;{*[@z~P "ZXFcWy\+*x7T#ڼsU<:D:+b:|BP0w-,H…tR~.A3z{=4Pc @ʩc5$ֺ k.*/wg+0$ߪ 84L{6 -i7!FCJxOuGcؖE6'<*a`UgFM}h9 zi;USp }t8< I>U"Y#L/z` Dմ„u89wBJkFE+pPm;)@qD@\u=IdK }8GL tm߫|M"0<d'*.2cB^ )$T!A =Gzh5JUN;tÁe5WP e5oksDN@ê u_/ N,_ȥ¼>Mg&NX`r`4jmٸvӓ#=%Rf*r4Y%4QYDx(eP1P#~2 TU~NګFboTLK7c<k,,v7<DB'<\Fz"wTߵx W(tk_ ˜d+c^=L4ƒC?϶0᥄%؟6K;3:.MgAA?j;=gr#otosw' 6~S%aǡSBEgxL̤h;Am16}\zÚϜc>Tin|HNf @.=o.r?PxEV]6lln )Kݹd7`Ӿ+ -?MY!9`w K&TIhdz]<3\õS'4Yc@q lQZ_,7r] :R_UE&9O2vwjTD] 3..MA%M16kI},njܝB&$WC+((B~J۷; ^6r7>U95[HT -:opwF\LK'jz* #{ *2)a+,9rX LNvהE|ԫxOlzlﴢpX^;if->n rp Wyd9unzzʣl[xbZ'.V̱oD/K/ &D次,T;z6us/E2FS/Q 7FBv߂,A5e qc!PM4El,ֲ1Z}0Z`;<2QV4gHERj`})9/ڔ`TKH0"Z#GBb܆'TZY F:UwrZ1o6|Th;Zr8=صW̒uA<'B΁og̣d<(%w2`Mi7]ЎrϘQ㼙&Mv6æ6$]%׬X~m˖LeY ThY_/oI@WXlV n4$6Ia,iѝ0}D k^50uux“4;Jξ1"\<@ -[K2ǃtȊ+bY` ] lA]eR̢_J^*ko##RVuڱ g4FFa4k1{/Ⱥ~:pLGW[JW!dP힀p##mydѣfkI[K`%~|:š< SJ5uWtw]es7tZ{t`Ԇ |i9B&6(}+qXĩ2ŒC$bE)m!%Z5&R{%K;vXmq5\qp.ԋ- oȗeU. trlΩ ^r- HM{כQuBU!*i\ F=} ]&m=хyP}QMjxpZ哹;c7bi~"J4ƜzJq]cd˗gӛ QwIxiN9Eclهj[^q=âS@OndaCj5m}bө+k|X5|Ky 獨SP+2U;o|l6E_젵@7U#b,'GE /ޜL]0"OݶܫfɯDqP%b\A߄lq] >3ߍlq9Vt*b)[;` "TiU[2_WDl\;)=3?T pjpq$$!:b?\/AOr49u)0F@$J̸nJjm7,@8eP"V5Bo{l, vܭE'^Ľx@gRQ=m/s+4_oĂ;S=_ef߼PоHqf5HB^d@JޟZϪEAF9 #ƭMƕN8[~öle}ɥ·;<Nc/ {nB(~4!hH3/`Rz 9~:и=!NwHQ ](gߖ*ܚ.,>ZtAuY!jEq& p4y͎3pm1L#M|cC;i>X6MET ?m);B ^ی+O_|0t٩wX6 >ISMc4cȴ’4上n5n*q1b*8%Ro0&%(V'[yΌfmkd tY η2Y]|b f̲S%޼XzkK Xw iCN t&wXeW-<1>Qe" xOa@/~_.ҕUTnN5[LFe)f߾#m\;Ͽ sE?%yQ)ǩs ! ~u/Ɍ4֙wu՝]e񨎀Q)Z2n ΕLWŞ V&ՐKγoY8G%"yb2 ̈́11a/XжU3?% nR{NusbEx%ވS ;c0 oU={,ыHq0pQE= ʡYl {hsz!h*Pߖ>m=U~ĩ )I]K!b͖ nL?{ZIX E9Tmn $ڑIKt&(1]UY#?¡Y9ekd(?&i<1'o#ĔAc]@]ԟbQÔ ˠ "uuJSPBDp zDddpڽ wo<< Rѕ*ǯ: @A}W:Zx*"wA1藛(ofI2kR4f;o]S޲jv)%px>)ӌvvŔa'^#J^*5- u)^atyLoVaR[ap|ǁ1H;ea-P4`5E/ ¡g bZ$ 5G?0La}&<βbI *P(3~HlӚ"TMlQY'QEQ-N} rG|XUC$+ph]nc@8_JD˵!KN=}<7fL4{ `:U2f뀎I4V,BoІG!t [24PfMUX IgVb2h 6**d)40Bu]1zNh쌁e1 W("əK=m?sz],ֹ-q@~>IcC-F#Y9 azgm*$6|6z,'k DЛEK[M{nPpڀ=ٲ\Rn;3XfGe*K#|No PYpkΆSWT >q0鿩j4>Wȥ=Ktd>\҆w۩nO[;({PV|OXtcZg~B zdn=nsˍQHqdj#+pEQN*j}WƢ0Agj;zd6';ne w>y_xi9Ǒ:hNq"“ǔΌU}adܚ J˻}Ha&FVtS֝9ttг;xP*a,9LtH+(S"k~1%lakh?mAFHt {[ӈδ`~*' a>|N8,(͗h,dt't|{xfAr@8*Om%QK8) $'(t#(3$0TOu&8C-{qM{ VwxehV)x00~{XnRX>ޤ?uh^ T@⮹3| DOl3T Qr$A̟#;ƽpRt?<B8Q֖ůQ̮%sĆ+Y=)73'7jOJ4sOg696Eg!Xq^koE\^:[b>M ZhrY-KHVm `c5}L)ګ^ЛiЂ}9@O4g{l{+;Y >G9BX7i!bh [p]nhINO{sLxTf?ܯ+p?lsI:@ڌu=@'=V݋ޖfsx>_*T|P \iE~BυH#ju  c}5P }ngxP?s^{itˊQJBRx묗ޗɁL4X*v'JAs Z2TA57m$KUgS$"tvJ==NeqH5m7 v7@xR3$T֜TXk/W9oդ =Z&w8Y+0vS*rDmRGoJіHܧY/8ؘd ?;tTqKtZ7e3ԏ/ˌC3vTo铌cάW?n,Yd–\eo$۪[ b޶> }!rE$ "Qawҿvy?˰oN<PoBwg]' ,`QvQxuc `7 lhY:2#kQ=S`-݇V ofbqB2j"FoYC|bfGLܒ\znԦMq?h:(+!fg_ )x <:Aq\Te%2/n*+lہ6+2`]LAo(@&'o: 3VT^ٰbVX [JIWfaNge-5k}Zs;=9L7T KCQoAyvK`gEswq%΂\FWӥ#r*<!% jvn(hAɼ`H!ȑn]G\TfȰ!d2$& f=iٜ`ɨ:7҃R5 zFm\CֳjG^%uܷ<2l{Dʬ~?NeQM%4ػ-AFh$jB+a|\}R)~UUx?F*.}K yÒ$ŎʥeD*kn@ AH]eo,AT}AL 8R q7EVA _ք-j  n0zg۰/ūo=2s$iD^*PniU[LCLBb7R3j$bI±Eۍk&;HTp`MZjׇ0tu xaJFպz(R$N/iGmG<@sv? N|Om(C~g+WkvFM>ԯ501:jO~ j'ڧׁ}Dx^Jx<.2u۫Q>%3V&jl~݉B}2:`>Y] gϓ!6:Irw?;Q҆2 xKk`难YF, u6$ޭ@nԙGq@|۬ U_ tE Ǎ_3?#rX`n LPZĖV2W-9 gNH,uoy 3Gg(Jk [̧lb@- %-z]vx8$y ߰|)j_bfF"l͢H,DXбj45&b#O&*d\aOKa B*̄7M?x1Bn64N":>Y++ij_Dzz{HIJ.,QM_8Gcq6O֑K(mD ӼvLB U?NCⵤ ?nJ;_So#%t\c͙xeLf]kN9U7Rgs] Ӻ>6_G ;_Zp~:+ fm3Pԁ;_ -xLOH+P{R<'3w.157XY6aդ>2A=`,w6ĭ~4Bݗi{o7k'voCqFonC^"5ۭǭ<@ JURm` .I+7QMv2ee{t ~'.)yr!$Ay_xgij _% 8x g:c{N5N|ۀ- l] Xw t!af(ly.NW(iMfCD^fxW6XW륀U%om+y Ѱ;_ k4QbuצJ+ɏy8@Y mb>aOEKk/$ X:}?eA4NO8pI˜Q #t)l%ģ2|Qّ]³oZk. dɣ֍ Y(/޵ؕꌍ)"M"4k Ft,uiJdf۲4sEJ;kݐ\] LIHT`O,pd$%%ʼn#L̷]LТIR0RTqxFUP{+S|NC84\C9 -׊_ԡSnCFd)͇f8^Lv<`E "YWb_ <5HT; (!3+o br;7XxDUfRWp)N_W%qD;j"%Ld5sR\w S)ƺ^씴qYN/U܊of,f]#Oz7n52$ sXƅ8l׽T` |∐g0?BNH,g y%caFP"b2Rb3@:"o0ީtByaE|ԈL(&}2E8Uy,Dɾ,/a$ ΓB r6eBrZJᱯu U:UKz*)5ISO z&-;g+p5"87'jDL[icYeAC?*$zB?رTq q&kBZ4N%p|D^~7Q- P_)JQ\WԤi0̓CHsJY[/W%TFOuC=7γ4Y䲘S.Ѧԓ@>+Tk :7S`Δٖ2aYcAZuQ)njy% 4@:=8{Z:챮3p(5K BUj[u?0ß:v=4 eSc:dRj5^֪܄Si.}B}xZqWV]we/fA&> nN1S$voG SE 'FA+d  =Y#B7rE-H ]S1WkHSri@+?*;a¬If?݃<$(Žw$Q7)BqwCk. Q oi+R+NK]mMj-0$)U5 bqg;D@~FаTq>kO~iӄ# 0r"^yH;dPl__'ʌNЧ^Zm;rz A=tTw6-JOGJNPedvWK eߟ=Rz$nX[Rɞ-%-b;| "< Z|xugTMi/.YcR bM( {!kFgޗZfzѽ!fϟQO=$˰G&M(l8.ߓQT*DA0sD»ZMJ<@ME'fޢDCWi)4Єz3]\E։uN7$]Ãf~J>G bhnnO-vdi&tUJwN28iFlrWWnE5yXAEϥhwtC# ; ˞7ㅩ%AByj.Q8ʳ=8fSݙ;e] .toaƾ6`vJY.ßeDWJBwbH 5G5{#Qb05N@RjJ BPM *ywO#@0H>Pi)QtX|bj.?6Wj|v}q<s;m\SEGdSCѰxw` !Pn]hM$P6 ]f6lу/QU_t<o@[suS4f-Lq`#lFC]tPM?^ zB,\CuFdJ@ӆARdKU,NSG\G^qLdGc(oceY`N.r_aܾ3R9Ok( cяAv`sh (-I.\S"yTbNiyz9WuA@VT;6#Sg>3`y^:KPDv|3264 wy~_Og}HoPf' C(4|mzn^.BXM;3^FS[iʦi;Jg)Ek5vUn;7 ,wvs[()ARBiYjdRBV{Ep: oA;(ɣN{ٔöGI3a&Lp`M_m|"!g>,] , J :q{"7mΰd p*!'z;3 %SR JqBW[hIV<Nx*Kue!"=^:7!޳K-Eu\<WuiȞ2 " *"1(6:ԝʆ%Űm2P[EV1Yh^6tRVO.8?WJ eX@9`t3)|#ZV KL ]$kGb>>b8pu}OƳŏ Cޫ5i< At>q㏃`Jo$ Q=d>lnO\{"yA&jCM}M$ Wܞaoo L%@V8n/ߴc)C*Ǣ03"^vƌ":є;Os`O&FpU"qj3;x9e(K94űVN7+՛ JצI"zR2. /09᧰$;8bX+^UL&pԆŊr cac[,M;? Zz`-m>MY E*י,J,h" +[Hhg\3nIy Ct ] h^؝|Gߜzi ף\ }8lG LR"h2=ιKX2}>[sJOj@w3[g=xP!̓0Ǡ 1gV8'(W~x98?xhdIf^t/nbԎ%=Ҿ;jNLdTӼrƋC5FYJ~ {qq#<יWԉj0fXP]/Z`XI<.fS ʒBȿ N\rgn@0$q2 #9.J/ 840,  '6ZnCP3L@ Oľ'ȗuz0AYj=ѨxhF؊.o8[+kؽv&6]^i`-W/~q;J!N]Ifz`}&XtϟQ⊼oӒKo)HDoI@1 Q_osn}mg{{23UmPW=+mΑw(cXKے1bIC QB/T#IN R_)v/1F9l|fc/%Z1$==CK%j,`< O"< gsVf؆U-?7"~W> Y3 čIՍEu= `J+бRs-/jmfqC PrqZ0)םvuȱVB0x@_C9ɥSbehF qm=V]uB$g֒ؗƴj6qB}; ֔q0ЉpVc^̽Q1-:F%P FV7w׉2mJz| x%_f?GoYl&v7P'ri.+4-\(]xnKkI[̏6g'doc.fgKAӅPMC.Fpy0uτvB RTRud:GGEij5 7SYs~t>r|w*U*"T-X'JE4=~'jҬܫV`zNH2FT-={ ~2;wbtF"0_þG>&)Us#ZpY<|;8NqW8q<ʔdSG388!\%jXD,\c '>,ߤG!(loalEzݮk M|펳(  (>I:cز I$LICw7 ?-sod\o%'׳cz'RHkY TmFydv#Nl{%zzV9`S6ΌŒ~F sg0ZM49ga # 6_G5S/(Q"F 8周+ڻE.A^@&q+s s*pmOIUGu!/2k,Bb`y~6YgA렚x|CW_EĪO#łҽARP1l[Z@[j17 2%z<^\j%iƊyRij8pOLcƎJ<\J2b DuOc 3 xy Dg?0N3a,vqYE'ψihnq8GACِ%i4t):M `p2wِCw+RM!I8?UY B6i۴:Sg?lŒ-Ƌob؊P҉~|h_xw߃)Yf/c[ո7p@ǼgP;=$[)4?IS[EkS&dI[ ]ӯ*Grjtv{^xMu(bgSr~~\ FPwb*'(hė<KO='ep /9S20ޏKb$(]xW[*fLN8}vy[E8-mwsEBՌ[~c0E4H>W<[u^Gp/fsIt.6i)I!q<]P5p0./==LYÙ˖bY1ī+ ]qLhLϵu9,Fn!$5N*SCj`JÙ:k[zIoP߫_܇}]ދ?UU|gxR7׭mMt[}]y? k|tY|uwNe?~~b]#oW<+{?WFU^?CcBs '&=Mn8DCiY#*=?_д{ԍ)6ph!a&UoD3>/%*NTbi+&*!LmuAbKM ”@WfP{ew1jɎyS*]&{Wԃ_h D0y"=ke@-3<KԤ6{I{O@ʕ%P^6Cq|X[ .A~:$bcZ8xK'{:O:8^'9ҲS%!TXvorGҀv 5#?~A.rJ+lb'$zhdbR*=c,t͹+fىM9~dJBq r:m-K퉲UanV>R"8 !W)xa0o%YJ9J_0PHC??"yAX;&{駌Cv=2obxյBd8/=4Y9ky"‘ߪ#ԉ8cbI,%(c-ZpjK$ r5_=Ͱ;<;:^^,fQ+E%db)ntCw̆zӔQ{>ne0 Рh,6 f:p}J|pZ4*Շp3ocSB3h2۽@Ӧr󣺉G9ۼ@8r9p'}F6x<}5{{MSEm1/7suSSv0&۳ϭ 4߲x݉;GSղtt7Mz 079'ZP2Z_Gx{TT(!'s];e1Es{o0n@E&nH/5l?}0:X}?S ,b6J8݂gӃl Ub9!l`-AϞVWb)~F M0^t.? f~{d#?GL7G瑾P2?ƌψ ׫ڇ!LK7eeF}h9$R?6nɋkb;Mr Dd&}SDF1Fc.iFd8BoC&4s~ʃ9gUq#$ǿVu 8%1N}?R.W N*eѾi~R2΃u/'u+Z>DNT2@)e Mz*Ggi~)-_ڢ:WcrEa tA^+F]lk'Z\* S?~j{+%4X ޲poiEȜMX ,"'B4&kf ]Vq|g,-N7T *c~N_ +efۦWqJϼ2\6*័hAJbF&/fZ!p>e!2X|]%-Y,Orw(PU 314i+1ژ&aϜ]s@ّrڍȁG, ENah:)k}}uP-o-l]e(SXǧsKg%LFO zvs m\҂P^eu.8\yFaLG~pͧtM.<}8Ok՘t#s@8:ڑ٠^.c9ع? u{׹cm>N>@w!NN*Bڏb Uvo/!7s;@ ߝxn^trZH `K]tDezsͪ M}ecPi1?zdEY4Tq(z3y߃]w Ȝ:`R[@_ޜo_,k]\pٴY:1FG("M4(~ϝq/ ƃ uS}:JC?;jL<#Tŝhy;>V:"mcS?V24b¬.Ũ1oa8ݎ(lLFH2iNTI G;vBf;+*/`y|Hu9;mHo7igbV= C;bu5 AdAKuAx,'ݨב PnflS<۠戽cQӟ["jDo-'0%'3yTbEX6ڶy@8!@F{懺w "fF.KT{ٹO0鰓#)'q'͍_xɐm%Y >4 G u,,s] ޚiF7V 3/0j ]WIN%: ϶5 ,AZ+ 8 Y/ $Y\1tA(*Lpd~*0v%,' xGR A^L!kJT:F7#'D[r.G˩r"/1؅ݾj3atuATR-~6Sj 2=`P):pY:AOnD9뒊[tfbtV d !dyvܘ 7Dlyye\ʗNNjr*/6/PoljnyjY1D!4 .[#-;6*Z!Yňg s7&w]EnkT Sjv9e6pz?S-uZ[pΒVcq8i g8;|.Sڮ{a œp ո2+t6gv\5x.5TH>ciҔė'ylRttdLf4XGc"~, @ZB$!vVE-@pa`b¾ n4A[.LJoZLbem XXR'JX{vzx5e޹вߣELV'HG~M”XΰS g%saԴTOTN=|ED‹MP%E!C mԐ6q r j,$c6Fp}@Iߓ\ vS٘M;pF^ϕ-b->alW$V8 fBtG[p+󌚕էר#f,6UƗ?Kzai$+1VQu:_ 0A_r-Ն{Kp$GNfn^IyOz'LԴG2ߗ*xaR N,'ǻܗۛ%_*X bǒx` lWDA l~+ ]^(|1f`a/UϮ29 b B]-^Sj(`RSD& .?pϮdBS`)7`.zi-:AS CJkkxEFz(hO<<튷 }xiΡc$zϗVa了 Oz_3>xx]Ss6,[{ Y,K.{ Jh %S60HQSRtZNʑݕR9,p%4>Wc~D)FOF 3vӟ[Qefh+~CUXr'%=Yow^D|sTg3YM(Ƭ͆T޸`M_Lk_BN,M;s~*SH(w2*CHF$r-B_ ]S$Jx<MQPM㘃=ľ́.K.(72 i{߹0;a<|+W/iPȝ1>S@BPߞL4_O%#:bD:˫ ݢHAlYƨi)xP֐BST6t4m|?6U)eaRqsL{"L٣JR0}8 `is+䐖M6/>xúʄoT!T\H[bR+KC ~V%8H/+NKw u:\M;ZO[쪄ImfdkG}8tYׄcb\XPo؊}.(3t#j(9T=]'^/`waHؘT~no^mL=KKOz.99;ئr֒ɉCuQ"ORRJm/8䘞8f3_R< KQƍ[ m/PAAegl7nIZb4M?rm%16#$r6^f~1(ng^$YרjizƺZ 7f ;LsOO;ٛY( |Ck\#dUyN[*0ań˜c!tchxRuMai7tQ/U@$k56# h>b j5Y&4A#=}9S4A73#d2+\V9}LzGҔq~p4?;//zjX/yb3 AtQXfSfXs*lrxY 3c/]F`^ʩ?QJjk0ݹUfc_'kT ɽ9t4" ZuK@b@i-zVfɞW=KW.V{SJ<a!G7̸f_jδǚG=ا"]%45g?xJ$ć¯W02d-p"OͲ }]LNr:mD!zO;ʘJ<}fջñE女P-踡8>ٸDln?QBf\q195k^>5xtTMAO/D6I?&w'p4ڹn#V!!#sHE8c ;h0q?t]6G@6i?!ԫxt s& +$H<{{q5O{t'[0vsOI+ϙ-ީGNT|%0"eV<ӁܵZ4H-mmSFs/!jJuw:vA'b6@9￞x[+V8M] U6.3{Wt"$R&@Onw@]JMuK cyyA ڄs8shRwTu9e:ԡ0ƽJ'bqEgs9rkP]{KLI6ӜyjlO f@6Me)#lKzIK{w pm3o[`duLeX& pzfxybsUHޔYea"4Ɔ(6aZםj-{zWAwDQ'3WR AUOܐ@)}Fi[5"4RϞ9Zq}/u3A"Qp 闏<(4ufOs5DdW?YGN<#4<_3{N~ݔcɎXLkgPÞ/wVDK-H!W埐i=R & J_c_ _ҩm2t]gm%D@\uGfNE >~d 3p!J(_5. r׎‘(SQެMi tQ[{tYHPNFLN.Mez[u{nR0_P ËVR)`ع٤jI>2>oKL rsk w5-X?4R5{ՂDfpڜ()>v87yt4 xeɐE*m\osᜢjGς#DµS/0vs« f fg)cwxm WAݝk2g3Ґ g R]\-z@zd]~q ^:,w?޻ݤ51Y%Ybj{ٝ~%rװq +bW"qL:%Hp)agO9Qu^uKf|ll@Odb&Z8TW|>GU^IuA۴#q-D*wNS5 "H6[pVRz"zq B=OJdB"K Hv@ReCxG6Lם)Һhٔ*l6ld6Z=~>IcVz@m7 V1Dܜ,Y :D#WZ1ʥ l= "ަũkuBS^nxS64,gY?[2Xt\n2{*RyHMiX]6$KT`l.>xfL I g͞&wIў앷EMi̽{B)"QED{qepg7PR'ݿ<>)QMuTk ظ DzgTmv-Ku!ls6 ĜnٌXTz /{}gh|IL~G/_ƏF:$kڙkb WEe_#hs5$ѭ;k&Nxf^EsZkc[0} HYZ p M0W Fӓ'^.ŤJ41iA>a;utvW&#KM|g0 ګlhק8Ik!E:W$R# KP)`X~%&iǚtJ4B'SFŕ.wHHg:CXTaF&;s ywrHv f)di&(2f8+h`wt*TtXxMC&pD${b T =K:wA/ux4C%tj?zdL1Oƨ^L:ify\iLE$"̘e P%dՏIq"Uo͖Maʨھ}xc>5Q^xho9wp{]Tsx ՝JOZǡS&{몞`5,g Pa j Op%:OhߡVK{hyј]f:e_% f Iq{9 w3 Ҥz U]6%x/0ـZN#[Olx;{z?_e2[۰h edU ۊOkr6|yF!LBeƝ06BK2|Ќ>=FGcq'w Ҳ0 wS]#eڱ+uF$i$!;CYZgPO>G< ]Uā7,\{EGuHYVTۥY܇vQ;Zmy߮w2l-L$U&p x!v*I4*})Ѭmᛔ˹ aA.jdAZ$+4v*I}BKM{zÒGJeE>. ],;q[XJ2 Y?v1nDUqZ œx|S4cfńQcԌpWj D|~w)f-÷cXkVwBp? O'GBDM&8[O T_m(mMl>;zؘC{i+d`hڟeDK ˰0V_TN$كV F ˳.-NVú RB5KO}aX_lRm?ekLL6pN8}+[|[GK\=NN'_K|wwV-B>mt{Bvo&'f-^t…}- 5Il:05h>Q+euJhdžAϺ($brR*u i \9QOLwrX{<-U*OB7ly ]ZN=O7"Gssi~NcairfDOB)syGi~mt۔H)7FP>uHt{bq넓f_53hAE;YY? )8O-QH(v|XU|!-C-"ɃZC=O c;EWd[&=E\v}I~(*ukH< eJ:&<*WX*g/t\.irŇ *(I;n m=P^q"J.2[ֺhQ@^Riy<ulO왗 ʱ]Ihb k(ǂ- <촴zF\tf6G:,}&/smՕ98( Uu? V`ˇ= \ NՙLt܄5w%0Hh#ǵj?w#qތuQHU rO.p&~""Z8"6/r-}]?At=M i~-69p?bla)TÝVn;JF=i{LYrPh ,^KLCWL~R@U e/E{z<ͣ!e@̚ $̕Pq~Y M{*dqvq._oș8G$d:Co- "|c ۼN/T^֬qIL{4Vp!ߴ Y{S>bҥ(BxB,0XK-2 k~(toy w=6U-ByedCӯ6oZ1~̙c l@߾YAS*O:!,F5.z5 nQk.Ҵ`jUE_g BK/BQw$e%,#dYa("­ TqWT7Y9`L!]E!lf*X-~3{5]o/􆌨n.E:rugf [+:T&CyҏvjJ`ZbW )9 yb )<ݍa@9jY.'mn/xRP-TpC"`a4S2`NXj\3y>g}( %.As쬓!MsyvS5FKGcw}nԺsq;?p19pz ~d?B EK줵Ņկ }U+h0:Q7~uvq> qT3=ihۖMΚA}٘ Hc{Y@> Ch0̵`,}@P;B>rid'kXQ5yM}ъ_qaR"*@wHHufS 5GF9Zɻ3!~+Yϑmڊ|RW 0PQ|XV'e)kV;@x*w0K,>E1?vmFdQ(L)kS!U6FNj"#;jԽ#F.mD/39Ż/+waP6S5"jJh}viUM}opQa׾"<9p|+mV]HI)|Oj 9 eʼn&u:i BuFιi 7g(+}TyWҀصm WQJP-'{!S[ Ӿ vgۋkYRs"+^q37Bfe<(MLU RSjނLi5BƲr[lA T"Ѣ#eR*A2y V-@][$Ò*DFvE/>'Z(=S_. EhjqW ENSv1N<ũ셅yorHm6FJ38Q Sq=#6Ak6#!Q[qUi,L!CS2xU:ԭ+W^0bGk%({j8"U~vkP`0x߈I|^ 5#_/}ZM`%(+]Vg0ddƞ/jT >u,Ң1G󱊳7jrO,~a0žݜG0ybp3thS4F՚m=h-bUnZr潾 qC즜ObGr{^>Tnmmɧe4G[͟y7]7RʞCz\`L,Zf6 5*[Umӹ\\KcS;Yi>>Ɨ՘0e?5Cg2hX^R] ;]HD~TX#+zheΗW-@>v?,o/aH=_-PӮNx詁qdԩ;.j s,)"@RSַWavLOPJb$x2$r4QyRGwޏLvgIʼnf,gב(yH֜>o&Ș8*Sv9y{bUH:s(S@ 6vۼqg6$qfE^Sڭ7ˎ*=Q_}ײY1>yYEg䢚p/=;y"UOϯu=5 ]ˣuG!e; ydUET4vD~:#隕-G>*7kBM/fjz E)CxqBڽaJ(;X߳u~} cJ ZT֓ͻ<* $MMIa!jI7WI?zKG ](v'=?bSvTe>-zd٫#]0 J6w.F/ӥ]8Њ}rfXief9YkzԨZ7 rl{5.Rݎ-Z~-AAJoDO-RZ ?H e̤v`[T<o5vUKBn1#/aZF5ma'PjB4wJؽz_,֣+!dm:[fNEgQ'8*T%t6m#C:5A:δ]=noH5Pv[.GЭpĸsTK&+<=YI$_eky.MVf|MCH#\Ky+{I$|hnͿEVұoD)c ;q?Cn8|/e/|-~}sz\iGBZ)@ڀpkR+,f>WMf`,+|-xzˑ*Az3-9P3VR[Cӵ,m{5$Z{eŕZggk&}p!#qm+񕊃+i {)S<钸9D6W%ȹ2仰 υbZVn(KK_5 N~ (sGfö́jX4dϷfD6ME%Pߢ62:yB9%ya±!_WgPr 'FU߆#^F|5LFpJdCHۇpZu{ǰ ƘS=Y^ޱ/iC>=RDi@J:M69R ww;M&-<$8]_kcnFũ+ضCp ػO" F&l% J5 N,r똂RΩmo(4!l6w4|_.SëRfCDEdusl)Gnmm7VQTR)hE2&YR|nqUct}ײal)j M.Iܯ_r,:wWqp,1zaZXp?I=VÐe e!37~l,LL}Џ4wyQ6 >$-jsqm;!/c[+B`nl_FT;ƷZ= _|TRwbɋ*!íe~Ij9nnx7M< pQTvoCjY0-wn6!-r{qC^ TĭDtKr.!H|ΜCpž$#[‡"|ZAzC9'߯w"ZkVhj=D_QZڀj_0@Gm")H!I)NF}1ed9}9~mǯmٕ E!MLQkh:җ30L qR~^ܳ ۃܑ巏5yiѴvB.h@W]#\lwgb2NTA1>VEwςd)si.a!Jf ~fkg }>*I5l#֧c9ko3Ivpe"C.g2/řzSq5SoxjQc7!̰ڂZq~ 6Ỿ]!`( bӖka^v]$G:D? 3NHj:&M} %!t7[I 'S,]Xe$@LbqfS"Һ Q0,_9S &xG4U13s-BLlZ7Rl gہCbA] eKh>6o97yK5by=p3 'jnJ3x>LMն-{Jƒ]80kO:N3$:(k폀EӅsZ%* z)Ư 4D37S|s//9thvу\",Än*yFcV|55a \X?pjwr9<9`! xrBD ޤ̀s^LTJ}Y3i̦ydSܠStyw;\iX\|̵ iZ ^&h4giRN$籔!6E"Rl /xq뫕h[9 U$E(CXAc2*jJKËMA9r| =O,Nl/*}'ec @[MlL9ZR5n!a&EJh z|v?vADwnf/뗞cD?ujh{t\*x|մ:jQ"0s[D݅n&FvFZ-~ &Ɛ$.}Wa~Ja9C^d(޿/TrD ؔsi,5.[^QuF%l]eȸ& uL#u7 iV EB΄'䦁,?CȁwnwqH \;%%$֙MӤҝYUg?c%y K"SJ5 àc:e7OWڜ+=JMFXeaJTV:\V[H׫ t*DVzJF[~0/wW.+"T7W!F);7{mMBNl)'ޯiAsbF TLv|21%djl5ǎ1dwWҗA)0"[Z3qbrF,jo!%Ƅ#ޏpYꁜpzI7m"[DYl}PD[7t-)8"@S.OfzԆ PDR,m >YUAn\Ɠ\׊;77-4 LZPTxбVv1S|9 gQHmzy9D;Cx& <4SbouIMIkLImmx2xM} 7n%iށO@yڇ?goJt,!B[ *mqEW,œb/5!$fdNr k߷Zdˮ3 Z(hs6D,sxxE`^CAGGQhN#:({SUPU S5ޝbd~FۡWhk+ vVq~V5nQ κrƕ>8&*.+g<~ c 䌟J(mjՖ{@-=qVRVJA"PH[eߖ8gP# :3rH_v9nC8پSj,R߈UIZg.h(-٢M;JѪPAB tOJ|MY5M )KQ$J~罻4t-L ƍ3գxz5(-,l \ |2en],,Fƭ~4''9Y0 ݩht0:z% }I?V`@ l=Η{g5}d_hz*;JZE( O* ; e5~h}haw!p@0*6^GH&~L%I֨nfkղrТ)1JնpOǭ#݈ 2D%*B_W*Y(>]rPkfvv'd{ S<͔ \Dmw8-c8in|DQi\V9, MfVp_VW"!q-{V gu:Ө劔z2䈡˳*Ew[J#iANs޸dcm2ᶀתg!G^TCX1uۆcQ2#| , i$ ׭҈Yo%%ZЙCLq"C֓m"vO+n_$=Cn%xG\i[U ~\CFugu YS/6/,sd(0CZaGq?U4﷮AQ(?*v@HqOQc/4hG;As Wg};聇89TTeW JD/r: 6av8ͰePk$%UUG>„i$O)^KfM|5RN _X7A͝ަ.\a:})oNMy8 2"H#k^/̥E[g15avX"zď+'~%l֖7LӶ Z~y|#u6Z,Ͱ(Y>!+B _řZۮ@v#6򎌞l TBŅMSWWY .@,k9:E~U*?hXe|Gj٬!&&eUШؔ Q3{Qgxi ˂SHϞv.wmԒk~C=%ʍVS A#X bagJUIC_"w[+^> K6% Zh۰Z>ȟFxՖ$ۀpK0 3\x>QrUA_,]i)\o4RW|B&LA/<`rԯR I60W6 ǀ9?0`jk6)_0,7^(^wIH0#F6"xZGY 8Id]8|xĎtf)pEVB[vƄYbm Xޭ}H*uH87m 'd Ҫ73IКiËotn<)(+_z&H" v\Db0t'cs\ 䮫_MX‚%Iք^Qㅋ*Po< >K|@n=ƍ(;9Ab:g0x?q#&JJ%<.~ǘ՛t}Nsa9y:ixw-7]QPwZ. BY|UpΦfQL*h#U,Cj{0I A9mi{jr=5qR/>1b8dr) R96tj7MLK; ^'PtfzHE:<' ½/}t|+߇lc=R~U->=|xcᦟ&*[Uz]s~@_?p~}c~; &u~?W\CH쯾WUߪ~O3dK7 a8 ҡEрriXO9)\<z#5Љ_$8O&†k[sN[װgEQvk l)s (͡K (`~2 =9^jmm~Y[A$ e9 uG'Cd&!1W܅,j/( &4 RhC3=~0㎺TiidXw;{=;F`1_=*GQ-&=NE3poDޤ(8GsS_>D7̿@8ĒUƺ_PNA%8jZh9U'%oM:c^1qahpyf6ChњiOjQv >x3rܭŃy3"&+YZ֩Ȍi ?FL4( i N1 [ \0YP+wڿs40C㔦 jY]gsl*L A?*bG׉_ߘywj"GgVHt 7Зa{=nvcT?vtU3-Ҥ ^%iqWBdjK3{F\g @$QO(F8ӑKD4a.0,6DK ЪjO-1bh ;j y ʈ#3zPǣR]1k׮D(q|lcHxQsgRxh19jf !"Dj4mNfUt|Z+!Dk)w4!D#LB)lq:ŏCڱP"FE]w9=БVbШP29 jpnzt  Zh+yV1E[>.ۆzh16TS.i,q8.5 Jvq'@].C|aM½f t=u,\̃zW¯{ӻTvքC}(jJO(]N4bm 5C,殰 5 FaZ"l}+?奝7Ѷ%?m-rp^h՜̔#Lԥ=oANǧ>'=ge~.,2rڈ>w]TN gh"9m怂ALfPֲ6{2܅3zc ۢd7Kp Cn^ƴj7JigMb ,QS <~N KƚJ-Ae%" 嬹wFyЭvM2x9  t)qޜ^W&K 8Ik0^KcϨj-7''}|#MFF4+Ci)!"xbs Vs|ug.4Ermc "q.D+ VYR n!ڌÒ@5#0}IIgd~XtoZE܆-%җy^v %\d^xY-N!lB4=O1h|`MGˍ@~Ͽ˩*!8'(h#pDomZKoRdȝD'|=l|ׅ(WkȊ]1M"Q Q׏6<~*`ɡ{,Ռ431%H;vWcy9,3BRu&6LF@-DP{0KeC0{L 3'%~G z.$B{iom[Ѕ߉=iaױ( debIX5Ghۊ8^^ ɥQ2[MJ:D|I z IŒv[;ظgrXLT9,ý+^v;=la>xkC}+^(ΚjK{o'Av0x?>X qI\\|3m)fch H9D^]!|}x/.>}p U`2vm4*#bS1zg[ԤB]& Gd# 3h̅бf8h.pA"}F3Vqgk0U=~5)zaIKbT[v4:>+v+2&*yyY|h`:ٍ+Fe|sѦgXK[5'l}P1 @] g(?Smi_vҤPi2 !w}w3Aݼq&ua^_VI't4H =Q1PGCpY e!^anGڴ]yA1} %PQρ"!fT*2L#CQnıNT.)ùE,t.pɓ'!j$$LP%9F$(Ƣ %()21h*vR;wΘCMThn!ZO[)[exWI&@5.pVuF:eؾ ef<{swehfHXoHsPF7 m$of겅'C:1 0&bƤgQӜRtgUbhLtTv4S+"H sUk@ցN]2,qX;*E8yQ#}1ML l<R_'ngQ!tG<4\A츋JO~kp([0MN\ąGڅ6_u300lʅ@bSP|<ڪ5{%;PaE9؍_+LWL+͂6L.5a&>v޺w& ?WmQ(ߚ8'2qWs^AI?N&rqE,nO <VWc:G! MۨF*ΐ3uzo{h'9glК sQ%1Q_ $s5ֱ#ej0YY8jZ2]ӛl .!c)e@H9aOk>^FӡRٙf>8ژiǠ+xG5ET9|*NmTn%G*'@ӊsệ뿩M,ςEqKMZ0΃'Y"UjK" ܁v-#}9f*1_+b+"m,$'M/jASJo tX۳C"{hq-d3uH>E] `vju^-, cBćj//j*zz/(|@K49MݹݰBswv! ꨫN].1YHѪ H}Sƫvl3UFmHJ슪'iz,-f_)tUq ؂5T@D)Í9Hߤf)c&덌?}vB ga.'0’D~/?7Ж#J1í-sQy[̆ ӹ*I3R))J`m`0Zl~_ҵ1:S>=#̉q c%.cq ڨ4rX9B5#͂r] oy7^a2uxRt$n80pm=)>`kѴcN%W63-UrI;LG /`RD:~69JwQҊ4lЩ d碒S*$d^|Ylq h?u߬m鱜&ӍTOƦQgFH9xYMRĕ[~|\M-Pp!%o&p0-qP /%'ex8[4ieykG ݊2Oo"$]bYMkjR&mɧ\[',Y^`sٴ*!Jb9Lx"+~`^~4y`aaQS $-i3IWԷ bчka{Ϊe܀|aG^CC 5maƄ`KL<=JEO]bӥ#&p¸ X8|Z9b*iCo{$Tt .a小 >Ϧ<7I.VG>%WMD?H$ P\t.V)]]*U.ȚyN){MzBƐi=x oo3PRԏKXeɋWWBp^M$MQRd3)#oLqyo't|ΰ/;4^-9)I(rUQPʟ֙[W9Eq],z3Z`0dG[Y{xy}pMhC.-%c.FU*4KBF[c6Ğm\l9O7(RU>LEFZэU&礫 ibrGw٩q|7!ՄW9$oϦ4CX0  H"SEhH~USᥨz\DLsJn8|dikDtF1fuk=_:b{/H2\?o&_G qPLt5̋U}"Hp=,j'CDilZIM (50njj[t-j1cAtIAzם;xD^Ƹg^ L%ED}KqJRЇùw1wTp!B3U&1~9 <8fk-#E^.HV: \."z o؏N(Gp؇lZ `]%Л9ɫ,=zq>ƩA]E9|+h,hXx;\ G(Rf8HA^ P) OxXA7ZG9j,JgUf:)ۄ%cBcn K|Su'8ol7Pz$ړyO~ݕSR޺r "H]>8avC$ W>Dܸs-jD:CGUu{rÖɶlc(tHki@x_9e ձ ! )VKˌV܂z}}.?HwOaqӧ1DX%Qw,Hj N҈s Y!ףR(j{S8u_O}yk](z]%>y[ݝ} .5>F[UjN||=΄OYJcV, m*9p}f EZd1 R:O Vl_/fɟf4dqyoi4gDuIOzJ>=T!NtBO,# L8q=B$މ C;'^UZT&MRE6QW0ac.(ŨK%[=Z(L 7j^#K(OONgrW@8֜t#IT 򹏝y"ٳѝ?g/v a6#^Vw\[tfFpo~( uu"NQҚ&s=F'GarR n9U|֭h5LpӖi9M1q_mdT-.AD'~ø [EJv9*/{Awt.`)*KhY]־vs䵾Q}MX=ne&`Zt I /[3X'tc? ]%_7=ٛcɱ{xx``^?pG~lOFiu&HqƇ+t7= =%PV5hFe]B/U궪~v=|9sŴo͞j<QHJ4yh8{CވurVY}27ԁ 6F.)X!M V,SUayX!E) ]vnME\W³FmSD&r蔱{1:#rW!sWvփЏz!P}e) o c8q{ Nzm([z !MRs! O>\O?7ԁߌ5kD֊JE OhN K.ѼfܴP&u1 }Xʉ+1KFŚN.Q'M^/pW~ ~I8{#%]_wzjˊKUfVun&F/C0YS Q#Peij2Du <.:!X9Kooge+EW{Z1k_iB@@9F`. C˞1ua.4n< 4'!>"1>xț2 rV6>w0+ף.1ioK]8HQdj!z{?zAx]q(62a{tQ|΅s`rإa`<~g"(wZ@Gd>"q!Bx; oOqZP.x~v{tpIȏ=)@0af]bDF֭. VShg߄F~k '\0ę[!J5⃭˜K@~J.8v- E94zCn@7ge\,Zk⸥u 3 4 GV7ݑZY`y]|xy>vR):9gR%Ĩ^cmvt-C >-Yo_^ܺУ[+WZ ftmrrFp{=\KNIHż+T'@k"tqw.R^w(@Mv+Hbv)u1iq~B&`+!mCd.*X66o1`L=JzM% ?+ůgE++lcU ǹQFy~sInGRޒBlU`/6Klxk)^8=!wPJ;(tܑyp└p q>MT2BQBPJٽi.+ʒYeI. \ZId>hк20vpe۟YqcF>^M#27rHxY*/#O.?H .;xg =UKX\ ,d框ª)+ wmIK# ?e3 ^rt5 8%-F.{'J# n<Х?QWbI CUm"^P5'{AkSG Δ_krl>u;zHQI0p߈$ :LҾ6xpnUq"B&QGwEl:o`+@A2M{/ltJ dI6x Zdp1\]2~5 Ѝ<-F:S~l˳GWPUjeyxpRJ>De* wuRu8|&,w!%x)`%w~y ^_f#[^#Q.6^q'%.džTѭI_2eui#5c?xh]vEXX; h+_h9r+~&[@7%y2vQ/h_Tը$yK{͎y~ A[Eْ^Sng ,[ow$<[ )'驁ӥb"Zۨ9p8]@WfB(ZLSPkE\JTfyv-xU+ߞ;2~L`!I:Da37!(cvd,68z" }8`i U`NxºxX cw߿٧/UQgy&8»q~æ䣩|~EWR+m<@"wإ1Tv=[S׽qڳR~7b!!LL^nPT*65 [(S]ԿxE6x@Jj,ax*ms_6<(rxk|5;.ҒB W*9>d˒H, 6.\(&5P\A<3뫈 eD^vhTȟf}P$;xz `0nki%60#΀:zwpG53}~ m4V(ƺ$ TE)PE'1[ަw2? "oבM?W.";=!bj(Tn7\oijX*=,khx'Ix Pl {"ٱ(*)^Z]?XUg :"Қg8 Xˀ,o 3ELm#9Fl'3f? kO(M҇J(y,Z~XQ,Tm@H19Wqf/^G?07״$7`AonlZgҪTө5ҡHch#xURk"E>Ƹ/ۨ^:J&v$ >0 N=bwǾwk2H7)Kn/LP AGԍ_ Rn5s^וϣFzF?,mj%EMᬏ:/@$Gw_/dk su@o5-TQHd_ 7dJ_.]i4a #Z.8TuO%G0茢YwyMtWD*\ݢ׭Tk0*'@Sao H*\lda cl,sşlr#e!UOfufyo,5<+2frg[D|r8#"=݀2k"J+Uat 5e+&}>WwS'~[̗n}EBh0[lj=5.<v-3b*|@ 6 쓛Ib'/T7NrA`QSxޔ8cX$(^4+l`%gn adҁ,iRif8,{-H38Qg ,]W]vJHh 0e탻f@0D!kyN͗0-#eEm=NPc0MFJ4k*6xv^Ǧ%h=v EzXod"۾D("\0\zAiAz #{ۡMXG(EqD#X!T۷;8 IzR#G PŻ㮾R!TsV3,jtzEÁ;yZeʹ﹭8i"l*?@ k1w4uw,HGl/$sg)7NٰmMa0X bt<"$Twty M:LZV3ѐ󇵽iz;sF0xgBfHhqlWivl7O0CK(džmõ@jܖ E,^4$V;}y^.`\Oc˃e0̭XTukO'=d{kz@S=1bN\gX^LUc{[|yt3~m%p&Q3 -̨RLͦ/Wjer((y5(}!To1;{)LGKvA~°:@ Vaa E=vp@ϛiD^hknaB̐2S?@lkM3kPwdbmk9UE EW f;?9Ho5i D#٫vE` #5KA4$}u0tfSvhg)d1.j,?+F ړ{ =ӋH+߽-uV:P=EˀOޤ5 s>~E4~$"2bhn E[+eȾ%S3hB<: Wd`,,FA6Vy4~XޡxMaFV4+|v.:mo8}dCB2Lnc`谸Q-dDa=,>He-Sq+cPM'=UQL޿楌'dg]]K&ͳM6O tTP R!"oS"~3SWNR>7y*kvQZmU`>.2( iHkv<qѮ )e:qѦD=ml3+Y~ o36=+}^y|Yyㅞ O9)p}4ݗs2#63WwdZJTzC H>#(b`[ss6^ek -rA2YAdp;7).9&U!1 LB] _j戝G8ԠAGhs;i! ;djv _ʺJ}~<}LJR!p4]|O3+E4n-3TqL\r=% IQyb8 Q+l(Jrz:SjUeAD3|q 9bNJJkISF}(ɯyP躆H 2 ~Pbf53JD YN&!pS B;Q-b12C7 ym)k3HP3 9N1>?Yw]!7&'/KwQj]{_0h(^ p+UZw2id)g eD5avan]ʟY1W#4BP .ʻ`kj%|eBz1%L\ 0L?;4,#4 Vc;ljgIGr["(Zm#(/>9ŕq@JZAamV+Ǎ2&UAȶ_me b. J D+0 N6{E0GFL =fĬ긯U;:Lj=!)綩?ASΧng?X1cQRkp}1U콇X #L{<_c=`[wq$(z{,aY;0es/P: ~e1ۅ"=yC->4mmu=t `i/3j-5'#:`.Oy""L& wp[;[\(_|-rMNaa +"4HKx 0&9e$XbK)qFWG iv\IDr<d_tMpG`d Qڂ^]e%CJ f]Q9/!'/ǪsS]{^^Osŕ Jj}W@h|\/ҕ[$fćC)dl[InSg̙(GY'TKz^ʳT:~m2)#fj9Z5Q 75&N}G6QZdTؾQ^ŃVgϲ WFQ6[j ;XzJB˿8ubdz }xBtWNA?"i(ӳ7 0ZӲ^+aywxz m{t^K<\A2‰26ek}G'q-Y{٢c#o`Hxg,=a/fĊ aޟIs`ϕ7蔖wX $4(O[hǰ1KIF3O!PRD]BF S^؁ڋ?9Su0$ĄT'aQpæ{UCTL#[tB^* %I4O=4:eU웱haBINtV hN{k:2 *6~4}:,#-9eŐg ] , 2P% j"H!6~e`NY\Ҳ.m%8?{CeKGtZUG:LOQwJL>N)^P#_;!k=7?G'2t!(=хhBB07isPˤjQG, !~0^îZXHHkt9%TEBEn2HDU@GtF{]3ڵ<! zn =9I)*o1~`;S-vU3=Hz-"q P@mG$4}֨0tAȑAxƏ7W,RaPxRF"^T)TLjLejh:d1 foHq0TBQgld7 \?b94jĀ1rƜ!2}OMB8%eB@f*4 4 VgުNиw90!B$CR; 7S7N"|,,j_ % 7SMoh;Lyあj E3g3e>!) aьwrVQ?uS/G 5j ]K Nh3%#EGm*p~Q2ކiŌQ/yQ'J\ŖPv?0zLiSgU Ag6~WޘO <`z  %ݽ M_E2&z>ߪ|&cnҙRKҦhjINdZf`LK~)X#w fG蜍#%ەUxԥIa"`'c>nUM":o #um Y~vmГ)Ӛ ywȜ׿X.S/QJ$WUxdix.K+~ V(I7}en;p0{\6tHk׈x~w ]faAj$ }(;3,tŊ-6" GC}GDdEq/"R1_Ku3Ƌ_r~YatɨgZnKirBMwHwINĐ/60yFɵۛ2f+OS:8Pi rjv\ ,75P1px`rN"V $D+Ik5{:%c!+wJtdu.x[ znnGЪlp(H-drXE`WɷYs4qd  }][6%L ȍFyDZ'}lJBı/멦> _S Rq G!XO$5&iKkdƝKMۄ5?YkXQˆ?]+)@"Ž6}yeW< P \gֲ2.Ǵ %:=7f]#{I6}fafy)NQw^ 4.|2qRx!2-Gz:+i6*]N{sۤhan7Չ\SN/ Z$2ohyWyFAzdsZp9GC,*5y Z2*{.dZ8nERDRr'sZBffr?)!b<"۽QxB(X.>eeyKб^f;2wDlo.cDr.%r+҂<[/tcMJr괷Oa9Mh,W6A>eX^/bcҗ#wr)AYJ&f,Q7ROfKQ Sմxg6B(~*H4A͓뉏'/yмqR 6c z`K@4>Fh%9=0Ds)#br%h[Hng6,{C KX6@4X=07hw:5 :@oԷTifg!!.z3t98f~澜y{`ݭcde\H9{ĴeFf!k-Ye}9 J[0j"%y!;`ni!5K}:UJISUq<=x"pQzB) k`lip-zXƭX5o$' M{63][> .$XUPo+Fpٛw_p8ߖ4`$l0/Bd8DZJZ\5.M^R5Y*’ YUg> 0i:Uٕt5j\B0t+.` Ai hm~D)𛓴(Z6Bw{exBs2XS=t7t,Tl,MeV~|A. 1fQa[˿FqkS-WΝ](xkBr%d sz:T$;JP%G4ة)]y]a!A>tiaZ%epԑeqJ7_T?jðRw#TgqwzꑲΗiξHMAsrn9!{w{SoUsT54qzVo %3z͕C#[d9޵uH͸2` u#Fr%6~'Ī60[@VB!1;.+MY.h b{qph̜TubJ.|cR^[zOUFiց:tAH~&R>-f3զm ZdBK9}H7$y Yl0J;Ǵܖ􉖍'\X#[wP\v/WJ~%(Htl9HFJ&\4/L(W-K?9?MpN8' 9 2aHCIrl:*m}؉͹?,:ȫX Ar;P/_ 7 :'bp<@֭AHAZ/~q#>M}9gt0ϋ^d{uf|͚ Φ xAB{h:vn&yxdӐbeF(;‚UÕ0y^k ,@9B\km8؎4[NW;Hy (Nyp[ RsX"sv|vV&:Py@,n- 3p:9e4E4?F3w4x1Brɐ$h"ZyC/k`'WAӡ z|b0?6|VEDEi5oU$l,ml^5*;dv@J`3 PGf:fOndSU^w[b PP.BOS5} w4u{4:p÷-I J?_\lVzi~*Ks!~gHO~z=@M$K,}T02$nTAqԸk*9]mՕo_T6qJZ菧 ]D81@*N0`bNkdNd6!kMokU͑[zaLAL 0tmXU#~5Lg?wa"nmK8_?|.Fl")ܥVʏ0hdbDyWY:.g?fʿG eX yUU{=?W`V.:55Dc\I'Ӓzrrw(M* C6)RۚeR?B!gfB\ /h26K:(靼 c&K̠[Amb} |l$W[$o_[WNXùsьnv#c EkO2%́輪/cm.u5֒-~Đ1n";GI*էA/&4153oF>͍xWQn>jMnoօ;O@x`,1<(?vdR_Z%Q [A_Z'jS|לL v>z2W-`5(ӻⳛICSmxaqOr,TBsOU\՜犰cLqԮ2-;|Sg絊VH ,v6>sW%:QoѴ{Aozw#d():(,`*1LlR5m&8w[/@+K5B!M_{w_EdMw|TB~[\E-kceA/$^>QSE̢~`9)y*ىeدQ‚>xCYyS8M/DQL,I&C/S!w rjӜI_V;nTDrr m^JH`̼M'T1؛JfWi^ J ֨'@xW8jP}'(/Td^C '2&s݂;T]Je=[~-~+gpPD;Ig O")6 9A^;J՞>*p{j"^^MNQh "1Ģ$_fR#'06E_ ]l[< !E$> Њct8Mܓ(bm/mܨD7YLc^OIlyʨq۳DBXIӢ%9qD|'jvgUTVVy]ŶcȎIv"κ,g%+jXӓv6(KRFJC>sh$ѭAKBl^蒈~s U_u-dr o>odTo6aGuZc:z{9$% \6:T4c[^ʆ& и,\̠I dH;5،DқhbUllVoѕ;Wh>BEYZ+Px6^C neL6q֤^cn4=9#Dj5pYOp'j} s<4-sS1Yk+ E>+ |.\](p dYatMY7֍XݽWьqF]_x#A9QO R9?\|0;Xj.d>Snct69,{D9@1Ymy[fŒdg}=اhN+&/H@[hJ]-{o=HLԚiɺvB[-D`71&)㣀_M뭟_]*LWG8( 5bjپQvf  TF]ʓP[jʔC2% Fٷ" MRNVRqƝ0e]u)m?$އgmy\&o|| t2^FJ0HMU}3l cJ7jt5]5!ற,R܌{~PPOny;gU -҉ qͩdpA1Ț+b䵩Q<|[ #uNwk}ּǽ'e-۵I2+໬TiU3*@9趿0}Rtj}x1R>ҭ[́ <@ YvR5-ň* ΀'pnRqmj‘e\W.߯Ƕ%^"|jiI?Kc^K._?5D`]NlϴȀsyѽ7G*\aX-BQN,8>b:;%"ę! /\u68{DbKG޿@@v@hYY D^ӔO4&NM-bSk? \8,2uKm wamݬ|ʼn~(Ę{jLٮ6zߛaby@wzwUҾtN8{Zfl+˾2'ʌXhcGVNƥ (UqQL9ߍ9;@"}ԥ.*()@*PlwLAÒ`=m5lD^uZ_[`62ݣss$]+H枭6FRVT.jEȸ`pK%ksdq//^ h9&6Z7@PHfAɘ~73#!o~I$l VID,h )WOU5k~$E3/i  vE]Fl*oPHFuP2?b{~xB%Uj,nDD8 R-؅,4XNxKEd+.X B+rh? En׳zoP tdL@p 4÷D3|a=D{x{VHS'7c:8.\X@nK;0 __w (s3Ԥ6҈ ٤}zMtʢ'MGzg+|{ [_ Q O|0aR) C_L6S9SFSOlʼB|x$ pQ=N20?6S4%*5ցwTH; cçS߶/& ")!X/& 'h76?3OC:t+VD9ң}yDj7y3'E\1Bu,@De~9/;"Pr~/նm7: ތMЧ%hho3$v@{Q5UpD;U"؉Crދ2_1 ΪY{.HF B>D%6S}d|9ꘛjKLȶ;2ƝЬ|Traxsց'/]!aj4}-obwD9 |hM`n=XJV+tvTMHÈ(RF:mV'>GL*,9 3-D^CWdPxF19REwF(γ{.B}ε:Aڒ}$?q|X<ϜP41/u~X1:DգV@F6S3C3g i4kT'򇅒=Ͷy`Pɤ:,b5*Q?syn1,GvVE2I.л #{ʧ0PG@,F(SȖ N>y&6Rv<2hmu|@3S%^ÑwN & e}{¢"6F:qީGJȅ{~x6q?]cgC&.)|n@+cT\`|?4)*n !aƉ^pmۖTߐF~کU=WW.997*XT[{#W`hBeY\9].UXh Bh"ɈmiD62k 7q@ZJ o)񍠇Y^.7%.頩y䋮wv6EN`/0pjxdm_srA8oK8!qtiÁb}H='ic/o4JľXaP"ȧ࠴w M:<+~ؤKsAhв/9~`t(W0BV@C{7"슟( !DQcy{:UQ,zwNK*.ـy4z"K]HPC!`4@p2uNsKBfZ{}.ɕ CR5cҘ$1@H!LqPWi4j9 $5Q|(&S%Qh!;{QZY%dy,OD;2.I:F-cC׷A k}70 fn: TWôo'@z_!:fD!sNJWM穔/*|CYϱв|c!2jv^< vr+|ӻ]ڑl)<{?>bɎlkЪV+n+z] ݁M{ Q2%T@=RD~Ub##dQ `H= ,b(ۖS$Lh9Q޸:Q0yFmRl>UGǷeAl:tܪԋv=#7eljc#BFN ZY7?6NIuy4uxyj5=<*j=ڷk@+Z,gjiL6Xר4 QFwNm&u!B$p $uCԜ+NivL'G=7T;k/oA* >4ɫ9"B] % I!\ "m:R|{ 9W m$~ UL%}J3NI^kbδ ' K[ RVC,pJ<#38Bo?&|7vtQ`y q -'҈D""#gTm%T7' # H,Ϻ!YgˮFu-+$͵PBF`~}+EUƁ?|\s\\;E($df[nC&>$^6d 3+_J븰f++pMC-RQo n¤Iӥ` ]dN]46iR\hyJ5*kVQ=U. r'6^LX-@j5D#y/U9@EOrT#k;o6\׼qޏ?[lgqw8*GMЌ7(ʕ*ҽR0yOhnQ@:MXKvq g 4e_|ޜsnLq wЙW'Jiu^,@5GmKp^n ) ObliڮsE :U< mLM,ԛjר X$p{rV-Ҿ4vu]+0î4+W]Yl\40dPHiW͢@pJ՛"Z({[aufhn\zT]i!5FslWe݆ %phui׵ƯiA%Ht i ,O@tPt>/˶Ɲ^( r"lOBNm'u+dljPn`^: Ui}@Di2Vf`ЛrȶOkD|M$Aȉ@ʧw{D2Ȓ5G9O?Ak𷘔p;cq7z#KS#cO7ѽ\ƛ91k$HfJDB_8;f8<1n4ۀW ԑz2}FJoou}TB_X`K&N%ں_gxe>'=CnŠ*lSegu qYf>|M ƼwCd9{ s zs>b j$z < 9?eGKblR+Kf c'1X*Z3f0V-z"Z $T]E&a֤rulV!t9O `;w 榀-i(dXyژ Ɩvi؈% ݳ,\g_;tpX(*XB9N**/t]^&Fx'% S@ /a93UP4Ė*p2*XvliVE4iܠedB@Qѽ$1˚gg'!QBLhj R5n4+$|Z&8 Ӝ\ϗR,v7兔,w.)HS#aHP-Les$saU.Ss^O)}7Hm)EA3AF)gz4d`gt1.0UքM,S =7[|6K$l8vt2"5.=c؜xgz̫i:7nmfi>+*WߕH($Wkhe. L> L{%>v9cv2Ѷ'(m"FR1cy'pR*׭93FQv~s^/e,2k+>>9zg=3/=.ҟnĜ}F1_ZJE`2x~82ԅ5D/e<d [? 6D\_^P&)G&=;l!y ӤVgKCfVWIjc+и@:ع""͊*t{S@v ܜ`~iF;ZX;"gJ,k6eC隘/a(>OU(7AmK,e?+פ>?@!4e] G hIR^)rHOVWm'P`Um4&jt\ϹY^oxSrzw;XD}=XB1^ :ds% `al2]>~+^,m8'(CPːw]P3[Љ5ȔgLY?l1[^Ϫ}2ш0-!l@}TL+Q,{WgoT ^p6GjMJdFk`V 7A a;ʂdD 6}8WZQÀ QWDH=*ݼᨵt=Q_&fp*M܌ xcgWܹЃ-U0'~@쨑Ys #]@)pPWULg49@oY%d2G^=aip̦YSA::K)+H#«[.W֤ӝJkF N<SP# ϴvꃟE97G4CE֙t j:G%e?]lq,wT+(˻ (ziEI (n?8VBFGGGF1'n&}&{%y%y%y%y&z%{&}&}'()*+,,-.0124578;=?ԫA?FG G(G\ NFGGFFZGZbkw"r!p}<"s#r!o| lz ly ly ly!mz!n|!o|!p~"r#s#v$w&z&{'~()*+,-//13468:A׸C`TFGGFiFyFzFzGzGzGzGzGzGzGyFzFzNu]X___k m|co_kZeXdWaVaVaU`VbV`XcYcZe[f\h^j`lbncoeriv jx!m{"q"r$v%y&{'))+,-/124679FG?HBKENFPJTMWNXQ\U`VbZe^j_kcogthu mz"q"s$w&{'()-4F=E ;C 9A :B;C>G@HCLFOGPJTNXPZT_XcYd]hamcofs kx m{"q~#u$y%{1zz=vG{NQVY]_a]VºF@FREGF0G}FzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzFyK/c1eP\]^_abcb9OYOXNXMWLUISISGQENCMAI?H=F ;C :B ;B =D?H@IENIRJSNVQ\S^VaZe]hamergt kx"p~#r~7{sDxKOTW[^`beĬfǮgʱhʹ[CFQjGG#GGyGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzEvO5nNYYY[\]^_abjDWbS^T^Q\P[OZMWLVJTGQFNDMAJ?G=E 9A:B;C?FBKDMGQJTMWR[U_WbZf_kbnfriv8xINRVZ]_ac«fƮgʱh̲jϵkҸoչjԽRFC FFGtGzFyGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzCsPAY^VUVXY[\]^`bdAXdYeXcVaU`S^Q\PZNXLVJSHQDMCK@G=EEAJEOGQKUOYQ[U`Yd\h]j1zxNQUX\^`ceĭfȯh˲iεjзmӺmֻo׽oپqۿaF3FFFZGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzFyUM\[]TSTVWXY[\]^`^*q}^j]i\hYeYdWbU`T^Q[NXMWKTIREOBKAJ =E ;B :B;C?GBJEOIRLUPYR]VabiOTWZ]_bdëfǮhʱhͳj϶lҹnԻn׼oپpڿprsmL< GG/G|GzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzCv\M[Z[\QPRSTVWXZ[\]`Depcoam`l^j\hZfYdWbU`R]OZNXKTHQGPCL?G>F :B :B ;C?HCLFPJTMWP[7yVY\_ad«eŭgȰh˲iϵkѸmԺnּoؽpڿpqrssuqQBHGGwGzGyGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzCvSQZZZZ[OMOPRSTVWXZ[\[huhugseqcobn_k]i\gYeWbU`T_PZMWLVIREMCL@HG;D :A ;D?GAJQXU_adëfǮgɰhͳjжkѸmԻo׽oؽoڿqrrsttvvuwwvNG$FyGyGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzH|CVVWXYYYFHJKLNOPRSTVXV7 p~!p~!n{ mzkxivhtfrcoam^j\hZfWbVaS]OXNWJSFOEM@I=E 9A;C=E@JfŮeǮjhʱiϵkѸlӺnּoؽpپpqrsttuvvvwxxxuXdGFGUGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGz:pG ;C :B G 8@mԻnؽpڿqqsstuvvvwwxwxxyyxzfMGFVG}GyGzGzGzGzGzGzGzGzGzGzGzGzGzGzFyZNRSRSTTUWE>{x@~|BCDFGHJJ#Xm N)W+Z._(&~%{%z$y#u#u#r"p~!o} lyjwhuepdpam\h[gXdUaS]OXMVIRENCL =Dmjϵn׽sttuvvvwxxxyyyyyyxzdخFFGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGz@QQRRSSSTT>ywyv>{x@~|BCDFG>x|3fo@Z!K(R)W&}(''~&}$y$y$w#t"r!p~ n{ lyivhueq`l_k\hZeWbS^R]MWISGQAJQRUZqtuuvwwwxyyxyyyyyyyu]VFWF{GzGzGzGzGzGzGzGzGzGzGzGzGzGzGzDw eQOOPQRSRSNyv?{y@~|BC@}~6jn5jn6ho#P`+L)O,*)(('}&|&z$x$v#t"q"p~!m{ lyiveqdpam^i[fXcVaQ\NYMVGPQRSVUbvvwxxwyyxyyyyyyyyxxiV ]GvGyGzGzGzGzGzGzGzGzGzGzGzGzGzGzFyKKNNOOPPQRRI;us;uq:tp:to;upyv?|y@~|7kl5hk4fj3di3dj-[dDY,***)'('~&|%z$x$v#u"q!p~ mzivhueqbn_k[hZeU`S^Q\KUN0QRSVVUqwwwxyxyyyyyyxyxxxxwZڕQJ6GyGzGzGzGzGzGzGzGzGzGzGzGzGzGzFyBu9zKKMNNOOPQPC:ss:tr;tq;tq:tp:to;up=xs:rp5gh3ef2cf1ae0_d/]d/^f-,++**)(''}&|%z$x#t"s!p~ lz lyhuerdp`l^jZeWbVaNZKBMNQRSVVV]yxxyxyyyyyyxyxxxwwvrD<EGGRFzGzGzGzGzGzGzGzGzGzGzGzGzGzGzFy[FIJJKMMNNON>w{;su;tt:ss:sr:tr;uq;tp9sn5kh2ed2cb0`a/^a.\_.Y_-ir...-,,+*)(''}'{%x$w#t!p~!o} lzivgtepbn]i[fYe_cIKMNQRSVVVXqyyyyyyyxyyxxxwwvuuvcѽGF FpGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGz2qHHIJJKKMNNJ;rus?u@v@wByBzC{D}D~EAx;p~p>q?s?t@uAwByBzC{C|=r;px};rx8ns6im3di1em6776554332100/..-+**)('&|&z$w#t"q n{jw*q~MMNPSUXZZXkжxwvvvuutssrqqpڿoٽo׼nջmӺlѸjзiϵSƿGNG|GzGzGzGzGzGzGzGzGzGzGzGzGzGz"];ko>q>r?t?t;nw~;qy8mu6hp8:998876654433210/.,,,+))(&}%z$x#t"r!n|0vHILNOQS[bcdptttsrrqppڿoؽn׼mԻlҹlѸjзhδh˲gȰeǮ]ôGGFXF{GzGzGzGzGzGzGzGzGzGzGzGzGzEx7h8d~8g9h:i;j;lqtAzDEGHIH?<<::::9877765532211/..,+,))('}&{$x"t!q9EGLVYZ\]]_abdoqpڿoپoؽnջmԺlҹjзiϵiͳgʱfȯeƮcëba^FFcFzGzGzGzGzGzGzGzGzGzGzGzGzBt,n9g8f7d~6c}7c}7e~9f9h:i:j:j;j;k;l==<<<:::9887665443110..-,+)(('~%y$x!s2}SQRSTVWYZ\]^_blϼmԹlиjжiεh˲gɰfǯdŭcªb`^]\[G=IWRF{GzGzGzGzGzGzGzGzGzGzGzFyEu?{==<;;:9997775543320///-+,))'&|&z$x#tANOQRSTVXYZ\]]ai͸iϵh̲hʱfȯdŭcëb`_^\ZYXE<ʉD,G~GzGzGzGzGzGzGzGzGzGzGzExd@t>r=p>>=;;;::9887655332100.-,+*)(&}%z$v/JLMOQRTUVXY[\\bh˱gȰeƮdĬc`_^\[YWVTC:GGGyGzGzGzGzGzGzGzGzGzGzCw!t@w@u?s>r=pq@t?q=o>=<<;:9997665443110..-,+)((&}%z#v8KKLMOQRTUVXY[]fñdĬcªa`^]\ZWVTRPA9<FaG|GzGzGzGzGzGzGzGzGzGzAv0CzByAw@u?sAwD|C{Bw@t?q>opUVXXYYZZZ\JBBBBB@@??>>=<<::;98876654320//.,++)((&}%y!u?IJLLNPQRTUWX>&qdê`_]\ZXWURPNL>8>G2G~FyGzGzGzGzGzGzGzGzGzBv2EE}C{ByE|IHFD}CzBw@t?q>p=m.o?OU\\[\\]TEDDCBBBAA?@?>===;;::87865533310/.-,+)((%{$x$vBGHJKLNPRP> Er+g(m}X^\[YWUSQNLIG{:5=%G GlGzGzGzGzGzGzGzGzGzGz@u;GFEKMLJIHFD}CzBwAu8oNmIpMtg4Rb__]IFEEDCCBBB@@??>>=<<::88776543221//.,+**('~%{$x+xCFGHJKNDKl'Y-_2d1g5]YWUTQOMJG~EzBs54:JGG7FyGyGzGzGzGzGzGzGzGz?uOUUTRQPOMLKIHE~ a}[qYqVrUsRtPtHq V|NFGFFFFFEDCCCBB@@@?>>=;;::88865443110..-++)(&|%y"v/xBCD+^j>!C$F'K'N(T)XCfPSPNKIF|DxAr=}m:wg4ul.2'}KGG.GoF~FzFzFzEzD{Gy_yKYZXVUTRQPONLKC axZoZq[rZrWrTsMq&ϡFHHHGGFFEEDCCBBAA????==<;:997765532200.-,+*('&|$x#v-w@~|!LX49=@"C$F'K(P?^NOLIG}DyAt>n:yi7rc3j\-qo,1%Se]IadG*[N6QrPvPvUrelrg ymNZ\[YXVTTSQPON@ar]o[nZoZq\rZq̎IJHIHHHHFFEDEDCCBAA@@?>==<:;:8866633311/-.++*('~%z$w"tdq/-269=@!B$F>=<;:99876543210/.-,*)''}%y#v"tgu .B(.259=@6NF~E|Cv@q<{k9uf5n`0fX,]P&PC#]]'+/#BvKwOvUxZq\0bXimp!pXskpeLX_`_]\[YXVUTTEjoejckalWi%HLKKJKJIIHHGGGFEEDDBCBA@??>><;;::8775533200/-++*('&|%y#u"rjxET !).269APEyAr=}m:wg6oa2hZ-_S'UI G<IE"p}&|*/p={C|FyLwPvTuXPUk$hULZ]cb`^]\[YXVUL pqhjfibi'KNKLKKJJKIJHHHHGEFEEDCCBB@?@>==;;;8887653320//-,*)(&~%{$v"s"o}kyan%7(+.0)[\@p;yi8qb3i\/aU(WK#LB?6C=ep!o~&z)-g:z~>A}C{GxMwOwSYkKUZadcb`^]\[ZXVsvdf yr8ONNMMLKLKKKKJIIHHGFEFDDCBBA@??>>=<;:9977643310/.-++)(&|%y$u"q m{iv iuP] +=-(8sf9te4l^/cV+ZN$NCC9@7KH^ggt!n|$x(-`4n:v<|?A}C{HyLxO9DINUdeccb`_]\[[-Ǔ"HONNMMNNLLKKKKKJIHHGGFEEEDCCAA@?>>=<<::887654321//-++*('&{$w#t!o}kygtdp]iQ]LV-g`,aX,\P'QED;=8EELRU`\hdq mz$v(- It1e6k7q9v=|?~B}D{GpI CDuIKKN_eedcb`_][QOOOONONMMNMNKLKKKKHIHGHFEFEDCCBB@@?>==:;:8875542210.-++(''}%y"u#r mziveqam[fWbP[KUFO>H :B=EDMJTR]Zebnjx#u'-8d,]0b3g6l6p:w=|@BB1EFIKLMMU]``^]YTOOPPPOONNONNNNMLLKKJJIIHHHFEEDECBBA@@?==<;:9887653210.-,,*('&{$x#s!p~lxgsbn^iXcT^NXHQBK ;C;CAJIRP[Xc`ljw#s',D)U*Y.^0b4g5l8q:w=}@t;zD'IKMNNNOPQPQPPPPPPPOPOONONNMMMMKLJJJJHHHGGEEEDCCBA@@?><<;:9876543210.-,+)(&}%z#u"r m{ivdq`k[fU`PZJSDM>F 9A@HGPNXWa^jht"r''>'M(Q(U+Z.^0b3g6m7q:x<}FGLMNOOOPQQQRRRRRQQQPOPPONOONMNMLLKJJJIHHGGEFEDCCBA??>==<::987654211/.-+*)'%{%w"r!o}jwgsbn\hXcR\MVGO@H :B>EENMWT_]ifs"q(by;"C%H'M'P(U+Z.^0b4h6l8r<HLMOOOPQQRRQQQRQRRQQPPPOOOOONNNMMKKJKIIHHHFFFEDBCB@@?>==;::987552210/.++)('}%z#u"q n{hucp_jYeT_NXIRBK ;C A"D%H'M(Q)V+Z.^0b ?qcI}KNOOPQQRQQQRRQQQQRRRQPPOPNNOONMNLLKJJJHHGGFEEDCBBAA@?><<;:9887542210.-++)'%{$w#s!n|kxer`l[fV`Q[KTCM=E:BAJISR\[feq"p~)237;? A#D%H(N(Q(V+[-_wF+KNOPPRQRRSSSSSSSSRRQRRQPPPOONONMNLLKKJJIHHGGEFDCBBAA??>=<;:877653310.-,+)('}$y#t!p} kxgtbm]hXcQ\KVEN>G :B@IHRP[Zfdp!q#r',037;? A"D&I(N'R(V~FKNOPQQRRSRSSSSSSRSRRQQRQQPOPONNNMMMLLJKIIHGGFFEDCBBA@??=<;::87664320/.,,*('%z$v"q mziudp^iYdS^MWGP@I :B?GGQPZYddp#sSc"%(,037;> A#D&I'MJKNOQQQRSSSSRRRRRRRSSRRQRQQPOPONOMMMLKKKJIHHGGFFECBBA@??>=;::987543210.-,+*(&|$w#s o|jwer`lZfU`NYHQBK ;C>FFOOYYddp"s>=<:988754320/.,+*(&}%y#t!p~ lyfrbn\hV`Q[JSCK<<;:987654210.-+*)'%z#w"q mziuco]iWcQ\KUCL=<;:97764320/.-+*('}%x#t"o}jwer_kYeT^MVEO=E ;CDMOY[gkx#G A@=840.*&$#"%)>MPQSSSTTUUUUVVUUUTTSTSSRRRQRRPOPONNMNLKKJKIIGGFEEDBBA@??==:::77653310.-+*('~%z#t!p~ lyfral[gT^NWFO=FF>=;::8854320/-,+)'&|#w"s mzhubn[gU`OXGP>E =<;98865320/--+*(&|$x#s!n{hucn\hU`NXFO=F=EIRWc?f/_.\+Z+X)U(Q'N%J#H!E B@<85;M ORSSTUVVVVVVVVVVVVUTTTTSRRSQRRPPPNNNMMKKLMLKKKFEDCBBA?@><<;:88654210.-,)('~$y#s!n{ivco\hU`OYEO MNPRSTUVVVVUUUUUVVVUUUTSTSRRSQRQPOPONNVZZXWVTW^][XROKFCA?=<;:98855221/-,*('~$y#t!o|ivco\hU`MWEN ;CAJR\@t5o4l3h2f1b/_-],Z*X)T(Q'M%J#H"Ek!BORSTUVVVVVVVVVUVVVVUUTSTRSRRQRQMOQNKH}F|IOVTSOV`^]\[YYWTPLE==;98765221/-,*)'%y#u!n|ivco\hU_LWCL :CHPMl7{{8w7t5o4k3i2e1c/^.\+Z+X)U(Q'N%JHNN$PRTTUVVUWWWWWVVVVUVUTTSSRSR$QQMIF}DxAr=}m:vh:tmGPKUca`^]\[ZXVUTDʘ9;8765321..,*)'~&z#t!o|jvco[gT_LU@I=DI\?><{9y8x7t6o4k3h2f1c0_-\,Z*X)U(RNNORSTUVVUWVWWVWVUUVVVUUTTTSG~EyAt>~n;xh7qb2i[-`R%RE*TR;kUgdcba^]\[ZXVIba]`ϔ3765321/.,+)'%z#t!o}hubn[gS]IS>F@J Fu?|?|?~=<{:z8x7t6o4l3h2f1b/_.],Zb(SMPSSTVUUVWWWWVVVVVVUVO[+RDy,Cu?o;yj8sc4k].bU)XL"K@>6C:'SH8okNegdcb`_]\[ZPoniieeml̛95431/.,+)'&z#t!n|itamZeQZFP;B GcGxCzA{?|>}>~>;|:y8w7t6o4k3i2f1b/] N;QSSUVVVWVWWWWWVVUVL@s=|l?pW=|l9te5m^0dW+ZO$NDA8>6$MB(WK,\P.aT1fY7peQfeccb`_]\V|ylggex{KT;421/.,+)(~%y"s m{gs_kWcNX@IBNLqJxIzFzCz@|?|>}>~><{9y8x7t6o4k3iI/^OOsRSTUVUVWWWWWVWUUKBo@r=|l:uf7oaP;zk9ue6oa1gY,^Q&RGE<=4A9#MB&QF(WK,\P.aT1eX4j\3l\:vgL[_bbca`\1ř„;RTVY@21/.-+)'~$y#s lzer]iT`JR>JKNuMwLwJyIyFyCzA{?|?|?~=<{:z8x7s{8r 3hNPRSTVUVWWVWWWWUNG{Cw@r=|l:uf6oa4l_/dW-^Qk)XLI*WL,0eX+\P%PED;:1:2@7F<"MB&QF(WK,\P.aT1eX4j]5o`9sd:wf}>~>;|:zBL PSTTVUVVWVWVWSJ~H}Cv@r=|l:uf7oa2i\/dV-^Q)XL&RG#LBF<@6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMPQRTVVWT5/.,*)&}$w!qivamWbJR Fi[mVrTtRtOuMtMuNwLxJxIzFyCz@|?|>}>q>{NBPSSUVUUVVVVUOKH}Cv@r=|l:uf7oa2i\/dV-^Q)XL&RG#LBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMPQRTVVWYF/.,*(&|#u!n|fs]iQZ Hk_e[q[qXrVsTsQtOtMtNuMwLwJyIyGyC{Az>?OO$QSTUVUUUUVTOKG|Cv@r=|l:uf7oa2i\/dV,^Q)XL&RG#LBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMPQRTVVWXX0-,*'%z#s kycnWbOo^o]n\oZpZq[qYrVrTsRtOuMuMuMvLxJxI|F3?O$QSSTVUVVVTOKG|Cv@q=|l:uf7oa2i\/dV,^Q)XL&RG#LBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMPQRTVVWXY9,,)'~$w!q~ht\gRmehdkal_m_n\nZoZp\rZrVqTsRtOuMtMuNvLPHJPN&QSSTUVVVSOKG|Cv@q=|l:uf7oa2i\/dV,^Q)XL&QG#LBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMPQRTVVWXYA++(&{#t kyamXwkbiigiejckak_m^n[nZo[q\qYqVrTsRtPwN]P PNQRSTUUVSOKG|Cv@q=|l:uf7oa2i\/cV,^Q)XL&RF#LBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMOQRTVVWXY;+*'$x!p}dpakhjhiiiiiigjfjbkbl_l^n\oZoZp[qZrVtTfPOORRSTUSƾNKG|Cv@q=|l:uf7oa2i\/cV,^Q)XL&RF#LBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMOQRTVVWXZ0+(&|#sfr gscognfkgjhjhjhiihiejdkbk_m_n\nZo[p[e[UNRNmQRSSSNKG|Cv@q=|l:uf7oa2i\/cV,^Q)XL&RF#LBE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyH}ILMOQRTVVWYL*)'~#tjm{tbrgsgqgpfnflgjhiiiiiigifjdkbk`m^q[XVNN,PQRSPK|G|Cv@q=|l:uf7oa2i\/cV,^Q)XL&RF#LBE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG~ILMOQQTVVWW5+'$vmqrsergsgrgsgsgrgpfnglgjhiiiiiihjfjdla;`ZNOQQRLG|Cv@q=|l:uf6oa2i\/cV,^Q)XL&RF#LBE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG}ILMOQQTUVVE+($w n|2n3rarfrgsgrgsgrgsgrgpgnflgjhjijhigi&bONBOPPHBq@q=|l:uf6o`2i\/cV,^Q)XL&RF#LBE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG}ILMOQQTUXG+(%xjweo4qVrjshsgrfrgsgsgrgphojl\j:kLOANOF?|k=|l9te6n`2i\/cV,^Q)XL&RF#LBE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG}ILMOQQTV@+'%{%"smlpqTrlslrjrjrlslrSq(n jLoNE=~p9te6n`2i\/cV,^Q)XL&RF#LBE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG}ILMOQQQ9)'}.nqrr0r,rssKPdGƳ?8vj2gY/bU,^Q)XL&RF"KAE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG}ILNOKC0&4(qsPJ%Ds:1h\,\N(VJ&RF"KAE;?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBvFyG}JMH@7L+H,4~-h`&QF"KBF<?6905,;2A7F<"MA&QF(WK,\P.aT1eX4j]5o`9sd;xi=|l?pAtBwFzG|D>k ./uv&&YS["OGC:8092;2A7F<"MB&QF(WK,\P.aT1eX4j]5o`9sd;xh=~o?sAvA{zCF9'gg6.C=:2A7&G<,"LAd&QFa(WKa,\Pa.aTa1eXa3j\R5o`(9sd%;xh| /????????`????/>?????openscad-2013.01+dfsg.orig/icons/prefsAdvanced.png0000644000175000017500000000625311516152336021327 0ustar chrysnchrysnPNG  IHDR szzsRGBbKGD pHYs  tIME&8)v +IDATXÅWil]y=s.ݷ?|7I(˲(Ѳ$ b)v]MT0E[aMHb viĶJMm$Z(Y;qߙZV;s9a|#dڵ>q``toYvRukxCe0}}OrIiW>{o, {9?Xclt  [_VS4& %@#77'a<CC"0 B%E ե!f2Ҫy@l_^SUDm~ ҡCֶwݺ _ydyDt~: j20zoZN0]]VikhmZZ>/DĘsg_#r\Ot4;P4KbilR5T PD 隴Z p'N]±Ç4 ~re @Ν75DzdʕTdӫ5 H$㨬(#.X˗G0s@U c b㗷;Qb4ֶlYȿ7%k؁sߒ.n-U_\95x7 S'yl{)>s݉W3ݷj\nd%E),dU9qƢ׵4Z {J2\U&/o_J泋H$#E /';7X#O9@6nOd9ƞmj,ǂ!"+UU~c;Ǩ>a櫯*WU"%:!x(J.?;Z0T=14\̵P(dDB}}5i-khj~g!V|ݓ=U$YN"umg:x~615vulttʨA]Һ(2!hLO?мdhbt`~ 'sP8/y+υuxgp=xa8z( KyR?9tr0Cs$I$wTVW&Q^Y HS^Wַ\fͣby2  $IP$QF.;8|Bqx!>zԛ%t6ssnzZȶb-J- {|53x<ث?m݆lj/@A+*A R2JkP5 'y% l*%}U⡠X1(qԑPC :%Fe pA(>96/ZԍR VI1$JsO3\ݓ=rv G '. ( >;sB濗5i-Q$Ξ>ɱڭ%, *yZ>E}Ers.h(þAXuCJ"+,866vfݙAȆx @@r@p\}д,Q ~*cZ n\:PH 0&n3p;(f޹N/UU5vp{'d  szub-IENDB`openscad-2013.01+dfsg.orig/icons/prefsEditor.png0000644000175000017500000000357111516152336021050 0ustar chrysnchrysnPNG  IHDR szz pHYs  +IDATX VYo[U:u_o!鞥iJQZ"&aE @gT*!EEj>D4[[д ӄIpoi6gs{m7ix}̙sz\FFFTOgɧp>11?7dDJPh=1X ׯ~}8kyj^Źž6+bKKKv:OamSӛYV޼& @%DYa@H!ϫL0*LZpDT^yX,_hη,y`wX9z^@f h~&*o%s5&3D*a^%r$cVV24WVF0ى__MMNjky#m?}S- %t4A!D1R@ԺZaE?LP\x99z{f1ѻ$Vn<յ*gf>.Ov/Px,A NjYJXKN`tq! HqneAyoVJ3F^< Y)&CcGN) r.)8_n^"l )4Y%#h>25|K),Q;޲цW YV :_U)r-k9#j4e1| 2xGV+a*?j*;tuuJt =ךD[u lv;EWJA*o:-hmmݰL(\N>₊2fX`w~1m4tͨ`) Fw\0p4`%]%ܟgYr /(y\( mB[S5 SE5ɮ$ 1hwra#l6.=i*jg~%_uߋi:I _I3g޻xS,V vvJMߑM V Q(~P5R 8ucTr +=6~͓#r=|BxNHl#ټJAAחV_a(^رDr׍?TjiiiiiiO}cSv`':$sV6,EA:_J X X+vv Z------: 48lU a.K~ʿ{o_Zo uY?#* V tdaN:*d:> hןp(` XL7]}ݎ3wPjiiiii[C, o VIȮc)+fZx@_>>zx(`9b v쌕M`kd`Ŭ+7LծVKէd<Z[ jPdF0ZtBVKKKKKWWN+̋2i XlQxMX cW̮Bvɴ* &mjF+3@׫ ^ Xl5WW,Z6 Y*Lkתyپ!N X XȜ|,@fdOVjiiiiiR7U&WVXl+X3;: ]xhiiiii VEjh7WΟ_v,GV[`!s1@척;``5Vf]bVKKKKKUNop(` \lm6 Z!@ i5y :@UXع;5yB6k6L[)۫e)5DQ3UUX^-"d]]jGv긭zmTd[Y--- *=ʢ` `WV[>`Z E,BpS[G^vbVKKK+cW ׷eZ1WVz}j-Xɗ|l'5LߣS---,(Vw'<KU*`ۆLyXdtvYWZ`\ 0 wRk3U*`"' &ogBv \ZZZZ2s8mZkp}gU*`m؅d Xl) vʸ*Win(7\DkYp59V7qV\ UU`9b]::NbU['l][Vv2yjS.@Vb% U*`yX@,#L!bq֥Dpmo4e2]׷k"1^?fʒ# X׬xm&`Cz[b'$N!vc/9[F| K*` ,ⵙFr"`y'vc눅[q5Ď9![ᚵ*{F9OKK_2$ WīVUHWQ(dڄ:b'A瞼Ef*\ӏ $ZZZmZ^W뽔puREU*`}4J@; N`p {~ʑ:*:\ZZZچPp'NVY}ݎ>jClw[=>L>~l=e>j2_0*^'$ Xll?gNI%F;j8Q~2ⸯUWEWc; X;(`]^XV+i` C, b{Ru.VZ>\1sAٟ#ZXtd2*?O XVk좤.A%@`Aµ5JSJ--p>b{]\?V*` $ںpާ MN٢rΉ_~WABkJA{Z*\ +MٟCJȊ,^sPh"|rXwU*`;`Kg쐺 X87k;S=دUZ e{m*b#O)` Xl&Ek뀽mM(bN%"bBk\!UST--&Tl=V6 סVVXVX#Q,"!+!wacϩ6r*\K+Mٟ[ *cIx=pZVUvͼG,2`!X { _ _(\ˇ"VK̻ղBOpVm`1ٵ ,dbM놡=c0eʩ"xv$8j p庛t,`9b V,k;>+Ȁu!;'n]M.ac=QĖ׬h*b:`U:LY)i2\,EVXk+C aa ]XX`(ȓtbO UXF6  WVTWXHkV>pU*` ,,dL XL:Fva'&o$y1``! JVk3f5\)sV6 >wp[ cV:`w"Vw:bQDl;$*bڴx"xul;շ K\db' ACPiY$JpUji@[5;P+l ZJU*`yNV"bE;v\"b앣 `҄va]tֆXks᪈*"x}?Z\ X޲pʚyߏpR)`1UBo̚5 vkZ KSr-*wZe=\f,"VUv/`1XzZV,fmYYl ;钭BBDĆ]yX,d_!ᚄV+E+Oٟӵ""xMh$e׵@ XXV] spR]0i; `1$5ĞEX= ~R\hb3ZZ]=ҎWW]U*`;Ԁ7~+P"b Xi,Ed`hV GGµ9pŔ]Kc j6 ax- 4 XV[,d;+lVZ;`g] #"A7bF GۮpMBkUU`Ϋm@񊀵mkU*`L] vM",E,c,"`ث|$-M`q";$C>o: UU@{^m:e XVWX,G pRv6,"ABx XXAؾ}pm>\TOٟھ$ZҪ,~@'e9`1BfO: ,G ^Gta7XkpUji5X!^; \ga p\ Q*` XۮP,^䢀 Oges&ncP^}Q `+V#8#օR {d 2} -Vxy:PZXՅW۟o X]KXD,tR ^1ӡ[[U&_ZGD1B?"\״WWM6oeI\x((hwZJ Xlgv[,c"^墈XȅkXL ,E%gta #8įPĞ@j`F `V|*`RTw׶īE"VU`1Wz̀_fO"^1X:BX 눝pޖ&XS0 {L.xp.bݯ2H6j}aUmwUV݅U*` K~`oQ1ؕsPB` EYE;\2n+5$l Xv Sl ]XDAGE\Ҕm-,k.x|%jGVU"`1!z̀, PRĆ` `g1"bA.U|+15b"]X: R*\W8^c >Zؑ"*` Kw1x ^)bA,=h:~b".rQ"b1;-L\cء G] |[}j+VT&~We iӮ?b X?`)^W >3 ,ll=Fkj1zЀ""`1XH#c`mյZ {p-4eAK2WuY[Ɓ rk3᪀ Xl;v],,D ^i XD",|;`|"ԣ=1؅= &Xl}U6 X-땬z]m72 X{ xW p@`uz1"=f (bM#KA>[+{r{f3k `.؅"?WQ6X-h /m뵭F!] 3;f0 Xlvӊ]*w,·G\","{-,$lq~2Fr7Ll_5wa?,*\q{Lm-RAU+[I^?iw]fءuA[9 U2`HVXV@,_@(`!x++ l!e)`/gGAB=i {vM ;Xb[ܫ\q|(Ҕm -V֠zXu]PykG5ڮy6B~[(`,"o!૴*e3v0EKAcoT.8ӁeʱvIgÚ"V$j[ ^9`p i1Dnlb쳛O<0?o<57ɓw xݰl CMw 嫴Wڋ\+^v=:`!8B@ XJ 2vvV7xqi+rG[e5`f|,nd)bmDǗkQ6 ؟wF{b+OG]{]C-W|E+Z1k\ )Kk\+.NX,$l^1g_iGTօ=  JS/ {qo~$<ܒ6Hxز8b[w?VSuڅ{T Y!ԍA1uJњ\9Z yt A6LL+q.a(` @[+B{k&9' `YY, oo=-Lؓ7#/Dfaa@*`:ǫ.˾ղq#FGlY- ټ 8dwL[?&'yCS6`7"V\p'XKt BkN"`k (`Y5~d5xREBþb;/]Xk1pUjut׿};׎k6XX`q^X٢c)dn Yy>HpMW#7[;*2 xt.a(`5Z5 ^1Wz"׸&G˯qA,E"`/!E:`cꀍ!6F<*NL”AK+2ގ+ͼZ^lWآ[-@fJD"Z}jCk3*uTr,5xk[uM(`2BgWi!^i(`)Y+=)/r%yQfEVkcXڅ&w+ ᪀*c^?dI^Ɓx^1E'^ؼ!|,,52phMk pܞ3,SEl5pKZxk(`W$]'mKɚOR55E.hXH_sB .,ykpUjuTx}]x혇["6Oqd+M F _v W1 yhqh'`i^)biG,,"Jk_EK;`)`q,,E, xPBϨOc ;AYX*tZQkpÞenj̱\EH׶ʬex4 ز?| %!X YkZy5*cj9 (`5`D,@x[vH AR&]㢗 W ,v̈gVE`XD,?K!b)`6ŸS W?7hie*Xu+'ɧ28"!⫝̸+k>[ Bـg=\!:'\%ွ f_ `7 +"kUs"စ ^)bDltVXzȀ"Pb 9ok\u8)KB>u"bYc1_ ઈjۊ{}O}  :n@qp SHl;Y ]$ȶ|,=XDjEZj+b~oF(`W XiYhHpBhq5Z тPB)YDd(bט.X XD, `#VBµXBإgJٟˌ[I}#5J-c'kQBcپ0n\= p6gH}x4WV#!ֶBw`1t+KWhvκ|k XF\䢗5. XX<) `!U C;:`},p-4eJVf'v,^ԅ ;Cc-cт$Ė1+A/[ yr5OѕY=gCnDB,UB,<ܺsi=X>x[pF6iF wK;}NxP9Y!sX,G,=υF U6:}l}H6g ;PPͧ۬<zqȦlpm@#p5YIp?MB ^1 &m+!6P^5& X,X X8f@b#xH]bB b઀j­ ym}EjVV]}Xǜ{dB604i yνB ͫv5g`)`Y+GBѢ]tv1VK`! X<'=(`Xc'rD +\+ZZсV [r߱[C[6V[1u5Y@lѐ-k>U;8VnЎbp # x@B,•& Xi}]g!b -+#_9`gEˎ@Ƒs"O"`XV,E,{jꀭ>QkpUjL+5pK}ODEqZ>8dBcWP]~Y0K\KN| wג\ڰW=kKG$Ć ĺq|╯ hAK큭C񊡀R^1X,AB(`T#3,G,v\=#j p- X }86% .,kUrݍm&dW^yQt[k } Mo:fm~>#UB> "BbXBvmc3qXW =#Eb(`! sA<+cX, 1!lօU6WQ̄B ˌ[)l5WbWV2``#s}GZQ Fc]]3ʚk7,f}MN8w pd+t]16_#f"! re}UK/pPRZW ,Gߋ_)`X4 Oɞ-+2EғXD,ųu@>hUV>"x%׆62["^?6~Drd5S|xUTz: iֹvECL|{W 2`{UëX#.z}# ຎ!V:# Y1Xi,xb(^1XD,KRB(`!Xqfx/E∀u.,gaֺ ᪈*뾾7}6Zꬲx^V;g]5GB(`/?dcBœX1> kuB5_*`R+xn?"[$b[9̽fH,>~8r`EBl {ע[ W6.R ׆CBJl^*/>JjC,•#Ͼr޽ XX~>6EQRg`x"bc;` `9bXX|EK@ƜMī,"EB,3@BB,v`*\+)8ZZ[Y^m_ ß٣.4 "]k2k uÂz@"Үppphh}}#IB4*X.X~:#*BJx刽a&X8b0mc;`)^)bt2E]+ uXX) pŸ7]gԺ )9ZX#*Շ[)7HMl#Vi:^? ̽jl-oPkx]Eج- u_<_WL`6K@@{prJĆX~:v"^9b9 Ar3 ['^!23⛑+,쀅33a.,2EĚj:`!~?>Uկ XUUXm}U0BLiu@=:wU?윛W|XeAux=Pf,+(+mLЊpxK pmOW 4`pAVӱxy"=xPPRJ;`|vy[P^|ַb+\X+EBS,` A7= .lU WVenan>oօX/kZ/kֹ&v_ ^y60ckCl} ZQa4d3ucgoA{uG7# \i\+Wn̈́+YӱG\: YEZ_ ̽rBX~R"bXD,=%xPX,W1 ő,ta?xy9@B_2]XcPWH-7KU ઀ʭL56A nElx-?N/H"w_vX+xxͱo:.+&wίCծfIpB~x!V¾`H8`m]XW b%W W̝˪px o Erp+vc ^)bX+F:dxŜPb_ 3/cX8\Їl!@Bpvpmv86I]Xkv*`r)p!Wgkg)`k^a^} ?{jyd8WD uDnY*pOzT4>Eľjပk&•FBl.•FJc9bW̪BJWgQb(^*X S<+!'oəpFBk"bX!ꀅcx.u`)E},RGb刍_Wo>ߧOJ_`o9!6xcWX\wCԁ!*v8` ,U:mL8`XDtJk!+񊡀׸ R5]#]X,taUhAx2E!oP6H< ͻJRtD,ͧMbݓz_RHz1h+!;b9``[I ^\b$ĺpAnYSW RW+GlxBZ וG `v9dHI PB(`1<)' X"Zk ]^@,|[hVX7H1:+qW7h9ZZ>ƒf4zIx?F?'E_ҷ/K>B4YԅM36X@+-YoU{.UQrpQb8`p+E,uL8`Z,#xŸ{2q28 ^q,"7@+v^10=XXvS \7{@VU}}u_[yӡ-2ɐr׶|n7(6bXr,kfHx4yVB/`:Y+ͽrںM^׷W`XD(^9bX"bW B(^)b)`t,"t3kE"`XD,=f`,BD: x{j.,ۀ]XkpUjJoハjՍƫ}}%qط*g|GX׼+!QjHνrH,ūX.+ ,=+!0uۛP"^9b|,G씱[p.X}W&#5RB(^k\ P8 ,l+_K o9۳YpmXTe>9u k'ַ$+-6|+v_j, w &`o<ph JnIuua_Њc[`}o=DN\o9XX%VzEAb PR"^9bWXA%.X,"EB,쇥E,uaU]Y!4x_1`?/^?–ou@,"`qMVF[?x, wׇFw彗FxmA(^%J倕hoR"2p#6-atؤW}upIb(^9b|,G,倝6{1B(^)bWXXX~  XzX8fK8M .[Tu,m#/3*β=޲mOOvxmt=VɌWO^z,l&W b)\4>Mx-m5إQJWXi5NDB,+E,#xXo͹XWX+,PYMA5f+,?dpQ_ 9aH,lxw=W rpW"tX,|;]دW.pm X-g|Wg9P eI: jk®W<kz{ k[h8^"W?JXDܫ- b}opqn{zl=, ,JC N +E,"KWhŎCF xPk\N+>₝XD,,:]XP6W'g|avA$lV5,M+*5T؜@G+G[VֵY_VB,5vqWĆh}FoǺ6\ilx5īXe,+,Or \ G 8`# X~_ CcfXX6 `1µ1zʶVUdY>I4f= [Y:k>gb֧*V"_ޢpM-i;9^1p"JC:{&p}BJxER1 (`)b]b(`!n%k\~ 1sT!|pMWV>zM;FBl+6֢lÊ} x6uq8b|mtkg <4ج-p+ 'i-(\XZ WX W t,BX+G,p+ W+\zd5.X@){9Y," B$b(|5;\!;|ͤBetuV}V|'`}2ZmyU$^h ҏiހ}Dl|k+-GV V[X~25 `oX {EXWb4b4`al#VRRr^bjb)^)bW pBvߌ1WK\v 2(`82,uX`a,"{I[ JSZk:M}>څmi\ D myt6&+{W"uizM X[X .9&-`iǕX>6}ks`yUBl.@uYe`W %xb(^1.,E,=dxq,"pB ^;+\UVluVX5݅m&`θ64'^x{^} lb x?yMXqA36\]GoKF,ǫX4WX Y•FrB\W< ׷8`!WX~1E>΂PX,\B"b1RqB1kz*`La?J,?*>lވu4O6!5& '^=Yzm> |X XG[µ-iub%x:Zi|k{ `csf_RAl4\_1DB,+E,#xޖ&3:4t RB%`k[ K\5Z6Bl/X>Zdv̈jV }gI~*puVֻ`t+OSOfAi2U~l:+Rm޳׬-ׇ`wm-~~2X V_yE뼼k}E<e@g_%J8^%X) PR"^9b>~Fn,=bA\"^kJ 5.k `1R:u Q.5\i6VI-_X j I٢;z,`ux~|lxW3)Nv*`%ȵpm[iƽ"- X[W-DVع.,+**r. WX+E,"E"`K\ ~`"W o NL ./D+l+}ˑ«ki:i5ÌXKJX+lpؤ[\6RJ]6c lW  qB(^)bW 녧Ä@(`Iʏ@#Xz= JeAb:BK+M;^XYw~פGZYZt5WzjVze}JX>زnh2`k[ē?#h42ؤ[>xz% EP. W +倅_.瀅PR"^)bW tQ  XB_V:`,o3A y`kzҔ)&y!L_ 1^+nWcF6 ru.i p tu&VWWyEP^w& WX+,C ׷ JC񊑮pQB%. Xz w"`a,"w"`I= lpUva+?^v_%˹TB`ӌ|:>&+g=FMyM|֠b}XY*z-pnwv`]\bYn\g&>M{>vͼGB{W x:VB,+E,+,*~ٝ*ȩ6Dp+\ix=16`,nR|t"\}\]X؁ֶJ+ ~Y>ئ=81VN3ywM}Vkj,kgbmbs,϶VSi:YnΫ/`qOȯ_SVB`ŠW ხݰ) \z^?I>JkTSu_? w_.lkzkހ?؊i@;b)\%^1p:BJKJ xPb8`)b8xWp X^B]゜08X`/ ]ٲO aC`锦BiJN?` 9N^xv_G ls $χ94,Dz%]4XX V_R>$}xf^m^%ĺ.oaV̪giV.[vΕD •J~DŽoqB(^)b)`WX,"JKwR"bmd9C9C>K XB )WZ|ҍt_q|r6`};PՅ}YGU5ok4r `#{}kXiNXc-l[,ElҹX_r>s&.rĦ}yhsi4.x{j +k+,#xM`OBW(^!A\l @,X@ _ tpUvA'M5W>gdtaXlaxu|o>NC{չ5kk^; if5XX_r>wO5V 6Ħ}Ż$X:rR"^mo@*vحL8kWX|E{_yw`.`.,">BB 0 `0 pUvA.JIJ WZIfkejj 1$65m"5@{^SX vF.m=q@,VB,\BHuuacH$k;X`C,{mt}K, PR\1"`(^%J ΋BJ7PrG\t w"bX XD,u9%L'e)`?&X>1xp+dQ ,3>'w.i@:#k 3#;āR/|Bqg\[Rw_]G kZ6`cwX,|X te˶6K<`9bmbmM>a0."ZeH|z%U%!VgIc)b@(^%ڶG\㷊"ֶxP,NZ%]$] Ped%.+^,qApg-¿ g WҔ, >~Fp(:yǿ{ 6K6i3c{\3nH5`c z"5`fXbxgYM:+֧ MP&!uplmtX~XiGk| ^퀕7pR"^9`;zi-pvk!QpN"^9`!ؓj (`+G7^EWlfWl؁/`Sva/1|<ӌk+|/l%IX۞W_&~G^ X ]g6 nXX߇[!^U:˻Iuu6H\i8^mNX+E,#xPb(^)` XX. Xz ,:;#PUkz1;m'eYQZk7 ض ~[gl- ][ .mJ9koumN: taˉW#YĦ9^c V3YXw/`V- M\7 x!u:֧oQBl+ xEr ^: Ȥ gd ЊW8`K\5 ߁8F0uV\Z|,lw.ta}n%4 T}`xIsa dv_{^3MqͲm ̓JO.lIֆX ?AdSZ16rҎ Vb}bW Kr&m q\W +R(^)b\`9bXD(RFN z8]`!X"`a@Wl| BgdlBo_?Ek$<h}dA~сI"b@AW 8\ye5#=w XXשX YV 6X xvSӱ`- XW KpEJЂM`pBX&'),^◸׸dB8`a-9PN p= eK+ǂO}NF.rJX{f#Ff\0k+ֵ& k=V?_f?G8qAX ?UJ/`!V :6N"`m,n7JW +E xEr7Kb'׾#W)H>%0tԣjBJy/ne8 (\ivV(c^̿`IM"둗ψum &Vr辦\el캖I[p3۩XO+XH̃it\ Ť,EwcyMuA-Xl,Jlcm;`moEoi"ARR"^)bW WLZB/ Xs ^aqQB عWmSQ&UA@`߷'G^M笫ퟝi@]׵,cVd54>HAZ 4FRTl<`mp}z^&Ie5 >l{_]gc]Wؤ[ 4G, nԩ[,+o! ^1tzĠx!`x;G ]Xw \\!}g^ʡFMYi*yV!הjMV i6 t#`mpG[Igb,G+MB<Wf+#jC,t %B(^9b x{CQ +B xIqF/q!,6P0FWv2\ܲg.li5P0>1,}Bp1Pz6uɺiZlygb\,OXb16nq W 1&Յ%Ӫq6:J p: W +;pQL|KpN{L:o ߯}=m֕yl[Q᪀퀂Oj B,l䔬͠tc l](MҿC.k 7)KDluk0,sifӀk+MXټ+^zTNS4i}x]4>Abi8`:*!v#q,Ķ}@ xm+{:b)\)`)^)`t++X . X~X{n !v*`;ТW" oBl٬&#--iiD[) RP`t_lcy ??;麖9Vb|OTlV)YK.Rn^U/`7KjC,e^%ĺ6 `ӱ>Wk}UB}]JXbrB(^1W,+_~x=~RX=eLo1Fa|ր$Wi@*9P mHs"ZNR6p}&|\Ю"qõk;b>. n5 ΫX>2X+F `[p+mx{BD|KX`hMaV_"}F6 XD,2lFUc* W9}glie,G bw n*HfE <&m{N+܏2ebsl`?x.!66 ?Bl,UJRvjl$f^%Bl,lӱF#!ֶB" xprVXX*^06p Xڅvk^]pM+U ?;0@b|yZ|ה[Rm\S6v&6{UBjV~Ȭ`%`T'b qu]}KJX߇[4.J'c%>`,+E,+  xERkYX*E,c X=!kV@SX| 0zXkEHlnH\k@Wp~#v̈oK+=BbWM_=bWށ\uq9/ ^1XӾ,̥Khغ* 8\1e[L+C/Y&6F2;W.{麰1~I=눁O4S[D,x- l K2ɢlҦfzt&V4X Hxuu`9\]]63恴Kw^iZWW X=c,}E~[l&V_!η `}Wf:Zi5Yo6؍w \,xpu!p+,WXi•U ZMC ʑEwrJݱpXuqWl!^qw-|lu=3!e{L+efX b+=jl$lZ>8diV-Ie /6WC, l#lo1R5ͺ,,F,lB#ʓw1"ʓX>2HyUb9^9`]p)vi8^)bW +,º(^)` -<%{j,M+\?e5 Wl|" /p9˺ei;bY·͵Isw@36 dYWep Oju `m,hD,= iU)Y `,r}Ult06ںW #OD,+"xER* ^1x Ucꀅ``Lv;\mZe ]:be#4 U[<ν5a Ö4+[EV6-b_6'b}!K#wa$&62,pnpuw^9b[[ZK*!+`N xHW+qٯ^:k&X~uKe*\9ze{L+Eg ",GnX)^R `IgV![Rz;%`9bdVsm`31[XwVzj*>;9Jsw;x};^ŤūeMVCxY2[c-׃=yƽHxX+On\,& Ib)`4Yb9^)`mes +nxMԅMX+AӚCuv"'`%+!vݢj8^]u/q}ˆXXղ>˺}U4>`:GH,DZc7# W ,uƱ_K,D,EC.k4wϴM'5;`%FZ:u[/K3.xtT3jxV3 mպa `s^ݘT}5MEt_; >'b,?+5 b^Y&$R$6\lX`6D^B+Gs}V? ǫaxp1Hx4H .,wM *\1eL˳>) iva߭+m+1ʝܠԆVaxϸe `@Ax, m =z\,"p&!V(Z9`i$~a$fc\Mzy=ޒn]ktO\EJxbFp}uWpQRb# hQk\`,.QFS˴< _x\$pFK!FJ X b%JzEVtSjrۿ>yHȪ M&Zez}y9`kZi@`1>MBt&VkVs(\} hnHke<X恤W>B î% K: KHW,3K 9㘯3~ - W 0ۍpUF\,}ش]X.>ԝSf$j%i0q5Ն>ӚFk{%=jU吵v@k#s` `\oU,dL.rlp<>5xp$t_C9TB_ՂH+(^%B C'dx !B ?kp=ejvg`pXzĀu`Jsiź =->h+^-~H+,~85YPXK X {S`^ kbmW IEK pi}>˵}]EK R7PO؉v!Q` FK,]xv@M.j'dc#(>٤_i6 JlmL{;xy9FdORVQ{^ }^H'b `7]Mb9\v*bo]Tι ֬bpulv^1IlV1I4Xi}+,=@K xPR^1W c,_d9`g]clQp:.P4\mT 1l9`JM˧;'Hߺ l-ҮȢJZ%>ԪOڔUYH!Y}Wc; XY3ckU, lPp*#J|*m ? I2u_Xbֶq5/siaY5y$>ڢf^)bi(\mM<qmH0x=y cWXix=dϙPG5,(^)`EbW%)YXKUf+ `k4Z`-_vVmom3.X$ V^}csMe/J[|2u_}N, `ӬL,Ek#EJlIp =p@<@wm+ف> 񊑶pR"^)`WL`ۅxmx <'{e2` +`ۢl!ͨIDAT:3Fхg2qF8mfBzՒT2lHa `y2sMV nh`}jk _ zrE/`X[vӍ?%-`[иhֵy@:<`JueW~21B(^1XW,{QBo8ka#rF AN ::`mQo SٻRw0q> ooZ6 4 3s)Vd&-i.jk3Xko8@̯_LQ,?+.mq4i o8\}hIB,XQ[::w^i, XX}AbPK,zйxx#tnwI]7~ yzmQˑs94M&+&A5+*, ٴ,? H ؔRmHkd ؤZXbօX7E``mpqvpJc,Elң-Xk`m\Wkktv`%Y YWX:J񊉍0J o  l=}7~dc c;:~=(j >Qr'|˳"`Rl.lVJ3K>ci*q+^Zyg@[ Yyn(\ll=p ؇i`,t IMu2mM8^%lpYE+;F;_KJ˷pJEXa,2*\!X^ ?.v \/ؽgliy|3F+|vI]X/:>gi%&w7m!Vۿ>w [|>[ [u/q=jcWm@k,`ՖFq.d,' iP6i@^)b6@Fxy•&y% C:4W^q XWgo ,;sn^m 8` 6K^b]F uU Pͼ*ik I[Rnp>JW:rkklh}IXGmօؼO4 X\;EyWW`gxYW`4WX+U%w_!p@ZEuu`)`X+AXXsX8fp+ W^} weLˣ^ >'_I};u[ݰKbv`XmCyUXB|7 xo~L<ʺ"+,یk{^iֆWl:J'bi콫{}MhK<`,"Jcl~XюӱW +"VzE+Y`qϿ"b鿃 cbx!`Xx@_7UFk*b} hEGw]˗~ &r#5,`0f2`iRJixM; GZ~'L+ֆVl҉X< P%-`V4]uu7LA8`C\2ɗBd}6b)\%JIW/k+E,}EJK~vW QHW+dVY``+5@*`۬rkM+M;b%~W7ՅTNʬR5Ö aO\|WdI<K#rEy倥y]; m"5+`]޿v71ΥHxuh:hI,G:pu2^/w<޲rV^ǫXMg xpB d9`9jc $^x7M$BSB``cێpUWltyR"Vl҃7%`1y<z#6z̡@~ǂUX} xVee|-yPLj=ۚjA^yl1@jˋZ`X ib)Z}+u\}lF>*vZ6\ilM:KB,R:}v"`4+Ä}?gB*Ђ+_j:W,]!f,F gPY}ݎnez&Bvg|R+9XF7ڊXM,m⼩cXkZXiˀ׆Ofjq؏_' yrֆW`R]B ~"#5 ."XyXZ`9]mK+ pp:P"\m/ݯ6RRJ(^)`|}{%*:+d¨9 xE0u{Wk!Ac._RAlAYTH%캺vz]a>r1w4XLl&=$k iƽLyX"ye<>嘥hֆXSpMB"ǣ-`;'aq6i!#V:˯ozLhjxPb,ūXC#`lv4,|?"^)` ?9z6v \mV~7`X闦݈XUC;#Y  wS]HM${lw熁T[[ uBՆWuW5Xm M<ij9?SlZֆ׼KR~#Hxm&`]EJgb9\3 V`]EJ42XH;_9b?ImpͿe1]F`\(Gm@d}XW +E,ū/`.,"Xڡ/_Ile&qKu*^۬(o`!PDl yΓ#ybInB6\y,[ݫR\Za5S+=kZo(`<$A덻D"p.&-`t?زGB,@Նؤ\3\9`}VgIxM8^s"`9^1 -W_xPB(^;eLi?93quW{*W]i:weM8`߯!6 ވZ[O͏n=1=T]!51ؤ:>g`}7 H1SE{Bx^N8刕.lI).VB쭋Y $R;lrh\M:ӦY#[im}WXXi|;G`y_u_ivq_3E"z ;S7]9Gl'UۆE`!pyt V6&nգj[6 4iE1;`yXsyM zZֳF:.56.V,M`\ 9\ gE9\]umE:ty+,+,#6+Ͽ^1>ErB ^ v"`aک`;zL(cZ)8`QClLf~ܱJњ7\9Z;>Gn>>Tv&l9?T'! ?R$)✫$XC-c-CrZ&`Wnk&ޞ<{Y}6 ku+MkExx _d,jΞW:ހŔXb)XXz.5-` ^]IIPwm.3+mHYWOXi} x8$ `91ځoX iX|?.]⢀||w2\mXz w(`k]A,?=6 g%\Zs\55j R=WayqK-OR7 *^X)ܷ=ؗrӰX<Kʓ73Ac,Gldޕʲ!wE+|$hK,XitF+•Vz_W"Cx~cxuJ xE6='~,, ۝ Wȼzƕ1A^>'`,$ WppmIh-WSymTϙnjMN֡~麬~vwkl+  i+Y j={V+BJaڰ56x"VJ"bZi ב p[[qEK6"\E8^)bG[>IbYe>ZE;W W , X xCֆWb׶R,`IXؽXV_]%B I[a66Qj]z; >i0.,i|$X>  NSr1_ ûN XD,*KZN=BʶVk~ AZqVp Wozr6؄=i7 ,OGZ `x`kl^mxd XiX)yjKR/!6J=qk闑8|uHEڶp{څ{TN8wHy@k,~.+,v)^%"b+Ӈu`gOvn1l EUk#pUqYxD:`%~ѕ~|L׏9^&+ p=g Ⱦ$CiVdQЦ+?Qpk΀u=32C-YXzVJk:+v7~$Ytzih Gk-`fNR~,ҤA,,E,ԍM,uttU,"o ߟIWHfFX\m̹6 )aZ  {*]cS'cMZZ W 1ľܮ|l?R}tDCOzҙ֬zVYu=ݓZ(}yfx}@{J9n,Ʉ46J^%#H`}`8$&m)Њ =K #.ݫRd b!^|dF _GHs~:`3].6͸@U'pUZ!xmv[+ <|͕ ^tX_nÀ'`ixdem5Oj(ǶiieX^)`%U)ibV5EK شklPb8Z)\)`1@X,=tz[ ^GM_"^#`K\WkO?W XԫY{7IW-u"wo5ņgW`ck9)G\غIErJpEld%RR"^W +3/3U p]ӿHj ,Ǐ2x`:JkL5xh޻tXj^lW^g]y L^\Ãt=` d)X~HiXKblx d06&5,E`![^'pp}mmXWȎ_~e*>Xfc;`)^9`(`cv rWk컏 7x}׿׺UknW+b~{VّXizw^cã efy5*riJd,yՌCgsj-23#6 Cr )5Y XXK㈽uQ46il @1sxvL|fM`I[(^}\*V񊀥W18`.,/qv+{Ɣm/ʼ]z(;GR$ ׻-m4Eյt 4i{ ] "К\y5FiyrͲW'Lb,OX[Wt`cO1YXL'b)Xy*h`lx;o^mJq@ZU4\)`1Im/ǺQZ1ϴw`'^+,ӀW;V+]CmU, !`9*Q2e]Vüiq5EzŤ^e )K:^]Z1C%Z{yyz^LiXĪFfގd,' V$"Zyl=ؒs͂Xnlk@6>VxW4r& +WXǖ"ꂫkΕUFW}XH ۊpc/\!  WD6յ }u=J XUMVH@u=ӳYB5 VX< OFI XĉW`J `'2s ,}-lbzجc0Z+`pG\Jj;6)ob,} bkp4T*,]>{\#)K_ūF+(BZ[q"`%ȶ`)bӰ5JB*V fњK hI,E rYp\2wd˞E ЊlT}!^q=;XX+\X(\ӎ 4li%pǏ"ݯfe+E+d&Ih 4>{\-5Xހ%ū+ `{o$y6 yg ֆuHp zzr,\BJVB,,UJ1 ,R2kb W9VP%g XD {"m*^[25lm(`1NJ cJ3yĞQi`WGd@Zd,"B^0S`֤}l5`1Ig`is/g,'2Ⱥ P%hlxM"XH8b-`[66ҍm F xEҟ|WKvU1=3-K5 W`mUt5+\]hEҤYqM+ `&xM"ˍW`1y.v,zU`$• 2c$ ,yz\?Ar;\?0k#(@#p}US&\![+=UXI&%_֓`͌ X#-n- XD,,ll]VeNMLR"hR6 Dk`a'(G« $ VF!ۊccE `"| jp}*XմHlH WR*\mJpm(l+rĺXw^ `i^4 zP뗏0`h IE>~ǞR4`o~X$Jhs,"(Ҵ Wȁ[̝x]Jm5RZ`O;'~ SO([ T k#(+ʁ+E+ py4XBi=ilJF`y,i6vXA֋Z6eV4<|5 x) ~Bv$B-]blYXuiD?L:p׵\dfJ5'{pM{p]7I+Fl),}x7xHl#uUX<,Dk^4in!Xy4`OV`Wb[n!`!W W W-S͆?ZuνWL# .quc6-`1})/,&@Ÿ(`{]t ,'U^Valx XVej <&2`7use>m,"Vl+5,FnV5WC\#W_f+}äl ż~XjٽZ潭yz;Oܹ5M^l\<,+ 6Į"E >mppMk;ֆV+2k[+k+?vkW-g1Frv;\1 W: X+Y״xxK X[^}@F[ `l~Xl.,Q4 } hIk;UlCŏ# 1 0}cuY\I~j9VިV¶2ieb6"6W `y6"#օW X)zk *X R+@ &!`T,GkV.v0YW`)XyJ)p۶gΔ*bӌ|, D,mJp\-Ptu!=M^p倭waGpiG:\i{\=Kb,_V /I.J) I-ػlxvͮpXbof` X V)=!jL4^; ,EA 8`!s" Xk vx<Փ7ikekxV@, H}uS`#^ _XצI"B,<¹?)yWd, .v"\%"d+Źj,6npjZ}@`Gp=N>mK\yp-ʆ}j:np]ya&W{\@N+zϹip% b+qxm˃ ߉X=&U6:ȟRyfVkւCMW" X4x`\<>xM XlVW_,3`m5&! إHpEl`cdܫha7.Nīziwbvlc w/^+| #^#]µMlhWRyf!!` W;\]פ]Y{d Z8o<ߧ&IVcX_=`_dӭjmƒ-,,?qVӡ iJp'da>%B7ͯ~"^wkTl`[۷ӛ Y\E piWҤ<Ÿh,\O EQ[`EF̀BH޻zW1UYAD,D/b%)OW"b)Z}W_s5+\]vEB$^-9,cXk WٸlF1 U\!K& \9Zy!H# 뺢`lub1GZvǛyνz6q׫yCh U).J6{alxvm4eՅW\iU y 챂,.,yɀUh f5} l W\!_vpLfJYٿt 4x}Dz 7< SQ xuW^Xd Im`iX V`X24.&!VW\ɓTk֮\9`; i Y2`DKYelP6;?Y]*^N9,5WL^˂R-i=bR^~F.lb)XYX"],6 Wlɴ $(\9^)i' ȶ|,x^!׍+ꀅUx AY` xp WWv6j/`]hZfVKCXx8q.pAlX V \\,G R8^+O;rN=qT%/Ķ|,, 7,9XYW?ˆO?^k`]x {Y8#2nr5º;8 ]ٴjU6 taoV+fUt \%Ҵ*\!n `)G6#!BQ#Wbm+^O ?`THрu"x^a X^5R`d(Xy| hŤ+$+\!WV? M. +`[dّW y5j'\mhK{W^t@JƓ"x!M'H@MXXXW+ `mlJ#9D='a] $T< `>p.Նf2wQir68VWnP`VS+MW-Z+UȆ$W ՜K df5-`MX?84IHsX5q]JtQ >t[\'a,@DkXȜۈxaU e•jld;y>Xsm7,,$-\iaV\mh-e 'V y ,l툵mH«膁ޙb,/ٯˇk{#jiQRJ$v긭J\OWkyGVʆ{&||bCl7dž]T`l8Jt \i+ 2{ɝr(Rm_?#ӳ bi,wO ElÀ˄=8d)`%ȺX^4.En'&-`i8Xy۪p]_$rW 6 2Vd]>nlU6[)O'جh)I ,>x k<;_RcօWXn 4~|0H:<=ҺCV,/`7,_DR`)b<, >hy֑dl;xaJjlnlAXo{+`ˬJIlZt \%n?P?ٗq>p %X{ʤp޽5DŽ1╆"DŽxq<'–Bp-b?.ixvĺV`U>WF:`mI2PAҦU)VlVYXĪEκbX\u!ꋾ[xw:nQbEAcnvliU6[9آJөplqx+f4W qpွ. w׭"6ĦLYM:XL@WX Aڲt4XeV~c Yp(d;q>v(`[Fb+v Wp*\ms0WY >}K4d<w_xpPf=B}5%`m)Cn;VY``-U[RV p6iL `\WLUY=zL\)icX+?ޤJ>y! i ӉplX>~PW؍ cC5G!v|Z8`)b"!Zyld=B`[j#r `y+p ,R XCs;;+~l$U[,bUJv \!9*\1XBV,,ο>?G[B ViJ*pMB+$ kFU=L;o"B6cXٍC(`%n XM.d'+ZyCbi5J. HuӯRY3n5YK7`o5yveѤl3j[Jp5;]q,ȶ|Uu<g6+`^eՓآrA+%CB"d/ƆX w—JW ؍C(`%ף_w&UZX"KJ!!X< +Ņ$'b9X,{ ׹sWZ5pBگ `lR l z[rpŌ* G,BvMGGb,f+z@Z`1|U3+MW`)dɡ`xV/`4< XxU[*" `޷f`aƾlu] v˫ ״Vk'L']w`WۗK!{a&w刽#c G,c\!H㊏,͋zZC{(`\e" b9w+s6Y` z(b9do]6#v HE:BZ(`5XY`yݭuVl^Ab=6 X`pzl 4E@ ,)`KQN:`ˆ+MՅV ׫+! p{ۊ {|Zl=-Xkq!=D4 XW>}1F/}B6orȖu;:k初{6W:s pu6 2nU,V麪Fa;%U`UpY3o@k cCɒh$Ȯ[>4 G,C(`9do >`8b)do[]vă-Y4؟;K[ E֕CjV/`XYwv Οm$yO^9: Wp8&66ҍĵ[{VPM/ܯmjv e)p "CGBC(`%Ȯ[>$+ :zedo_X|`5ؗAk X^KZ>ǑM+vqFBk+?)V_&!bU LJxm:\צW+ūbu , l[`J)p\ {Ӣh$Į~ !pĮ"!J#!6״}c`>{\v"XR,Mv‰X^%#\gLkK{K[dhlO`Y-.ҤBl#r@XD,k」BVB+=њIxU;OYV6:VJ-j>8>mrv WW31@e'sub+^1bW-` p)-#!6ሥyy57OfY$]Ғrg`#ɡV!|RiWڮjIXWuWokB*^qwt\YW  Vp5`;Fl2g.u !r^Y+cX ٛnlB+Av!!^i8b_"ֶ++`XjKZ:⺤9[dj+[s&Ī{Eߍxm%RJDϺ X}R6`;A+•#J]1D,,`uaxwz Cb p]|h5XYO=6 `1 ` EIX)XL 4?} ųm2VdYo`u m1؎yxq WnR4\Ed&!h1-Ɔؕ#^]]$d,ƆX+&W@J)Ow:V,fC6-`'aq#cօ5-`mxM פX6z \x+MVĶXAQfQ!l'7v :\]># ~a%3c승b~W b8b)dW]tpbpW-@+3` d%5UswtR]i lppٍXWz`٦*Vv+dbu!&jlڹ2d]FB,1ٕ JCޒRN4#| V&pݼfօo_zu]ٸ|g/3mYX)yv(\hIpᵝ![X ls`;4o#Av# ^i$ĮX߄wg9b<+H]k;@VH[ ^(`Eғ<.&ֆX<pMG:rK#4nX Yt_:*mHhm7^|b`17<q 6޸( 7AveɔF,OVj2\]x۪ͣ-k%U<+M'吝116b8d b$.y E,by^4X "k =8P`n (`9bzX(X7b1+. iWTwlf,\9^}ԽVaʄld,οPeïSnpjNw`ee `1׹b!v^ ,@qb郫4x cmE 6 Y_Jh8f)XyX +iw&u]IfAc:ZB N mw p\>j&X YD쬫AJ.@.CK!낭ؤXcm f6r/fY3w6 m6`'_ZV_N 3S$p l'4/kluJ`Õ#JsEvy5!h^ `mna(b)d?U {&,MZõiE\ҺSZ9`1˪XW ,!tp} ^1 Zu> Ga~ fWt\!B:/' "24ል@z9o16#^m5 4`>ˀX iv X`m 9WncPeحi҄v5ⵝSΫ2!McImIy`a+& Z4_wⅽ f6NL16&!v {  "`J@yƆF5` d Xd YVY D,3eb3xvQ XM/y!H돃> md}X(F_'õlJ4^9T+Av+'hA~m,4b8ԄBv쨽d X[7 #Ց2![$`Nf`c(VP/\1-+vC#,;luZ: Fg-p}.Kj0 xœX2B] ޽rYY*m-Vـ!XnOȺ;EkZI|L^5,Xz<vaօGD p `!+/ OyPq!!ێc:>BU6:-EE&/R*\=Xe_^&. ?zo` Y|Vh57br,OҖ)vKqՆX^k;p$83vٜ~18+f灖 zN+[:>U6:-tYpAk#p@7\znY^hcN? "0f_`ǜIހm+Z,V, ?rKs \삩xE^?:^ `ΩAҔC>Nj*|vc>pLh+zi!{q=իorU ˂ q"u `mXU=Vb  XSfj O5sbjx]\+,pp޼xP"d 6B`.Bu xxʫOҫlub:4W1g^z^ ;L80/eţxu3w<XBikk҈n!V%>ByuM+)ؼX@*= I 5·ZSF pxE.}d5+oBjk ^o~ɺx- xٍ- li(`N+J3]*矾[e*mޑWıUt?'`/9/$?W_ుf]jbCvE vNY=wGgڡ g`1.jJga!. x倝W+,•vɬ#xv~"\1k 񊀽mɐB,O^XĖ n+HN=1Nk pL]ԫL WK/5 W ,G`K' dC@6 `i$ 񊀍"x\1sZQ&k +eCM%╦Qȶs7]na>5lub6>c:t3\{ՄM\$^#Ϋ OZ֬ZOрI K!+vr .u5O^r"AֲNNv_q֕AWk 7- +g߸XīB=n Z^,pt3\m2Nk`/,xW~W+ 0Jlqb`o^7 u=ZuӍ+Ve?}WLmwȶXlxE:U6:5 Wn+5r.5 ^]=] ^1`y`kހp]kBY+Z,ϾJiVVtW`  N=Ԅz`͎FuW+Z}58,ct+êArתܳ\q++ÕGYīP N t*\!sI mEB.W+{W&] `d H`ǜ+ؑ5JM꺎W/5rb'`S6W dӞUJh X+)xE\1ץp`"\)`)^!tEu+d^.wrMp=ܛq!V!ۺ`u}V Ut2\iB\^_"`/5 WسNACঀH2#;\]Xs؋F p ^b,+d(^6 ^/Auc\)^_{Ƀ7g"5 bvK`NNӍpuq& xMy02P{I?~NY]J<^GXL+Ss 3r_ ȊZ#"x.j+ujjupX+eL(^wus\ -W]97/Vwcש1N+MU앰5H`{'vٻ pH1UO>X)T]xp`F@F-$V WiDVdJbN:^k]=^ox]=J`+f \lrj8\zBe+ `1 օln,v_ Vt^wAa W;v yusv7qv)?0MBCΪ ^g`nv+ l)XF[u=,%p`FgWJu^WxE6 \13ZKכp]|QXl{k W4 >h- fuհ5.$ =ī gkq],ՅX׍w,B6`d[> ^j< wm_Xf^:\)^!W +Ex]kCCnX^ږ\ ltcˆlc>U6:9gp V+ ?H^]=xoX,X >m&:BJmGξbX^eڄq^|ַbov#C"`Wέf~k+jȖW(\a5ȶs76+dq-Ye# p̻஁ .e1xu3w5xr 7AR X),b}k,6Of;BFha뚖`1M츑H`uzW+ ^!W +V%CMz,x #xi!\Iط.MDB!6t\%: 肽 ^]yV.v&ik[}7`}Cv,aZ0)q I+.pPM 0u"\!;CܷX.Z_j*bZټūluz6د+p8OŰ5 W \k^Y]|g+Xv̀%E&KfBxE8_55q:^WxupƣLddF M Ɉm}m*yn+Mu|K^{I .gXk`O8fcb\˃rR?!;\ZӜ`Yg~3 G ^W \ `7-X_E=b6.^k+Z].@i=r0i{ ٶnh*xn+dUt<\1.;f'`GI`<!^mb?znXWr1 dlG|O)ز{9ߊU采x\1Usx\1W Z^7jkڜ# k]vr6 t2\]{.?r$BIhS`m5W.v`1 ñ*XW̌+,c W;@׵yv=0$ W rG޳H6`m\[<Oǚ;dY}FU6!W NΫګry{&3l=V+]wU$`;\ l` VmXe3+7Aqx bZ +t]W޷LhPYp0"m6q )jV+S Y~Q^2xM,c)'coo`]G- w2ڪ ة2^ EӾU6%E5TB.; 1TsX+c92Xds;B0ӞP~4zE{j =lQBk\W_7v z;kdz2#GU]kxMtu-Lvl_JvKmXe-pDb./w`/Esa5 CW` XWpUr~EXL+(bX~]bU R}]1Iր0W :^plͻ޻ k#nP3l"!ڰ]7u \)`ˀe0Z\md>I g,Ejx"6qkP"{Vlag`-A J[,Ū)X)YpDk 4ׅ6;Dj ^7_vkUȺ! ~ l;Uٸt \1_{hRjF^9.m9{i?0ဥbl6d[װlʑ̀%![&`!-I5Xx]X+] ^7LC  8WLimvv_۴ʆ]4▁cW"`?oOW`G '}`rOS`T/gXv%Gӯ+Zݡ'_$-0#Oޢ2jP<ւyZ뭋ZA+^)\MU4ؤm;6aMpb\`Ԟ.Ej'~X+Fy6ik [>4XL^֢Xb[JxE6 [ yE¸+t]k׍02 Zp}pͱ٫4`[ Y?6a-&Rv\]}^ سGj)'أءvcU`]Y}ݎaҞ64A6`--?+% `+ uC w-nf]a\`֪A!^K:`|b[zYy nS{ WWȒ)t\%p/W`ρ܀= ^]=;8[+ASh3kKW;`XLemM4]j͋w^o[<<Ժa W[\1X+MClf,t__ vaM&ۮp5W{8k. .18B0rf% R]m"`9aWXؓak`>z`6+-`9d6pUW ؂+@6 `e-U)؛kpF.0.pI;6 ^ ~ xêluSM5pr { qS`1`,#6 (b9`9d֖3+KBz9Y p \~uu]sT ئ  [b:>QU6-34݉յ.p<IF^&FQAb""CwЊt]@EAQQPco]lb46 D$&y\gYkjW]1c&Zs`RO '`gQؙ3(KpKpKp2`y.+C6 `W Y`uT^4pڢPgӮ'`^Udil O`;5EC pmerSX `(5xU`m18U`m7O&Őm$`]4μo^2^l:mN 8}Nn' T[%ri={« 3d6 3Xk5Z/ro(g;R5O0]0XL>T-~]42|kfFCӷqN+J]b9^]53 lW6rkl XWoA(V-!>[UyVdq I! "*E#5'=\MmEJΝ;HYam%rmE jǙrU^MXXX[sYB0o[Xf]p>۪.V_+: ħY`pvl+Õ|Ҽ} ]a]E-YSGx Xb^l+i1R]MXvjV| N_ݽnX;.TmerWa9am=s \` \`鷓nʩ> p`Cֺ ހ;`qX S`JF\mur%`?Rm3-jlzVA^Ẫz6m4=`J&+4d W-E#jBl+UgyKAm >;'T Xl@t X[yJ@+ꥇ{0gY[`? ~3j^3`q Q 9f! NoÕpxu՚ST]7gf Pvn ^MCeZiꦫ &ClZ6jX543`K" X-đmW>}ju͕#Udcƫ W s';g &]ZOzNl-ZUXN3mV,g^ޱT4:]9m*p˧6ng6ع:`MzX߆,ޒ%',#Ig9ټhL;(ؼ{}ef KE fV;cJ߇['E*\mx7\W;g 6逝O\ ` T+U_2mѪ&&,4k# fꧩXze-ۨ_gXƫt4i,n!R4k-\5-Q&. >& jlO&t \,4 `M5Vk6Y۵v$շhuHrW5Y:}_IYծpmu2`{^m]H+1]9v^Mp=tj[jWbzGM#$d[s,+`-Zܝz `9E6 dq6/p Ijp5p.Z8T^m] j,+gdm]zGZK.f3\Wy]B0bOLorոXf}xo.7Sm5Aַ!K.h`m]5ŚVVն{ֲ&&AlBOcquɜp \ׯ?a&. ~$KpxM W®#V&|Vk:؃Uvdm-ZcZ9d/>_Z+dqq gѴ."-V#]*.p5viPW`xWY X[ 6iX٬5a6-`F-EP/jlѿ$I-eVd>N_R4аVp>~mW@IDATeNRxviU 9-CґC_[ʵ! Z4EZ5 ^ W N+Bլp5V"ֶ5)`m%PAT U[[ z<ŵ!K^1 MKa[ Nl.vc֍ Z2`$MX,]>v:`?c?g>7 ^?moVPHh $xWݗc{ 7|V]jë ԝ;.,g\)-^\,@דY`eo5 Z\|v_oc۳[ `G [)H t۬*xE.EC u#jluzXi.kZrMV/8LU_,٢[_ւY`e 5k ؗ?^XE,4ǵ/qi 5; i)J 6rbդp]<4K|5Akl-Y- X d%`MؠcG=cםupۈX\+bdҬ)jˇ \פ#+Cĺ5fݒsXmkKֵ|pj[@-!n_-(Q"v[*+)j?pÕQmpkj&YjlK;;QYji@, H 1`fC-a4 s}:@ Gl+Xu|> +& dmX UK,6`E%<2Y>?W7d[ZA+>zxEZ1E# Mf,jk%rk9ޮ:d۳,5aހ=w~i6h*`yn6OYYHhn]2}kB>Х0iSZ ,շ;IVN-g/90R]7` 7ώmį WYbq wV!vz~YS} lF3OE͊G_*Q zB ZZ]-$b\qXZ Yߖ*j5Vlm%r} .ꀕM2e&Al3]+hVVxǸ:Y W WkJ]eYj7`sZrM ؞[f^zYCQͺE+o^pF;\~qjU%`"=;^i E گ p>d+`Vikֵр֩VRǏgpQZ:lwxD :b<k!;!^&i34=b_ڪpn ^8\i[5;l5մֵA6_!HrB B6)b@y5ӵ 34b, Sd-6+z׼j)ic>l-c z]쾪 ؤVМ+iV"afClmIJׇՓv6a%ڔUXz4QuշsmK Xyj''l]+(rvl\+ ~ޘaa)fh *=pÕMXVX3dOueF`XӟV0b[Vz $^o`M(CS"'DluՆN+ZXd}[vvPmZ`eX>lU\Wub|Ibqu0^լOWb[- 9u%#\\*Wk\EBokZ.<+[`]m D Dp˃rlZA=Ż+Thzzئ ?3MXDWoF &VoVևS%kl_g嘨4e47R#V4;4i?~qYK CkCW vi{VVrIkRښۖ f+^ X_XB $]H`gyZA@J#A)dh8D- #\Mx?{zz5PgT4;@kkڒe@,oò- bVb5$uJs'/"JO*xEg +p5Õs'GRg(չXd%#: kl]z Xܤ4+iYARh#6Jp}MW>2`T|V¬XS@`];v~Qm pIM4uSWXٔxNՇX\+hG^I!xUWI1֎Xˈԟ<>9Yy5•jZת-HX$MI~YLY&̦ XY`MYihX}ƻU4^_:Ec 7!\vkXIJUI[ +hi:VX9Ʃ Yk5VBֻV_777 !f,NcZ"RsZ{7 KS X5}vFQƫ$Vr]sZSZ::@hPIX|c#vil^+_6 R4|yp妅+5濄RMe4ue,uB*Wu0Hʚ+tV5h?>&< ٱV"HR4lan e O\+p}6 pҀK Z ;X YVYk-3\INV4ֳR! V_R%~xE\S4l]=@!dk 6Vu{k Zok Ik[Z+`9<4a_T،KV_B`k-kV =ǔ.)ah~ x J Wẫ=OffO:P5 `MMXWٴKZ*1ۊe Ao=ؼ!JcZ: xEFhz8bimexJy)Lsʪ LԱSl ,Uu:6-`c3@gmkk6! Zx9瓳WwFf(mލv+U+t**;S2ϕ@1jKnXY`-lJRט-jEwJ``{gه(JZA Q G+4,E fV#Ơi[ \lϪ\M۳lx*%:uڄ0 +`}՗ xAֵ00t l[]`TEXuru4kTW+44E ͧ? V]-HҔpeﺀ {2ˈWX3=լT Y xeچ5ok-egu6X3ZyiW[%`WniņQ8-4!^iy-q/4?Į-K5۩pK'V:P]55 `ʩ. KpJYkl#Ok'ݖC*Scd9;UV"\Vѿ~#Hǧh|HF#k 5rmvQF o0Ku A5 `M^ +k,O TY<3\I6kMhuV"tkCN] WWE&IBE,="XylNpM74jT^Cֶ4 bmC%؄eidTRRm Y>Ջp< X}ִ]0c .ZA>%2^?{{+y^R4JҵF,6lVkґX>4B,#Vv $2PeMMB ٦쩢&ʿ' `]?GyOڶhsk 4VBV"zƶO^JkaW_Ҕ)^h~en(_- hWO9-\]p}YF(տ\$: `eoHIg $րYߣϓV״]<`cHvmos! V@p맪\Ϋ:y}wL+BOB+i,}r1kp Z w_vBՄTת:H&ĚzM[,[|c||L"X-\m94ޫ!6 dq YqZW Z$LB-<`V]38^k_MpU%•k% 2d]u&<4Uvg 4KbU .?\u!U< ##Ry+^R4|bDvc`صӏ+]5#l{/v9:!0z)֤u.`.hv?po86 8 `{L]9Ps`-9X,ZA' T+t(׿: +b1AWOO_X3uϼ=+O*ʈuLTIj-+[ykTZRXsY7ey|?? glX,Bizaj觚4f}ࣗGDp+x%JcWqKW5箛y|ڮ<̀啵M \pݹrDiw] Kƪk QTHM6v"Ae6:45ŠMZEvΛgn"PZoU5qerQ46t#T%^i%x%J7+}?`7곖zmU.@%^]>er+=Di7 {A(a޺hpu\|X'sɥVP=}uAZZ|>Vb6mX 6ɦ,--Syo:oU;*XݬumrmѲrMhXlyZ+ɫ!^yLӷGa+tb^) kBh:>\ݼDU:y\MT-K[bޱ$-m[zRiJw-V3]OV%޻25#SKBC%:$]H'9I!Մ$5uЯeZʧcC XY+`Zu "[MhݰR6vQnm熫|tIyDoJ ^\7곆aX:idy,R%`o70i2`^.Kݶ:LUK^1kpAgLJ$IORMe1FT=wRGJY4sZyKV{J}[lv1u󺰷^{TT`=V}˧x%{<"xk})ah>p6* s 2 W*Jxkx:$Ea5WУ,ӪNY[72Z 7 {Bl^ޱdawp5l9tdX,53=L`*?RrAU>f!t Y48,:W `m\ۼ)`R{hht QU`J}1޷XfVCKo\W+㟅p ?ũ+ 14]UEAM=bUwU?rp޶(,+vKw_>\%ב!+=תi4!V!ބTf+`mM hcVU\VY x\45ٗ謜h 5 -Z\ZM#jh6ZhJRԏ^Sx%,0eAGFZ`}py^- Ѓ,zNXRD%n)_u!u«l;\sYW~xw1HʻͤW%df!5-`g{NXyi@V6 `Xi 5 `."0Vu5U,aU n +ZOc_xh*UV?p2\?ymdW*OcJ_ÕA<)fhrYݶlh鎥Cdo_zR)+!򄁭oo-uU]ŕˇOG5PeP*W8!kbzu2l;9N k\4Ϣ hu^m VoA`5T^,!6ZDpa֭W.cTcۏbsogsF``UFkO UpZ4"ắ|Jp2\Sp H3,p}>˹_gMci8IJ?he޻bD잦cVU>W:2&]~k?)Tcu]9]Sp6"zVqrֻ)k6e`mk ՎMZ X-W*cbݹت޿:`V\F+p̰\W*Õ)tJx-BAZ0E# 6 \O_gW +yy<5l(8 ;Xh(ӘՐM*5 Dk& HX'Y۰1Wր4]2fYB«ouVUSX<U,UoUG;NPNTʣCx%r%\ _RX 9hW YBݹ*@ʓUwfҏX3U! 1bڵ~`B%ee|dI dI~+lEj#cqv55 `.55 `oZ{.H,ƪ^wT !^UWU*her%\~6,G2\ |] uA6IXCx /M쳘)}^{Ji%G|b!Mnbң.~@jlHVm\K &$Ҍs oֽLU l!V6-`6ԕ=Z+jj*kjëu1Jh}dQ%Zgg2ZQT+a T9a GZl=J}>{}wZIt:4!˯ | Ȑu'Gl1f=raKh&ĚfJ+dk:~YњN׵%3 g}c.&m+յ@4tEʀ-#ʣx[͕`hhe2Ze%\ڀ2衖2P+] {+x\{[7)\%^U pB,ݝdꏋ+6V-}CӒlaT1\vA|aKim~z}~?2?8b+] y@« i渚gf o@ՄWU ;>k`+GJɡW9e@Uv}5>e~C-L@a)q\\mi>l[YBY~D@BgVN h\R>9NqOcִA˶̠&]j}^,@Z `]k·xSVN]:ciԕm 5XWj%eIhh7VU+UVU*h)V2@p\xw])(ECShxH0i(CK%|;24!kW$d?kzteŬ 6VNR]lUH= XTzV6ˢjoԱ5 `Zo+U؛Է ڜ`UֶEj[D /"h3]%ZDUt{U\ VVY}U.밨|h2\*hAHkxm$\eL?d,߱$)-Cl4t5=n9h԰J^p!T+m2u񬃝s Vݰ+;ޑ"*U/h}JE\}€\FhJR|ߕJU# R)z$pe2\:m#*P'=K*!!ˣnim|~)#v:bC 6]_smJT9K X)ke`I9YkB*`Z@V6UiV9K+5Z]}uէ Е Wz%ٰ_+UÕ~"Ң)|4peW= Y:%Ҿ{,c fO3bI}^,QB6R L6_kzdkSj+fF@=Y,^ujo؝j[Bqj^Dִ@_FO`TF+U=*h,B+iI=\@ R4ڥXW=4ߓ!].AvN^;H(C ;iPTVi8u!'<$^* : U)kv`cDq\qP%X&YB[DggX"WOxXj4ֳ#\F|*pALl&=CqJy|JHU.M^;W_n5>`ѷʼngs Y穩թd^}Q UV6,ט+׬VoVk^cltUuq湖 JVrƫ>U+UjZF@heeGZZU\+ !؊m\>yoWxo ˸"*M`L)ZWLu?yy6_ TlsWyևFWzj{Mhu9UT7U65ZBc@<˶@G2X]WFHf~jVy.V;cE AK(lFb2Kh4R!d PY>+zmƗSo[7Y_SWIW*\_6 UarU2˜$Zi*Gm#|Sz6(,s\9ZDUSWY} *+J}S{-ZW*?@Jp/AO0l+\0d%AwF;zu@{$.Q*?gjX%f*WUǬs댃VYY7J1˄W,^|l%US Ygw `}XM\ \Nh W+ جY]/ Tѷ.>9F Z5K@+:{RPI7}4,7!TkAj. ~eJkW/=Z碁UM ۮ;m1X:Zex{c%Xms\,םa%Z?y`W9˕'2Z+燫J+ªoppEJXl,P$`gȪB asW+z>2blŷ۫}K߄Rc[^U}jғV<($/؛uGZ]gkmV׻ˣvV*X@ 0Zeu-5.p=WrEI dNe煐]^~E8D EڞI Y:UDf{myUP5}͵`hAad IH Xwcԕ T֕MW߲ T mwkU<*W\4ϵ\F+Wr-UpZÕ {AKр,^J!J,CvYZ~ϐU{| ui ƍUe꟏ՆX5{Ngz%g`Z7_eoMYa`xuϽau>{~:$WZ*r AVWڠw\9 H˧hL6k8%!Y,=2b^WnʻP,]U]X/M51eܕk#sVMlحm,AV\}c$`mcdqBU V VY,U4˕J_8 Z"䞢aوC/NtEpSW/kz}/MtyuRyif)Iu& ku-U7I (, GX5uϽqX V^JeQX V9*hV.tUӽ8qEiHFf f}{z]+,]5 uGJe.Jس}+>`$ڐ|'5X+a*u o91XT1X8,V*mz!QXT^*gr \ߕaע ґ)kQd,CͮZp$ok\ߎgJ8Ʈ.XPj;5\C[zU}&kZ2|ZhM3 뮍DfsMp҃nom iGaQ 3\oaIY/w\V啯 O\A"E4Ki 0Kw3 e5FY>΍}I2 )TV}>sE_#l cַ*++3P}LKI<ĺCê^I\iXW(,ªqVVY9 *fUVuU|8mEi Ryqu^ꪁxp/ \+P2dns=NHQshU/l[exo.X׊ |ZmsT]\+$}w0O4`GaY;|U;5 AZ.Epml(vY1'xd+RuWk&k2 $3Y`m-cԪW)I{vƫd_f,غWqUuHUy~! 9hztWEtH< ~|mt'6&|Hm%T kŸ#S,!uY|@UؤSVV$9Q@_x#^rjV:qw\ys\J`հV& m?<}M hELaUn%2y~)K?ԆΤsV]_sM(7uܕ5 `MllS~=ƒ`uMi$>M`!Wj1K\ A"zԋuGFw6շWU@Z^/vI8u}A+'lxL M&ꃪ)i' +hk^rմ1m*WAI6aNmru:IWR,$WBS>'zYqYZmubM9e n;X6I4E' XmYCc-Y(WߖE`h٭[ Ԗ[qv9awC_Q})?f٨8IGU%e2Ϊ{M8]}tXO3{,ScpÃMYTצ,-BNU " Rl>ĚO?pHx422E7:fn^Wz]fuN ku&LL \!$`zx ܽn4BBk># aD:aZW҄Mq~95?_*h+\V[̵Avªjz=RXcYސXA/WڵoAAܵ1H(}+~]>Cs/鄘j^ڑj SV.;N06+)]}釃jzez1ze " R!5=O#] 05cXϛQ`״ʦme˪n?^.+Ujڊm2s YJW">+?}WE{  [r<* 4R]OX/GM} PH?)65ͣ+VVmX58|a܊EG򸫢BAiX_0P:Xy%RoT?Q ;(c: {GW&g}pvOYk  4]'U;˯%0wnWy{j*hu:^ףvT]>YҕR;YRiR@>  lF)"(6]LUiZTm{+r6_]沚AAcBBBxoGfl=>2[}pgUZ `]"aQtGZѩjAAO{g۪; Z1j~F|_/4,@껳ʧoOTFAAO߲7}s%oFVT[}Jx$7%                                                                                                                                                                                                                         zqO{*B%tEXtdate:create2011-11-07T02:03:53+01:00h%tEXtdate:modify2011-11-07T02:03:53+01:00 IENDB`openscad-2013.01+dfsg.orig/icons/mask.png0000644000175000017500000000446711702450355017521 0ustar chrysnchrysnPNG  IHDRH?qgAMA asRGB cHRMz&u0`:pQ<tRNSv8bKGD#2 pHYs  "IDATxK8 RGQt4h:vc` gm)4b]"e'Hn7D"H$D"H$D"H$DҏzVGVϟx:<ĒGQ*b!V79XMU}d,I3,9K0oBY]b4[RQdM**Tj0[]c窰ةx{V3ê:&XSg[WgZ`'ZLXf>[z vq j_[\~L '`wxëz;+t{Y(x/hq=ߣe_$+f> V콞9HV콞.3co byh4'zK! 3ЊŁ`t@ZAV0 B Ft 0l w؂bR950T;L^i0c{ T;< 7 ̓yXl{jEW{՞3yPx55x6pm{jk&ڶNmk&ڶ5fjgzuQ;3 静;5 P*`BرN68vij0:АQփ̍HM ;s NesS&_!v];݆Vinly o0 :ϞwG/~Vj5; ?_ťglqgx@- :vdKnM{ ͳt?nc4.l ν;?{`׳Xl~4bf3:zK/rمɾxudͯ?Xu)V4aͥ7pqsKtrbsmV Kv*aNfTas2A؜Ku$lΪ:aSVSVX6vk~% a]Rl6,YDj'goWb}MdQ]'&bW7{gPOp6*-N_"\󰆇]xX*d.ӥX,˹Kwr,'^aOb>w$^^JXJv=˿_ecla L>gb;0VXq Ky~)v] b}.uboRlecRlS]3J]M[0&6 b/kB -w;[:62 w=g: `8ג+>;z|gmaamu'3_xUgWXg*l|K>ƒإp[Ú6K.k0lyjSBa0)TvnS<쭞 3ӻk5x64Xg}Ux⧷_ꯉ1[yVMLo uM`٦*$kŎYcn<6XbzBF@COCpm<> n#桯bwXa;(&)K;,b!I> +g鱐K:ltQ1`XaԸ5I).һl X {`bg C _X0Dk`vI,.~HCvoG~ٚ>O!~h>O!ϋ>4zI #׋>|{h0Y L;ƾW!D7Pp eA,}P+,TRX4K6`Ũu$,Q.&KQta&JptկvpԪD"H$D"H$D"H$D"bG%tEXtdate:create2011-11-07T02:03:53+01:00h%tEXtdate:modify2011-11-07T02:03:53+01:00 IENDB`openscad-2013.01+dfsg.orig/icons/prefs3DView.png0000644000175000017500000001166511516152336020726 0ustar chrysnchrysnPNG  IHDR@@iqsRGBbKGD pHYs  tIME&v5IDATx[y]W}ze<^b88FaIMq $.,M[@ T$Bm A?Җ P NB8! vxf}G]YBOJ^]4{u}`4`Ҡ`K͏݁w3`o% sk.BF\(нNu hCSF2vX+Jp 0L-( JRPDg/mӀ7 XÂ3fƍ;}뉤 K-%3Ep(ap7}yvk#omd`@p߼ .'CHK\![</DJ$ їqXiMƒRR@ htӽ6RFy=`M?:iyx[Hv?t X)kXZmM-_7nxe(ԀR aaev2l\62t6+,Y롍1Z{(`á&.ֽ am @,K ĢQt ~_A6/Q1B{?U>?dR 0w*T4s5q%KᬃYatz pjH*d,pN? W3(,`׼*3w@s]?`s?_X9r:X纠y5QИR# $hC= <`p! xS&t#p|;Az;Kuw] mw,`zHr e\ Z,-$? E Vu[ADo6W:2" C+^;gJR\>ozBx1>76su"`p \`CH &v BMz?9rRBg*34ÓX1h- J/7+ӤX~vE&4dO|@ XâeK +}>A0xLs8"~5Pl:AΥo>797+o<3iv绱|?]Ǧ{%ou1;?m<u=]M'N[XhxK8 6I#Jw۷aU$b,p5fHS'e<3K\f[ ;yRwݭyZk6XYa{莬kAեN2#(\ Bj b=7) IQ8:`,E_ZwIP6X--~ 2<8pʴ/ s1uGZ{n|V!R~W $뫅!S0H[\$_# i;/xBٹ,;`$ , 7ż|њ5[&A)j3߻[:*L--}۷ֱ3}kY*|W)M^G8q6>tԀW -H\fvK!`.5%c5hFa P*XQt];Rօ](d !9 ʒ7]sn4$E"%C$Ÿ<@([]pAhOk&aGj8!n{xB0y*> )(#HRӗ9A3/ túzL9DCc+$gAp >T#܂sBIW=+fcBE}pؚ)#1Gu!XI(j]Wt$m|抮cI^iTS2,P EW ~,!5X@cQpNѧݣ! 0iHc6qӎ%;(3xXU3-BPj*^,,B,#3Dq`En$̷փ(%R j1 ϶(4,K+('E'@-8x\޴"S*sL٢;dYw],CCj(P %2A0z PuK;7 !9dQGoxhb>ۢ`n!/s J,;-<,!2H#tbL iIDqk,p ND4w +;+l/kSYKqjZl?㹪Q0F0 f ȌEfr-8zcttݍMYʐՖ 1:pppD!!>HyBp֐(5uV&lk9g,)4m iY~),s1dIfђr iwnMB(ͣ"^cfQmhBف8"W}3p }! 1D@("`5Q~۳"I;Lm`O QE"e2KBafO-渳s&}nߞ 4QQbkynߗdR7]IQHRٓ/PF7BC+V 9W|^m"4Ooډл| $g<995N{@Ys#)ކk!2 (oOLzOc?p86>8q8\ry^@a'@(# 8*uW[J2ˊrWVB 9|wRC&n~۷x(Gd_PV$H_) '==e^Y( ˮY諶]mHNIQNxB)%^/);+`gӉ}؊AY(ɥ/9cOԩf Oē@isHAW -]=h}Y5AP/{Ϸ3Ѻei4O<8Ix}K'y L qq # KxtK^~@?mEoǑt}Da0_Gă=$5H2[\YJwzqufhO 0:EPa3,ՓSԭ7w)}8wXqλ̍Ԇ^?n=&V#ސ/8IA;c )/="! UĵUe%y ;ǶvUv6+?yJkj&, Aȁ",Q9T}~omO _Q_L߽:5Nh^%R@SҎÀ!sULEk[_޾ U)e띳L߿GZgZOv7<*6D0֣) AslW/{khRņ[ VȥQI/5@TJ:HB € C_9K o}ZYA@ ~v\lv]lj k5ЦuIENDB`openscad-2013.01+dfsg.orig/bison.pri0000644000175000017500000000277012076022153016562 0ustar chrysnchrysnwin32 { bison.name = Bison ${QMAKE_FILE_IN} bison.input = BISONSOURCES bison.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp bison.commands = bison -d -p ${QMAKE_FILE_BASE} -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp ${QMAKE_FILE_IN} bison.commands += && mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h bison.CONFIG += target_predeps bison.variable_out = GENERATED_SOURCES silent:bison.commands = @echo Bison ${QMAKE_FILE_IN} && $$bison.commands QMAKE_EXTRA_COMPILERS += bison bison_header.input = BISONSOURCES bison_header.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h bison_header.commands = bison -d -p ${QMAKE_FILE_BASE} -o ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.cpp ${QMAKE_FILE_IN} bison_header.commands += && mv ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.hpp ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}_yacc.h bison_header.CONFIG += target_predeps no_link silent:bison_header.commands = @echo Bison ${QMAKE_FILE_IN} && $$bison.commands QMAKE_EXTRA_COMPILERS += bison_header } unix:linux* { exists(/usr/bin/bison) { QMAKE_YACC = /usr/bin/bison } } freebsd* { # on some BSD, /usr/local/bin/bison is newer than # /usr/bin/bison, so try to prefer it. exists(/usr/local/bin/bison) { QMAKE_YACC = /usr/local/bin/bison } else { # look in $PATH QMAKE_YACC = bison } } netbsd* { exists(/usr/pkg/bin/bison) { QMAKE_YACC = /usr/pkg/bin/bison } else { # look in $PATH QMAKE_YACC = bison } } openscad-2013.01+dfsg.orig/RELEASE_NOTES0000644000175000017500000001613412076022153016706 0ustar chrysnchrysnOpenSCAD 2013.01 ================ Features: o Snappier GUI while performing CGAL computations (computations running in separate thread) o The size of the misc. caches can now be adjusted from Preferences o The limit for when to disable OpenCSG can now be adjusted from Preferences o Added Dot product operator: vec * vec o Added Matrix multiplication operator: vec * mat, mat * mat o Added search() function o Dependencies are now tracked - any changes in uses/included files will be detected and cause a recompile o The OPENSCADPATH environment variable is now implemented will have precedence when searching for libraries o .csg files can now be opened from the GUI o linear_extrude() will now assume that the first parameter means 'height' if it's a number Bugfixes: o use'ing an non-existing file sometimes crashed under Windows o Better font handling: Ensure a monospace font is chosen as default o Division by zero caused hang in some cases (e.g. sin(1/0)) o Larger minkowski operations sometimes caused a crash after a CGAL assert was thrown o Fixed crashes in shared_ptr.hpp (or similar places) due bugs in cache management and CSG normalization o scale() with a scale factor of zero could cause a crash o Fixed a number of issues related to use/include o Providing an unknown parameter on the cmd-line caused a crash o cmd-line overrides using -D now also work for USEd modules o Modifier characters can now be used in front of if statements o rotate() with a vector argument with less that 3 elements used uninitialized variables, ending up being non-deterministic. o .csg files will now have relative filenames whenever possible o Don't just ignore geometric nodes having zero volume/area - when doing difference/intersection, they tend to turn negative objects into positive ones. o Always use utf-8 file encoding, also under Windows o A lot of build script fixes o Some other crash bugs fixes Deprecations: o The old include syntax "" without the include keyword is no longer supported and will cause a syntax error. OpenSCAD 2011.12 ================ Features: o The MCAD library is now bundled with OpenSCAD o Added len() function. Takes one vector or string parameter and returns its length. o The index operator [] now works on strings o The version() function will return the OpenSCAD version as a vector, e.g. [2011, 09] o The version_num() function will return the OpenSCAD version as a number, e.g. 20110923 o hull() Now supports 3D objects o hull() with 2D object can now use for loops and boolean operations as children o New import() statement reads the correct file format based on the filename extension (.stl, .dxf and .off is supported) o The color() statement now supports an alpha parameter, e.g. color(c=[1,0,0], alpha=0.4) o The color() statement now supports specifying colors as strings, e.g. color("Red") o The color() statement now overrides colors specified further down in the tree o if()/else() and the ternary operator can now take any value type as parameter. false, 0, empty string and empty vector or illegal value type will evaluate as false, everything else as true. o Strings can now be lexographically compared using the <, <=, >, >= operators o Added PI constant. o Number literals in scientific notation are now accepted by the parser o Added import and export of the OFF file format o Now uses standard shortcuts for save, reload and quit on Linux and Windows. F2/F3 will still work but is deprecated. Bugfixes: o Complex CSG models sometimes took extremely long time to normalize before OpenCSG preview o square() crashed if any of the dimensions were zero o Flush Caches didn't flush cached USE'd modules o STL export should be a bit more robust o Dropping a file into the editor under Windows didn't work (double C:/C:/ problem) o On some platforms it was possible to insertion rich text in the editor, causing confusion. o Less crashes due to CGAL assertions o OpenCSG should now work on systems with OpenGL 1.x, given that the right extensions are available o include now searches librarydir o The $fs parameter yielded only half the number of segments it should have o surface(center=true) is now correctly centered in the XY plane Deprecations: o dxf_linear_extrude() and dxf_rotate_extrude() are now deprecated. Use linear_extrude() and rotate_extrude() instead. o The file, layer, origin and scale parameters to linear_extrude() and rotate_extrude() are now deprecated. Use an import() child instead. o import_dxf(), import_stl() and import_off() are now deprecated. Use import() instead. o When exporting geometry from the cmd-line, use the universal -o option. It will export to the correct file format based on the given suffix (dxf, stl, off). The -x and -s parameters are still working but deprecated. o F2 and F3 for Save and Reload is now deprecated OpenSCAD 2011.06 ================ o Added "Export as Image" menu. Bugfixes: o Cylinder tesselation broke existing models which are using cylinders for e.g. captured nut slots and are dependent on the orientation not changing. o DXF output couldn't be imported into e.g. AutoCAD and Solidworks after updating to using the AutoCAD 2000 (AC1015) format. Reverted to the old entity-only output, causing LWPOLYLINES to not exported allowed anymore. OpenSCAD 2011.04 ================ o Added hull() for convex hulls (2D object only) o minkowski() now supports 2D objects o Added functions: rands(), sign() o Now supports escaping of the following characters in strings: \n, \t, \r, \\, \" o Support nested includes o Improved parsing of numbers o DXF: output LWPOLYLINE instead of just LINE entities o Bugfixes: More robust DXF export, setting $fs/$fa to 0 caused a crash o Some bugs fixed, maybe some new bugs added OpenSCAD 2010.05 ================ o Added functions and statements - Added abs() function - Added exp(x), log(b, x), log(x) and ln(x) functions - Added minkowski() statement for 3d minkowski sums o Added 'include ' and 'use ' statements - Old implicit '' include statement is now obsolete o Some bugs fixed, maybe some new bugs added OpenSCAD 2010.02 ================ o Added functions and statements - Added sqrt() function - Added round(), ceil() and floor() functions - Added lookup() function for linear interpolation in value list - Added projection(cut = true/false) statement - Added child() statement for accessing child nodes of module instances - Added mirror() statement o Improved DXF import code (more entities and some bugs fixed) o Added feature for dumping animation as PNG files o Added a preferences dialog o Now using CGAL's delaunay tesselator o Now using eigen2 for linear algebra o Reorganisation of the source tree o Some bugs fixed, maybe some new bugs added OpenSCAD 2010.01 ================ o Added functions and statements - Added intersection_for() - Added str function - Added min and max function - Added color() statement o Added 2D Subsystem - New primitives: circle(), square() and polygon() - 2D->3D path: linear_extrude() and rotate_extrude() - Import of DXF to 2d subsystem: import_dxf() - Export of 2D data as DXF files o Some bugs fixed, maybe some new bugs added openscad-2013.01+dfsg.orig/flex.pri0000644000175000017500000000112312076022154016376 0ustar chrysnchrysnwin32 { flex.name = Flex ${QMAKE_FILE_IN} flex.input = FLEXSOURCES flex.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.lexer.cpp flex.commands = flex -P ${QMAKE_FILE_BASE} -o${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.lexer.cpp ${QMAKE_FILE_IN} flex.CONFIG += target_predeps flex.variable_out = GENERATED_SOURCES silent:flex.commands = @echo Lex ${QMAKE_FILE_IN} && $$flex.commands QMAKE_EXTRA_COMPILERS += flex } unix:linux* { exists(/usr/bin/flex) { QMAKE_LEX = /usr/bin/flex } } freebsd* { QMAKE_LEX = /usr/local/bin/flex } netbsd* { QMAKE_LEX = /usr/pkg/bin/flex } openscad-2013.01+dfsg.orig/Info.plist0000644000175000017500000000175211516152336016710 0ustar chrysnchrysn CFBundleIconFile @ICON@ CFBundlePackageType APPL CFBundleSignature ???? CFBundleExecutable OpenSCAD CFBundleIdentifier org.openscad.OpenSCAD CFBundleDocumentTypes CFBundleTypeExtensions scad CFBundleTypeMIMETypes text/plain CFBundleTypeName OpenSCAD Design CFBundleTypeRole Editor LSIsAppleDefaultForType NSAppleScriptEnabled OSAScriptingDefinition OpenSCAD.sdef openscad-2013.01+dfsg.orig/openscad_win32.rc0000644000175000017500000000145011516171107020074 0ustar chrysnchrysn# if defined(UNDER_CE) # include # else # include # endif VS_VERSION_INFO VERSIONINFO FILEVERSION 0,0,0,0 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG #else FILEFLAGS 0x0L #endif FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "0409" BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "OpenSCAD Executable\0" VALUE "FileVersion", "development build\0" VALUE "LegalCopyright", "Copyright (C) 2009-2011 Clifford Wolf and Marius Kintel\0" VALUE "OriginalFilename", "openscad.exe\0" VALUE "ProductName", "OpenSCAD\0" END END END /* End of Version info */ IDI_ICON1 ICON DISCARDABLE "icons/openscad.ico" openscad-2013.01+dfsg.orig/eigen.pri0000644000175000017500000000440612076022154016536 0ustar chrysnchrysn# Detect eigen3 + eigen2, then use this priority list to determine # which eigen to use: # # Priority # 0. EIGENDIR if set (also EIGEN2DIR for backwards compatability) # 1. OPENSCAD_LIBRARIES eigen3 # 2. OPENSCAD_LIBRARIES eigen2 # 3. system's standard include paths for eigen3 # 4. system's standard include paths for eigen2 eigen { # read environment variables OPENSCAD_LIBRARIES_DIR = $$(OPENSCAD_LIBRARIES) EIGEN2_DIR = $$(EIGEN2DIR) EIGEN_DIR = $$(EIGENDIR) CONFIG(mingw-cross-env) { EIGEN_INCLUDEPATH = mingw-cross-env/include/eigen2 } # Optionally specify location of Eigen3 using the # OPENSCAD_LIBRARIES env. variable !isEmpty(OPENSCAD_LIBRARIES_DIR) { isEmpty(EIGEN_INCLUDEPATH) { exists($$OPENSCAD_LIBRARIES_DIR/include/eigen3) { EIGEN_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen3 } } isEmpty(EIGEN_INCLUDEPATH) { exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) { EIGEN_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 } } } # Optionally specify location of Eigen using the # EIGENDIR env. variable (EIGEN2 for backwards compatability) !isEmpty(EIGEN2_DIR) { EIGEN_INCLUDEPATH = $$EIGEN2_DIR message("User set EIGEN location: $$EIGEN_INCLUDEPATH") } !isEmpty(EIGEN_DIR) { EIGEN_INCLUDEPATH = $$EIGEN_DIR message("User set EIGEN location: $$EIGEN_INCLUDEPATH") } isEmpty(EIGEN_INCLUDEPATH) { freebsd-g++: EIGEN_INCLUDEPATH = /usr/local/include/eigen3 netbsd*: EIGEN_INCLUDEPATH = /usr/pkg/include/eigen3 linux*|hurd*|unix: EIGEN_INCLUDEPATH = /usr/include/eigen3 macx: EIGEN_INCLUDEPATH = /opt/local/include/eigen3 !exists($$EIGEN_INCLUDEPATH) { freebsd-g++: EIGEN_INCLUDEPATH = /usr/local/include/eigen2 netbsd*: EIGEN_INCLUDEPATH = /usr/pkg/include/eigen2 linux*|hurd*|unix*: EIGEN_INCLUDEPATH = /usr/include/eigen2 macx: EIGEN_INCLUDEPATH = /opt/local/include/eigen2 } } # disable Eigen SIMD optimizations for platforms where it breaks compilation !macx { !freebsd-g++ { QMAKE_CXXFLAGS += -DEIGEN_DONT_ALIGN } } # EIGEN being under 'include/eigen[2-3]' needs special prepending QMAKE_INCDIR_QT = $$EIGEN_INCLUDEPATH $$QMAKE_INCDIR_QT # qmakespecs on netbsd prepend system includes, we need eigen first. netbsd* { QMAKE_CXXFLAGS = -I$$EIGEN_INCLUDEPATH $$QMAKE_CXXFLAGS } } # eigen openscad-2013.01+dfsg.orig/libraries/0000755000175000017500000000000012110740367016705 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/libraries/MCAD/0000755000175000017500000000000012110740367017411 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/libraries/MCAD/test_docs.py0000644000175000017500000000114711640737401021757 0ustar chrysnchrysnimport py import os.path dirpath = py.path.local("./") def pytest_generate_tests(metafunc): if "filename" in metafunc.funcargnames: for fpath in dirpath.visit('*.scad'): metafunc.addcall(id=fpath.basename, funcargs=dict(filename=fpath.basename)) for fpath in dirpath.visit('*.py'): name = fpath.basename if not (name.startswith('test_') or name.startswith('_')): metafunc.addcall(id=fpath.basename, funcargs=dict(filename=fpath.basename)) def test_README(filename): README = dirpath.join('README').read() assert filename in README openscad-2013.01+dfsg.orig/libraries/MCAD/constants.scad0000644000175000017500000000023711640737401022265 0ustar chrysnchrysn// MIT license TAU = 6.2831853071; //2*PI, see http://tauday.com/ PI = TAU/2; // translates a imperial measurement in inches to meters mm_per_inch = 25.4; openscad-2013.01+dfsg.orig/libraries/MCAD/multiply.scad0000644000175000017500000000126411712607402022126 0ustar chrysnchrysn/* * Multiplication along certain curves * * Copyright by Elmo Mäntynen, 2012. * Licenced under LGPL2 or later */ include use // TODO check that the axis parameter works as intended // Duplicate everything $no of times around an $axis, for $angle/360 rounds module spin(no, angle=360, axis=Z){ for (i = [1:no]){ rotate(normalized_axis(axis)*angle*no/i) union(){ for (i = [0 : $children-1]) child(i); } } } //Doesn't work currently module duplicate(axis=Z) spin(no=2, axis=axis) child(0); module linear_multiply(no, separation, axis=Z){ for (i = [0:no-1]){ translate(i*separation*axis) child(0); } } openscad-2013.01+dfsg.orig/libraries/MCAD/stepper.scad0000644000175000017500000002635411640737401021743 0ustar chrysnchrysn/* * A nema standard stepper motor module. * * Originally by Hans Häggström, 2010. * Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later */ include include // Demo, uncomment to show: //nema_demo(); module nema_demo(){ for (size = [NemaShort, NemaMedium, NemaLong]) { translate([-100,size*100,0]) motor(Nema34, size, dualAxis=true); translate([0,size*100,0]) motor(Nema23, size, dualAxis=true); translate([100,size*100,0]) motor(Nema17, size, dualAxis=true); translate([200,size*100,0]) motor(Nema14, size, dualAxis=true); translate([300,size*100,0]) motor(Nema11, size, dualAxis=true); translate([400,size*100,0]) motor(Nema08, size, dualAxis=true); } } // Parameters: NemaModel = 0; NemaLengthShort = 1; NemaLengthMedium = 2; NemaLengthLong = 3; NemaSideSize = 4; NemaDistanceBetweenMountingHoles = 5; NemaMountingHoleDiameter = 6; NemaMountingHoleDepth = 7; NemaMountingHoleLip = 8; NemaMountingHoleCutoutRadius = 9; NemaEdgeRoundingRadius = 10; NemaRoundExtrusionDiameter = 11; NemaRoundExtrusionHeight = 12; NemaAxleDiameter = 13; NemaFrontAxleLength = 14; NemaBackAxleLength = 15; NemaAxleFlatDepth = 16; NemaAxleFlatLengthFront = 17; NemaAxleFlatLengthBack = 18; NemaA = 1; NemaB = 2; NemaC = 3; NemaShort = NemaA; NemaMedium = NemaB; NemaLong = NemaC; // TODO: The small motors seem to be a bit too long, I picked the size specs from all over the place, is there some canonical reference? Nema08 = [ [NemaModel, 8], [NemaLengthShort, 33*mm], [NemaLengthMedium, 43*mm], [NemaLengthLong, 43*mm], [NemaSideSize, 20*mm], [NemaDistanceBetweenMountingHoles, 15.4*mm], [NemaMountingHoleDiameter, 2*mm], [NemaMountingHoleDepth, 1.75*mm], [NemaMountingHoleLip, -1*mm], [NemaMountingHoleCutoutRadius, 0*mm], [NemaEdgeRoundingRadius, 2*mm], [NemaRoundExtrusionDiameter, 16*mm], [NemaRoundExtrusionHeight, 1.5*mm], [NemaAxleDiameter, 4*mm], [NemaFrontAxleLength, 13.5*mm], [NemaBackAxleLength, 9.9*mm], [NemaAxleFlatDepth, -1*mm], [NemaAxleFlatLengthFront, 0*mm], [NemaAxleFlatLengthBack, 0*mm] ]; Nema11 = [ [NemaModel, 11], [NemaLengthShort, 32*mm], [NemaLengthMedium, 40*mm], [NemaLengthLong, 52*mm], [NemaSideSize, 28*mm], [NemaDistanceBetweenMountingHoles, 23*mm], [NemaMountingHoleDiameter, 2.5*mm], [NemaMountingHoleDepth, 2*mm], [NemaMountingHoleLip, -1*mm], [NemaMountingHoleCutoutRadius, 0*mm], [NemaEdgeRoundingRadius, 2.5*mm], [NemaRoundExtrusionDiameter, 22*mm], [NemaRoundExtrusionHeight, 1.8*mm], [NemaAxleDiameter, 5*mm], [NemaFrontAxleLength, 13.7*mm], [NemaBackAxleLength, 10*mm], [NemaAxleFlatDepth, 0.5*mm], [NemaAxleFlatLengthFront, 10*mm], [NemaAxleFlatLengthBack, 9*mm] ]; Nema14 = [ [NemaModel, 14], [NemaLengthShort, 26*mm], [NemaLengthMedium, 28*mm], [NemaLengthLong, 34*mm], [NemaSideSize, 35.3*mm], [NemaDistanceBetweenMountingHoles, 26*mm], [NemaMountingHoleDiameter, 3*mm], [NemaMountingHoleDepth, 3.5*mm], [NemaMountingHoleLip, -1*mm], [NemaMountingHoleCutoutRadius, 0*mm], [NemaEdgeRoundingRadius, 5*mm], [NemaRoundExtrusionDiameter, 22*mm], [NemaRoundExtrusionHeight, 1.9*mm], [NemaAxleDiameter, 5*mm], [NemaFrontAxleLength, 18*mm], [NemaBackAxleLength, 10*mm], [NemaAxleFlatDepth, 0.5*mm], [NemaAxleFlatLengthFront, 15*mm], [NemaAxleFlatLengthBack, 9*mm] ]; Nema17 = [ [NemaModel, 17], [NemaLengthShort, 33*mm], [NemaLengthMedium, 39*mm], [NemaLengthLong, 47*mm], [NemaSideSize, 42.20*mm], [NemaDistanceBetweenMountingHoles, 31.04*mm], [NemaMountingHoleDiameter, 4*mm], [NemaMountingHoleDepth, 4.5*mm], [NemaMountingHoleLip, -1*mm], [NemaMountingHoleCutoutRadius, 0*mm], [NemaEdgeRoundingRadius, 7*mm], [NemaRoundExtrusionDiameter, 22*mm], [NemaRoundExtrusionHeight, 1.9*mm], [NemaAxleDiameter, 5*mm], [NemaFrontAxleLength, 18*mm], [NemaBackAxleLength, 15*mm], [NemaAxleFlatDepth, 0.5*mm], [NemaAxleFlatLengthFront, 15*mm], [NemaAxleFlatLengthBack, 14*mm] ]; Nema23 = [ [NemaModel, 23], [NemaLengthShort, 39*mm], [NemaLengthMedium, 54*mm], [NemaLengthLong, 76*mm], [NemaSideSize, 56.4*mm], [NemaDistanceBetweenMountingHoles, 47.14*mm], [NemaMountingHoleDiameter, 4.75*mm], [NemaMountingHoleDepth, 5*mm], [NemaMountingHoleLip, 4.95*mm], [NemaMountingHoleCutoutRadius, 9.5*mm], [NemaEdgeRoundingRadius, 2.5*mm], [NemaRoundExtrusionDiameter, 38.10*mm], [NemaRoundExtrusionHeight, 1.52*mm], [NemaAxleDiameter, 6.36*mm], [NemaFrontAxleLength, 18.80*mm], [NemaBackAxleLength, 15.60*mm], [NemaAxleFlatDepth, 0.5*mm], [NemaAxleFlatLengthFront, 16*mm], [NemaAxleFlatLengthBack, 14*mm] ]; Nema34 = [ [NemaModel, 34], [NemaLengthShort, 66*mm], [NemaLengthMedium, 96*mm], [NemaLengthLong, 126*mm], [NemaSideSize, 85*mm], [NemaDistanceBetweenMountingHoles, 69.58*mm], [NemaMountingHoleDiameter, 6.5*mm], [NemaMountingHoleDepth, 5.5*mm], [NemaMountingHoleLip, 5*mm], [NemaMountingHoleCutoutRadius, 17*mm], [NemaEdgeRoundingRadius, 3*mm], [NemaRoundExtrusionDiameter, 73.03*mm], [NemaRoundExtrusionHeight, 1.9*mm], [NemaAxleDiameter, 0.5*inch], [NemaFrontAxleLength, 37*mm], [NemaBackAxleLength, 34*mm], [NemaAxleFlatDepth, 1.20*mm], [NemaAxleFlatLengthFront, 25*mm], [NemaAxleFlatLengthBack, 25*mm] ]; function motorWidth(model=Nema23) = lookup(NemaSideSize, model); function motorLength(model=Nema23, size=NemaMedium) = lookup(size, model); module motor(model=Nema23, size=NemaMedium, dualAxis=false, pos=[0,0,0], orientation = [0,0,0]) { length = lookup(size, model); echo(str(" Motor: Nema",lookup(NemaModel, model),", length= ",length,"mm, dual axis=",dualAxis)); stepperBlack = BlackPaint; stepperAluminum = Aluminum; side = lookup(NemaSideSize, model); cutR = lookup(NemaMountingHoleCutoutRadius, model); lip = lookup(NemaMountingHoleLip, model); holeDepth = lookup(NemaMountingHoleDepth, model); axleLengthFront = lookup(NemaFrontAxleLength, model); axleLengthBack = lookup(NemaBackAxleLength, model); axleRadius = lookup(NemaAxleDiameter, model) * 0.5; extrSize = lookup(NemaRoundExtrusionHeight, model); extrRad = lookup(NemaRoundExtrusionDiameter, model) * 0.5; holeDist = lookup(NemaDistanceBetweenMountingHoles, model) * 0.5; holeRadius = lookup(NemaMountingHoleDiameter, model) * 0.5; mid = side / 2; roundR = lookup(NemaEdgeRoundingRadius, model); axleFlatDepth = lookup(NemaAxleFlatDepth, model); axleFlatLengthFront = lookup(NemaAxleFlatLengthFront, model); axleFlatLengthBack = lookup(NemaAxleFlatLengthBack, model); color(stepperBlack){ translate(pos) rotate(orientation) { translate([-mid, -mid, 0]) difference() { cube(size=[side, side, length + extrSize]); // Corner cutouts if (lip > 0) { translate([0, 0, lip]) cylinder(h=length, r=cutR); translate([side, 0, lip]) cylinder(h=length, r=cutR); translate([0, side, lip]) cylinder(h=length, r=cutR); translate([side, side, lip]) cylinder(h=length, r=cutR); } // Rounded edges if (roundR > 0) { translate([mid+mid, mid+mid, length/2]) rotate([0,0,45]) cube(size=[roundR, roundR*2, 4+length + extrSize+2], center=true); translate([mid-(mid), mid+(mid), length/2]) rotate([0,0,45]) cube(size=[roundR*2, roundR, 4+length + extrSize+2], center=true); translate([mid+mid, mid-mid, length/2]) rotate([0,0,45]) cube(size=[roundR*2, roundR, 4+length + extrSize+2], center=true); translate([mid-mid, mid-mid, length/2]) rotate([0,0,45]) cube(size=[roundR, roundR*2, 4+length + extrSize+2], center=true); } // Bolt holes color(stepperAluminum, $fs=holeRadius/8) { translate([mid+holeDist,mid+holeDist,-1*mm]) cylinder(h=holeDepth+1*mm, r=holeRadius); translate([mid-holeDist,mid+holeDist,-1*mm]) cylinder(h=holeDepth+1*mm, r=holeRadius); translate([mid+holeDist,mid-holeDist,-1*mm]) cylinder(h=holeDepth+1*mm, r=holeRadius); translate([mid-holeDist,mid-holeDist,-1*mm]) cylinder(h=holeDepth+1*mm, r=holeRadius); } // Grinded flat color(stepperAluminum) { difference() { translate([-1*mm, -1*mm, -extrSize]) cube(size=[side+2*mm, side+2*mm, extrSize + 1*mm]); translate([side/2, side/2, -extrSize - 1*mm]) cylinder(h=4*mm, r=extrRad); } } } // Axle translate([0, 0, extrSize-axleLengthFront]) color(stepperAluminum) difference() { cylinder(h=axleLengthFront + 1*mm , r=axleRadius, $fs=axleRadius/10); // Flat if (axleFlatDepth > 0) translate([axleRadius - axleFlatDepth,-5*mm,-extrSize*mm -(axleLengthFront-axleFlatLengthFront)] ) cube(size=[5*mm, 10*mm, axleLengthFront]); } if (dualAxis) { translate([0, 0, length+extrSize]) color(stepperAluminum) difference() { cylinder(h=axleLengthBack + 0*mm, r=axleRadius, $fs=axleRadius/10); // Flat if (axleFlatDepth > 0) translate([axleRadius - axleFlatDepth,-5*mm,(axleLengthBack-axleFlatLengthBack)]) cube(size=[5*mm, 10*mm, axleLengthBack]); } } } } } module roundedBox(size, edgeRadius) { cube(size); } openscad-2013.01+dfsg.orig/libraries/MCAD/curves.scad0000644000175000017500000000073211640737401021560 0ustar chrysnchrysn// Parametric curves, to be used as paths // Licensed under the MIT license. // © 2010 by Elmo Mäntynen use include /* A circular helix of radius a and pitch 2πb is described by the following parametrisation: x(t) = a*cos(t), y(t) = a*sin(t), z(t) = b*t */ function b(pitch) = pitch/(TAU); function t(pitch, z) = z/b(pitch); function helix_curve(pitch, radius, z) = [radius*cos(deg(t(pitch, z))), radius*sin(deg(t(pitch, z))), z]; openscad-2013.01+dfsg.orig/libraries/MCAD/bearing.scad0000644000175000017500000000474711640737401021672 0ustar chrysnchrysn/* * Bearing model. * * Originally by Hans Häggström, 2010. * Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later */ include include // Example, uncomment to view //test_bearing(); //test_bearing_hole(); module test_bearing(){ bearing(); bearing(pos=[5*cm, 0,0], angle=[90,0,0]); bearing(pos=[-2.5*cm, 0,0], model=688); } module test_bearing_hole(){ difference(){ translate([0, 0, 3.5]) cube(size=[30, 30, 7-10*epsilon], center=true); bearing(outline=true); } } BEARING_INNER_DIAMETER = 0; BEARING_OUTER_DIAMETER = 1; BEARING_WIDTH = 2; // Common bearing names SkateBearing = 608; // Bearing dimensions // model == XXX ? [inner dia, outer dia, width]: function bearingDimensions(model) = model == 608 ? [8*mm, 22*mm, 7*mm]: model == 623 ? [3*mm, 10*mm, 4*mm]: model == 624 ? [4*mm, 13*mm, 5*mm]: model == 627 ? [7*mm, 22*mm, 7*mm]: model == 688 ? [8*mm, 16*mm, 4*mm]: model == 698 ? [8*mm, 19*mm, 6*mm]: [8*mm, 22*mm, 7*mm]; // this is the default function bearingWidth(model) = bearingDimensions(model)[BEARING_WIDTH]; function bearingInnerDiameter(model) = bearingDimensions(model)[BEARING_INNER_DIAMETER]; function bearingOuterDiameter(model) = bearingDimensions(model)[BEARING_OUTER_DIAMETER]; module bearing(pos=[0,0,0], angle=[0,0,0], model=SkateBearing, outline=false, material=Steel, sideMaterial=Brass) { // Common bearing names model = model == "Skate" ? 608 : model; w = bearingWidth(model); innerD = outline==false ? bearingInnerDiameter(model) : 0; outerD = bearingOuterDiameter(model); innerRim = innerD + (outerD - innerD) * 0.2; outerRim = outerD - (outerD - innerD) * 0.2; midSink = w * 0.1; translate(pos) rotate(angle) union() { color(material) difference() { // Basic ring Ring([0,0,0], outerD, innerD, w, material, material); if (outline==false) { // Side shields Ring([0,0,-epsilon], outerRim, innerRim, epsilon+midSink, sideMaterial, material); Ring([0,0,w-midSink], outerRim, innerRim, epsilon+midSink, sideMaterial, material); } } } module Ring(pos, od, id, h, material, holeMaterial) { color(material) { translate(pos) difference() { cylinder(r=od/2, h=h, $fs = 0.01); color(holeMaterial) translate([0,0,-10*epsilon]) cylinder(r=id/2, h=h+20*epsilon, $fs = 0.01); } } } } openscad-2013.01+dfsg.orig/libraries/MCAD/hardware.scad0000644000175000017500000001021711640737401022045 0ustar chrysnchrysn// License: LGPL 2.1 rodsize = 6; //threaded/smooth rod diameter in mm xaxis = 182.5; //width of base in mm yaxis = 266.5; //length of base in mm screwsize = 3; //bearing bore/screw diameter in mm bearingsize = 10; //outer diameter of bearings in mm bearingwidth = 4; //width of bearings in mm rodpitch = rodsize / 6; rodnutsize = 0.8 * rodsize; rodnutdiameter = 1.9 * rodsize; rodwashersize = 0.2 * rodsize; rodwasherdiameter = 2 * rodsize; screwpitch = screwsize / 6; nutsize = 0.8 * screwsize; nutdiameter = 1.9 * screwsize; washersize = 0.2 * screwsize; washerdiameter = 2 * screwsize; partthick = 2 * rodsize; vertexrodspace = 2 * rodsize; c = [0.3, 0.3, 0.3]; rodendoffset = rodnutsize + rodwashersize * 2 + partthick / 2; vertexoffset = vertexrodspace + rodendoffset; renderrodthreads = false; renderscrewthreads = false; fn = 36; module rod(length, threaded) if (threaded && renderrodthreads) { linear_extrude(height = length, center = true, convexity = 10, twist = -360 * length / rodpitch, $fn = fn) translate([rodsize * 0.1 / 2, 0, 0]) circle(r = rodsize * 0.9 / 2, $fn = fn); } else cylinder(h = length, r = rodsize / 2, center = true, $fn = fn); module screw(length, nutpos, washer, bearingpos = -1) union(){ translate([0, 0, -length / 2]) if (renderscrewthreads) { linear_extrude(height = length, center = true, convexity = 10, twist = -360 * length / screwpitch, $fn = fn) translate([screwsize * 0.1 / 2, 0, 0]) circle(r = screwsize * 0.9 / 2, $fn = fn); } else cylinder(h = length, r = screwsize / 2, center = true, $fn = fn); render() difference() { translate([0, 0, screwsize / 2]) cylinder(h = screwsize, r = screwsize, center = true, $fn = fn); translate([0, 0, screwsize]) cylinder(h = screwsize, r = screwsize / 2, center = true, $fn = 6); } if (washer > 0 && nutpos > 0) { washer(nutpos); nut(nutpos + washersize); } else if (nutpos > 0) nut(nutpos); if (bearingpos >= 0) bearing(bearingpos); } module bearing(position) render() translate([0, 0, -position - bearingwidth / 2]) union() { difference() { cylinder(h = bearingwidth, r = bearingsize / 2, center = true, $fn = fn); cylinder(h = bearingwidth * 2, r = bearingsize / 2 - 1, center = true, $fn = fn); } difference() { cylinder(h = bearingwidth - 0.5, r = bearingsize / 2 - 0.5, center = true, $fn = fn); cylinder(h = bearingwidth * 2, r = screwsize / 2 + 0.5, center = true, $fn = fn); } difference() { cylinder(h = bearingwidth, r = screwsize / 2 + 1, center = true, $fn = fn); cylinder(h = bearingwidth + 0.1, r = screwsize / 2, center = true, $fn = fn); } } module nut(position, washer) render() translate([0, 0, -position - nutsize / 2]) { intersection() { scale([1, 1, 0.5]) sphere(r = 1.05 * screwsize, center = true); difference() { cylinder (h = nutsize, r = nutdiameter / 2, center = true, $fn = 6); cylinder(r = screwsize / 2, h = nutsize + 0.1, center = true, $fn = fn); } } if (washer > 0) washer(0); } module washer(position) render() translate ([0, 0, -position - washersize / 2]) difference() { cylinder(r = washerdiameter / 2, h = washersize, center = true, $fn = fn); cylinder(r = screwsize / 2, h = washersize + 0.1, center = true, $fn = fn); } module rodnut(position, washer) render() translate([0, 0, position]) { intersection() { scale([1, 1, 0.5]) sphere(r = 1.05 * rodsize, center = true); difference() { cylinder (h = rodnutsize, r = rodnutdiameter / 2, center = true, $fn = 6); rod(rodnutsize + 0.1); } } if (washer == 1 || washer == 4) rodwasher(((position > 0) ? -1 : 1) * (rodnutsize + rodwashersize) / 2); if (washer == 2 || washer == 4) rodwasher(((position > 0) ? 1 : -1) * (rodnutsize + rodwashersize) / 2); } module rodwasher(position) render() translate ([0, 0, position]) difference() { cylinder(r = rodwasherdiameter / 2, h = rodwashersize, center = true, $fn = fn); rod(rodwashersize + 0.1); } rod(20); translate([rodsize * 2.5, 0, 0]) rod(20, true); translate([rodsize * 5, 0, 0]) screw(10, true); translate([rodsize * 7.5, 0, 0]) bearing(); translate([rodsize * 10, 0, 0]) rodnut(); translate([rodsize * 12.5, 0, 0]) rodwasher(); translate([rodsize * 15, 0, 0]) nut(); translate([rodsize * 17.5, 0, 0]) washer();openscad-2013.01+dfsg.orig/libraries/MCAD/polyholes.scad0000644000175000017500000000133412044251002022251 0ustar chrysnchrysn// Copyright 2011 Nophead (of RepRap fame) // This file is licensed under the terms of Creative Commons Attribution 3.0 Unported. // Using this holes should come out approximately right when printed module polyhole(h, d) { n = max(round(2 * d),3); rotate([0,0,180]) cylinder(h = h, r = (d / 2) / cos (180 / n), $fn = n); } module test_polyhole(){ difference() { cube(size = [100,27,3]); union() { for(i = [1:10]) { translate([(i * i + i)/2 + 3 * i , 8,-1]) polyhole(h = 5, d = i); assign(d = i + 0.5) translate([(d * d + d)/2 + 3 * d, 19,-1]) polyhole(h = 5, d = d); } } } } openscad-2013.01+dfsg.orig/libraries/MCAD/gears.scad0000644000175000017500000001156711640737401021362 0ustar chrysnchrysn// Copyright 2010 D1plo1d // LGPL 2.1 //test_involute_curve(); //test_gears(); //demo_3d_gears(); // Geometry Sources: // http://www.cartertools.com/involute.html // gears.py (inkscape extension: /usr/share/inkscape/extensions/gears.py) // Usage: // Diametral pitch: Number of teeth per unit length. // Circular pitch: Length of the arc from one tooth to the next // Clearance: Radial distance between top of tooth on one gear to bottom of gap on another. module gear(number_of_teeth, circular_pitch=false, diametral_pitch=false, pressure_angle=20, clearance = 0) { if (circular_pitch==false && diametral_pitch==false) echo("MCAD ERROR: gear module needs either a diametral_pitch or circular_pitch"); //Convert diametrial pitch to our native circular pitch circular_pitch = (circular_pitch!=false?circular_pitch:180/diametral_pitch); // Pitch diameter: Diameter of pitch circle. pitch_diameter = number_of_teeth * circular_pitch / 180; pitch_radius = pitch_diameter/2; // Base Circle base_diameter = pitch_diameter*cos(pressure_angle); base_radius = base_diameter/2; // Diametrial pitch: Number of teeth per unit length. pitch_diametrial = number_of_teeth / pitch_diameter; // Addendum: Radial distance from pitch circle to outside circle. addendum = 1/pitch_diametrial; //Outer Circle outer_radius = pitch_radius+addendum; outer_diameter = outer_radius*2; // Dedendum: Radial distance from pitch circle to root diameter dedendum = addendum + clearance; // Root diameter: Diameter of bottom of tooth spaces. root_radius = pitch_radius-dedendum; root_diameter = root_radius * 2; half_thick_angle = 360 / (4 * number_of_teeth); union() { rotate(half_thick_angle) circle($fn=number_of_teeth*2, r=root_radius*1.001); for (i= [1:number_of_teeth]) //for (i = [0]) { rotate([0,0,i*360/number_of_teeth]) { involute_gear_tooth( pitch_radius = pitch_radius, root_radius = root_radius, base_radius = base_radius, outer_radius = outer_radius, half_thick_angle = half_thick_angle); } } } } module involute_gear_tooth( pitch_radius, root_radius, base_radius, outer_radius, half_thick_angle ) { pitch_to_base_angle = involute_intersect_angle( base_radius, pitch_radius ); outer_to_base_angle = involute_intersect_angle( base_radius, outer_radius ); base1 = 0 - pitch_to_base_angle - half_thick_angle; pitch1 = 0 - half_thick_angle; outer1 = outer_to_base_angle - pitch_to_base_angle - half_thick_angle; b1 = polar_to_cartesian([ base1, base_radius ]); p1 = polar_to_cartesian([ pitch1, pitch_radius ]); o1 = polar_to_cartesian([ outer1, outer_radius ]); b2 = polar_to_cartesian([ -base1, base_radius ]); p2 = polar_to_cartesian([ -pitch1, pitch_radius ]); o2 = polar_to_cartesian([ -outer1, outer_radius ]); // ( root_radius > base_radius variables ) pitch_to_root_angle = pitch_to_base_angle - involute_intersect_angle(base_radius, root_radius ); root1 = pitch1 - pitch_to_root_angle; root2 = -pitch1 + pitch_to_root_angle; r1_t = polar_to_cartesian([ root1, root_radius ]); r2_t = polar_to_cartesian([ -root1, root_radius ]); // ( else ) r1_f = polar_to_cartesian([ base1, root_radius ]); r2_f = polar_to_cartesian([ -base1, root_radius ]); if (root_radius > base_radius) { //echo("true"); polygon( points = [ r1_t,p1,o1,o2,p2,r2_t ], convexity = 3); } else { polygon( points = [ r1_f, b1,p1,o1,o2,p2,b2,r2_f ], convexity = 3); } } // Mathematical Functions //=============== // Finds the angle of the involute about the base radius at the given distance (radius) from it's center. //source: http://www.mathhelpforum.com/math-help/geometry/136011-circle-involute-solving-y-any-given-x.html function involute_intersect_angle(base_radius, radius) = sqrt( pow(radius/base_radius,2) - 1); // Polar coord [angle, radius] to cartesian coord [x,y] function polar_to_cartesian(polar) = [ polar[1]*cos(polar[0]), polar[1]*sin(polar[0]) ]; // Test Cases //=============== module test_gears() { gear(number_of_teeth=51,circular_pitch=200); translate([0, 50])gear(number_of_teeth=17,circular_pitch=200); translate([-50,0]) gear(number_of_teeth=17,diametral_pitch=1); } module demo_3d_gears() { //double helical gear // (helics don't line up perfectly - for display purposes only ;) translate([50,0]) { linear_extrude(height = 10, center = true, convexity = 10, twist = -45) gear(number_of_teeth=17,diametral_pitch=1); translate([0,0,10]) linear_extrude(height = 10, center = true, convexity = 10, twist = 45) gear(number_of_teeth=17,diametral_pitch=1); } //spur gear translate([0,-50]) linear_extrude(height = 10, center = true, convexity = 10, twist = 0) gear(number_of_teeth=17,diametral_pitch=1); } module test_involute_curve() { for (i=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]) { translate(polar_to_cartesian([involute_intersect_angle( 0.1,i) , i ])) circle($fn=15, r=0.5); } } openscad-2013.01+dfsg.orig/libraries/MCAD/get_submodules.py0000755000175000017500000000010711640737401023007 0ustar chrysnchrysn#!/usr/bin/python import os os.system("git submodule update --init") openscad-2013.01+dfsg.orig/libraries/MCAD/shapes.scad0000644000175000017500000001033111640737401021530 0ustar chrysnchrysn/* * OpenSCAD Shapes Library (www.openscad.org) * Copyright (C) 2009 Catarina Mota * Copyright (C) 2010 Elmo Mäntynen * * License: LGPL 2.1 or later */ // 2D Shapes //ngon(sides, radius, center=false); // 3D Shapes //box(width, height, depth); //roundedBox(width, height, depth, factor); //cone(height, radius); //ellipticalCylinder(width, height, depth); //ellipsoid(width, height); //tube(height, radius, wall, center = false); //tube2(height, ID, OD, center = false); //ovalTube(width, height, depth, wall, center = false); //hexagon(height, depth); //octagon(height, depth); //dodecagon(height, depth); //hexagram(height, depth); //rightTriangle(adjacent, opposite, depth); //equiTriangle(side, depth); //12ptStar(height, depth); //---------------------- // size is a vector [w, h, d] module box(width, height, depth) { cube([width, height, depth], true); } // size is a vector [w, h, d] module roundedBox(width, height, depth, radius) { size=[width, height, depth]; cube(size - [2*radius,0,0], true); cube(size - [0,2*radius,0], true); for (x = [radius-size[0]/2, -radius+size[0]/2], y = [radius-size[1]/2, -radius+size[1]/2]) { translate([x,y,0]) cylinder(r=radius, h=size[2], center=true); } } module cone(height, radius, center = false) { cylinder(height, radius, 0, center); } module ellipticalCylinder(w,h, height, center = false) { scale([1, h/w, 1]) cylinder(h=height, r=w, center=center); } module ellipsoid(w, h, center = false) { scale([1, h/w, 1]) sphere(r=w/2, center=center); } // wall is wall thickness module tube(height, radius, wall, center = false) { difference() { cylinder(h=height, r=radius, center=center); cylinder(h=height, r=radius-wall, center=center); } } // wall is wall thickness module tube2(height, ID, OD, center = false) { difference() { cylinder(h=height, r=OD/2, center=center); cylinder(h=height, r=ID/2, center=center); } } // wall is wall thickness module ovalTube(height, rx, ry, wall, center = false) { difference() { scale([1, ry/rx, 1]) cylinder(h=height, r=rx, center=center); scale([(rx-wall)/rx, (ry-wall)/rx, 1]) cylinder(h=height, r=rx, center=center); } } // The orientation might change with the implementation of circle... module ngon(sides, radius, center=false){ rotate([0, 0, 360/sides/2]) circle(r=radius, $fn=sides, center=center); } // size is the XY plane size, height in Z module hexagon(size, height) { boxWidth = size/1.75; for (r = [-60, 0, 60]) rotate([0,0,r]) cube([boxWidth, size, height], true); } // size is the XY plane size, height in Z module octagon(size, height) { intersection() { cube([size, size, height], true); rotate([0,0,45]) cube([size, size, height], true); } } // size is the XY plane size, height in Z module dodecagon(size, height) { intersection() { hexagon(size, height); rotate([0,0,90]) hexagon(size, height); } } // size is the XY plane size, height in Z module hexagram(size, height) { boxWidth=size/1.75; for (v = [[0,1],[0,-1],[1,-1]]) { intersection() { rotate([0,0,60*v[0]]) cube([size, boxWidth, height], true); rotate([0,0,60*v[1]]) cube([size, boxWidth, height], true); } } } module rightTriangle(adjacent, opposite, height) { difference() { translate([-adjacent/2,opposite/2,0]) cube([adjacent, opposite, height], true); translate([-adjacent,0,0]) { rotate([0,0,atan(opposite/adjacent)]) dislocateBox(adjacent*2, opposite, height+2); } } } module equiTriangle(side, height) { difference() { translate([-side/2,side/2,0]) cube([side, side, height], true); rotate([0,0,30]) dislocateBox(side*2, side, height); translate([-side,0,0]) { rotate([0,0,60]) dislocateBox(side*2, side, height); } } } module 12ptStar(size, height) { starNum = 3; starAngle = 360/starNum; for (s = [1:starNum]) { rotate([0, 0, s*starAngle]) cube([size, size, height], true); } } //----------------------- //MOVES THE ROTATION AXIS OF A BOX FROM ITS CENTER TO THE BOTTOM LEFT CORNER module dislocateBox(w, h, d) { translate([0,0,-d/2]) cube([w,h,d]); } //----------------------- // Tests //module test2D_ellipse(){ellipse(10, 5);} module test_ellipsoid(){ellipsoid(10, 5);} //module test2D_egg_outline(){egg_outline();} openscad-2013.01+dfsg.orig/libraries/MCAD/screw.scad0000644000175000017500000000322111640737401021370 0ustar chrysnchrysn// Parametric screw-like things (ball screws, augers) // License: GNU LGPL 2.1 or later. // © 2010 by Elmo Mäntynen include /* common screw parameter length pitch = length/rotations: the distance between the turns of the thread outside_diameter inner_diameter: thickness of the shaft */ //Uncomment to see examples //test_auger(); //test_ball_groove(); //test_ball_groove2(); //test_ball_screw(); module helix(pitch, length, slices=500){ rotations = length/pitch; linear_extrude(height=length, center=false, convexity=10, twist=360*rotations, slices=slices, $fn=100) child(0); } module auger(pitch, length, outside_diameter, inner_diameter) { union(){ helix(pitch, length) polygon(points=[[10,10],[100,1],[100,-1],[10,-10]], paths=[[0,1,2,3]]); cylinder(h=length, r=20); } } module test_auger(){translate([300, 0, 0]) auger(100, 300);} module ball_groove(pitch, length, diameter, ball_radius=10) { helix(pitch, length, slices=100) translate([diameter, 0, 0]) circle(r = ball_radius); } module test_ball_groove(){ translate([0, 300, 0]) ball_groove(100, 300, 10);} module ball_groove2(pitch, length, diameter, ball_radius, slices=200){ rotations = length/pitch; radius=diameter/2; offset = length/slices; union(){ for (i = [0:slices]) { assign (z = i*offset){ translate(helix_curve(pitch, radius, z)) sphere(ball_radius, $fa=5, $fs=1); } } } } module test_ball_groove2(){translate([0, 0, 0]) ball_groove2(100, 300, 100, 10);} module ball_screw(pitch, length, bearing_radius=2) { } module test_ball_screw(){} openscad-2013.01+dfsg.orig/libraries/MCAD/README.markdown0000644000175000017500000001004211663544207022116 0ustar chrysnchrysnOpenSCAD MCAD Library [![](http://stillmaintained.com/elmom/MCAD.png)](http://stillmaintained.com/elmom/MCAD) ===================== This library contains components commonly used in designing and moching up mechanical designs. It is currently unfinished and you can expect some API changes, however many things are already working. This library is licensed under the LGPL 2.1 See http://creativecommons.org/licenses/LGPL/2.1/ or the included file, lgpl-2.1.txt. ## Usage ## You can import these files in your scripts with `use `, but some files include useful constants which will be available with `include `, which should be safe to use on all included files (ie. no top level code should create geometry). (There is a bug/feature that prevents including constants from files that "include" other files - see the openscad mailing list archives for more details. Since the maintainers aren't very responsive, may have to work around this somehow) If you host your project in git, you can do `git submodule add URL PATH` in your repo to import this library as a git submodule for easy usage. Then you need to do a `git submodule update --init` after cloning. When you want to update the submodule, do `cd PATH; git checkout master; git pull`. See `git help submodule` for more info. "./get_submodules.py" is shortcut that initializes and updates submodules. Currently Provided Tools: * regular_shapes.scad - regular polygons, ie. 2D - regular polyhedrons, ie. 3D * involute_gears.scad (http://www.thingiverse.com/thing:3575): - gear() - bevel_gear() - bevel_gear_pair() * gears.scad (Old version): - gear(number_of_teeth, circular_pitch OR diametrial_pitch, pressure_angle OPTIONAL, clearance OPTIONAL) * motors.scad: - stepper_motor_mount(nema_standard, slide_distance OPTIONAL, mochup OPTIONAL) Other tools (alpha and beta quality): * nuts_and_bolts.scad: for creating metric and imperial bolt/nut holes * bearing.scad: standard/custom bearings * screw.scad: screws and augers * materials.scad: color definitions for different materials * stepper.scad: NEMA standard stepper outlines * servos.scad: servo outlines * boxes.scad: box with rounded corners * triangles.scad: simple triangles * 3d_triangle.scad: more advanced triangles Very generally useful functions and constants: * math.scad: general math functions * constants.scad: mathematical constants * curves.scad: mathematical functions defining curves * units.scad: easy metric units * utilities.scad: geometric funtions and misc. useful stuff * teardrop.scad (http://www.thingiverse.com/thing:3457): parametric teardrop module * shapes.scad: DEPRECATED simple shapes by Catarina Mota * polyholes.scad: holes that should come out well when printed External utils that generate and and process openscad code: * openscad_testing.py: testing code, see below * openscad_utils.py: code for scraping function names etc. * SolidPython: An external Python library for solid cad ## Development ## You are welcome to fork this project in github and request pulls. I will try to accomodate the community as much as possible in this. If for some reason you want collaborator access, just ask. Github is fun (and easy), but I can include code submissions and other improvements directly, and have already included code from various sources (thingiverse is great :) ### Code style ### I'd prefer to have all included code nicely indented, at least at the block level, and no extraneous whitespace. I'm used to indent with four spaces as opposed to tabs or other mixes of whitespace, but at least try to choose a style and stick to it. ### Testing ### I've started a minimal testing infrastucture for OpenSCAD code. It's written in python and uses py.test (might be compatible with Nose also). Just type `py.test` inside the lib dir in a terminal and you should see a part of the tests passing and tracebacks for failing tests. It's very simplistic still, but it should test that no syntax errors occur at least. The code is included in openscad_testing.py, and can be imported to be used in other codebases. openscad-2013.01+dfsg.orig/libraries/MCAD/motors.scad0000644000175000017500000000527711640737401021605 0ustar chrysnchrysn// Copyright 2010 D1plo1d // This library is dual licensed under the GPL 3.0 and the GNU Lesser General Public License as per http://creativecommons.org/licenses/LGPL/2.1/ . include //generates a motor mount for the specified nema standard #. module stepper_motor_mount(nema_standard,slide_distance=0, mochup=true, tolerance=0) { //dimensions from: // http://www.numberfactory.com/NEMA%20Motor%20Dimensions.htm if (nema_standard == 17) { _stepper_motor_mount( motor_shaft_diameter = 0.1968*mm_per_inch, motor_shaft_length = 0.945*mm_per_inch, pilot_diameter = 0.866*mm_per_inch, pilot_length = 0.80*mm_per_inch, mounting_bolt_circle = 1.725*mm_per_inch, bolt_hole_size = 3.5, bolt_hole_distance = 1.220*mm_per_inch, slide_distance = slide_distance, mochup = mochup, tolerance=tolerance); } if (nema_standard == 23) { _stepper_motor_mount( motor_shaft_diameter = 0.250*mm_per_inch, motor_shaft_length = 0.81*mm_per_inch, pilot_diameter = 1.500*mm_per_inch, pilot_length = 0.062*mm_per_inch, mounting_bolt_circle = 2.625*mm_per_inch, bolt_hole_size = 0.195*mm_per_inch, bolt_hole_distance = 1.856*mm_per_inch, slide_distance = slide_distance, mochup = mochup, tolerance=tolerance); } } //inner mehod for creating a stepper motor mount of any dimensions module _stepper_motor_mount( motor_shaft_diameter, motor_shaft_length, pilot_diameter, pilot_length, mounting_bolt_circle, bolt_hole_size, bolt_hole_distance, slide_distance = 0, motor_length = 40, //arbitray - not standardized mochup, tolerance = 0 ) { union() { // == centered mount points == //mounting circle inset translate([0,slide_distance/2,0]) circle(r = pilot_diameter/2 + tolerance); square([pilot_diameter,slide_distance],center=true); translate([0,-slide_distance/2,0]) circle(r = pilot_diameter/2 + tolerance); //todo: motor shaft hole //mounting screw holes for (x = [-1,1]) { for (y = [-1,1]) { translate([x*bolt_hole_distance/2,y*bolt_hole_distance/2,0]) { translate([0,slide_distance/2,0]) circle(bolt_hole_size/2 + tolerance); translate([0,-slide_distance/2,0]) circle(bolt_hole_size/2 + tolerance); square([bolt_hole_size+2*tolerance,slide_distance],center=true); } } } // == motor mock-up == //motor box if (mochup == true) { %translate([0,0,-5]) cylinder(h = 5, r = pilot_diameter/2); %translate(v=[0,0,-motor_length/2]) { cube(size=[bolt_hole_distance+bolt_hole_size+5,bolt_hole_distance+bolt_hole_size+5,motor_length], center = true); } //shaft %translate(v=[0,0,-(motor_length-motor_shaft_length-2)/2]) { %cylinder(r=motor_shaft_diameter/2,h=motor_length+motor_shaft_length--1, center = true); } } } } openscad-2013.01+dfsg.orig/libraries/MCAD/openscad_utils.py0000644000175000017500000000376411640737401023013 0ustar chrysnchrysnimport py, re, os, signal, time, commands, sys from subprocess import Popen, PIPE mod_re = (r"\bmodule\s+(", r")\s*\(\s*") func_re = (r"\bfunction\s+(", r")\s*\(") def extract_definitions(fpath, name_re=r"\w+", def_re=""): regex = name_re.join(def_re) matcher = re.compile(regex) return (m.group(1) for m in matcher.finditer(fpath.read())) def extract_mod_names(fpath, name_re=r"\w+"): return extract_definitions(fpath, name_re=name_re, def_re=mod_re) def extract_func_names(fpath, name_re=r"\w+"): return extract_definitions(fpath, name_re=name_re, def_re=func_re) def collect_test_modules(dirpath=None): dirpath = dirpath or py.path.local("./") print "Collecting openscad test module names" test_files = {} for fpath in dirpath.visit('*.scad'): #print fpath modules = extract_mod_names(fpath, r"test\w*") #functions = extract_func_names(fpath, r"test\w*") test_files[fpath] = modules return test_files class Timeout(Exception): pass def call_openscad(path, stlpath, timeout=5): if sys.platform == 'darwin': exe = 'OpenSCAD.app/Contents/MacOS/OpenSCAD' else: exe = 'openscad' command = [exe, '-s', str(stlpath), str(path)] print command if timeout: try: proc = Popen(command, stdout=PIPE, stderr=PIPE, close_fds=True) calltime = time.time() time.sleep(0.05) #print calltime while True: if proc.poll() is not None: break time.sleep(0.5) #print time.time() if time.time() > calltime + timeout: raise Timeout() finally: try: proc.terminate() proc.kill() except OSError: pass return (proc.returncode,) + proc.communicate() else: output = commands.getstatusoutput(" ".join(command)) return output + ('', '') def parse_output(text): pass openscad-2013.01+dfsg.orig/libraries/MCAD/boxes.scad0000644000175000017500000000252611640737401021374 0ustar chrysnchrysn// Library: boxes.scad // Version: 1.0 // Author: Marius Kintel // Copyright: 2010 // License: BSD // roundedBox([width, height, depth], float radius, bool sidesonly); // EXAMPLE USAGE: // roundedBox([20, 30, 40], 5, true); // size is a vector [w, h, d] module roundedBox(size, radius, sidesonly) { rot = [ [0,0,0], [90,0,90], [90,90,0] ]; if (sidesonly) { cube(size - [2*radius,0,0], true); cube(size - [0,2*radius,0], true); for (x = [radius-size[0]/2, -radius+size[0]/2], y = [radius-size[1]/2, -radius+size[1]/2]) { translate([x,y,0]) cylinder(r=radius, h=size[2], center=true); } } else { cube([size[0], size[1]-radius*2, size[2]-radius*2], center=true); cube([size[0]-radius*2, size[1], size[2]-radius*2], center=true); cube([size[0]-radius*2, size[1]-radius*2, size[2]], center=true); for (axis = [0:2]) { for (x = [radius-size[axis]/2, -radius+size[axis]/2], y = [radius-size[(axis+1)%3]/2, -radius+size[(axis+1)%3]/2]) { rotate(rot[axis]) translate([x,y,0]) cylinder(h=size[(axis+2)%3]-2*radius, r=radius, center=true); } } for (x = [radius-size[0]/2, -radius+size[0]/2], y = [radius-size[1]/2, -radius+size[1]/2], z = [radius-size[2]/2, -radius+size[2]/2]) { translate([x,y,z]) sphere(radius); } } } openscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/0000755000175000017500000000000012110740367020665 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/name_tag.scad0000644000175000017500000000173211640737401023301 0ustar chrysnchrysn/* Parametric Name Tag Tony Buser http://tonybuser.com http://creativecommons.org/licenses/by/3.0/ */ use // change chars array and char_count // OpenSCAD has no string or length methods :( chars = ["R", "E", "P", "R", "A", "P"]; char_count = 6; // block size 1 will result in 8mm per letter block_size = 2; // height is the Z height of each letter height = 3; // Append a hole fo a keyring, necklace etc. ? key_ring_hole = true; union() { translate(v = [0,-block_size*8*char_count/2+block_size*8/2,3]) { 8bit_str(chars, char_count, block_size, height); } translate(v = [0,0,3/2]) { color([0,0,1,1]) { cube(size = [block_size * 8, block_size * 8 * char_count, 3], center = true); } } if (key_ring_hole == true){ translate([0, block_size * 8 * (char_count+1)/2, 3/2]) difference(){ cube(size = [block_size * 8, block_size * 8 , 3], center = true); cube(size = [block_size * 4, block_size * 4 , 5], center = true); } } } openscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/bitmap.scad0000644000175000017500000005332511640737401023007 0ustar chrysnchrysn/* Bitmap and 8Bit Font Module Tony Buser http://tonybuser.com http://creativecommons.org/licenses/by/3.0/ */ module bitmap(bitmap, block_size, height, row_size) { width = block_size * row_size; bitmap_size = row_size * row_size; function loc_x(loc) = floor(loc / row_size) * block_size; function loc_y(loc) = loc % row_size * block_size; function loc_z(loc) = (bitmap[loc]*height-height)/2; translate(v = [-width/2+block_size/2,-width/2+block_size/2,height/2]) { for (loc = [0:bitmap_size - 1]) { if (bitmap[loc] != 0) { union() { translate(v = [loc_x(loc), loc_y(loc), loc_z(loc)]) { cube(size = [block_size, block_size, height * bitmap[loc]], center = true); } } } } } } module 8bit_char(char, block_size, height, include_base) { if (char == "0") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,1,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "1") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "2") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "3") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "4") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,1,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,1,1,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "5") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,0,0,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "6") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "7") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "8") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "9") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,1,1,0,0, 0,0,1,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "A") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "B") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "C") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "D") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,0,0,0, 0,1,1,0,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,1,1,0,0, 0,1,1,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "E") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "F") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "G") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,1,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "H") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "I") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "J") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,1,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "K") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,1,1,0,0, 0,1,1,1,1,0,0,0, 0,1,1,1,1,0,0,0, 0,1,1,0,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "L") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "M") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,1,1, 0,1,1,1,0,1,1,1, 0,1,1,1,1,1,1,1, 0,1,1,0,1,0,1,1, 0,1,1,0,0,0,1,1, 0,1,1,0,0,0,1,1, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "N") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,1,0,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,0,1,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "O") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "P") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "Q") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,0,1,1,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "R") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,1,1,0,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "S") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "T") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "U") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "V") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "W") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,1,1, 0,1,1,0,0,0,1,1, 0,1,1,0,1,0,1,1, 0,1,1,1,1,1,1,1, 0,1,1,1,0,1,1,1, 0,1,1,0,0,0,1,1, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "X") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "Y") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "Z") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "OE") { bitmap([ 0,0,1,0,0,1,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0 ], block_size, height, 8); } else if (char == "a") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "b") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "c") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "d") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "e") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "f") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,1,1,1,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,1,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "g") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,1,1,0, 0,1,1,1,1,1,0,0 ], block_size, height, 8); } else if (char == "h") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "i") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "j") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0, 0,0,1,1,1,1,0,0 ], block_size, height, 8); } else if (char == "k") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,1,1,0,0, 0,1,1,1,1,0,0,0, 0,1,1,0,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "l") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "m") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,1,1, 0,1,1,1,1,1,1,1, 0,1,1,0,1,0,1,1, 0,1,1,0,0,0,1,1, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "n") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "o") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "p") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0 ], block_size, height, 8); } else if (char == "q") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,1,1,0 ], block_size, height, 8); } else if (char == "r") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "s") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "t") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "u") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "v") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "w") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,1,1, 0,1,1,0,1,0,1,1, 0,1,1,1,1,1,1,1, 0,0,1,1,1,1,1,0, 0,0,1,1,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "x") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "y") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,1,0, 0,0,0,0,1,1,0,0, 0,1,1,1,1,0,0,0 ], block_size, height, 8); } else if (char == "z") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "+") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "-") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == ":") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == ".") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == ",") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0 ], block_size, height, 8); } else if (char == "?") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "=") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "*") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,0,1,1,1,1,0,0, 1,1,1,1,1,1,1,1, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "!") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "''") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "#") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 1,1,1,1,1,1,1,1, 0,1,1,0,0,1,1,0, 0,1,1,0,0,1,1,0, 1,1,1,1,1,1,1,1, 0,1,1,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "$") { bitmap([ 0,0,0,1,1,0,0,0, 0,0,1,1,1,1,1,0, 0,1,1,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,1,1,0, 0,1,1,1,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "%") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,1,1,0,0, 0,0,1,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,1,1,0,0,1,1,0, 0,1,0,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "&") { bitmap([ 0,0,0,1,1,1,0,0, 0,0,1,1,0,1,1,0, 0,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,0, 0,1,1,0,1,1,1,1, 0,1,1,0,1,1,1,0, 0,0,1,1,1,0,1,1, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "@") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,1,1,0,0,1,1,0, 0,1,1,0,1,1,1,0, 0,1,1,0,1,1,1,0, 0,1,1,0,0,0,0,0, 0,0,1,1,1,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "'") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "(") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,1,0,0,0, 0,0,0,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == ")") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,0,0,0, 0,0,0,1,1,1,0,0, 0,0,0,0,1,1,0,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "<") { bitmap([ 0,0,0,0,0,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,1,1,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == ">") { bitmap([ 0,1,1,0,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "[") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "]") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,1,1,0,0, 0,0,0,0,1,1,0,0, 0,0,0,0,1,1,0,0, 0,0,0,0,1,1,0,0, 0,0,1,1,1,1,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "/") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,1,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,1,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "\\") { bitmap([ 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,1,1,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,1,1,0,0, 0,0,0,0,0,1,1,0, 0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0 ], block_size, height, 8); } else if (char == "_") { bitmap([ 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1 ], block_size, height, 8); } else if (char == "|") { bitmap([ 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,1,1,0,0,0 ], block_size, height, 8); } else { echo("Invalid Character: ", char); } } module 8bit_str(chars, char_count, block_size, height) { echo(str("Total Width: ", block_size * 8 * char_count, "mm")); union() { for (count = [0:char_count-1]) { translate(v = [0, count * block_size * 8, 0]) { 8bit_char(chars[count], block_size, height); } } } } /* block_size = 5; height = 10; union() { translate(v = [0,0,5]) { 8bit_char("A", block_size, height); //bitmap([ // 1,1,1,1,1,1,1,1, // 1,0,0,1,1,0,0,1, // 1,0,1,1,1,1,0,1, // 1,1,1,0,0,1,1,1, // 1,1,1,0,0,1,1,1, // 1,0,1,1,1,1,0,1, // 1,0,0,1,1,0,0,1, // 1,1,1,1,1,1,1,1 //], block_size, height, 8); //bitmap([ // 1,1,1,1, // 1,0,0,1, // 1,0,0,1, // 1,1,1,1 //], block_size, height, 4); } translate(v = [0,0,5/2]) { color([0,0,1,1]) { cube(size = [block_size * 8, block_size * 8, 5], center = true); } } } chars = ["T","O","N","Y","","B","U","S","E","R"]; char_count = 10; block_size = 1; height = 5; union() { translate(v = [0,-block_size*8*char_count/2+block_size*8/2,5]) { 8bit_str(chars, char_count, block_size, height); } translate(v = [0,0,5/2]) { color([0,0,1,1]) { cube(size = [block_size * 8, block_size * 8 * char_count, 5], center = true); } } } */ openscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/height_map.scad0000644000175000017500000000126211640737401023631 0ustar chrysnchrysn/* Height Map Example Tony Buser http://tonybuser.com http://creativecommons.org/licenses/by/3.0/ Can also dynamically run this by passing an array on the command line: /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD -m make -D bitmap=[2,2,2,0,1,3,2,2,2] -D row_size=3 -s height_map.stl height_map.scad */ use block_size = 5; height = 5; row_size = 10; // 10x10 pixels bitmap = [ 1,1,0,0,1,1,0,0,1,1, 1,1,1,1,1,1,1,1,1,1, 0,1,2,2,1,1,2,2,1,0, 0,1,2,1,1,1,1,2,1,0, 1,1,1,1,3,3,1,1,1,1, 1,1,1,1,3,3,1,1,1,1, 0,1,2,1,1,1,1,2,1,0, 0,1,2,2,1,1,2,2,1,0, 1,1,1,1,1,1,1,1,1,1, 1,1,0,0,1,1,0,0,1,1 ]; bitmap(bitmap, block_size, height, row_size); openscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/README0000644000175000017500000000173311640737401021553 0ustar chrysnchrysnThis is an OpenSCAD module that let's you easily (well kinda) create 3D text. I've emulated the Atari 8-Bit fonts A-Z, a-z, 0-9, and most punctuation. You can create them a letter at a time or pass an array of characters. (OpenSCAD doesn't have any real string manipulation) It also has a bitmap module that you can use to define your own fonts. It's pretty simple, you pass it an array of numbers, then tell it how many bits per row and it creates cubes (of configurable width and height) in a grid and combines them into a single shape. The number in the array sets the pixel height modifier. So if you set height to 5 and the array value is 2, then the height of that pixel will be 10mm. Be careful when defining your own bitmaps in that you can't have two bits only connected diagonally. Otherwise OpenSCAD will say it's not manifold. For instance you can't have: 0 0 0 0 1 0 0 0 1 But you can have: 0 0 0 0 1 1 0 0 1 For more info see: http://www.thingiverse.com/thing:2054 openscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/letter_necklace.scad0000644000175000017500000000261111640737401024647 0ustar chrysnchrysn/* Parametric letters for for a necklace Elmo Mäntynen LGPL 2.1 */ use // change chars array and char_count // OpenSCAD has no string or length methods :( chars = ["M","a","k","e","r","B","o","t"]; char_count = 8; // block size 1 will result in 8mm per letter block_size = 2; // height is the Z height of each letter height = 3; //Hole for the necklace hole_diameter = 5; module 8bit_str(chars, char_count, block_size, height) { echo(str("Total Width: ", block_size * 8 * char_count, "mm")); union() { for (count = [0:char_count-1]) { translate(v = [0, count * block_size * 8, 0]) { 8bit_char(chars[count], block_size, height); } } } } module letter(char, block_size, height, hole_diameter) { union() { translate(v = [0,0, hole_diameter*1.3]) { 8bit_char(char, block_size, height); } translate(v = [0,0,(hole_diameter*1.3)/2]) { color([0,0,1,1]) { difference() { cube(size = [block_size * 8, block_size * 8, hole_diameter+2], center = true); rotate([90, 0, 0]) cylinder(h = block_size * 8 + 1, r = hole_diameter/2, center = true); } } } } } matrix = [["O", "L", "E", "N", "S"], [ "Y", "OE", "N", "Y", "T"]]; union() { for (column = [0:1]) { for (row = [0:4]) { translate(v=[column*(block_size*1.1)*8, row*(block_size*1.1)*8, 0]) letter(matrix[column][row], block_size, height, hole_diameter); } } } openscad-2013.01+dfsg.orig/libraries/MCAD/bitmap/alphabet_block.scad0000644000175000017500000000055211640737401024457 0ustar chrysnchrysn/* Parametric Alphabet Block Tony Buser http://tonybuser.com http://creativecommons.org/licenses/by/3.0/ */ use // change to any letter letter = "A"; union() { difference() { cube(size = 20); translate(v = [2, 2, 17]) { cube(size = [16, 16, 5]); } } translate(v = [10, 10, 15]) { 8bit_char(letter, 2, 5); } } openscad-2013.01+dfsg.orig/libraries/MCAD/TODO0000644000175000017500000000101011640737401020073 0ustar chrysnchrysnCode that could be integrated: * http://github.com/l0b0/qr2scad * http://github.com/l0b0/img2scad * http://github.com/l0b0/OpenSCAD-Minimizer * http://www.thingiverse.com/thing:4656 * http://www.thingiverse.com/thing:4758 * http://www.thingiverse.com/thing:6021 * Color library: http://www.thingiverse.com/thing:6717 * http://www.thingiverse.com/thing:6465 Integrate these better: * bitmap Testing: * add tests for openscad functions * motors.scad * tests for 2D stuff Code style: * motors.scad * nuts_and_bolts.scad openscad-2013.01+dfsg.orig/libraries/MCAD/lgpl-2.1.txt0000644000175000017500000006364211640737401021423 0ustar chrysnchrysn GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! openscad-2013.01+dfsg.orig/libraries/MCAD/unregular_shapes.scad0000644000175000017500000000063511640737401023622 0ustar chrysnchrysn// Copyright 2011 Elmo Mäntynen // LGPL 2.1 // Give a list of 4+4 points (check order) to form an 8 point polyhedron module connect_squares(points){ polyhedron(points=points, triangles=[[0,1,2], [3,0,2], [7,6,5], [7,5,4], // Given polygons [0,4,1], [4,5,1], [1,5,2], [2,5,6], // Connecting [2,6,3], [3,6,7], [3,4,0], [3,7,4]]);// sides } openscad-2013.01+dfsg.orig/libraries/MCAD/lego_compatibility.scad0000644000175000017500000001515211712607402024127 0ustar chrysnchrysn// This file is placed under the public domain // from: http://www.thingiverse.com/thing:9512 // EXAMPLES: // standard LEGO 2x1 tile has no pin // block(1,2,1/3,reinforcement=false,flat_top=true); // standard LEGO 2x1 flat has pin // block(1,2,1/3,reinforcement=true); // standard LEGO 2x1 brick has pin // block(1,2,1,reinforcement=true); // standard LEGO 2x1 brick without pin // block(1,2,1,reinforcement=false); // standard LEGO 2x1x5 brick has no pin and has hollow knobs // block(1,2,5,reinforcement=false,hollow_knob=true); knob_diameter=4.8; //knobs on top of blocks knob_height=2; knob_spacing=8.0; wall_thickness=1.45; roof_thickness=1.05; block_height=9.5; pin_diameter=3; //pin for bottom blocks with width or length of 1 post_diameter=6.5; reinforcing_width=1.5; axle_spline_width=2.0; axle_diameter=5; cylinder_precision=0.5; /* EXAMPLES: block(2,1,1/3,axle_hole=false,circular_hole=true,reinforcement=true,hollow_knob=true,flat_top=true); translate([50,-10,0]) block(1,2,1/3,axle_hole=false,circular_hole=true,reinforcement=false,hollow_knob=true,flat_top=true); translate([10,0,0]) block(2,2,1/3,axle_hole=false,circular_hole=true,reinforcement=true,hollow_knob=true,flat_top=true); translate([30,0,0]) block(2,2,1/3,axle_hole=false,circular_hole=true,reinforcement=true,hollow_knob=false,flat_top=false); translate([50,0,0]) block(2,2,1/3,axle_hole=false,circular_hole=true,reinforcement=true,hollow_knob=true,flat_top=false); translate([0,20,0]) block(3,2,2/3,axle_hole=false,circular_hole=true,reinforcement=true,hollow_knob=true,flat_top=false); translate([20,20,0]) block(3,2,1,axle_hole=true,circular_hole=false,reinforcement=true,hollow_knob=false,flat_top=false); translate([40,20,0]) block(3,2,1/3,axle_hole=false,circular_hole=false,reinforcement=false,hollow_knob=false,flat_top=false); translate([0,-10,0]) block(1,5,1/3,axle_hole=true,circular_hole=false,reinforcement=true,hollow_knob=false,flat_top=false); translate([0,-20,0]) block(1,5,1/3,axle_hole=true,circular_hole=false,reinforcement=true,hollow_knob=true,flat_top=false); translate([0,-30,0]) block(1,5,1/3,axle_hole=true,circular_hole=false,reinforcement=true,hollow_knob=true,flat_top=true); //*/ module block(width,length,height,axle_hole=false,reinforcement=false, hollow_knob=false, flat_top=false, circular_hole=false, solid_bottom=true, center=false) { overall_length=(length-1)*knob_spacing+knob_diameter+wall_thickness*2; overall_width=(width-1)*knob_spacing+knob_diameter+wall_thickness*2; center= center==true ? 1 : 0; translate(center*[-overall_length/2, -overall_width/2, 0]) union() { difference() { union() { // body: cube([overall_length,overall_width,height*block_height]); // knobs: if (flat_top != true) translate([knob_diameter/2+wall_thickness,knob_diameter/2+wall_thickness,0]) for (ycount=[0:width-1]) for (xcount=[0:length-1]) { translate([xcount*knob_spacing,ycount*knob_spacing,0]) difference() { cylinder(r=knob_diameter/2,h=block_height*height+knob_height,$fs=cylinder_precision); if (hollow_knob==true) translate([0,0,-roof_thickness]) cylinder(r=pin_diameter/2,h=block_height*height+knob_height+2*roof_thickness,$fs=cylinder_precision); } } } // hollow bottom: if (solid_bottom == false) translate([wall_thickness,wall_thickness,-roof_thickness]) cube([overall_length-wall_thickness*2,overall_width-wall_thickness*2,block_height*height]); // flat_top -> groove around bottom if (flat_top == true) { translate([-wall_thickness/2,-wall_thickness*2/3,-wall_thickness/2]) cube([overall_length+wall_thickness,wall_thickness,wall_thickness]); translate([-wall_thickness/2,overall_width-wall_thickness/3,-wall_thickness/2]) cube([overall_length+wall_thickness,wall_thickness,wall_thickness]); translate([-wall_thickness*2/3,-wall_thickness/2,-wall_thickness/2]) cube([wall_thickness,overall_width+wall_thickness,wall_thickness]); translate([overall_length-wall_thickness/3,0,-wall_thickness/2]) cube([wall_thickness,overall_width+wall_thickness,wall_thickness]); } if (axle_hole==true) if (width>1 && length>1) for (ycount=[1:width-1]) for (xcount=[1:length-1]) translate([xcount*knob_spacing,ycount*knob_spacing,roof_thickness]) axle(height); if (circular_hole==true) if (width>1 && length>1) for (ycount=[1:width-1]) for (xcount=[1:length-1]) translate([xcount*knob_spacing,ycount*knob_spacing,roof_thickness]) cylinder(r=knob_diameter/2, h=height*block_height+roof_thickness/4,$fs=cylinder_precision); } if (reinforcement==true && width>1 && length>1) difference() { for (ycount=[1:width-1]) for (xcount=[1:length-1]) translate([xcount*knob_spacing,ycount*knob_spacing,0]) reinforcement(height); for (ycount=[1:width-1]) for (xcount=[1:length-1]) translate([xcount*knob_spacing,ycount*knob_spacing,-roof_thickness/2]) cylinder(r=knob_diameter/2, h=height*block_height+roof_thickness, $fs=cylinder_precision); } // posts: if (solid_bottom == false) if (width>1 && length>1) for (ycount=[1:width-1]) for (xcount=[1:length-1]) translate([xcount*knob_spacing,ycount*knob_spacing,0]) post(height); if (reinforcement == true && width==1 && length!=1) for (xcount=[1:length-1]) translate([xcount*knob_spacing,overall_width/2,0]) cylinder(r=pin_diameter/2,h=block_height*height,$fs=cylinder_precision); if (reinforcement == true && length==1 && width!=1) for (ycount=[1:width-1]) translate([overall_length/2,ycount*knob_spacing,0]) cylinder(r=pin_diameter/2,h=block_height*height,$fs=cylinder_precision); } } module post(height) { difference() { cylinder(r=post_diameter/2, h=height*block_height-roof_thickness/2,$fs=cylinder_precision); translate([0,0,-roof_thickness/2]) cylinder(r=knob_diameter/2, h=height*block_height+roof_thickness/4,$fs=cylinder_precision); } } module reinforcement(height) { union() { translate([0,0,height*block_height/2]) union() { cube([reinforcing_width,knob_spacing+knob_diameter+wall_thickness/2,height*block_height],center=true); rotate(v=[0,0,1],a=90) cube([reinforcing_width,knob_spacing+knob_diameter+wall_thickness/2,height*block_height], center=true); } } } module axle(height) { translate([0,0,height*block_height/2]) union() { cube([axle_diameter,axle_spline_width,height*block_height],center=true); cube([axle_spline_width,axle_diameter,height*block_height],center=true); } } openscad-2013.01+dfsg.orig/libraries/MCAD/triangles.scad0000644000175000017500000000263511640737401022245 0ustar chrysnchrysn/** * Simple triangles library * * Authors: * - Eero 'rambo' af Heurlin 2010- * * License: LGPL 2.1 */ /** * Standard right-angled triangle * * @param number o_len Lenght of the opposite side * @param number a_len Lenght of the adjacent side * @param number depth How wide/deep the triangle is in the 3rd dimension * @todo a better way ? */ module triangle(o_len, a_len, depth) { linear_extrude(height=depth) { polygon(points=[[0,0],[a_len,0],[0,o_len]], paths=[[0,1,2]]); } } /** * Standard right-angled triangle (tangent version) * * @param number angle of adjacent to hypotenuse (ie tangent) * @param number a_len Lenght of the adjacent side * @param number depth How wide/deep the triangle is in the 3rd dimension */ module a_triangle(tan_angle, a_len, depth) { linear_extrude(height=depth) { polygon(points=[[0,0],[a_len,0],[0,tan(tan_angle) * a_len]], paths=[[0,1,2]]); } } // Tests: module test_triangle() { triangle(5, 5, 5); } module test_a_triangle() { a_triangle(45, 5, 5); } module test_triangles() { // Generate a bunch of triangles by sizes for (i = [1:10]) { translate([i*7, -30, i*7]) { triangle(i*5, sqrt(i*5+pow(i,2)), 5); } } // Generate a bunch of triangles by angle for (i = [1:85/5]) { translate([i*7, 22, i*7]) { a_triangle(i*5, 10, 5); } } } openscad-2013.01+dfsg.orig/libraries/MCAD/openscad_testing.py0000644000175000017500000000311011640737401023311 0ustar chrysnchrysnimport py import os.path from openscad_utils import * temppath = py.test.ensuretemp('MCAD') def pytest_generate_tests(metafunc): if "modpath" in metafunc.funcargnames: for fpath, modnames in collect_test_modules().items(): basename = os.path.splitext(os.path.split(str(fpath))[1])[0] #os.system("cp %s %s/" % (fpath, temppath)) if "modname" in metafunc.funcargnames: for modname in modnames: print modname metafunc.addcall(id=basename+"/"+modname, funcargs=dict(modname=modname, modpath=fpath)) else: metafunc.addcall(id=os.path.split(str(fpath))[1], funcargs=dict(modpath=fpath)) def test_module_compile(modname, modpath): tempname = modpath.basename + '-' + modname + '.scad' fpath = temppath.join(tempname) stlpath = temppath.join(tempname + ".stl") f = fpath.open('w') code = """ //generated testfile use <%s> %s(); """ % (modpath, modname) print code f.write(code) f.flush() output = call_openscad(path=fpath, stlpath=stlpath, timeout=15) print output assert output[0] is 0 for s in ("warning", "error"): assert s not in output[2].strip().lower() assert len(stlpath.readlines()) > 2 def test_file_compile(modpath): stlpath = temppath.join(modpath.basename + "-test.stl") output = call_openscad(path=modpath, stlpath=stlpath) print output assert output[0] is 0 for s in ("warning", "error"): assert s not in output[2].strip().lower() assert len(stlpath.readlines()) == 2 openscad-2013.01+dfsg.orig/libraries/MCAD/math.scad0000644000175000017500000000012011640737401021171 0ustar chrysnchrysn// MIT license include function deg(angle) = 360*angle/TAU; openscad-2013.01+dfsg.orig/libraries/MCAD/involute_gears.scad0000644000175000017500000004371511671510363023307 0ustar chrysnchrysn// Parametric Involute Bevel and Spur Gears by GregFrost // It is licensed under the Creative Commons - GNU LGPL 2.1 license. // © 2010 by GregFrost, thingiverse.com/Amp // http://www.thingiverse.com/thing:3575 and http://www.thingiverse.com/thing:3752 // Simple Test: //gear (circular_pitch=700, // gear_thickness = 12, // rim_thickness = 15, // hub_thickness = 17, // circles=8); //Complex Spur Gear Test: //test_gears (); // Meshing Double Helix: //test_meshing_double_helix (); module test_meshing_double_helix(){ meshing_double_helix (); } // Demonstrate the backlash option for Spur gears. //test_backlash (); // Demonstrate how to make meshing bevel gears. //test_bevel_gear_pair(); module test_bevel_gear_pair(){ bevel_gear_pair (); } module test_bevel_gear(){bevel_gear();} //bevel_gear(); pi=3.1415926535897932384626433832795; //================================================== // Bevel Gears: // Two gears with the same cone distance, circular pitch (measured at the cone distance) // and pressure angle will mesh. module bevel_gear_pair ( gear1_teeth = 41, gear2_teeth = 7, axis_angle = 90, outside_circular_pitch=1000) { outside_pitch_radius1 = gear1_teeth * outside_circular_pitch / 360; outside_pitch_radius2 = gear2_teeth * outside_circular_pitch / 360; pitch_apex1=outside_pitch_radius2 * sin (axis_angle) + (outside_pitch_radius2 * cos (axis_angle) + outside_pitch_radius1) / tan (axis_angle); cone_distance = sqrt (pow (pitch_apex1, 2) + pow (outside_pitch_radius1, 2)); pitch_apex2 = sqrt (pow (cone_distance, 2) - pow (outside_pitch_radius2, 2)); echo ("cone_distance", cone_distance); pitch_angle1 = asin (outside_pitch_radius1 / cone_distance); pitch_angle2 = asin (outside_pitch_radius2 / cone_distance); echo ("pitch_angle1, pitch_angle2", pitch_angle1, pitch_angle2); echo ("pitch_angle1 + pitch_angle2", pitch_angle1 + pitch_angle2); rotate([0,0,90]) translate ([0,0,pitch_apex1+20]) { translate([0,0,-pitch_apex1]) bevel_gear ( number_of_teeth=gear1_teeth, cone_distance=cone_distance, pressure_angle=30, outside_circular_pitch=outside_circular_pitch); rotate([0,-(pitch_angle1+pitch_angle2),0]) translate([0,0,-pitch_apex2]) bevel_gear ( number_of_teeth=gear2_teeth, cone_distance=cone_distance, pressure_angle=30, outside_circular_pitch=outside_circular_pitch); } } //Bevel Gear Finishing Options: bevel_gear_flat = 0; bevel_gear_back_cone = 1; module bevel_gear ( number_of_teeth=11, cone_distance=100, face_width=20, outside_circular_pitch=1000, pressure_angle=30, clearance = 0.2, bore_diameter=5, gear_thickness = 15, backlash = 0, involute_facets=0, finish = -1) { echo ("bevel_gear", "teeth", number_of_teeth, "cone distance", cone_distance, face_width, outside_circular_pitch, pressure_angle, clearance, bore_diameter, involute_facets, finish); // Pitch diameter: Diameter of pitch circle at the fat end of the gear. outside_pitch_diameter = number_of_teeth * outside_circular_pitch / 180; outside_pitch_radius = outside_pitch_diameter / 2; // The height of the pitch apex. pitch_apex = sqrt (pow (cone_distance, 2) - pow (outside_pitch_radius, 2)); pitch_angle = asin (outside_pitch_radius/cone_distance); echo ("Num Teeth:", number_of_teeth, " Pitch Angle:", pitch_angle); finish = (finish != -1) ? finish : (pitch_angle < 45) ? bevel_gear_flat : bevel_gear_back_cone; apex_to_apex=cone_distance / cos (pitch_angle); back_cone_radius = apex_to_apex * sin (pitch_angle); // Calculate and display the pitch angle. This is needed to determine the angle to mount two meshing cone gears. // Base Circle for forming the involute teeth shape. base_radius = back_cone_radius * cos (pressure_angle); // Diametrial pitch: Number of teeth per unit length. pitch_diametrial = number_of_teeth / outside_pitch_diameter; // Addendum: Radial distance from pitch circle to outside circle. addendum = 1 / pitch_diametrial; // Outer Circle outer_radius = back_cone_radius + addendum; // Dedendum: Radial distance from pitch circle to root diameter dedendum = addendum + clearance; dedendum_angle = atan (dedendum / cone_distance); root_angle = pitch_angle - dedendum_angle; root_cone_full_radius = tan (root_angle)*apex_to_apex; back_cone_full_radius=apex_to_apex / tan (pitch_angle); back_cone_end_radius = outside_pitch_radius - dedendum * cos (pitch_angle) - gear_thickness / tan (pitch_angle); back_cone_descent = dedendum * sin (pitch_angle) + gear_thickness; // Root diameter: Diameter of bottom of tooth spaces. root_radius = back_cone_radius - dedendum; half_tooth_thickness = outside_pitch_radius * sin (360 / (4 * number_of_teeth)) - backlash / 4; half_thick_angle = asin (half_tooth_thickness / back_cone_radius); face_cone_height = apex_to_apex-face_width / cos (pitch_angle); face_cone_full_radius = face_cone_height / tan (pitch_angle); face_cone_descent = dedendum * sin (pitch_angle); face_cone_end_radius = outside_pitch_radius - face_width / sin (pitch_angle) - face_cone_descent / tan (pitch_angle); // For the bevel_gear_flat finish option, calculate the height of a cube to select the portion of the gear that includes the full pitch face. bevel_gear_flat_height = pitch_apex - (cone_distance - face_width) * cos (pitch_angle); // translate([0,0,-pitch_apex]) difference () { intersection () { union() { rotate (half_thick_angle) translate ([0,0,pitch_apex-apex_to_apex]) cylinder ($fn=number_of_teeth*2, r1=root_cone_full_radius,r2=0,h=apex_to_apex); for (i = [1:number_of_teeth]) // for (i = [1:1]) { rotate ([0,0,i*360/number_of_teeth]) { involute_bevel_gear_tooth ( back_cone_radius = back_cone_radius, root_radius = root_radius, base_radius = base_radius, outer_radius = outer_radius, pitch_apex = pitch_apex, cone_distance = cone_distance, half_thick_angle = half_thick_angle, involute_facets = involute_facets); } } } if (finish == bevel_gear_back_cone) { translate ([0,0,-back_cone_descent]) cylinder ( $fn=number_of_teeth*2, r1=back_cone_end_radius, r2=back_cone_full_radius*2, h=apex_to_apex + back_cone_descent); } else { translate ([-1.5*outside_pitch_radius,-1.5*outside_pitch_radius,0]) cube ([3*outside_pitch_radius, 3*outside_pitch_radius, bevel_gear_flat_height]); } } if (finish == bevel_gear_back_cone) { translate ([0,0,-face_cone_descent]) cylinder ( r1=face_cone_end_radius, r2=face_cone_full_radius * 2, h=face_cone_height + face_cone_descent+pitch_apex); } translate ([0,0,pitch_apex - apex_to_apex]) cylinder (r=bore_diameter/2,h=apex_to_apex); } } module involute_bevel_gear_tooth ( back_cone_radius, root_radius, base_radius, outer_radius, pitch_apex, cone_distance, half_thick_angle, involute_facets) { // echo ("involute_bevel_gear_tooth", // back_cone_radius, // root_radius, // base_radius, // outer_radius, // pitch_apex, // cone_distance, // half_thick_angle); min_radius = max (base_radius*2,root_radius*2); pitch_point = involute ( base_radius*2, involute_intersect_angle (base_radius*2, back_cone_radius*2)); pitch_angle = atan2 (pitch_point[1], pitch_point[0]); centre_angle = pitch_angle + half_thick_angle; start_angle = involute_intersect_angle (base_radius*2, min_radius); stop_angle = involute_intersect_angle (base_radius*2, outer_radius*2); res=(involute_facets!=0)?involute_facets:($fn==0)?5:$fn/4; translate ([0,0,pitch_apex]) rotate ([0,-atan(back_cone_radius/cone_distance),0]) translate ([-back_cone_radius*2,0,-cone_distance*2]) union () { for (i=[1:res]) { assign ( point1= involute (base_radius*2,start_angle+(stop_angle - start_angle)*(i-1)/res), point2= involute (base_radius*2,start_angle+(stop_angle - start_angle)*(i)/res)) { assign ( side1_point1 = rotate_point (centre_angle, point1), side1_point2 = rotate_point (centre_angle, point2), side2_point1 = mirror_point (rotate_point (centre_angle, point1)), side2_point2 = mirror_point (rotate_point (centre_angle, point2))) { polyhedron ( points=[ [back_cone_radius*2+0.1,0,cone_distance*2], [side1_point1[0],side1_point1[1],0], [side1_point2[0],side1_point2[1],0], [side2_point2[0],side2_point2[1],0], [side2_point1[0],side2_point1[1],0], [0.1,0,0]], triangles=[[0,2,1],[0,3,2],[0,4,3],[0,1,5],[1,2,5],[2,3,5],[3,4,5],[0,5,4]]); } } } } } module gear ( number_of_teeth=15, circular_pitch=false, diametral_pitch=false, pressure_angle=28, clearance = 0.2, gear_thickness=5, rim_thickness=8, rim_width=5, hub_thickness=10, hub_diameter=15, bore_diameter=5, circles=0, backlash=0, twist=0, involute_facets=0, flat=false) { if (circular_pitch==false && diametral_pitch==false) echo("MCAD ERROR: gear module needs either a diametral_pitch or circular_pitch"); //Convert diametrial pitch to our native circular pitch circular_pitch = (circular_pitch!=false?circular_pitch:180/diametral_pitch); // Pitch diameter: Diameter of pitch circle. pitch_diameter = number_of_teeth * circular_pitch / 180; pitch_radius = pitch_diameter/2; echo ("Teeth:", number_of_teeth, " Pitch radius:", pitch_radius); // Base Circle base_radius = pitch_radius*cos(pressure_angle); // Diametrial pitch: Number of teeth per unit length. pitch_diametrial = number_of_teeth / pitch_diameter; // Addendum: Radial distance from pitch circle to outside circle. addendum = 1/pitch_diametrial; //Outer Circle outer_radius = pitch_radius+addendum; // Dedendum: Radial distance from pitch circle to root diameter dedendum = addendum + clearance; // Root diameter: Diameter of bottom of tooth spaces. root_radius = pitch_radius-dedendum; backlash_angle = backlash / pitch_radius * 180 / pi; half_thick_angle = (360 / number_of_teeth - backlash_angle) / 4; // Variables controlling the rim. rim_radius = root_radius - rim_width; // Variables controlling the circular holes in the gear. circle_orbit_diameter=hub_diameter/2+rim_radius; circle_orbit_curcumference=pi*circle_orbit_diameter; // Limit the circle size to 90% of the gear face. circle_diameter= min ( 0.70*circle_orbit_curcumference/circles, (rim_radius-hub_diameter/2)*0.9); difference() { union () { difference () { linear_exturde_flat_option(flat=flat, height=rim_thickness, convexity=10, twist=twist) gear_shape ( number_of_teeth, pitch_radius = pitch_radius, root_radius = root_radius, base_radius = base_radius, outer_radius = outer_radius, half_thick_angle = half_thick_angle, involute_facets=involute_facets); if (gear_thickness < rim_thickness) translate ([0,0,gear_thickness]) cylinder (r=rim_radius,h=rim_thickness-gear_thickness+1); } if (gear_thickness > rim_thickness) linear_exturde_flat_option(flat=flat, height=gear_thickness) circle (r=rim_radius); if (flat == false && hub_thickness > gear_thickness) translate ([0,0,gear_thickness]) linear_exturde_flat_option(flat=flat, height=hub_thickness-gear_thickness) circle (r=hub_diameter/2); } translate ([0,0,-1]) linear_exturde_flat_option(flat =flat, height=2+max(rim_thickness,hub_thickness,gear_thickness)) circle (r=bore_diameter/2); if (circles>0) { for(i=[0:circles-1]) rotate([0,0,i*360/circles]) translate([circle_orbit_diameter/2,0,-1]) linear_exturde_flat_option(flat =flat, height=max(gear_thickness,rim_thickness)+3) circle(r=circle_diameter/2); } } } module linear_exturde_flat_option(flat =false, height = 10, center = false, convexity = 2, twist = 0) { if(flat==false) { linear_extrude(height = height, center = center, convexity = convexity, twist= twist) child(0); } else { child(0); } } module gear_shape ( number_of_teeth, pitch_radius, root_radius, base_radius, outer_radius, half_thick_angle, involute_facets) { union() { rotate (half_thick_angle) circle ($fn=number_of_teeth*2, r=root_radius); for (i = [1:number_of_teeth]) { rotate ([0,0,i*360/number_of_teeth]) { involute_gear_tooth ( pitch_radius = pitch_radius, root_radius = root_radius, base_radius = base_radius, outer_radius = outer_radius, half_thick_angle = half_thick_angle, involute_facets=involute_facets); } } } } module involute_gear_tooth ( pitch_radius, root_radius, base_radius, outer_radius, half_thick_angle, involute_facets) { min_radius = max (base_radius,root_radius); pitch_point = involute (base_radius, involute_intersect_angle (base_radius, pitch_radius)); pitch_angle = atan2 (pitch_point[1], pitch_point[0]); centre_angle = pitch_angle + half_thick_angle; start_angle = involute_intersect_angle (base_radius, min_radius); stop_angle = involute_intersect_angle (base_radius, outer_radius); res=(involute_facets!=0)?involute_facets:($fn==0)?5:$fn/4; union () { for (i=[1:res]) assign ( point1=involute (base_radius,start_angle+(stop_angle - start_angle)*(i-1)/res), point2=involute (base_radius,start_angle+(stop_angle - start_angle)*i/res)) { assign ( side1_point1=rotate_point (centre_angle, point1), side1_point2=rotate_point (centre_angle, point2), side2_point1=mirror_point (rotate_point (centre_angle, point1)), side2_point2=mirror_point (rotate_point (centre_angle, point2))) { polygon ( points=[[0,0],side1_point1,side1_point2,side2_point2,side2_point1], paths=[[0,1,2,3,4,0]]); } } } } // Mathematical Functions //=============== // Finds the angle of the involute about the base radius at the given distance (radius) from it's center. //source: http://www.mathhelpforum.com/math-help/geometry/136011-circle-involute-solving-y-any-given-x.html function involute_intersect_angle (base_radius, radius) = sqrt (pow (radius/base_radius, 2) - 1) * 180 / pi; // Calculate the involute position for a given base radius and involute angle. function rotated_involute (rotate, base_radius, involute_angle) = [ cos (rotate) * involute (base_radius, involute_angle)[0] + sin (rotate) * involute (base_radius, involute_angle)[1], cos (rotate) * involute (base_radius, involute_angle)[1] - sin (rotate) * involute (base_radius, involute_angle)[0] ]; function mirror_point (coord) = [ coord[0], -coord[1] ]; function rotate_point (rotate, coord) = [ cos (rotate) * coord[0] + sin (rotate) * coord[1], cos (rotate) * coord[1] - sin (rotate) * coord[0] ]; function involute (base_radius, involute_angle) = [ base_radius*(cos (involute_angle) + involute_angle*pi/180*sin (involute_angle)), base_radius*(sin (involute_angle) - involute_angle*pi/180*cos (involute_angle)) ]; // Test Cases //=============== module test_gears() { translate([17,-15]) { gear (number_of_teeth=17, circular_pitch=500, circles=8); rotate ([0,0,360*4/17]) translate ([39.088888,0,0]) { gear (number_of_teeth=11, circular_pitch=500, hub_diameter=0, rim_width=65); translate ([0,0,8]) { gear (number_of_teeth=6, circular_pitch=300, hub_diameter=0, rim_width=5, rim_thickness=6, pressure_angle=31); rotate ([0,0,360*5/6]) translate ([22.5,0,1]) gear (number_of_teeth=21, circular_pitch=300, bore_diameter=2, hub_diameter=4, rim_width=1, hub_thickness=4, rim_thickness=4, gear_thickness=3, pressure_angle=31); } } translate ([-61.1111111,0,0]) { gear (number_of_teeth=27, circular_pitch=500, circles=5, hub_diameter=2*8.88888889); translate ([0,0,10]) { gear ( number_of_teeth=14, circular_pitch=200, pressure_angle=5, clearance = 0.2, gear_thickness = 10, rim_thickness = 10, rim_width = 15, bore_diameter=5, circles=0); translate ([13.8888888,0,1]) gear ( number_of_teeth=11, circular_pitch=200, pressure_angle=5, clearance = 0.2, gear_thickness = 10, rim_thickness = 10, rim_width = 15, hub_thickness = 20, hub_diameter=2*7.222222, bore_diameter=5, circles=0); } } rotate ([0,0,360*-5/17]) translate ([44.444444444,0,0]) gear (number_of_teeth=15, circular_pitch=500, hub_diameter=10, rim_width=5, rim_thickness=5, gear_thickness=4, hub_thickness=6, circles=9); rotate ([0,0,360*-1/17]) translate ([30.5555555,0,-1]) gear (number_of_teeth=5, circular_pitch=500, hub_diameter=0, rim_width=5, rim_thickness=10); } } module meshing_double_helix () { test_double_helix_gear (); mirror ([0,1,0]) translate ([58.33333333,0,0]) test_double_helix_gear (teeth=13,circles=6); } module test_double_helix_gear ( teeth=17, circles=8) { //double helical gear { twist=200; height=20; pressure_angle=30; gear (number_of_teeth=teeth, circular_pitch=700, pressure_angle=pressure_angle, clearance = 0.2, gear_thickness = height/2*0.5, rim_thickness = height/2, rim_width = 5, hub_thickness = height/2*1.2, hub_diameter=15, bore_diameter=5, circles=circles, twist=twist/teeth); mirror([0,0,1]) gear (number_of_teeth=teeth, circular_pitch=700, pressure_angle=pressure_angle, clearance = 0.2, gear_thickness = height/2, rim_thickness = height/2, rim_width = 5, hub_thickness = height/2, hub_diameter=15, bore_diameter=5, circles=circles, twist=twist/teeth); } } module test_backlash () { backlash = 2; teeth = 15; translate ([-29.166666,0,0]) { translate ([58.3333333,0,0]) rotate ([0,0,-360/teeth/4]) gear ( number_of_teeth = teeth, circular_pitch=700, gear_thickness = 12, rim_thickness = 15, rim_width = 5, hub_thickness = 17, hub_diameter=15, bore_diameter=5, backlash = 2, circles=8); rotate ([0,0,360/teeth/4]) gear ( number_of_teeth = teeth, circular_pitch=700, gear_thickness = 12, rim_thickness = 15, rim_width = 5, hub_thickness = 17, hub_diameter=15, bore_diameter=5, backlash = 2, circles=8); } color([0,0,128,0.5]) translate([0,0,-5]) cylinder ($fn=20,r=backlash / 4,h=25); } openscad-2013.01+dfsg.orig/libraries/MCAD/metric_fastners.scad0000644000175000017500000000403711640737401023443 0ustar chrysnchrysn/* * OpenSCAD Metric Fastners Library (www.openscad.org) * Copyright (C) 2010-2011 Giles Bathgate * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, * LGPL version 2.1, or (at your option) any later version of the GPL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ $fn=50; apply_chamfer=true; module cap_bolt(dia,len) { e=1.5*dia; h1=1.25*dia; cylinder(r=dia/2,h=len); translate([0,0,-h1]) cylinder(r=e/2,h=h1); } module csk_bolt(dia,len) { h1=0.6*dia; h2=len-h1; cylinder(r=dia/2,h=h2); cylinder(r1=dia,r2=dia/2,h=h1); } module washer(dia) { t=0.1*dia; difference() { cylinder(r=dia,h=t); translate([0,0,-t/2])cylinder(r=dia/2,h=t*2); } } module flat_nut(dia) { m=0.8*dia; e=1.8*dia; c=0.2*dia; difference() { cylinder(r=e/2,h=m,$fn=6); translate([0,0,-m/2])cylinder(r=dia/2,h=m*2); if(apply_chamfer) translate([0,0,c])cylinder_chamfer(e/2,c); } } module bolt(dia,len) { e=1.8*dia; k=0.7*dia; c=0.2*dia; difference() { cylinder(r=e/2,h=k,$fn=6); if(apply_chamfer) translate([0,0,c])cylinder_chamfer(e/2,c); } cylinder(r=dia/2,h=len); } module cylinder_chamfer(r1,r2) { t=r1-r2; p=r2*2; rotate_extrude() difference() { translate([t,-p])square([p,p]); translate([t,0])circle(r2); } } module chamfer(len,r) { p=r*2; linear_extrude(height=len) difference() { square([p,p]); circle(r); } } union() { //csk_bolt(3,14); //washer(3); //flat_nut(3); //bolt(4,14); //cylinder_chamfer(8,1); //chamfer(10,2); } openscad-2013.01+dfsg.orig/libraries/MCAD/servos.scad0000644000175000017500000000401211640737401021565 0ustar chrysnchrysn/** * Servo outline library * * Authors: * - Eero 'rambo' af Heurlin 2010- * * License: LGPL 2.1 */ use /** * Align DS420 digital servo * * @param vector position The position vector * @param vector rotation The rotation vector * @param boolean screws If defined then "screws" will be added and when the module is differenced() from something if will have holes for the screws * @param number axle_lenght If defined this will draw "backgound" indicator for the main axle */ module alignds420(position, rotation, screws = 0, axle_lenght = 0) { translate(position) { rotate(rotation) { union() { // Main axle translate([0,0,17]) { cylinder(r=6, h=8, $fn=30); cylinder(r=2.5, h=10.5, $fn=20); } // Box and ears translate([-6,-6,0]) { cube([12, 22.8,19.5], false); translate([0,-5, 17]) { cube([12, 7, 2.5]); } translate([0, 20.8, 17]) { cube([12, 7, 2.5]); } } if (screws > 0) { translate([0,(-10.2 + 1.8),11.5]) { # cylinder(r=1.8/2, h=6, $fn=6); } translate([0,(21.0 - 1.8),11.5]) { # cylinder(r=1.8/2, h=6, $fn=6); } } // The large slope translate([-6,0,19]) { rotate([90,0,90]) { triangle(4, 18, 12); } } /** * This seems to get too complex fast // Small additional axes translate([0,6,17]) { cylinder(r=2.5, h=6, $fn=10); cylinder(r=1.25, h=8, $fn=10); } // Small slope difference() { translate([-6,-6,19.0]) { cube([12,6.5,4]); } translate([7,-7,24.0]) { rotate([-90,0,90]) { triangle(3, 8, 14); } } } */ // So we render a cube instead of the small slope on a cube translate([-6,-6,19.0]) { cube([12,6.5,4]); } } if (axle_lenght > 0) { % cylinder(r=0.9, h=axle_lenght, center=true, $fn=8); } } } } // Tests: module test_alignds420(){alignds420(screws=1);} openscad-2013.01+dfsg.orig/libraries/MCAD/test_mcad.py0000644000175000017500000000003711640737401021730 0ustar chrysnchrysnfrom openscad_testing import * openscad-2013.01+dfsg.orig/libraries/MCAD/nuts_and_bolts.scad0000644000175000017500000000510611640737401023267 0ustar chrysnchrysn// Copyright 2010 D1plo1d // This library is dual licensed under the GPL 3.0 and the GNU Lesser General Public License as per http://creativecommons.org/licenses/LGPL/2.1/ . //testNutsAndBolts(); module SKIPtestNutsAndBolts() { $fn = 360; translate([0,15])nutHole(3, proj=2); boltHole(3, length= 30, proj=2); } MM = "mm"; INCH = "inch"; //Not yet supported //Based on: http://www.roymech.co.uk/Useful_Tables/Screws/Hex_Screws.htm METRIC_NUT_AC_WIDTHS = [ -1, //0 index is not used but reduces computation -1, -1, 6.40,//m3 8.10,//m4 9.20,//m5 11.50,//m6 -1, 15.00,//m8 -1, 19.60,//m10 -1, 22.10,//m12 -1, -1, -1, 27.70,//m16 -1, -1, -1, 34.60,//m20 -1, -1, -1, 41.60,//m24 -1, -1, -1, -1, -1, 53.1,//m30 -1, -1, -1, -1, -1, 63.5//m36 ]; METRIC_NUT_THICKNESS = [ -1, //0 index is not used but reduces computation -1, -1, 2.40,//m3 3.20,//m4 4.00,//m5 5.00,//m6 -1, 6.50,//m8 -1, 8.00,//m10 -1, 10.00,//m12 -1, -1, -1, 13.00,//m16 -1, -1, -1, 16.00//m20 -1, -1, -1, 19.00,//m24 -1, -1, -1, -1, -1, 24.00,//m30 -1, -1, -1, -1, -1, 29.00//m36 ]; COURSE_METRIC_BOLT_MAJOR_THREAD_DIAMETERS = [//based on max values -1, //0 index is not used but reduces computation -1, -1, 2.98,//m3 3.978,//m4 4.976,//m5 5.974,//m6 -1, 7.972,//m8 -1, 9.968,//m10 -1, 11.966,//m12 -1, -1, -1, 15.962,//m16 -1, -1, -1, 19.958,//m20 -1, -1, -1, 23.952,//m24 -1, -1, -1, -1, -1, 29.947,//m30 -1, -1, -1, -1, -1, 35.940//m36 ]; module nutHole(size, units=MM, tolerance = +0.0001, proj = -1) { //takes a metric screw/nut size and looksup nut dimensions radius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance; height = METRIC_NUT_THICKNESS[size]+tolerance; if (proj == -1) { cylinder(r= radius, h=height, $fn = 6, center=[0,0]); } if (proj == 1) { circle(r= radius, $fn = 6); } if (proj == 2) { translate([-radius/2, 0]) square([radius*2, height]); } } module boltHole(size, units=MM, length, tolerance = +0.0001, proj = -1) { radius = COURSE_METRIC_BOLT_MAJOR_THREAD_DIAMETERS[size]/2+tolerance; //TODO: proper screw cap values capHeight = METRIC_NUT_THICKNESS[size]+tolerance; //METRIC_BOLT_CAP_HEIGHTS[size]+tolerance; capRadius = METRIC_NUT_AC_WIDTHS[size]/2+tolerance; //METRIC_BOLT_CAP_RADIUS[size]+tolerance; if (proj == -1) { translate([0, 0, -capHeight]) cylinder(r= capRadius, h=capHeight); cylinder(r = radius, h = length); } if (proj == 1) { circle(r = radius); } if (proj == 2) { translate([-capRadius/2, -capHeight]) square([capRadius*2, capHeight]); square([radius*2, length]); } } openscad-2013.01+dfsg.orig/libraries/MCAD/gridbeam.scad0000644000175000017500000000713111640737401022023 0ustar chrysnchrysn/* * OpenSCAD GridBeam Library (www.openscad.org) * Copyright (C) 2009 Timothy Schmidt * * License: LGPL 2.1 or later */ // zBeam(segments) - create a vertical gridbeam strut 'segments' long // xBeam(segments) - create a horizontal gridbeam strut along the X axis // yBeam(segments) - create a horizontal gridbeam strut along the Y axis // topShelf(width, depth, corners) - create a shelf suitable for use in gridbeam structures width and depth in 'segments', corners == 1 notches corners // bottomShelf(width, depth, corners) - like topShelf, but aligns shelf to underside of beams // backBoard(width, height, corners) - create a backing board suitable for use in gridbeam structures width and height in 'segments', corners == 1 notches corners // frontBoard(width, height, corners) - like backBoard, but aligns board to front side of beams // translateBeam([x, y, z]) - translate gridbeam struts or shelves in X, Y, or Z axes in units 'segments' include $beam_width = inch * 1.5; $beam_hole_radius = inch * 5/16; $beam_is_hollow = 1; $beam_wall_thickness = inch * 1/8; $beam_shelf_thickness = inch * 1/4; module zBeam(segments) { difference() { cube([$beam_width, $beam_width, $beam_width * segments]); for(i = [0 : segments - 1]) { translate([$beam_width / 2, $beam_width + 1, $beam_width * i + $beam_width / 2]) rotate([90,0,0]) cylinder(r=$beam_hole_radius, h=$beam_width + 2); translate([-1, $beam_width / 2, $beam_width * i + $beam_width / 2]) rotate([0,90,0]) cylinder(r=$beam_hole_radius, h=$beam_width + 2); } if ($beam_is_hollow == 1) { translate([$beam_wall_thickness, $beam_wall_thickness, -1]) cube([$beam_width - $beam_wall_thickness * 2, $beam_width - $beam_wall_thickness * 2, $beam_width * segments + 2]); } } } module xBeam(segments) { translate([0,0,$beam_width]) rotate([0,90,0]) zBeam(segments); } module yBeam(segments) { translate([0,0,$beam_width]) rotate([-90,0,0]) zBeam(segments); } module translateBeam(v) { for (i = [0 : $children - 1]) { translate(v * $beam_width) child(i); } } module topShelf(width, depth, corners) { difference() { cube([width * $beam_width, depth * $beam_width, $beam_shelf_thickness]); if (corners == 1) { translate([-1, -1, -1]) cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); translate([-1, (depth - 1) * $beam_width, -1]) cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); translate([(width - 1) * $beam_width, -1, -1]) cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); translate([(width - 1) * $beam_width, (depth - 1) * $beam_width, -1]) cube([$beam_width + 2, $beam_width + 2, $beam_shelf_thickness + 2]); } } } module bottomShelf(width, depth, corners) { translate([0,0,-$beam_shelf_thickness]) topShelf(width, depth, corners); } module backBoard(width, height, corners) { translate([$beam_width, 0, 0]) difference() { cube([$beam_shelf_thickness, width * $beam_width, height * $beam_width]); if (corners == 1) { translate([-1, -1, -1]) cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); translate([-1, -1, (height - 1) * $beam_width]) cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); translate([-1, (width - 1) * $beam_width, -1]) cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); translate([-1, (width - 1) * $beam_width, (height - 1) * $beam_width]) cube([$beam_shelf_thickness + 2, $beam_width + 2, $beam_width + 2]); } } } module frontBoard(width, height, corners) { translate([-$beam_width - $beam_shelf_thickness, 0, 0]) backBoard(width, height, corners); }openscad-2013.01+dfsg.orig/libraries/MCAD/teardrop.scad0000644000175000017500000000472311657530650022102 0ustar chrysnchrysn/* From http://www.thingiverse.com/thing:3457 © 2010 whosawhatsis This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* This script generates a teardrop shape at the appropriate angle to prevent overhangs greater than 45 degrees. The angle is in degrees, and is a rotation around the Y axis. You can then rotate around Z to point it in any direction. Rotation around X or Y will cause the angle to be wrong. */ module teardrop(radius, length, angle) { rotate([0, angle, 0]) union() { linear_extrude(height = length, center = true, convexity = radius, twist = 0) circle(r = radius, center = true, $fn = 30); linear_extrude(height = length, center = true, convexity = radius, twist = 0) projection(cut = false) rotate([0, -angle, 0]) translate([0, 0, radius * sin(45) * 1.5]) cylinder(h = radius * sin(45), r1 = radius * sin(45), r2 = 0, center = true, $fn = 30); } //I worked this portion out when a bug was causing the projection above to take FOREVER to calculate. It works as a replacement, and I figured I'd leave it here just in case. /* #polygon(points = [[radius * cos(-angle / 2), radius * sin(-angle / 2), 0],[radius * cos(-angle / 2), radius * -sin(-angle / 2), 0],[(sin(-angle - 45) + cos(-angle - 45)) * radius, 0, 0]], paths = [[0, 1, 2]]); #polygon(points = [[radius * -cos(-angle / 2), radius * sin(-angle / 2), 0],[radius * -cos(-angle / 2), radius * -sin(-angle / 2), 0],[(sin(-angle - 45) + cos(-angle - 45)) * radius, 0, 0]], paths = [[0, 1, 2]]); #polygon(points = [[radius * sin(-angle / 2), radius * cos(-angle / 2), 0],[radius * sin(-angle / 2), radius * -cos(-angle / 2), 0],[(sin(-angle - 45) + cos(-angle - 45)) * radius, 0, 0]], paths = [[0, 1, 2]]); */ } module test_teardrop(){ translate([0, -15, 0]) teardrop(5, 20, 90); translate([0, 0, 0]) teardrop(5, 20, 60); translate([0, 15, 0]) teardrop(5, 20, 45); } //test_teardrop(); openscad-2013.01+dfsg.orig/libraries/MCAD/fonts.scad0000644000175000017500000005264711717714307021423 0ustar chrysnchrysn// Font Functions // Encoding from http://en.wikipedia.org/wiki/ASCII module outline_2d(outline,points,paths,width=0.1,resolution=8) { if(outline && resolution > 4) { for(j=[0:len(paths)-1]) union() { for(i=[1:len(paths[j])-1]) hull() { translate(points[paths[j][i-1]]) circle($fn=resolution,r=width/2); translate(points[paths[j][i]]) circle($fn=resolution,r=width/2); } hull() { translate(points[paths[j][len(paths[j])-1]]) circle($fn=resolution,r=width/2); translate(points[paths[j][0]]) circle($fn=resolution,r=width/2); } } } else { polygon(points=points,paths=paths); } } module bold_2d(bold,width=0.2,resolution=8) { for(j=[0:$children-1]) { if(bold) { union() { child(j); for(i=[0:resolution-1]) assign(dx=width*cos(360*i/resolution),dy=width*sin(360*i/resolution)) translate([dx,dy]) child(j); } } else { child(j); } } } function 8bit_polyfont(dx=0.1,dy=0.1) = [ [8,8,0,"fixed"],["Decimal Byte","Caret Notation","Character Escape Code","Abbreviation","Name","Bound Box","[points,paths]"] ,[ [ 0,"^@","\0","NUL","Null character",[[0,0],[8,8]],[]] ,[ 1,"^A","", "SOH","Start of Header",[[0,0],[8,8]],[]] ,[ 2,"^B","", "STX","Start of Text",[[0,0],[8,8]],[]] ,[ 3,"^C","", "ETX","End of Text",[[0,0],[8,8]],[]] ,[ 4,"^D","", "EOT","End of Transmission",[[0,0],[8,8]],[]] ,[ 5,"^E","", "ENQ","Enquiry",[[0,0],[8,8]],[]] ,[ 6,"^F","", "ACK","Acknowledgment",[[0,0],[8,8]],[]] ,[ 7,"^G","\a","BEL","Bell",[[0,0],[8,8]],[]] ,[ 8,"^H","\b","BS", "Backspace",[[0,0],[8,8]],[]] ,[ 9,"^I","\t","HT", "Horizontal Tab",[[0,0],[8,8]],[]] ,[ 10,"^J","\n","LF", "Line Feed",[[0,0],[8,8]],[]] ,[ 11,"^K","\v","VT", "Vertical Tab",[[0,0],[8,8]],[]] ,[ 12,"^L","\f","FF", "Form feed",[[0,0],[8,8]],[]] ,[ 13,"^M","\r","CR", "Carriage return",[[0,0],[8,8]],[]] ,[ 14,"^N","", "SO", "Shift Out",[[0,0],[8,8]],[]] ,[ 15,"^O","", "SI", "Shift In",[[0,0],[8,8]],[]] ,[ 16,"^P","", "DLE","Data Link Escape",[[0,0],[8,8]],[]] ,[ 17,"^Q","", "DC1","Device Control 1",[[0,0],[8,8]],[]] ,[ 18,"^R","", "DC2","Device Control 2",[[0,0],[8,8]],[]] ,[ 19,"^S","", "DC3","Device Control 3",[[0,0],[8,8]],[]] ,[ 20,"^T","", "DC4","Device Control 4",[[0,0],[8,8]],[]] ,[ 21,"^U","", "NAK","Negative Acknowledgement",[[0,0],[8,8]],[]] ,[ 22,"^V","", "SYN","Synchronous Idle",[[0,0],[8,8]],[]] ,[ 23,"^W","", "ETB","End of Transmission Block",[[0,0],[8,8]],[]] ,[ 24,"^X","", "CAN","Cancel",[[0,0],[8,8]],[]] ,[ 25,"^Y","", "EM", "End of Medium",[[0,0],[8,8]],[]] ,[ 26,"^Z","", "SUB","Substitute",[[0,0],[8,8]],[]] ,[ 27,"^[","\e","ESC","Escape",[[0,0],[8,8]],[]] ,[ 28,"^\\","", "FS", "File Separator",[[0,0],[8,8]],[]] ,[ 29,"^]","", "GS", "Group Separator",[[0,0],[8,8]],[]] ,[ 30,"^^","", "RS", "Record Separator",[[0,0],[8,8]],[]] ,[ 31,"^_","", "US", "Unit Separator",[[0,0],[8,8]],[]] ,[ 32," "," ", "", "Space",[[0,0],[2,8]],[]] ,[ 33,"!","!", "", "",[[0,0],[8,8]],[ [[3,1],[3,2],[5,2],[5,1] ,[3,3],[3,7],[5,7],[5,3]] ,[[0,1,2,3],[4,5,6,7]] ]] ,[ 34,"\"","\"","", "",[[0,0],[8,8]],[ [[1,4],[1,7],[3,7],[3,4] ,[5,4],[5,7],[7,7],[7,4]] ,[[0,1,2,3],[4,5,6,7]] ]] ,[ 35,"#","#", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[0,2],[0,3],[1,3],[1,5],[0,5],[0,6],[1,6],[1,7],[3,7],[3,6],[5,6],[5,7],[7,7] ,[7,6],[8,6],[8,5],[7,5],[7,3],[8,3],[8,2],[7,2],[7,1],[5,1],[5,2],[3,2],[3,1] ,[3,3],[3,5],[5,5],[5,3]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],[28,29,30,31]] ]] ,[ 36,"$","$", "", "",[[0,0],[8,8]],[ [[3,1],[3,2],[1,2],[1,3],[5,3],[5,4],[2,4],[2,5],[1,5],[1,6],[2,6],[2,7],[3,7],[3,8],[5,8],[5,7],[7,7],[7,6] ,[3,6],[3,5],[6,5],[6,4],[7,4],[7,3],[6,3],[6,2],[5,2],[5,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[ 37,"%","%", "", "",[[0,0],[8,8]],[ [[1,1],[1,3],[2,3],[2,5],[1,5],[1,7],[3,7],[3,5],[4,5],[4,6],[5,6],[5,7],[7,7] ,[7,6],[6,6],[6,5],[5,5],[5,4],[4,4],[4,3],[3,3],[3,2],[2,2],[2,1] ,[5,1],[5,3],[7,3],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],[24,25,26,27]] ]] ,[ 38,"&","&", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,4],[2,4],[2,5],[3,5],[3,6],[2,6],[2,7],[3,7],[3,8],[6,8],[6,7],[7,7],[7,6],[6,6],[6,5],[5,5],[5,4] ,[8,4],[8,3],[7,3],[7,2],[8,2],[8,1],[6,1],[6,2],[5,2],[5,1] ,[3,2],[3,4],[4,4],[4,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],[30,31,32,33]] ]] ,[ 39,"'","'", "", "",[[0,0],[8,8]],[ [[3,4],[3,7],[5,7],[5,4]] ,[[0,1,2,3]] ]] ,[ 40,"(","(", "", "",[[0,0],[8,8]],[ [[3,1],[3,2],[2,2],[2,6],[3,6],[3,7],[6,7],[6,6],[5,6],[5,5],[4,5],[4,3],[5,3],[5,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[ 41,")",")", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[3,2],[3,3],[4,3],[4,5],[3,5],[3,6],[2,6],[2,7],[5,7],[5,6],[6,6],[6,2],[5,2],[5,1],[4,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]] ]] ,[ 42,"*","*", "", "",[[0,0],[8,8]],[ [[1,2],[1,3],[2,3],[2,4],[0,4],[0,5],[2,5],[2,6],[1,6],[1,7],[3,7],[3,6],[5,6],[5,7],[7,7],[7,6],[6,6] ,[6,5],[8,5],[8,4],[6,4],[6,3],[7,3],[7,2],[5,2],[5,3],[3,3],[3,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[ 43,"+","+", "", "",[[0,0],[8,8]],[ [[3,1],[3,3],[1,3],[1,5],[3,5],[3,7],[5,7],[5,5],[7,5],[7,3],[5,3],[5,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[ 44,",",",", "", "",[[0,0],[8,8]],[ [[2,0],[2,1],[3,1],[3,3],[5,3],[5,1],[4,1],[4,0]] ,[[0,1,2,3,4,5,6,7]] ]] ,[ 45,"-","-", "", "",[[0,0],[8,8]],[ [[1,3],[1,5],[7,5],[7,3]] ,[[0,1,2,3]] ]] ,[ 46,".",".", "", "",[[0,0],[8,8]],[ [[3,1],[3,3],[5,3],[5,1]] ,[[0,1,2,3]] ]] ,[ 47,"/","/", "", "",[[0,0],[8,8]],[ [[1,1],[1,3],[2,3],[2,4],[3,4],[3,5],[4,5],[4,6],[5,6],[5,7],[7,7],[7,6],[6,6],[6,5],[5,5],[5,4],[4,4],[4,3],[3,3],[3,2],[2,2],[2,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]] ]] ,[ 48,"0","0", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,2],[6,2],[6,1] ,[3,2],[3,3],[5,3],[5,2] ,[3,4],[3,6],[5,6],[5,5],[4,5],[4,4]] ,[[0,1,2,3,4,5,6,7,8,9,10,11],[12,13,14,15],[16,17,18,19,20,21]] ]] ,[ 49,"1","1", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[3,2],[3,5],[2,5],[2,6],[3,6],[3,7],[5,7],[5,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[ 50,"2","2", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[2,2],[2,3],[3,3],[3,4],[4,4],[4,5],[5,5],[5,6],[3,6],[3,5],[1,5],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,5],[6,5],[6,4],[5,4],[5,3],[4,3],[4,2],[3,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]] ]] ,[ 51,"3","3", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,3],[3,3],[3,2],[5,2],[5,3],[4,3],[4,4],[3,4],[3,5],[4,5],[4,6],[1,6],[1,7],[7,7],[7,6],[6,6],[6,5],[5,5],[5,4],[6,4],[6,3],[7,3],[7,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[ 52,"4","4", "", "",[[0,0],[8,8]],[ [[4,1],[4,2],[1,2],[1,4],[2,4],[2,5],[3,5],[3,6],[4,6],[4,7],[6,7],[6,3],[7,3],[7,2],[6,2],[6,1] ,[3,3],[3,4],[4,4],[4,3]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19]] ]] ,[ 53,"5","5", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,3],[3,3],[3,2],[5,2],[5,4],[1,4],[1,7],[7,7],[7,6],[3,6],[3,5],[6,5],[6,4],[7,4],[7,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[ 54,"6","6", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[6,7],[6,6],[3,6],[3,5],[6,5],[6,4],[7,4],[7,2],[6,2],[6,1] ,[3,2],[3,4],[5,4],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19]] ]] ,[ 55,"7","7", "", "",[[0,0],[8,8]],[ [[2,1],[2,3],[3,3],[3,4],[4,4],[4,5],[5,5],[5,6],[1,6],[1,7],[7,7],[7,5],[6,5],[6,4],[5,4],[5,3],[4,3],[4,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]] ]] ,[ 56,"8","8", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,4],[2,4],[2,5],[1,5],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,5],[6,5],[6,4],[7,4],[7,2],[6,2],[6,1] ,[3,2],[3,4],[5,4],[5,2] ,[3,5],[3,6],[5,6],[5,5]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],[20,21,22,23],[24,25,26,27]] ]] ,[ 57,"9","9", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[4,2],[4,3],[5,3],[5,4],[2,4],[2,5],[1,5],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,3],[6,3],[6,2],[5,2],[5,1] ,[3,5],[3,6],[5,6],[5,5]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],[20,21,22,23]] ]] ,[ 58,":",":", "", "",[[0,0],[8,8]],[ [[3,1],[3,3],[5,3],[5,1] ,[3,4],[3,6],[5,6],[5,4]] ,[[0,1,2,3],[4,5,6,7]] ]] ,[ 59,";",";", "", "",[[0,0],[8,8]],[ [[2,0],[2,1],[3,1],[3,3],[5,3],[5,1],[4,1],[4,0] ,[3,4],[3,6],[5,6],[5,4]] ,[[0,1,2,3,4,5,6,7],[8,9,10,11]] ]] ,[ 60,"<","<", "", "",[[0,0],[8,8]],[ [[5,1],[5,2],[4,2],[4,3],[3,3],[3,4],[2,4],[2,5],[3,5],[3,6],[4,6],[4,7],[5,7],[5,8],[7,8],[7,7],[6,7],[6,6],[5,6],[5,5],[4,5],[4,4],[5,4],[5,3],[6,3],[6,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[ 61,"=","=", "", "",[[0,0],[8,8]],[ [[1,2],[1,3],[7,3],[7,2] ,[1,5],[1,6],[7,6],[7,5]] ,[[0,1,2,3],[4,5,6,7]] ]] ,[ 62,">",">", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[2,2],[2,3],[3,3],[3,4],[4,4],[4,5],[3,5],[3,6],[2,6],[2,7],[1,7],[1,8],[3,8],[3,7],[4,7],[4,6],[5,6],[5,5],[6,5],[6,4],[5,4],[5,3],[4,3],[4,2],[3,2],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[ 63,"?","?", "", "",[[0,0],[8,8]],[ [[3,1],[3,2],[5,2],[5,1] ,[3,3],[3,4],[4,4],[4,5],[5,5],[5,6],[3,6],[3,5],[1,5],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,5],[6,5],[6,4],[5,4],[5,3]] ,[[0,1,2,3],[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]] ]] ,[ 64,"@","@", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,3],[4,3],[4,5],[5,5],[5,6],[3,6],[3,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]] ]] ,[ 65,"A","A", "", "",[[0,0],[8,8]],[ [[1,1],[1,5],[2,5],[2,6],[3,6],[3,7],[5,7],[5,6],[6,6],[6,5],[7,5],[7,1],[5,1],[5,2],[3,2],[3,1] ,[3,3],[3,5],[5,5],[5,3]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19]] ]] ,[ 66,"B","B", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[6,7],[6,6],[7,6],[7,5],[6,5],[6,4],[7,4],[7,2],[6,2],[6,1] ,[3,5],[3,6],[5,6],[5,5] ,[3,2],[3,4],[5,4],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11],[12,13,14,15],[16,17,18,19]] ]] ,[ 67,"C","C", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,5],[5,5],[5,6],[3,6],[3,2],[5,2],[5,3],[7,3],[7,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[ 68,"D","D", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[5,7],[5,6],[6,6],[6,5],[7,5],[7,3],[6,3],[6,2],[5,2],[5,1] ,[3,2],[3,6],[4,6],[4,5],[5,5],[5,3],[4,3],[4,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11],[12,13,14,15,16,17,18,19]] ]] ,[ 69,"E","E", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[7,7],[7,6],[3,6],[3,5],[6,5],[6,4],[3,4],[3,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[ 70,"F","F", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[7,7],[7,6],[3,6],[3,5],[6,5],[6,4],[3,4],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9]] ]] ,[ 71,"G","G", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[7,7],[7,6],[3,6],[3,2],[5,2],[5,3],[4,3],[4,4],[7,4],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[ 72,"H","H", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,5],[5,5],[5,7],[7,7],[7,1],[5,1],[5,4],[3,4],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[ 73,"I","I", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[3,2],[3,6],[1,6],[1,7],[7,7],[7,6],[5,6],[5,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[ 74,"J","J", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,3],[3,3],[3,2],[5,2],[5,6],[4,6],[4,7],[7,7],[7,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13]] ]] ,[ 75,"K","K", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,5],[4,5],[4,6],[5,6],[5,7],[7,7],[7,6],[6,6],[6,5],[5,5],[5,3],[6,3],[6,2],[7,2],[7,1],[5,1],[5,2],[4,2],[4,3],[3,3],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]] ]] ,[ 76,"L","L", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,2],[7,2],[7,1]] ,[[0,1,2,3,4,5]] ]] ,[ 77,"M","M", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,6],[4,6],[4,5],[5,5],[5,6],[6,6],[6,7],[8,7],[8,1],[6,1],[6,4],[5,4],[5,3],[4,3],[4,4],[3,4],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[ 78,"N","N", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,6],[4,6],[4,5],[5,5],[5,7],[7,7],[7,1],[5,1],[5,2],[4,2],[4,3],[3,3],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[ 79,"O","O", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,2],[6,2],[6,1] ,[3,2],[3,6],[5,6],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11],[12,13,14,15]] ]] ,[ 80,"P","P", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[6,7],[6,6],[7,6],[7,4],[6,4],[6,3],[3,3],[3,1] ,[3,4],[3,6],[5,6],[5,4]] ,[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13]] ]] ,[ 81,"Q","Q", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[2,6],[2,7],[6,7],[6,6],[7,6],[7,3],[6,3],[6,2],[7,2],[7,1],[5,1],[5,2],[4,2],[4,1] ,[3,3],[3,6],[5,6],[5,3]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],[18,19,20,21]] ]] ,[ 82,"R","R", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[6,7],[6,6],[7,6],[7,4],[6,4],[6,2],[7,2],[7,1],[5,1],[5,2],[4,2],[4,3],[3,3],[3,1] ,[3,4],[3,6],[5,6],[5,4]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19]] ]] ,[ 83,"S","S", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[5,2],[5,4],[2,4],[2,5],[1,5],[1,6],[2,6],[2,7],[6,7],[6,6],[3,6],[3,5],[6,5],[6,4],[7,4],[7,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[ 84,"T","T", "", "",[[0,0],[8,8]],[ [[3,1],[3,6],[1,6],[1,7],[7,7],[7,6],[5,6],[5,1]] ,[[0,1,2,3,4,5,6,7]] ]] ,[ 85,"U","U", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,2],[5,2],[5,7],[7,7],[7,1]] ,[[0,1,2,3,4,5,6,7]] ]] ,[ 86,"V","V", "", "",[[0,0],[8,8]],[ [[3,1],[3,2],[2,2],[2,3],[1,3],[1,7],[3,7],[3,3],[5,3],[5,7],[7,7],[7,3],[6,3],[6,2],[5,2],[5,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[ 87,"W","W", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,4],[4,4],[4,5],[5,5],[5,4],[6,4],[6,7],[8,7],[8,1],[6,1],[6,2],[5,2],[5,3],[4,3],[4,2],[3,2],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[ 88,"X","X", "", "",[[0,0],[8,8]],[ [[1,1],[1,3],[2,3],[2,5],[1,5],[1,7],[3,7],[3,5],[5,5],[5,7],[7,7],[7,5],[6,5],[6,3],[7,3],[7,1],[5,1],[5,3],[3,3],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[ 89,"Y","Y", "", "",[[0,0],[8,8]],[ [[3,1],[3,4],[2,4],[2,5],[1,5],[1,7],[3,7],[3,5],[5,5],[5,7],[7,7],[7,5],[6,5],[6,4],[5,4],[5,1],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]] ]] ,[ 90,"Z","Z", "", "",[[0,0],[8,8]],[ [[1,1],[1,3],[2,3],[2,4],[3,4],[3,5],[4,5],[4,6],[1,6],[1,7],[7,7],[7,6],[6,6],[6,5],[5,5],[5,4],[4,4],[4,3],[3,3],[3,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]] ]] ,[ 91,"[","[", "", "",[[0,0],[8,8]],[ // ] ] [[2,1],[2,7],[6,7],[6,6],[4,6],[4,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7]] ]] ,[ 92,"\\","\\","", "",[[0,0],[8,8]],[ [[6,1],[6,2],[5,2],[5,3],[4,3],[4,4],[3,4],[3,5],[2,5],[2,6],[1,6],[1,7],[3,7],[3,6],[4,6],[4,5],[5,5],[5,4],[6,4],[6,3],[7,3],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]] ]] ,[ 93,"]","]", "", "",[[0,0],[8,8]],[ // [ [ [[2,1],[2,2],[4,2],[4,6],[2,6],[2,7],[6,7],[6,1]] ,[[0,1,2,3,4,5,6,7]] ]] ,[ 94,"^","^", "", "",[[0,0],[8,8]],[ [[2,4],[2,5] ,[3-dx,5],[3,5+dy] ,[3,6] ,[4-dx,6],[4,6+dy] ,[4,7],[5,7] ,[5,6+dy],[5+dx,6] ,[6,6] ,[6,5+dy],[6+dx,5] ,[7,5],[7,4],[6,4] ,[6,5-dy],[6-dx,5] ,[5,5] ,[5,6-dy],[5-dx,6],[4+dx,6],[4,6-dy] ,[4,5] ,[3+dx,5],[3,5-dy] ,[3,4]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[ 95,"_","_", "", "",[[0,0],[8,8]],[ [[0,0],[0,1],[8,1],[8,0]] ,[[0,1,2,3]] ]] ,[ 96,"`","`", "", "",[[0,0],[8,8]],[ [[2,6],[2,7],[3,7] ,[3,6+dy],[3+dx,6] ,[4,6] ,[4,5+dy],[4+dx,5] ,[5,5],[5,4],[4,4] ,[4,5-dy],[4-dx,5] ,[3,5] ,[3,6-dy],[3-dx,6]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[ 97,"a","a", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,3],[2,3],[2,4],[5,4],[5,5],[2,5],[2,6],[6,6],[6,5],[7,5],[7,1] ,[3,2],[3,3],[5,3],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13],[14,15,16,17]] ]] ,[ 98,"b","b", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,5],[6,5],[6,4],[7,4],[7,2],[6,2],[6,1] ,[3,2],[3,4],[5,4],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13]] ]] ,[ 99,"c","c", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,5],[2,5],[2,6],[6,6],[6,5],[3,5],[3,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[100,"d","d", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,4],[2,4],[2,5],[5,5],[5,7],[7,7],[7,1] ,[3,2],[3,4],[5,4],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13]] ]] ,[101,"e","e", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,5],[2,5],[2,6],[6,6],[6,5],[7,5],[7,3],[3,3],[3,2],[6,2],[6,1] ,[3,4],[3,5],[5,5],[5,4]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13],[14,15,16,17]] ]] ,[102,"f","f", "", "",[[0,0],[8,8]],[ [[3,1],[3,4],[2,4],[2,5],[3,5],[3,6],[4,6],[4,7],[7,7],[7,6],[5,6],[5,5],[7,5],[7,4],[5,4],[5,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[103,"g","g", "", "",[[0,0],[8,8]],[ [[1,0],[1,1],[5,1],[5,2],[2,2],[2,3],[1,3],[1,5],[2,5],[2,6],[6,6],[6,5],[7,5],[7,1],[6,1],[6,0] ,[3,3],[3,5],[5,5],[5,3]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],[16,17,18,19]] ]] ,[104,"h","h", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,5],[6,5],[6,4],[7,4],[7,1],[5,1],[5,4],[3,4],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11]] ]] ,[105,"i","i", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[3,2],[3,4],[2,4],[2,5],[5,5],[5,2],[6,2],[6,1] ,[3,6],[3,7],[5,7],[5,6]] ,[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13]] ]] ,[106,"j","j", "", "",[[0,0],[8,8]],[ [[2,0],[2,1],[5,1],[5,5],[7,5],[7,1],[6,1],[6,0] ,[5,6],[5,7],[7,7],[7,6]] ,[[0,1,2,3,4,5,6,7],[8,9,10,11]] ]] ,[107,"k","k", "", "",[[0,0],[8,8]],[ [[1,1],[1,7],[3,7],[3,4],[4,4],[4,5],[6,5],[6,4],[5,4],[5,3],[6,3],[6,2],[7,2],[7,1],[5,1],[5,2],[4,2],[4,3],[3,3],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[108,"l","l", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[3,2],[3,6],[2,6],[2,7],[5,7],[5,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9]] ]] ,[109,"m","m", "", "",[[0,0],[8,8]],[ [[1,1],[1,6],[3,6],[3,5],[5,5],[5,6],[7,6],[7,5],[8,5],[8,1],[6,1],[6,3],[5,3],[5,2],[4,2],[4,3],[3,3],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]] ]] ,[110,"n","n", "", "",[[0,0],[8,8]],[ [[1,1],[1,6],[6,6],[6,5],[7,5],[7,1],[5,1],[5,5],[3,5],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9]] ]] ,[111,"o","o", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,5],[2,5],[2,6],[6,6],[6,5],[7,5],[7,2],[6,2],[6,1] ,[3,2],[3,5],[5,5],[5,2]] ,[[0,1,2,3,4,5,6,7,8,9,10,11],[12,13,14,15]] ]] ,[112,"p","p", "", "",[[0,0],[8,8]],[ [[1,0],[1,6],[6,6],[6,5],[7,5],[7,3],[6,3],[6,2],[3,2],[3,0] ,[3,3],[3,5],[5,5],[5,3]] ,[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13]] ]] ,[113,"q","q", "", "",[[0,0],[8,8]],[ [[5,0],[5,2],[2,2],[2,3],[1,3],[1,5],[2,5],[2,6],[7,6],[7,0] ,[3,3],[3,5],[5,5],[5,3]] ,[[0,1,2,3,4,5,6,7,8,9],[10,11,12,13]] ]] ,[114,"r","r", "", "",[[0,0],[8,8]],[ [[1,1],[1,6],[6,6],[6,5],[7,5],[7,4],[5,4],[5,5],[3,5],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9]] ]] ,[115,"s","s", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[5,2],[5,3],[2,3],[2,4],[1,4],[1,5],[2,5],[2,6],[7,6],[7,5],[3,5],[3,4],[6,4],[6,3],[7,3],[7,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[116,"t","t", "", "",[[0,0],[8,8]],[ [[4,1],[4,2],[3,2],[3,5],[1,5],[1,6],[3,6],[3,7],[5,7],[5,6],[7,6],[7,5],[5,5],[5,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[117,"u","u", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[1,2],[1,6],[3,6],[3,2],[5,2],[5,6],[7,6],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9]] ]] ,[118,"v","v", "", "",[[0,0],[8,8]],[ [[3,1],[3,2],[2,2],[2,3],[1,3],[1,6],[3,6],[3,3],[5,3],[5,6],[7,6],[7,3],[6,3],[6,2],[5,2],[5,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]] ]] ,[119,"w","w", "", "",[[0,0],[8,8]],[ [[2,1],[2,3],[1,3],[1,6],[3,6],[3,4],[4,4],[4,5],[5,5],[5,4],[6,4],[6,6],[8,6],[8,3],[7,3],[7,1],[5,1],[5,2],[4,2],[4,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[120,"x","x", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[2,2],[2,3],[3,3],[3,4],[2,4],[2,5],[1,5],[1,6],[3,6],[3,5],[5,5],[5,6],[7,6],[7,5],[6,5],[6,4],[5,4],[5,3],[6,3],[6,2],[7,2],[7,1],[5,1],[5,2],[3,2],[3,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]] ]] ,[121,"y","y", "", "",[[0,0],[8,8]],[ [[1,0],[1,1],[4,1],[4,2],[2,2],[2,3],[1,3],[1,6],[3,6],[3,3],[5,3],[5,6],[7,6],[7,2],[6,2],[6,1],[5,1],[5,0]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]] ]] ,[122,"z","z", "", "",[[0,0],[8,8]],[ [[1,1],[1,2],[2,2],[2,3],[3,3],[3,4],[4,4],[4,5],[1,5],[1,6],[7,6],[7,5],[6,5],[6,4],[5,4],[5,3],[4,3],[4,2],[7,2],[7,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[123,"{","{", "", "",[[0,0],[8,8]],[ [[4,1],[4,2],[3,2],[3,4],[2,4],[2,5],[3,5],[3,7],[4,7],[4,8],[6,8],[6,7],[5,7],[5,5],[4,5],[4,4],[5,4],[5,2],[6,2],[6,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[124,"|","|", "", "",[[0,0],[8,8]],[ [[3,0],[3,8],[5,8],[5,0]] ,[[0,1,2,3]] ]] ,[125,"}","}", "", "",[[0,0],[8,8]],[ [[2,1],[2,2],[3,2],[3,4],[4,4],[4,5],[3,5],[3,7],[2,7],[2,8],[4,8],[4,7],[5,7],[5,5],[6,5],[6,4],[5,4],[5,2],[4,2],[4,1]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[126,"~","~", "", "",[[0,0],[8,8]],[ [[2,5],[2,6] ,[3-dx,6],[3,6+dy] ,[3,7],[5,7],[5,6] ,[6-dx,6],[6,6+dy] ,[6,7],[7,7],[7,6] ,[6+dx,6],[6,6-dy] ,[6,5],[4,5],[4,6] ,[3+dx,6],[3,6-dy] ,[3,5]] ,[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]] ]] ,[127,"^?","", "DEL","Delete",[[0,0],[8,8]],[]] ] ]; openscad-2013.01+dfsg.orig/libraries/MCAD/trochoids.scad0000644000175000017500000002225711640737401022255 0ustar chrysnchrysn//=========================================== // Public Domain Epi- and Hypo- trochoids in OpenSCAD // version 1.0 // by Matt Moses, 2011, mmoses152@gmail.com // http://www.thingiverse.com/thing:8067 // // This file is public domain. Use it for any purpose, including commercial // applications. Attribution would be nice, but is not required. There is // no warranty of any kind, including its correctness, usefulness, or safety. // // An EPITROCHOID is a curve traced by a point // fixed at a distance "d" // to the center of a circle of radius "r" // as the circle rolls // outside another circle of radius "R". // // An HYPOTROCHOID is a curve traced by a point // fixed at a distance "d" // to the center of a circle of radius "r" // as the circle rolls // inside another circle of radius "R". // // An EPICYCLOID is an epitrochoid with d = r. // // An HYPOCYCLOID is an hypotrochoid with d = r. // // See http://en.wikipedia.org/wiki/Epitrochoid // and http://en.wikipedia.org/wiki/Hypotrochoid // // Beware the polar forms of the equations on Wikipedia... // They are correct, but theta is measured to the center of the small disk!! //=========================================== // There are several different methods for extruding. The best are probably // the ones using linear extrude. //=========================================== // Demo - draws one of each, plus some little wheels and sticks. // // Fun stuff to try: // Animate, try FPS = 5 and Steps = 200 // R = 2, r = 1, d = 0.2 // R = 4, r = 1, d = 1 // R = 2, r = 1, d = 0.5 // // What happens when you make d > r ?? // What happens when d < 0 ?? // What happens when r < 0 ?? // //=========================================== $fn = 30; thickness = 2; R = 4; r = 1; d = 1; n = 60; // number of wedge segments alpha = 360*$t; color([0, 0, 1]) translate([0, 0, -0.5]) cylinder(h = 1, r= R, center = true); color([0, 1, 0]) epitrochoid(R,r,d,n,thickness); color([1, 0, 0]) translate([ (R+r)*cos(alpha) , (R+r)*sin(alpha), -0.5]) { rotate([0, 0, alpha + R/r*alpha]) { cylinder(h = 1, r = r, center = true); translate([-d, 0, 1.5]) { cylinder(h = 2.2, r = 0.1, center = true); } } } translate([2*(abs(R) + abs(r) + abs(d)), 0, 0]){ color([0, 0, 1]) translate([0, 0, -0.5]) difference() { cylinder(h = 1, r = 1.1*R, center = true); cylinder(h = 1.1, r= R, center = true); } color([0, 1, 0]) hypotrochoid(R,r,d,n,thickness); color([1, 0, 0]) translate([ (R-r)*cos(alpha) , (R-r)*sin(alpha), -0.5]) { rotate([0, 0, alpha - R/r*alpha]) { cylinder(h = 1, r = r, center = true); translate([d, 0, 1.5]) { cylinder(h = 2.2, r = 0.1, center = true); } } } } // This just makes a twisted hypotrochoid translate([0,14, 0]) hypotrochoidLinear(4, 1, 1, 40, 40, 10, 30); // End of Demo Section //=========================================== //=========================================== // Epitrochoid // module epitrochoid(R, r, d, n, thickness) { dth = 360/n; for ( i = [0:n-1] ) { polyhedron(points = [[0,0,0], [(R+r)*cos(dth*i) - d*cos((R+r)/r*dth*i), (R+r)*sin(dth*i) - d*sin((R+r)/r*dth*i), 0], [(R+r)*cos(dth*(i+1)) - d*cos((R+r)/r*dth*(i+1)), (R+r)*sin(dth*(i+1)) - d*sin((R+r)/r*dth*(i+1)), 0], [0,0,thickness], [(R+r)*cos(dth*i) - d*cos((R+r)/r*dth*i), (R+r)*sin(dth*i) - d*sin((R+r)/r*dth*i), thickness], [(R+r)*cos(dth*(i+1)) - d*cos((R+r)/r*dth*(i+1)), (R+r)*sin(dth*(i+1)) - d*sin((R+r)/r*dth*(i+1)), thickness]], triangles = [[0, 2, 1], [0, 1, 3], [3, 1, 4], [3, 4, 5], [0, 3, 2], [2, 3, 5], [1, 2, 4], [2, 5, 4]]); } } //=========================================== //=========================================== // Hypotrochoid // module hypotrochoid(R, r, d, n, thickness) { dth = 360/n; for ( i = [0:n-1] ) { polyhedron(points = [[0,0,0], [(R-r)*cos(dth*i) + d*cos((R-r)/r*dth*i), (R-r)*sin(dth*i) - d*sin((R-r)/r*dth*i), 0], [(R-r)*cos(dth*(i+1)) + d*cos((R-r)/r*dth*(i+1)), (R-r)*sin(dth*(i+1)) - d*sin((R-r)/r*dth*(i+1)), 0], [0,0,thickness], [(R-r)*cos(dth*i) + d*cos((R-r)/r*dth*i), (R-r)*sin(dth*i) - d*sin((R-r)/r*dth*i), thickness], [(R-r)*cos(dth*(i+1)) + d*cos((R-r)/r*dth*(i+1)), (R-r)*sin(dth*(i+1)) - d*sin((R-r)/r*dth*(i+1)), thickness]], triangles = [[0, 2, 1], [0, 1, 3], [3, 1, 4], [3, 4, 5], [0, 3, 2], [2, 3, 5], [1, 2, 4], [2, 5, 4]]); } } //=========================================== //=========================================== // Epitrochoid Wedge with Bore // module epitrochoidWBore(R, r, d, n, p, thickness, rb) { dth = 360/n; union() { for ( i = [0:p-1] ) { polyhedron(points = [[rb*cos(dth*i), rb*sin(dth*i),0], [(R+r)*cos(dth*i) - d*cos((R+r)/r*dth*i), (R+r)*sin(dth*i) - d*sin((R+r)/r*dth*i), 0], [(R+r)*cos(dth*(i+1)) - d*cos((R+r)/r*dth*(i+1)), (R+r)*sin(dth*(i+1)) - d*sin((R+r)/r*dth*(i+1)), 0], [rb*cos(dth*(i+1)), rb*sin(dth*(i+1)), 0], [rb*cos(dth*i), rb*sin(dth*i), thickness], [(R+r)*cos(dth*i) - d*cos((R+r)/r*dth*i), (R+r)*sin(dth*i) - d*sin((R+r)/r*dth*i), thickness], [(R+r)*cos(dth*(i+1)) - d*cos((R+r)/r*dth*(i+1)), (R+r)*sin(dth*(i+1)) - d*sin((R+r)/r*dth*(i+1)), thickness], [rb*cos(dth*(i+1)), rb*sin(dth*(i+1)), thickness]], triangles = [[0, 1, 4], [4, 1, 5], [1, 2, 5], [5, 2, 6], [2, 3, 7], [7, 6, 2], [3, 0, 4], [4, 7, 3], [4, 5, 7], [7, 5, 6], [0, 3, 1], [1, 3, 2]]); } } } //=========================================== //=========================================== // Epitrochoid Wedge with Bore, Linear Extrude // module epitrochoidWBoreLinear(R, r, d, n, p, thickness, rb, twist) { dth = 360/n; linear_extrude(height = thickness, convexity = 10, twist = twist) { union() { for ( i = [0:p-1] ) { polygon(points = [[rb*cos(dth*i), rb*sin(dth*i)], [(R+r)*cos(dth*i) - d*cos((R+r)/r*dth*i), (R+r)*sin(dth*i) - d*sin((R+r)/r*dth*i)], [(R+r)*cos(dth*(i+1)) - d*cos((R+r)/r*dth*(i+1)), (R+r)*sin(dth*(i+1)) - d*sin((R+r)/r*dth*(i+1))], [rb*cos(dth*(i+1)), rb*sin(dth*(i+1))]], paths = [[0, 1, 2, 3]], convexity = 10); } } } } //=========================================== //=========================================== // Epitrochoid Wedge, Linear Extrude // module epitrochoidLinear(R, r, d, n, p, thickness, twist) { dth = 360/n; linear_extrude(height = thickness, convexity = 10, twist = twist) { union() { for ( i = [0:p-1] ) { polygon(points = [[0, 0], [(R+r)*cos(dth*i) - d*cos((R+r)/r*dth*i), (R+r)*sin(dth*i) - d*sin((R+r)/r*dth*i)], [(R+r)*cos(dth*(i+1)) - d*cos((R+r)/r*dth*(i+1)), (R+r)*sin(dth*(i+1)) - d*sin((R+r)/r*dth*(i+1))]], paths = [[0, 1, 2]], convexity = 10); } } } } //=========================================== //=========================================== // Hypotrochoid Wedge with Bore // module hypotrochoidWBore(R, r, d, n, p, thickness, rb) { dth = 360/n; union() { for ( i = [0:p-1] ) { polyhedron(points = [[rb*cos(dth*i), rb*sin(dth*i),0], [(R-r)*cos(dth*i) + d*cos((R-r)/r*dth*i), (R-r)*sin(dth*i) - d*sin((R-r)/r*dth*i), 0], [(R-r)*cos(dth*(i+1)) + d*cos((R-r)/r*dth*(i+1)), (R-r)*sin(dth*(i+1)) - d*sin((R-r)/r*dth*(i+1)), 0], [rb*cos(dth*(i+1)), rb*sin(dth*(i+1)), 0], [rb*cos(dth*i), rb*sin(dth*i), thickness], [(R-r)*cos(dth*i) + d*cos((R-r)/r*dth*i), (R-r)*sin(dth*i) - d*sin((R-r)/r*dth*i), thickness], [(R-r)*cos(dth*(i+1)) + d*cos((R-r)/r*dth*(i+1)), (R-r)*sin(dth*(i+1)) - d*sin((R-r)/r*dth*(i+1)), thickness], [rb*cos(dth*(i+1)), rb*sin(dth*(i+1)), thickness]], triangles = [[0, 1, 4], [4, 1, 5], [1, 2, 5], [5, 2, 6], [2, 3, 7], [7, 6, 2], [3, 0, 4], [4, 7, 3], [4, 5, 7], [7, 5, 6], [0, 3, 1], [1, 3, 2]]); } } } //=========================================== //=========================================== // Hypotrochoid Wedge with Bore, Linear Extrude // module hypotrochoidWBoreLinear(R, r, d, n, p, thickness, rb, twist) { dth = 360/n; linear_extrude(height = thickness, convexity = 10, twist = twist) { union() { for ( i = [0:p-1] ) { polygon(points = [[rb*cos(dth*i), rb*sin(dth*i)], [(R-r)*cos(dth*i) + d*cos((R-r)/r*dth*i), (R-r)*sin(dth*i) - d*sin((R-r)/r*dth*i)], [(R-r)*cos(dth*(i+1)) + d*cos((R-r)/r*dth*(i+1)), (R-r)*sin(dth*(i+1)) - d*sin((R-r)/r*dth*(i+1))], [rb*cos(dth*(i+1)), rb*sin(dth*(i+1))]], paths = [[0, 1, 2, 3]], convexity = 10); } } } } //=========================================== //=========================================== // Hypotrochoid Wedge, Linear Extrude // module hypotrochoidLinear(R, r, d, n, p, thickness, twist) { dth = 360/n; linear_extrude(height = thickness, convexity = 10, twist = twist) { union() { for ( i = [0:p-1] ) { polygon(points = [[0, 0], [(R-r)*cos(dth*i) + d*cos((R-r)/r*dth*i), (R-r)*sin(dth*i) - d*sin((R-r)/r*dth*i)], [(R-r)*cos(dth*(i+1)) + d*cos((R-r)/r*dth*(i+1)), (R-r)*sin(dth*(i+1)) - d*sin((R-r)/r*dth*(i+1))]], paths = [[0, 1, 2]], convexity = 10); } } } } //=========================================== openscad-2013.01+dfsg.orig/libraries/MCAD/regular_shapes.scad0000644000175000017500000001274111712607402023255 0ustar chrysnchrysn/* * OpenSCAD Shapes Library (www.openscad.org) * Copyright (C) 2010-2011 Giles Bathgate, Elmo Mäntynen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, * LGPL version 2.1, or (at your option) any later version of the GPL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ // 2D regular shapes module triangle(radius) { o=radius/2; //equivalent to radius*sin(30) a=radius*sqrt(3)/2; //equivalent to radius*cos(30) polygon(points=[[-a,-o],[0,radius],[a,-o]],paths=[[0,1,2]]); } module reg_polygon(sides,radius) { function dia(r) = sqrt(pow(r*2,2)/2); //sqrt((r*2^2)/2) if only we had an exponention op if(sides<2) square([radius,0]); if(sides==3) triangle(radius); if(sides==4) square([dia(radius),dia(radius)],center=true); if(sides>4) circle(r=radius,$fn=sides); } module pentagon(radius) { reg_polygon(5,radius); } module hexagon(radius) { reg_polygon(6,radius); } module heptagon(radius) { reg_polygon(7,radius); } module octagon(radius) { reg_polygon(8,radius); } module nonagon(radius) { reg_polygon(9,radius); } module decagon(radius) { reg_polygon(10,radius); } module hendecagon(radius) { reg_polygon(11,radius); } module dodecagon(radius) { reg_polygon(12,radius); } module ring(inside_diameter, thickness){ difference(){ circle(r=(inside_diameter+thickness*2)/2); circle(r=inside_diameter/2); } } module ellipse(width, height) { scale([1, height/width, 1]) circle(r=width/2); } // The ratio of lenght and width is about 1.39 for a real egg module egg_outline(width, length){ translate([0, width/2, 0]) union(){ rotate([0, 0, 180]) difference(){ ellipse(width, 2*length-width); translate([-length/2, 0, 0]) square(length); } circle(r=width/2); } } //3D regular shapes module cone(height, radius, center = false) { cylinder(height, radius, 0, center); } module oval_prism(height, rx, ry, center = false) { scale([1, rx/ry, 1]) cylinder(h=height, r=ry, center=center); } module oval_tube(height, rx, ry, wall, center = false) { difference() { scale([1, ry/rx, 1]) cylinder(h=height, r=rx, center=center); translate([0,0,-height/2]) scale([(rx-wall)/rx, (ry-wall)/rx, 2]) cylinder(h=height, r=rx, center=center); } } module cylinder_tube(height, radius, wall, center = false) { tubify(radius,wall) cylinder(h=height, r=radius, center=center); } //Tubifies any regular prism module tubify(radius,wall) { difference() { child(0); translate([0, 0, -0.1]) scale([(radius-wall)/radius, (radius-wall)/radius, 2]) child(0); } } module triangle_prism(height,radius) { linear_extrude(height=height) triangle(radius); } module triangle_tube(height,radius,wall) { tubify(radius,wall) triangle_prism(height,radius); } module pentagon_prism(height,radius) { linear_extrude(height=height) pentagon(radius); } module pentagon_tube(height,radius,wall) { tubify(radius,wall) pentagon_prism(height,radius); } module hexagon_prism(height,radius) { linear_extrude(height=height) hexagon(radius); } module hexagon_tube(height,radius,wall) { tubify(radius,wall) hexagon_prism(height,radius); } module heptagon_prism(height,radius) { linear_extrude(height=height) heptagon(radius); } module heptagon_tube(height,radius,wall) { tubify(radius,wall) heptagon_prism(height,radius); } module octagon_prism(height,radius) { linear_extrude(height=height) octagon(radius); } module octagon_tube(height,radius,wall) { tubify(radius,wall) octagon_prism(height,radius); } module nonagon_prism(height,radius) { linear_extrude(height=height) nonagon(radius); } module decagon_prism(height,radius) { linear_extrude(height=height) decagon(radius); } module hendecagon_prism(height,radius) { linear_extrude(height=height) hendecagon(radius); } module dodecagon_prism(height,radius) { linear_extrude(height=height) dodecagon(radius); } module torus(outerRadius, innerRadius) { r=(outerRadius-innerRadius)/2; rotate_extrude() translate([innerRadius+r,0,0]) circle(r); } module torus2(r1, r2) { rotate_extrude() translate([r1,0,0]) circle(r2); } module oval_torus(inner_radius, thickness=[0, 0]) { rotate_extrude() translate([inner_radius+thickness[0]/2,0,0]) ellipse(width=thickness[0], height=thickness[1]); } module triangle_pyramid(radius) { o=radius/2; //equivalent to radius*sin(30) a=radius*sqrt(3)/2; //equivalent to radius*cos(30) polyhedron(points=[[-a,-o,-o],[a,-o,-o],[0,radius,-o],[0,0,radius]],triangles=[[0,1,2],[1,2,3],[0,1,3],[0,2,3]]); } module square_pyramid(base_x, base_y,height) { w=base_x/2; h=base_y/2; polyhedron(points=[[-w,-h,0],[-w,h,0],[w,h,0],[w,-h,0],[0,0,height]],triangles=[[0,3,2,1], [0,1,4], [1,2,4], [2,3,4], [3,0,4]]); } module egg(width, lenght){ rotate_extrude() difference(){ egg_outline(width, lenght); translate([-lenght, 0, 0]) cube(2*lenght, center=true); } } // Tests: test_square_pyramid(){square_pyramid(10, 20, 30);} openscad-2013.01+dfsg.orig/libraries/MCAD/3d_triangle.scad0000644000175000017500000003172211712577240022452 0ustar chrysnchrysn// Enhancement of OpenSCAD Primitives Solid with Trinagles // Copyright (C) 2011 Rene BAUMANN, Switzerland // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; If not, see // or write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // ================================================================ // // File providing functions and modules to draw 3D - triangles // created in the X-Y plane with hight h, using various triangle // specification methods. // Standard traingle geometrical definition is used. Vertices are named A,B,C, // side a is opposite vertex A a.s.o. the angle at vertex A is named alpha, // B(beta), C(gamma). // // This SW is a contribution to the Free Software Community doing a marvelous // job of giving anyone access to knowledge and tools to educate himselfe. // // Author: Rene Baumann // Date: 11.09.2011 // Edition: 0.3 11.09.2011 For review by Marius // Edition: 0.4 11.11.2011 Ref to GPL2.1 added // // -------------------------------------------------------------------------------------- // // =========================================== // // FUNCTION: 3dtri_sides2coord // DESCRIPTION: // Enter triangle sides a,b,c and to get the A,B,C - corner // co-ordinates. The trinagle's c-side lies on the x-axis // and A-corner in the co-ordinates center [0,0,0]. Geometry rules // required that a + b is greater then c. The traingle's vertices are // computed such that it is located in the X-Y plane, side c is on the // positive x-axis. // PARAMETER: // a : real length of side a // b : real length of side b // c : real length of side c // RETURNS: // vertices : [Acord,Bcord,Ccord] Array of vertices coordinates // // COMMENT: // vertices = 3dtri_sides2coord (3,4,5); // vertices[0] : Acord vertex A cordinates the like [x,y,z] // ------------------------------------------------------------------------------------- // function 3dtri_sides2coord (a,b,c) = [ [0,0,0], [c,0,0], [(pow(c,2)+pow(a,2)-pow(b,2))/(2*c),sqrt ( pow(a,2) - pow((pow(c,2)+pow(a,2)-pow(b,2))/(2*c),2)),0]]; // // // =========================================== // // FUNCTION: 3dtri_centerOfGravityCoord // DESCRIPTION: // Enter triangle A,B,C - corner coordinates to get the // triangles Center of Gravity coordinates. It is assumed // the triangle is parallel to the X-Y plane. The function // returns always zero for the z-coordinate // PARAMETER: // Acord : [x,y,z] Coordinates of vertex A // Bcord : [x,y,z] Coordinates of vertex B // Ccord : [x,y,z] Coordinates of vertex C // RETURNS: // CG : [x,y,0] Center of gravity coordinate in X-Y-plane // // COMMENT: // vertices = 3dtri_sides2coord (3,4,5); // cg = 3dtri_centerOfGravityCoord(vertices[0],vertices[1],vertices[2]); // ------------------------------------------------------------------------------------- // function 3dtri_centerOfGravityCoord (Acord,Bcord,Ccord) = [ (Acord[0]+Bcord[0]+Ccord[0])/3,(Acord[1]+Bcord[1]+Ccord[1])/3,0]; // // // =========================================== // // FUNCTION: 3dtri_centerOfcircumcircle // DESCRIPTION: // Enter triangle A,B,C - corner coordinates to get the // circum circle coordinates. It is assumed // the triangle is parallel to the X-Y plane. The function // returns always zero for the z-coordinate // PARAMETER: // Acord : [x,y,z] Coordinates of vertex A // Bcord : [x,y,z] Coordinates of vertex B // Ccord : [x,y,z] Coordinates of vertex C // RETURNS: // cc : [x,y,0] Circumcircle center // // COMMENT: // vertices = 3dtri_sides2coord (3,4,5); // cc = 3dtri_centerOfcircumcircle (vertices[0],vertices[1],vertices[2]); // ------------------------------------------------------------------------------------- // function 3dtri_centerOfcircumcircle (Acord,Bcord,Ccord) = [0.5*Bcord[0], 0.5*((pow(Ccord[1],2)+pow(Ccord[0],2)-Bcord[0]*Ccord[0])/Ccord[1]), 0]; // // // // =========================================== // // FUNCTION: 3dtri_radiusOfcircumcircle // DESCRIPTION: // Provides the triangle's radius from circumcircle to the vertices. // It is assumed the triangle is parallel to the X-Y plane. The function // returns always zero for the z-coordinate // PARAMETER: // Vcord : [x,y,z] Coordinates of a vertex A or B,C // CCcord : [x,y,z] Coordinates of circumcircle // r : Radius at vertices if round corner triangle used, // else enter "0" // RETURNS: // cr : Circumcircle radius // // COMMENT: Calculate circumcircle radius of trinagle with round vertices having // radius R = 2 // vertices = 3dtri_sides2coord (3,4,5); // cc = 3dtri_centerOfcircumcircle (vertices[0],vertices[1],vertices[2]); // cr = 3dtri_radiusOfcircumcircle (vertices[0],cc,2); // ------------------------------------------------------------------------------------- // function 3dtri_radiusOfcircumcircle (Vcord,CCcord,R) = sqrt(pow(CCcord[0]-Vcord[0],2)+pow(CCcord[1]-Vcord[1],2))+ R; // // // // =========================================== // // FUNCTION: 3dtri_radiusOfIn_circle // DESCRIPTION: // Enter triangle A,B,C - corner coordinates to get the // in-circle radius. It is assumed the triangle is parallel to the // X-Y plane. The function always returns zero for the z-coordinate. // Formula used for inner circle radius: r = 2A /(a+b+c) // PARAMETER: // Acord : [x,y,z] Coordinates of vertex A // Bcord : [x,y,z] Coordinates of vertex B // Ccord : [x,y,z] Coordinates of vertex C // // RETURNS: // ir : real radius of in-circle // // COMMENT: // vertices = 3dtri_sides2coord (3,4,5); // ir = 3dtri_radiusOfIn_circle (vertices[0],vertices[1],vertices[2]); // ------------------------------------------------------------------------------------- // function 3dtri_radiusOfIn_circle (Acord,Bcord,Ccord) = Bcord[0]*Ccord[1]/(Bcord[0]+sqrt(pow(Ccord[0]-Bcord[0],2)+pow(Ccord[1],2))+ sqrt(pow(Ccord[0],2)+pow(Ccord[1],2))); // // // // =========================================== // // FUNCTION: 3dtri_centerOfIn_circle // DESCRIPTION: // Enter triangle A,B,C - corner coordinates to get the // in-circle coordinates. It is assumed // the triangle is parallel to the X-Y plane. The function // returns always zero for the z-coordinate // PARAMETER: // Acord : [x,y,z] Coordinates of vertex A // Bcord : [x,y,z] Coordinates of vertex B // Ccord : [x,y,z] Coordinates of vertex C // r : real radius of in-circle // RETURNS: // ic : [x,y,0] In-circle center co-ordinates // // COMMENT: // vertices = 3dtri_sides2coord (3,4,5); // ir = 3dtri_radiusOfIn_circle (vertices[0],vertices[1],vertices[2]); // ic = 3dtri_centerOfIn_circle (vertices[0],vertices[1],vertices[2],ir); // ------------------------------------------------------------------------------------- // function 3dtri_centerOfIn_circle (Acord,Bcord,Ccord,r) = [(Bcord[0]+sqrt(pow(Ccord[0]-Bcord[0],2)+pow(Ccord[1],2))+ sqrt(pow(Ccord[0],2)+pow(Ccord[1],2)))/2-sqrt(pow(Ccord[0]-Bcord[0],2)+pow(Ccord[1],2)),r,0]; // // // ============================================ // // MODULE: 3dtri_draw // DESCRIPTION: // Draw a standard solid triangle with A,B,C - vertices specified by its // co-ordinates and height "h", as given by the input parameters. // PARAMETER: // Acord : [x,y,z] Coordinates of vertex A // Bcord : [x,y,z] Coordinates of vertex B // Ccord : [x,y,z] Coordinates of vertex C // h : real Hight of the triangle // RETURNS: // none // // COMMENT: // You might use the result from function 3dtri_sides2coord // to call module 3dtri_draw ( vertices[0],vertices[1],vertices[2], h) // ------------------------------------------------------------------------------------- // module 3dtri_draw ( Acord, Bcord, Ccord, h) { polyhedron (points=[Acord,Bcord,Ccord, Acord+[0,0,h],Bcord+[0,0,h],Ccord+[0,0,h]], triangles=[ [0,1,2],[0,2,3],[3,2,5], [3,5,4],[1,5,2],[4,5,1], [4,1,0],[0,3,4]]); }; // // // ============================================== // // MODULE: 3dtri_rnd_draw // DESCRIPTION: // Draw a round corner triangle with A,B,C - vertices specified by its // co-ordinates, height h and round vertices having radius "r". // As specified by the input parameters. // Please note, the tringles side lenght gets extended by "2 * r", // and the vertices coordinates define the centers of the // circles with radius "r". // PARAMETER: // Acord : [x,y,z] Coordinates of vertex A // Bcord : [x,y,z] Coordinates of vertex B // Ccord : [x,y,z] Coordinates of vertex C // h : real Hight of the triangle // r : real Radius from vertices coordinates // RETURNS: // none // // COMMENT: // You might use the result from function 3dtri_sides2coord // to call module 3dtri_rnd_draw ( vertices[0],vertices[1],vertices[2], h, r) // ------------------------------------------------------------------------------------- // module 3dtri_rnd_draw ( Acord, Bcord, Ccord, h, r) { Avect=Ccord-Bcord; // vector pointing from vertex B to vertex C p0=Acord + [0,-r,0]; p1=Bcord + [0,-r,0]; p2=Bcord + [r*Avect[1]/sqrt(pow(Avect[0],2)+pow(Avect[1],2)), -r*Avect[0]/sqrt(pow(Avect[0],2)+pow(Avect[1],2)) ,0]; p3=Ccord + [r*Avect[1]/sqrt(pow(Avect[0],2)+pow(Avect[1],2)), -r*Avect[0]/sqrt(pow(Avect[0],2)+pow(Avect[1],2)) ,0]; p4=Ccord +[- r*Ccord[1]/sqrt(pow(Ccord[0],2)+pow(Ccord[1],2)), r*Ccord[0]/sqrt(pow(Ccord[0],2)+pow(Ccord[1],2)) ,0]; p5=Acord + [- r*Ccord[1]/sqrt(pow(Ccord[0],2)+pow(Ccord[1],2)), r*Ccord[0]/sqrt(pow(Ccord[0],2)+pow(Ccord[1],2)) ,0]; bottom_triangles = [[0,1,2],[0,2,3],[0,3,4],[0,4,5]]; c_side_triangles = [[7,1,0],[0,6,7]]; a_side_triangles = [[2,8,3],[8,9,3]]; b_side_triangles = [[4,10,5],[10,11,5]]; A_edge_triangles = [[0,5,11],[0,11,6]]; B_edge_triangles = [[1,7,2],[2,7,8]]; C_edge_triangles = [[3,9,4],[9,10,4]]; top_triangles = [[11,7,6],[11,8,7],[11,10,8],[8,10,9]]; union () { polyhedron (points=[p0,p1,p2,p3,p4,p5, p0+[0,0,h],p1+[0,0,h],p2+[0,0,h],p3+[0,0,h],p4+[0,0,h],p5+[0,0,h]], triangles=[ bottom_triangles[0],bottom_triangles[1],bottom_triangles[2],bottom_triangles[3], A_edge_triangles[0],A_edge_triangles[1], c_side_triangles[0],c_side_triangles[1], B_edge_triangles[0],B_edge_triangles[1], a_side_triangles[0],a_side_triangles[1], C_edge_triangles[0],C_edge_triangles[1], b_side_triangles[0],b_side_triangles[1], top_triangles[0],top_triangles[1],top_triangles[2],top_triangles[3]]); translate(Acord) cylinder(r1=r,r2=r,h=h,center=false); translate(Bcord) cylinder(r1=r,r2=r,h=h,center=false); translate(Ccord) cylinder(r1=r,r2=r,h=h,center=false); }; } // // ============================================== // // Demo Application - copy into new file and uncomment or uncomment here but // without uncommenting the use <...> statement, then press F6 - Key // // use ; //$fn=50; // h =4; // r=2; // echo ("Draws a right angle triangle with its circumcircle and in-circle"); // echo ("The calculated co-ordinates and radius are show in this console window"); // echo ("Geometry rules for a right angle triangle say, that the circumcircle is the"); // echo ("Thales Circle which center must be in the middle of the triangle's c - side"); // echo ("==========================================="); // vertices = 3dtri_sides2coord (30,40,50); // echo("A = ",vertices[0]," B = ",vertices[1]," C = ",vertices[2]); // cg = 3dtri_centerOfGravityCoord (vertices[0],vertices[1],vertices[2]); // echo (" Center of gravity = ",cg); // cc = 3dtri_centerOfcircumcircle (vertices[0],vertices[1],vertices[2]); // echo (" Center of circumcircle = ",cc); // cr = 3dtri_radiusOfcircumcircle (vertices[0],cc,r); // echo(" Radius of circumcircle ",cr); // ir = 3dtri_radiusOfIn_circle (vertices[0],vertices[1],vertices[2]); // echo (" Radius of in-circle = ",ir); // ic = 3dtri_centerOfIn_circle (vertices[0],vertices[1],vertices[2],ir); // echo (" Center of in-circle = ",ic); // translate(cc+[0,0,5*h/2]) difference () { // cylinder (h=5*h,r1=cr+4,r2=cr+4,center=true); // cylinder (h=6*h,r1=cr,r2=cr,center=true);} // difference () { // union () { // difference () { // 3dtri_rnd_draw (vertices[0], vertices[1], vertices[2],5*h,r); // scale([0.8,0.8,1]) translate([6,2,4*h]) 3dtri_rnd_draw (vertices[0], vertices[1], vertices[2],5*h,r); // } // translate (ic+[0,0,5*h]) cylinder(h=10*h,r1=ir+r,r2=ir+r,center=true); // } // translate (ic+[0,0,5*h]) cylinder(h=12*h,r1=0.5*ir,r2=0.5*ir,center=true); // } openscad-2013.01+dfsg.orig/libraries/MCAD/materials.scad0000644000175000017500000000172311640737401022233 0ustar chrysnchrysn/* * Material colors. * * Originally by Hans Häggström, 2010. * Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later */ // Material colors Oak = [0.65, 0.5, 0.4]; Pine = [0.85, 0.7, 0.45]; Birch = [0.9, 0.8, 0.6]; FiberBoard = [0.7, 0.67, 0.6]; BlackPaint = [0.2, 0.2, 0.2]; Iron = [0.36, 0.33, 0.33]; Steel = [0.65, 0.67, 0.72]; Stainless = [0.45, 0.43, 0.5]; Aluminum = [0.77, 0.77, 0.8]; Brass = [0.88, 0.78, 0.5]; Transparent = [1, 1, 1, 0.2]; // Example, uncomment to view //color_demo(); module color_demo(){ // Wood colorTest(Oak, 0, 0); colorTest(Pine, 1, 0); colorTest(Birch, 2, 0); // Metals colorTest(Iron, 0, 1); colorTest(Steel, 1, 1); colorTest(Stainless, 2, 1); colorTest(Aluminum, 3, 1); // Mixboards colorTest(FiberBoard, 0, 2); // Paints colorTest(BlackPaint, 0, 3); } module colorTest(col, row=0, c=0) { color(col) translate([row * 30,c*30,0]) sphere(r=10); } openscad-2013.01+dfsg.orig/libraries/MCAD/utilities.scad0000644000175000017500000000336711712607402022270 0ustar chrysnchrysn/* * Utility functions. * * Originally by Hans Häggström, 2010. * Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later */ include function distance(a, b) = sqrt( (a[0] - b[0])*(a[0] - b[0]) + (a[1] - b[1])*(a[1] - b[1]) + (a[2] - b[2])*(a[2] - b[2]) ); function length2(a) = sqrt( a[0]*a[0] + a[1]*a[1] ); function normalized(a) = a / (max(distance([0,0,0], a), 0.00001)); function normalized_axis(a) = a == "x" ? [1, 0, 0]: a == "y" ? [0, 1, 0]: a == "z" ? [0, 0, 1]: normalized(a); function angleOfNormalizedVector(n) = [0, -atan2(n[2], length2([n[0], n[1]])), atan2(n[1], n[0]) ]; function angle(v) = angleOfNormalizedVector(normalized(v)); function angleBetweenTwoPoints(a, b) = angle(normalized(b-a)); CENTER = 0; LEFT = -0.5; RIGHT = 0.5; TOP = 0.5; BOTTOM = -0.5; FlatCap =0; ExtendedCap =0.5; CutCap =-0.5; module fromTo(from=[0,0,0], to=[1*m,0,0], size=[1*cm, 1*cm], align=[CENTER, CENTER], material=[0.5, 0.5, 0.5], name="", endExtras=[0,0], endCaps=[FlatCap, FlatCap], rotation=[0,0,0], printString=true) { angle = angleBetweenTwoPoints(from, to); length = distance(from, to) + endCaps[0]*size[0] + endCaps[1]*size[0] + endExtras[0] + endExtras[1]; if (length > 0) { if (printString) echo(str(" " ,name, " ", size[0], "mm x ", size[1], "mm, length ",length,"mm")); color(material) translate(from) rotate(angle) translate( [ -endCaps[0]*size[0] - endExtras[0], size[0]*(-0.5-align[0]), size[1]*(-0.5+align[1]) ] ) rotate(rotation) scale([length, size[0], size[1]]) child(); } } module part(name) { echo(""); echo(str(name, ":")); } openscad-2013.01+dfsg.orig/libraries/MCAD/__init__.py0000644000175000017500000000000011640737401021512 0ustar chrysnchrysnopenscad-2013.01+dfsg.orig/libraries/MCAD/units.scad0000644000175000017500000000065711712607402021416 0ustar chrysnchrysn/* * Basic units. * * Originally by Hans Häggström, 2010. * Dual licenced under Creative Commons Attribution-Share Alike 3.0 and LGPL2 or later */ mm = 1; cm = 10 * mm; dm = 100 * mm; m = 1000 * mm; inch = 25.4 * mm; X = [1, 0, 0]; Y = [0, 1, 0]; Z = [0, 0, 1]; M3 = 3*mm; M4 = 4*mm; M5 = 5*mm; M6 = 6*mm; M8 = 8*mm; // When a small distance is needed to overlap shapes for boolean cutting, etc. epsilon = 0.01*mm; openscad-2013.01+dfsg.orig/libraries/MCAD/transformations.scad0000644000175000017500000000026212044251002023463 0ustar chrysnchrysn// License: GNU LGPL 2.1 or later. // © 2010 by Elmo Mäntynen module local_scale(v, reference=[0, 0, 0]) { translate(-reference) scale(v) translate(reference) child(0); } openscad-2013.01+dfsg.orig/contrib/0000755000175000017500000000000012110740366016370 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/contrib/BBEdit-TextWrangler.txt0000644000175000017500000000030111702450355022642 0ustar chrysnchrysnBBEdit: Install OpenSCAD.plist into ~/Library/Application Support/BBEdit/Language Modules TextWrangler: Install OpenSCAD.plist into ~/Library/Application Support/TextWrangler/Language Modules openscad-2013.01+dfsg.orig/contrib/OpenSCAD.plist0000644000175000017500000000611211702450355021003 0ustar chrysnchrysn BBEditDocumentType CodelessLanguageModule BBLMCanSpellCheckCodeRuns BBLMColorsSyntax BBLMIsCaseSensitive BBLMKeywordList ! # $fa $fn $fs $t % * assign center circle color cube cylinder difference echo for function hull if import_dxf import_stl include intersection intersection_for linear_extrude minkowski mirror module multmatrix polygon polyhedron projection render rotate rotate_extrude scale sphere square str surface translate union use BBLMLanguageCode Oscd BBLMLanguageDisplayName OpenSCAD BBLMScansFunctions BBLMSuffixMap BBLMLanguageSuffix .scad BBLMSupportsTextCompletion Language Features Close Block Comments */ Close Parameter Lists ) Close Statement Blocks } Close Strings 1 " Close Strings 2 ' End-of-line Ends Strings 1 End-of-line Ends Strings 2 Escape Char in Strings 1 Escape Char in Strings 2 Identifier and Keyword Characters !$%*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz Open Block Comments /* Open Line Comments // Open Parameter Lists ( Open Statement Blocks { Open Strings 1 " Open Strings 2 ' Prefix for Functions function Prefix for Procedures module Terminator for Prototypes 1 Terminator for Prototypes 2 openscad-2013.01+dfsg.orig/contrib/OpenSCAD.xml0000644000175000017500000000535011745120721020451 0ustar chrysnchrysn 000000 { } # % ( ) ; [ ] < > 1/* 2*/ 0// abs acos asin atan atan ceil cos exp floor ln log lookup max min pow rands round sign sin sqrt tan str scale rotate translate mirror multmatrix color minkowski hull union difference intersection render echo use include module builtin_dxf_cross for intersection_for if else assign surface sphere cylinder polyhedron cube openscad-2013.01+dfsg.orig/contrib/scad-mode.el0000644000175000017500000002072612000424204020541 0ustar chrysnchrysn;;; scad-mode.el --- SCAD mode derived mode ;; Author: Len Trigg ;; Maintainer: Len Trigg ;; Created: March 2010 ;; Modified: 06 July 2012 ;; Keywords: languages ;; URL: https://raw.github.com/openscad/openscad/master/contrib/scad-mode.el ;; Version: 90.0 ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2 of the License, or ;; (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;; This is a major-mode to implement the SCAD constructs and ;; font-locking for openscad ;; ;; If installing manually, insert the following into your emacs startup: ;; ;; (autoload 'scad-mode "scad-mode" "Major mode for editing SCAD code." t) ;; (add-to-list 'auto-mode-alist '("\\.scad$" . scad-mode)) ;; ;; or ;; ;; install from marmalade: http://marmalade-repo.org/ ;; M-x install-package scad-mode ;;; To Do: ;; - Support for background/debug/root/disable modifiers ;; - Font lock of non-built-in function calls ;;; Code: ;;;###autoload (add-to-list 'auto-mode-alist '("\\.scad$" . scad-mode)) (defcustom scad-command '"openscad" "Path to openscad executable" :type 'string ) (defcustom scad-keywords '("return" "true" "false") "SCAD keywords." :type 'list :group 'scad-font-lock) (defcustom scad-functions '("cos" "acos" "sin" "asin" "tan" "atan" "atan2" ;;func.cc "abs" "sign" "rands" "min" "max" "round" "ceil" "floor" "pow" "sqrt" "exp" "log" "ln" "str" "lookup" "version" "version_num" "dxf_dim" "dxf_cross" ;;dxfdim.cc ) "SCAD functions." :type 'list :group 'scad-font-lock) (defcustom scad-modules '("child" "echo" "assign" "for" "intersection_for" "if" ;;control.cc "cube" "sphere" "cylinder" "polyhedron" "square" "circle" "polygon" ;;primitives.cc "scale" "rotate" "translate" "mirror" "multmatrix" ;;transform.cc "union" "difference" "intersection" ;;csgops.cc "render" ;;render.cc "color" ;;color.cc "surface" ;;surface.cc "dxf_linear_extrude" "linear_extrude" ;;linearextrude.cc "dxf_rotate_extrude" "rotate_extrude" ;;rotateextrude.cc "import_stl" "import_off" "import_dxf" "import" ;;import.cc "group" ;;builtin.cc "projection" ;;projection.cc "minkowski" "glide" "subdiv" "hull" ;;cgaladv.cc ) "SCAD modules." :type 'list :group 'scad-font-lock) (defcustom scad-operators '("+" "-" "*" "/" "%" "&&" "||" "!" "<" "<=" "==" "!=" ">" ">=" "?" ":" "=") "SCAD operators." :type 'list :group 'scad-font-lock) (defvar scad-mode-map (let ((map (make-sparse-keymap))) (define-key map "\t" 'scad-indent-line) (define-key map [(control c) (control o)] 'scad-open-current-buffer) (define-key map [return] 'newline-and-indent) map) "Keymap for `scad-mode'.") (defvar scad-mode-syntax-table (let ((st (make-syntax-table))) ;; support comment style: “// ...” ;; support comment style: “/* ... */” (modify-syntax-entry ?\/ ". 124b" st) (modify-syntax-entry ?\n "> b" st) (modify-syntax-entry ?* ". 23" st) ;; Extra punctuation (modify-syntax-entry ?+ "." st) (modify-syntax-entry ?- "." st) (modify-syntax-entry ?% "." st) (modify-syntax-entry ?< "." st) (modify-syntax-entry ?> "." st) (modify-syntax-entry ?& "." st) (modify-syntax-entry ?: "." st) (modify-syntax-entry ?| "." st) (modify-syntax-entry ?= "." st) (modify-syntax-entry ?\; "." st) ;; _ allowed in word (alternatively "_" as symbol constituent?) (modify-syntax-entry ?_ "w" st) st) "Syntax table for `scad-mode'.") (defvar scad-keywords-regexp (regexp-opt scad-keywords 'words)) (defvar scad-modules-regexp (regexp-opt scad-modules 'words)) (defvar scad-functions-regexp (regexp-opt scad-functions 'words)) (defvar scad-operators-regexp (regexp-opt scad-operators)) (defvar scad-font-lock-keywords `( ("\\(module\\|function\\)[ \t]+\\(\\sw+\\)" (1 'font-lock-keyword-face nil) (2 'font-lock-function-name-face nil t)) ("<\\(\\sw+\\)>" (1 'font-lock-builtin-face nil)) ("$\\(\\sw+\\)" (1 'font-lock-builtin-face nil)) (,scad-keywords-regexp . font-lock-keyword-face) (,scad-modules-regexp . font-lock-builtin-face) (,scad-functions-regexp . font-lock-function-name-face) ;(,scad-operators-regexp . font-lock-operator-face) ;; This actually looks pretty ugly ;("\\(\\<\\S +\\>\\)\\s *(" 1 font-lock-function-name-face t) ;; Seems to override other stuff (e.g. in comments and builtins) ) "Keyword highlighting specification for `scad-mode'.") ;(defvar scad-imenu-generic-expression ...) ;(defvar scad-outline-regexp ...) ;;;###autoload (define-derived-mode scad-mode fundamental-mode "SCAD" "A major mode for editing SCAD files." :syntax-table scad-mode-syntax-table (set (make-local-variable 'font-lock-defaults) '(scad-font-lock-keywords)) (set (make-local-variable 'indent-line-function) 'scad-indent-line) ;(set (make-local-variable 'imenu-generic-expression) scad-imenu-generic-expression) ;(set (make-local-variable 'outline-regexp) scad-outline-regexp) ;; set comment styles for scad mode (set (make-local-variable 'comment-start) "//") (set (make-local-variable 'comment-end) "") (set (make-local-variable 'block-comment-start) "/*") (set (make-local-variable 'block-comment-end) "*/") ) ;;; Indentation, based on http://www.emacswiki.org/emacs/download/actionscript-mode-haas-7.0.el (defun scad-indent-line () "Indent current line of SCAD code." (interactive) (let ((savep (> (current-column) (current-indentation))) (indent (condition-case nil (max (scad-calculate-indentation) 0) (error 0)))) (if savep (save-excursion (indent-line-to indent)) (indent-line-to indent)))) (defun scad-calculate-indentation () "Return the column to which the current line should be indented." (save-excursion (scad-maybe-skip-leading-close-delim) (let ((pos (point))) (beginning-of-line) (if (not (search-backward-regexp "[^\n\t\r ]" 1 0)) 0 (progn (scad-maybe-skip-leading-close-delim) (+ (current-indentation) (* standard-indent (scad-count-scope-depth (point) pos)))))))) (defun scad-maybe-skip-leading-close-delim () (beginning-of-line) (forward-to-indentation 0) (if (looking-at "\\s)") (forward-char) (beginning-of-line))) (defun scad-face-at-point (pos) "Return face descriptor for char at point." (plist-get (text-properties-at pos) 'face)) (defun scad-count-scope-depth (rstart rend) "Return difference between open and close scope delimeters." (save-excursion (goto-char rstart) (let ((open-count 0) (close-count 0) opoint) (while (and (< (point) rend) (progn (setq opoint (point)) (re-search-forward "\\s)\\|\\s(" rend t))) (if (= opoint (point)) (forward-char 1) (cond ;; Don't count if in string or comment. ((scad-face-at-point (- (point) 1))) ((looking-back "\\s)") (incf close-count)) ((looking-back "\\s(") (incf open-count)) ))) (- open-count close-count)))) (defun scad-open-current-buffer () (interactive) (call-process scad-command nil 0 nil (buffer-file-name))) (provide 'scad) ;;; scad-mode.el ends here openscad-2013.01+dfsg.orig/win32.pri0000644000175000017500000000112511673145117016413 0ustar chrysnchrysn# win32-specific MSVC compiler general settings win32*msvc* { #configure additional directories INCLUDEPATH += $$(MPIRDIR) INCLUDEPATH += $$(MPFRDIR) DEFINES += _USE_MATH_DEFINES NOMINMAX _CRT_SECURE_NO_WARNINGS YY_NO_UNISTD_H # disable MSVC warnings that are of very low importance # disable warning about too long decorated names QMAKE_CXXFLAGS += -wd4503 # CGAL casting int to bool QMAKE_CXXFLAGS += -wd4800 # CGAL's unreferenced formal parameters QMAKE_CXXFLAGS += -wd4100 # lexer uses strdup() & other POSIX stuff QMAKE_CXXFLAGS += -D_CRT_NONSTDC_NO_DEPRECATE } openscad-2013.01+dfsg.orig/src/0000755000175000017500000000000012110740367015520 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/src/Tree.cc0000644000175000017500000000324311667257412016742 0ustar chrysnchrysn#include "Tree.h" #include "nodedumper.h" #include #include Tree::~Tree() { this->nodecache.clear(); this->nodeidcache.clear(); } /*! Returns the cached string representation of the subtree rooted by \a node. If node is not cached, the cache will be rebuilt. */ const std::string &Tree::getString(const AbstractNode &node) const { assert(this->root_node); if (!this->nodecache.contains(node)) { this->nodecache.clear(); this->nodeidcache.clear(); NodeDumper dumper(this->nodecache, false); Traverser trav(dumper, *this->root_node, Traverser::PRE_AND_POSTFIX); trav.execute(); assert(this->nodecache.contains(*this->root_node) && "NodeDumper failed to create a cache"); } return this->nodecache[node]; } static bool filter(char c) { return c == ' ' || c == '\n' || c == '\t' || c == '\r'; } /*! Returns the cached ID string representation of the subtree rooted by \a node. If node is not cached, the cache will be rebuilt. The difference between this method and getString() is that the ID string is stripped for whitespace. Especially indentation whitespace is important to strip to enable cache hits for equivalent nodes from different scopes. */ const std::string &Tree::getIdString(const AbstractNode &node) const { assert(this->root_node); if (!this->nodeidcache.contains(node)) { std::string str = getString(node); str.erase(std::remove_if(str.begin(), str.end(), filter), str.end()); return this->nodeidcache.insert(node, str); } return this->nodeidcache[node]; } /*! Sets a new root. Will clear the existing cache. */ void Tree::setRoot(const AbstractNode *root) { this->root_node = root; this->nodecache.clear(); } openscad-2013.01+dfsg.orig/src/ThrownTogetherRenderer.h0000644000175000017500000000103711616354412022346 0ustar chrysnchrysn#ifndef THROWNTOGETHERRENDERER_H_ #define THROWNTOGETHERRENDERER_H_ #include "renderer.h" class ThrownTogetherRenderer : public Renderer { public: ThrownTogetherRenderer(class CSGChain *root_chain, CSGChain *highlights_chain, CSGChain *background_chain); void draw(bool showfaces, bool showedges) const; private: void renderCSGChain(CSGChain *chain, bool highlight, bool background, bool showedges, bool fberror) const; CSGChain *root_chain; CSGChain *highlights_chain; CSGChain *background_chain; }; #endif openscad-2013.01+dfsg.orig/src/mathc99.cc0000644000175000017500000000041411516401335017302 0ustar chrysnchrysn#include "mathc99.h" #ifdef WIN32 #include double round(double a) { return a > 0 ? floor(a+0.5) : ceil(a-0.5); } float fmin(float a, float b) { return std::min(a,b); } float fmax(float a, float b) { return std::max(a,b); } #endif openscad-2013.01+dfsg.orig/src/color.cc0000644000175000017500000000706212076022155017151 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "colornode.h" #include "module.h" #include "context.h" #include "builtin.h" #include "printutils.h" #include #include #include #include #include using namespace boost::assign; // bring 'operator+=()' into scope class ColorModule : public AbstractModule { public: ColorModule() { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; private: static boost::unordered_map colormap; }; #include "colormap.h" AbstractNode *ColorModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { ColorNode *node = new ColorNode(inst); node->color[0] = node->color[1] = node->color[2] = -1.0; node->color[3] = 1.0; std::vector argnames; std::vector argexpr; argnames += "c", "alpha"; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); Value v = c.lookup_variable("c"); if (v.type() == Value::VECTOR) { for (size_t i = 0; i < 4; i++) { node->color[i] = i < v.toVector().size() ? v.toVector()[i].toDouble() : 1.0; if (node->color[i] > 1) PRINTB_NOCACHE("WARNING: color() expects numbers between 0.0 and 1.0. Value of %.1f is too large.", node->color[i]); } } else if (v.type() == Value::STRING) { std::string colorname = v.toString(); boost::algorithm::to_lower(colorname); Color4f color; if (colormap.find(colorname) != colormap.end()) { color = colormap[colorname]; node->color[0] = color[0]; node->color[1] = color[1]; node->color[2] = color[2]; } else { PRINTB_NOCACHE("WARNING: Color name \"%s\" unknown. Please see", colorname); PRINT_NOCACHE("WARNING: http://en.wikipedia.org/wiki/Web_colors"); } } Value alpha = c.lookup_variable("alpha"); if (alpha.type() == Value::NUMBER) { node->color[3] = alpha.toDouble(); } std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); return node; } std::string ColorNode::toString() const { std::stringstream stream; stream << "color([" << this->color[0] << ", " << this->color[1] << ", " << this->color[2] << ", " << this->color[3] << "])"; return stream.str(); } std::string ColorNode::name() const { return "color"; } void register_builtin_color() { Builtins::init("color", new ColorModule()); } openscad-2013.01+dfsg.orig/src/value.h0000644000175000017500000000615712000421643017005 0ustar chrysnchrysn#ifndef VALUE_H_ #define VALUE_H_ #include #include #include #include class QuotedString : public std::string { public: QuotedString() : std::string() {} QuotedString(const std::string &s) : std::string(s) {} }; std::ostream &operator<<(std::ostream &stream, const QuotedString &s); class Filename : public QuotedString { public: Filename() : QuotedString() {} Filename(const std::string &f) : QuotedString(f) {} }; std::ostream &operator<<(std::ostream &stream, const Filename &filename); class Value { public: struct RangeType { RangeType(double begin, double step, double end) : begin(begin), step(step), end(end) {} bool operator==(const RangeType &other) const { return this->begin == other.begin && this->step == other.step && this->end == other.end; } double begin; double step; double end; }; typedef std::vector VectorType; enum ValueType { UNDEFINED, BOOL, NUMBER, STRING, VECTOR, RANGE }; static Value undefined; Value(); Value(bool v); Value(int v); Value(double v); Value(const std::string &v); Value(const char *v); Value(const char v); Value(const VectorType &v); Value(const RangeType &v); Value(double begin, double step, double end); ~Value() {} ValueType type() const; bool isUndefined() const; double toDouble() const; bool getDouble(double &v) const; bool toBool() const; std::string toString() const; const VectorType &toVector() const; bool getVec2(double &x, double &y) const; bool getVec3(double &x, double &y, double &z, double defaultval = 0.0) const; RangeType toRange() const; Value &operator=(const Value &v); Value operator!() const; bool operator==(const Value &v) const; bool operator!=(const Value &v) const; bool operator&&(const Value &v) const; bool operator||(const Value &v) const; bool operator<(const Value &v) const; bool operator<=(const Value &v) const; bool operator>=(const Value &v) const; bool operator>(const Value &v) const; Value operator-() const; Value operator[](const Value &v); Value operator+(const Value &v) const; Value operator-(const Value &v) const; Value operator*(const Value &v) const; Value operator/(const Value &v) const; Value operator%(const Value &v) const; /* bool getnum(double &v) const; bool getv2(double &x, double &y) const; bool getv3(double &x, double &y, double &z, double defaultval = 0.0) const; bool toBool() const; void append(Value *val); */ friend std::ostream &operator<<(std::ostream &stream, const Value &value) { if (value.type() == Value::STRING) stream << QuotedString(value.toString()); else stream << value.toString(); return stream; } typedef boost::variant< boost::blank, bool, double, std::string, VectorType, RangeType > Variant; private: static Value multvecnum(const Value &vecval, const Value &numval); static Value multmatvec(const Value &matrixval, const Value &vectorval); static Value multvecmat(const Value &vectorval, const Value &matrixval); Variant value; }; #endif openscad-2013.01+dfsg.orig/src/module.h0000644000175000017500000000534412076022155017163 0ustar chrysnchrysn#ifndef MODULE_H_ #define MODULE_H_ #include #include #include #include #include "value.h" class ModuleInstantiation { public: ModuleInstantiation(const std::string &name = "") : ctx(NULL), tag_root(false), tag_highlight(false), tag_background(false), modname(name) { } virtual ~ModuleInstantiation(); std::string dump(const std::string &indent) const; class AbstractNode *evaluate(const class Context *ctx) const; std::vector evaluateChildren(const Context *ctx = NULL) const; const std::string &name() const { return this->modname; } bool isBackground() const { return this->tag_background; } bool isHighlight() const { return this->tag_highlight; } bool isRoot() const { return this->tag_root; } std::vector argnames; std::vector argvalues; std::vector argexpr; std::vector children; const Context *ctx; bool tag_root; bool tag_highlight; bool tag_background; protected: std::string modname; friend class Module; }; class IfElseModuleInstantiation : public ModuleInstantiation { public: IfElseModuleInstantiation() : ModuleInstantiation("if") { } virtual ~IfElseModuleInstantiation(); std::vector evaluateElseChildren(const Context *ctx = NULL) const; std::vector else_children; }; class AbstractModule { public: virtual ~AbstractModule(); virtual class AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; virtual std::string dump(const std::string &indent, const std::string &name) const; }; class Module : public AbstractModule { public: Module() : is_handling_dependencies(false) { } virtual ~Module(); virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; virtual std::string dump(const std::string &indent, const std::string &name) const; void addChild(ModuleInstantiation *ch) { this->children.push_back(ch); } typedef boost::unordered_map ModuleContainer; ModuleContainer usedlibs; void registerInclude(const std::string &filename); typedef boost::unordered_map IncludeContainer; IncludeContainer includes; bool is_handling_dependencies; bool handleDependencies(); std::vector assignments_var; std::vector assignments_expr; typedef boost::unordered_map FunctionContainer; FunctionContainer functions; typedef boost::unordered_map AbstractModuleContainer; AbstractModuleContainer modules; std::vector children; std::vector argnames; std::vector argexpr; protected: private: }; #endif openscad-2013.01+dfsg.orig/src/transformnode.h0000644000175000017500000000070411642654340020557 0ustar chrysnchrysn#ifndef TRANSFORMNODE_H_ #define TRANSFORMNODE_H_ #include "node.h" #include "visitor.h" #include "linalg.h" class TransformNode : public AbstractNode { public: TransformNode(const ModuleInstantiation *mi) : AbstractNode(mi) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const; Transform3d matrix; }; #endif openscad-2013.01+dfsg.orig/src/OpenCSGRenderer.cc0000644000175000017500000001115712004257610020755 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "system-gl.h" #include "OpenCSGRenderer.h" #include "polyset.h" #include "csgterm.h" #include "stl-utils.h" #ifdef ENABLE_OPENCSG # include #endif class OpenCSGPrim : public OpenCSG::Primitive { public: OpenCSGPrim(OpenCSG::Operation operation, unsigned int convexity) : OpenCSG::Primitive(operation, convexity) { } shared_ptr ps; Transform3d m; PolySet::csgmode_e csgmode; virtual void render() { glPushMatrix(); glMultMatrixd(m.data()); ps->render_surface(csgmode, m); glPopMatrix(); } }; OpenCSGRenderer::OpenCSGRenderer(CSGChain *root_chain, CSGChain *highlights_chain, CSGChain *background_chain, GLint *shaderinfo) : root_chain(root_chain), highlights_chain(highlights_chain), background_chain(background_chain), shaderinfo(shaderinfo) { } void OpenCSGRenderer::draw(bool /*showfaces*/, bool showedges) const { if (this->root_chain) { GLint *shaderinfo = this->shaderinfo; if (!shaderinfo[0]) shaderinfo = NULL; renderCSGChain(this->root_chain, showedges ? shaderinfo : NULL, false, false); if (this->background_chain) { renderCSGChain(this->background_chain, showedges ? shaderinfo : NULL, false, true); } if (this->highlights_chain) { renderCSGChain(this->highlights_chain, showedges ? shaderinfo : NULL, true, false); } } } void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo, bool highlight, bool background) const { std::vector primitives; size_t j = 0; for (size_t i = 0;; i++) { bool last = i == chain->polysets.size(); if (last || chain->types[i] == CSGTerm::TYPE_UNION) { if (j+1 != i) { OpenCSG::render(primitives); glDepthFunc(GL_EQUAL); } if (shaderinfo) glUseProgram(shaderinfo[0]); for (; j < i; j++) { const Transform3d &m = chain->matrices[j]; const Color4f &c = chain->colors[j]; glPushMatrix(); glMultMatrixd(m.data()); PolySet::csgmode_e csgmode = chain->types[j] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; if (highlight) { setColor(COLORMODE_HIGHLIGHT, shaderinfo); csgmode = PolySet::csgmode_e(csgmode + 20); } else if (background) { setColor(COLORMODE_BACKGROUND, shaderinfo); csgmode = PolySet::csgmode_e(csgmode + 10); } else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0 || c[3] >= 0) { // User-defined color or alpha from source setColor(c.data(), shaderinfo); } else if (chain->types[j] == CSGTerm::TYPE_DIFFERENCE) { setColor(COLORMODE_CUTOUT, shaderinfo); } else { setColor(COLORMODE_MATERIAL, shaderinfo); } chain->polysets[j]->render_surface(csgmode, m, shaderinfo); glPopMatrix(); } if (shaderinfo) glUseProgram(0); for (unsigned int k = 0; k < primitives.size(); k++) { delete primitives[k]; } glDepthFunc(GL_LEQUAL); primitives.clear(); } if (last) break; OpenCSGPrim *prim = new OpenCSGPrim(chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? OpenCSG::Subtraction : OpenCSG::Intersection, chain->polysets[i]->convexity); prim->ps = chain->polysets[i]; prim->m = chain->matrices[i]; prim->csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; if (highlight) prim->csgmode = PolySet::csgmode_e(prim->csgmode + 20); else if (background) prim->csgmode = PolySet::csgmode_e(prim->csgmode + 10); primitives.push_back(prim); } std::for_each(primitives.begin(), primitives.end(), del_fun()); } openscad-2013.01+dfsg.orig/src/expr.cc0000644000175000017500000001547412000421643017007 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "expression.h" #include "value.h" #include "context.h" #include #include #include #include "stl-utils.h" #include #include Expression::Expression() { } Expression::Expression(const Value &val) : const_value(val), type("C") { } Expression::~Expression() { std::for_each(this->children.begin(), this->children.end(), del_fun()); } Value Expression::evaluate(const Context *context) const { if (this->type == "!") return ! this->children[0]->evaluate(context); if (this->type == "&&") return this->children[0]->evaluate(context) && this->children[1]->evaluate(context); if (this->type == "||") return this->children[0]->evaluate(context) || this->children[1]->evaluate(context); if (this->type == "*") return this->children[0]->evaluate(context) * this->children[1]->evaluate(context); if (this->type == "/") return this->children[0]->evaluate(context) / this->children[1]->evaluate(context); if (this->type == "%") return this->children[0]->evaluate(context) % this->children[1]->evaluate(context); if (this->type == "+") return this->children[0]->evaluate(context) + this->children[1]->evaluate(context); if (this->type == "-") return this->children[0]->evaluate(context) - this->children[1]->evaluate(context); if (this->type == "<") return this->children[0]->evaluate(context) < this->children[1]->evaluate(context); if (this->type == "<=") return this->children[0]->evaluate(context) <= this->children[1]->evaluate(context); if (this->type == "==") return this->children[0]->evaluate(context) == this->children[1]->evaluate(context); if (this->type == "!=") return this->children[0]->evaluate(context) != this->children[1]->evaluate(context); if (this->type == ">=") return this->children[0]->evaluate(context) >= this->children[1]->evaluate(context); if (this->type == ">") return this->children[0]->evaluate(context) > this->children[1]->evaluate(context); if (this->type == "?:") { Value v = this->children[0]->evaluate(context); return this->children[v.toBool() ? 1 : 2]->evaluate(context); } if (this->type == "[]") { return this->children[0]->evaluate(context)[this->children[1]->evaluate(context)]; } if (this->type == "I") return -this->children[0]->evaluate(context); if (this->type == "C") return this->const_value; if (this->type == "R") { Value v1 = this->children[0]->evaluate(context); Value v2 = this->children[1]->evaluate(context); Value v3 = this->children[2]->evaluate(context); if (v1.type() == Value::NUMBER && v2.type() == Value::NUMBER && v3.type() == Value::NUMBER) { return Value(v1.toDouble(), v2.toDouble(), v3.toDouble()); } return Value(); } if (this->type == "V") { Value::VectorType vec; BOOST_FOREACH(const Expression *e, this->children) { vec.push_back(e->evaluate(context)); } return Value(vec); } if (this->type == "L") return context->lookup_variable(this->var_name); if (this->type == "N") { Value v = this->children[0]->evaluate(context); if (v.type() == Value::VECTOR && this->var_name == "x") return v[0]; if (v.type() == Value::VECTOR && this->var_name == "y") return v[1]; if (v.type() == Value::VECTOR && this->var_name == "z") return v[2]; if (v.type() == Value::RANGE && this->var_name == "begin") return Value(v[0]); if (v.type() == Value::RANGE && this->var_name == "step") return Value(v[1]); if (v.type() == Value::RANGE && this->var_name == "end") return Value(v[2]); return Value(); } if (this->type == "F") { Value::VectorType argvalues; std::transform(this->children.begin(), this->children.end(), std::back_inserter(argvalues), boost::bind(&Expression::evaluate, _1, context)); // for (size_t i=0; i < this->children.size(); i++) // argvalues.push_back(this->children[i]->evaluate(context)); return context->evaluate_function(this->call_funcname, this->call_argnames, argvalues); } abort(); } std::string Expression::toString() const { std::stringstream stream; if (this->type == "*" || this->type == "/" || this->type == "%" || this->type == "+" || this->type == "-" || this->type == "<" || this->type == "<=" || this->type == "==" || this->type == "!=" || this->type == ">=" || this->type == ">") { stream << "(" << *this->children[0] << " " << this->type << " " << *this->children[1] << ")"; } else if (this->type == "?:") { stream << "(" << *this->children[0] << " ? " << this->type << " : " << *this->children[1] << ")"; } else if (this->type == "[]") { stream << "(" << *this->children[0] << "[" << *this->children[1] << "])"; } else if (this->type == "I") { stream << "(-" << *this->children[0] << ")"; } else if (this->type == "C") { stream << this->const_value; } else if (this->type == "R") { stream << "[" << *this->children[0] << " : " << *this->children[1] << " : " << this->children[2] << "]"; } else if (this->type == "V") { stream << "["; for (size_t i=0; i < this->children.size(); i++) { if (i > 0) stream << ", "; stream << *this->children[i]; } stream << "]"; } else if (this->type == "L") { stream << this->var_name; } else if (this->type == "N") { stream << "(" << *this->children[0] << "." << this->var_name << ")"; } else if (this->type == "F") { stream << this->call_funcname << "("; for (size_t i=0; i < this->children.size(); i++) { if (i > 0) stream << ", "; if (!this->call_argnames[i].empty()) stream << this->call_argnames[i] << " = "; stream << *this->children[i]; } stream << ")"; } else { assert(false && "Illegal expression type"); } return stream.str(); } std::ostream &operator<<(std::ostream &stream, const Expression &expr) { stream << expr.toString(); return stream; } openscad-2013.01+dfsg.orig/src/cgaladv.cc0000644000175000017500000000771412000421643017430 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "cgaladvnode.h" #include "module.h" #include "context.h" #include "builtin.h" #include "PolySetEvaluator.h" #include #include #include using namespace boost::assign; // bring 'operator+=()' into scope class CgaladvModule : public AbstractModule { public: cgaladv_type_e type; CgaladvModule(cgaladv_type_e type) : type(type) { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *CgaladvModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { CgaladvNode *node = new CgaladvNode(inst, type); std::vector argnames; std::vector argexpr; if (type == MINKOWSKI) argnames += "convexity"; if (type == GLIDE) argnames += "path", "convexity"; if (type == SUBDIV) argnames += "type", "level", "convexity"; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); Value convexity, path, subdiv_type, level; if (type == MINKOWSKI) { convexity = c.lookup_variable("convexity", true); } if (type == GLIDE) { convexity = c.lookup_variable("convexity", true); path = c.lookup_variable("path", false); } if (type == SUBDIV) { convexity = c.lookup_variable("convexity", true); subdiv_type = c.lookup_variable("type", false); level = c.lookup_variable("level", true); } node->convexity = (int)convexity.toDouble(); node->path = path; node->subdiv_type = subdiv_type.toString(); node->level = (int)level.toDouble(); if (node->level <= 1) node->level = 1; std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); return node; } PolySet *CgaladvNode::evaluate_polyset(PolySetEvaluator *ps) const { return ps->evaluatePolySet(*this); } std::string CgaladvNode::name() const { switch (this->type) { case MINKOWSKI: return "minkowski"; break; case GLIDE: return "glide"; break; case SUBDIV: return "subdiv"; break; case HULL: return "hull"; break; default: assert(false); } } std::string CgaladvNode::toString() const { std::stringstream stream; stream << this->name(); switch (type) { case MINKOWSKI: stream << "(convexity = " << this->convexity << ")"; break; case GLIDE: stream << "(path = " << this->path << ", convexity = " << this->convexity << ")"; break; case SUBDIV: stream << "(level = " << this->level << ", convexity = " << this->convexity << ")"; break; case HULL: stream << "()"; break; default: assert(false); } return stream.str(); } void register_builtin_cgaladv() { Builtins::init("minkowski", new CgaladvModule(MINKOWSKI)); Builtins::init("glide", new CgaladvModule(GLIDE)); Builtins::init("subdiv", new CgaladvModule(SUBDIV)); Builtins::init("hull", new CgaladvModule(HULL)); } openscad-2013.01+dfsg.orig/src/polyset.cc0000644000175000017500000002375312076022156017540 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "polyset.h" #include "linalg.h" #include #include /*! /class PolySet The PolySet class fulfils multiple tasks, partially for historical reasons. FIXME: It's a bit messy and is a prime target for refactoring. 1) Store 2D and 3D polygon meshes from all origins 2) Store 2D outlines, used for rendering edges 3) Rendering of polygons and edges */ PolySet::PolySet() : grid(GRID_FINE), is2d(false), convexity(1) { } PolySet::~PolySet() { } std::string PolySet::dump() const { std::stringstream out; out << "PolySet:" << "\n dimensions:" << std::string( this->is2d ? "2" : "3" ) << "\n convexity:" << this->convexity << "\n num polygons: " << polygons.size() << "\n num borders: " << borders.size() << "\n polygons data:"; for (size_t i = 0; i < polygons.size(); i++) { out << "\n polygon begin:"; const Polygon *poly = &polygons[i]; for (size_t j = 0; j < poly->size(); j++) { Vector3d v = poly->at(j); out << "\n vertex:" << v.transpose(); } } out << "\n borders data:"; for (size_t i = 0; i < borders.size(); i++) { out << "\n border polygon begin:"; const Polygon *poly = &borders[i]; for (size_t j = 0; j < poly->size(); j++) { Vector3d v = poly->at(j); out << "\n vertex:" << v.transpose(); } } out << "\nPolySet end"; return out.str(); } void PolySet::append_poly() { polygons.push_back(Polygon()); } void PolySet::append_vertex(double x, double y, double z) { grid.align(x, y, z); polygons.back().push_back(Vector3d(x, y, z)); } void PolySet::insert_vertex(double x, double y, double z) { grid.align(x, y, z); polygons.back().insert(polygons.back().begin(), Vector3d(x, y, z)); } static void gl_draw_triangle(GLint *shaderinfo, const Vector3d &p0, const Vector3d &p1, const Vector3d &p2, bool e0, bool e1, bool e2, double z, bool mirrored) { double ax = p1[0] - p0[0], bx = p1[0] - p2[0]; double ay = p1[1] - p0[1], by = p1[1] - p2[1]; double az = p1[2] - p0[2], bz = p1[2] - p2[2]; double nx = ay*bz - az*by; double ny = az*bx - ax*bz; double nz = ax*by - ay*bx; double nl = sqrt(nx*nx + ny*ny + nz*nz); glNormal3d(nx / nl, ny / nl, nz / nl); #ifdef ENABLE_OPENCSG if (shaderinfo) { double e0f = e0 ? 2.0 : -1.0; double e1f = e1 ? 2.0 : -1.0; double e2f = e2 ? 2.0 : -1.0; glVertexAttrib3d(shaderinfo[3], e0f, e1f, e2f); glVertexAttrib3d(shaderinfo[4], p1[0], p1[1], p1[2] + z); glVertexAttrib3d(shaderinfo[5], p2[0], p2[1], p2[2] + z); glVertexAttrib3d(shaderinfo[6], 0.0, 1.0, 0.0); glVertex3d(p0[0], p0[1], p0[2] + z); if (!mirrored) { glVertexAttrib3d(shaderinfo[3], e0f, e1f, e2f); glVertexAttrib3d(shaderinfo[4], p0[0], p0[1], p0[2] + z); glVertexAttrib3d(shaderinfo[5], p2[0], p2[1], p2[2] + z); glVertexAttrib3d(shaderinfo[6], 0.0, 0.0, 1.0); glVertex3d(p1[0], p1[1], p1[2] + z); } glVertexAttrib3d(shaderinfo[3], e0f, e1f, e2f); glVertexAttrib3d(shaderinfo[4], p0[0], p0[1], p0[2] + z); glVertexAttrib3d(shaderinfo[5], p1[0], p1[1], p1[2] + z); glVertexAttrib3d(shaderinfo[6], 1.0, 0.0, 0.0); glVertex3d(p2[0], p2[1], p2[2] + z); if (mirrored) { glVertexAttrib3d(shaderinfo[3], e0f, e1f, e2f); glVertexAttrib3d(shaderinfo[4], p0[0], p0[1], p0[2] + z); glVertexAttrib3d(shaderinfo[5], p2[0], p2[1], p2[2] + z); glVertexAttrib3d(shaderinfo[6], 0.0, 0.0, 1.0); glVertex3d(p1[0], p1[1], p1[2] + z); } } else #endif { glVertex3d(p0[0], p0[1], p0[2] + z); if (!mirrored) glVertex3d(p1[0], p1[1], p1[2] + z); glVertex3d(p2[0], p2[1], p2[2] + z); if (mirrored) glVertex3d(p1[0], p1[1], p1[2] + z); } } void PolySet::render_surface(csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo) const { bool mirrored = m.matrix().determinant() < 0; #ifdef ENABLE_OPENCSG if (shaderinfo) { glUniform1f(shaderinfo[7], shaderinfo[9]); glUniform1f(shaderinfo[8], shaderinfo[10]); } #endif /* ENABLE_OPENCSG */ if (this->is2d) { // Render 2D objects 1mm thick, but differences slightly larger double zbase = 1 + (csgmode & CSGMODE_DIFFERENCE_FLAG) * 0.1; glBegin(GL_TRIANGLES); for (double z = -zbase/2; z < zbase; z += zbase) { for (size_t i = 0; i < polygons.size(); i++) { const Polygon *poly = &polygons[i]; if (poly->size() == 3) { if (z < 0) { gl_draw_triangle(shaderinfo, poly->at(0), poly->at(2), poly->at(1), true, true, true, z, mirrored); } else { gl_draw_triangle(shaderinfo, poly->at(0), poly->at(1), poly->at(2), true, true, true, z, mirrored); } } else if (poly->size() == 4) { if (z < 0) { gl_draw_triangle(shaderinfo, poly->at(0), poly->at(3), poly->at(1), true, false, true, z, mirrored); gl_draw_triangle(shaderinfo, poly->at(2), poly->at(1), poly->at(3), true, false, true, z, mirrored); } else { gl_draw_triangle(shaderinfo, poly->at(0), poly->at(1), poly->at(3), true, false, true, z, mirrored); gl_draw_triangle(shaderinfo, poly->at(2), poly->at(3), poly->at(1), true, false, true, z, mirrored); } } else { Vector3d center = Vector3d::Zero(); for (size_t j = 0; j < poly->size(); j++) { center[0] += poly->at(j)[0]; center[1] += poly->at(j)[1]; } center[0] /= poly->size(); center[1] /= poly->size(); for (size_t j = 1; j <= poly->size(); j++) { if (z < 0) { gl_draw_triangle(shaderinfo, center, poly->at(j % poly->size()), poly->at(j - 1), false, true, false, z, mirrored); } else { gl_draw_triangle(shaderinfo, center, poly->at(j - 1), poly->at(j % poly->size()), false, true, false, z, mirrored); } } } } } const std::vector *borders_p = &borders; if (borders_p->size() == 0) borders_p = &polygons; for (size_t i = 0; i < borders_p->size(); i++) { const Polygon *poly = &borders_p->at(i); for (size_t j = 1; j <= poly->size(); j++) { Vector3d p1 = poly->at(j - 1), p2 = poly->at(j - 1); Vector3d p3 = poly->at(j % poly->size()), p4 = poly->at(j % poly->size()); p1[2] -= zbase/2, p2[2] += zbase/2; p3[2] -= zbase/2, p4[2] += zbase/2; gl_draw_triangle(shaderinfo, p2, p1, p3, true, true, false, 0, mirrored); gl_draw_triangle(shaderinfo, p2, p3, p4, false, true, true, 0, mirrored); } } glEnd(); } else { for (size_t i = 0; i < polygons.size(); i++) { const Polygon *poly = &polygons[i]; glBegin(GL_TRIANGLES); if (poly->size() == 3) { gl_draw_triangle(shaderinfo, poly->at(0), poly->at(1), poly->at(2), true, true, true, 0, mirrored); } else if (poly->size() == 4) { gl_draw_triangle(shaderinfo, poly->at(0), poly->at(1), poly->at(3), true, false, true, 0, mirrored); gl_draw_triangle(shaderinfo, poly->at(2), poly->at(3), poly->at(1), true, false, true, 0, mirrored); } else { Vector3d center = Vector3d::Zero(); for (size_t j = 0; j < poly->size(); j++) { center[0] += poly->at(j)[0]; center[1] += poly->at(j)[1]; center[2] += poly->at(j)[2]; } center[0] /= poly->size(); center[1] /= poly->size(); center[2] /= poly->size(); for (size_t j = 1; j <= poly->size(); j++) { gl_draw_triangle(shaderinfo, center, poly->at(j - 1), poly->at(j % poly->size()), false, true, false, 0, mirrored); } } glEnd(); } } } void PolySet::render_edges(csgmode_e csgmode) const { glDisable(GL_LIGHTING); if (this->is2d) { // Render 2D objects 1mm thick, but differences slightly larger double zbase = 1 + (csgmode & CSGMODE_DIFFERENCE_FLAG) * 0.1; for (double z = -zbase/2; z < zbase; z += zbase) { for (size_t i = 0; i < borders.size(); i++) { const Polygon *poly = &borders[i]; glBegin(GL_LINE_LOOP); for (size_t j = 0; j < poly->size(); j++) { const Vector3d &p = poly->at(j); glVertex3d(p[0], p[1], z); } glEnd(); } } for (size_t i = 0; i < borders.size(); i++) { const Polygon *poly = &borders[i]; glBegin(GL_LINES); for (size_t j = 0; j < poly->size(); j++) { const Vector3d &p = poly->at(j); glVertex3d(p[0], p[1], -zbase/2); glVertex3d(p[0], p[1], +zbase/2); } glEnd(); } } else { for (size_t i = 0; i < polygons.size(); i++) { const Polygon *poly = &polygons[i]; glBegin(GL_LINE_LOOP); for (size_t j = 0; j < poly->size(); j++) { const Vector3d &p = poly->at(j); glVertex3d(p[0], p[1], p[2]); } glEnd(); } } glEnable(GL_LIGHTING); } BoundingBox PolySet::getBoundingBox() const { BoundingBox bbox; for (size_t i = 0; i < polygons.size(); i++) { const Polygon &poly = polygons[i]; for (size_t j = 0; j < poly.size(); j++) { const Vector3d &p = poly[j]; bbox.extend(p); } } return bbox; } size_t PolySet::memsize() const { size_t mem = 0; BOOST_FOREACH(const Polygon &p, this->polygons) mem += p.size() * sizeof(Vector3d); BOOST_FOREACH(const Polygon &p, this->borders) mem += p.size() * sizeof(Vector3d); mem += this->grid.db.size() * (3 * sizeof(int64_t) + sizeof(void*)) + sizeof(Grid3d); mem += sizeof(PolySet); return mem; } openscad-2013.01+dfsg.orig/src/PolySetCache.cc0000644000175000017500000000134411707660753020367 0ustar chrysnchrysn#include "PolySetCache.h" #include "printutils.h" #include "polyset.h" PolySetCache *PolySetCache::inst = NULL; void PolySetCache::insert(const std::string &id, const shared_ptr &ps) { this->cache.insert(id, new cache_entry(ps), ps ? ps->memsize() : 0); } size_t PolySetCache::maxSize() const { return this->cache.maxCost(); } void PolySetCache::setMaxSize(size_t limit) { this->cache.setMaxCost(limit); } void PolySetCache::print() { PRINTB("PolySets in cache: %d", this->cache.size()); PRINTB("PolySet cache size in bytes: %d", this->cache.totalCost()); } PolySetCache::cache_entry::cache_entry(const shared_ptr &ps) : ps(ps) { if (print_messages_stack.size() > 0) this->msg = print_messages_stack.back(); } openscad-2013.01+dfsg.orig/src/PolySetEvaluator.cc0000644000175000017500000000203111707660753021320 0ustar chrysnchrysn#include "PolySetCache.h" #include "PolySetEvaluator.h" #include "printutils.h" #include "polyset.h" #include "Tree.h" /*! The task of PolySetEvaluator is to create, keep track of and cache PolySet instances. All instances of PolySet which are not strictly temporary should be requested through this class. */ /*! Factory method returning a PolySet from the given node. If the node is already cached, the cached PolySet will be returned otherwise a new PolySet will be created from the node. If cache is true, the newly created PolySet will be cached. */ shared_ptr PolySetEvaluator::getPolySet(const AbstractNode &node, bool cache) { std::string cacheid = this->tree.getIdString(node); if (PolySetCache::instance()->contains(cacheid)) { #ifdef DEBUG // For cache debugging PRINTB("PolySetCache hit: %s", cacheid.substr(0, 40)); #endif return PolySetCache::instance()->get(cacheid); } shared_ptr ps(node.evaluate_polyset(this)); if (cache) PolySetCache::instance()->insert(cacheid, ps); return ps; } openscad-2013.01+dfsg.orig/src/AboutDialog.ui0000644000175000017500000000143412040570421020245 0ustar chrysnchrysn AboutDialog 0 0 567 359 About OpenSCAD true qrc:/src/AboutDialog.html openscad-2013.01+dfsg.orig/src/OpenCSGWarningDialog.cc0000644000175000017500000000132112076022155021727 0ustar chrysnchrysn#include "OpenCSGWarningDialog.h" #include "Preferences.h" OpenCSGWarningDialog::OpenCSGWarningDialog(QWidget*) { setupUi(this); connect(this->showBox, SIGNAL(toggled(bool)), Preferences::inst()->openCSGWarningBox, SLOT(setChecked(bool))); connect(this->showBox, SIGNAL(toggled(bool)), Preferences::inst(), SLOT(on_openCSGWarningBox_toggled(bool))); connect(this->enableOpenCSGBox, SIGNAL(toggled(bool)), Preferences::inst()->enableOpenCSGBox, SLOT(setChecked(bool))); connect(this->enableOpenCSGBox, SIGNAL(toggled(bool)), Preferences::inst(), SLOT(on_enableOpenCSGBox_toggled(bool))); } void OpenCSGWarningDialog::setText(const QString &text) { this->warningText->setPlainText(text); } openscad-2013.01+dfsg.orig/src/node.cc0000644000175000017500000000553411676153366017000 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "node.h" #include "module.h" #include "progress.h" #include "visitor.h" #include "stl-utils.h" #include #include size_t AbstractNode::idx_counter; AbstractNode::AbstractNode(const ModuleInstantiation *mi) { modinst = mi; idx = idx_counter++; } AbstractNode::~AbstractNode() { std::for_each(this->children.begin(), this->children.end(), del_fun()); } Response AbstractNode::accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } Response AbstractIntersectionNode::accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } Response AbstractPolyNode::accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } std::string AbstractNode::toString() const { return this->name() + "()"; } std::string AbstractNode::name() const { return "group"; } std::string AbstractIntersectionNode::toString() const { return this->name() + "()"; } std::string AbstractIntersectionNode::name() const { // We write intersection here since the module will have to be evaluated // before we get here and it will not longer retain the intersection_for parameters return "intersection"; } void AbstractNode::progress_prepare() { std::for_each(this->children.begin(), this->children.end(), std::mem_fun(&AbstractNode::progress_prepare)); this->progress_mark = ++progress_report_count; } void AbstractNode::progress_report() const { progress_update(this, this->progress_mark); } std::ostream &operator<<(std::ostream &stream, const AbstractNode &node) { // FIXME: Don't use deep access to modinst members if (node.modinst->isBackground()) stream << "%"; stream << node.toString(); return stream; } openscad-2013.01+dfsg.orig/src/render.cc0000644000175000017500000000475312000421643017306 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "rendernode.h" #include "module.h" #include "context.h" #include "builtin.h" #include "PolySetEvaluator.h" #include #include using namespace boost::assign; // bring 'operator+=()' into scope class RenderModule : public AbstractModule { public: RenderModule() { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *RenderModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { RenderNode *node = new RenderNode(inst); std::vector argnames; argnames += "convexity"; std::vector argexpr; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); Value v = c.lookup_variable("convexity"); if (v.type() == Value::NUMBER) node->convexity = (int)v.toDouble(); std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); return node; } class PolySet *RenderNode::evaluate_polyset(PolySetEvaluator *ps) const { return ps->evaluatePolySet(*this); } std::string RenderNode::toString() const { std::stringstream stream; stream << this->name() << "(convexity = " << convexity << ")"; return stream.str(); } void register_builtin_render() { Builtins::init("render", new RenderModule()); } openscad-2013.01+dfsg.orig/src/handle_dep.cc0000644000175000017500000000234112014547135020113 0ustar chrysnchrysn#include "handle_dep.h" #include #include #include // for system() #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" boost::unordered_set dependencies; const char *make_command = NULL; void handle_dep(const std::string &filename) { fs::path filepath(filename); if ( boosty::is_absolute( filepath )) { dependencies.insert(filename); } else { dependencies.insert((fs::current_path() / filepath).string()); } if (!fs::exists(filepath) && make_command) { std::stringstream buf; buf << make_command << " '" << boost::regex_replace(filename, boost::regex("'"), "'\\''") << "'"; system(buf.str().c_str()); // FIXME: Handle error } } bool write_deps(const std::string &filename, const std::string &output_file) { FILE *fp = fopen(filename.c_str(), "wt"); if (!fp) { fprintf(stderr, "Can't open dependencies file `%s' for writing!\n", filename.c_str()); return false; } fprintf(fp, "%s:", output_file.c_str()); BOOST_FOREACH(const std::string &str, dependencies) { fprintf(fp, " \\\n\t%s", str.c_str()); } fprintf(fp, "\n"); fclose(fp); return true; } openscad-2013.01+dfsg.orig/src/openscad.cc0000644000175000017500000002746512076022155017640 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "openscad.h" #include "MainWindow.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "nodedumper.h" #include "printutils.h" #include "handle_dep.h" #include "parsersettings.h" #include #include #include #ifdef ENABLE_CGAL #include "CGAL_Nef_polyhedron.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #endif #include #include #include #ifdef Q_WS_MAC #include "EventFilter.h" #include "AppleEvents.h" #endif #include #include #include #include "boosty.h" #ifdef _MSC_VER #define snprintf _snprintf #endif namespace po = boost::program_options; namespace fs = boost::filesystem; static void help(const char *progname) { fprintf(stderr, "Usage: %s [ -o output_file [ -d deps_file ] ]\\\n" "%*s[ -m make_command ] [ -D var=val [..] ] filename\n", progname, int(strlen(progname))+8, ""); exit(1); } #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) static void version() { printf("OpenSCAD version %s\n", TOSTRING(OPENSCAD_VERSION)); exit(1); } std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; using std::vector; int main(int argc, char **argv) { int rc = 0; #ifdef ENABLE_CGAL // Causes CGAL errors to abort directly instead of throwing exceptions // (which we don't catch). This gives us stack traces without rerunning in gdb. CGAL::set_error_behaviour(CGAL::ABORT); #endif Builtins::instance()->initialize(); #ifdef Q_WS_X11 // see : // On X11, the window system is initialized if GUIenabled is true. If GUIenabled // is false, the application does not connect to the X server. On Windows and // Macintosh, currently the window system is always initialized, regardless of the // value of GUIenabled. This may change in future versions of Qt. bool useGUI = getenv("DISPLAY") != 0; #else bool useGUI = true; #endif QApplication app(argc, argv, useGUI); #ifdef Q_WS_MAC app.installEventFilter(new EventFilter(&app)); #endif fs::path original_path = fs::current_path(); // set up groups for QSettings QCoreApplication::setOrganizationName("OpenSCAD"); QCoreApplication::setOrganizationDomain("openscad.org"); QCoreApplication::setApplicationName("OpenSCAD"); QCoreApplication::setApplicationVersion(TOSTRING(OPENSCAD_VERSION)); const char *filename = NULL; const char *output_file = NULL; const char *deps_output_file = NULL; po::options_description desc("Allowed options"); desc.add_options() ("help,h", "help message") ("version,v", "print the version") ("o,o", po::value(), "out-file") ("s,s", po::value(), "stl-file") ("x,x", po::value(), "dxf-file") ("d,d", po::value(), "deps-file") ("m,m", po::value(), "makefile") ("D,D", po::value >(), "var=val"); po::options_description hidden("Hidden options"); hidden.add_options() ("input-file", po::value< vector >(), "input file"); po::positional_options_description p; p.add("input-file", -1); po::options_description all_options; all_options.add(desc).add(hidden); po::variables_map vm; try { po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm); } catch(const std::exception &e) { // Catches e.g. unknown options fprintf(stderr, "%s\n", e.what()); help(argv[0]); } if (vm.count("help")) help(argv[0]); if (vm.count("version")) version(); if (vm.count("o")) { // FIXME: Allow for multiple output files? if (output_file) help(argv[0]); output_file = vm["o"].as().c_str(); } if (vm.count("s")) { fprintf(stderr, "DEPRECATED: The -s option is deprecated. Use -o instead.\n"); if (output_file) help(argv[0]); output_file = vm["s"].as().c_str(); } if (vm.count("x")) { fprintf(stderr, "DEPRECATED: The -x option is deprecated. Use -o instead.\n"); if (output_file) help(argv[0]); output_file = vm["x"].as().c_str(); } if (vm.count("d")) { if (deps_output_file) help(argv[0]); deps_output_file = vm["d"].as().c_str(); } if (vm.count("m")) { if (make_command) help(argv[0]); make_command = vm["m"].as().c_str(); } if (vm.count("D")) { BOOST_FOREACH(const string &cmd, vm["D"].as >()) { commandline_commands += cmd; commandline_commands += ";\n"; } } if (vm.count("input-file")) { filename = vm["input-file"].as< vector >().begin()->c_str(); } #ifndef ENABLE_MDI if (vm.count("input-file") > 1) { help(argv[0]); } #endif currentdir = boosty::stringy(fs::current_path()); QDir exdir(QApplication::instance()->applicationDirPath()); #ifdef Q_WS_MAC exdir.cd("../Resources"); // Examples can be bundled if (!exdir.exists("examples")) exdir.cd("../../.."); #elif defined(Q_OS_UNIX) if (exdir.cd("../share/openscad/examples")) { examplesdir = exdir.path(); } else if (exdir.cd("../../share/openscad/examples")) { examplesdir = exdir.path(); } else if (exdir.cd("../../examples")) { examplesdir = exdir.path(); } else #endif if (exdir.cd("examples")) { examplesdir = exdir.path(); } parser_init(QApplication::instance()->applicationDirPath().toStdString()); // Initialize global visitors NodeCache nodecache; NodeDumper dumper(nodecache); Tree tree; #ifdef ENABLE_CGAL CGALEvaluator cgalevaluator(tree); PolySetCGALEvaluator psevaluator(cgalevaluator); #endif if (output_file) { const char *stl_output_file = NULL; const char *off_output_file = NULL; const char *dxf_output_file = NULL; const char *csg_output_file = NULL; QString suffix = QFileInfo(output_file).suffix().toLower(); if (suffix == "stl") stl_output_file = output_file; else if (suffix == "off") off_output_file = output_file; else if (suffix == "dxf") dxf_output_file = output_file; else if (suffix == "csg") csg_output_file = output_file; else { fprintf(stderr, "Unknown suffix for output file %s\n", output_file); exit(1); } if (!filename) help(argv[0]); #ifdef ENABLE_CGAL Context root_ctx; register_builtin(root_ctx); Module *root_module; ModuleInstantiation root_inst; AbstractNode *root_node; handle_dep(filename); std::ifstream ifs(filename); if (!ifs.is_open()) { fprintf(stderr, "Can't open input file '%s'!\n", filename); exit(1); } std::string text((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); text += "\n" + commandline_commands; fs::path abspath = boosty::absolute(filename); std::string parentpath = boosty::stringy(abspath.parent_path()); root_module = parse(text.c_str(), parentpath.c_str(), false); if (!root_module) exit(1); root_module->handleDependencies(); fs::path fpath = boosty::absolute(fs::path(filename)); fs::path fparent = fpath.parent_path(); fs::current_path(fparent); AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); tree.setRoot(root_node); if (csg_output_file) { fs::current_path(original_path); std::ofstream fstream(csg_output_file); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", csg_output_file); } else { fs::current_path(fparent); // Force exported filenames to be relative to document path fstream << tree.getString(*root_node) << "\n"; fstream.close(); } } else { CGAL_Nef_polyhedron root_N = cgalevaluator.evaluateCGALMesh(*tree.root()); fs::current_path(original_path); if (deps_output_file) { std::string deps_out( deps_output_file ); std::string geom_out; if ( stl_output_file ) geom_out = std::string(stl_output_file); else if ( off_output_file ) geom_out = std::string(off_output_file); else if ( dxf_output_file ) geom_out = std::string(dxf_output_file); else { PRINTB("Output file:%s\n",output_file); PRINT("Sorry, don't know how to write deps for that file type. Exiting\n"); exit(1); } int result = write_deps( deps_out, geom_out ); if ( !result ) { PRINT("error writing deps"); exit(1); } } if (stl_output_file) { if (root_N.dim != 3) { fprintf(stderr, "Current top level object is not a 3D object.\n"); exit(1); } if (!root_N.p3->is_simple()) { fprintf(stderr, "Object isn't a valid 2-manifold! Modify your design.\n"); exit(1); } std::ofstream fstream(stl_output_file); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", stl_output_file); } else { export_stl(&root_N, fstream); fstream.close(); } } if (off_output_file) { if (root_N.dim != 3) { fprintf(stderr, "Current top level object is not a 3D object.\n"); exit(1); } if (!root_N.p3->is_simple()) { fprintf(stderr, "Object isn't a valid 2-manifold! Modify your design.\n"); exit(1); } std::ofstream fstream(off_output_file); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", off_output_file); } else { export_off(&root_N, fstream); fstream.close(); } } if (dxf_output_file) { if (root_N.dim != 2) { fprintf(stderr, "Current top level object is not a 2D object.\n"); exit(1); } std::ofstream fstream(dxf_output_file); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", dxf_output_file); } else { export_dxf(&root_N, fstream); fstream.close(); } } } delete root_node; #else fprintf(stderr, "OpenSCAD has been compiled without CGAL support!\n"); exit(1); #endif } else if (useGUI) { #ifdef Q_WS_MAC installAppleEventHandlers(); #endif QString qfilename; if (filename) qfilename = QString::fromStdString(boosty::stringy(boosty::absolute(filename))); #if 0 /*** disabled by clifford wolf: adds rendering artefacts with OpenCSG ***/ // turn on anti-aliasing QGLFormat f; f.setSampleBuffers(true); f.setSamples(4); QGLFormat::setDefaultFormat(f); #endif #ifdef ENABLE_MDI new MainWindow(qfilename); vector inputFiles; if (vm.count("input-file")) { inputFiles = vm["input-file"].as >(); for (vector::const_iterator infile = inputFiles.begin()+1; infile != inputFiles.end(); infile++) { new MainWindow(QString::fromStdString(boosty::stringy((original_path / *infile)))); } } app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit())); #else MainWindow *m = new MainWindow(qfilename); app.connect(m, SIGNAL(destroyed()), &app, SLOT(quit())); #endif rc = app.exec(); } else { fprintf(stderr, "Requested GUI mode but can't open display!\n"); exit(1); } Builtins::instance(true); return rc; } openscad-2013.01+dfsg.orig/src/CGAL_Nef_polyhedron.cc0000644000175000017500000000617712076022154021601 0ustar chrysnchrysn#include "CGAL_Nef_polyhedron.h" #include "cgal.h" #include "cgalutils.h" #include "printutils.h" #include "polyset.h" #include "dxfdata.h" #include "dxftess.h" CGAL_Nef_polyhedron::CGAL_Nef_polyhedron(CGAL_Nef_polyhedron2 *p) { if (p) { dim = 2; p2.reset(p); } else { dim = 0; } } CGAL_Nef_polyhedron::CGAL_Nef_polyhedron(CGAL_Nef_polyhedron3 *p) { if (p) { dim = 3; p3.reset(p); } else { dim = 0; } } CGAL_Nef_polyhedron& CGAL_Nef_polyhedron::operator+=(const CGAL_Nef_polyhedron &other) { if (this->dim == 2) (*this->p2) += (*other.p2); else if (this->dim == 3) (*this->p3) += (*other.p3); return *this; } CGAL_Nef_polyhedron& CGAL_Nef_polyhedron::operator*=(const CGAL_Nef_polyhedron &other) { if (this->dim == 2) (*this->p2) *= (*other.p2); else if (this->dim == 3) (*this->p3) *= (*other.p3); return *this; } CGAL_Nef_polyhedron& CGAL_Nef_polyhedron::operator-=(const CGAL_Nef_polyhedron &other) { if (this->dim == 2) (*this->p2) -= (*other.p2); else if (this->dim == 3) (*this->p3) -= (*other.p3); return *this; } extern CGAL_Nef_polyhedron2 minkowski2(const CGAL_Nef_polyhedron2 &a, const CGAL_Nef_polyhedron2 &b); CGAL_Nef_polyhedron &CGAL_Nef_polyhedron::minkowski(const CGAL_Nef_polyhedron &other) { if (this->dim == 2) (*this->p2) = minkowski2(*this->p2, *other.p2); else if (this->dim == 3) (*this->p3) = CGAL::minkowski_sum_3(*this->p3, *other.p3); return *this; } int CGAL_Nef_polyhedron::weight() const { if (this->isNull()) return 0; size_t memsize = sizeof(CGAL_Nef_polyhedron); if (this->dim == 2) { memsize += sizeof(CGAL_Nef_polyhedron2) + this->p2->explorer().number_of_vertices() * sizeof(CGAL_Nef_polyhedron2::Explorer::Vertex) + this->p2->explorer().number_of_halfedges() * sizeof(CGAL_Nef_polyhedron2::Explorer::Halfedge) + this->p2->explorer().number_of_edges() * sizeof(CGAL_Nef_polyhedron2::Explorer::Face); } if (this->dim == 3) memsize += this->p3->bytes(); return memsize; } /*! Creates a new PolySet and initializes it with the data from this polyhedron This method is not const since convert_to_Polyhedron() wasn't const in earlier versions of CGAL. Note: Can return NULL if an error occurred */ PolySet *CGAL_Nef_polyhedron::convertToPolyset() { if (this->isNull()) return new PolySet(); PolySet *ps = NULL; if (this->dim == 2) { ps = new PolySet(); DxfData *dd = this->convertToDxfData(); ps->is2d = true; dxf_tesselate(ps, *dd, 0, true, false, 0); dxf_border_to_ps(ps, *dd); delete dd; } else if (this->dim == 3) { CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { CGAL_Polyhedron P; this->p3->convert_to_Polyhedron(P); ps = createPolySetFromPolyhedron(P); } catch (const CGAL::Precondition_exception &e) { PRINTB("CGAL error in CGAL_Nef_polyhedron::convertToPolyset(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); } return ps; } /*! Deep copy */ CGAL_Nef_polyhedron CGAL_Nef_polyhedron::copy() const { CGAL_Nef_polyhedron copy = *this; if (copy.p2) copy.p2.reset(new CGAL_Nef_polyhedron2(*copy.p2)); else if (copy.p3) copy.p3.reset(new CGAL_Nef_polyhedron3(*copy.p3)); return copy; } openscad-2013.01+dfsg.orig/src/OpenCSGRenderer.h0000644000175000017500000000107111642654340020621 0ustar chrysnchrysn#ifndef OPENCSGRENDERER_H_ #define OPENCSGRENDERER_H_ #include "renderer.h" #include "system-gl.h" class OpenCSGRenderer : public Renderer { public: OpenCSGRenderer(class CSGChain *root_chain, CSGChain *highlights_chain, CSGChain *background_chain, GLint *shaderinfo); void draw(bool showfaces, bool showedges) const; private: void renderCSGChain(class CSGChain *chain, GLint *shaderinfo, bool highlight, bool background) const; CSGChain *root_chain; CSGChain *highlights_chain; CSGChain *background_chain; GLint *shaderinfo; }; #endif openscad-2013.01+dfsg.orig/src/dxfdim.h0000644000175000017500000000034211640436732017150 0ustar chrysnchrysn#ifndef DXFDIM_H_ #define DXFDIM_H_ #include #include "value.h" extern boost::unordered_map dxf_dim_cache; extern boost::unordered_map dxf_cross_cache; #endif openscad-2013.01+dfsg.orig/src/module.cc0000644000175000017500000001567012076022155017324 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "module.h" #include "ModuleCache.h" #include "node.h" #include "context.h" #include "expression.h" #include "function.h" #include "printutils.h" #include #include #include AbstractModule::~AbstractModule() { } AbstractNode *AbstractModule::evaluate(const Context*, const ModuleInstantiation *inst) const { AbstractNode *node = new AbstractNode(inst); node->children = inst->evaluateChildren(); return node; } std::string AbstractModule::dump(const std::string &indent, const std::string &name) const { std::stringstream dump; dump << indent << "abstract module " << name << "();\n"; return dump.str(); } ModuleInstantiation::~ModuleInstantiation() { BOOST_FOREACH (Expression *v, argexpr) delete v; BOOST_FOREACH (ModuleInstantiation *v, children) delete v; } IfElseModuleInstantiation::~IfElseModuleInstantiation() { BOOST_FOREACH (ModuleInstantiation *v, else_children) delete v; } std::string ModuleInstantiation::dump(const std::string &indent) const { std::stringstream dump; dump << indent; dump << modname + "("; for (size_t i=0; i < argnames.size(); i++) { if (i > 0) dump << ", "; if (!argnames[i].empty()) dump << argnames[i] << " = "; dump << *argexpr[i]; } if (children.size() == 0) { dump << ");\n"; } else if (children.size() == 1) { dump << ")\n"; dump << children[0]->dump(indent + "\t"); } else { dump << ") {\n"; for (size_t i = 0; i < children.size(); i++) { dump << children[i]->dump(indent + "\t"); } dump << indent << "}\n"; } return dump.str(); } AbstractNode *ModuleInstantiation::evaluate(const Context *ctx) const { AbstractNode *node = NULL; if (this->ctx) { PRINTB("WARNING: Ignoring recursive module instantiation of '%s'.", modname); } else { // FIXME: Casting away const.. ModuleInstantiation *that = (ModuleInstantiation*)this; that->argvalues.clear(); BOOST_FOREACH (Expression *expr, that->argexpr) { that->argvalues.push_back(expr->evaluate(ctx)); } that->ctx = ctx; node = ctx->evaluate_module(*this); that->ctx = NULL; that->argvalues.clear(); } return node; } std::vector ModuleInstantiation::evaluateChildren(const Context *ctx) const { if (!ctx) ctx = this->ctx; std::vector childnodes; BOOST_FOREACH (ModuleInstantiation *modinst, this->children) { AbstractNode *node = modinst->evaluate(ctx); if (node) childnodes.push_back(node); } return childnodes; } std::vector IfElseModuleInstantiation::evaluateElseChildren(const Context *ctx) const { if (!ctx) ctx = this->ctx; std::vector childnodes; BOOST_FOREACH (ModuleInstantiation *modinst, this->else_children) { AbstractNode *node = modinst->evaluate(ctx); if (node != NULL) childnodes.push_back(node); } return childnodes; } Module::~Module() { BOOST_FOREACH (Expression *v, assignments_expr) delete v; BOOST_FOREACH (FunctionContainer::value_type &f, functions) delete f.second; BOOST_FOREACH (AbstractModuleContainer::value_type &m, modules) delete m.second; BOOST_FOREACH (ModuleInstantiation *v, children) delete v; } AbstractNode *Module::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); c.inst_p = inst; c.set_variable("$children", Value(double(inst->children.size()))); c.functions_p = &functions; c.modules_p = &modules; if (!usedlibs.empty()) c.usedlibs_p = &usedlibs; else c.usedlibs_p = NULL; for (size_t i = 0; i < assignments_var.size(); i++) { c.set_variable(assignments_var[i], assignments_expr[i]->evaluate(&c)); } AbstractNode *node = new AbstractNode(inst); for (size_t i = 0; i < children.size(); i++) { AbstractNode *n = children[i]->evaluate(&c); if (n != NULL) node->children.push_back(n); } return node; } std::string Module::dump(const std::string &indent, const std::string &name) const { std::stringstream dump; std::string tab; if (!name.empty()) { dump << indent << "module " << name << "("; for (size_t i=0; i < argnames.size(); i++) { if (i > 0) dump << ", "; dump << argnames[i]; if (argexpr[i]) dump << " = " << *argexpr[i]; } dump << ") {\n"; tab = "\t"; } BOOST_FOREACH(const FunctionContainer::value_type &f, functions) { dump << f.second->dump(indent + tab, f.first); } BOOST_FOREACH(const AbstractModuleContainer::value_type &m, modules) { dump << m.second->dump(indent + tab, m.first); } for (size_t i = 0; i < assignments_var.size(); i++) { dump << indent << tab << assignments_var[i] << " = " << *assignments_expr[i] << ";\n"; } for (size_t i = 0; i < children.size(); i++) { dump << children[i]->dump(indent + tab); } if (!name.empty()) { dump << indent << "}\n"; } return dump.str(); } void Module::registerInclude(const std::string &filename) { struct stat st; memset(&st, 0, sizeof(struct stat)); stat(filename.c_str(), &st); this->includes[filename] = st.st_mtime; } /*! Check if any dependencies have been modified and recompile them. Returns true if anything was recompiled. */ bool Module::handleDependencies() { if (this->is_handling_dependencies) return false; this->is_handling_dependencies = true; bool changed = false; // Iterating manually since we want to modify the container while iterating Module::ModuleContainer::iterator iter = this->usedlibs.begin(); while (iter != this->usedlibs.end()) { Module::ModuleContainer::iterator curr = iter++; Module *oldmodule = curr->second; curr->second = ModuleCache::instance()->evaluate(curr->first); if (curr->second != oldmodule) { changed = true; #ifdef DEBUG PRINTB_NOCACHE(" %s: %p", curr->first % curr->second); #endif } if (!curr->second) { PRINTB_NOCACHE("WARNING: Failed to compile library '%s'.", curr->first); this->usedlibs.erase(curr); } } this->is_handling_dependencies = false; return changed; } openscad-2013.01+dfsg.orig/src/version_check.cc0000644000175000017500000000003412001145114020632 0ustar chrysnchrysn#include "version_check.h" openscad-2013.01+dfsg.orig/src/dxftess.cc0000644000175000017500000000376011703440510017507 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "printutils.h" #ifdef ENABLE_CGAL #include "dxftess-cgal.cc" #else #include "dxftess-glu.cc" #endif /*! Converts all paths in the given DxfData to PolySet::borders polygons without tesselating. Vertex ordering of the resulting polygons will follow the paths' is_inner flag. */ void dxf_border_to_ps(PolySet *ps, const DxfData &dxf) { for (size_t i = 0; i < dxf.paths.size(); i++) { const DxfData::Path &path = dxf.paths[i]; if (!path.is_closed) continue; ps->borders.push_back(PolySet::Polygon()); for (size_t j = 1; j < path.indices.size(); j++) { double x = dxf.points[path.indices[j]][0], y = dxf.points[path.indices[j]][1], z = 0.0; ps->grid.align(x, y, z); if (path.is_inner) { ps->borders.back().push_back(Vector3d(x, y, z)); } else { ps->borders.back().insert(ps->borders.back().begin(), Vector3d(x, y, z)); } } } } openscad-2013.01+dfsg.orig/src/CGALRenderer.cc0000644000175000017500000001136112076022154020224 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef _MSC_VER // Boost conflicts with MPFR under MSVC (google it) #include #endif // dxfdata.h must come first for Eigen SIMD alignment issues #include "dxfdata.h" #include "polyset.h" #include "CGALRenderer.h" #include "CGAL_renderer.h" #include "dxftess.h" #include "CGAL_Nef_polyhedron.h" #include "cgal.h" //#include "Preferences.h" CGALRenderer::CGALRenderer(const CGAL_Nef_polyhedron &root) : root(root) { if (this->root.isNull()) { this->polyhedron = NULL; this->polyset = NULL; } else if (root.dim == 2) { DxfData *dd = root.convertToDxfData(); this->polyhedron = NULL; this->polyset = new PolySet(); this->polyset->is2d = true; dxf_tesselate(this->polyset, *dd, 0, true, false, 0); delete dd; } else if (root.dim == 3) { this->polyset = NULL; this->polyhedron = new Polyhedron(); // FIXME: Make independent of Preferences // this->polyhedron->setColor(Polyhedron::CGAL_NEF3_MARKED_FACET_COLOR, // Preferences::inst()->color(Preferences::CGAL_FACE_BACK_COLOR).red(), // Preferences::inst()->color(Preferences::CGAL_FACE_BACK_COLOR).green(), // Preferences::inst()->color(Preferences::CGAL_FACE_BACK_COLOR).blue()); // this->polyhedron->setColor(Polyhedron::CGAL_NEF3_UNMARKED_FACET_COLOR, // Preferences::inst()->color(Preferences::CGAL_FACE_FRONT_COLOR).red(), // Preferences::inst()->color(Preferences::CGAL_FACE_FRONT_COLOR).green(), // Preferences::inst()->color(Preferences::CGAL_FACE_FRONT_COLOR).blue()); CGAL::OGL::Nef3_Converter::convert_to_OGLPolyhedron(*this->root.p3, this->polyhedron); this->polyhedron->init(); } } CGALRenderer::~CGALRenderer() { delete this->polyset; delete this->polyhedron; } void CGALRenderer::draw(bool showfaces, bool showedges) const { if (this->root.isNull()) return; if (this->root.dim == 2) { // Draw 2D polygons glDisable(GL_LIGHTING); // FIXME: const QColor &col = Preferences::inst()->color(Preferences::CGAL_FACE_2D_COLOR); glColor3f(0.0f, 0.75f, 0.60f); for (size_t i=0; i < this->polyset->polygons.size(); i++) { glBegin(GL_POLYGON); for (size_t j=0; j < this->polyset->polygons[i].size(); j++) { const Vector3d &p = this->polyset->polygons[i][j]; glVertex3d(p[0], p[1], -0.1); } glEnd(); } typedef CGAL_Nef_polyhedron2::Explorer Explorer; typedef Explorer::Face_const_iterator fci_t; typedef Explorer::Halfedge_around_face_const_circulator heafcc_t; typedef Explorer::Point Point; Explorer E = this->root.p2->explorer(); // Draw 2D edges glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glLineWidth(2); // FIXME: const QColor &col2 = Preferences::inst()->color(Preferences::CGAL_EDGE_2D_COLOR); glColor3f(1.0f, 0.0f, 0.0f); // Extract the boundary, including inner boundaries of the polygons for (fci_t fit = E.faces_begin(), facesend = E.faces_end(); fit != facesend; ++fit) { bool fset = false; double fx = 0.0, fy = 0.0; heafcc_t fcirc(E.halfedge(fit)), fend(fcirc); CGAL_For_all(fcirc, fend) { if(E.is_standard(E.target(fcirc))) { Point p = E.point(E.target(fcirc)); double x = to_double(p.x()), y = to_double(p.y()); if (!fset) { glBegin(GL_LINE_STRIP); fx = x, fy = y; fset = true; } glVertex3d(x, y, -0.1); } } if (fset) { glVertex3d(fx, fy, -0.1); glEnd(); } } glEnable(GL_DEPTH_TEST); } else if (this->root.dim == 3) { if (showfaces) this->polyhedron->set_style(SNC_BOUNDARY); else this->polyhedron->set_style(SNC_SKELETON); this->polyhedron->draw(showfaces && showedges); } } openscad-2013.01+dfsg.orig/src/parsersettings.h0000644000175000017500000000041211777162366020762 0ustar chrysnchrysn#ifndef PARSERSETTINGS_H_ #define PARSERSETTINGS_H_ #include extern int parser_error_pos; void parser_init(const std::string &applicationpath); void add_librarydir(const std::string &libdir); std::string locate_file(const std::string &filename); #endif openscad-2013.01+dfsg.orig/src/namedcolors.cpp0000644000175000017500000001367611640436732020554 0ustar chrysnchrysn#define rgb(r,g,b) (0xff000000 | (r << 16) | (g << 8) | b) static const struct RGBData { const char *name; uint value; } named_colors[] = { { "aliceblue", rgb(240, 248, 255) }, { "antiquewhite", rgb(250, 235, 215) }, { "aqua", rgb( 0, 255, 255) }, { "aquamarine", rgb(127, 255, 212) }, { "azure", rgb(240, 255, 255) }, { "beige", rgb(245, 245, 220) }, { "bisque", rgb(255, 228, 196) }, { "black", rgb( 0, 0, 0) }, { "blanchedalmond", rgb(255, 235, 205) }, { "blue", rgb( 0, 0, 255) }, { "blueviolet", rgb(138, 43, 226) }, { "brown", rgb(165, 42, 42) }, { "burlywood", rgb(222, 184, 135) }, { "cadetblue", rgb( 95, 158, 160) }, { "chartreuse", rgb(127, 255, 0) }, { "chocolate", rgb(210, 105, 30) }, { "coral", rgb(255, 127, 80) }, { "cornflowerblue", rgb(100, 149, 237) }, { "cornsilk", rgb(255, 248, 220) }, { "crimson", rgb(220, 20, 60) }, { "cyan", rgb( 0, 255, 255) }, { "darkblue", rgb( 0, 0, 139) }, { "darkcyan", rgb( 0, 139, 139) }, { "darkgoldenrod", rgb(184, 134, 11) }, { "darkgray", rgb(169, 169, 169) }, { "darkgreen", rgb( 0, 100, 0) }, { "darkgrey", rgb(169, 169, 169) }, { "darkkhaki", rgb(189, 183, 107) }, { "darkmagenta", rgb(139, 0, 139) }, { "darkolivegreen", rgb( 85, 107, 47) }, { "darkorange", rgb(255, 140, 0) }, { "darkorchid", rgb(153, 50, 204) }, { "darkred", rgb(139, 0, 0) }, { "darksalmon", rgb(233, 150, 122) }, { "darkseagreen", rgb(143, 188, 143) }, { "darkslateblue", rgb( 72, 61, 139) }, { "darkslategray", rgb( 47, 79, 79) }, { "darkslategrey", rgb( 47, 79, 79) }, { "darkturquoise", rgb( 0, 206, 209) }, { "darkviolet", rgb(148, 0, 211) }, { "deeppink", rgb(255, 20, 147) }, { "deepskyblue", rgb( 0, 191, 255) }, { "dimgray", rgb(105, 105, 105) }, { "dimgrey", rgb(105, 105, 105) }, { "dodgerblue", rgb( 30, 144, 255) }, { "firebrick", rgb(178, 34, 34) }, { "floralwhite", rgb(255, 250, 240) }, { "forestgreen", rgb( 34, 139, 34) }, { "fuchsia", rgb(255, 0, 255) }, { "gainsboro", rgb(220, 220, 220) }, { "ghostwhite", rgb(248, 248, 255) }, { "gold", rgb(255, 215, 0) }, { "goldenrod", rgb(218, 165, 32) }, { "gray", rgb(128, 128, 128) }, { "green", rgb( 0, 128, 0) }, { "greenyellow", rgb(173, 255, 47) }, { "grey", rgb(128, 128, 128) }, { "honeydew", rgb(240, 255, 240) }, { "hotpink", rgb(255, 105, 180) }, { "indianred", rgb(205, 92, 92) }, { "indigo", rgb( 75, 0, 130) }, { "ivory", rgb(255, 255, 240) }, { "khaki", rgb(240, 230, 140) }, { "lavender", rgb(230, 230, 250) }, { "lavenderblush", rgb(255, 240, 245) }, { "lawngreen", rgb(124, 252, 0) }, { "lemonchiffon", rgb(255, 250, 205) }, { "lightblue", rgb(173, 216, 230) }, { "lightcoral", rgb(240, 128, 128) }, { "lightcyan", rgb(224, 255, 255) }, { "lightgoldenrodyellow", rgb(250, 250, 210) }, { "lightgray", rgb(211, 211, 211) }, { "lightgreen", rgb(144, 238, 144) }, { "lightgrey", rgb(211, 211, 211) }, { "lightpink", rgb(255, 182, 193) }, { "lightsalmon", rgb(255, 160, 122) }, { "lightseagreen", rgb( 32, 178, 170) }, { "lightskyblue", rgb(135, 206, 250) }, { "lightslategray", rgb(119, 136, 153) }, { "lightslategrey", rgb(119, 136, 153) }, { "lightsteelblue", rgb(176, 196, 222) }, { "lightyellow", rgb(255, 255, 224) }, { "lime", rgb( 0, 255, 0) }, { "limegreen", rgb( 50, 205, 50) }, { "linen", rgb(250, 240, 230) }, { "magenta", rgb(255, 0, 255) }, { "maroon", rgb(128, 0, 0) }, { "mediumaquamarine", rgb(102, 205, 170) }, { "mediumblue", rgb( 0, 0, 205) }, { "mediumorchid", rgb(186, 85, 211) }, { "mediumpurple", rgb(147, 112, 219) }, { "mediumseagreen", rgb( 60, 179, 113) }, { "mediumslateblue", rgb(123, 104, 238) }, { "mediumspringgreen", rgb( 0, 250, 154) }, { "mediumturquoise", rgb( 72, 209, 204) }, { "mediumvioletred", rgb(199, 21, 133) }, { "midnightblue", rgb( 25, 25, 112) }, { "mintcream", rgb(245, 255, 250) }, { "mistyrose", rgb(255, 228, 225) }, { "moccasin", rgb(255, 228, 181) }, { "navajowhite", rgb(255, 222, 173) }, { "navy", rgb( 0, 0, 128) }, { "oldlace", rgb(253, 245, 230) }, { "olive", rgb(128, 128, 0) }, { "olivedrab", rgb(107, 142, 35) }, { "orange", rgb(255, 165, 0) }, { "orangered", rgb(255, 69, 0) }, { "orchid", rgb(218, 112, 214) }, { "palegoldenrod", rgb(238, 232, 170) }, { "palegreen", rgb(152, 251, 152) }, { "paleturquoise", rgb(175, 238, 238) }, { "palevioletred", rgb(219, 112, 147) }, { "papayawhip", rgb(255, 239, 213) }, { "peachpuff", rgb(255, 218, 185) }, { "peru", rgb(205, 133, 63) }, { "pink", rgb(255, 192, 203) }, { "plum", rgb(221, 160, 221) }, { "powderblue", rgb(176, 224, 230) }, { "purple", rgb(128, 0, 128) }, { "red", rgb(255, 0, 0) }, { "rosybrown", rgb(188, 143, 143) }, { "royalblue", rgb( 65, 105, 225) }, { "saddlebrown", rgb(139, 69, 19) }, { "salmon", rgb(250, 128, 114) }, { "sandybrown", rgb(244, 164, 96) }, { "seagreen", rgb( 46, 139, 87) }, { "seashell", rgb(255, 245, 238) }, { "sienna", rgb(160, 82, 45) }, { "silver", rgb(192, 192, 192) }, { "skyblue", rgb(135, 206, 235) }, { "slateblue", rgb(106, 90, 205) }, { "slategray", rgb(112, 128, 144) }, { "slategrey", rgb(112, 128, 144) }, { "snow", rgb(255, 250, 250) }, { "springgreen", rgb( 0, 255, 127) }, { "steelblue", rgb( 70, 130, 180) }, { "tan", rgb(210, 180, 140) }, { "teal", rgb( 0, 128, 128) }, { "thistle", rgb(216, 191, 216) }, { "tomato", rgb(255, 99, 71) }, { "transparent", 0 }, { "turquoise", rgb( 64, 224, 208) }, { "violet", rgb(238, 130, 238) }, { "wheat", rgb(245, 222, 179) }, { "white", rgb(255, 255, 255) }, { "whitesmoke", rgb(245, 245, 245) }, { "yellow", rgb(255, 255, 0) }, { "yellowgreen", rgb(154, 205, 50) } }; openscad-2013.01+dfsg.orig/src/progress.cc0000644000175000017500000000125611641446566017713 0ustar chrysnchrysn#include "progress.h" #include "node.h" int progress_report_count; void (*progress_report_f)(const class AbstractNode*, void*, int); void *progress_report_userdata; void progress_report_prep(AbstractNode *root, void (*f)(const class AbstractNode *node, void *userdata, int mark), void *userdata) { progress_report_count = 0; progress_report_f = f; progress_report_userdata = userdata; root->progress_prepare(); } void progress_report_fin() { progress_report_count = 0; progress_report_f = NULL; progress_report_userdata = NULL; } void progress_update(const AbstractNode *node, int mark) { if (progress_report_f) progress_report_f(node, progress_report_userdata, mark); } openscad-2013.01+dfsg.orig/src/CGAL_Nef_polyhedron.h0000644000175000017500000000220112076022154021423 0ustar chrysnchrysn#ifndef CGAL_NEF_POLYHEDRON_H_ #define CGAL_NEF_POLYHEDRON_H_ #include "cgalfwd.h" #include "memory.h" #include class CGAL_Nef_polyhedron { public: CGAL_Nef_polyhedron(int dim = 0) : dim(dim) {} CGAL_Nef_polyhedron(CGAL_Nef_polyhedron2 *p); CGAL_Nef_polyhedron(CGAL_Nef_polyhedron3 *p); ~CGAL_Nef_polyhedron() {} // Empty means it is a geometric node which has zero area/volume bool isEmpty() const { return (dim > 0 && !p2 && !p3); } // Null means the node doesn't contain any geometry (for whatever reason) bool isNull() const { return !p2 && !p3; } void reset() { dim=0; p2.reset(); p3.reset(); } CGAL_Nef_polyhedron &operator+=(const CGAL_Nef_polyhedron &other); CGAL_Nef_polyhedron &operator*=(const CGAL_Nef_polyhedron &other); CGAL_Nef_polyhedron &operator-=(const CGAL_Nef_polyhedron &other); CGAL_Nef_polyhedron &minkowski(const CGAL_Nef_polyhedron &other); CGAL_Nef_polyhedron copy() const; std::string dump() const; int weight() const; class PolySet *convertToPolyset(); class DxfData *convertToDxfData() const; int dim; shared_ptr p2; shared_ptr p3; }; #endif openscad-2013.01+dfsg.orig/src/OpenCSGWarningDialog.ui0000644000175000017500000000533212075136670021774 0ustar chrysnchrysn OpenCSGWarningDialog 0 0 412 275 OpenGL Warning true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html> Enable OpenCSG true Show this message again true Qt::Horizontal 40 20 Close closeButton clicked() OpenCSGWarningDialog accept() 361 246 205 137 openscad-2013.01+dfsg.orig/src/cgalutils.h0000644000175000017500000000053412076022155017661 0ustar chrysnchrysn#ifndef CGALUTILS_H_ #define CGALUTILS_H_ #include class PolySet *createPolySetFromPolyhedron(const CGAL_Polyhedron &p); CGAL_Polyhedron *createPolyhedronFromPolySet(const class PolySet &ps); CGAL_Iso_cuboid_3 bounding_box( const CGAL_Nef_polyhedron3 &N ); CGAL_Iso_rectangle_2e bounding_box( const CGAL_Nef_polyhedron2 &N ); #endif openscad-2013.01+dfsg.orig/src/PolySetCache.h0000644000175000017500000000153611703565233020225 0ustar chrysnchrysn#ifndef POLYSETCACHE_H_ #define POLYSETCACHE_H_ #include "cache.h" #include "memory.h" class PolySetCache { public: PolySetCache(size_t memorylimit = 100*1024*1024) : cache(memorylimit) {} static PolySetCache *instance() { if (!inst) inst = new PolySetCache; return inst; } bool contains(const std::string &id) const { return this->cache.contains(id); } shared_ptr get(const std::string &id) const { return this->cache[id]->ps; } void insert(const std::string &id, const shared_ptr &ps); size_t maxSize() const; void setMaxSize(size_t limit); void clear() { cache.clear(); } void print(); private: static PolySetCache *inst; struct cache_entry { shared_ptr ps; std::string msg; cache_entry(const shared_ptr &ps); ~cache_entry() { } }; Cache cache; }; #endif openscad-2013.01+dfsg.orig/src/glview.cc0000644000175000017500000004552112014547110017325 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "GLView.h" #include "Preferences.h" #include "renderer.h" #include "rendersettings.h" #include "linalg.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "OpenCSGWarningDialog.h" #include "mathc99.h" #include #ifdef ENABLE_OPENCSG # include #endif #ifdef _WIN32 #include #elif !defined(__APPLE__) #include #endif #define FAR_FAR_AWAY 100000.0 GLView::GLView(QWidget *parent) : QGLWidget(parent), renderer(NULL) { init(); } GLView::GLView(const QGLFormat & format, QWidget *parent) : QGLWidget(format, parent) { init(); } static bool running_under_wine = false; void GLView::init() { this->viewer_distance = 500; this->object_rot_x = 35; this->object_rot_y = 0; this->object_rot_z = -25; this->object_trans_x = 0; this->object_trans_y = 0; this->object_trans_z = 0; this->mouse_drag_active = false; this->showedges = false; this->showfaces = true; this->orthomode = false; this->showaxes = false; this->showcrosshairs = false; for (int i = 0; i < 10; i++) this->shaderinfo[i] = 0; this->statusLabel = NULL; setMouseTracking(true); #ifdef ENABLE_OPENCSG this->is_opencsg_capable = false; this->has_shaders = false; this->opencsg_support = true; static int sId = 0; this->opencsg_id = sId++; #endif // see paintGL() + issue160 + wine FAQ #ifdef _WIN32 #include HMODULE hntdll = GetModuleHandle(L"ntdll.dll"); if (hntdll) if ( (void *)GetProcAddress(hntdll, "wine_get_version") ) running_under_wine = true; #endif } void GLView::setRenderer(Renderer *r) { this->renderer = r; if (r) updateGL(); // Let the last image stay, e.g. to avoid animation flickering } void GLView::initializeGL() { glEnable(GL_DEPTH_TEST); glDepthRange(-FAR_FAR_AWAY, +FAR_FAR_AWAY); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_position0[] = {-1.0, -1.0, +1.0, 0.0}; GLfloat light_position1[] = {+1.0, +1.0, -1.0, 0.0}; glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position0); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT1, GL_POSITION, light_position1); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); #ifdef ENABLE_OPENCSG GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); } GLint rbits, gbits, bbits, abits, dbits, sbits; glGetIntegerv(GL_RED_BITS, &rbits); glGetIntegerv(GL_GREEN_BITS, &gbits); glGetIntegerv(GL_BLUE_BITS, &bbits); glGetIntegerv(GL_ALPHA_BITS, &abits); glGetIntegerv(GL_DEPTH_BITS, &dbits); glGetIntegerv(GL_STENCIL_BITS, &sbits); this->rendererInfo.sprintf("GLEW version %s\n" "OpenGL version %s\n" "%s (%s)\n\n" "RGBA(%d%d%d%d), depth(%d), stencil(%d)\n" "Extensions:\n" "%s\n", glewGetString(GLEW_VERSION), glGetString(GL_VERSION), glGetString(GL_RENDERER), glGetString(GL_VENDOR), rbits, gbits, bbits, abits, dbits, sbits, glGetString(GL_EXTENSIONS)); // FIXME: glGetString(GL_EXTENSIONS) is deprecated in OpenGL 3.0. // Use: glGetIntegerv(GL_NUM_EXTENSIONS, &NumberOfExtensions) and // glGetStringi(GL_EXTENSIONS, i) const char *openscad_disable_gl20_env = getenv("OPENSCAD_DISABLE_GL20"); if (openscad_disable_gl20_env && !strcmp(openscad_disable_gl20_env, "0")) { openscad_disable_gl20_env = NULL; } // All OpenGL 2 contexts are OpenCSG capable if (GLEW_VERSION_2_0) { if (!openscad_disable_gl20_env) { this->is_opencsg_capable = true; this->has_shaders = true; } } // If OpenGL < 2, check for extensions else { if (GLEW_ARB_framebuffer_object) this->is_opencsg_capable = true; else if (GLEW_EXT_framebuffer_object && GLEW_EXT_packed_depth_stencil) { this->is_opencsg_capable = true; } #ifdef WIN32 else if (WGLEW_ARB_pbuffer && WGLEW_ARB_pixel_format) this->is_opencsg_capable = true; #elif !defined(__APPLE__) else if (GLXEW_SGIX_pbuffer && GLXEW_SGIX_fbconfig) this->is_opencsg_capable = true; #endif } if (!GLEW_VERSION_2_0 || !this->is_opencsg_capable) { if (Preferences::inst()->getValue("advanced/opencsg_show_warning").toBool()) { QTimer::singleShot(0, this, SLOT(display_opencsg_warning())); } } if (opencsg_support && this->has_shaders) { /* Uniforms: 1 color1 - face color 2 color2 - edge color 7 xscale 8 yscale Attributes: 3 trig 4 pos_b 5 pos_c 6 mask Other: 9 width 10 height Outputs: tp tr shading */ const char *vs_source = "uniform float xscale, yscale;\n" "attribute vec3 pos_b, pos_c;\n" "attribute vec3 trig, mask;\n" "varying vec3 tp, tr;\n" "varying float shading;\n" "void main() {\n" " vec4 p0 = gl_ModelViewProjectionMatrix * gl_Vertex;\n" " vec4 p1 = gl_ModelViewProjectionMatrix * vec4(pos_b, 1.0);\n" " vec4 p2 = gl_ModelViewProjectionMatrix * vec4(pos_c, 1.0);\n" " float a = distance(vec2(xscale*p1.x/p1.w, yscale*p1.y/p1.w), vec2(xscale*p2.x/p2.w, yscale*p2.y/p2.w));\n" " float b = distance(vec2(xscale*p0.x/p0.w, yscale*p0.y/p0.w), vec2(xscale*p1.x/p1.w, yscale*p1.y/p1.w));\n" " float c = distance(vec2(xscale*p0.x/p0.w, yscale*p0.y/p0.w), vec2(xscale*p2.x/p2.w, yscale*p2.y/p2.w));\n" " float s = (a + b + c) / 2.0;\n" " float A = sqrt(s*(s-a)*(s-b)*(s-c));\n" " float ha = 2.0*A/a;\n" " gl_Position = p0;\n" " tp = mask * ha;\n" " tr = trig;\n" " vec3 normal, lightDir;\n" " normal = normalize(gl_NormalMatrix * gl_Normal);\n" " lightDir = normalize(vec3(gl_LightSource[0].position));\n" " shading = abs(dot(normal, lightDir));\n" "}\n"; /* Inputs: tp && tr - if any components of tp < tr, use color2 (edge color) shading - multiplied by color1. color2 is is without lighting */ const char *fs_source = "uniform vec4 color1, color2;\n" "varying vec3 tp, tr, tmp;\n" "varying float shading;\n" "void main() {\n" " gl_FragColor = vec4(color1.r * shading, color1.g * shading, color1.b * shading, color1.a);\n" " if (tp.x < tr.x || tp.y < tr.y || tp.z < tr.z)\n" " gl_FragColor = color2;\n" "}\n"; GLuint vs = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vs, 1, (const GLchar**)&vs_source, NULL); glCompileShader(vs); GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fs, 1, (const GLchar**)&fs_source, NULL); glCompileShader(fs); GLuint edgeshader_prog = glCreateProgram(); glAttachShader(edgeshader_prog, vs); glAttachShader(edgeshader_prog, fs); glLinkProgram(edgeshader_prog); shaderinfo[0] = edgeshader_prog; shaderinfo[1] = glGetUniformLocation(edgeshader_prog, "color1"); shaderinfo[2] = glGetUniformLocation(edgeshader_prog, "color2"); shaderinfo[3] = glGetAttribLocation(edgeshader_prog, "trig"); shaderinfo[4] = glGetAttribLocation(edgeshader_prog, "pos_b"); shaderinfo[5] = glGetAttribLocation(edgeshader_prog, "pos_c"); shaderinfo[6] = glGetAttribLocation(edgeshader_prog, "mask"); shaderinfo[7] = glGetUniformLocation(edgeshader_prog, "xscale"); shaderinfo[8] = glGetUniformLocation(edgeshader_prog, "yscale"); GLenum err = glGetError(); if (err != GL_NO_ERROR) { fprintf(stderr, "OpenGL Error: %s\n", gluErrorString(err)); } GLint status; glGetProgramiv(edgeshader_prog, GL_LINK_STATUS, &status); if (status == GL_FALSE) { int loglen; char logbuffer[1000]; glGetProgramInfoLog(edgeshader_prog, sizeof(logbuffer), &loglen, logbuffer); fprintf(stderr, "OpenGL Program Linker Error:\n%.*s", loglen, logbuffer); } else { int loglen; char logbuffer[1000]; glGetProgramInfoLog(edgeshader_prog, sizeof(logbuffer), &loglen, logbuffer); if (loglen > 0) { fprintf(stderr, "OpenGL Program Link OK:\n%.*s", loglen, logbuffer); } glValidateProgram(edgeshader_prog); glGetProgramInfoLog(edgeshader_prog, sizeof(logbuffer), &loglen, logbuffer); if (loglen > 0) { fprintf(stderr, "OpenGL Program Validation results:\n%.*s", loglen, logbuffer); } } } #endif /* ENABLE_OPENCSG */ } #ifdef ENABLE_OPENCSG void GLView::display_opencsg_warning() { OpenCSGWarningDialog *dialog = new OpenCSGWarningDialog(this); QString message; if (this->is_opencsg_capable) { message += "Warning: You may experience OpenCSG rendering errors.\n\n"; } else { message += "Warning: Missing OpenGL capabilities for OpenCSG - OpenCSG has been disabled.\n\n"; dialog->enableOpenCSGBox->hide(); } message += "It is highly recommended to use OpenSCAD on a system with " "OpenGL 2.0 or later.\n" "Your renderer information is as follows:\n"; QString rendererinfo; rendererinfo.sprintf("GLEW version %s\n" "%s (%s)\n" "OpenGL version %s\n", glewGetString(GLEW_VERSION), glGetString(GL_RENDERER), glGetString(GL_VENDOR), glGetString(GL_VERSION)); message += rendererinfo; dialog->setText(message); dialog->enableOpenCSGBox->setChecked(Preferences::inst()->getValue("advanced/enable_opencsg_opengl1x").toBool()); dialog->exec(); opencsg_support = this->is_opencsg_capable && Preferences::inst()->getValue("advanced/enable_opencsg_opengl1x").toBool(); } #endif void GLView::resizeGL(int w, int h) { #ifdef ENABLE_OPENCSG shaderinfo[9] = w; shaderinfo[10] = h; #endif glViewport(0, 0, w, h); w_h_ratio = sqrt((double)w / (double)h); setupPerspective(); } void GLView::setupPerspective() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-w_h_ratio, +w_h_ratio, -(1/w_h_ratio), +(1/w_h_ratio), +10.0, +FAR_FAR_AWAY); gluLookAt(0.0, -viewer_distance, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); } void GLView::setupOrtho(double distance, bool offset) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(offset) glTranslated(-0.8, -0.8, 0); double l = distance/10; glOrtho(-w_h_ratio*l, +w_h_ratio*l, -(1/w_h_ratio)*l, +(1/w_h_ratio)*l, -FAR_FAR_AWAY, +FAR_FAR_AWAY); gluLookAt(0.0, -viewer_distance, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0); } void GLView::paintGL() { glEnable(GL_LIGHTING); if (orthomode) setupOrtho(viewer_distance); else setupPerspective(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); Color4f bgcol = RenderSettings::inst()->color(RenderSettings::BACKGROUND_COLOR); glClearColor(bgcol[0], bgcol[1], bgcol[2], 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glRotated(object_rot_x, 1.0, 0.0, 0.0); glRotated(object_rot_y, 0.0, 1.0, 0.0); glRotated(object_rot_z, 0.0, 0.0, 1.0); // FIXME: Crosshairs and axes are lighted, this doesn't make sense and causes them // to change color based on view orientation. if (showcrosshairs) { glLineWidth(3); Color4f col = RenderSettings::inst()->color(RenderSettings::CROSSHAIR_COLOR); glColor3f(col[0], col[1], col[2]); glBegin(GL_LINES); for (double xf = -1; xf <= +1; xf += 2) for (double yf = -1; yf <= +1; yf += 2) { double vd = viewer_distance/20; glVertex3d(-xf*vd, -yf*vd, -vd); glVertex3d(+xf*vd, +yf*vd, +vd); } glEnd(); } glTranslated(object_trans_x, object_trans_y, object_trans_z); // Large gray axis cross inline with the model // FIXME: This is always gray - adjust color to keep contrast with background if (showaxes) { glLineWidth(1); glColor3d(0.5, 0.5, 0.5); glBegin(GL_LINES); double l = viewer_distance/10; glVertex3d(-l, 0, 0); glVertex3d(+l, 0, 0); glVertex3d(0, -l, 0); glVertex3d(0, +l, 0); glVertex3d(0, 0, -l); glVertex3d(0, 0, +l); glEnd(); } glDepthFunc(GL_LESS); glCullFace(GL_BACK); glDisable(GL_CULL_FACE); glLineWidth(2); glColor3d(1.0, 0.0, 0.0); if (this->renderer) { #if defined(ENABLE_MDI) && defined(ENABLE_OPENCSG) // FIXME: This belongs in the OpenCSG renderer, but it doesn't know about this ID yet OpenCSG::setContext(this->opencsg_id); #endif this->renderer->draw(showfaces, showedges); } // Small axis cross in the lower left corner if (showaxes) { glDepthFunc(GL_ALWAYS); setupOrtho(1000,true); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotated(object_rot_x, 1.0, 0.0, 0.0); glRotated(object_rot_y, 0.0, 1.0, 0.0); glRotated(object_rot_z, 0.0, 0.0, 1.0); glLineWidth(1); glBegin(GL_LINES); glColor3d(1.0, 0.0, 0.0); glVertex3d(0, 0, 0); glVertex3d(10, 0, 0); glColor3d(0.0, 1.0, 0.0); glVertex3d(0, 0, 0); glVertex3d(0, 10, 0); glColor3d(0.0, 0.0, 1.0); glVertex3d(0, 0, 0); glVertex3d(0, 0, 10); glEnd(); GLdouble mat_model[16]; glGetDoublev(GL_MODELVIEW_MATRIX, mat_model); GLdouble mat_proj[16]; glGetDoublev(GL_PROJECTION_MATRIX, mat_proj); GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); GLdouble xlabel_x, xlabel_y, xlabel_z; gluProject(12, 0, 0, mat_model, mat_proj, viewport, &xlabel_x, &xlabel_y, &xlabel_z); xlabel_x = round(xlabel_x); xlabel_y = round(xlabel_y); GLdouble ylabel_x, ylabel_y, ylabel_z; gluProject(0, 12, 0, mat_model, mat_proj, viewport, &ylabel_x, &ylabel_y, &ylabel_z); ylabel_x = round(ylabel_x); ylabel_y = round(ylabel_y); GLdouble zlabel_x, zlabel_y, zlabel_z; gluProject(0, 0, 12, mat_model, mat_proj, viewport, &zlabel_x, &zlabel_y, &zlabel_z); zlabel_x = round(zlabel_x); zlabel_y = round(zlabel_y); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glTranslated(-1, -1, 0); glScaled(2.0/viewport[2], 2.0/viewport[3], 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // FIXME: This was an attempt to keep contrast with background, but is suboptimal // (e.g. nearly invisible against a gray background). // int r,g,b; // r=g=b=0; // bgcol.getRgb(&r, &g, &b); // glColor3f((255.0f-r)/255.0f, (255.0f-g)/255.0f, (255.0f-b)/255.0f); glColor3f(0.0f, 0.0f, 0.0f); glBegin(GL_LINES); // X Label glVertex3d(xlabel_x-3, xlabel_y-3, 0); glVertex3d(xlabel_x+3, xlabel_y+3, 0); glVertex3d(xlabel_x-3, xlabel_y+3, 0); glVertex3d(xlabel_x+3, xlabel_y-3, 0); // Y Label glVertex3d(ylabel_x-3, ylabel_y-3, 0); glVertex3d(ylabel_x+3, ylabel_y+3, 0); glVertex3d(ylabel_x-3, ylabel_y+3, 0); glVertex3d(ylabel_x, ylabel_y, 0); // Z Label glVertex3d(zlabel_x-3, zlabel_y-3, 0); glVertex3d(zlabel_x+3, zlabel_y-3, 0); glVertex3d(zlabel_x-3, zlabel_y+3, 0); glVertex3d(zlabel_x+3, zlabel_y+3, 0); glVertex3d(zlabel_x-3, zlabel_y-3, 0); glVertex3d(zlabel_x+3, zlabel_y+3, 0); glEnd(); //Restore perspective for next paint if(!orthomode) setupPerspective(); } if (statusLabel) { QString msg; msg.sprintf("Viewport: translate = [ %.2f %.2f %.2f ], rotate = [ %.2f %.2f %.2f ], distance = %.2f", -object_trans_x, -object_trans_y, -object_trans_z, fmodf(360 - object_rot_x + 90, 360), fmodf(360 - object_rot_y, 360), fmodf(360 - object_rot_z, 360), viewer_distance); statusLabel->setText(msg); } if (running_under_wine) swapBuffers(); } void GLView::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Plus) { viewer_distance *= 0.9; updateGL(); return; } if (event->key() == Qt::Key_Minus) { viewer_distance /= 0.9; updateGL(); return; } } void GLView::wheelEvent(QWheelEvent *event) { viewer_distance *= pow(0.9, event->delta() / 120.0); updateGL(); } void GLView::mousePressEvent(QMouseEvent *event) { mouse_drag_active = true; last_mouse = event->globalPos(); } void GLView::normalizeAngle(GLdouble& angle) { while(angle < 0) angle += 360; while(angle > 360) angle -= 360; } void GLView::mouseMoveEvent(QMouseEvent *event) { QPoint this_mouse = event->globalPos(); double dx = (this_mouse.x()-last_mouse.x()) * 0.7; double dy = (this_mouse.y()-last_mouse.y()) * 0.7; if (mouse_drag_active) { if (event->buttons() & Qt::LeftButton #ifdef Q_WS_MAC && !(event->modifiers() & Qt::MetaModifier) #endif ) { // Left button rotates in xz, Shift-left rotates in xy // On Mac, Ctrl-Left is handled as right button on other platforms object_rot_x += dy; if ((QApplication::keyboardModifiers() & Qt::ShiftModifier) != 0) object_rot_y += dx; else object_rot_z += dx; normalizeAngle(object_rot_x); normalizeAngle(object_rot_y); normalizeAngle(object_rot_z); } else { // Right button pans in the xz plane // Middle button pans in the xy plane // Shift-right and Shift-middle zooms if ((QApplication::keyboardModifiers() & Qt::ShiftModifier) != 0) { viewer_distance += (GLdouble)dy; } else { double mx = +(dx) * viewer_distance/1000; double mz = -(dy) * viewer_distance/1000; double my = 0; #if (QT_VERSION < QT_VERSION_CHECK(4, 7, 0)) if (event->buttons() & Qt::MidButton) { #else if (event->buttons() & Qt::MiddleButton) { #endif my = mz; mz = 0; // actually lock the x-position // (turns out to be easier to use than xy panning) mx = 0; } Matrix3d aax, aay, aaz, tm3; aax = Eigen::AngleAxisd(-(object_rot_x/180) * M_PI, Vector3d::UnitX()); aay = Eigen::AngleAxisd(-(object_rot_y/180) * M_PI, Vector3d::UnitY()); aaz = Eigen::AngleAxisd(-(object_rot_z/180) * M_PI, Vector3d::UnitZ()); tm3 = Matrix3d::Identity(); tm3 = aaz * (aay * (aax * tm3)); Matrix4d tm; tm = Matrix4d::Identity(); for (int i=0;i<3;i++) for (int j=0;j<3;j++) tm(j,i)=tm3(j,i); Matrix4d vec; vec << 0, 0, 0, mx, 0, 0, 0, my, 0, 0, 0, mz, 0, 0, 0, 1 ; tm = tm * vec; object_trans_x += tm(0,3); object_trans_y += tm(1,3); object_trans_z += tm(2,3); } } updateGL(); emit doAnimateUpdate(); } last_mouse = this_mouse; } void GLView::mouseReleaseEvent(QMouseEvent*) { mouse_drag_active = false; releaseMouse(); } openscad-2013.01+dfsg.orig/src/CGALEvaluator.h0000644000175000017500000000345612021530204020256 0ustar chrysnchrysn#ifndef CGALEVALUATOR_H_ #define CGALEVALUATOR_H_ #include "visitor.h" #include "CGAL_Nef_polyhedron.h" #include "PolySetCGALEvaluator.h" #include #include #include class CGALEvaluator : public Visitor { public: enum CsgOp {CGE_UNION, CGE_INTERSECTION, CGE_DIFFERENCE, CGE_MINKOWSKI}; CGALEvaluator(const class Tree &tree) : tree(tree), psevaluator(*this) {} virtual ~CGALEvaluator() {} virtual Response visit(State &state, const AbstractNode &node); virtual Response visit(State &state, const AbstractIntersectionNode &node); virtual Response visit(State &state, const CsgNode &node); virtual Response visit(State &state, const TransformNode &node); virtual Response visit(State &state, const AbstractPolyNode &node); virtual Response visit(State &state, const CgaladvNode &node); CGAL_Nef_polyhedron evaluateCGALMesh(const AbstractNode &node); CGAL_Nef_polyhedron evaluateCGALMesh(const PolySet &polyset); const Tree &getTree() const { return this->tree; } private: void addToParent(const State &state, const AbstractNode &node, const CGAL_Nef_polyhedron &N); bool isCached(const AbstractNode &node) const; void process(CGAL_Nef_polyhedron &target, const CGAL_Nef_polyhedron &src, CGALEvaluator::CsgOp op); CGAL_Nef_polyhedron applyToChildren(const AbstractNode &node, CGALEvaluator::CsgOp op); CGAL_Nef_polyhedron applyHull(const CgaladvNode &node); std::string currindent; typedef std::pair ChildItem; typedef std::list ChildList; std::map visitedchildren; const Tree &tree; CGAL_Nef_polyhedron root; public: // FIXME: Do we need to make this visible? Used for cache management // Note: psevaluator constructor needs this->tree to be initialized first PolySetCGALEvaluator psevaluator; }; #endif openscad-2013.01+dfsg.orig/src/CSGTermEvaluator.h0000644000175000017500000000337111667257412021036 0ustar chrysnchrysn#ifndef CSGTERMEVALUATOR_H_ #define CSGTERMEVALUATOR_H_ #include #include #include #include #include "visitor.h" #include "memory.h" class CSGTermEvaluator : public Visitor { public: CSGTermEvaluator(const class Tree &tree, class PolySetEvaluator *psevaluator = NULL) : tree(tree), psevaluator(psevaluator) { } virtual ~CSGTermEvaluator() {} virtual Response visit(State &state, const class AbstractNode &node); virtual Response visit(State &state, const class AbstractIntersectionNode &node); virtual Response visit(State &state, const class AbstractPolyNode &node); virtual Response visit(State &state, const class CsgNode &node); virtual Response visit(State &state, const class TransformNode &node); virtual Response visit(State &state, const class ColorNode &node); virtual Response visit(State &state, const class RenderNode &node); virtual Response visit(State &state, const class CgaladvNode &node); shared_ptr evaluateCSGTerm(const AbstractNode &node, std::vector > &highlights, std::vector > &background); private: enum CsgOp {CSGT_UNION, CSGT_INTERSECTION, CSGT_DIFFERENCE, CSGT_MINKOWSKI}; void addToParent(const State &state, const AbstractNode &node); void applyToChildren(const AbstractNode &node, CSGTermEvaluator::CsgOp op); const AbstractNode *root; typedef std::list ChildList; std::map visitedchildren; public: std::map > stored_term; // The term evaluated from each node index std::vector > highlights; std::vector > background; const Tree &tree; class PolySetEvaluator *psevaluator; }; #endif openscad-2013.01+dfsg.orig/src/rotateextrudenode.h0000644000175000017500000000134211664172103021436 0ustar chrysnchrysn#ifndef ROTATEEXTRUDENODE_H_ #define ROTATEEXTRUDENODE_H_ #include "node.h" #include "visitor.h" #include "value.h" class RotateExtrudeNode : public AbstractPolyNode { public: RotateExtrudeNode(const ModuleInstantiation *mi) : AbstractPolyNode(mi) { convexity = 0; fn = fs = fa = 0; origin_x = origin_y = scale = 0; } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const { return "rotate_extrude"; } int convexity; double fn, fs, fa; double origin_x, origin_y, scale; Filename filename; std::string layername; virtual PolySet *evaluate_polyset(class PolySetEvaluator *) const; }; #endif openscad-2013.01+dfsg.orig/src/OGL_helper.h0000644000175000017500000005534311710050561017656 0ustar chrysnchrysn// Copyright (c) 1997-2002 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you may redistribute it under // the terms of the Q Public License version 1.0. // See the file LICENSE.QPL distributed with CGAL. // // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL: svn+ssh://scm.gforge.inria.fr/svn/cgal/trunk/Nef_3/include/CGAL/Nef_3/OGL_helper.h $ // $Id: OGL_helper.h 56667 2010-06-09 07:37:13Z sloriot $ // // // Author(s) : Peter Hachenberger #ifndef CGAL_NEF_OPENGL_HELPER_H #define CGAL_NEF_OPENGL_HELPER_H #include #include #include #include "system-gl.h" #include #define CGAL_NEF3_MARKED_VERTEX_COLOR 183,232,92 #define CGAL_NEF3_MARKED_EDGE_COLOR 171,216,86 #define CGAL_NEF3_MARKED_FACET_COLOR 157,203,81 #define CGAL_NEF3_UNMARKED_VERTEX_COLOR 255,246,124 #define CGAL_NEF3_UNMARKED_EDGE_COLOR 255,236,94 #define CGAL_NEF3_UNMARKED_FACET_COLOR 249,215,44 #ifdef _WIN32 #define CGAL_GLU_TESS_CALLBACK CALLBACK #else #define CGAL_GLU_TESS_CALLBACK #endif #ifdef __APPLE__ # include #endif #if defined __APPLE__ && !defined MAC_OS_X_VERSION_10_5 #define CGAL_GLU_TESS_DOTS ... #else #define CGAL_GLU_TESS_DOTS #endif namespace CGAL { namespace OGL { // ---------------------------------------------------------------------------- // Drawable double types: // ---------------------------------------------------------------------------- typedef CGAL::Simple_cartesian DKernel; typedef DKernel::Point_3 Double_point; typedef DKernel::Vector_3 Double_vector; typedef DKernel::Segment_3 Double_segment; typedef DKernel::Aff_transformation_3 Affine_3; // DPoint = a double point including a mark class DPoint : public Double_point { bool m_; public: DPoint() {} DPoint(const Double_point& p, bool m) : Double_point(p) { m_ = m; } DPoint(const DPoint& p) : Double_point(p) { m_ = p.m_; } DPoint& operator=(const DPoint& p) { Double_point::operator=(p); m_ = p.m_; return *this; } bool mark() const { return m_; } }; // DSegment = a double segment including a mark class DSegment : public Double_segment { bool m_; public: DSegment() {} DSegment(const Double_segment& s, bool m) : Double_segment(s) { m_ = m; } DSegment(const DSegment& s) : Double_segment(s) { m_ = s.m_; } DSegment& operator=(const DSegment& s) { Double_segment::operator=(s); m_ = s.m_; return *this; } bool mark() const { return m_; } }; // Double_triple = a class that stores a triple of double // coordinates; we need a pointer to the coordinates in a C array // for OpenGL class Double_triple { typedef double* double_ptr; typedef const double* const_double_ptr; double coords_[3]; public: Double_triple() { coords_[0]=coords_[1]=coords_[2]=0.0; } Double_triple(double x, double y, double z) { coords_[0]=x; coords_[1]=y; coords_[2]=z; } Double_triple(const Double_triple& t) { coords_[0]=t.coords_[0]; coords_[1]=t.coords_[1]; coords_[2]=t.coords_[2]; } Double_triple& operator=(const Double_triple& t) { coords_[0]=t.coords_[0]; coords_[1]=t.coords_[1]; coords_[2]=t.coords_[2]; return *this; } operator double_ptr() const { return const_cast(*this).coords_; } double operator[](unsigned i) { CGAL_assertion(i<3); return coords_[i]; } }; // Double_triple static std::ostream& operator << (std::ostream& os, const Double_triple& t) { os << "(" << t[0] << "," << t[1] << "," << t[2] << ")"; return os; } // DFacet stores the facet cycle vertices in a continuus C array // of three double components, this is necessary due to the OpenGL // tesselator input format ! class DFacet { typedef std::vector Coord_vector; typedef std::vector Cycle_vector; Coord_vector coords_; // stores all vertex coordinates Cycle_vector fc_ends_; // stores entry points of facet cycles Double_triple normal_; // stores normal and mark of facet bool mark_; public: typedef Coord_vector::iterator Coord_iterator; typedef Coord_vector::const_iterator Coord_const_iterator; DFacet() {} void push_back_vertex(double x, double y, double z) { coords_.push_back(Double_triple(x,y,z)); } DFacet(const DFacet& f) { coords_ = f.coords_; fc_ends_ = f.fc_ends_; normal_ = f.normal_; mark_ = f.mark_; } DFacet& operator=(const DFacet& f) { coords_ = f.coords_; fc_ends_ = f.fc_ends_; normal_ = f.normal_; mark_ = f.mark_; return *this; } ~DFacet() { coords_.clear(); fc_ends_.clear(); } void push_back_vertex(const Double_point& p) { push_back_vertex(p.x(),p.y(),p.z()); } void set_normal(double x, double y, double z, bool m) { double l = sqrt(x*x + y*y + z*z); normal_ = Double_triple(x/l,y/l,z/l); mark_ = m; } double dx() const { return normal_[0]; } double dy() const { return normal_[1]; } double dz() const { return normal_[2]; } bool mark() const { return mark_; } double* normal() const { return static_cast(normal_); } void new_facet_cycle() { fc_ends_.push_back(coords_.size()); } unsigned number_of_facet_cycles() const { return fc_ends_.size(); } Coord_iterator facet_cycle_begin(unsigned i) { CGAL_assertion(i(vertex)); GLdouble* pu(static_cast(user)); // CGAL_NEF_TRACEN("vertexCallback coord "< pcache; if (dataOut) { GLdouble *n = new GLdouble[3]; n[0] = coords[0]; n[1] = coords[1]; n[2] = coords[2]; pcache.push_back(n); *dataOut = n; } else { for (std::list::const_iterator i = pcache.begin(); i != pcache.end(); i++) delete[] *i; pcache.clear(); } } enum { SNC_AXES}; enum { SNC_BOUNDARY, SNC_SKELETON }; class Polyhedron : public OGL_base_object { protected: std::list vertices_; std::list edges_; std::list halffacets_; GLuint object_list_; bool init_; Bbox_3 bbox_; int style; std::vector switches; typedef std::list::const_iterator Vertex_iterator; typedef std::list::const_iterator Edge_iterator; typedef std::list::const_iterator Halffacet_iterator; public: Polyhedron() : bbox_(-1,-1,-1,1,1,1), switches(1) { object_list_ = 0; init_ = false; style = SNC_BOUNDARY; switches[SNC_AXES] = false; } /* Polyhedron(const Polyhedron& P) : object_list_(0), init_(false), bbox_(P.bbox_), style(P.style), switches(2) { switches[SNC_AXES] = P.switches[SNC_AXES]; Vertex_iterator v; for(v=P.vertices_.begin();v!=P.vertices_.end();++v) vertices_.push_back(*v); Edge_iterator e; for(e=P.edges_.begin();e!=P.edges_.end();++e) edges_.push_back(*e); Halffacet_iterator f; for(f=P.halffacets_.begin();f!=P.halffacets_.end();++f) halffacets_.push_back(*f); } Polyhedron& operator=(const Polyhedron& P) { if (object_list_) glDeleteLists(object_list_, 4); object_list_ = 0; init_ = false; style = P.style; switches[SNC_AXES] = P.switches[SNC_AXES]; Vertex_iterator v; vertices_.clear(); for(v=P.vertices_.begin();v!=P.vertices_.end();++v) vertices_.push_back(*v); Edge_iterator e; edges_.clear(); for(e=P.edges_.begin();e!=P.edges_.end();++e) edges_.push_back(*e); Halffacet_iterator f; halffacets_.clear(); for(f=P.halffacets_.begin();f!=P.halffacets_.end();++f) halffacets_.push_back(*f); init(); return *this; } */ ~Polyhedron() { if (object_list_) glDeleteLists(object_list_, 4); } void push_back(const Double_point& p, bool m) { vertices_.push_back(DPoint(p,m)); } void push_back(const Double_segment& s, bool m) { edges_.push_back(DSegment(s,m)); } void push_back(const DFacet& f) { halffacets_.push_back(f); } void toggle(int index) { switches[index] = !switches[index]; } void set_style(int index) { style = index; } bool is_initialized() const { return init_; } Bbox_3 bbox() const { return bbox_; } Bbox_3& bbox() { return bbox_; } virtual CGAL::Color getVertexColor(Vertex_iterator v) const { CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR), ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish CGAL::Color c = v->mark() ? ct : cf; return c; } void draw(Vertex_iterator v) const { // CGAL_NEF_TRACEN("drawing vertex "<<*v); CGAL::Color c = getVertexColor(v); glPointSize(10); glColor3ub(c.red(), c.green(), c.blue()); glBegin(GL_POINTS); glVertex3d(v->x(),v->y(),v->z()); #ifdef CGAL_NEF_EMPHASIZE_VERTEX glColor3ub(255,0,0); glVertex3d(CGAL_NEF_EMPHASIZE_VERTEX); #endif glEnd(); } virtual CGAL::Color getEdgeColor(Edge_iterator e) const { CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish CGAL::Color c = e->mark() ? ct : cf; return c; } void draw(Edge_iterator e) const { // CGAL_NEF_TRACEN("drawing edge "<<*e); Double_point p = e->source(), q = e->target(); CGAL::Color c = getEdgeColor(e); glLineWidth(5); glColor3ub(c.red(),c.green(),c.blue()); glBegin(GL_LINE_STRIP); glVertex3d(p.x(), p.y(), p.z()); glVertex3d(q.x(), q.y(), q.z()); glEnd(); } virtual CGAL::Color getFacetColor(Halffacet_iterator f) const { CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish CGAL::Color c = (f->mark() ? ct : cf); return c; } void draw(Halffacet_iterator f) const { // CGAL_NEF_TRACEN("drawing facet "<<(f->debug(),"")); GLUtesselator* tess_ = gluNewTess(); gluTessCallback(tess_, GLenum(GLU_TESS_VERTEX_DATA), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &vertexCallback); gluTessCallback(tess_, GLenum(GLU_TESS_COMBINE), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &combineCallback); gluTessCallback(tess_, GLenum(GLU_TESS_BEGIN), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &beginCallback); gluTessCallback(tess_, GLenum(GLU_TESS_END), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &endCallback); gluTessCallback(tess_, GLenum(GLU_TESS_ERROR), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &errorCallback); gluTessProperty(tess_, GLenum(GLU_TESS_WINDING_RULE), GLU_TESS_WINDING_POSITIVE); DFacet::Coord_const_iterator cit; CGAL::Color c = getFacetColor(f); glColor3ub(c.red(),c.green(),c.blue()); gluTessBeginPolygon(tess_,f->normal()); // CGAL_NEF_TRACEN(" "); // CGAL_NEF_TRACEN("Begin Polygon"); gluTessNormal(tess_,f->dx(),f->dy(),f->dz()); // forall facet cycles of f: for(unsigned i = 0; i < f->number_of_facet_cycles(); ++i) { gluTessBeginContour(tess_); // CGAL_NEF_TRACEN(" Begin Contour"); // put all vertices in facet cycle into contour: for(cit = f->facet_cycle_begin(i); cit != f->facet_cycle_end(i); ++cit) { gluTessVertex(tess_, *cit, *cit); // CGAL_NEF_TRACEN(" add Vertex"); } gluTessEndContour(tess_); // CGAL_NEF_TRACEN(" End Contour"); } gluTessEndPolygon(tess_); // CGAL_NEF_TRACEN("End Polygon"); gluDeleteTess(tess_); } void construct_axes() const { glLineWidth(2.0); // red x-axis glColor3f(1.0,0.0,0.0); glBegin(GL_LINES); glVertex3f(0.0,0.0,0.0); glVertex3f(5000.0,0.0,0.0); glEnd(); // green y-axis glColor3f(0.0,1.0,0.0); glBegin(GL_LINES); glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,5000.0,0.0); glEnd(); // blue z-axis and equator glColor3f(0.0,0.0,1.0); glBegin(GL_LINES); glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,0.0,5000.0); glEnd(); // six coordinate points in pink: glPointSize(10); glBegin(GL_POINTS); glColor3f(1.0,0.0,0.0); glVertex3d(5,0,0); glColor3f(0.0,1.0,0.0); glVertex3d(0,5,0); glColor3f(0.0,0.0,1.0); glVertex3d(0,0,5); glEnd(); } void fill_display_lists() { glNewList(object_list_, GL_COMPILE); Vertex_iterator v; for(v=vertices_.begin();v!=vertices_.end();++v) draw(v); glEndList(); glNewList(object_list_+1, GL_COMPILE); Edge_iterator e; for(e=edges_.begin();e!=edges_.end();++e) draw(e); glEndList(); glNewList(object_list_+2, GL_COMPILE); Halffacet_iterator f; for(f=halffacets_.begin();f!=halffacets_.end();++f) draw(f); glEndList(); glNewList(object_list_+3, GL_COMPILE); // axes: construct_axes(); glEndList(); } void init() { if (init_) return; init_ = true; switches[SNC_AXES] = false; style = SNC_BOUNDARY; object_list_ = glGenLists(4); CGAL_assertion(object_list_); fill_display_lists(); } void draw() const { if (!is_initialized()) const_cast(*this).init(); double l = (std::max)( (std::max)( bbox().xmax() - bbox().xmin(), bbox().ymax() - bbox().ymin()), bbox().zmax() - bbox().zmin()); if ( l < 1) // make sure that a single point doesn't screw up here l = 1; glScaled( 4.0/l, 4.0/l, 4.0/l); glTranslated( -(bbox().xmax() + bbox().xmin()) / 2.0, -(bbox().ymax() + bbox().ymin()) / 2.0, -(bbox().zmax() + bbox().zmin()) / 2.0); if (style == SNC_BOUNDARY) { //glEnable(GL_LIGHTING); glCallList(object_list_+2); // facets //glDisable(GL_LIGHTING); } // move edges and vertices a bit towards the view-point, // i.e., 1/100th of the unit vector in camera space // double f = l / 4.0 / 100.0; // glTranslated( z_vec[0] * f, z_vec[1] * f, z_vec[2] * f); glCallList(object_list_+1); // edges glCallList(object_list_); // vertices if (switches[SNC_AXES]) glCallList(object_list_+3); // axis } void debug(std::ostream& os = std::cerr) const { os << "OGL::Polyhedron" << std::endl; os << "Vertices:" << std::endl; Vertex_iterator v; for(v=vertices_.begin();v!=vertices_.end();++v) os << " "<<*v<<", mark="<mark()<debug(); os << std::endl; os << std::endl; } }; // Polyhedron template class Nef3_Converter { typedef typename Nef_polyhedron::SNC_structure SNC_structure; typedef CGAL::SNC_decorator Base; typedef CGAL::SNC_FM_decorator FM_decorator; public: typedef typename SNC_structure::Vertex_const_iterator Vertex_const_iterator; typedef typename SNC_structure::Halfedge_const_iterator Halfedge_const_iterator; typedef typename SNC_structure::Halffacet_const_iterator Halffacet_const_iterator; typedef typename SNC_structure::Halffacet_cycle_const_iterator Halffacet_cycle_const_iterator; typedef typename SNC_structure::Object_const_handle Object_const_handle; typedef typename SNC_structure::SHalfedge_const_handle SHalfedge_const_handle; typedef typename SNC_structure::SHalfloop_const_handle SHalfloop_const_handle; typedef typename SNC_structure::Vertex_const_handle Vertex_const_handle; typedef typename SNC_structure::Halfedge_const_handle Halfedge_const_handle; typedef typename SNC_structure::Halffacet_const_handle Halffacet_const_handle; typedef typename SNC_structure::Point_3 Point_3; typedef typename SNC_structure::Vector_3 Vector_3; typedef typename SNC_structure::Segment_3 Segment_3; typedef typename SNC_structure::Plane_3 Plane_3; typedef typename SNC_structure::Mark Mark; typedef typename SNC_structure::SHalfedge_around_facet_const_circulator SHalfedge_around_facet_const_circulator; private: static OGL::Double_point double_point(const Point_3& p) { return OGL::Double_point(CGAL::to_double(p.x()), CGAL::to_double(p.y()), CGAL::to_double(p.z())); } static OGL::Double_segment double_segment(const Segment_3& s) { return OGL::Double_segment(double_point(s.source()), double_point(s.target())); } static void draw(Vertex_const_handle v, const Nef_polyhedron& , CGAL::OGL::Polyhedron& P) { Point_3 bp = v->point(); // CGAL_NEF_TRACEN("vertex " << bp); P.push_back(double_point(bp), v->mark()); } static void draw(Halfedge_const_handle e, const Nef_polyhedron& , CGAL::OGL::Polyhedron& P) { Vertex_const_handle s = e->source(); Vertex_const_handle t = e->twin()->source(); Segment_3 seg(s->point(),t->point()); // CGAL_NEF_TRACEN("edge " << seg); P.push_back(double_segment(seg), e->mark()); } static void draw(Halffacet_const_handle f, const Nef_polyhedron& , CGAL::OGL::Polyhedron& P) { OGL::DFacet g; Halffacet_cycle_const_iterator fc; // all facet cycles: CGAL_forall_facet_cycles_of(fc,f) if ( fc.is_shalfedge() ) { // non-trivial facet cycle g.new_facet_cycle(); SHalfedge_const_handle h = fc; SHalfedge_around_facet_const_circulator hc(h), he(hc); CGAL_For_all(hc,he){ // all vertex coordinates in facet cycle Point_3 sp = hc->source()->source()->point(); // CGAL_NEF_TRACEN(" ");CGAL_NEF_TRACEN("facet" << sp); g.push_back_vertex(double_point(sp)); } } Vector_3 v = f->plane().orthogonal_vector(); g.set_normal(CGAL::to_double(v.x()), CGAL::to_double(v.y()), CGAL::to_double(v.z()), f->mark()); P.push_back(g); } // Returns the bounding box of the finite vertices of the polyhedron. // Returns $[-1,+1]^3$ as bounding box if no finite vertex exists. static Bbox_3 bounded_bbox(const Nef_polyhedron& N) { bool first_vertex = true; Bbox_3 bbox( -1.0, -1.0, -1.0, 1.0, 1.0, 1.0); Vertex_const_iterator vi; CGAL_forall_vertices(vi, N) { Point_3 p = vi->point(); double x = CGAL::to_double(p.hx()); double y = CGAL::to_double(p.hy()); double z = CGAL::to_double(p.hz()); double w = CGAL::to_double(p.hw()); if (N.is_standard(vi)) { if(first_vertex) { bbox = Bbox_3(x/w, y/w, z/w, x/w, y/w, z/w); first_vertex = false; } else { bbox = bbox + Bbox_3(x/w, y/w, z/w, x/w, y/w, z/w); first_vertex = false; } } } return bbox; } static void set_R(Bbox_3& bbox, const Nef_polyhedron& N) { if(N.is_standard_kernel()) return; double size = abs(bbox.xmin()); if(size < bbox.xmax()) size = bbox.xmax(); if(size < bbox.ymin()) size = bbox.ymin(); if(size < bbox.ymax()) size = bbox.ymax(); if(size < bbox.zmin()) size = bbox.zmin(); if(size < bbox.zmax()) size = bbox.zmax(); N.set_size_of_infimaximal_box(size*50); // CGAL_NEF_TRACEN("set infi box size to " << size); Vertex_const_iterator vi; CGAL_forall_vertices(vi, N) if(N.is_standard(vi)) return; bbox = Bbox_3(bbox.xmin()*10,bbox.ymin()*10,bbox.zmin()*10, bbox.xmax()*10,bbox.ymax()*10,bbox.zmax()*10); } public: static void convert_to_OGLPolyhedron(const Nef_polyhedron& N, CGAL::OGL::Polyhedron* P) { Bbox_3 bbox(bounded_bbox(N)); set_R(bbox,N); P->bbox() = bbox; Vertex_const_iterator v; CGAL_forall_vertices(v,*N.sncp()) draw(v,N,*P); Halfedge_const_iterator e; CGAL_forall_edges(e,*N.sncp()) draw(e,N,*P); Halffacet_const_iterator f; CGAL_forall_facets(f,*N.sncp()) draw(f,N,*P); } }; // Nef3_Converter } // namespace OGL } //namespace CGAL #endif // CGAL_NEF_OPENGL_HELPER_H openscad-2013.01+dfsg.orig/src/highlighter.cc0000644000175000017500000000346711703565233020343 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "highlighter.h" #include "parsersettings.h" // extern int parser_error_pos; #ifdef _QCODE_EDIT_ Highlighter::Highlighter(QDocument *parent) #else Highlighter::Highlighter(QTextDocument *parent) #endif : QSyntaxHighlighter(parent) { } void Highlighter::highlightBlock(const QString &text) { int n = previousBlockState(); if (n < 0) n = 0; int k = n + text.size() + 1; setCurrentBlockState(k); if (parser_error_pos >= n && parser_error_pos < k) { QTextCharFormat style; style.setBackground(Qt::red); setFormat(0, text.size(), style); #if 0 style.setBackground(Qt::black); style.setForeground(Qt::white); setFormat(parser_error_pos - n, 1, style); #endif } } openscad-2013.01+dfsg.orig/src/system-gl.h0000644000175000017500000000036211745120722017616 0ustar chrysnchrysn#ifndef SYSTEMGL_H_ #define SYSTEMGL_H_ #include #ifdef __APPLE__ #include #else #include #include #ifdef _WIN32 #include // For the CALLBACK macro #endif #endif #endif openscad-2013.01+dfsg.orig/src/csgtermnormalizer.h0000644000175000017500000000113511777162366021457 0ustar chrysnchrysn#ifndef CSGTERMNORMALIZER_H_ #define CSGTERMNORMALIZER_H_ #include "memory.h" class CSGTermNormalizer { public: CSGTermNormalizer(size_t limit) : limit(limit) {} ~CSGTermNormalizer() {} shared_ptr normalize(const shared_ptr &term); private: shared_ptr normalizePass(shared_ptr term) ; bool match_and_replace(shared_ptr &term); shared_ptr collapse_null_terms(const shared_ptr &term); unsigned int count(const shared_ptr &term) const; size_t limit; size_t nodecount; shared_ptr rootnode; }; #endif openscad-2013.01+dfsg.orig/src/PolySetCGALEvaluator.cc0000644000175000017500000004655512076022155021756 0ustar chrysnchrysn#include "PolySetCGALEvaluator.h" #include "cgal.h" #include "cgalutils.h" #include #include "polyset.h" #include "CGALEvaluator.h" #include "projectionnode.h" #include "linearextrudenode.h" #include "rotateextrudenode.h" #include "cgaladvnode.h" #include "rendernode.h" #include "dxfdata.h" #include "dxftess.h" #include "module.h" #include "svg.h" #include "printutils.h" #include "openscad.h" // get_fragments_from_r() #include #include /* ZRemover This class converts one or more already 'flat' Nef3 polyhedra into a Nef2 polyhedron by stripping off the 'z' coordinates from the vertices. The resulting Nef2 poly is accumulated in the 'output_nefpoly2d' member variable. The 'z' coordinates will either be all 0s, for an xy-plane intersected Nef3, or, they will be a mixture of -eps and +eps, for a thin-box intersected Nef3. Notes on CGAL's Nef Polyhedron2: 1. The 'mark' on a 2d Nef face is important when doing unions/intersections. If the 'mark' of a face is wrong the resulting nef2 poly will be unexpected. 2. The 'mark' can be dependent on the points fed to the Nef2 constructor. This is why we iterate through the 3d faces using the halfedge cycle source()->target() instead of the ordinary source()->source(). The the latter can generate sequences of points that will fail the the CGAL::is_simple_2() test, resulting in improperly marked nef2 polys. 3. 3d facets have 'two sides'. we throw out the 'down' side to prevent dups. The class uses the 'visitor' pattern from the CGAL manual. See also http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Nef_3/Chapter_main.html http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Nef_3_ref/Class_Nef_polyhedron3.html OGL_helper.h */ class ZRemover { public: logstream log; CGAL_Nef_polyhedron2::Boundary boundary; shared_ptr tmpnef2d; shared_ptr output_nefpoly2d; CGAL::Direction_3 up; ZRemover() { output_nefpoly2d.reset( new CGAL_Nef_polyhedron2() ); boundary = CGAL_Nef_polyhedron2::INCLUDED; up = CGAL::Direction_3(0,0,1); log = logstream(5); } void visit( CGAL_Nef_polyhedron3::Vertex_const_handle ) {} void visit( CGAL_Nef_polyhedron3::Halfedge_const_handle ) {} void visit( CGAL_Nef_polyhedron3::SHalfedge_const_handle ) {} void visit( CGAL_Nef_polyhedron3::SHalfloop_const_handle ) {} void visit( CGAL_Nef_polyhedron3::SFace_const_handle ) {} void visit( CGAL_Nef_polyhedron3::Halffacet_const_handle hfacet ) { log << " \n"; if ( hfacet->plane().orthogonal_direction() != this->up ) { log << " \n"; log << " \n"; return; } // possible optimization - throw out facets that are 'side facets' between // the top & bottom of the big thin box. (i.e. mixture of z=-eps and z=eps) CGAL_Nef_polyhedron3::Halffacet_cycle_const_iterator fci; int contour_counter = 0; CGAL_forall_facet_cycles_of( fci, hfacet ) { if ( fci.is_shalfedge() ) { CGAL_Nef_polyhedron3::SHalfedge_around_facet_const_circulator c1(fci), cend(c1); std::vector contour; CGAL_For_all( c1, cend ) { CGAL_Nef_polyhedron3::Point_3 point3d = c1->source()->target()->point(); CGAL_Nef_polyhedron2::Explorer::Point point2d( point3d.x(), point3d.y() ); contour.push_back( point2d ); } if (contour.size()==0) continue; log << " \n"; tmpnef2d.reset( new CGAL_Nef_polyhedron2( contour.begin(), contour.end(), boundary ) ); if ( contour_counter == 0 ) { log << " \n" ; *(output_nefpoly2d) += *(tmpnef2d); } else { log << " \n"; *(output_nefpoly2d) *= *(tmpnef2d); } log << "\n\n" << OpenSCAD::dump_svg( *tmpnef2d ) << "\n" << "\n\n" << OpenSCAD::dump_svg( *output_nefpoly2d ) << "\n"; contour_counter++; } else { log << " \n"; } } // next facet cycle (i.e. next contour) log << " \n"; } // visit() }; PolySetCGALEvaluator::PolySetCGALEvaluator(CGALEvaluator &cgalevaluator) : PolySetEvaluator(cgalevaluator.getTree()), cgalevaluator(cgalevaluator) { } PolySet *PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node) { //openscad_loglevel = 6; logstream log(5); // Before projecting, union all children CGAL_Nef_polyhedron sum; BOOST_FOREACH (AbstractNode * v, node.getChildren()) { if (v->modinst->isBackground()) continue; CGAL_Nef_polyhedron N = this->cgalevaluator.evaluateCGALMesh(*v); if (N.dim == 3) { if (sum.isNull()) sum = N.copy(); else sum += N; } } if (sum.isNull()) return NULL; if (!sum.p3->is_simple()) { if (!node.cut_mode) { PRINT("WARNING: Body of projection(cut = false) isn't valid 2-manifold! Modify your design.."); return new PolySet(); } } //std::cout << sum.dump(); //std::cout.flush(); CGAL_Nef_polyhedron nef_poly(2); if (node.cut_mode) { CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { CGAL_Nef_polyhedron3::Plane_3 xy_plane = CGAL_Nef_polyhedron3::Plane_3( 0,0,1,0 ); *sum.p3 = sum.p3->intersection( xy_plane, CGAL_Nef_polyhedron3::PLANE_ONLY); } catch (const CGAL::Failure_exception &e) { PRINTB("CGAL error in projection node during plane intersection: %s", e.what()); try { PRINT("Trying alternative intersection using very large thin box: "); std::vector pts; // dont use z of 0. there are bugs in CGAL. double inf = 1e8; double eps = 0.001; CGAL_Point_3 minpt( -inf, -inf, -eps ); CGAL_Point_3 maxpt( inf, inf, eps ); CGAL_Iso_cuboid_3 bigcuboid( minpt, maxpt ); for ( int i=0;i<8;i++ ) pts.push_back( bigcuboid.vertex(i) ); CGAL_Polyhedron bigbox; CGAL::convex_hull_3( pts.begin(), pts.end(), bigbox ); CGAL_Nef_polyhedron3 nef_bigbox( bigbox ); *sum.p3 = nef_bigbox.intersection( *sum.p3 ); } catch (const CGAL::Failure_exception &e) { PRINTB("CGAL error in projection node during bigbox intersection: %s", e.what()); sum.p3->clear(); } } if (sum.p3->is_empty()) { CGAL::set_error_behaviour(old_behaviour); PRINT("WARNING: projection() failed."); return NULL; } // remove z coordinates to make CGAL_Nef_polyhedron2 log << OpenSCAD::svg_header( 480, 100000 ) << "\n"; try { ZRemover zremover; CGAL_Nef_polyhedron3::Volume_const_iterator i; CGAL_Nef_polyhedron3::Shell_entry_const_iterator j; CGAL_Nef_polyhedron3::SFace_const_handle sface_handle; for ( i = sum.p3->volumes_begin(); i != sum.p3->volumes_end(); ++i ) { log << "\n"; for ( j = i->shells_begin(); j != i->shells_end(); ++j ) { log << "\n"; sface_handle = CGAL_Nef_polyhedron3::SFace_const_handle( j ); sum.p3->visit_shell_objects( sface_handle , zremover ); log << "\n"; } log << "\n"; } nef_poly.p2 = zremover.output_nefpoly2d; } catch (const CGAL::Failure_exception &e) { PRINTB("CGAL error in projection node while flattening: %s", e.what()); } log << "\n"; CGAL::set_error_behaviour(old_behaviour); // Extract polygons in the XY plane, ignoring all other polygons // FIXME: If the polyhedron is really thin, there might be unwanted polygons // in the XY plane, causing the resulting 2D polygon to be self-intersection // and cause a crash in CGALEvaluator::PolyReducer. The right solution is to // filter these polygons here. kintel 20120203. /* Grid2d conversion_grid(GRID_COARSE); for (size_t i = 0; i < ps3->polygons.size(); i++) { for (size_t j = 0; j < ps3->polygons[i].size(); j++) { double x = ps3->polygons[i][j][0]; double y = ps3->polygons[i][j][1]; double z = ps3->polygons[i][j][2]; if (z != 0) goto next_ps3_polygon_cut_mode; if (conversion_grid.align(x, y) == i+1) goto next_ps3_polygon_cut_mode; conversion_grid.data(x, y) = i+1; } ps->append_poly(); for (size_t j = 0; j < ps3->polygons[i].size(); j++) { double x = ps3->polygons[i][j][0]; double y = ps3->polygons[i][j][1]; conversion_grid.align(x, y); ps->insert_vertex(x, y); } next_ps3_polygon_cut_mode:; } */ } // In projection mode all the triangles are projected manually into the XY plane else { PolySet *ps3 = sum.convertToPolyset(); if (!ps3) return NULL; for (size_t i = 0; i < ps3->polygons.size(); i++) { int min_x_p = -1; double min_x_val = 0; for (size_t j = 0; j < ps3->polygons[i].size(); j++) { double x = ps3->polygons[i][j][0]; if (min_x_p < 0 || x < min_x_val) { min_x_p = j; min_x_val = x; } } int min_x_p1 = (min_x_p+1) % ps3->polygons[i].size(); int min_x_p2 = (min_x_p+ps3->polygons[i].size()-1) % ps3->polygons[i].size(); double ax = ps3->polygons[i][min_x_p1][0] - ps3->polygons[i][min_x_p][0]; double ay = ps3->polygons[i][min_x_p1][1] - ps3->polygons[i][min_x_p][1]; double at = atan2(ay, ax); double bx = ps3->polygons[i][min_x_p2][0] - ps3->polygons[i][min_x_p][0]; double by = ps3->polygons[i][min_x_p2][1] - ps3->polygons[i][min_x_p][1]; double bt = atan2(by, bx); double eps = 0.000001; if (fabs(at - bt) < eps || (fabs(ax) < eps && fabs(ay) < eps) || (fabs(bx) < eps && fabs(by) < eps)) { // this triangle is degenerated in projection continue; } std::list plist; for (size_t j = 0; j < ps3->polygons[i].size(); j++) { double x = ps3->polygons[i][j][0]; double y = ps3->polygons[i][j][1]; CGAL_Nef_polyhedron2::Point p = CGAL_Nef_polyhedron2::Point(x, y); if (at > bt) plist.push_front(p); else plist.push_back(p); } // FIXME: Should the CGAL_Nef_polyhedron2 be cached? if (nef_poly.isEmpty()) { nef_poly.p2.reset(new CGAL_Nef_polyhedron2(plist.begin(), plist.end(), CGAL_Nef_polyhedron2::INCLUDED)); } else { (*nef_poly.p2) += CGAL_Nef_polyhedron2(plist.begin(), plist.end(), CGAL_Nef_polyhedron2::INCLUDED); } } delete ps3; } PolySet *ps = nef_poly.convertToPolyset(); assert( ps != NULL ); ps->convexity = node.convexity; logstream(9) << ps->dump() << "\n"; return ps; } static void add_slice(PolySet *ps, const DxfData &dxf, DxfData::Path &path, double rot1, double rot2, double h1, double h2) { bool splitfirst = sin(rot2 - rot1) >= 0.0; for (size_t j = 1; j < path.indices.size(); j++) { int k = j - 1; double jx1 = dxf.points[path.indices[j]][0] * cos(rot1*M_PI/180) + dxf.points[path.indices[j]][1] * sin(rot1*M_PI/180); double jy1 = dxf.points[path.indices[j]][0] * -sin(rot1*M_PI/180) + dxf.points[path.indices[j]][1] * cos(rot1*M_PI/180); double jx2 = dxf.points[path.indices[j]][0] * cos(rot2*M_PI/180) + dxf.points[path.indices[j]][1] * sin(rot2*M_PI/180); double jy2 = dxf.points[path.indices[j]][0] * -sin(rot2*M_PI/180) + dxf.points[path.indices[j]][1] * cos(rot2*M_PI/180); double kx1 = dxf.points[path.indices[k]][0] * cos(rot1*M_PI/180) + dxf.points[path.indices[k]][1] * sin(rot1*M_PI/180); double ky1 = dxf.points[path.indices[k]][0] * -sin(rot1*M_PI/180) + dxf.points[path.indices[k]][1] * cos(rot1*M_PI/180); double kx2 = dxf.points[path.indices[k]][0] * cos(rot2*M_PI/180) + dxf.points[path.indices[k]][1] * sin(rot2*M_PI/180); double ky2 = dxf.points[path.indices[k]][0] * -sin(rot2*M_PI/180) + dxf.points[path.indices[k]][1] * cos(rot2*M_PI/180); if (splitfirst) { ps->append_poly(); if (path.is_inner) { ps->append_vertex(kx1, ky1, h1); ps->append_vertex(jx1, jy1, h1); ps->append_vertex(jx2, jy2, h2); } else { ps->insert_vertex(kx1, ky1, h1); ps->insert_vertex(jx1, jy1, h1); ps->insert_vertex(jx2, jy2, h2); } ps->append_poly(); if (path.is_inner) { ps->append_vertex(kx2, ky2, h2); ps->append_vertex(kx1, ky1, h1); ps->append_vertex(jx2, jy2, h2); } else { ps->insert_vertex(kx2, ky2, h2); ps->insert_vertex(kx1, ky1, h1); ps->insert_vertex(jx2, jy2, h2); } } else { ps->append_poly(); if (path.is_inner) { ps->append_vertex(kx1, ky1, h1); ps->append_vertex(jx1, jy1, h1); ps->append_vertex(kx2, ky2, h2); } else { ps->insert_vertex(kx1, ky1, h1); ps->insert_vertex(jx1, jy1, h1); ps->insert_vertex(kx2, ky2, h2); } ps->append_poly(); if (path.is_inner) { ps->append_vertex(jx2, jy2, h2); ps->append_vertex(kx2, ky2, h2); ps->append_vertex(jx1, jy1, h1); } else { ps->insert_vertex(jx2, jy2, h2); ps->insert_vertex(kx2, ky2, h2); ps->insert_vertex(jx1, jy1, h1); } } } } PolySet *PolySetCGALEvaluator::evaluatePolySet(const LinearExtrudeNode &node) { DxfData *dxf; if (node.filename.empty()) { // Before extruding, union all (2D) children nodes // to a single DxfData, then tesselate this into a PolySet CGAL_Nef_polyhedron sum; BOOST_FOREACH (AbstractNode * v, node.getChildren()) { if (v->modinst->isBackground()) continue; CGAL_Nef_polyhedron N = this->cgalevaluator.evaluateCGALMesh(*v); if (!N.isNull()) { if (N.dim != 2) { PRINT("ERROR: linear_extrude() is not defined for 3D child objects!"); } else { if (sum.isNull()) sum = N.copy(); else sum += N; } } } if (sum.isNull()) return NULL; dxf = sum.convertToDxfData();; } else { dxf = new DxfData(node.fn, node.fs, node.fa, node.filename, node.layername, node.origin_x, node.origin_y, node.scale); } PolySet *ps = extrudeDxfData(node, *dxf); delete dxf; return ps; } PolySet *PolySetCGALEvaluator::extrudeDxfData(const LinearExtrudeNode &node, DxfData &dxf) { PolySet *ps = new PolySet(); ps->convexity = node.convexity; double h1, h2; if (node.center) { h1 = -node.height/2.0; h2 = +node.height/2.0; } else { h1 = 0; h2 = node.height; } bool first_open_path = true; for (size_t i = 0; i < dxf.paths.size(); i++) { if (dxf.paths[i].is_closed) continue; if (first_open_path) { PRINTB("WARNING: Open paths in dxf_linear_extrude(file = \"%s\", layer = \"%s\"):", node.filename % node.layername); first_open_path = false; } PRINTB(" %9.5f %10.5f ... %10.5f %10.5f", (dxf.points[dxf.paths[i].indices.front()][0] / node.scale + node.origin_x) % (dxf.points[dxf.paths[i].indices.front()][1] / node.scale + node.origin_y) % (dxf.points[dxf.paths[i].indices.back()][0] / node.scale + node.origin_x) % (dxf.points[dxf.paths[i].indices.back()][1] / node.scale + node.origin_y)); } if (node.has_twist) { dxf_tesselate(ps, dxf, 0, false, true, h1); dxf_tesselate(ps, dxf, node.twist, true, true, h2); for (int j = 0; j < node.slices; j++) { double t1 = node.twist*j / node.slices; double t2 = node.twist*(j+1) / node.slices; double g1 = h1 + (h2-h1)*j / node.slices; double g2 = h1 + (h2-h1)*(j+1) / node.slices; for (size_t i = 0; i < dxf.paths.size(); i++) { if (!dxf.paths[i].is_closed) continue; add_slice(ps, dxf, dxf.paths[i], t1, t2, g1, g2); } } } else { dxf_tesselate(ps, dxf, 0, false, true, h1); dxf_tesselate(ps, dxf, 0, true, true, h2); for (size_t i = 0; i < dxf.paths.size(); i++) { if (!dxf.paths[i].is_closed) continue; add_slice(ps, dxf, dxf.paths[i], 0, 0, h1, h2); } } return ps; } PolySet *PolySetCGALEvaluator::evaluatePolySet(const RotateExtrudeNode &node) { DxfData *dxf; if (node.filename.empty()) { // Before extruding, union all (2D) children nodes // to a single DxfData, then tesselate this into a PolySet CGAL_Nef_polyhedron sum; BOOST_FOREACH (AbstractNode * v, node.getChildren()) { if (v->modinst->isBackground()) continue; CGAL_Nef_polyhedron N = this->cgalevaluator.evaluateCGALMesh(*v); if (!N.isNull()) { if (N.dim != 2) { PRINT("ERROR: rotate_extrude() is not defined for 3D child objects!"); } else { if (sum.isNull()) sum = N.copy(); else sum += N; } } } if (sum.isNull()) return NULL; dxf = sum.convertToDxfData(); } else { dxf = new DxfData(node.fn, node.fs, node.fa, node.filename, node.layername, node.origin_x, node.origin_y, node.scale); } PolySet *ps = rotateDxfData(node, *dxf); delete dxf; return ps; } PolySet *PolySetCGALEvaluator::evaluatePolySet(const CgaladvNode &node) { CGAL_Nef_polyhedron N = this->cgalevaluator.evaluateCGALMesh(node); PolySet *ps = NULL; if (!N.isNull()) { ps = N.convertToPolyset(); if (ps) ps->convexity = node.convexity; } return ps; } PolySet *PolySetCGALEvaluator::evaluatePolySet(const RenderNode &node) { CGAL_Nef_polyhedron N = this->cgalevaluator.evaluateCGALMesh(node); PolySet *ps = NULL; if (!N.isNull()) { if (N.dim == 3 && !N.p3->is_simple()) { PRINT("WARNING: Body of render() isn't valid 2-manifold!"); } else { ps = N.convertToPolyset(); if (ps) ps->convexity = node.convexity; } } return ps; } PolySet *PolySetCGALEvaluator::rotateDxfData(const RotateExtrudeNode &node, DxfData &dxf) { PolySet *ps = new PolySet(); ps->convexity = node.convexity; for (size_t i = 0; i < dxf.paths.size(); i++) { double max_x = 0; for (size_t j = 0; j < dxf.paths[i].indices.size(); j++) { max_x = fmax(max_x, dxf.points[dxf.paths[i].indices[j]][0]); } int fragments = get_fragments_from_r(max_x, node.fn, node.fs, node.fa); double ***points; points = new double**[fragments]; for (int j=0; j < fragments; j++) { points[j] = new double*[dxf.paths[i].indices.size()]; for (size_t k=0; k < dxf.paths[i].indices.size(); k++) points[j][k] = new double[3]; } for (int j = 0; j < fragments; j++) { double a = (j*2*M_PI) / fragments - M_PI/2; // start on the X axis for (size_t k = 0; k < dxf.paths[i].indices.size(); k++) { points[j][k][0] = dxf.points[dxf.paths[i].indices[k]][0] * sin(a); points[j][k][1] = dxf.points[dxf.paths[i].indices[k]][0] * cos(a); points[j][k][2] = dxf.points[dxf.paths[i].indices[k]][1]; } } for (int j = 0; j < fragments; j++) { int j1 = j + 1 < fragments ? j + 1 : 0; for (size_t k = 0; k < dxf.paths[i].indices.size(); k++) { int k1 = k + 1 < dxf.paths[i].indices.size() ? k + 1 : 0; if (points[j][k][0] != points[j1][k][0] || points[j][k][1] != points[j1][k][1] || points[j][k][2] != points[j1][k][2]) { ps->append_poly(); ps->append_vertex(points[j ][k ][0], points[j ][k ][1], points[j ][k ][2]); ps->append_vertex(points[j1][k ][0], points[j1][k ][1], points[j1][k ][2]); ps->append_vertex(points[j ][k1][0], points[j ][k1][1], points[j ][k1][2]); } if (points[j][k1][0] != points[j1][k1][0] || points[j][k1][1] != points[j1][k1][1] || points[j][k1][2] != points[j1][k1][2]) { ps->append_poly(); ps->append_vertex(points[j ][k1][0], points[j ][k1][1], points[j ][k1][2]); ps->append_vertex(points[j1][k ][0], points[j1][k ][1], points[j1][k ][2]); ps->append_vertex(points[j1][k1][0], points[j1][k1][1], points[j1][k1][2]); } } } for (int j=0; j < fragments; j++) { for (size_t k=0; k < dxf.paths[i].indices.size(); k++) delete[] points[j][k]; delete[] points[j]; } delete[] points; } return ps; } openscad-2013.01+dfsg.orig/src/stl-utils.cc0000644000175000017500000000531112076022156017767 0ustar chrysnchrysn#if defined(__APPLE__) && defined(__GNUC__) #include // Workarounds for symbols that are missing from Leopard stdlibc++.dylib. _GLIBCXX_BEGIN_NAMESPACE(std) // From ostream_insert.h template ostream& __ostream_insert(ostream&, const char*, streamsize); #ifdef _GLIBCXX_USE_WCHAR_T template wostream& __ostream_insert(wostream&, const wchar_t*, streamsize); #endif // From ostream.tcc template ostream& ostream::_M_insert(long); template ostream& ostream::_M_insert(unsigned long); template ostream& ostream::_M_insert(bool); #ifdef _GLIBCXX_USE_LONG_LONG template ostream& ostream::_M_insert(long long); template ostream& ostream::_M_insert(unsigned long long); #endif template ostream& ostream::_M_insert(double); template ostream& ostream::_M_insert(long double); template ostream& ostream::_M_insert(const void*); #ifdef _GLIBCXX_USE_WCHAR_T template wostream& wostream::_M_insert(long); template wostream& wostream::_M_insert(unsigned long); template wostream& wostream::_M_insert(bool); #ifdef _GLIBCXX_USE_LONG_LONG template wostream& wostream::_M_insert(long long); template wostream& wostream::_M_insert(unsigned long long); #endif template wostream& wostream::_M_insert(double); template wostream& wostream::_M_insert(long double); template wostream& wostream::_M_insert(const void*); #endif // From istream.tcc template istream& istream::_M_extract(unsigned short&); template istream& istream::_M_extract(unsigned int&); template istream& istream::_M_extract(long&); template istream& istream::_M_extract(unsigned long&); template istream& istream::_M_extract(bool&); #ifdef _GLIBCXX_USE_LONG_LONG template istream& istream::_M_extract(long long&); template istream& istream::_M_extract(unsigned long long&); #endif template istream& istream::_M_extract(float&); template istream& istream::_M_extract(double&); template istream& istream::_M_extract(long double&); template istream& istream::_M_extract(void*&); #ifdef _GLIBCXX_USE_WCHAR_T template wistream& wistream::_M_extract(unsigned short&); template wistream& wistream::_M_extract(unsigned int&); template wistream& wistream::_M_extract(long&); template wistream& wistream::_M_extract(unsigned long&); template wistream& wistream::_M_extract(bool&); #ifdef _GLIBCXX_USE_LONG_LONG template wistream& wistream::_M_extract(long long&); template wistream& wistream::_M_extract(unsigned long long&); #endif template wistream& wistream::_M_extract(float&); template wistream& wistream::_M_extract(double&); template wistream& wistream::_M_extract(long double&); template wistream& wistream::_M_extract(void*&); #endif _GLIBCXX_END_NAMESPACE #endif openscad-2013.01+dfsg.orig/src/ModuleCache.cc0000644000175000017500000000533612076022155020206 0ustar chrysnchrysn#include "ModuleCache.h" #include "module.h" #include "printutils.h" #include "openscad.h" #include "boosty.h" #include #include #include #include #include #include #include #include /*! FIXME: Implement an LRU scheme to avoid having an ever-growing module cache */ ModuleCache *ModuleCache::inst = NULL; static bool is_modified(const std::string &filename, const time_t &mtime) { struct stat st; memset(&st, 0, sizeof(struct stat)); stat(filename.c_str(), &st); return (st.st_mtime > mtime); } Module *ModuleCache::evaluate(const std::string &filename) { Module *lib_mod = NULL; // Create cache ID struct stat st; memset(&st, 0, sizeof(struct stat)); stat(filename.c_str(), &st); std::string cache_id = str(boost::format("%x.%x") % st.st_mtime % st.st_size); // Lookup in cache if (this->entries.find(filename) != this->entries.end() && this->entries[filename].cache_id == cache_id) { #ifdef DEBUG // Causes too much debug output // PRINTB("Using cached library: %s (%s)", filename % cache_id); #endif lib_mod = &(*this->entries[filename].module); BOOST_FOREACH(const Module::IncludeContainer::value_type &item, lib_mod->includes) { if (is_modified(item.first, item.second)) { lib_mod = NULL; break; } } } // If cache lookup failed (non-existing or old timestamp), compile module if (!lib_mod) { #ifdef DEBUG if (this->entries.find(filename) != this->entries.end()) { PRINTB("Recompiling cached library: %s (%s)", filename % cache_id); } else { PRINTB("Compiling library '%s'.", filename); } #endif std::ifstream ifs(filename.c_str()); if (!ifs.is_open()) { PRINTB("WARNING: Can't open library file '%s'\n", filename); return NULL; } std::stringstream textbuf; textbuf << ifs.rdbuf(); textbuf << "\n" << commandline_commands; print_messages_push(); Module *oldmodule = NULL; cache_entry e = { NULL, cache_id }; if (this->entries.find(filename) != this->entries.end()) { oldmodule = this->entries[filename].module; } this->entries[filename] = e; std::string pathname = boosty::stringy(fs::path(filename).parent_path()); lib_mod = dynamic_cast(parse(textbuf.str().c_str(), pathname.c_str(), false)); PRINTB_NOCACHE(" compiled module: %p", lib_mod); if (lib_mod) { // We defer deletion so we can ensure that the new module won't // have the same address as the old delete oldmodule; this->entries[filename].module = lib_mod; } else { this->entries.erase(filename); } print_messages_pop(); } if (lib_mod) lib_mod->handleDependencies(); return lib_mod; } void ModuleCache::clear() { this->entries.clear(); } openscad-2013.01+dfsg.orig/src/CGAL_renderer.h0000644000175000017500000000645011704273262020275 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef CGAL_RENDERER_H #define CGAL_RENDERER_H #include "OGL_helper.h" #undef CGAL_NEF3_MARKED_VERTEX_COLOR #undef CGAL_NEF3_MARKED_EDGE_COLOR #undef CGAL_NEF3_MARKED_FACET_COLOR #undef CGAL_NEF3_UNMARKED_VERTEX_COLOR #undef CGAL_NEF3_UNMARKED_EDGE_COLOR #undef CGAL_NEF3_UNMARKED_FACET_COLOR using CGAL::OGL::SNC_BOUNDARY; using CGAL::OGL::SNC_SKELETON; class Polyhedron : public CGAL::OGL::Polyhedron { public: enum RenderColor { CGAL_NEF3_MARKED_VERTEX_COLOR, CGAL_NEF3_MARKED_EDGE_COLOR, CGAL_NEF3_MARKED_FACET_COLOR, CGAL_NEF3_UNMARKED_VERTEX_COLOR, CGAL_NEF3_UNMARKED_EDGE_COLOR, CGAL_NEF3_UNMARKED_FACET_COLOR, NUM_COLORS }; Polyhedron() { setColor(CGAL_NEF3_MARKED_VERTEX_COLOR,0xb7,0xe8,0x5c); setColor(CGAL_NEF3_MARKED_EDGE_COLOR,0xab,0xd8,0x56); setColor(CGAL_NEF3_MARKED_FACET_COLOR,0x9d,0xcb,0x51); setColor(CGAL_NEF3_UNMARKED_VERTEX_COLOR,0xff,0xf6,0x7c); setColor(CGAL_NEF3_UNMARKED_EDGE_COLOR,0xff,0xec,0x5e); setColor(CGAL_NEF3_UNMARKED_FACET_COLOR,0xf9,0xd7,0x2c); } void draw(bool showedges) const { if(this->style == SNC_BOUNDARY) { glCallList(this->object_list_+2); if(showedges) { glDisable(GL_LIGHTING); glCallList(this->object_list_+1); glCallList(this->object_list_); } } else { glDisable(GL_LIGHTING); glCallList(this->object_list_+1); glCallList(this->object_list_); } } CGAL::Color getVertexColor(Vertex_iterator v) const { CGAL::Color c = v->mark() ? colors[CGAL_NEF3_UNMARKED_VERTEX_COLOR] : colors[CGAL_NEF3_MARKED_VERTEX_COLOR]; return c; } CGAL::Color getEdgeColor(Edge_iterator e) const { CGAL::Color c = e->mark() ? colors[CGAL_NEF3_UNMARKED_EDGE_COLOR] : colors[CGAL_NEF3_MARKED_EDGE_COLOR]; return c; } CGAL::Color getFacetColor(Halffacet_iterator f) const { CGAL::Color c = f->mark() ? colors[CGAL_NEF3_UNMARKED_FACET_COLOR] : colors[CGAL_NEF3_MARKED_FACET_COLOR]; return c; } void setColor(Polyhedron::RenderColor color_index, unsigned char r, unsigned char g, unsigned char b) { assert(color_index < Polyhedron::NUM_COLORS); this->colors[color_index] = CGAL::Color(r,g,b); } private: CGAL::Color colors[NUM_COLORS]; }; // Polyhedron #endif // CGAL_RENDERER_H openscad-2013.01+dfsg.orig/src/csgnode.h0000644000175000017500000000100511640436732017314 0ustar chrysnchrysn#ifndef CSGNODE_H_ #define CSGNODE_H_ #include "node.h" #include "visitor.h" enum csg_type_e { CSG_TYPE_UNION, CSG_TYPE_DIFFERENCE, CSG_TYPE_INTERSECTION }; class CsgNode : public AbstractNode { public: csg_type_e type; CsgNode(const ModuleInstantiation *mi, csg_type_e type) : AbstractNode(mi), type(type) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const; }; #endif openscad-2013.01+dfsg.orig/src/cgalutils.cc0000644000175000017500000001162212076022155020017 0ustar chrysnchrysn#ifdef ENABLE_CGAL #include "cgalutils.h" #include "polyset.h" #include "printutils.h" #include "cgal.h" #include PolySet *createPolySetFromPolyhedron(const CGAL_Polyhedron &p) { PolySet *ps = new PolySet(); typedef CGAL_Polyhedron::Vertex Vertex; typedef CGAL_Polyhedron::Vertex_const_iterator VCI; typedef CGAL_Polyhedron::Facet_const_iterator FCI; typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC; for (FCI fi = p.facets_begin(); fi != p.facets_end(); ++fi) { HFCC hc = fi->facet_begin(); HFCC hc_end = hc; Vertex v1, v2, v3; v1 = *VCI((hc++)->vertex()); v3 = *VCI((hc++)->vertex()); do { v2 = v3; v3 = *VCI((hc++)->vertex()); double x1 = CGAL::to_double(v1.point().x()); double y1 = CGAL::to_double(v1.point().y()); double z1 = CGAL::to_double(v1.point().z()); double x2 = CGAL::to_double(v2.point().x()); double y2 = CGAL::to_double(v2.point().y()); double z2 = CGAL::to_double(v2.point().z()); double x3 = CGAL::to_double(v3.point().x()); double y3 = CGAL::to_double(v3.point().y()); double z3 = CGAL::to_double(v3.point().z()); ps->append_poly(); ps->append_vertex(x1, y1, z1); ps->append_vertex(x2, y2, z2); ps->append_vertex(x3, y3, z3); } while (hc != hc_end); } return ps; } #undef GEN_SURFACE_DEBUG class CGAL_Build_PolySet : public CGAL::Modifier_base { public: typedef CGAL_HDS::Vertex::Point CGALPoint; const PolySet &ps; CGAL_Build_PolySet(const PolySet &ps) : ps(ps) { } void operator()(CGAL_HDS& hds) { CGAL_Polybuilder B(hds, true); std::vector vertices; Grid3d vertices_idx(GRID_FINE); for (size_t i = 0; i < ps.polygons.size(); i++) { const PolySet::Polygon *poly = &ps.polygons[i]; for (size_t j = 0; j < poly->size(); j++) { const Vector3d &p = poly->at(j); if (!vertices_idx.has(p[0], p[1], p[2])) { vertices_idx.data(p[0], p[1], p[2]) = vertices.size(); vertices.push_back(CGALPoint(p[0], p[1], p[2])); } } } B.begin_surface(vertices.size(), ps.polygons.size()); #ifdef GEN_SURFACE_DEBUG printf("=== CGAL Surface ===\n"); #endif for (size_t i = 0; i < vertices.size(); i++) { const CGALPoint &p = vertices[i]; B.add_vertex(p); #ifdef GEN_SURFACE_DEBUG printf("%d: %f %f %f\n", i, p.x().to_double(), p.y().to_double(), p.z().to_double()); #endif } for (size_t i = 0; i < ps.polygons.size(); i++) { const PolySet::Polygon *poly = &ps.polygons[i]; std::map fc; bool facet_is_degenerated = false; for (size_t j = 0; j < poly->size(); j++) { const Vector3d &p = poly->at(j); int v = vertices_idx.data(p[0], p[1], p[2]); if (fc[v]++ > 0) facet_is_degenerated = true; } if (!facet_is_degenerated) B.begin_facet(); #ifdef GEN_SURFACE_DEBUG printf("F:"); #endif for (size_t j = 0; j < poly->size(); j++) { const Vector3d &p = poly->at(j); #ifdef GEN_SURFACE_DEBUG printf(" %d (%f,%f,%f)", vertices_idx.data(p[0], p[1], p[2]), p[0], p[1], p[2]); #endif if (!facet_is_degenerated) B.add_vertex_to_facet(vertices_idx.data(p[0], p[1], p[2])); } #ifdef GEN_SURFACE_DEBUG if (facet_is_degenerated) printf(" (degenerated)"); printf("\n"); #endif if (!facet_is_degenerated) B.end_facet(); } #ifdef GEN_SURFACE_DEBUG printf("====================\n"); #endif B.end_surface(); #undef PointKey } }; CGAL_Polyhedron *createPolyhedronFromPolySet(const PolySet &ps) { CGAL_Polyhedron *P = NULL; CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { P = new CGAL_Polyhedron; CGAL_Build_PolySet builder(ps); P->delegate(builder); } catch (const CGAL::Assertion_exception &e) { PRINTB("CGAL error in CGAL_Build_PolySet: %s", e.what()); delete P; P = NULL; } CGAL::set_error_behaviour(old_behaviour); return P; } CGAL_Iso_cuboid_3 bounding_box( const CGAL_Nef_polyhedron3 &N ) { CGAL_Iso_cuboid_3 result(-1,-1,-1,1,1,1); CGAL_Nef_polyhedron3::Vertex_const_iterator vi; std::vector points; // can be optimized by rewriting bounding_box to accept vertices CGAL_forall_vertices( vi, N ) points.push_back( vi->point() ); if (points.size()) result = CGAL::bounding_box( points.begin(), points.end() ); return result; } CGAL_Iso_rectangle_2e bounding_box( const CGAL_Nef_polyhedron2 &N ) { CGAL_Iso_rectangle_2e result(-1,-1,1,1); CGAL_Nef_polyhedron2::Explorer explorer = N.explorer(); CGAL_Nef_polyhedron2::Explorer::Vertex_const_iterator vi; std::vector points; // can be optimized by rewriting bounding_box to accept vertices for ( vi = explorer.vertices_begin(); vi != explorer.vertices_end(); ++vi ) if ( explorer.is_standard( vi ) ) points.push_back( explorer.point( vi ) ); if (points.size()) result = CGAL::bounding_box( points.begin(), points.end() ); return result; } #endif /* ENABLE_CGAL */ openscad-2013.01+dfsg.orig/src/AboutDialog.h0000644000175000017500000000124112076022154020057 0ustar chrysnchrysn#ifndef ABOUTDIALOG_H_ #define ABOUTDIALOG_H_ #include "ui_AboutDialog.h" #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) class AboutDialog : public QDialog, public Ui::AboutDialog { Q_OBJECT; public: AboutDialog(QWidget *) { setupUi(this); this->setWindowTitle( QString("About OpenSCAD ") + QString(TOSTRING( OPENSCAD_VERSION)) ); this->aboutText->setOpenExternalLinks(true); QUrl flattr_qurl(":icons/flattr.png" ); this->aboutText->loadResource( QTextDocument::ImageResource, flattr_qurl ); QString tmp = this->aboutText->toHtml(); tmp.replace("__VERSION__",QString(TOSTRING(OPENSCAD_VERSION))); this->aboutText->setHtml(tmp); } }; #endif openscad-2013.01+dfsg.orig/src/ProgressWidget.cc0000644000175000017500000000157511703565233021013 0ustar chrysnchrysn#include "ProgressWidget.h" #include ProgressWidget::ProgressWidget(QWidget *parent) :QWidget(parent) { setupUi(this); setRange(0, 100); setValue(0); this->wascanceled = false; this->starttime.start(); connect(this->stopButton, SIGNAL(clicked()), this, SLOT(cancel())); QTimer::singleShot(1000, this, SIGNAL(requestShow())); } bool ProgressWidget::wasCanceled() const { return this->wascanceled; } /*! Returns milliseconds since this widget was created */ int ProgressWidget::elapsedTime() const { return this->starttime.elapsed(); } void ProgressWidget::cancel() { this->wascanceled = true; } void ProgressWidget::setRange(int minimum, int maximum) { this->progressBar->setRange(minimum, maximum); } void ProgressWidget::setValue(int progress) { this->progressBar->setValue(progress); } int ProgressWidget::value() const { return this->progressBar->value(); } openscad-2013.01+dfsg.orig/src/ProgressWidget.h0000644000175000017500000000104011703565233020640 0ustar chrysnchrysn#ifndef PROGRESSWIDGET_H_ #define PROGRESSWIDGET_H_ #include "ui_ProgressWidget.h" #include class ProgressWidget : public QWidget, public Ui::ProgressWidget { Q_OBJECT; Q_PROPERTY(bool wasCanceled READ wasCanceled); public: ProgressWidget(QWidget *parent = NULL); bool wasCanceled() const; int elapsedTime() const; public slots: void setRange(int minimum, int maximum); void setValue(int progress); int value() const; void cancel(); signals: void requestShow(); private: bool wascanceled; QTime starttime; }; #endif openscad-2013.01+dfsg.orig/src/grid.h0000644000175000017500000000722111664545165016634 0ustar chrysnchrysn#ifndef GRID_H_ #define GRID_H_ #include "mathc99.h" #ifdef WIN32 typedef __int64 int64_t; #else #include #endif #include #include #include const double GRID_COARSE = 0.001; const double GRID_FINE = 0.000001; template class Grid2d { public: double res; boost::unordered_map, T> db; Grid2d(double resolution) { res = resolution; } /*! Aligns x,y to the grid or to existing point if one close enough exists. Returns the value stored if a point already existing or an uninitialized new value if not. */ T &align(double &x, double &y) { int64_t ix = (int64_t)round(x / res); int64_t iy = (int64_t)round(y / res); if (db.find(std::make_pair(ix, iy)) == db.end()) { int dist = 10; for (int64_t jx = ix - 1; jx <= ix + 1; jx++) { for (int64_t jy = iy - 1; jy <= iy + 1; jy++) { if (db.find(std::make_pair(jx, jy)) == db.end()) continue; int d = abs(int(ix-jx)) + abs(int(iy-jy)); if (d < dist) { dist = d; ix = jx; iy = jy; } } } } x = ix * res, y = iy * res; return db[std::make_pair(ix, iy)]; } bool has(double x, double y) const { int64_t ix = (int64_t)round(x / res); int64_t iy = (int64_t)round(y / res); if (db.find(std::make_pair(ix, iy)) != db.end()) return true; for (int64_t jx = ix - 1; jx <= ix + 1; jx++) for (int64_t jy = iy - 1; jy <= iy + 1; jy++) { if (db.find(std::make_pair(jx, jy)) != db.end()) return true; } return false; } bool eq(double x1, double y1, double x2, double y2) { align(x1, y1); align(x2, y2); if (fabs(x1 - x2) < res && fabs(y1 - y2) < res) return true; return false; } T &data(double x, double y) { return align(x, y); } T &operator()(double x, double y) { return align(x, y); } }; template class Grid3d { public: double res; boost::unordered_map,int64_t>, T> db; Grid3d(double resolution) { res = resolution; } T &align(double &x, double &y, double &z) { int64_t ix = (int64_t)round(x / res); int64_t iy = (int64_t)round(y / res); int64_t iz = (int64_t)round(z / res); if (db.find(std::make_pair(std::make_pair(ix, iy), iz)) == db.end()) { int dist = 10; for (int64_t jx = ix - 1; jx <= ix + 1; jx++) { for (int64_t jy = iy - 1; jy <= iy + 1; jy++) { for (int64_t jz = iz - 1; jz <= iz + 1; jz++) { if (db.find(std::make_pair(std::make_pair(jx, jy), jz)) == db.end()) continue; int d = abs(int(ix-jx)) + abs(int(iy-jy)) + abs(int(iz-jz)); if (d < dist) { dist = d; ix = jx; iy = jy; iz = jz; } } } } } x = ix * res, y = iy * res, z = iz * res; return db[std::make_pair(std::make_pair(ix, iy), iz)]; } bool has(double x, double y, double z) { int64_t ix = (int64_t)round(x / res); int64_t iy = (int64_t)round(y / res); int64_t iz = (int64_t)round(z / res); if (db.find(std::make_pair(std::make_pair(ix, iy), iz)) != db.end()) return true; for (int64_t jx = ix - 1; jx <= ix + 1; jx++) for (int64_t jy = iy - 1; jy <= iy + 1; jy++) for (int64_t jz = iz - 1; jz <= iz + 1; jz++) { if (db.find(std::make_pair(std::make_pair(jx, jy), jz)) != db.end()) return true; } return false; } bool eq(double x1, double y1, double z1, double x2, double y2, double z2) { align(x1, y1, z1); align(x2, y2, z2); if (fabs(x1 - x2) < res && fabs(y1 - y2) < res && fabs(z1 - z2) < res) return true; return false; } T &data(double x, double y, double z) { return align(x, y, z); } T &operator()(double x, double y, double z) { return align(x, y, z); } }; #endif openscad-2013.01+dfsg.orig/src/lexer.l0000644000175000017500000001566412076022155017027 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ %{ #include "handle_dep.h" #include "printutils.h" #include "parsersettings.h" #include "parser_yacc.h" #include "module.h" #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" //isatty for visual c++ and mingw-cross-env #if defined __WIN32__ && ! defined _MSC_VER #include "unistd.h" #endif #if defined __WIN32__ || defined _MSC_VER extern "C" int __cdecl _isatty(int _FileHandle); #define isatty _isatty #endif std::string stringcontents; int lexerget_lineno(void); #ifdef __GNUC__ static void yyunput(int, char*) __attribute__((unused)); #endif extern const char *parser_input_buffer; extern std::string parser_source_path; extern Module *currmodule; #define YY_INPUT(buf,result,max_size) { \ if (yyin && yyin != stdin) { \ int c = fgetc(yyin); \ if (c >= 0) { \ result = 1; \ buf[0] = c; \ } else { \ result = YY_NULL; \ } \ } else { \ if (*parser_input_buffer) { \ result = 1; \ buf[0] = *(parser_input_buffer++); \ parser_error_pos++; \ } else { \ result = YY_NULL; \ } \ } \ } void includefile(); fs::path sourcepath(); std::vector path_stack; std::vector openfiles; std::vector openfilenames; std::string filename; std::string filepath; %} %option yylineno %option noyywrap %x cond_comment cond_string %x cond_include %x cond_use D [0-9] E [Ee][+-]?{D}+ %% include[ \t\r\n>]*"<" { BEGIN(cond_include); } { [^\t\r\n>]*"/" { filepath = yytext; } [^\t\r\n>/]+ { filename = yytext; } ">" { BEGIN(INITIAL); includefile(); } } use[ \t\r\n>]*"<" { BEGIN(cond_use); } { [^\t\r\n>]+ { filename = yytext; } ">" { BEGIN(INITIAL); fs::path usepath; if (boosty::is_absolute(fs::path(filename))) { usepath = filename; } else { usepath = sourcepath() / filename; if (!fs::exists(usepath)) { usepath = locate_file(filename); } } /* Only accept regular files which exists */ if (usepath.has_parent_path() && fs::exists(usepath) && !fs::is_directory(usepath)) { handle_dep(usepath.string()); parserlval.text = strdup(usepath.string().c_str()); return TOK_USE; } else { PRINTB("WARNING: Can't open 'use' file '%s'.", filename); if ( filename.size() == 0 ) PRINT("WARNING: 'use' filename is blank"); else if ( fs::is_directory( usepath ) ) PRINTB("WARNING: 'use' file points to a directory: %s",filename); } } } <> { if(!path_stack.empty()) path_stack.pop_back(); if (yyin && yyin != stdin) { assert(!openfiles.empty()); fclose(openfiles.back()); openfiles.pop_back(); openfilenames.pop_back(); } yypop_buffer_state(); if (!YY_CURRENT_BUFFER) yyterminate(); } "module" return TOK_MODULE; "function" return TOK_FUNCTION; "if" return TOK_IF; "else" return TOK_ELSE; "true" return TOK_TRUE; "false" return TOK_FALSE; "undef" return TOK_UNDEF; {D}+{E}? | {D}*\.{D}+{E}? | {D}+\.{D}*{E}? { parserlval.number = boost::lexical_cast(yytext); return TOK_NUMBER; } "$"?[a-zA-Z0-9_]+ { parserlval.text = strdup(yytext); return TOK_ID; } \" { BEGIN(cond_string); stringcontents.clear(); } { \\n { stringcontents += '\n'; } \\t { stringcontents += '\t'; } \\r { stringcontents += '\r'; } \\\\ { stringcontents += '\\'; } \\\" { stringcontents += '"'; } [^\\\n\"]+ { stringcontents += lexertext; } \" { BEGIN(INITIAL); parserlval.text = strdup(stringcontents.c_str()); return TOK_STRING; } } [\n\r\t ] \/\/[^\n]*\n? "/*" BEGIN(cond_comment); "*/" BEGIN(INITIAL); .|\n "<=" return LE; ">=" return GE; "==" return EQ; "!=" return NE; "&&" return AND; "||" return OR; . { return yytext[0]; } %% fs::path sourcepath() { if (!path_stack.empty()) return path_stack.back(); return fs::path(parser_source_path); } /* Rules for include 1) include 2) include */ void includefile() { if (filename.empty()) return; fs::path dirinfo = sourcepath(); if (!filepath.empty()) { if (boosty::is_absolute(fs::path(filepath))) { dirinfo = filepath; } else { dirinfo /= filepath; } } fs::path finfo = dirinfo / filename; if (!exists(finfo)) { finfo = locate_file((fs::path(filepath) / filename).string()); } if (finfo.empty()) { PRINTB("WARNING: Can't find 'include' file '%s'.", filename); } std::string fullname = boosty::absolute(finfo).string(); // Detect circular includes BOOST_FOREACH(std::string &s, openfilenames) { if (s == fullname) return; } filepath.clear(); path_stack.push_back(finfo.parent_path()); handle_dep(fullname); currmodule->registerInclude(fullname); yyin = fopen(fullname.c_str(), "r"); if (!yyin) { PRINTB("WARNING: Can't open 'include' file '%s'.", filename); path_stack.pop_back(); return; } openfiles.push_back(yyin); openfilenames.push_back(fullname); filename.clear(); yypush_buffer_state(yy_create_buffer(yyin, YY_BUF_SIZE)); } /*! In case of an error, this will make sure we clean up our custom data structures and close all files. */ void lexerdestroy() { BOOST_FOREACH (FILE *f, openfiles) fclose(f); openfiles.clear(); openfilenames.clear(); path_stack.clear(); } openscad-2013.01+dfsg.orig/src/func.cc0000644000175000017500000004355712076022155016777 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "function.h" #include "expression.h" #include "context.h" #include "builtin.h" #include #include #include "mathc99.h" #include #include "stl-utils.h" #include "printutils.h" AbstractFunction::~AbstractFunction() { } Value AbstractFunction::evaluate(const Context*, const std::vector&, const std::vector&) const { return Value(); } std::string AbstractFunction::dump(const std::string &indent, const std::string &name) const { std::stringstream dump; dump << indent << "abstract function " << name << "();\n"; return dump.str(); } Function::~Function() { std::for_each(this->argexpr.begin(), this->argexpr.end(), del_fun()); delete expr; } Value Function::evaluate(const Context *ctx, const std::vector &call_argnames, const std::vector &call_argvalues) const { Context c(ctx); c.args(argnames, argexpr, call_argnames, call_argvalues); return expr ? expr->evaluate(&c) : Value(); } std::string Function::dump(const std::string &indent, const std::string &name) const { std::stringstream dump; dump << indent << "function " << name << "("; for (size_t i=0; i < argnames.size(); i++) { if (i > 0) dump << ", "; dump << argnames[i]; if (argexpr[i]) dump << " = " << *argexpr[i]; } dump << ") = " << *expr << ";\n"; return dump.str(); } BuiltinFunction::~BuiltinFunction() { } Value BuiltinFunction::evaluate(const Context *ctx, const std::vector &call_argnames, const std::vector &call_argvalues) const { return eval_func(ctx, call_argnames, call_argvalues); } std::string BuiltinFunction::dump(const std::string &indent, const std::string &name) const { std::stringstream dump; dump << indent << "builtin function " << name << "();\n"; return dump.str(); } static inline double deg2rad(double x) { return x * M_PI / 180.0; } static inline double rad2deg(double x) { return x * 180.0 / M_PI; } Value builtin_abs(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(fabs(args[0].toDouble())); return Value(); } Value builtin_sign(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value((args[0].toDouble()<0) ? -1.0 : ((args[0].toDouble()>0) ? 1.0 : 0.0)); return Value(); } double frand() { return rand()/(double(RAND_MAX)+1); } double frand(double min, double max) { return (min>max) ? frand()*(min-max)+max : frand()*(max-min)+min; } Value builtin_rands(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 3 && args[0].type() == Value::NUMBER && args[1].type() == Value::NUMBER && args[2].type() == Value::NUMBER) { srand((unsigned int)time(0)); } else if (args.size() == 4 && args[0].type() == Value::NUMBER && args[1].type() == Value::NUMBER && args[2].type() == Value::NUMBER && args[3].type() == Value::NUMBER) { srand((unsigned int)args[3].toDouble()); } else { return Value(); } Value::VectorType vec; for (int i=0; i&, const std::vector &args) { if (args.size() >= 1 && args[0].type() == Value::NUMBER) { double val = args[0].toDouble(); for (size_t i = 1; i < args.size(); i++) if (args[1].type() == Value::NUMBER) val = fmin(val, args[i].toDouble()); return Value(val); } return Value(); } Value builtin_max(const Context *, const std::vector&, const std::vector &args) { if (args.size() >= 1 && args[0].type() == Value::NUMBER) { double val = args[0].toDouble(); for (size_t i = 1; i < args.size(); i++) if (args[1].type() == Value::NUMBER) val = fmax(val, args[i].toDouble()); return Value(val); } return Value(); } Value builtin_sin(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(sin(deg2rad(args[0].toDouble()))); return Value(); } Value builtin_cos(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(cos(deg2rad(args[0].toDouble()))); return Value(); } Value builtin_asin(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(rad2deg(asin(args[0].toDouble()))); return Value(); } Value builtin_acos(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(rad2deg(acos(args[0].toDouble()))); return Value(); } Value builtin_tan(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(tan(deg2rad(args[0].toDouble()))); return Value(); } Value builtin_atan(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(rad2deg(atan(args[0].toDouble()))); return Value(); } Value builtin_atan2(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 2 && args[0].type() == Value::NUMBER && args[1].type() == Value::NUMBER) return Value(rad2deg(atan2(args[0].toDouble(), args[1].toDouble()))); return Value(); } Value builtin_pow(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 2 && args[0].type() == Value::NUMBER && args[1].type() == Value::NUMBER) return Value(pow(args[0].toDouble(), args[1].toDouble())); return Value(); } Value builtin_round(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(round(args[0].toDouble())); return Value(); } Value builtin_ceil(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(ceil(args[0].toDouble())); return Value(); } Value builtin_floor(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(floor(args[0].toDouble())); return Value(); } Value builtin_sqrt(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(sqrt(args[0].toDouble())); return Value(); } Value builtin_exp(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(exp(args[0].toDouble())); return Value(); } Value builtin_length(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1) { if (args[0].type() == Value::VECTOR) return Value(int(args[0].toVector().size())); if (args[0].type() == Value::STRING) return Value(int(args[0].toString().size())); } return Value(); } Value builtin_log(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 2 && args[0].type() == Value::NUMBER && args[1].type() == Value::NUMBER) return Value(log(args[1].toDouble()) / log(args[0].toDouble())); if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(log(args[0].toDouble()) / log(10.0)); return Value(); } Value builtin_ln(const Context *, const std::vector&, const std::vector &args) { if (args.size() == 1 && args[0].type() == Value::NUMBER) return Value(log(args[0].toDouble())); return Value(); } Value builtin_str(const Context *, const std::vector&, const std::vector &args) { std::stringstream stream; for (size_t i = 0; i < args.size(); i++) { stream << args[i].toString(); } return Value(stream.str()); } Value builtin_lookup(const Context *, const std::vector&, const std::vector &args) { double p, low_p, low_v, high_p, high_v; if (args.size() < 2 || // Needs two args !args[0].getDouble(p) || // First must be a number args[1].toVector().size() < 2 || // Second must be a vector of vectors args[1].toVector()[0].toVector().size() < 2) return Value(); if (!args[1].toVector()[0].getVec2(low_p, low_v) || !args[1].toVector()[0].getVec2(high_p, high_v)) return Value(); for (size_t i = 1; i < args[1].toVector().size(); i++) { double this_p, this_v; if (args[1].toVector()[i].getVec2(this_p, this_v)) { if (this_p <= p && (this_p > low_p || low_p > p)) { low_p = this_p; low_v = this_v; } if (this_p >= p && (this_p < high_p || high_p < p)) { high_p = this_p; high_v = this_v; } } } if (p <= low_p) return Value(low_v); if (p >= high_p) return Value(high_v); double f = (p-low_p) / (high_p-low_p); return Value(high_v * f + low_v * (1-f)); } /* Pattern: "search" "(" ( match_value | list_of_match_values ) "," vector_of_vectors ("," num_returns_per_match ("," index_col_num )? )? ")"; match_value : ( Value::NUMBER | Value::STRING ); list_of_values : "[" match_value ("," match_value)* "]"; vector_of_vectors : "[" ("[" Value ("," Value)* "]")+ "]"; num_returns_per_match : int; index_col_num : int; Examples: Index values return as list: search("a","abcdabcd"); - returns [0,4] search("a","abcdabcd",1); - returns [0] search("e","abcdabcd",1); - returns [] search("a",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9] ]); - returns [0,4] Search on different column; return Index values: search(3,[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",3] ], 0, 1); - returns [0,8] Search on list of values: Return all matches per search vector element: search("abc",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9] ], 0); - returns [[0,4],[1,5],[2,6]] Return first match per search vector element; special case return vector: search("abc",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9] ], 1); - returns [0,1,2] Return first two matches per search vector element; vector of vectors: search("abce",[ ["a",1],["b",2],["c",3],["d",4],["a",5],["b",6],["c",7],["d",8],["e",9] ], 2); - returns [[0,4],[1,5],[2,6],[8]] */ Value builtin_search(const Context *, const std::vector&, const std::vector &args) { if (args.size() < 2) return Value(); const Value &findThis = args[0]; const Value &searchTable = args[1]; unsigned int num_returns_per_match = (args.size() > 2) ? args[2].toDouble() : 1; unsigned int index_col_num = (args.size() > 3) ? args[3].toDouble() : 0; Value::VectorType returnvec; if (findThis.type() == Value::NUMBER) { unsigned int matchCount = 0; Value::VectorType resultvec; for (size_t j = 0; j < searchTable.toVector().size(); j++) { if (searchTable.toVector()[j].toVector()[index_col_num].type() == Value::NUMBER && findThis.toDouble() == searchTable.toVector()[j].toVector()[index_col_num].toDouble()) { returnvec.push_back(Value(double(j))); matchCount++; if (num_returns_per_match != 0 && matchCount >= num_returns_per_match) break; } } } else if (findThis.type() == Value::STRING) { unsigned int searchTableSize; if (searchTable.type() == Value::STRING) searchTableSize = searchTable.toString().size(); else searchTableSize = searchTable.toVector().size(); for (size_t i = 0; i < findThis.toString().size(); i++) { unsigned int matchCount = 0; Value::VectorType resultvec; for (size_t j = 0; j < searchTableSize; j++) { if ((searchTable.type() == Value::VECTOR && findThis.toString()[i] == searchTable.toVector()[j].toVector()[index_col_num].toString()[0]) || (searchTable.type() == Value::STRING && findThis.toString()[i] == searchTable.toString()[j])) { Value resultValue((double(j))); matchCount++; if (num_returns_per_match == 1) { returnvec.push_back(resultValue); break; } else { resultvec.push_back(resultValue); } if (num_returns_per_match > 1 && matchCount >= num_returns_per_match) break; } } if (matchCount == 0) PRINTB(" search term not found: \"%s\"", findThis.toString()[i]); if (num_returns_per_match == 0 || num_returns_per_match > 1) { returnvec.push_back(Value(resultvec)); } } } else if (findThis.type() == Value::VECTOR) { for (size_t i = 0; i < findThis.toVector().size(); i++) { unsigned int matchCount = 0; Value::VectorType resultvec; for (size_t j = 0; j < searchTable.toVector().size(); j++) { if ((findThis.toVector()[i].type() == Value::NUMBER && searchTable.toVector()[j].toVector()[index_col_num].type() == Value::NUMBER && findThis.toVector()[i].toDouble() == searchTable.toVector()[j].toVector()[index_col_num].toDouble()) || (findThis.toVector()[i].type() == Value::STRING && searchTable.toVector()[j].toVector()[index_col_num].type() == Value::STRING && findThis.toVector()[i].toString() == searchTable.toVector()[j].toVector()[index_col_num].toString())) { Value resultValue((double(j))); matchCount++; if (num_returns_per_match == 1) { returnvec.push_back(resultValue); break; } else { resultvec.push_back(resultValue); } if (num_returns_per_match > 1 && matchCount >= num_returns_per_match) break; } } if (num_returns_per_match == 1 && matchCount == 0) { if (findThis.toVector()[i].type() == Value::NUMBER) { PRINTB(" search term not found: %s",findThis.toVector()[i].toDouble()); } else if (findThis.toVector()[i].type() == Value::STRING) { PRINTB(" search term not found: \"%s\"",findThis.toVector()[i].toString()); } returnvec.push_back(Value(resultvec)); } if (num_returns_per_match == 0 || num_returns_per_match > 1) { returnvec.push_back(Value(resultvec)); } } } else { PRINTB(" search: none performed on input %s", findThis); return Value(); } return Value(returnvec); } #define QUOTE(x__) # x__ #define QUOTED(x__) QUOTE(x__) Value builtin_version(const Context *, const std::vector&, const std::vector &) { Value::VectorType val; val.push_back(Value(double(OPENSCAD_YEAR))); val.push_back(Value(double(OPENSCAD_MONTH))); #ifdef OPENSCAD_DAY val.push_back(Value(double(OPENSCAD_DAY))); #endif return Value(val); } Value builtin_version_num(const Context *ctx, const std::vector& call_argnames, const std::vector &args) { Value val = (args.size() == 0) ? builtin_version(ctx, call_argnames, args) : args[0]; double y, m, d = 0; if (!val.getVec3(y, m, d)) { if (!val.getVec2(y, m)) { return Value(); } } return Value(y * 10000 + m * 100 + d); } void register_builtin_functions() { Builtins::init("abs", new BuiltinFunction(&builtin_abs)); Builtins::init("sign", new BuiltinFunction(&builtin_sign)); Builtins::init("rands", new BuiltinFunction(&builtin_rands)); Builtins::init("min", new BuiltinFunction(&builtin_min)); Builtins::init("max", new BuiltinFunction(&builtin_max)); Builtins::init("sin", new BuiltinFunction(&builtin_sin)); Builtins::init("cos", new BuiltinFunction(&builtin_cos)); Builtins::init("asin", new BuiltinFunction(&builtin_asin)); Builtins::init("acos", new BuiltinFunction(&builtin_acos)); Builtins::init("tan", new BuiltinFunction(&builtin_tan)); Builtins::init("atan", new BuiltinFunction(&builtin_atan)); Builtins::init("atan2", new BuiltinFunction(&builtin_atan2)); Builtins::init("round", new BuiltinFunction(&builtin_round)); Builtins::init("ceil", new BuiltinFunction(&builtin_ceil)); Builtins::init("floor", new BuiltinFunction(&builtin_floor)); Builtins::init("pow", new BuiltinFunction(&builtin_pow)); Builtins::init("sqrt", new BuiltinFunction(&builtin_sqrt)); Builtins::init("exp", new BuiltinFunction(&builtin_exp)); Builtins::init("len", new BuiltinFunction(&builtin_length)); Builtins::init("log", new BuiltinFunction(&builtin_log)); Builtins::init("ln", new BuiltinFunction(&builtin_ln)); Builtins::init("str", new BuiltinFunction(&builtin_str)); Builtins::init("lookup", new BuiltinFunction(&builtin_lookup)); Builtins::init("search", new BuiltinFunction(&builtin_search)); Builtins::init("version", new BuiltinFunction(&builtin_version)); Builtins::init("version_num", new BuiltinFunction(&builtin_version_num)); } openscad-2013.01+dfsg.orig/src/svg.cc0000644000175000017500000002137712076022156016640 0ustar chrysnchrysn#include "cgalutils.h" #include "svg.h" #include #include namespace OpenSCAD { // SVG code // currently for debugging, not necessarily pretty or useful for users. (yet) int svg_cursor_py = 0; int svg_px_width = SVG_PXW; int svg_px_height = SVG_PXH; std::string svg_header( int widthpx, int heightpx ) { std::stringstream out; out << ""; return out.str(); } std::string svg_label(std::string s) { std::stringstream out; out << " " << s << ""; return out.str(); } std::string svg_border() { std::stringstream out; out << " \n"; out << " \n"; out << " "; return out.str(); } std::string svg_axes() { std::stringstream out; out << " \n"; out << " \n"; out << " "; return out.str(); } CGAL_Point_2e project_svg_3to2( CGAL_Point_3 p, CGAL_Iso_cuboid_3 bbox ) { NT screenw(svg_px_width); NT screenh(svg_px_height); NT screenxc = screenw / 2; NT screenyc = screenh / 2; NT bboxx = ( bbox.xmax() - bbox.xmin() ); NT bboxy = ( bbox.ymax() - bbox.ymin() ); NT bboxz = ( bbox.zmax() - bbox.zmin() ); NT largest_dim = CGAL::max( CGAL::max( bboxx, bboxy ), bboxz ); NT bboxxc = bboxx / 2 + bbox.xmin(); NT bboxyc = bboxy / 2 + bbox.ymin(); NT bboxzc = bboxz / 2 + bbox.zmin(); NT xinbox = ( p.x() - bboxxc ) / largest_dim; NT yinbox = ( p.y() - bboxyc ) / largest_dim; NT zinbox = ( p.z() - bboxzc ) / largest_dim; // do simple fake paralell projection NT tx = screenxc + xinbox * screenw / 1.618 + yinbox * screenh / 3.2; NT ty = screenyc - zinbox * screenh / 1.618 - yinbox * screenh / 3.2; return CGAL_Point_2e( tx, ty ); } CGAL_Point_2e project_svg_2to2( CGAL_Point_2e p, CGAL_Iso_rectangle_2e bbox ) { double screenw = svg_px_width; double screenh = svg_px_height; double borderw = screenw * 0.1618; double borderh = screenh * 0.1618; double vizw = screenw - borderw*2; double vizh = screenh - borderh*2; double bboxw = CGAL::to_double( bbox.xmax() - bbox.xmin() ); double bboxh = CGAL::to_double( bbox.ymax() - bbox.ymin() ); double xinbox = CGAL::to_double( p.x() ) - CGAL::to_double( bbox.xmin() ); double yinbox = CGAL::to_double( p.y() ) - CGAL::to_double( bbox.ymin() ); double tx = borderw + ( xinbox / ( bboxw==0?1:bboxw ) ) * ( vizw ); double ty = screenh - borderh - ( yinbox / ( bboxh==0?1:bboxh ) ) * ( vizh ); return CGAL_Point_2e( tx, ty ); } std::string dump_cgal_nef_polyhedron2_face_svg( CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c1, CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c2, CGAL_Nef_polyhedron2::Explorer explorer, std::string color, bool mark, CGAL_Iso_rectangle_2e bbox ) { std::stringstream out; CGAL_For_all(c1, c2) { if ( explorer.is_standard( explorer.target(c1) ) ) { CGAL_Point_2e source = explorer.point( explorer.source( c1 ) ); CGAL_Point_2e target = explorer.point( explorer.target( c1 ) ); CGAL_Point_2e tp1 = project_svg_2to2( source, bbox ); CGAL_Point_2e tp2 = project_svg_2to2( target, bbox ); double mod=0; if (color=="green") mod=10; out << " \n"; out << " \n"; else out << " />\n"; // crude "arrowhead" to indicate directionality out << " \n"; } else { out << " \n"; } } return out.str(); } std::string dump_svg( const CGAL_Nef_polyhedron2 &N ) { std::stringstream out; CGAL_Nef_polyhedron2::Explorer explorer = N.explorer(); CGAL_Iso_rectangle_2e bbox = bounding_box( N ); CGAL_Nef_polyhedron2::Explorer::Face_const_iterator i; out << " \n"; out << svg_border() << "\n" << svg_axes() << "\n"; svg_cursor_py += svg_px_height; for ( i = explorer.faces_begin(); i!= explorer.faces_end(); ++i ) { out << " \n"; CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c1 = explorer.face_cycle( i ), c2 ( c1 ); out << dump_cgal_nef_polyhedron2_face_svg( c1, c2, explorer, "red", i->mark(), bbox ); CGAL_Nef_polyhedron2::Explorer::Hole_const_iterator j; for ( j = explorer.holes_begin( i ); j!= explorer.holes_end( i ); ++j ) { out << " \n"; CGAL_Nef_polyhedron2::Explorer::Halfedge_around_face_const_circulator c3( j ), c4 ( c3 ); out << dump_cgal_nef_polyhedron2_face_svg( c3, c4, explorer, "green", j->mark(), bbox ); out << " \n"; } out << " \n"; } out << ""; std::string tmp = out.str(); boost::replace_all( tmp, "'", "\"" ); return tmp; } // This uses the Shell Explorer pattern from the CGAL Manual to dump the 3d Nef Polyhedron information // http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Nef_3/Chapter_main.html#Subsection_29.7.2 class NefPoly3_dumper_svg { public: std::stringstream out; CGAL_Iso_cuboid_3 bbox; NefPoly3_dumper_svg(const CGAL_Nef_polyhedron3& N) { bbox = bounding_box( N ); } void visit(CGAL_Nef_polyhedron3::Vertex_const_handle ) {} void visit(CGAL_Nef_polyhedron3::Halfedge_const_handle ) {} void visit(CGAL_Nef_polyhedron3::SHalfedge_const_handle ) {} void visit(CGAL_Nef_polyhedron3::SHalfloop_const_handle ) {} void visit(CGAL_Nef_polyhedron3::SFace_const_handle ) {} void visit( CGAL_Nef_polyhedron3::Halffacet_const_handle hfacet ) { int contour_count = 0; out << " \n"; std::string color = "gold"; if (!(*hfacet).mark()) color = "green"; CGAL_Nef_polyhedron3::Halffacet_cycle_const_iterator i; CGAL_forall_facet_cycles_of( i, hfacet ) { CGAL_Nef_polyhedron3::SHalfloop_const_handle shl_handle; out << " \n"; if ( contour_count == 0 ) { out << " \n"; } else { out << " \n" ; } CGAL_Nef_polyhedron3::SHalfedge_around_facet_const_circulator c1(i), c2(c1); CGAL_For_all( c1, c2 ) { out << " source(), except thats what CGAL does internally CGAL_Point_3 source = c1->source()->source()->point(); CGAL_Point_3 target = c1->source()->target()->point(); CGAL_Point_2e tp1 = project_svg_3to2 ( source, bbox ); CGAL_Point_2e tp2 = project_svg_3to2 ( target, bbox ); out << " " << "x1='" << CGAL::to_double(tp1.x()) << "' " << "y1='" << CGAL::to_double(tp1.y()) << "' " << "x2='" << CGAL::to_double(tp2.x()) << "' " << "y2='" << CGAL::to_double(tp2.y()) << "' " << " stroke='" << color << "'"; if (!(*hfacet).mark()) out << " stroke-dasharray='4 4' />\n"; else out << " />\n"; } contour_count++; } // next facet cycle (i.e. next contour) } // visit() }; std::string dump_svg( const CGAL_Nef_polyhedron3 &N ) { std::stringstream out; out << svg_header() << "\n" << svg_border() << "\n" << svg_axes() << "\n"; out << "\n"; CGAL_Nef_polyhedron3::Volume_const_iterator c; CGAL_forall_volumes(c,N) { out << " \n"; out << " \n"; CGAL_Nef_polyhedron3::Shell_entry_const_iterator it; CGAL_forall_shells_of(it,c) { out << " \n"; NefPoly3_dumper_svg dumper_svg(N); N.visit_shell_objects(CGAL_Nef_polyhedron3::SFace_const_handle(it), dumper_svg ); out << dumper_svg.out.str(); out << " \n"; } out << " \n"; } out << "\n"; out << ""; std::string tmp = out.str(); boost::replace_all( tmp, "'", "\"" ); return tmp; } } // namespace openscad-2013.01+dfsg.orig/src/dxftess-cgal.cc0000644000175000017500000002244412076022155020420 0ustar chrysnchrysn#include "printutils.h" #include "dxftess.h" #include "dxfdata.h" #include "polyset.h" #include "grid.h" #include "cgal.h" #ifdef NDEBUG #define PREV_NDEBUG NDEBUG #undef NDEBUG #endif #include #include #include #include #include #include #include #ifdef PREV_NDEBUG #define NDEBUG PREV_NDEBUG #endif typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Triangulation_vertex_base_2 Vb; typedef CGAL::Delaunay_mesh_face_base_2 Fb; typedef CGAL::Triangulation_data_structure_2 Tds; typedef CGAL::Constrained_Delaunay_triangulation_2 CDT; //typedef CGAL::Delaunay_mesh_criteria_2 Criteria; typedef CDT::Vertex_handle Vertex_handle; typedef CDT::Point CDTPoint; #include template class DummyCriteria { public: typedef double Quality; class Is_bad { public: CGAL::Mesh_2::Face_badness operator()(const Quality) const { return CGAL::Mesh_2::NOT_BAD; } CGAL::Mesh_2::Face_badness operator()(const typename T::Face_handle&, Quality&q) const { q = 1; return CGAL::Mesh_2::NOT_BAD; } }; Is_bad is_bad_object() const { return Is_bad(); } }; struct triangle { struct { double x, y; } p[3]; bool is_inner, is_marked; }; struct point_info_t { double x, y; int pathidx, pointidx; int max_pointidx_in_path; std::vector triangles; struct point_info_t *neigh_next; struct point_info_t *neigh_prev; point_info_t(double x, double y, int a, int b, int c) : x(x), y(y), pathidx(a), pointidx(b), max_pointidx_in_path(c) { } point_info_t() : x(0), y(0), pathidx(-1), pointidx(-1), max_pointidx_in_path(-1) { } }; typedef std::pair edge_t; void mark_inner_outer(std::vector &tri, Grid2d &point_info, boost::unordered_map &edge_to_triangle, boost::unordered_map &edge_to_path, int idx, bool inner) { if (tri[idx].is_marked) return; tri[idx].is_inner = inner; tri[idx].is_marked = true; point_info_t *p[3] = { &point_info.data(tri[idx].p[0].x, tri[idx].p[0].y), &point_info.data(tri[idx].p[1].x, tri[idx].p[1].y), &point_info.data(tri[idx].p[2].x, tri[idx].p[2].y) }; edge_t edges[3] = { edge_t(p[1], p[0]), edge_t(p[2], p[1]), edge_t(p[0], p[2]) }; for (int i = 0; i < 3; i++) { if (edge_to_triangle.find(edges[i]) != edge_to_triangle.end()) { bool next_inner = (edge_to_path.find(edges[i]) != edge_to_path.end()) ? !inner : inner; mark_inner_outer(tri, point_info, edge_to_triangle, edge_to_path, edge_to_triangle[edges[i]], next_inner); } } } void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool /* do_triangle_splitting */, double h) { CDT cdt; std::vector tri; Grid2d point_info(GRID_FINE); boost::unordered_map edge_to_triangle; boost::unordered_map edge_to_path; CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { // read path data and copy all relevant infos for (size_t i = 0; i < dxf.paths.size(); i++) { if (!dxf.paths[i].is_closed) continue; Vertex_handle first, prev; struct point_info_t *first_pi = NULL, *prev_pi = NULL; for (size_t j = 1; j < dxf.paths[i].indices.size(); j++) { double x = dxf.points[dxf.paths[i].indices[j]][0]; double y = dxf.points[dxf.paths[i].indices[j]][1]; if (point_info.has(x, y)) { // FIXME: How can the same path set contain the same point twice? // ..maybe it would be better to assert here. But this would // break compatibility with the glu tesselator that handled such // cases just fine. PRINT( "WARNING: Duplicate vertex found during Tessellation. Render may be incorrect." ); continue; } struct point_info_t *pi = &point_info.align(x, y); *pi = point_info_t(x, y, i, j, dxf.paths[i].indices.size()-1); Vertex_handle vh = cdt.insert(CDTPoint(x, y)); if (first_pi == NULL) { first_pi = pi; first = vh; } else { prev_pi->neigh_next = pi; pi->neigh_prev = prev_pi; edge_to_path[edge_t(prev_pi, pi)] = 1; edge_to_path[edge_t(pi, prev_pi)] = 1; cdt.insert_constraint(prev, vh); } prev_pi = pi; prev = vh; } if (first_pi != NULL && first_pi != prev_pi) { prev_pi->neigh_next = first_pi; first_pi->neigh_prev = prev_pi; edge_to_path[edge_t(first_pi, prev_pi)] = 1; edge_to_path[edge_t(prev_pi, first_pi)] = 1; cdt.insert_constraint(prev, first); } } } catch (const CGAL::Assertion_exception &e) { PRINTB("CGAL error in dxf_tesselate(): %s", e.what()); CGAL::set_error_behaviour(old_behaviour); return; } CGAL::set_error_behaviour(old_behaviour); // run delaunay triangulation std::list list_of_seeds; CGAL::refine_Delaunay_mesh_2_without_edge_refinement(cdt, list_of_seeds.begin(), list_of_seeds.end(), DummyCriteria()); // copy triangulation results CDT::Finite_faces_iterator iter = cdt.finite_faces_begin(); for(; iter != cdt.finite_faces_end(); ++iter) { if (!iter->is_in_domain()) continue; int idx = tri.size(); tri.push_back(triangle()); point_info_t *pi[3]; for (int i=0; i<3; i++) { double px = iter->vertex(i)->point()[0]; double py = iter->vertex(i)->point()[1]; pi[i] = &point_info.align(px, py); pi[i]->triangles.push_back(idx); tri[idx].p[i].x = px; tri[idx].p[i].y = py; } edge_to_triangle[edge_t(pi[0], pi[1])] = idx; edge_to_triangle[edge_t(pi[1], pi[2])] = idx; edge_to_triangle[edge_t(pi[2], pi[0])] = idx; } // mark trianlges as inner/outer while (1) { double far_left_x = 0; struct point_info_t *far_left_p = NULL; for (size_t i = 0; i < tri.size(); i++) { if (tri[i].is_marked) continue; for (int j = 0; j < 3; j++) { double x = tri[i].p[j].x; double y = tri[i].p[j].y; if (far_left_p == NULL || x < far_left_x) { far_left_x = x; far_left_p = &point_info.data(x, y); } } } if (far_left_p == NULL) break; // find one inner triangle and run recursive marking for (size_t i = 0; i < far_left_p->triangles.size(); i++) { int idx = far_left_p->triangles[i]; if (tri[idx].is_marked) continue; point_info_t *p0 = &point_info.data(tri[idx].p[0].x, tri[idx].p[0].y); point_info_t *p1 = &point_info.data(tri[idx].p[1].x, tri[idx].p[1].y); point_info_t *p2 = &point_info.data(tri[idx].p[2].x, tri[idx].p[2].y); point_info_t *mp = NULL, *np1 = NULL, *np2 = NULL, *tp = NULL; if (p0 == far_left_p) mp = p0, np1 = p1, np2 = p2; else if (p1 == far_left_p) mp = p1, np1 = p0, np2 = p2; else if (p2 == far_left_p) mp = p2, np1 = p0, np2 = p1; else continue; if (mp->neigh_next == np2 || mp->neigh_prev == np1) { point_info_t *t = np1; np1 = np2; np2 = t; } if (mp->neigh_next == np1 && mp->neigh_prev == np2) { mark_inner_outer(tri, point_info, edge_to_triangle, edge_to_path, idx, true); goto found_and_marked_inner; } if (mp->neigh_next == np1) tp = np2; if (mp->neigh_prev == np2) tp = np1; if (tp != NULL) { double z0 = (mp->neigh_next->x - mp->x) * (mp->neigh_prev->y - mp->y) - (mp->neigh_prev->x - mp->x) * (mp->neigh_next->y - mp->y); double z1 = (mp->neigh_next->x - mp->x) * (tp->y - mp->y) - (tp->x - mp->x) * (mp->neigh_next->y - mp->y); double z2 = (tp->x - mp->x) * (mp->neigh_prev->y - mp->y) - (mp->neigh_prev->x - mp->x) * (tp->y - mp->y); if ((z0 < 0 && z1 < 0 && z2 < 0) || (z0 > 0 && z1 > 0 && z2 > 0)) { mark_inner_outer(tri, point_info, edge_to_triangle, edge_to_path, idx, true); goto found_and_marked_inner; } } } // far left point is in the middle of a vertical segment // -> it is ok to use any unmarked triangle connected to this point for (size_t i = 0; i < far_left_p->triangles.size(); i++) { int idx = far_left_p->triangles[i]; if (tri[idx].is_marked) continue; mark_inner_outer(tri, point_info, edge_to_triangle, edge_to_path, idx, true); break; } found_and_marked_inner:; } // add all inner triangles to target polyset for(size_t i = 0; i < tri.size(); i++) { if (!tri[i].is_inner) continue; ps->append_poly(); int path[3], point[3]; for (int j=0;j<3;j++) { int idx = up ? j : (2-j); double px = tri[i].p[idx].x; double py = tri[i].p[idx].y; ps->append_vertex(px * cos(rot*M_PI/180) + py * sin(rot*M_PI/180), px * -sin(rot*M_PI/180) + py * cos(rot*M_PI/180), h); path[j] = point_info.data(px, py).pathidx; point[j] = point_info.data(px, py).pointidx; } if (path[0] == path[1] && point[0] == 1 && point[1] == 2) dxf.paths[path[0]].is_inner = up; if (path[0] == path[1] && point[0] == 2 && point[1] == 1) dxf.paths[path[0]].is_inner = !up; if (path[1] == path[2] && point[1] == 1 && point[2] == 2) dxf.paths[path[1]].is_inner = up; if (path[1] == path[2] && point[1] == 2 && point[2] == 1) dxf.paths[path[1]].is_inner = !up; if (path[2] == path[0] && point[2] == 1 && point[0] == 2) dxf.paths[path[2]].is_inner = up; if (path[2] == path[0] && point[2] == 2 && point[0] == 1) dxf.paths[path[2]].is_inner = !up; } } openscad-2013.01+dfsg.orig/src/export.cc0000644000175000017500000001546712076022155017364 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "export.h" #include "printutils.h" #include "polyset.h" #include "dxfdata.h" #ifdef ENABLE_CGAL #include "CGAL_Nef_polyhedron.h" #include "cgal.h" /*! Saves the current 3D CGAL Nef polyhedron as STL to the given file. The file must be open. */ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output) { CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { CGAL_Polyhedron P; root_N->p3->convert_to_Polyhedron(P); typedef CGAL_Polyhedron::Vertex Vertex; typedef CGAL_Polyhedron::Vertex_const_iterator VCI; typedef CGAL_Polyhedron::Facet_const_iterator FCI; typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC; setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output output << "solid OpenSCAD_Model\n"; for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) { HFCC hc = fi->facet_begin(); HFCC hc_end = hc; Vertex v1, v2, v3; v1 = *VCI((hc++)->vertex()); v3 = *VCI((hc++)->vertex()); do { v2 = v3; v3 = *VCI((hc++)->vertex()); double x1 = CGAL::to_double(v1.point().x()); double y1 = CGAL::to_double(v1.point().y()); double z1 = CGAL::to_double(v1.point().z()); double x2 = CGAL::to_double(v2.point().x()); double y2 = CGAL::to_double(v2.point().y()); double z2 = CGAL::to_double(v2.point().z()); double x3 = CGAL::to_double(v3.point().x()); double y3 = CGAL::to_double(v3.point().y()); double z3 = CGAL::to_double(v3.point().z()); std::stringstream stream; stream << x1 << " " << y1 << " " << z1; std::string vs1 = stream.str(); stream.str(""); stream << x2 << " " << y2 << " " << z2; std::string vs2 = stream.str(); stream.str(""); stream << x3 << " " << y3 << " " << z3; std::string vs3 = stream.str(); if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) { // The above condition ensures that there are 3 distinct vertices, but // they may be collinear. If they are, the unit normal is meaningless // so the default value of "1 0 0" can be used. If the vertices are not // collinear then the unit normal must be calculated from the // components. if (!CGAL::collinear(v1.point(),v2.point(),v3.point())) { CGAL_Polyhedron::Traits::Vector_3 normal = CGAL::normal(v1.point(),v2.point(),v3.point()); output << " facet normal " << CGAL::sign(normal.x()) * sqrt(CGAL::to_double(normal.x()*normal.x()/normal.squared_length())) << " " << CGAL::sign(normal.y()) * sqrt(CGAL::to_double(normal.y()*normal.y()/normal.squared_length())) << " " << CGAL::sign(normal.z()) * sqrt(CGAL::to_double(normal.z()*normal.z()/normal.squared_length())) << "\n"; } else output << " facet normal 1 0 0\n"; output << " outer loop\n"; output << " vertex " << vs1 << "\n"; output << " vertex " << vs2 << "\n"; output << " vertex " << vs3 << "\n"; output << " endloop\n"; output << " endfacet\n"; } } while (hc != hc_end); } output << "endsolid OpenSCAD_Model\n"; setlocale(LC_NUMERIC, ""); // Set default locale } catch (const CGAL::Assertion_exception &e) { PRINTB("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); } void export_off(CGAL_Nef_polyhedron *root_N, std::ostream &output) { CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { CGAL_Polyhedron P; root_N->p3->convert_to_Polyhedron(P); output << P; } catch (const CGAL::Assertion_exception &e) { PRINTB("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); } /*! Saves the current 2D CGAL Nef polyhedron as DXF to the given absolute filename. */ void export_dxf(CGAL_Nef_polyhedron *root_N, std::ostream &output) { setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output // Some importers (e.g. Inkscape) needs a BLOCKS section to be present output << " 0\n" << "SECTION\n" << " 2\n" << "BLOCKS\n" << " 0\n" << "ENDSEC\n" << " 0\n" << "SECTION\n" << " 2\n" << "ENTITIES\n"; DxfData *dd =root_N->convertToDxfData(); for (size_t i=0; ipaths.size(); i++) { for (size_t j=1; jpaths[i].indices.size(); j++) { const Vector2d &p1 = dd->points[dd->paths[i].indices[j-1]]; const Vector2d &p2 = dd->points[dd->paths[i].indices[j]]; double x1 = p1[0]; double y1 = p1[1]; double x2 = p2[0]; double y2 = p2[1]; output << " 0\n" << "LINE\n"; // Some importers (e.g. Inkscape) needs a layer to be specified output << " 8\n" << "0\n" << " 10\n" << x1 << "\n" << " 11\n" << x2 << "\n" << " 20\n" << y1 << "\n" << " 21\n" << y2 << "\n"; } } output << " 0\n" << "ENDSEC\n"; // Some importers (e.g. Inkscape) needs an OBJECTS section with a DICTIONARY entry output << " 0\n" << "SECTION\n" << " 2\n" << "OBJECTS\n" << " 0\n" << "DICTIONARY\n" << " 0\n" << "ENDSEC\n"; output << " 0\n" <<"EOF\n"; delete dd; setlocale(LC_NUMERIC, ""); // Set default locale } #endif #ifdef DEBUG #include void export_stl(const PolySet &ps, std::ostream &output) { output << "solid OpenSCAD_PolySet\n"; BOOST_FOREACH(const PolySet::Polygon &p, ps.polygons) { output << "facet\n"; output << "outer loop\n"; BOOST_FOREACH(const Vector3d &v, p) { output << "vertex " << v[0] << " " << v[1] << " " << v[2] << "\n"; } output << "endloop\n"; output << "endfacet\n"; } output << "endsolid OpenSCAD_PolySet\n"; } #endif openscad-2013.01+dfsg.orig/src/svg.h0000644000175000017500000000115412076022156016471 0ustar chrysnchrysn#ifndef SVG_H_ #define SVG_H_ #include "cgal.h" #include #include namespace OpenSCAD { // currently for debugging, not necessarily pretty or useful for users. (yet) #define SVG_PXW 480 #define SVG_PXH 480 extern int svg_cursor_py; extern int svg_px_width; extern int svg_px_height; std::string svg_header( int widthpx = SVG_PXW, int heightpx = SVG_PXH ); std::string svg_label( std::string s ); std::string svg_border(); std::string svg_axes(); std::string dump_svg( const CGAL_Nef_polyhedron2 &N ); std::string dump_svg( const CGAL_Nef_polyhedron3 &N ); } // namespace #endif openscad-2013.01+dfsg.orig/src/parser.y0000644000175000017500000002731012076022155017210 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ %expect 1 /* Expect 1 shift/reduce conflict for ifelse_statement - "dangling else problem" */ %{ #include #include #ifndef _MSC_VER #include #endif #include "module.h" #include "expression.h" #include "value.h" #include "function.h" #include "printutils.h" #include #include #include namespace fs = boost::filesystem; #include "boosty.h" int parser_error_pos = -1; int parserlex(void); void yyerror(char const *s); int lexerget_lineno(void); int lexerlex_destroy(void); int lexerlex(void); std::vector module_stack; Module *currmodule; class ArgContainer { public: std::string argname; Expression *argexpr; }; class ArgsContainer { public: std::vector argnames; std::vector argexpr; }; %} %union { char *text; double number; class Value *value; class Expression *expr; class ModuleInstantiation *inst; class IfElseModuleInstantiation *ifelse; class ArgContainer *arg; class ArgsContainer *args; } %token TOK_MODULE %token TOK_FUNCTION %token TOK_IF %token TOK_ELSE %token TOK_ID %token TOK_STRING %token TOK_USE %token TOK_NUMBER %token TOK_TRUE %token TOK_FALSE %token TOK_UNDEF %token LE GE EQ NE AND OR %right '?' ':' %left OR %left AND %left '<' LE GE '>' %left EQ NE %left '!' '+' '-' %left '*' '/' '%' %left '[' ']' %left '.' %type expr %type vector_expr %type module_instantiation %type if_statement %type ifelse_statement %type children_instantiation %type module_instantiation_list %type single_module_instantiation %type arguments_call %type arguments_decl %type argument_call %type argument_decl %debug %% input: /* empty */ | TOK_USE { currmodule->usedlibs[$1] = NULL; } input | statement input ; inner_input: /* empty */ | statement inner_input ; statement: ';' | '{' inner_input '}' | module_instantiation { if ($1) { currmodule->addChild($1); } else { delete $1; } } | TOK_ID '=' expr ';' { bool add_new_assignment = true; for (size_t i = 0; i < currmodule->assignments_var.size(); i++) { if (currmodule->assignments_var[i] != $1) continue; delete currmodule->assignments_expr[i]; currmodule->assignments_expr[i] = $3; add_new_assignment = false; } if (add_new_assignment) { currmodule->assignments_var.push_back($1); currmodule->assignments_expr.push_back($3); free($1); } } | TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' { Module *p = currmodule; module_stack.push_back(currmodule); currmodule = new Module(); p->modules[$2] = currmodule; currmodule->argnames = $4->argnames; currmodule->argexpr = $4->argexpr; free($2); delete $4; } statement { currmodule = module_stack.back(); module_stack.pop_back(); } | TOK_FUNCTION TOK_ID '(' arguments_decl optional_commas ')' '=' expr { Function *func = new Function(); func->argnames = $4->argnames; func->argexpr = $4->argexpr; func->expr = $8; currmodule->functions[$2] = func; free($2); delete $4; } ';' ; /* Will return a dummy parent node with zero or more children */ children_instantiation: module_instantiation { $$ = new ModuleInstantiation(); if ($1) { $$->children.push_back($1); } } | '{' module_instantiation_list '}' { $$ = $2; } ; if_statement: TOK_IF '(' expr ')' children_instantiation { $$ = new IfElseModuleInstantiation(); $$->argnames.push_back(""); $$->argexpr.push_back($3); if ($$) { $$->children = $5->children; } else { for (size_t i = 0; i < $5->children.size(); i++) delete $5->children[i]; } $5->children.clear(); delete $5; } ; ifelse_statement: if_statement { $$ = $1; } | if_statement TOK_ELSE children_instantiation { $$ = $1; if ($$) { $$->else_children = $3->children; } else { for (size_t i = 0; i < $3->children.size(); i++) delete $3->children[i]; } $3->children.clear(); delete $3; } ; module_instantiation: '!' module_instantiation { $$ = $2; if ($$) $$->tag_root = true; } | '#' module_instantiation { $$ = $2; if ($$) $$->tag_highlight = true; } | '%' module_instantiation { $$ = $2; if ($$) $$->tag_background = true; } | '*' module_instantiation { delete $2; $$ = NULL; } | single_module_instantiation ';' { $$ = $1; } | single_module_instantiation children_instantiation { $$ = $1; if ($$) { $$->children = $2->children; } else { for (size_t i = 0; i < $2->children.size(); i++) delete $2->children[i]; } $2->children.clear(); delete $2; } | ifelse_statement { $$ = $1; } ; module_instantiation_list: /* empty */ { $$ = new ModuleInstantiation(); } | module_instantiation_list module_instantiation { $$ = $1; if ($$) { if ($2) $$->children.push_back($2); } else { delete $2; } } ; single_module_instantiation: TOK_ID '(' arguments_call ')' { $$ = new ModuleInstantiation($1); $$->argnames = $3->argnames; $$->argexpr = $3->argexpr; free($1); delete $3; } expr: TOK_TRUE { $$ = new Expression(Value(true)); } | TOK_FALSE { $$ = new Expression(Value(false)); } | TOK_UNDEF { $$ = new Expression(Value::undefined); } | TOK_ID { $$ = new Expression(); $$->type = "L"; $$->var_name = $1; free($1); } | expr '.' TOK_ID { $$ = new Expression(); $$->type = "N"; $$->children.push_back($1); $$->var_name = $3; free($3); } | TOK_STRING { $$ = new Expression(Value(std::string($1))); free($1); } | TOK_NUMBER { $$ = new Expression(Value($1)); } | '[' expr ':' expr ']' { Expression *e_one = new Expression(Value(1.0)); $$ = new Expression(); $$->type = "R"; $$->children.push_back($2); $$->children.push_back(e_one); $$->children.push_back($4); } | '[' expr ':' expr ':' expr ']' { $$ = new Expression(); $$->type = "R"; $$->children.push_back($2); $$->children.push_back($4); $$->children.push_back($6); } | '[' optional_commas ']' { $$ = new Expression(Value(Value::VectorType())); } | '[' vector_expr optional_commas ']' { $$ = $2; } | expr '*' expr { $$ = new Expression(); $$->type = "*"; $$->children.push_back($1); $$->children.push_back($3); } | expr '/' expr { $$ = new Expression(); $$->type = "/"; $$->children.push_back($1); $$->children.push_back($3); } | expr '%' expr { $$ = new Expression(); $$->type = "%"; $$->children.push_back($1); $$->children.push_back($3); } | expr '+' expr { $$ = new Expression(); $$->type = "+"; $$->children.push_back($1); $$->children.push_back($3); } | expr '-' expr { $$ = new Expression(); $$->type = "-"; $$->children.push_back($1); $$->children.push_back($3); } | expr '<' expr { $$ = new Expression(); $$->type = "<"; $$->children.push_back($1); $$->children.push_back($3); } | expr LE expr { $$ = new Expression(); $$->type = "<="; $$->children.push_back($1); $$->children.push_back($3); } | expr EQ expr { $$ = new Expression(); $$->type = "=="; $$->children.push_back($1); $$->children.push_back($3); } | expr NE expr { $$ = new Expression(); $$->type = "!="; $$->children.push_back($1); $$->children.push_back($3); } | expr GE expr { $$ = new Expression(); $$->type = ">="; $$->children.push_back($1); $$->children.push_back($3); } | expr '>' expr { $$ = new Expression(); $$->type = ">"; $$->children.push_back($1); $$->children.push_back($3); } | expr AND expr { $$ = new Expression(); $$->type = "&&"; $$->children.push_back($1); $$->children.push_back($3); } | expr OR expr { $$ = new Expression(); $$->type = "||"; $$->children.push_back($1); $$->children.push_back($3); } | '+' expr { $$ = $2; } | '-' expr { $$ = new Expression(); $$->type = "I"; $$->children.push_back($2); } | '!' expr { $$ = new Expression(); $$->type = "!"; $$->children.push_back($2); } | '(' expr ')' { $$ = $2; } | expr '?' expr ':' expr { $$ = new Expression(); $$->type = "?:"; $$->children.push_back($1); $$->children.push_back($3); $$->children.push_back($5); } | expr '[' expr ']' { $$ = new Expression(); $$->type = "[]"; $$->children.push_back($1); $$->children.push_back($3); } | TOK_ID '(' arguments_call ')' { $$ = new Expression(); $$->type = "F"; $$->call_funcname = $1; $$->call_argnames = $3->argnames; $$->children = $3->argexpr; free($1); delete $3; } ; optional_commas: ',' optional_commas | ; vector_expr: expr { $$ = new Expression(); $$->type = 'V'; $$->children.push_back($1); } | vector_expr ',' optional_commas expr { $$ = $1; $$->children.push_back($4); } ; arguments_decl: /* empty */ { $$ = new ArgsContainer(); } | argument_decl { $$ = new ArgsContainer(); $$->argnames.push_back($1->argname); $$->argexpr.push_back($1->argexpr); delete $1; } | arguments_decl ',' optional_commas argument_decl { $$ = $1; $$->argnames.push_back($4->argname); $$->argexpr.push_back($4->argexpr); delete $4; } ; argument_decl: TOK_ID { $$ = new ArgContainer(); $$->argname = $1; $$->argexpr = NULL; free($1); } | TOK_ID '=' expr { $$ = new ArgContainer(); $$->argname = $1; $$->argexpr = $3; free($1); } ; arguments_call: /* empty */ { $$ = new ArgsContainer(); } | argument_call { $$ = new ArgsContainer(); $$->argnames.push_back($1->argname); $$->argexpr.push_back($1->argexpr); delete $1; } | arguments_call ',' optional_commas argument_call { $$ = $1; $$->argnames.push_back($4->argname); $$->argexpr.push_back($4->argexpr); delete $4; } ; argument_call: expr { $$ = new ArgContainer(); $$->argexpr = $1; } | TOK_ID '=' expr { $$ = new ArgContainer(); $$->argname = $1; $$->argexpr = $3; free($1); } ; %% int parserlex(void) { return lexerlex(); } void yyerror (char const *s) { // FIXME: We leak memory on parser errors... PRINTB("Parser error in line %d: %s\n", lexerget_lineno() % s); currmodule = NULL; } extern void lexerdestroy(); extern FILE *lexerin; extern const char *parser_input_buffer; const char *parser_input_buffer; std::string parser_source_path; Module *parse(const char *text, const char *path, int debug) { lexerin = NULL; parser_error_pos = -1; parser_input_buffer = text; parser_source_path = std::string(path); module_stack.clear(); Module *rootmodule = currmodule = new Module(); // PRINTB_NOCACHE("New module: %s %p", "root" % rootmodule); parserdebug = debug; int parserretval = parserparse(); lexerdestroy(); lexerlex_destroy(); if (parserretval != 0) return NULL; parser_error_pos = -1; return rootmodule; } openscad-2013.01+dfsg.orig/src/version_check.h0000644000175000017500000000620712076022156020520 0ustar chrysnchrysn// version_check.h by don bright 2012. Copyright assigned to Marius Kintel and // Clifford Wolf 2012. Released under the GPL 2, or later, as described in // the file named 'COPYING' in OpenSCAD's project root. /* This file will check versions of libraries at compile time. If they are too old, the user will be warned. If the user wishes to force compilation, they can run qmake CONFIG+=skip-version-check Otherwise they will be guided to README.md and an -build-dependencies script. The extensive #else #endif is to ensure only a single error is printed at a time, to avoid confusion. */ #ifndef OPENSCAD_SKIP_VERSION_CHECK #include // set minimum numbers here. #define GMPMAJOR 5 #define GMPMINOR 0 #define GMPPATCH 0 #define SYS_GMP_VER (__GNU_MP_VERSION * 10000 + __GNU_MP_VERSION_MINOR * 100 + __GNU_MP_VERSION_PATCHLEVEL * 1) #if SYS_GMP_VER < GMPMAJOR * 10000 + GMPMINOR * 100 + GMPPATCH * 1 #error GNU GMP library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #include #if MPFR_VERSION < MPFR_VERSION_NUM( 3,0,0 ) #error GNU MPFR library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #include #if not EIGEN_VERSION_AT_LEAST( 2,0,13 ) #error eigen2 library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #include // boost 1.3.5 = 103500 #if BOOST_VERSION < 103500 #error boost library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #ifdef ENABLE_CGAL #include #if CGAL_VERSION_NR < 1030601000 #error CGAL library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #if CGAL_VERSION_NR < 1040021000 #warning "=======================" #warning "." #warning "." #warning "." #warning "." #warning CGAL library version is old, risking buggy behavior. Please see README.md. Continuing anyway. #warning "." #warning "." #warning "." #warning "." #warning "=======================" #ifdef __clang__ #error For Clang to work, CGAL must be >= 4.0.2 #endif #endif // CGAL_VERSION_NR < 10400010000 #endif //ENABLE_CGAL #ifdef ENABLE_OPENCSG #include // kludge - GLEW doesnt have compiler-accessible version numbering #ifndef GLEW_ARB_occlusion_query2 #error GLEW library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #include // 1.3.2 -> 0x0132 #if OPENCSG_VERSION < 0x0132 #error OPENCSG library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #else #endif // ENABLE_OPENCSG #include #if QT_VERSION < 0x040400 #error QT library missing or version too old. See README.md. To force compile, run qmake CONFIG+=skip-version-check #endif // QT #ifdef ENABLE_OPENCSG #endif // OpenCSG #endif // GLEW #endif // ENABLE_OPENCSG #ifdef ENABLE_CGAL #endif // CGAL error #endif // ENABLE_CGAL #endif // Boost #endif // Eigen2 #endif // MPFR #endif // GMP #endif // OPENSCAD_SKIP_VERSION_CHECK openscad-2013.01+dfsg.orig/src/value.cc0000644000175000017500000003676412014547135017164 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "value.h" #include #include #include #include #include #include #include #include #include std::ostream &operator<<(std::ostream &stream, const Filename &filename) { stream << QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString()); return stream; } // FIXME: This could probably be done more elegantly using boost::regex std::ostream &operator<<(std::ostream &stream, const QuotedString &s) { stream << '"'; BOOST_FOREACH(char c, s) { switch (c) { case '\t': stream << "\\t"; break; case '\n': stream << "\\n"; break; case '"': case '\\': stream << '\\'; stream << c; break; default: stream << c; } } stream << '"'; return stream; } Value Value::undefined; Value::Value() : value(boost::blank()) { // std::cout << "creating undef\n"; } Value::Value(bool v) : value(v) { // std::cout << "creating bool\n"; } Value::Value(int v) : value(double(v)) { // std::cout << "creating int\n"; } Value::Value(double v) : value(v) { // std::cout << "creating double " << v << "\n"; } Value::Value(const std::string &v) : value(v) { // std::cout << "creating string\n"; } Value::Value(const char *v) : value(std::string(v)) { // std::cout << "creating string from char *\n"; } Value::Value(char v) : value(std::string(1, v)) { // std::cout << "creating string from char\n"; } Value::Value(const VectorType &v) : value(v) { // std::cout << "creating vector\n"; } Value::Value(const RangeType &v) : value(v) { // std::cout << "creating range\n"; } Value::Value(double begin, double step, double end) : value(RangeType(begin, step, end)) { // std::cout << "creating range from numbers\n"; } Value::ValueType Value::type() const { return static_cast(this->value.which()); } bool Value::isUndefined() const { return this->type() == UNDEFINED; } bool Value::toBool() const { switch (this->type()) { case BOOL: return boost::get(this->value); break; case NUMBER: return boost::get(this->value)!= 0; break; case STRING: return boost::get(this->value).size() > 0; break; case VECTOR: return boost::get(this->value).size() > 0; break; case RANGE: return true; break; default: return false; break; } } double Value::toDouble() const { double d = 0; getDouble(d); return d; } bool Value::getDouble(double &v) const { const double *d = boost::get(&this->value); if (d) { v = *d; return true; } return false; } class tostring_visitor : public boost::static_visitor { public: template std::string operator()(const T &op1) const { // std::cout << "[generic tostring_visitor]\n"; return boost::lexical_cast(op1); } std::string operator()(const double &op1) const { #ifdef OPENSCAD_TESTING // Quick and dirty hack to work around floating point rounding differences // across platforms for testing purposes. if (op1 != op1) { // Fix for avoiding nan vs. -nan across platforms return "nan"; } std::stringstream tmp; tmp.precision(12); tmp.setf(std::ios_base::fixed); tmp << op1; std::string tmpstr = tmp.str(); size_t endpos = tmpstr.find_last_not_of('0'); if (endpos >= 0 && tmpstr[endpos] == '.') endpos--; tmpstr = tmpstr.substr(0, endpos+1); size_t dotpos = tmpstr.find('.'); if (dotpos != std::string::npos) { if (tmpstr.size() - dotpos > 12) tmpstr.erase(dotpos + 12); } return tmpstr; #else // attempt to emulate Qt's QString.sprintf("%g"); from old OpenSCAD. // see https://github.com/openscad/openscad/issues/158 std::stringstream tmp; tmp.unsetf(std::ios::floatfield); tmp << op1; return tmp.str(); #endif } std::string operator()(const boost::blank &) const { return "undef"; } std::string operator()(const bool &v) const { return v ? "true" : "false"; } std::string operator()(const Value::VectorType &v) const { std::stringstream stream; stream << '['; for (size_t i = 0; i < v.size(); i++) { if (i > 0) stream << ", "; stream << v[i]; } stream << ']'; return stream.str(); } std::string operator()(const Value::RangeType &v) const { return (boost::format("[%1% : %2% : %3%]") % v.begin % v.step % v.end).str(); } }; std::string Value::toString() const { return boost::apply_visitor(tostring_visitor(), this->value); } const Value::VectorType &Value::toVector() const { static VectorType empty; const VectorType *v = boost::get(&this->value); if (v) return *v; else return empty; } bool Value::getVec2(double &x, double &y) const { if (this->type() != VECTOR) return false; const VectorType &v = toVector(); if (v.size() != 2) return false; return (v[0].getDouble(x) && v[1].getDouble(y)); } bool Value::getVec3(double &x, double &y, double &z, double defaultval) const { if (this->type() != VECTOR) return false; const VectorType &v = toVector(); if (v.size() == 2) { getVec2(x, y); z = defaultval; return true; } else { if (v.size() != 3) return false; } return (v[0].getDouble(x) && v[1].getDouble(y) && v[2].getDouble(z)); } Value::RangeType Value::toRange() const { const RangeType *val = boost::get(&this->value); if (val) { return *val; } else return RangeType(0,0,0); } Value &Value::operator=(const Value &v) { if (this != &v) { this->value = v.value; } return *this; } Value Value::operator!() const { return Value(!this->toBool()); } class equals_visitor : public boost::static_visitor { public: template bool operator()(const T &, const U &) const { return false; } template bool operator()(const T &op1, const T &op2) const { return op1 == op2; } }; bool Value::operator==(const Value &v) const { return boost::apply_visitor(equals_visitor(), this->value, v.value); } bool Value::operator!=(const Value &v) const { return !(*this == v); } bool Value::operator&&(const Value &v) const { return this->toBool() && v.toBool(); } bool Value::operator||(const Value &v) const { return this->toBool() || v.toBool(); } class less_visitor : public boost::static_visitor { public: template bool operator()(const T &, const U &) const { return false; } bool operator()(const double &op1, const double &op2) const { return op1 < op2; } bool operator()(const std::string &op1, const std::string &op2) const { return op1 < op2; } }; class greater_visitor : public boost::static_visitor { public: template bool operator()(const T &, const U &) const { return false; } bool operator()(const double &op1, const double &op2) const { return op1 > op2; } bool operator()(const std::string &op1, const std::string &op2) const { return op1 > op2; } }; bool Value::operator<(const Value &v) const { return boost::apply_visitor(less_visitor(), this->value, v.value); } bool Value::operator>=(const Value &v) const { return !(*this < v); } bool Value::operator>(const Value &v) const { return boost::apply_visitor(greater_visitor(), this->value, v.value); } bool Value::operator<=(const Value &v) const { return !(*this > v); } class plus_visitor : public boost::static_visitor { public: template Value operator()(const T &, const U &) const { return Value::undefined; } Value operator()(const double &op1, const double &op2) const { return Value(op1 + op2); } Value operator()(const Value::VectorType &op1, const Value::VectorType &op2) const { Value::VectorType sum; for (size_t i = 0; i < op1.size() && i < op2.size(); i++) { sum.push_back(op1[i] + op2[i]); } return Value(sum); } }; Value Value::operator+(const Value &v) const { return boost::apply_visitor(plus_visitor(), this->value, v.value); } class minus_visitor : public boost::static_visitor { public: template Value operator()(const T &, const U &) const { return Value::undefined; } Value operator()(const double &op1, const double &op2) const { return Value(op1 - op2); } Value operator()(const Value::VectorType &op1, const Value::VectorType &op2) const { Value::VectorType sum; for (size_t i = 0; i < op1.size() && i < op2.size(); i++) { sum.push_back(op1[i] - op2[i]); } return Value(sum); } }; Value Value::operator-(const Value &v) const { return boost::apply_visitor(minus_visitor(), this->value, v.value); } Value Value::multvecnum(const Value &vecval, const Value &numval) { // Vector * Number VectorType dstv; BOOST_FOREACH(const Value &val, vecval.toVector()) { dstv.push_back(val * numval); } return Value(dstv); } Value Value::multmatvec(const Value &matrixval, const Value &vectorval) { const VectorType &matrixvec = matrixval.toVector(); const VectorType &vectorvec = vectorval.toVector(); // Matrix * Vector VectorType dstv; for (size_t i=0;itype() == NUMBER && v.type() == NUMBER) { return Value(this->toDouble() * v.toDouble()); } else if (this->type() == VECTOR && v.type() == NUMBER) { return multvecnum(*this, v); } else if (this->type() == NUMBER && v.type() == VECTOR) { return multvecnum(v, *this); } else if (this->type() == VECTOR && v.type() == VECTOR) { const VectorType &vec1 = this->toVector(); const VectorType &vec2 = v.toVector(); if (vec1[0].type() == NUMBER && vec2[0].type() == NUMBER && vec1.size() == vec2.size()) { // Vector dot product. double r = 0.0; for (size_t i=0;itype() == NUMBER && v.type() == NUMBER) { return Value(this->toDouble() / v.toDouble()); } else if (this->type() == VECTOR && v.type() == NUMBER) { const VectorType &vec = this->toVector(); VectorType dstv; BOOST_FOREACH(const Value &vecval, vec) { dstv.push_back(vecval / v); } return Value(dstv); } else if (this->type() == NUMBER && v.type() == VECTOR) { const VectorType &vec = v.toVector(); VectorType dstv; BOOST_FOREACH(const Value &vecval, vec) { dstv.push_back(*this / vecval); } return Value(dstv); } return Value::undefined; } Value Value::operator%(const Value &v) const { if (this->type() == NUMBER && v.type() == NUMBER) { return Value(fmod(boost::get(this->value), boost::get(v.value))); } return Value::undefined; } Value Value::operator-() const { if (this->type() == NUMBER) { return Value(-this->toDouble()); } else if (this->type() == VECTOR) { const VectorType &vec = this->toVector(); VectorType dstv; BOOST_FOREACH(const Value &vecval, vec) { dstv.push_back(-vecval); } return Value(dstv); } return Value::undefined; } /*! Append a value to this vector. This must be of valtype VECTOR. */ /* void Value::append(Value *val) { assert(this->type() == VECTOR); this->vec.push_back(val); } */ class bracket_visitor : public boost::static_visitor { public: Value operator()(const std::string &str, const double &idx) const { int i = int(idx); Value v; if (i >= 0 && i < str.size()) { v = Value(str[int(idx)]); // std::cout << "bracket_visitor: " << v << "\n"; } return v; } Value operator()(const Value::VectorType &vec, const double &idx) const { int i = int(idx); if (i >= 0 && i < vec.size()) return vec[int(idx)]; return Value::undefined; } Value operator()(const Value::RangeType &range, const double &idx) const { switch(int(idx)) { case 0: return Value(range.begin); case 1: return Value(range.step); case 2: return Value(range.end); } return Value::undefined; } template Value operator()(const T &, const U &) const { // std::cout << "generic bracket_visitor\n"; return Value::undefined; } }; Value Value::operator[](const Value &v) { return boost::apply_visitor(bracket_visitor(), this->value, v.value); } openscad-2013.01+dfsg.orig/src/colormap.h0000644000175000017500000001376511710057555017526 0ustar chrysnchrysnboost::unordered_map ColorModule::colormap = map_list_of ("aliceblue", Color4f(240, 248, 255)) ("antiquewhite", Color4f(250, 235, 215)) ("aqua", Color4f(0, 255, 255)) ("aquamarine", Color4f(127, 255, 212)) ("azure", Color4f(240, 255, 255)) ("beige", Color4f(245, 245, 220)) ("bisque", Color4f(255, 228, 196)) ("black", Color4f(0, 0, 0)) ("blanchedalmond", Color4f(255, 235, 205)) ("blue", Color4f(0, 0, 255)) ("blueviolet", Color4f(138, 43, 226)) ("brown", Color4f(165, 42, 42)) ("burlywood", Color4f(222, 184, 135)) ("cadetblue", Color4f(95, 158, 160)) ("chartreuse", Color4f(127, 255, 0)) ("chocolate", Color4f(210, 105, 30)) ("coral", Color4f(255, 127, 80)) ("cornflowerblue", Color4f(100, 149, 237)) ("cornsilk", Color4f(255, 248, 220)) ("crimson", Color4f(220, 20, 60)) ("cyan", Color4f(0, 255, 255)) ("darkblue", Color4f(0, 0, 139)) ("darkcyan", Color4f(0, 139, 139)) ("darkgoldenrod", Color4f(184, 134, 11)) ("darkgray", Color4f(169, 169, 169)) ("darkgreen", Color4f(0, 100, 0)) ("darkgrey", Color4f(169, 169, 169)) ("darkkhaki", Color4f(189, 183, 107)) ("darkmagenta", Color4f(139, 0, 139)) ("darkolivegreen", Color4f(85, 107, 47)) ("darkorange", Color4f(255, 140, 0)) ("darkorchid", Color4f(153, 50, 204)) ("darkred", Color4f(139, 0, 0)) ("darksalmon", Color4f(233, 150, 122)) ("darkseagreen", Color4f(143, 188, 143)) ("darkslateblue", Color4f(72, 61, 139)) ("darkslategray", Color4f(47, 79, 79)) ("darkslategrey", Color4f(47, 79, 79)) ("darkturquoise", Color4f(0, 206, 209)) ("darkviolet", Color4f(148, 0, 211)) ("deeppink", Color4f(255, 20, 147)) ("deepskyblue", Color4f(0, 191, 255)) ("dimgray", Color4f(105, 105, 105)) ("dimgrey", Color4f(105, 105, 105)) ("dodgerblue", Color4f(30, 144, 255)) ("firebrick", Color4f(178, 34, 34)) ("floralwhite", Color4f(255, 250, 240)) ("forestgreen", Color4f(34, 139, 34)) ("fuchsia", Color4f(255, 0, 255)) ("gainsboro", Color4f(220, 220, 220)) ("ghostwhite", Color4f(248, 248, 255)) ("gold", Color4f(255, 215, 0)) ("goldenrod", Color4f(218, 165, 32)) ("gray", Color4f(128, 128, 128)) ("green", Color4f(0, 128, 0)) ("greenyellow", Color4f(173, 255, 47)) ("grey", Color4f(128, 128, 128)) ("honeydew", Color4f(240, 255, 240)) ("hotpink", Color4f(255, 105, 180)) ("indianred", Color4f(205, 92, 92)) ("indigo", Color4f(75, 0, 130)) ("ivory", Color4f(255, 255, 240)) ("khaki", Color4f(240, 230, 140)) ("lavender", Color4f(230, 230, 250)) ("lavenderblush", Color4f(255, 240, 245)) ("lawngreen", Color4f(124, 252, 0)) ("lemonchiffon", Color4f(255, 250, 205)) ("lightblue", Color4f(173, 216, 230)) ("lightcoral", Color4f(240, 128, 128)) ("lightcyan", Color4f(224, 255, 255)) ("lightgoldenrodyellow", Color4f(250, 250, 210)) ("lightgray", Color4f(211, 211, 211)) ("lightgreen", Color4f(144, 238, 144)) ("lightgrey", Color4f(211, 211, 211)) ("lightpink", Color4f(255, 182, 193)) ("lightsalmon", Color4f(255, 160, 122)) ("lightseagreen", Color4f(32, 178, 170)) ("lightskyblue", Color4f(135, 206, 250)) ("lightslategray", Color4f(119, 136, 153)) ("lightslategrey", Color4f(119, 136, 153)) ("lightsteelblue", Color4f(176, 196, 222)) ("lightyellow", Color4f(255, 255, 224)) ("lime", Color4f(0, 255, 0)) ("limegreen", Color4f(50, 205, 50)) ("linen", Color4f(250, 240, 230)) ("magenta", Color4f(255, 0, 255)) ("maroon", Color4f(128, 0, 0)) ("mediumaquamarine", Color4f(102, 205, 170)) ("mediumblue", Color4f(0, 0, 205)) ("mediumorchid", Color4f(186, 85, 211)) ("mediumpurple", Color4f(147, 112, 219)) ("mediumseagreen", Color4f(60, 179, 113)) ("mediumslateblue", Color4f(123, 104, 238)) ("mediumspringgreen", Color4f(0, 250, 154)) ("mediumturquoise", Color4f(72, 209, 204)) ("mediumvioletred", Color4f(199, 21, 133)) ("midnightblue", Color4f(25, 25, 112)) ("mintcream", Color4f(245, 255, 250)) ("mistyrose", Color4f(255, 228, 225)) ("moccasin", Color4f(255, 228, 181)) ("navajowhite", Color4f(255, 222, 173)) ("navy", Color4f(0, 0, 128)) ("oldlace", Color4f(253, 245, 230)) ("olive", Color4f(128, 128, 0)) ("olivedrab", Color4f(107, 142, 35)) ("orange", Color4f(255, 165, 0)) ("orangered", Color4f(255, 69, 0)) ("orchid", Color4f(218, 112, 214)) ("palegoldenrod", Color4f(238, 232, 170)) ("palegreen", Color4f(152, 251, 152)) ("paleturquoise", Color4f(175, 238, 238)) ("palevioletred", Color4f(219, 112, 147)) ("papayawhip", Color4f(255, 239, 213)) ("peachpuff", Color4f(255, 218, 185)) ("peru", Color4f(205, 133, 63)) ("pink", Color4f(255, 192, 203)) ("plum", Color4f(221, 160, 221)) ("powderblue", Color4f(176, 224, 230)) ("purple", Color4f(128, 0, 128)) ("red", Color4f(255, 0, 0)) ("rosybrown", Color4f(188, 143, 143)) ("royalblue", Color4f(65, 105, 225)) ("saddlebrown", Color4f(139, 69, 19)) ("salmon", Color4f(250, 128, 114)) ("sandybrown", Color4f(244, 164, 96)) ("seagreen", Color4f(46, 139, 87)) ("seashell", Color4f(255, 245, 238)) ("sienna", Color4f(160, 82, 45)) ("silver", Color4f(192, 192, 192)) ("skyblue", Color4f(135, 206, 235)) ("slateblue", Color4f(106, 90, 205)) ("slategray", Color4f(112, 128, 144)) ("slategrey", Color4f(112, 128, 144)) ("snow", Color4f(255, 250, 250)) ("springgreen", Color4f(0, 255, 127)) ("steelblue", Color4f(70, 130, 180)) ("tan", Color4f(210, 180, 140)) ("teal", Color4f(0, 128, 128)) ("thistle", Color4f(216, 191, 216)) ("tomato", Color4f(255, 99, 71)) ("transparent", Color4f(0, 0, 0, 0)) ("turquoise", Color4f(64, 224, 208)) ("violet", Color4f(238, 130, 238)) ("wheat", Color4f(245, 222, 179)) ("white", Color4f(255, 255, 255)) ("whitesmoke", Color4f(245, 245, 245)) ("yellow", Color4f(255, 255, 0)) ("yellowgreen", Color4f(154, 205, 50)); openscad-2013.01+dfsg.orig/src/node.h0000644000175000017500000000541511676153366016640 0ustar chrysnchrysn#ifndef NODE_H_ #define NODE_H_ #include #include #include "traverser.h" extern int progress_report_count; extern void (*progress_report_f)(const class AbstractNode*, void*, int); extern void *progress_report_vp; void progress_report_prep(AbstractNode *root, void (*f)(const class AbstractNode *node, void *vp, int mark), void *vp); void progress_report_fin(); /*! The node tree is the result of evaluation of a module instantiation tree. Both the module tree and the node tree are regenerated from scratch for each compile. */ class AbstractNode { // FIXME: the idx_counter/idx is mostly (only?) for debugging. // We can hash on pointer value or smth. else. // -> remove and // use smth. else to display node identifier in CSG tree output? static size_t idx_counter; // Node instantiation index public: AbstractNode(const class ModuleInstantiation *mi); virtual ~AbstractNode(); virtual Response accept(class State &state, class Visitor &visitor) const; virtual std::string toString() const; /*! The 'OpenSCAD name' of this node, defaults to classname, but can be overloaded to provide specialization for e.g. CSG nodes, primitive nodes etc. Used for human-readable output. */ virtual std::string name() const; /*! Should return a PolySet of the given geometry. Returns NULL if smth. goes wrong. This is only called by PolySetEvaluator, to make sure polysets are inserted into the cache*/ virtual class PolySet *evaluate_polyset(class PolySetEvaluator *) const { return NULL; } const std::vector &getChildren() const { return this->children; } size_t index() const { return this->idx; } static void resetIndexCounter() { idx_counter = 1; } // FIXME: Make protected std::vector children; const ModuleInstantiation *modinst; // progress_mark is a running number used for progress indication // FIXME: Make all progress handling external, put it in the traverser class? int progress_mark; void progress_prepare(); void progress_report() const; int idx; // Node index (unique per tree) }; class AbstractIntersectionNode : public AbstractNode { public: AbstractIntersectionNode(const ModuleInstantiation *mi) : AbstractNode(mi) { }; virtual ~AbstractIntersectionNode() { }; virtual Response accept(class State &state, class Visitor &visitor) const; virtual std::string toString() const; virtual std::string name() const; }; class AbstractPolyNode : public AbstractNode { public: AbstractPolyNode(const ModuleInstantiation *mi) : AbstractNode(mi) { }; virtual ~AbstractPolyNode() { }; virtual Response accept(class State &state, class Visitor &visitor) const; enum render_mode_e { RENDER_CGAL, RENDER_OPENCSG }; }; std::ostream &operator<<(std::ostream &stream, const AbstractNode &node); #endif openscad-2013.01+dfsg.orig/src/importnode.h0000644000175000017500000000133611664172102020053 0ustar chrysnchrysn#ifndef IMPORTNODE_H_ #define IMPORTNODE_H_ #include "node.h" #include "visitor.h" #include "value.h" enum import_type_e { TYPE_UNKNOWN, TYPE_STL, TYPE_OFF, TYPE_DXF }; class ImportNode : public AbstractPolyNode { public: ImportNode(const ModuleInstantiation *mi, import_type_e type) : AbstractPolyNode(mi), type(type) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const; import_type_e type; Filename filename; std::string layername; int convexity; double fn, fs, fa; double origin_x, origin_y, scale; virtual PolySet *evaluate_polyset(class PolySetEvaluator *) const; }; #endif openscad-2013.01+dfsg.orig/src/handle_dep.h0000644000175000017500000000034511773712623017766 0ustar chrysnchrysn#ifndef HANDLE_DEP_H_ #define HANDLE_DEP_H_ #include extern const char *make_command; void handle_dep(const std::string &filename); bool write_deps(const std::string &filename, const std::string &output_file); #endif openscad-2013.01+dfsg.orig/src/ModuleCache.h0000644000175000017500000000075511745117544020061 0ustar chrysnchrysn#include #include class ModuleCache { public: static ModuleCache *instance() { if (!inst) inst = new ModuleCache; return inst; } class Module *evaluate(const std::string &filename); size_t size() { return this->entries.size(); } void clear(); private: ModuleCache() {} ~ModuleCache() {} static ModuleCache *inst; struct cache_entry { class Module *module; std::string cache_id; }; boost::unordered_map entries; }; openscad-2013.01+dfsg.orig/src/polyset.h0000644000175000017500000000231212076022156017366 0ustar chrysnchrysn#ifndef POLYSET_H_ #define POLYSET_H_ #include "system-gl.h" #include "grid.h" #include "linalg.h" #include #include class PolySet { public: typedef std::vector Polygon; std::vector polygons; std::vector borders; Grid3d grid; bool is2d; int convexity; PolySet(); ~PolySet(); bool empty() const { return polygons.size() == 0; } void append_poly(); void append_vertex(double x, double y, double z = 0.0); void insert_vertex(double x, double y, double z = 0.0); size_t memsize() const; BoundingBox getBoundingBox() const; #define CSGMODE_DIFFERENCE_FLAG 0x10 enum csgmode_e { CSGMODE_NONE = 0x00, CSGMODE_NORMAL = 0x01, CSGMODE_DIFFERENCE = CSGMODE_NORMAL | CSGMODE_DIFFERENCE_FLAG, CSGMODE_BACKGROUND = 0x02, CSGMODE_BACKGROUND_DIFFERENCE = CSGMODE_BACKGROUND | CSGMODE_DIFFERENCE_FLAG, CSGMODE_HIGHLIGHT = 0x03, CSGMODE_HIGHLIGHT_DIFFERENCE = CSGMODE_HIGHLIGHT | CSGMODE_DIFFERENCE_FLAG }; void render_surface(csgmode_e csgmode, const Transform3d &m, GLint *shaderinfo = NULL) const; void render_edges(csgmode_e csgmode) const; std::string dump() const; }; #endif openscad-2013.01+dfsg.orig/src/openscad.h0000644000175000017500000000305712000421643017461 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef OPENSCAD_H #define OPENSCAD_H extern class Module *parse(const char *text, const char *path, int debug); extern int get_fragments_from_r(double r, double fn, double fs, double fa); #include extern std::string commandline_commands; // The CWD when application started. We shouldn't change CWD, but until we stop // doing this, use currentdir to get the original CWD. extern std::string currentdir; #endif openscad-2013.01+dfsg.orig/src/function.h0000644000175000017500000000247111773712623017532 0ustar chrysnchrysn#ifndef FUNCTION_H_ #define FUNCTION_H_ #include "value.h" #include #include class AbstractFunction { public: virtual ~AbstractFunction(); virtual Value evaluate(const class Context *ctx, const std::vector &call_argnames, const std::vector &call_argvalues) const; virtual std::string dump(const std::string &indent, const std::string &name) const; }; class BuiltinFunction : public AbstractFunction { public: typedef Value (*eval_func_t)(const Context *ctx, const std::vector &argnames, const std::vector &args); eval_func_t eval_func; BuiltinFunction(eval_func_t f) : eval_func(f) { } virtual ~BuiltinFunction(); virtual Value evaluate(const Context *ctx, const std::vector &call_argnames, const std::vector &call_argvalues) const; virtual std::string dump(const std::string &indent, const std::string &name) const; }; class Function : public AbstractFunction { public: std::vector argnames; std::vector argexpr; Expression *expr; Function() { } virtual ~Function(); virtual Value evaluate(const Context *ctx, const std::vector &call_argnames, const std::vector &call_argvalues) const; virtual std::string dump(const std::string &indent, const std::string &name) const; }; #endif openscad-2013.01+dfsg.orig/src/Preferences.h0000644000175000017500000000254711710057222020136 0ustar chrysnchrysn#ifndef PREFERENCES_H_ #define PREFERENCES_H_ #include #include #include "ui_Preferences.h" #include "rendersettings.h" #include "linalg.h" #include class Preferences : public QMainWindow, public Ui::Preferences { Q_OBJECT; public: ~Preferences(); static Preferences *inst() { if (!instance) instance = new Preferences(); return instance; } QVariant getValue(const QString &key) const; void apply() const; public slots: void actionTriggered(class QAction *); void on_colorSchemeChooser_itemSelectionChanged(); void on_fontChooser_activated(const QString &); void on_fontSize_editTextChanged(const QString &); void on_openCSGWarningBox_toggled(bool); void on_enableOpenCSGBox_toggled(bool); void on_cgalCacheSizeEdit_textChanged(const QString &); void on_polysetCacheSizeEdit_textChanged(const QString &); void on_opencsgLimitEdit_textChanged(const QString &); void on_forceGoldfeatherBox_toggled(bool); signals: void requestRedraw() const; void fontChanged(const QString &family, uint size) const; void openCSGSettingsChanged() const; private: Preferences(QWidget *parent = NULL); void keyPressEvent(QKeyEvent *e); void updateGUI(); void removeDefaultSettings(); QSettings::SettingsMap defaultmap; QHash > colorschemes; static Preferences *instance; }; #endif openscad-2013.01+dfsg.orig/src/cgaladvnode.h0000644000175000017500000000130411640436732020143 0ustar chrysnchrysn#ifndef CGALADVNODE_H_ #define CGALADVNODE_H_ #include "node.h" #include "visitor.h" #include "value.h" enum cgaladv_type_e { MINKOWSKI, GLIDE, SUBDIV, HULL }; class CgaladvNode : public AbstractNode { public: CgaladvNode(const ModuleInstantiation *mi, cgaladv_type_e type) : AbstractNode(mi), type(type) { convexity = 1; } virtual ~CgaladvNode() { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const; PolySet *evaluate_polyset(class PolySetEvaluator *ps) const; Value path; std::string subdiv_type; int convexity, level; cgaladv_type_e type; }; #endif openscad-2013.01+dfsg.orig/src/Preferences.cc0000644000175000017500000002575212005335315020277 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "Preferences.h" #include #include #include #include "PolySetCache.h" #include "CGALCache.h" Preferences *Preferences::instance = NULL; Preferences::Preferences(QWidget *parent) : QMainWindow(parent) { setupUi(this); // Editor pane // Setup default font (Try to use a nice monospace font) QString fontfamily; #ifdef Q_WS_X11 fontfamily = "Mono"; #elif defined (Q_WS_WIN) fontfamily = "Console"; #elif defined (Q_WS_MAC) fontfamily = "Monaco"; #endif QFont font; font.setStyleHint(QFont::TypeWriter); font.setFamily(fontfamily); // this runs Qt's font matching algorithm QString found_family(QFontInfo(font).family()); this->defaultmap["editor/fontfamily"] = found_family; this->defaultmap["editor/fontsize"] = 12; uint savedsize = getValue("editor/fontsize").toUInt(); QFontDatabase db; foreach(uint size, db.standardSizes()) { this->fontSize->addItem(QString::number(size)); if (size == savedsize) { this->fontSize->setCurrentIndex(this->fontSize->count()-1); } } connect(this->fontSize, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(on_fontSize_editTextChanged(const QString &))); // reset GUI fontsize if fontSize->addItem emitted signals that changed it. this->fontSize->setEditText( QString("%1").arg( savedsize ) ); // Setup default settings this->defaultmap["3dview/colorscheme"] = this->colorSchemeChooser->currentItem()->text(); this->defaultmap["advanced/opencsg_show_warning"] = true; this->defaultmap["advanced/enable_opencsg_opengl1x"] = true; this->defaultmap["advanced/polysetCacheSize"] = uint(PolySetCache::instance()->maxSize()); this->defaultmap["advanced/cgalCacheSize"] = uint(CGALCache::instance()->maxSize()); this->defaultmap["advanced/openCSGLimit"] = 2000; this->defaultmap["advanced/forceGoldfeather"] = false; // Toolbar QActionGroup *group = new QActionGroup(this); group->addAction(prefsAction3DView); group->addAction(prefsActionEditor); group->addAction(prefsActionAdvanced); connect(group, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered(QAction*))); prefsAction3DView->setChecked(true); this->actionTriggered(this->prefsAction3DView); // 3D View pane this->colorschemes["Cornfield"][RenderSettings::BACKGROUND_COLOR] = Color4f(0xff, 0xff, 0xe5); this->colorschemes["Cornfield"][RenderSettings::OPENCSG_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); this->colorschemes["Cornfield"][RenderSettings::OPENCSG_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); this->colorschemes["Cornfield"][RenderSettings::CGAL_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); this->colorschemes["Cornfield"][RenderSettings::CGAL_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); this->colorschemes["Cornfield"][RenderSettings::CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); this->colorschemes["Cornfield"][RenderSettings::CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Cornfield"][RenderSettings::CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Cornfield"][RenderSettings::CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Cornfield"][RenderSettings::CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); this->colorschemes["Metallic"][RenderSettings::BACKGROUND_COLOR] = Color4f(0xaa, 0xaa, 0xff); this->colorschemes["Metallic"][RenderSettings::OPENCSG_FACE_FRONT_COLOR] = Color4f(0xdd, 0xdd, 0xff); this->colorschemes["Metallic"][RenderSettings::OPENCSG_FACE_BACK_COLOR] = Color4f(0xdd, 0x22, 0xdd); this->colorschemes["Metallic"][RenderSettings::CGAL_FACE_FRONT_COLOR] = Color4f(0xdd, 0xdd, 0xff); this->colorschemes["Metallic"][RenderSettings::CGAL_FACE_BACK_COLOR] = Color4f(0xdd, 0x22, 0xdd); this->colorschemes["Metallic"][RenderSettings::CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); this->colorschemes["Metallic"][RenderSettings::CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Metallic"][RenderSettings::CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Metallic"][RenderSettings::CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Metallic"][RenderSettings::CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); this->colorschemes["Sunset"][RenderSettings::BACKGROUND_COLOR] = Color4f(0xaa, 0x44, 0x44); this->colorschemes["Sunset"][RenderSettings::OPENCSG_FACE_FRONT_COLOR] = Color4f(0xff, 0xaa, 0xaa); this->colorschemes["Sunset"][RenderSettings::OPENCSG_FACE_BACK_COLOR] = Color4f(0x88, 0x22, 0x33); this->colorschemes["Sunset"][RenderSettings::CGAL_FACE_FRONT_COLOR] = Color4f(0xff, 0xaa, 0xaa); this->colorschemes["Sunset"][RenderSettings::CGAL_FACE_BACK_COLOR] = Color4f(0x88, 0x22, 0x33); this->colorschemes["Sunset"][RenderSettings::CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); this->colorschemes["Sunset"][RenderSettings::CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Sunset"][RenderSettings::CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Sunset"][RenderSettings::CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); this->colorschemes["Sunset"][RenderSettings::CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); // Advanced pane QValidator *validator = new QIntValidator(this); this->cgalCacheSizeEdit->setValidator(validator); this->polysetCacheSizeEdit->setValidator(validator); this->opencsgLimitEdit->setValidator(validator); updateGUI(); RenderSettings::inst()->setColors(this->colorschemes[getValue("3dview/colorscheme").toString()]); } Preferences::~Preferences() { removeDefaultSettings(); } void Preferences::actionTriggered(QAction *action) { if (action == this->prefsAction3DView) { this->stackedWidget->setCurrentWidget(this->page3DView); } else if (action == this->prefsActionEditor) { this->stackedWidget->setCurrentWidget(this->pageEditor); } else if (action == this->prefsActionAdvanced) { this->stackedWidget->setCurrentWidget(this->pageAdvanced); } } void Preferences::on_colorSchemeChooser_itemSelectionChanged() { QString scheme = this->colorSchemeChooser->currentItem()->text(); QSettings settings; settings.setValue("3dview/colorscheme", scheme); RenderSettings::inst()->setColors(this->colorschemes[scheme]); emit requestRedraw(); } void Preferences::on_fontChooser_activated(const QString &family) { QSettings settings; settings.setValue("editor/fontfamily", family); emit fontChanged(family, getValue("editor/fontsize").toUInt()); } void Preferences::on_fontSize_editTextChanged(const QString &size) { uint intsize = size.toUInt(); QSettings settings; settings.setValue("editor/fontsize", intsize); emit fontChanged(getValue("editor/fontfamily").toString(), intsize); } void Preferences::on_openCSGWarningBox_toggled(bool state) { QSettings settings; settings.setValue("advanced/opencsg_show_warning",state); } void Preferences::on_enableOpenCSGBox_toggled(bool state) { QSettings settings; settings.setValue("advanced/enable_opencsg_opengl1x", state); } void Preferences::on_cgalCacheSizeEdit_textChanged(const QString &text) { QSettings settings; settings.setValue("advanced/cgalCacheSize", text); CGALCache::instance()->setMaxSize(text.toULong()); } void Preferences::on_polysetCacheSizeEdit_textChanged(const QString &text) { QSettings settings; settings.setValue("advanced/polysetCacheSize", text); PolySetCache::instance()->setMaxSize(text.toULong()); } void Preferences::on_opencsgLimitEdit_textChanged(const QString &text) { QSettings settings; settings.setValue("advanced/openCSGLimit", text); // FIXME: Set this globally? } void Preferences::on_forceGoldfeatherBox_toggled(bool state) { QSettings settings; settings.setValue("advanced/forceGoldfeather", state); emit openCSGSettingsChanged(); } void Preferences::keyPressEvent(QKeyEvent *e) { #ifdef Q_WS_MAC if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period) { close(); } else #endif if ((e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_W) || e->key() == Qt::Key_Escape) { close(); } } /*! Removes settings that are the same as the default settings to avoid overwriting future changes to default settings. */ void Preferences::removeDefaultSettings() { QSettings settings; for (QSettings::SettingsMap::const_iterator iter = this->defaultmap.begin(); iter != this->defaultmap.end(); iter++) { if (settings.value(iter.key()) == iter.value()) { settings.remove(iter.key()); } } } QVariant Preferences::getValue(const QString &key) const { QSettings settings; assert(settings.contains(key) || this->defaultmap.contains(key)); return settings.value(key, this->defaultmap[key]); } void Preferences::updateGUI() { QSettings settings; QList found = this->colorSchemeChooser->findItems(getValue("3dview/colorscheme").toString(), Qt::MatchExactly); if (!found.isEmpty()) this->colorSchemeChooser->setCurrentItem(found.first()); QString fontfamily = getValue("editor/fontfamily").toString(); int fidx = this->fontChooser->findText(fontfamily,Qt::MatchContains); if (fidx >= 0) { this->fontChooser->setCurrentIndex(fidx); } QString fontsize = getValue("editor/fontsize").toString(); int sidx = this->fontSize->findText(fontsize); if (sidx >= 0) { this->fontSize->setCurrentIndex(sidx); } else { this->fontSize->setEditText(fontsize); } this->openCSGWarningBox->setChecked(getValue("advanced/opencsg_show_warning").toBool()); this->enableOpenCSGBox->setChecked(getValue("advanced/enable_opencsg_opengl1x").toBool()); this->cgalCacheSizeEdit->setText(getValue("advanced/cgalCacheSize").toString()); this->polysetCacheSizeEdit->setText(getValue("advanced/polysetCacheSize").toString()); this->opencsgLimitEdit->setText(getValue("advanced/openCSGLimit").toString()); this->forceGoldfeatherBox->setChecked(getValue("advanced/forceGoldfeather").toBool()); } void Preferences::apply() const { emit fontChanged(getValue("editor/fontfamily").toString(), getValue("editor/fontsize").toUInt()); emit requestRedraw(); emit openCSGSettingsChanged(); } openscad-2013.01+dfsg.orig/src/ThrownTogetherRenderer.cc0000644000175000017500000001045411701151225022477 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "ThrownTogetherRenderer.h" #include "polyset.h" #include "csgterm.h" #include "system-gl.h" #include ThrownTogetherRenderer::ThrownTogetherRenderer(CSGChain *root_chain, CSGChain *highlights_chain, CSGChain *background_chain) : root_chain(root_chain), highlights_chain(highlights_chain), background_chain(background_chain) { } void ThrownTogetherRenderer::draw(bool /*showfaces*/, bool showedges) const { if (this->root_chain) { glEnable(GL_CULL_FACE); glCullFace(GL_BACK); renderCSGChain(this->root_chain, false, false, showedges, false); glCullFace(GL_FRONT); glColor3ub(255, 0, 255); renderCSGChain(this->root_chain, false, false, showedges, true); glDisable(GL_CULL_FACE); } if (this->background_chain) renderCSGChain(this->background_chain, false, true, showedges, false); if (this->highlights_chain) renderCSGChain(this->highlights_chain, true, false, showedges, false); } void ThrownTogetherRenderer::renderCSGChain(CSGChain *chain, bool highlight, bool background, bool showedges, bool fberror) const { glDepthFunc(GL_LEQUAL); boost::unordered_map,int> polySetVisitMark; for (size_t i = 0; i < chain->polysets.size(); i++) { if (polySetVisitMark[std::make_pair(chain->polysets[i].get(), &chain->matrices[i])]++ > 0) continue; const Transform3d &m = chain->matrices[i]; const Color4f &c = chain->colors[i]; glPushMatrix(); glMultMatrixd(m.data()); PolySet::csgmode_e csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; if (highlight) { csgmode = PolySet::csgmode_e(csgmode + 20); setColor(COLORMODE_HIGHLIGHT); chain->polysets[i]->render_surface(csgmode, m); if (showedges) { setColor(COLORMODE_HIGHLIGHT_EDGES); chain->polysets[i]->render_edges(csgmode); } } else if (background) { csgmode = PolySet::csgmode_e(csgmode + 10); setColor(COLORMODE_BACKGROUND); chain->polysets[i]->render_surface(csgmode, m); if (showedges) { setColor(COLORMODE_BACKGROUND_EDGES); chain->polysets[i]->render_edges(csgmode); } } else if (fberror) { if (highlight) csgmode = PolySet::csgmode_e(csgmode + 20); else if (background) csgmode = PolySet::csgmode_e(csgmode + 10); else csgmode = PolySet::csgmode_e(csgmode); chain->polysets[i]->render_surface(csgmode, m); } else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0 || c[3] >= 0) { setColor(c.data()); chain->polysets[i]->render_surface(csgmode, m); if (showedges) { glColor4f((c[0]+1)/2, (c[1]+1)/2, (c[2]+1)/2, 1.0); chain->polysets[i]->render_edges(csgmode); } } else if (chain->types[i] == CSGTerm::TYPE_DIFFERENCE) { setColor(COLORMODE_CUTOUT); chain->polysets[i]->render_surface(csgmode, m); if (showedges) { setColor(COLORMODE_CUTOUT_EDGES); chain->polysets[i]->render_edges(csgmode); } } else { setColor(COLORMODE_MATERIAL); chain->polysets[i]->render_surface(csgmode, m); if (showedges) { setColor(COLORMODE_MATERIAL_EDGES); chain->polysets[i]->render_edges(csgmode); } } glPopMatrix(); } } openscad-2013.01+dfsg.orig/src/GLView.h0000644000175000017500000000463511671233305017036 0ustar chrysnchrysn#ifndef GLVIEW_H_ #define GLVIEW_H_ #include "system-gl.h" #include #include class GLView : public QGLWidget { Q_OBJECT Q_PROPERTY(bool showFaces READ showFaces WRITE setShowFaces); Q_PROPERTY(bool showEdges READ showEdges WRITE setShowEdges); Q_PROPERTY(bool showAxes READ showAxes WRITE setShowAxes); Q_PROPERTY(bool showCrosshairs READ showCrosshairs WRITE setShowCrosshairs); Q_PROPERTY(bool orthoMode READ orthoMode WRITE setOrthoMode); public: GLView(QWidget *parent = NULL); GLView(const QGLFormat & format, QWidget *parent = NULL); void setRenderer(class Renderer* r); #ifdef ENABLE_OPENCSG bool hasOpenCSGSupport() { return this->opencsg_support; } #endif // Properties bool showFaces() const { return this->showfaces; } void setShowFaces(bool enabled) { this->showfaces = enabled; } bool showEdges() const { return this->showedges; } void setShowEdges(bool enabled) { this->showedges = enabled; } bool showAxes() const { return this->showaxes; } void setShowAxes(bool enabled) { this->showaxes = enabled; } bool showCrosshairs() const { return this->showcrosshairs; } void setShowCrosshairs(bool enabled) { this->showcrosshairs = enabled; } bool orthoMode() const { return this->orthomode; } void setOrthoMode(bool enabled) { this->orthomode = enabled; } const QString &getRendererInfo() const { return this->rendererInfo; } public: QLabel *statusLabel; double object_rot_x; double object_rot_y; double object_rot_z; double object_trans_x; double object_trans_y; double object_trans_z; GLint shaderinfo[11]; #ifdef ENABLE_OPENCSG bool opencsg_support; int opencsg_id; #endif private: void init(); Renderer *renderer; QString rendererInfo; bool showfaces; bool showedges; bool showaxes; bool showcrosshairs; bool orthomode; double viewer_distance; double w_h_ratio; bool mouse_drag_active; QPoint last_mouse; void keyPressEvent(QKeyEvent *event); void wheelEvent(QWheelEvent *event); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void initializeGL(); void resizeGL(int w, int h); void setupPerspective(); void setupOrtho(double distance,bool offset=false); void paintGL(); void normalizeAngle(GLdouble& angle); #ifdef ENABLE_OPENCSG bool is_opencsg_capable; bool has_shaders; private slots: void display_opencsg_warning(); #endif signals: void doAnimateUpdate(); }; #endif openscad-2013.01+dfsg.orig/src/traverser.cc0000644000175000017500000000244412076022156020050 0ustar chrysnchrysn#include "traverser.h" #include "visitor.h" #include "node.h" #include "state.h" #include #include void Traverser::execute() { State state(NULL); traverse(this->root, state); } Response Traverser::traverse(const AbstractNode &node, const State &state) { State newstate = state; newstate.setNumChildren(node.getChildren().size()); Response response = ContinueTraversal; if (traversaltype == PREFIX || traversaltype == PRE_AND_POSTFIX) { newstate.setPrefix(true); newstate.setParent(state.parent()); response = node.accept(newstate, this->visitor); } // Pruned traversals mean don't traverse children if (response == ContinueTraversal) { newstate.setParent(&node); BOOST_FOREACH(const AbstractNode *chnode, node.getChildren()) { response = this->traverse(*chnode, newstate); if (response == AbortTraversal) return response; // Abort immediately } } // Postfix is executed for all non-aborted traversals if (response != AbortTraversal) { if (traversaltype == POSTFIX || traversaltype == PRE_AND_POSTFIX) { newstate.setParent(state.parent()); newstate.setPrefix(false); newstate.setPostfix(true); response = node.accept(newstate, this->visitor); } } if (response != AbortTraversal) response = ContinueTraversal; return response; } openscad-2013.01+dfsg.orig/src/dxftess-glu.cc0000644000175000017500000003006211750256150020276 0ustar chrysnchrysn#include "dxftess.h" #include "dxfdata.h" #include "polyset.h" #include "grid.h" #include #include "system-gl.h" #include "mathc99.h" #include #include #include #ifdef WIN32 # define STDCALL __stdcall #else # define STDCALL #endif #undef DEBUG_TRIANGLE_SPLITTING struct tess_vdata { GLdouble v[3]; }; struct tess_triangle { GLdouble *p[3]; tess_triangle() { p[0] = NULL; p[1] = NULL; p[2] = NULL; } tess_triangle(double *p1, double *p2, double *p3) { p[0] = p1; p[1] = p2; p[2] = p3; } }; static GLenum tess_type; static int tess_count; static QVector tess_tri; static GLdouble *tess_p1, *tess_p2; static void STDCALL tess_vertex(void *vertex_data) { GLdouble *p = (double*)vertex_data; #if 0 printf(" %d: %f %f %f\n", tess_count, p[0], p[1], p[2]); #endif if (tess_type == GL_TRIANGLE_FAN) { if (tess_count == 0) { tess_p1 = p; } if (tess_count == 1) { tess_p2 = p; } if (tess_count > 1) { tess_tri.append(tess_triangle(tess_p1, tess_p2, p)); tess_p2 = p; } } if (tess_type == GL_TRIANGLE_STRIP) { if (tess_count == 0) { tess_p1 = p; } if (tess_count == 1) { tess_p2 = p; } if (tess_count > 1) { if (tess_count % 2 == 1) { tess_tri.append(tess_triangle(tess_p2, tess_p1, p)); } else { tess_tri.append(tess_triangle(tess_p1, tess_p2, p)); } tess_p1 = tess_p2; tess_p2 = p; } } if (tess_type == GL_TRIANGLES) { if (tess_count == 0) { tess_p1 = p; } if (tess_count == 1) { tess_p2 = p; } if (tess_count == 2) { tess_tri.append(tess_triangle(tess_p1, tess_p2, p)); tess_count = -1; } } tess_count++; } static void STDCALL tess_begin(GLenum type) { #if 0 if (type == GL_TRIANGLE_FAN) { printf("GL_TRIANGLE_FAN:\n"); } if (type == GL_TRIANGLE_STRIP) { printf("GL_TRIANGLE_STRIP:\n"); } if (type == GL_TRIANGLES) { printf("GL_TRIANGLES:\n"); } #endif tess_count = 0; tess_type = type; } static void STDCALL tess_end(void) { /* nothing to be done here */ } static void STDCALL tess_error(GLenum errno) { fprintf(stderr, "GLU tesselation error %s", gluErrorString(errno)); PRINTB("GLU tesselation error %s", gluErrorString(errno)); } static void STDCALL tess_begin_data() { PRINT("GLU tesselation BEGIN_DATA\n"); } static void STDCALL tess_edge_flag(GLboolean flag) { // PRINT("GLU tesselation EDGE_FLAG\n"); } static void STDCALL tess_edge_flag_data(GLboolean flag, void *polygon_data) { PRINT("GLU tesselation EDGE_FLAG_DATA\n"); } static void STDCALL tess_vertex_data(void *vertex_data, void *polygon_data) { PRINT("GLU tesselation VERTEX_DATA\n"); } static void STDCALL tess_end_data(void *polygon_data) { PRINT("GLU tesselation END_DATA\n"); } static void STDCALL tess_combine(GLdouble coords[3], void *vertex_data[4], GLfloat weight[4], void **outData ) { PRINT("GLU tesselation COMBINE\n"); } static void STDCALL tess_combine_data(GLdouble coords[3], void *vertex_data[4], GLfloat weight[4], void **outData, void *polygon_data) { PRINT("GLU tesselation COMBINE_DATA\n"); } static void STDCALL tess_error_data(GLenum errno, void *polygon_data ) { PRINT("GLU tesselation ERROR_DATA\n"); } static bool point_on_line(double *p1, double *p2, double *p3) { if (fabs(p1[0] - p2[0]) < 0.00001 && fabs(p1[1] - p2[1]) < 0.00001) return false; if (fabs(p3[0] - p2[0]) < 0.00001 && fabs(p3[1] - p2[1]) < 0.00001) return false; double v1[2] = { p2[0] - p1[0], p2[1] - p1[1] }; double v2[2] = { p3[0] - p1[0], p3[1] - p1[1] }; if (sqrt(v1[0]*v1[0] + v1[1]*v1[1]) > sqrt(v2[0]*v2[0] + v2[1]*v2[1])) return false; if (fabs(v1[0]) > fabs(v1[1])) { // y = x * dy/dx if (v2[0] == 0 || ((v1[0] > 0) != (v2[0] > 0))) return false; double v1_dy_dx = v1[1] / v1[0]; double v2_dy_dx = v2[1] / v2[0]; if (fabs(v1_dy_dx - v2_dy_dx) > 1e-15) return false; } else { // x = y * dx/dy if (v2[1] == 0 || ((v1[1] > 0) != (v2[1] > 0))) return false; double v1_dy_dx = v1[0] / v1[1]; double v2_dy_dx = v2[0] / v2[1]; if (fabs(v1_dy_dx - v2_dy_dx) > 1e-15) return false; } #if 0 printf("Point on line: %f/%f %f/%f %f/%f\n", p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); #endif return true; } /*! up: true if the polygon is facing in the normal direction (i.e. normal = [0,0,1]) rot: CLOCKWISE rotation around positive Z axis */ void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_triangle_splitting, double h) { GLUtesselator *tobj = gluNewTess(); gluTessCallback(tobj, GLU_TESS_VERTEX, (void(STDCALL *)())&tess_vertex); gluTessCallback(tobj, GLU_TESS_BEGIN, (void(STDCALL *)())&tess_begin); gluTessCallback(tobj, GLU_TESS_END, (void(STDCALL *)())&tess_end); gluTessCallback(tobj, GLU_TESS_ERROR, (void(STDCALL *)())&tess_error); gluTessCallback(tobj, GLU_TESS_EDGE_FLAG, (void(STDCALL *)())&tess_edge_flag); // gluTessCallback(tobj, GLU_TESS_COMBINE, (void(STDCALL *)())&tess_combine); /* gluTessCallback(tobj, GLU_TESS_BEGIN_DATA, (void(STDCALL *)())&tess_begin_data); */ /* gluTessCallback(tobj, GLU_TESS_EDGE_FLAG_DATA, (void(STDCALL *)())&tess_edge_flag_data); */ /* gluTessCallback(tobj, GLU_TESS_VERTEX_DATA, (void(STDCALL *)())&tess_vertex_data); */ /* gluTessCallback(tobj, GLU_TESS_END_DATA, (void(STDCALL *)())&tess_end_data); */ /* gluTessCallback(tobj, GLU_TESS_COMBINE_DATA, (void(STDCALL *)())&tess_combine_data); */ /* gluTessCallback(tobj, GLU_TESS_ERROR_DATA, (void(STDCALL *)())&tess_error_data); */ tess_tri.clear(); QList vl; gluTessBeginPolygon(tobj, NULL); gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); if (up) { gluTessNormal(tobj, 0, 0, -1); } else { gluTessNormal(tobj, 0, 0, +1); } Grid3d< QPair > point_to_path(GRID_COARSE); for (int i = 0; i < dxf.paths.size(); i++) { if (!dxf.paths[i].is_closed) continue; gluTessBeginContour(tobj); for (int j = 1; j < dxf.paths[i].indices.size(); j++) { point_to_path.data(dxf.points[dxf.paths[i].indices[j]][0], dxf.points[dxf.paths[i].indices[j]][1], h) = QPair(i, j); vl.append(tess_vdata()); vl.last().v[0] = dxf.points[dxf.paths[i].indices[j]][0]; vl.last().v[1] = dxf.points[dxf.paths[i].indices[j]][1]; vl.last().v[2] = h; gluTessVertex(tobj, vl.last().v, vl.last().v); } gluTessEndContour(tobj); } gluTessEndPolygon(tobj); gluDeleteTess(tobj); #if 0 for (int i = 0; i < tess_tri.size(); i++) { printf("~~~\n"); printf(" %f %f %f\n", tess_tri[i].p[0][0], tess_tri[i].p[0][1], tess_tri[i].p[0][2]); printf(" %f %f %f\n", tess_tri[i].p[1][0], tess_tri[i].p[1][1], tess_tri[i].p[1][2]); printf(" %f %f %f\n", tess_tri[i].p[2][0], tess_tri[i].p[2][1], tess_tri[i].p[2][2]); } #endif // GLU tessing sometimes generates degenerated triangles. We must find and remove // them so we can use the triangle array with CGAL.. for (int i = 0; i < tess_tri.size(); i++) { if (point_on_line(tess_tri[i].p[0], tess_tri[i].p[1], tess_tri[i].p[2]) || point_on_line(tess_tri[i].p[1], tess_tri[i].p[2], tess_tri[i].p[0]) || point_on_line(tess_tri[i].p[2], tess_tri[i].p[0], tess_tri[i].p[1])) { // printf("DEBUG: Removed triangle\n"); tess_tri.remove(i--); } } // GLU tessing creates T-junctions. This is ok for GL displaying but creates // invalid polyhedrons for CGAL. So we split this tirangles up again in order // to create polyhedrons that are also accepted by CGAL.. // All triangle edges are sorted by their atan2 and only edges with a simmilar atan2 // value are compared. This speeds up this code block dramatically (compared to the // n^2 compares that are neccessary in the trivial implementation). #if 1 if (do_triangle_splitting) { bool added_triangles = true; typedef QPair QPair_ii; QHash tri_by_atan2; for (int i = 0; i < tess_tri.size(); i++) for (int j = 0; j < 3; j++) { int ai = (int)round(atan2(fabs(tess_tri[i].p[(j+1)%3][0] - tess_tri[i].p[j][0]), fabs(tess_tri[i].p[(j+1)%3][1] - tess_tri[i].p[j][1])) / 0.001); tri_by_atan2.insertMulti(ai, QPair(i, j)); } while (added_triangles) { added_triangles = false; #ifdef DEBUG_TRIANGLE_SPLITTING printf("*** Triangle splitting (%d) ***\n", tess_tri.size()+1); #endif for (int i = 0; i < tess_tri.size(); i++) for (int k = 0; k < 3; k++) { QHash possible_neigh; int ai = (int)floor(atan2(fabs(tess_tri[i].p[(k+1)%3][0] - tess_tri[i].p[k][0]), fabs(tess_tri[i].p[(k+1)%3][1] - tess_tri[i].p[k][1])) / 0.001 - 0.5); for (int j = 0; j < 2; j++) { foreach (const QPair_ii &jl, tri_by_atan2.values(ai+j)) if (i != jl.first) possible_neigh[jl] = jl; } #ifdef DEBUG_TRIANGLE_SPLITTING printf("%d/%d: %d\n", i, k, possible_neigh.size()); #endif foreach (const QPair_ii &jl, possible_neigh) { int j = jl.first; for (int l = jl.second; l != (jl.second + 2) % 3; l = (l + 1) % 3) if (point_on_line(tess_tri[i].p[k], tess_tri[j].p[l], tess_tri[i].p[(k+1)%3])) { #ifdef DEBUG_TRIANGLE_SPLITTING printf("%% %f %f %f %f %f %f [%d %d]\n", tess_tri[i].p[k][0], tess_tri[i].p[k][1], tess_tri[j].p[l][0], tess_tri[j].p[l][1], tess_tri[i].p[(k+1)%3][0], tess_tri[i].p[(k+1)%3][1], i, j); #endif tess_tri.append(tess_triangle(tess_tri[j].p[l], tess_tri[i].p[(k+1)%3], tess_tri[i].p[(k+2)%3])); for (int m = 0; m < 2; m++) { int ai = (int)round(atan2(fabs(tess_tri.last().p[(m+1)%3][0] - tess_tri.last().p[m][0]), fabs(tess_tri.last().p[(m+1)%3][1] - tess_tri.last().p[m][1])) / 0.001 ); tri_by_atan2.insertMulti(ai, QPair(tess_tri.size()-1, m)); } tess_tri[i].p[(k+1)%3] = tess_tri[j].p[l]; for (int m = 0; m < 2; m++) { int ai = (int)round(atan2(fabs(tess_tri[i].p[(m+1)%3][0] - tess_tri[i].p[m][0]), fabs(tess_tri[i].p[(m+1)%3][1] - tess_tri[i].p[m][1])) / 0.001 ); tri_by_atan2.insertMulti(ai, QPair(i, m)); } added_triangles = true; } } } } } #endif for (int i = 0; i < tess_tri.size(); i++) { #if 0 printf("---\n"); printf(" %f %f %f\n", tess_tri[i].p[0][0], tess_tri[i].p[0][1], tess_tri[i].p[0][2]); printf(" %f %f %f\n", tess_tri[i].p[1][0], tess_tri[i].p[1][1], tess_tri[i].p[1][2]); printf(" %f %f %f\n", tess_tri[i].p[2][0], tess_tri[i].p[2][1], tess_tri[i].p[2][2]); #endif double x, y; ps->append_poly(); x = tess_tri[i].p[0][0] * cos(rot*M_PI/180) + tess_tri[i].p[0][1] * sin(rot*M_PI/180); y = tess_tri[i].p[0][0] * -sin(rot*M_PI/180) + tess_tri[i].p[0][1] * cos(rot*M_PI/180); ps->insert_vertex(x, y, tess_tri[i].p[0][2]); x = tess_tri[i].p[1][0] * cos(rot*M_PI/180) + tess_tri[i].p[1][1] * sin(rot*M_PI/180); y = tess_tri[i].p[1][0] * -sin(rot*M_PI/180) + tess_tri[i].p[1][1] * cos(rot*M_PI/180); ps->insert_vertex(x, y, tess_tri[i].p[1][2]); x = tess_tri[i].p[2][0] * cos(rot*M_PI/180) + tess_tri[i].p[2][1] * sin(rot*M_PI/180); y = tess_tri[i].p[2][0] * -sin(rot*M_PI/180) + tess_tri[i].p[2][1] * cos(rot*M_PI/180); ps->insert_vertex(x, y, tess_tri[i].p[2][2]); int i0 = point_to_path.data(tess_tri[i].p[0][0], tess_tri[i].p[0][1], tess_tri[i].p[0][2]).first; int j0 = point_to_path.data(tess_tri[i].p[0][0], tess_tri[i].p[0][1], tess_tri[i].p[0][2]).second; int i1 = point_to_path.data(tess_tri[i].p[1][0], tess_tri[i].p[1][1], tess_tri[i].p[1][2]).first; int j1 = point_to_path.data(tess_tri[i].p[1][0], tess_tri[i].p[1][1], tess_tri[i].p[1][2]).second; int i2 = point_to_path.data(tess_tri[i].p[2][0], tess_tri[i].p[2][1], tess_tri[i].p[2][2]).first; int j2 = point_to_path.data(tess_tri[i].p[2][0], tess_tri[i].p[2][1], tess_tri[i].p[2][2]).second; if (i0 == i1 && j0 == 1 && j1 == 2) dxf.paths[i0].is_inner = !up; if (i0 == i1 && j0 == 2 && j1 == 1) dxf.paths[i0].is_inner = up; if (i1 == i2 && j1 == 1 && j2 == 2) dxf.paths[i1].is_inner = !up; if (i1 == i2 && j1 == 2 && j2 == 1) dxf.paths[i1].is_inner = up; if (i2 == i0 && j2 == 1 && j0 == 2) dxf.paths[i2].is_inner = !up; if (i2 == i0 && j2 == 2 && j0 == 1) dxf.paths[i2].is_inner = up; } tess_tri.clear(); } openscad-2013.01+dfsg.orig/src/linearextrudenode.h0000644000175000017500000000151211664172102021410 0ustar chrysnchrysn#ifndef LINEAREXTRUDENODE_H_ #define LINEAREXTRUDENODE_H_ #include "node.h" #include "visitor.h" #include "value.h" class LinearExtrudeNode : public AbstractPolyNode { public: LinearExtrudeNode(const ModuleInstantiation *mi) : AbstractPolyNode(mi) { convexity = slices = 0; fn = fs = fa = height = twist = 0; origin_x = origin_y = scale = 0; center = has_twist = false; } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const { return "linear_extrude"; } int convexity, slices; double fn, fs, fa, height, twist; double origin_x, origin_y, scale; bool center, has_twist; Filename filename; std::string layername; virtual PolySet *evaluate_polyset(class PolySetEvaluator *) const; }; #endif openscad-2013.01+dfsg.orig/src/cache.h0000644000175000017500000001176111714613376016752 0ustar chrysnchrysn/**************************************************************************** ** ** OpenSCAD (www.openscad.org) ** Copyright (C) 2009-2011 Clifford Wolf and ** Marius Kintel ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef CACHE_H #define CACHE_H #include #include #include "printutils.h" template class Cache { struct Node { inline Node() : keyPtr(0) {} inline Node(T *data, int cost) : keyPtr(0), t(data), c(cost), p(0), n(0) {} const Key *keyPtr; T *t; int c; Node *p,*n; }; typedef typename boost::unordered_map map_type; typedef typename map_type::iterator iterator_type; typedef typename map_type::value_type value_type; boost::unordered_map hash; Node *f, *l; void *unused; int mx, total; inline void unlink(Node &n) { if (n.p) n.p->n = n.n; if (n.n) n.n->p = n.p; if (l == &n) l = n.p; if (f == &n) f = n.n; total -= n.c; T *obj = n.t; hash.erase(*n.keyPtr); delete obj; } inline T *relink(const Key &key) { iterator_type i = hash.find(key); if (i == hash.end()) return 0; Node &n = i->second; if (f != &n) { if (n.p) n.p->n = n.n; if (n.n) n.n->p = n.p; if (l == &n) l = n.p; n.p = 0; n.n = f; f->p = &n; f = &n; } return n.t; } public: inline explicit Cache(int maxCost = 100) : f(0), l(0), unused(0), mx(maxCost), total(0) { } inline ~Cache() { clear(); } inline int maxCost() const { return mx; } void setMaxCost(int m) { mx = m; trim(mx); } inline int totalCost() const { return total; } inline int size() const { return hash.size(); } inline bool empty() const { return hash.empty(); } void clear() { while (f) { delete f->t; f = f->n; } hash.clear(); l = 0; total = 0; } bool insert(const Key &key, T *object, int cost = 1); T *object(const Key &key) const { return const_cast*>(this)->relink(key); } inline bool contains(const Key &key) const { return hash.find(key) != hash.end(); } T *operator[](const Key &key) const { return object(key); } bool remove(const Key &key); T *take(const Key &key); private: void trim(int m); }; template inline bool Cache::remove(const Key &key) { iterator_type i = hash.find(key); if (i == hash.end()) { return false; } else { unlink(i->second); return true; } } template inline T *Cache::take(const Key &key) { iterator_type i = hash.find(key); if (i == hash.end()) return 0; Node &n = *i; T *t = n.t; n.t = 0; unlink(n); return t; } template bool Cache::insert(const Key &akey, T *aobject, int acost) { remove(akey); if (acost > mx) { delete aobject; return false; } trim(mx - acost); Node node(aobject, acost); hash[akey] = node; iterator_type i = hash.find(akey); total += acost; Node *n = &i->second; n->keyPtr = &i->first; if (f) f->p = n; n->n = f; f = n; if (!l) l = f; return true; } template void Cache::trim(int m) { Node *n = l; while (n && total > m) { Node *u = n; n = n->p; #ifdef DEBUG PRINTB("Trimming cache: %1% (%2% bytes)", *u->keyPtr % u->c); #endif unlink(*u); } } #endif openscad-2013.01+dfsg.orig/src/MainWindow.h0000644000175000017500000001103512044100377017742 0ustar chrysnchrysn#ifndef MAINWINDOW_H_ #define MAINWINDOW_H_ #include #include "ui_MainWindow.h" #include "openscad.h" #include "context.h" #include "module.h" #include "Tree.h" #include "memory.h" #include #include class MainWindow : public QMainWindow, public Ui::MainWindow { Q_OBJECT public: static void requestOpenFile(const QString &filename); QString fileName; class Highlighter *highlighter; class Preferences *prefs; QTimer *animate_timer; double tval, fps, fsteps; QTimer *autoReloadTimer; std::string autoReloadId; Context root_ctx; Module *root_module; // Result of parsing ModuleInstantiation root_inst; // Top level instance AbstractNode *absolute_root_node; // Result of tree evaluation AbstractNode *root_node; // Root if the root modifier (!) is used Tree tree; shared_ptr root_raw_term; // Result of CSG term rendering shared_ptr root_norm_term; // Normalized CSG products class CSGChain *root_chain; #ifdef ENABLE_CGAL class CGAL_Nef_polyhedron *root_N; class CGALRenderer *cgalRenderer; #endif #ifdef ENABLE_OPENCSG class OpenCSGRenderer *opencsgRenderer; #endif class ThrownTogetherRenderer *thrownTogetherRenderer; std::vector > highlight_terms; CSGChain *highlights_chain; std::vector > background_terms; CSGChain *background_chain; QString last_compiled_doc; static const int maxRecentFiles = 10; QAction *actionRecentFile[maxRecentFiles]; MainWindow(const QString &filename); ~MainWindow(); protected: void closeEvent(QCloseEvent *event); private slots: void updatedFps(); void updateTVal(); void setFileName(const QString &filename); void setFont(const QString &family, uint size); void showProgress(); void openCSGSettingsChanged(); private: void openFile(const QString &filename); void refreshDocument(); AbstractNode *find_root_tag(AbstractNode *n); void updateTemporalVariables(); bool fileChangedOnDisk(); bool includesChanged(); bool compileTopLevelDocument(bool reload); bool compile(bool reload, bool procevents); void compileCSG(bool procevents); bool maybeSave(); bool checkEditorModified(); QString dumpCSGTree(AbstractNode *root); static void consoleOutput(const std::string &msg, void *userdata); void loadViewSettings(); void loadDesignSettings(); class QMessageBox *openglbox; private slots: void actionNew(); void actionOpen(); void actionOpenRecent(); void actionOpenExample(); void updateRecentFiles(); void clearRecentFiles(); void updateRecentFileActions(); void actionSave(); void actionSaveAs(); void actionReload(); private slots: void pasteViewportTranslation(); void pasteViewportRotation(); void hideEditor(); void preferences(); private slots: void actionCompile(); #ifdef ENABLE_CGAL void actionRenderCGAL(); void actionRenderCGALDone(class CGAL_Nef_polyhedron *); #endif void actionDisplayAST(); void actionDisplayCSGTree(); void actionDisplayCSGProducts(); void actionExportSTLorOFF(bool stl_mode); void actionExportSTL(); void actionExportOFF(); void actionExportDXF(); void actionExportCSG(); void actionExportImage(); void actionFlushCaches(); public: void viewModeActionsUncheck(); void setCurrentOutput(); void clearCurrentOutput(); public slots: #ifdef ENABLE_OPENCSG void viewModeOpenCSG(); #endif #ifdef ENABLE_CGAL void viewModeCGALSurface(); void viewModeCGALGrid(); #endif void viewModeThrownTogether(); void viewModeShowEdges(); void viewModeShowAxes(); void viewModeShowCrosshairs(); void viewModeAnimate(); void viewAngleTop(); void viewAngleBottom(); void viewAngleLeft(); void viewAngleRight(); void viewAngleFront(); void viewAngleBack(); void viewAngleDiagonal(); void viewCenter(); void viewPerspective(); void viewOrthogonal(); void hideConsole(); void animateUpdateDocChanged(); void animateUpdate(); void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); void helpAbout(); void helpHomepage(); void helpManual(); void helpLibrary(); void quit(); void actionReloadCompile(); void checkAutoReload(); void autoReloadSet(bool); private: static void report_func(const class AbstractNode*, void *vp, int mark); class ProgressWidget *progresswidget; class CGALWorker *cgalworker; QMutex consolemutex; }; class GuiLocker { public: GuiLocker() { gui_locked++; } ~GuiLocker() { gui_locked--; } static bool isLocked() { return gui_locked > 0; } static void lock() { gui_locked++; } static void unlock() { gui_locked--; } private: static unsigned int gui_locked; }; #endif openscad-2013.01+dfsg.orig/src/cgalworker.cc0000644000175000017500000000135712076022155020174 0ustar chrysnchrysn#include "cgalworker.h" #include #include "Tree.h" #include "CGALEvaluator.h" #include "progress.h" #include "printutils.h" CGALWorker::CGALWorker() { this->thread = new QThread(); connect(this->thread, SIGNAL(started()), this, SLOT(work())); moveToThread(this->thread); } CGALWorker::~CGALWorker() { delete this->thread; } void CGALWorker::start(const Tree &tree) { this->tree = &tree; this->thread->start(); } void CGALWorker::work() { CGAL_Nef_polyhedron *root_N = NULL; try { CGALEvaluator evaluator(*this->tree); root_N = new CGAL_Nef_polyhedron(evaluator.evaluateCGALMesh(*this->tree->root())); } catch (const ProgressCancelException &e) { PRINT("Rendering cancelled."); } emit done(root_N); thread->quit(); } openscad-2013.01+dfsg.orig/src/dxfdata.cc0000644000175000017500000004574312076022155017456 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "dxfdata.h" #include "grid.h" #include "printutils.h" #include "handle_dep.h" #include "openscad.h" // get_fragments_from_r() #include #include "mathc99.h" #include #include #include #include #include #include #include #include #include #include "value.h" /*! \class DxfData The DxfData class fulfils multiple tasks, partially for historical reasons. FIXME: It's a bit messy and is a prime target for refactoring. 1) Read DXF file from disk 2) Store contents of DXF files as points, paths and dims 3) Store 2D polygons, both from the polygon() module and from 2D CSG operations. Used for tesselation into triangles 4) Store 2D polygons before exporting to DXF */ struct Line { int idx[2]; // indices into DxfData::points bool disabled; Line(int i1 = -1, int i2 = -1) { idx[0] = i1; idx[1] = i2; disabled = false; } }; DxfData::DxfData() { } /*! Reads a layer from the given file, or all layers if layername.empty() */ DxfData::DxfData(double fn, double fs, double fa, const std::string &filename, const std::string &layername, double xorigin, double yorigin, double scale) { handle_dep(filename); // Register ourselves as a dependency std::ifstream stream(filename.c_str()); if (!stream.good()) { PRINTB("WARNING: Can't open DXF file '%s'.", filename); return; } Grid2d< std::vector > grid(GRID_COARSE); std::vector lines; // Global lines boost::unordered_map< std::string, std::vector > blockdata; // Lines in blocks bool in_entities_section = false; bool in_blocks_section = false; std::string current_block; #define ADD_LINE(_x1, _y1, _x2, _y2) do { \ double _p1x = _x1, _p1y = _y1, _p2x = _x2, _p2y = _y2; \ if (!in_entities_section && !in_blocks_section) \ break; \ if (in_entities_section && \ !(layername.empty() || layername == layer)) \ break; \ grid.align(_p1x, _p1y); \ grid.align(_p2x, _p2y); \ grid.data(_p1x, _p1y).push_back(lines.size()); \ grid.data(_p2x, _p2y).push_back(lines.size()); \ if (in_entities_section) \ lines.push_back( \ Line(addPoint(_p1x, _p1y), addPoint(_p2x, _p2y))); \ if (in_blocks_section && !current_block.empty()) \ blockdata[current_block].push_back( \ Line(addPoint(_p1x, _p1y), addPoint(_p2x, _p2y))); \ } while (0) std::string mode, layer, name, iddata; int dimtype = 0; double coords[7][2]; // Used by DIMENSION entities std::vector xverts; std::vector yverts; double radius = 0; double arc_start_angle = 0, arc_stop_angle = 0; double ellipse_start_angle = 0, ellipse_stop_angle = 0; for (int i = 0; i < 7; i++) for (int j = 0; j < 2; j++) coords[i][j] = 0; typedef boost::unordered_map EntityList; EntityList unsupported_entities_list; // // Parse DXF file. Will populate this->points, this->dims, lines and blockdata // while (!stream.eof()) { std::string id_str, data; std::getline(stream, id_str); boost::trim(id_str); std::getline(stream, data); boost::trim(data); int id; try { id = boost::lexical_cast(id_str); } catch (const boost::bad_lexical_cast &blc) { if (!stream.eof()) { PRINTB("WARNING: Illegal ID '%s' in `%s'", id_str % filename); } break; } try { if (id >= 10 && id <= 16) { if (in_blocks_section) coords[id-10][0] = boost::lexical_cast(data); else if (id == 11 || id == 12 || id == 16) coords[id-10][0] = boost::lexical_cast(data) * scale; else coords[id-10][0] = (boost::lexical_cast(data) - xorigin) * scale; } if (id >= 20 && id <= 26) { if (in_blocks_section) coords[id-20][1] = boost::lexical_cast(data); else if (id == 21 || id == 22 || id == 26) coords[id-20][1] = boost::lexical_cast(data) * scale; else coords[id-20][1] = (boost::lexical_cast(data) - yorigin) * scale; } switch (id) { case 0: if (mode == "SECTION") { in_entities_section = iddata == "ENTITIES"; in_blocks_section = iddata == "BLOCKS"; } else if (mode == "LINE") { ADD_LINE(xverts[0], yverts[0], xverts[1], yverts[1]); } else if (mode == "LWPOLYLINE") { assert(xverts.size() == yverts.size()); // polyline flag is stored in 'dimtype' int numverts = xverts.size(); for (int i=1;i arc_stop_angle) arc_stop_angle += 360.0; n = (int)ceil(n * (arc_stop_angle-arc_start_angle) / 360); for (int i = 0; i < n; i++) { double a1 = ((arc_stop_angle-arc_start_angle)*i)/n; double a2 = ((arc_stop_angle-arc_start_angle)*(i+1))/n; a1 = (arc_start_angle + a1) * M_PI / 180.0; a2 = (arc_start_angle + a2) * M_PI / 180.0; ADD_LINE(cos(a1)*radius + center[0], sin(a1)*radius + center[1], cos(a2)*radius + center[0], sin(a2)*radius + center[1]); } } else if (mode == "ELLIPSE") { // Commented code is meant as documentation of vector math while (ellipse_start_angle > ellipse_stop_angle) ellipse_stop_angle += 2 * M_PI; // Vector2d center(xverts[0], yverts[0]); Vector2d center(xverts[0], yverts[0]); // Vector2d ce(xverts[1], yverts[1]); Vector2d ce(xverts[1], yverts[1]); // double r_major = ce.length(); double r_major = sqrt(ce[0]*ce[0] + ce[1]*ce[1]); // double rot_angle = ce.angle(); double rot_angle; { // double dot = ce.dot(Vector2d(1.0, 0.0)); double dot = ce[0]; double cosval = dot / r_major; if (cosval > 1.0) cosval = 1.0; if (cosval < -1.0) cosval = -1.0; rot_angle = acos(cosval); if (ce[1] < 0.0) rot_angle = 2 * M_PI - rot_angle; } // the ratio stored in 'radius; due to the parser code not checking entity type double r_minor = r_major * radius; double sweep_angle = ellipse_stop_angle-ellipse_start_angle; int n = get_fragments_from_r(r_major, fn, fs, fa); n = (int)ceil(n * sweep_angle / (2 * M_PI)); // Vector2d p1; Vector2d p1; p1 << 0,0; for (int i=0;i<=n;i++) { double a = (ellipse_start_angle + sweep_angle*i/n); // Vector2d p2(cos(a)*r_major, sin(a)*r_minor); Vector2d p2(cos(a)*r_major, sin(a)*r_minor); // p2.rotate(rot_angle); Vector2d p2_rot(cos(rot_angle)*p2[0] - sin(rot_angle)*p2[1], sin(rot_angle)*p2[0] + cos(rot_angle)*p2[1]); // p2 += center; p2_rot[0] += center[0]; p2_rot[1] += center[1]; if (i > 0) { // ADD_LINE(p1[0], p1[1], p2[0], p2[1]); ADD_LINE(p1[0], p1[1], p2_rot[0], p2_rot[1]); } // p1 = p2; p1[0] = p2_rot[0]; p1[1] = p2_rot[1]; } } else if (mode == "INSERT") { // scale is stored in ellipse_start|stop_angle, rotation in arc_start_angle; // due to the parser code not checking entity type int n = blockdata[iddata].size(); for (int i = 0; i < n; i++) { double a = arc_start_angle * M_PI / 180.0; double lx1 = this->points[blockdata[iddata][i].idx[0]][0] * ellipse_start_angle; double ly1 = this->points[blockdata[iddata][i].idx[0]][1] * ellipse_stop_angle; double lx2 = this->points[blockdata[iddata][i].idx[1]][0] * ellipse_start_angle; double ly2 = this->points[blockdata[iddata][i].idx[1]][1] * ellipse_stop_angle; double px1 = (cos(a)*lx1 - sin(a)*ly1) * scale + xverts[0]; double py1 = (sin(a)*lx1 + cos(a)*ly1) * scale + yverts[0]; double px2 = (cos(a)*lx2 - sin(a)*ly2) * scale + xverts[0]; double py2 = (sin(a)*lx2 + cos(a)*ly2) * scale + yverts[0]; ADD_LINE(px1, py1, px2, py2); } } else if (mode == "DIMENSION" && (layername.empty() || layername == layer)) { this->dims.push_back(Dim()); this->dims.back().type = dimtype; for (int i = 0; i < 7; i++) for (int j = 0; j < 2; j++) this->dims.back().coords[i][j] = coords[i][j]; this->dims.back().angle = arc_start_angle; this->dims.back().length = radius; this->dims.back().name = name; } else if (mode == "BLOCK") { current_block = iddata; } else if (mode == "ENDBLK") { current_block.erase(); } else if (mode == "ENDSEC") { } else if (in_blocks_section || (in_entities_section && (layername.empty() || layername == layer))) { unsupported_entities_list[mode]++; } mode = data; layer.erase(); name.erase(); iddata.erase(); dimtype = 0; for (int i = 0; i < 7; i++) for (int j = 0; j < 2; j++) coords[i][j] = 0; xverts.clear(); yverts.clear(); radius = arc_start_angle = arc_stop_angle = 0; ellipse_start_angle = ellipse_stop_angle = 0; if (mode == "INSERT") { ellipse_start_angle = ellipse_stop_angle = 1.0; // scale } break; case 1: name = data; break; case 2: iddata = data; break; case 8: layer = data; break; case 10: if (in_blocks_section) xverts.push_back((boost::lexical_cast(data))); else xverts.push_back((boost::lexical_cast(data) - xorigin) * scale); break; case 11: if (in_blocks_section) xverts.push_back((boost::lexical_cast(data))); else xverts.push_back((boost::lexical_cast(data) - xorigin) * scale); break; case 20: if (in_blocks_section) yverts.push_back((boost::lexical_cast(data))); else yverts.push_back((boost::lexical_cast(data) - yorigin) * scale); break; case 21: if (in_blocks_section) yverts.push_back((boost::lexical_cast(data))); else yverts.push_back((boost::lexical_cast(data) - yorigin) * scale); break; case 40: // CIRCLE, ARC: radius // ELLIPSE: minor to major ratio // DIMENSION (radial, diameter): Leader length radius = boost::lexical_cast(data); if (!in_blocks_section) radius *= scale; break; case 41: // ELLIPSE: start_angle // INSERT: X scale ellipse_start_angle = boost::lexical_cast(data); break; case 50: // ARC: start_angle // INSERT: rot angle // DIMENSION: linear and rotated: angle arc_start_angle = boost::lexical_cast(data); break; case 42: // ELLIPSE: stop_angle // INSERT: Y scale ellipse_stop_angle = boost::lexical_cast(data); break; case 51: // ARC arc_stop_angle = boost::lexical_cast(data); break; case 70: // LWPOLYLINE: polyline flag // DIMENSION: dimension type dimtype = boost::lexical_cast(data); break; } } catch (boost::bad_lexical_cast &blc) { PRINTB("WARNING: Illegal value %s in '%s'", data % filename); } } BOOST_FOREACH(const EntityList::value_type &i, unsupported_entities_list) { if (layername.empty()) { PRINTB("WARNING: Unsupported DXF Entity '%s' (%x) in %s.", i.first % i.second % QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString())); } else { PRINTB("WARNING: Unsupported DXF Entity '%s' (%x) in layer '%s' of %s.", i.first % i.second % layername % QuotedString(QDir::current().relativeFilePath(QString::fromStdString(filename)).toStdString())); } } // Extract paths from parsed data typedef std::map LineMap; LineMap enabled_lines; for (size_t i = 0; i < lines.size(); i++) { enabled_lines[i] = i; } // extract all open paths while (enabled_lines.size() > 0) { int current_line, current_point; BOOST_FOREACH(const LineMap::value_type &l, enabled_lines) { int idx = l.second; for (int j = 0; j < 2; j++) { std::vector *lv = &grid.data(this->points[lines[idx].idx[j]][0], this->points[lines[idx].idx[j]][1]); for (size_t ki = 0; ki < lv->size(); ki++) { int k = lv->at(ki); if (k == idx || lines[k].disabled) continue; goto next_open_path_j; } current_line = idx; current_point = j; goto create_open_path; next_open_path_j:; } } break; create_open_path: this->paths.push_back(Path()); Path *this_path = &this->paths.back(); this_path->indices.push_back(lines[current_line].idx[current_point]); while (1) { this_path->indices.push_back(lines[current_line].idx[!current_point]); const Vector2d &ref_point = this->points[lines[current_line].idx[!current_point]]; lines[current_line].disabled = true; enabled_lines.erase(current_line); std::vector *lv = &grid.data(ref_point[0], ref_point[1]); for (size_t ki = 0; ki < lv->size(); ki++) { int k = lv->at(ki); if (lines[k].disabled) continue; if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[0]][0], this->points[lines[k].idx[0]][1])) { current_line = k; current_point = 0; goto found_next_line_in_open_path; } if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[1]][0], this->points[lines[k].idx[1]][1])) { current_line = k; current_point = 1; goto found_next_line_in_open_path; } } break; found_next_line_in_open_path:; } } // extract all closed paths while (enabled_lines.size() > 0) { int current_line = enabled_lines.begin()->second, current_point = 0; this->paths.push_back(Path()); Path *this_path = &this->paths.back(); this_path->is_closed = true; this_path->indices.push_back(lines[current_line].idx[current_point]); while (1) { this_path->indices.push_back(lines[current_line].idx[!current_point]); const Vector2d &ref_point = this->points[lines[current_line].idx[!current_point]]; lines[current_line].disabled = true; enabled_lines.erase(current_line); std::vector *lv = &grid.data(ref_point[0], ref_point[1]); for (size_t ki = 0; ki < lv->size(); ki++) { int k = lv->at(ki); if (lines[k].disabled) continue; if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[0]][0], this->points[lines[k].idx[0]][1])) { current_line = k; current_point = 0; goto found_next_line_in_closed_path; } if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[1]][0], this->points[lines[k].idx[1]][1])) { current_line = k; current_point = 1; goto found_next_line_in_closed_path; } } break; found_next_line_in_closed_path:; } } fixup_path_direction(); #if 0 printf("----- DXF Data -----\n"); for (int i = 0; i < this->paths.size(); i++) { printf("Path %d (%s):\n", i, this->paths[i].is_closed ? "closed" : "open"); for (int j = 0; j < this->paths[i].points.size(); j++) printf(" %f %f\n", (*this->paths[i].points[j])[0], (*this->paths[i].points[j])[1]); } printf("--------------------\n"); fflush(stdout); #endif } /*! Ensures that all paths have the same vertex ordering. FIXME: CW or CCW? */ void DxfData::fixup_path_direction() { for (size_t i = 0; i < this->paths.size(); i++) { if (!this->paths[i].is_closed) break; this->paths[i].is_inner = true; double min_x = this->points[this->paths[i].indices[0]][0]; size_t min_x_point = 0; for (size_t j = 1; j < this->paths[i].indices.size(); j++) { if (this->points[this->paths[i].indices[j]][0] < min_x) { min_x = this->points[this->paths[i].indices[j]][0]; min_x_point = j; } } // rotate points if the path is in non-standard rotation size_t b = min_x_point; size_t a = b == 0 ? this->paths[i].indices.size() - 2 : b - 1; size_t c = b == this->paths[i].indices.size() - 1 ? 1 : b + 1; double ax = this->points[this->paths[i].indices[a]][0] - this->points[this->paths[i].indices[b]][0]; double ay = this->points[this->paths[i].indices[a]][1] - this->points[this->paths[i].indices[b]][1]; double cx = this->points[this->paths[i].indices[c]][0] - this->points[this->paths[i].indices[b]][0]; double cy = this->points[this->paths[i].indices[c]][1] - this->points[this->paths[i].indices[b]][1]; #if 0 printf("Rotate check:\n"); printf(" a/b/c indices = %d %d %d\n", a, b, c); printf(" b->a vector = %f %f (%f)\n", ax, ay, atan2(ax, ay)); printf(" b->c vector = %f %f (%f)\n", cx, cy, atan2(cx, cy)); #endif // FIXME: atan2() usually takes y,x. This variant probably makes the path clockwise.. if (atan2(ax, ay) < atan2(cx, cy)) { std::reverse(this->paths[i].indices.begin(), this->paths[i].indices.end()); } } } /*! Adds a vertex and returns the index into DxfData::points */ int DxfData::addPoint(double x, double y) { this->points.push_back(Vector2d(x, y)); return this->points.size()-1; } std::string DxfData::dump() const { std::stringstream out; out << "DxfData" << "\n num points: " << points.size() << "\n num paths: " << paths.size() << "\n num dims: " << dims.size() << "\n points: "; for ( size_t k = 0 ; k < points.size() ; k++ ) { out << "\n x y: " << points[k].transpose(); } out << "\n paths: "; for ( size_t i = 0; i < paths.size(); i++ ) { out << "\n path:" << i << "\n is_closed: " << paths[i].is_closed << "\n is_inner: " << paths[i].is_inner ; DxfData::Path path = paths[i]; for ( size_t j = 0; j < path.indices.size(); j++ ) { out << "\n index[" << j << "]==" << path.indices[j]; } } out << "\nDxfData end"; return out.str(); } openscad-2013.01+dfsg.orig/src/csgterm.h0000644000175000017500000000302612013745030017330 0ustar chrysnchrysn#ifndef CSGTERM_H_ #define CSGTERM_H_ #include #include #include "memory.h" #include "linalg.h" class PolySet; class CSGTerm { public: enum type_e { TYPE_PRIMITIVE, TYPE_UNION, TYPE_INTERSECTION, TYPE_DIFFERENCE }; static shared_ptr createCSGTerm(type_e type, shared_ptr left, shared_ptr right); static shared_ptr createCSGTerm(type_e type, CSGTerm *left, CSGTerm *right); type_e type; shared_ptr polyset; std::string label; shared_ptr left; shared_ptr right; BoundingBox bbox; CSGTerm(const shared_ptr &polyset, const Transform3d &matrix, const Color4f &color, const std::string &label); ~CSGTerm(); const BoundingBox &getBoundingBox() const { return this->bbox; } std::string dump(); private: CSGTerm(type_e type, shared_ptr left, shared_ptr right); CSGTerm(type_e type, CSGTerm *left, CSGTerm *right); void initBoundingBox(); Transform3d m; Color4f color; friend class CSGChain; }; class CSGChain { public: std::vector > polysets; std::vector matrices; std::vector colors; std::vector types; std::vector labels; CSGChain(); void add(const shared_ptr &polyset, const Transform3d &m, const Color4f &color, CSGTerm::type_e type, std::string label); void import(shared_ptr term, CSGTerm::type_e type = CSGTerm::TYPE_UNION); std::string dump(bool full = false); BoundingBox getBoundingBox() const; }; #endif openscad-2013.01+dfsg.orig/src/projectionnode.h0000644000175000017500000000112311640436732020715 0ustar chrysnchrysn#ifndef PROJECTIONNODE_H_ #define PROJECTIONNODE_H_ #include "node.h" #include "visitor.h" #include class ProjectionNode : public AbstractPolyNode { public: ProjectionNode(const ModuleInstantiation *mi) : AbstractPolyNode(mi) { cut_mode = false; } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const { return "projection"; } int convexity; bool cut_mode; virtual PolySet *evaluate_polyset(class PolySetEvaluator *evaluator) const; }; #endif openscad-2013.01+dfsg.orig/src/memory.h0000644000175000017500000000014611640436732017207 0ustar chrysnchrysn#ifndef MEMORY_H_ #define MEMORY_H_ #include using boost::shared_ptr; #endif openscad-2013.01+dfsg.orig/src/PolySetCGALEvaluator.h0000644000175000017500000000156511776112753021622 0ustar chrysnchrysn#ifndef POLYSETCGALEVALUATOR_H_ #define POLYSETCGALEVALUATOR_H_ #include "PolySetEvaluator.h" /*! This is a PolySet evaluator which uses the CGALEvaluator to support building polysets. */ class PolySetCGALEvaluator : public PolySetEvaluator { public: PolySetCGALEvaluator(class CGALEvaluator &cgalevaluator); virtual ~PolySetCGALEvaluator() { } virtual PolySet *evaluatePolySet(const ProjectionNode &node); virtual PolySet *evaluatePolySet(const LinearExtrudeNode &node); virtual PolySet *evaluatePolySet(const RotateExtrudeNode &node); virtual PolySet *evaluatePolySet(const CgaladvNode &node); virtual PolySet *evaluatePolySet(const RenderNode &node); bool debug; protected: PolySet *extrudeDxfData(const LinearExtrudeNode &node, class DxfData &dxf); PolySet *rotateDxfData(const RotateExtrudeNode &node, class DxfData &dxf); CGALEvaluator &cgalevaluator; }; #endif openscad-2013.01+dfsg.orig/src/projection.cc0000644000175000017500000000567212000421643020204 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "projectionnode.h" #include "module.h" #include "context.h" #include "printutils.h" #include "builtin.h" #include "visitor.h" #include "PolySetEvaluator.h" #include #include #include using namespace boost::assign; // bring 'operator+=()' into scope class ProjectionModule : public AbstractModule { public: ProjectionModule() { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *ProjectionModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { ProjectionNode *node = new ProjectionNode(inst); std::vector argnames; argnames += "cut"; std::vector argexpr; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); Value convexity = c.lookup_variable("convexity", true); Value cut = c.lookup_variable("cut", true); node->convexity = (int)convexity.toDouble(); if (cut.type() == Value::BOOL) node->cut_mode = cut.toBool(); std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); return node; } PolySet *ProjectionNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { PRINTB("WARNING: No suitable PolySetEvaluator found for %s module!", this->name()); return NULL; } print_messages_push(); PolySet *ps = evaluator->evaluatePolySet(*this); print_messages_pop(); return ps; } std::string ProjectionNode::toString() const { std::stringstream stream; stream << "projection(cut = " << (this->cut_mode ? "true" : "false") << ", convexity = " << this->convexity << ")"; return stream.str(); } void register_builtin_projection() { Builtins::init("projection", new ProjectionModule()); } openscad-2013.01+dfsg.orig/src/transform.cc0000644000175000017500000001322512076022156020045 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "transformnode.h" #include "module.h" #include "context.h" #include "polyset.h" #include "builtin.h" #include #include #include #include using namespace boost::assign; // bring 'operator+=()' into scope enum transform_type_e { SCALE, ROTATE, MIRROR, TRANSLATE, MULTMATRIX }; class TransformModule : public AbstractModule { public: transform_type_e type; TransformModule(transform_type_e type) : type(type) { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *TransformModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { TransformNode *node = new TransformNode(inst); node->matrix = Transform3d::Identity(); std::vector argnames; std::vector argexpr; switch (this->type) { case SCALE: argnames += "v"; break; case ROTATE: argnames += "a", "v"; break; case MIRROR: argnames += "v"; break; case TRANSLATE: argnames += "v"; break; case MULTMATRIX: argnames += "m"; break; default: assert(false); } Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); if (this->type == SCALE) { Vector3d scalevec(1,1,1); Value v = c.lookup_variable("v"); if (!v.getVec3(scalevec[0], scalevec[1], scalevec[2], 1.0)) { double num; if (v.getDouble(num)) scalevec.setConstant(num); } node->matrix.scale(scalevec); } else if (this->type == ROTATE) { Value val_a = c.lookup_variable("a"); if (val_a.type() == Value::VECTOR) { Eigen::AngleAxisd rotx(0, Vector3d::UnitX()); Eigen::AngleAxisd roty(0, Vector3d::UnitY()); Eigen::AngleAxisd rotz(0, Vector3d::UnitZ()); double a; if (val_a.toVector().size() > 0) { val_a.toVector()[0].getDouble(a); rotx = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitX()); } if (val_a.toVector().size() > 1) { val_a.toVector()[1].getDouble(a); roty = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitY()); } if (val_a.toVector().size() > 2) { val_a.toVector()[2].getDouble(a); rotz = Eigen::AngleAxisd(a*M_PI/180, Vector3d::UnitZ()); } node->matrix.rotate(rotz * roty * rotx); } else { Value val_v = c.lookup_variable("v"); double a = 0; val_a.getDouble(a); Vector3d axis(0,0,1); if (val_v.getVec3(axis[0], axis[1], axis[2])) { if (axis.squaredNorm() > 0) axis.normalize(); } if (axis.squaredNorm() > 0) { node->matrix = Eigen::AngleAxisd(a*M_PI/180, axis); } } } else if (this->type == MIRROR) { Value val_v = c.lookup_variable("v"); double x = 1, y = 0, z = 0; if (val_v.getVec3(x, y, z)) { if (x != 0.0 || y != 0.0 || z != 0.0) { double sn = 1.0 / sqrt(x*x + y*y + z*z); x *= sn, y *= sn, z *= sn; } } if (x != 0.0 || y != 0.0 || z != 0.0) { Eigen::Matrix4d m; m << 1-2*x*x, -2*y*x, -2*z*x, 0, -2*x*y, 1-2*y*y, -2*z*y, 0, -2*x*z, -2*y*z, 1-2*z*z, 0, 0, 0, 0, 1; node->matrix = m; } } else if (this->type == TRANSLATE) { Value v = c.lookup_variable("v"); Vector3d translatevec(0,0,0); v.getVec3(translatevec[0], translatevec[1], translatevec[2]); node->matrix.translate(translatevec); } else if (this->type == MULTMATRIX) { Value v = c.lookup_variable("m"); if (v.type() == Value::VECTOR) { for (int i = 0; i < 16; i++) { size_t x = i / 4, y = i % 4; if (y < v.toVector().size() && v.toVector()[y].type() == Value::VECTOR && x < v.toVector()[y].toVector().size()) v.toVector()[y].toVector()[x].getDouble(node->matrix(y, x)); } } } std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); return node; } std::string TransformNode::toString() const { std::stringstream stream; stream << "multmatrix(["; for (int j=0;j<4;j++) { stream << "["; for (int i=0;i<4;i++) { // FIXME: The 0 test is to avoid a leading minus before a single 0 (cosmetics) stream << ((this->matrix(j, i)==0)?0:this->matrix(j, i)); if (i != 3) stream << ", "; } stream << "]"; if (j != 3) stream << ", "; } stream << "])"; return stream.str(); } std::string TransformNode::name() const { return "transform"; } void register_builtin_transform() { Builtins::init("scale", new TransformModule(SCALE)); Builtins::init("rotate", new TransformModule(ROTATE)); Builtins::init("mirror", new TransformModule(MIRROR)); Builtins::init("translate", new TransformModule(TRANSLATE)); Builtins::init("multmatrix", new TransformModule(MULTMATRIX)); } openscad-2013.01+dfsg.orig/src/linearextrude.cc0000644000175000017500000001321512001150400020662 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "linearextrudenode.h" #include "module.h" #include "context.h" #include "printutils.h" #include "builtin.h" #include "PolySetEvaluator.h" #include "openscad.h" // get_fragments_from_r() #include "mathc99.h" #include #include using namespace boost::assign; // bring 'operator+=()' into scope #include namespace fs = boost::filesystem; class LinearExtrudeModule : public AbstractModule { public: LinearExtrudeModule() { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *LinearExtrudeModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { LinearExtrudeNode *node = new LinearExtrudeNode(inst); std::vector argnames; argnames += "file", "layer", "height", "origin", "scale", "center", "twist", "slices"; std::vector argexpr; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); node->fn = c.lookup_variable("$fn").toDouble(); node->fs = c.lookup_variable("$fs").toDouble(); node->fa = c.lookup_variable("$fa").toDouble(); Value file = c.lookup_variable("file"); Value layer = c.lookup_variable("layer", true); Value height = c.lookup_variable("height", true); Value convexity = c.lookup_variable("convexity", true); Value origin = c.lookup_variable("origin", true); Value scale = c.lookup_variable("scale", true); Value center = c.lookup_variable("center", true); Value twist = c.lookup_variable("twist", true); Value slices = c.lookup_variable("slices", true); if (!file.isUndefined()) { PRINT("DEPRECATED: Support for reading files in linear_extrude will be removed in future releases. Use a child import() instead."); node->filename = c.getAbsolutePath(file.toString()); } // if height not given, and first argument is a number, // then assume it should be the height. if (c.lookup_variable("height").isUndefined() && inst->argnames.size() > 0 && inst->argnames[0] == "" && inst->argvalues[0].type() == Value::NUMBER) { height = Value(inst->argvalues[0]); } node->layername = layer.isUndefined() ? "" : layer.toString(); node->height = height.toDouble(); node->convexity = (int)convexity.toDouble(); origin.getVec2(node->origin_x, node->origin_y); node->scale = scale.toDouble(); if (center.type() == Value::BOOL) node->center = center.toBool(); if (node->height <= 0) node->height = 100; if (node->convexity <= 0) node->convexity = 1; if (node->scale <= 0) node->scale = 1; if (twist.type() == Value::NUMBER) { node->twist = twist.toDouble(); if (slices.type() == Value::NUMBER) { node->slices = (int)slices.toDouble(); } else { node->slices = (int)fmax(2, fabs(get_fragments_from_r(node->height, node->fn, node->fs, node->fa) * node->twist / 360)); } node->has_twist = true; } if (node->filename.empty()) { std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); } return node; } class PolySet *LinearExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { PRINTB("WARNING: No suitable PolySetEvaluator found for %s module!", this->name()); return NULL; } print_messages_push(); PolySet *ps = evaluator->evaluatePolySet(*this); print_messages_pop(); return ps; } std::string LinearExtrudeNode::toString() const { std::stringstream stream; stream << this->name() << "("; if (!this->filename.empty()) { // Ignore deprecated parameters if empty fs::path path((std::string)this->filename); stream << "file = " << this->filename << ", " "layer = " << QuotedString(this->layername) << ", " "origin = [" << this->origin_x << ", " << this->origin_y << "], " "scale = " << this->scale << ", " #ifndef OPENSCAD_TESTING // timestamp is needed for caching, but disturbs the test framework << "timestamp = " << (fs::exists(path) ? fs::last_write_time(path) : 0) << ", " #endif ; } stream << "height = " << std::dec << this->height << ", " "center = " << (this->center?"true":"false") << ", " "convexity = " << this->convexity; if (this->has_twist) { stream << ", twist = " << this->twist << ", slices = " << this->slices; } stream << ", $fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ")"; return stream.str(); } void register_builtin_dxf_linear_extrude() { Builtins::init("dxf_linear_extrude", new LinearExtrudeModule()); Builtins::init("linear_extrude", new LinearExtrudeModule()); } openscad-2013.01+dfsg.orig/src/nodecache.h0000644000175000017500000000267711707632536017627 0ustar chrysnchrysn#ifndef NODECACHE_H_ #define NODECACHE_H_ #include #include #include "node.h" /*! Caches string values per node based on the node.index(). The node index guaranteed to be unique per node tree since the index is reset every time a new tree is generated. */ class NodeCache { public: NodeCache() { } virtual ~NodeCache() { } bool contains(const AbstractNode &node) const { return !(*this)[node].empty(); } /*! Returns a reference to the cached string copy. NB! don't rely on * this reference to be valid for long - if the cache is resized * internally, existing values are lost. */ const std::string & operator[](const AbstractNode &node) const { if (this->cache.size() > node.index()) return this->cache[node.index()]; else return this->nullvalue; } /*! Returns a reference to the cached string copy. NB! don't rely on * this reference to be valid for long - if the cache is resized * internally, existing values are lost. */ const std::string &insert(const class AbstractNode &node, const std::string & value) { if (this->cache.size() <= node.index()) this->cache.resize(node.index() + 1); return this->cache[node.index()] = value; } void remove(const class AbstractNode &node) { if (this->cache.size() > node.index()) this->cache[node.index()] = std::string(); } void clear() { this->cache.clear(); } private: std::vector cache; std::string nullvalue; }; #endif openscad-2013.01+dfsg.orig/src/Preferences.ui0000644000175000017500000002525711714323427020336 0ustar chrysnchrysn Preferences 0 0 531 418 Preferences true 2 Color scheme: false 0 Cornfield Metallic Sunset Qt::Horizontal 40 20 Qt::Vertical 20 645 75 true Font false Qt::Horizontal 40 20 Monaco 12 true Qt::Horizontal 40 20 Qt::Vertical 20 77 OpenCSG Show capability warning true Enable for OpenGL 1.x Turn off rendering at elements Force Goldfeather openCSGWarningBox enableOpenCSGBox forceGoldfeatherBox CGAL Cache size bytes PolySet Cache size bytes Qt::Vertical 20 11 toolBar false Qt::TopToolBarArea Qt::ToolButtonTextUnderIcon false TopToolBarArea false true :/icons/prefs3DView.png:/icons/prefs3DView.png 3D View true :/icons/prefsAdvanced.png:/icons/prefsAdvanced.png Advanced true :/icons/prefsEditor.png:/icons/prefsEditor.png Editor openscad-2013.01+dfsg.orig/src/colornode.h0000644000175000017500000000065711701151225017657 0ustar chrysnchrysn#ifndef COLORNODE_H_ #define COLORNODE_H_ #include "node.h" #include "visitor.h" #include "linalg.h" class ColorNode : public AbstractNode { public: ColorNode(const ModuleInstantiation *mi) : AbstractNode(mi) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const; Color4f color; }; #endif openscad-2013.01+dfsg.orig/src/builtin.h0000644000175000017500000000163411664172102017342 0ustar chrysnchrysn#ifndef BUILTIN_H_ #define BUILTIN_H_ #include #include class Builtins { public: typedef boost::unordered_map FunctionContainer; typedef boost::unordered_map ModuleContainer; static Builtins *instance(bool erase = false); static void init(const char *name, class AbstractModule *module); static void init(const char *name, class AbstractFunction *function); void initialize(); std::string isDeprecated(const std::string &name); const FunctionContainer &functions() { return this->builtinfunctions; } const ModuleContainer &modules() { return this->builtinmodules; } private: Builtins() { } ~Builtins(); FunctionContainer builtinfunctions; ModuleContainer builtinmodules; boost::unordered_map deprecations; }; extern void register_builtin(class Context &ctx); #endif openscad-2013.01+dfsg.orig/src/primitives.cc0000644000175000017500000003737712000421643020232 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "module.h" #include "node.h" #include "polyset.h" #include "context.h" #include "dxfdata.h" #include "dxftess.h" #include "builtin.h" #include "printutils.h" #include "visitor.h" #include #include #include using namespace boost::assign; // bring 'operator+=()' into scope #define F_MINIMUM 0.01 enum primitive_type_e { CUBE, SPHERE, CYLINDER, POLYHEDRON, SQUARE, CIRCLE, POLYGON }; class PrimitiveModule : public AbstractModule { public: primitive_type_e type; PrimitiveModule(primitive_type_e type) : type(type) { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; class PrimitiveNode : public AbstractPolyNode { public: PrimitiveNode(const ModuleInstantiation *mi, primitive_type_e type) : AbstractPolyNode(mi), type(type) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const { switch (this->type) { case CUBE: return "cube"; break; case SPHERE: return "sphere"; break; case CYLINDER: return "cylinder"; break; case POLYHEDRON: return "polyhedron"; break; case SQUARE: return "square"; break; case CIRCLE: return "circle"; break; case POLYGON: return "polygon"; break; default: assert(false && "PrimitiveNode::name(): Unknown primitive type"); return AbstractPolyNode::name(); } } bool center; double x, y, z, h, r1, r2; double fn, fs, fa; primitive_type_e type; int convexity; Value points, paths, triangles; virtual PolySet *evaluate_polyset(class PolySetEvaluator *) const; }; AbstractNode *PrimitiveModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { PrimitiveNode *node = new PrimitiveNode(inst, this->type); node->center = false; node->x = node->y = node->z = node->h = node->r1 = node->r2 = 1; std::vector argnames; std::vector argexpr; switch (this->type) { case CUBE: argnames += "size", "center"; break; case SPHERE: argnames += "r"; break; case CYLINDER: argnames += "h", "r1", "r2", "center"; break; case POLYHEDRON: argnames += "points", "triangles", "convexity"; break; case SQUARE: argnames += "size", "center"; break; case CIRCLE: argnames += "r"; break; case POLYGON: argnames += "points", "paths", "convexity"; break; default: assert(false && "PrimitiveModule::evaluate(): Unknown node type"); } Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); node->fn = c.lookup_variable("$fn").toDouble(); node->fs = c.lookup_variable("$fs").toDouble(); node->fa = c.lookup_variable("$fa").toDouble(); if (node->fs < F_MINIMUM) { PRINTB("WARNING: $fs too small - clamping to %f", F_MINIMUM); node->fs = F_MINIMUM; } if (node->fa < F_MINIMUM) { PRINTB("WARNING: $fa too small - clamping to %f", F_MINIMUM); node->fa = F_MINIMUM; } if (type == CUBE) { Value size = c.lookup_variable("size"); Value center = c.lookup_variable("center"); size.getDouble(node->x); size.getDouble(node->y); size.getDouble(node->z); size.getVec3(node->x, node->y, node->z); if (center.type() == Value::BOOL) { node->center = center.toBool(); } } if (type == SPHERE) { Value r = c.lookup_variable("r"); if (r.type() == Value::NUMBER) { node->r1 = r.toDouble(); } } if (type == CYLINDER) { Value h = c.lookup_variable("h"); Value r, r1, r2; r1 = c.lookup_variable("r1"); r2 = c.lookup_variable("r2"); r = c.lookup_variable("r", true); // silence warning since r has no default value Value center = c.lookup_variable("center"); if (h.type() == Value::NUMBER) { node->h = h.toDouble(); } if (r.type() == Value::NUMBER) { node->r1 = r.toDouble(); node->r2 = r.toDouble(); } if (r1.type() == Value::NUMBER) { node->r1 = r1.toDouble(); } if (r2.type() == Value::NUMBER) { node->r2 = r2.toDouble(); } if (center.type() == Value::BOOL) { node->center = center.toBool(); } } if (type == POLYHEDRON) { node->points = c.lookup_variable("points"); node->triangles = c.lookup_variable("triangles"); } if (type == SQUARE) { Value size = c.lookup_variable("size"); Value center = c.lookup_variable("center"); size.getDouble(node->x); size.getDouble(node->y); size.getVec2(node->x, node->y); if (center.type() == Value::BOOL) { node->center = center.toBool(); } } if (type == CIRCLE) { Value r = c.lookup_variable("r"); if (r.type() == Value::NUMBER) { node->r1 = r.toDouble(); } } if (type == POLYGON) { node->points = c.lookup_variable("points"); node->paths = c.lookup_variable("paths"); } node->convexity = c.lookup_variable("convexity", true).toDouble(); if (node->convexity < 1) node->convexity = 1; return node; } /*! Returns the number of subdivision of a whole circle, given radius and the three special variables $fn, $fs and $fa */ int get_fragments_from_r(double r, double fn, double fs, double fa) { if (r < GRID_FINE) return 0; if (fn > 0.0) return (int)fn; return (int)ceil(fmax(fmin(360.0 / fa, r*2*M_PI / fs), 5)); } struct point2d { double x, y; }; static void generate_circle(point2d *circle, double r, int fragments) { for (int i=0; itype == CUBE && this->x > 0 && this->y > 0 && this->z > 0) { double x1, x2, y1, y2, z1, z2; if (this->center) { x1 = -this->x/2; x2 = +this->x/2; y1 = -this->y/2; y2 = +this->y/2; z1 = -this->z/2; z2 = +this->z/2; } else { x1 = y1 = z1 = 0; x2 = this->x; y2 = this->y; z2 = this->z; } p->append_poly(); // top p->append_vertex(x1, y1, z2); p->append_vertex(x2, y1, z2); p->append_vertex(x2, y2, z2); p->append_vertex(x1, y2, z2); p->append_poly(); // bottom p->append_vertex(x1, y2, z1); p->append_vertex(x2, y2, z1); p->append_vertex(x2, y1, z1); p->append_vertex(x1, y1, z1); p->append_poly(); // side1 p->append_vertex(x1, y1, z1); p->append_vertex(x2, y1, z1); p->append_vertex(x2, y1, z2); p->append_vertex(x1, y1, z2); p->append_poly(); // side2 p->append_vertex(x2, y1, z1); p->append_vertex(x2, y2, z1); p->append_vertex(x2, y2, z2); p->append_vertex(x2, y1, z2); p->append_poly(); // side3 p->append_vertex(x2, y2, z1); p->append_vertex(x1, y2, z1); p->append_vertex(x1, y2, z2); p->append_vertex(x2, y2, z2); p->append_poly(); // side4 p->append_vertex(x1, y2, z1); p->append_vertex(x1, y1, z1); p->append_vertex(x1, y1, z2); p->append_vertex(x1, y2, z2); } if (this->type == SPHERE && this->r1 > 0) { struct ring_s { point2d *points; double z; }; int fragments = get_fragments_from_r(r1, fn, fs, fa); int rings = (fragments+1)/2; // Uncomment the following three lines to enable experimental sphere tesselation // if (rings % 2 == 0) rings++; // To ensure that the middle ring is at phi == 0 degrees ring_s *ring = new ring_s[rings]; // double offset = 0.5 * ((fragments / 2) % 2); for (int i = 0; i < rings; i++) { // double phi = (M_PI * (i + offset)) / (fragments/2); double phi = (M_PI * (i + 0.5)) / rings; double r = r1 * sin(phi); ring[i].z = r1 * cos(phi); ring[i].points = new point2d[fragments]; generate_circle(ring[i].points, r, fragments); } p->append_poly(); for (int i = 0; i < fragments; i++) p->append_vertex(ring[0].points[i].x, ring[0].points[i].y, ring[0].z); for (int i = 0; i < rings-1; i++) { ring_s *r1 = &ring[i]; ring_s *r2 = &ring[i+1]; int r1i = 0, r2i = 0; while (r1i < fragments || r2i < fragments) { if (r1i >= fragments) goto sphere_next_r2; if (r2i >= fragments) goto sphere_next_r1; if ((double)r1i / fragments < (double)r2i / fragments) { sphere_next_r1: p->append_poly(); int r1j = (r1i+1) % fragments; p->insert_vertex(r1->points[r1i].x, r1->points[r1i].y, r1->z); p->insert_vertex(r1->points[r1j].x, r1->points[r1j].y, r1->z); p->insert_vertex(r2->points[r2i % fragments].x, r2->points[r2i % fragments].y, r2->z); r1i++; } else { sphere_next_r2: p->append_poly(); int r2j = (r2i+1) % fragments; p->append_vertex(r2->points[r2i].x, r2->points[r2i].y, r2->z); p->append_vertex(r2->points[r2j].x, r2->points[r2j].y, r2->z); p->append_vertex(r1->points[r1i % fragments].x, r1->points[r1i % fragments].y, r1->z); r2i++; } } } p->append_poly(); for (int i = 0; i < fragments; i++) p->insert_vertex(ring[rings-1].points[i].x, ring[rings-1].points[i].y, ring[rings-1].z); delete[] ring; } if (this->type == CYLINDER && this->h > 0 && this->r1 >=0 && this->r2 >= 0 && (this->r1 > 0 || this->r2 > 0)) { int fragments = get_fragments_from_r(fmax(this->r1, this->r2), this->fn, this->fs, this->fa); double z1, z2; if (this->center) { z1 = -this->h/2; z2 = +this->h/2; } else { z1 = 0; z2 = this->h; } point2d *circle1 = new point2d[fragments]; point2d *circle2 = new point2d[fragments]; generate_circle(circle1, r1, fragments); generate_circle(circle2, r2, fragments); for (int i=0; iappend_poly(); p->insert_vertex(circle1[i].x, circle1[i].y, z1); p->insert_vertex(circle2[i].x, circle2[i].y, z2); p->insert_vertex(circle2[j].x, circle2[j].y, z2); p->insert_vertex(circle1[j].x, circle1[j].y, z1); } else { if (r1 > 0) { p->append_poly(); p->insert_vertex(circle1[i].x, circle1[i].y, z1); p->insert_vertex(circle2[i].x, circle2[i].y, z2); p->insert_vertex(circle1[j].x, circle1[j].y, z1); } if (r2 > 0) { p->append_poly(); p->insert_vertex(circle2[i].x, circle2[i].y, z2); p->insert_vertex(circle2[j].x, circle2[j].y, z2); p->insert_vertex(circle1[j].x, circle1[j].y, z1); } } } if (this->r1 > 0) { p->append_poly(); for (int i=0; iinsert_vertex(circle1[i].x, circle1[i].y, z1); } if (this->r2 > 0) { p->append_poly(); for (int i=0; iappend_vertex(circle2[i].x, circle2[i].y, z2); } delete[] circle1; delete[] circle2; } if (this->type == POLYHEDRON) { p->convexity = this->convexity; for (size_t i=0; itriangles.toVector().size(); i++) { p->append_poly(); for (size_t j=0; jtriangles.toVector()[i].toVector().size(); j++) { size_t pt = this->triangles.toVector()[i].toVector()[j].toDouble(); if (pt < this->points.toVector().size()) { double px, py, pz; if (this->points.toVector()[pt].getVec3(px, py, pz)) p->insert_vertex(px, py, pz); } } } } if (this->type == SQUARE && x > 0 && y > 0) { double x1, x2, y1, y2; if (this->center) { x1 = -this->x/2; x2 = +this->x/2; y1 = -this->y/2; y2 = +this->y/2; } else { x1 = y1 = 0; x2 = this->x; y2 = this->y; } p->is2d = true; p->append_poly(); p->append_vertex(x1, y1); p->append_vertex(x2, y1); p->append_vertex(x2, y2); p->append_vertex(x1, y2); } if (this->type == CIRCLE) { int fragments = get_fragments_from_r(this->r1, this->fn, this->fs, this->fa); p->is2d = true; p->append_poly(); for (int i=0; i < fragments; i++) { double phi = (M_PI*2*i) / fragments; p->append_vertex(this->r1*cos(phi), this->r1*sin(phi)); } } if (this->type == POLYGON) { DxfData dd; for (size_t i=0; ipoints.toVector().size(); i++) { double x,y; if (!this->points.toVector()[i].getVec2(x, y)) { PRINTB("ERROR: Unable to convert point at index %d to a vec2 of numbers", i); delete p; return NULL; } dd.points.push_back(Vector2d(x, y)); } if (this->paths.toVector().size() == 0) { dd.paths.push_back(DxfData::Path()); for (size_t i=0; ipoints.toVector().size(); i++) { assert(i < dd.points.size()); // FIXME: Not needed, but this used to be an 'if' dd.paths.back().indices.push_back(i); } if (dd.paths.back().indices.size() > 0) { dd.paths.back().indices.push_back(dd.paths.back().indices.front()); dd.paths.back().is_closed = true; } } else { for (size_t i=0; ipaths.toVector().size(); i++) { dd.paths.push_back(DxfData::Path()); for (size_t j=0; jpaths.toVector()[i].toVector().size(); j++) { unsigned int idx = this->paths.toVector()[i].toVector()[j].toDouble(); if (idx < dd.points.size()) { dd.paths.back().indices.push_back(idx); } } if (dd.paths.back().indices.empty()) { dd.paths.pop_back(); } else { dd.paths.back().indices.push_back(dd.paths.back().indices.front()); dd.paths.back().is_closed = true; } } } p->is2d = true; p->convexity = convexity; dxf_tesselate(p, dd, 0, true, false, 0); dxf_border_to_ps(p, dd); } return p; } std::string PrimitiveNode::toString() const { std::stringstream stream; stream << this->name(); switch (this->type) { case CUBE: stream << "(size = [" << this->x << ", " << this->y << ", " << this->z << "], " << "center = " << (center ? "true" : "false") << ")"; break; case SPHERE: stream << "($fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ", r = " << this->r1 << ")"; break; case CYLINDER: stream << "($fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ", h = " << this->h << ", r1 = " << this->r1 << ", r2 = " << this->r2 << ", center = " << (center ? "true" : "false") << ")"; break; case POLYHEDRON: stream << "(points = " << this->points << ", triangles = " << this->triangles << ", convexity = " << this->convexity << ")"; break; case SQUARE: stream << "(size = [" << this->x << ", " << this->y << "], " << "center = " << (center ? "true" : "false") << ")"; break; case CIRCLE: stream << "($fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ", r = " << this->r1 << ")"; break; case POLYGON: stream << "(points = " << this->points << ", paths = " << this->paths << ", convexity = " << this->convexity << ")"; break; default: assert(false); } return stream.str(); } void register_builtin_primitives() { Builtins::init("cube", new PrimitiveModule(CUBE)); Builtins::init("sphere", new PrimitiveModule(SPHERE)); Builtins::init("cylinder", new PrimitiveModule(CYLINDER)); Builtins::init("polyhedron", new PrimitiveModule(POLYHEDRON)); Builtins::init("square", new PrimitiveModule(SQUARE)); Builtins::init("circle", new PrimitiveModule(CIRCLE)); Builtins::init("polygon", new PrimitiveModule(POLYGON)); } openscad-2013.01+dfsg.orig/src/mainwin.cc0000644000175000017500000015132612076056042017502 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "PolySetCache.h" #include "ModuleCache.h" #include "MainWindow.h" #include "openscad.h" // examplesdir #include "parsersettings.h" #include "Preferences.h" #include "printutils.h" #include "node.h" #include "polyset.h" #include "csgterm.h" #include "highlighter.h" #include "export.h" #include "builtin.h" #include "progress.h" #include "dxfdim.h" #include "AboutDialog.h" #ifdef ENABLE_OPENCSG #include "CSGTermEvaluator.h" #include "OpenCSGRenderer.h" #include #endif #include "ProgressWidget.h" #include "ThrownTogetherRenderer.h" #include "csgtermnormalizer.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef _QCODE_EDIT_ #include "qdocument.h" #include "qformatscheme.h" #include "qlanguagefactory.h" #endif #include #include #include #include #include #include #ifdef ENABLE_CGAL #include "CGALCache.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #include "CGALRenderer.h" #include "CGAL_Nef_polyhedron.h" #include "cgal.h" #include "cgalworker.h" #endif // ENABLE_CGAL #ifndef OPENCSG_VERSION_STRING #define OPENCSG_VERSION_STRING "unknown, <1.3.2" #endif extern QString examplesdir; // Global application state unsigned int GuiLocker::gui_locked = 0; #define QUOTE(x__) # x__ #define QUOTED(x__) QUOTE(x__) static char helptitle[] = "OpenSCAD " QUOTED(OPENSCAD_VERSION) #ifdef OPENSCAD_COMMIT " (git " QUOTED(OPENSCAD_COMMIT) ")" #endif "\nhttp://www.openscad.org\n\n"; static char copyrighttext[] = "Copyright (C) 2009-2013 Marius Kintel and Clifford Wolf \n" "\n" "This program is free software; you can redistribute it and/or modify " "it under the terms of the GNU General Public License as published by " "the Free Software Foundation; either version 2 of the License, or " "(at your option) any later version."; static void settings_setValueList(const QString &key,const QList &list) { QSettings settings; settings.beginWriteArray(key); for (int i=0;i settings_valueList(const QString &key, const QList &defaultList = QList()) { QSettings settings; QList result; if (settings.contains(key+"/size")){ int length = settings.beginReadArray(key); for (int i = 0; i < length; ++i) { settings.setArrayIndex(i); result += settings.value("entry").toInt(); } settings.endArray(); return result; } else { return defaultList; } } MainWindow::MainWindow(const QString &filename) : progresswidget(NULL) { setupUi(this); this->cgalworker = new CGALWorker(); connect(this->cgalworker, SIGNAL(done(CGAL_Nef_polyhedron *)), this, SLOT(actionRenderCGALDone(CGAL_Nef_polyhedron *))); register_builtin(root_ctx); this->openglbox = NULL; root_module = NULL; absolute_root_node = NULL; this->root_chain = NULL; #ifdef ENABLE_CGAL this->root_N = NULL; this->cgalRenderer = NULL; #endif #ifdef ENABLE_OPENCSG this->opencsgRenderer = NULL; #endif this->thrownTogetherRenderer = NULL; highlights_chain = NULL; background_chain = NULL; root_node = NULL; tval = 0; fps = 0; fsteps = 1; highlighter = NULL; #ifdef _QCODE_EDIT_ QFormatScheme *formats = new QFormatScheme("qxs/openscad.qxf"); QDocument::setDefaultFormatScheme(formats); QLanguageFactory *languages = new QLanguageFactory(formats,this); languages->addDefinitionPath("qxs"); languages->setLanguage(editor, "openscad"); #else editor->setTabStopWidth(30); #endif editor->setLineWrapping(true); // Not designable this->glview->statusLabel = new QLabel(this); statusBar()->addWidget(this->glview->statusLabel); animate_timer = new QTimer(this); connect(animate_timer, SIGNAL(timeout()), this, SLOT(updateTVal())); autoReloadTimer = new QTimer(this); autoReloadTimer->setSingleShot(false); connect(autoReloadTimer, SIGNAL(timeout()), this, SLOT(checkAutoReload())); connect(this->e_tval, SIGNAL(textChanged(QString)), this, SLOT(actionCompile())); connect(this->e_fps, SIGNAL(textChanged(QString)), this, SLOT(updatedFps())); animate_panel->hide(); // File menu connect(this->fileActionNew, SIGNAL(triggered()), this, SLOT(actionNew())); connect(this->fileActionOpen, SIGNAL(triggered()), this, SLOT(actionOpen())); connect(this->fileActionSave, SIGNAL(triggered()), this, SLOT(actionSave())); connect(this->fileActionSaveAs, SIGNAL(triggered()), this, SLOT(actionSaveAs())); connect(this->fileActionReload, SIGNAL(triggered()), this, SLOT(actionReload())); connect(this->fileActionQuit, SIGNAL(triggered()), this, SLOT(quit())); #ifndef __APPLE__ QList shortcuts = this->fileActionSave->shortcuts(); shortcuts.push_back(QKeySequence(Qt::Key_F2)); this->fileActionSave->setShortcuts(shortcuts); shortcuts = this->fileActionReload->shortcuts(); shortcuts.push_back(QKeySequence(Qt::Key_F3)); this->fileActionReload->setShortcuts(shortcuts); #endif // Open Recent for (int i = 0;iactionRecentFile[i] = new QAction(this); this->actionRecentFile[i]->setVisible(false); this->menuOpenRecent->addAction(this->actionRecentFile[i]); connect(this->actionRecentFile[i], SIGNAL(triggered()), this, SLOT(actionOpenRecent())); } this->menuOpenRecent->addSeparator(); this->menuOpenRecent->addAction(this->fileActionClearRecent); connect(this->fileActionClearRecent, SIGNAL(triggered()), this, SLOT(clearRecentFiles())); if (!examplesdir.isEmpty()) { bool found_example = false; QStringList examples = QDir(examplesdir).entryList(QStringList("*.scad"), QDir::Files | QDir::Readable, QDir::Name); foreach (const QString &ex, examples) { this->menuExamples->addAction(ex, this, SLOT(actionOpenExample())); found_example = true; } if (!found_example) { delete this->menuExamples; this->menuExamples = NULL; } } else { delete this->menuExamples; this->menuExamples = NULL; } // Edit menu connect(this->editActionUndo, SIGNAL(triggered()), editor, SLOT(undo())); connect(this->editActionRedo, SIGNAL(triggered()), editor, SLOT(redo())); connect(this->editActionCut, SIGNAL(triggered()), editor, SLOT(cut())); connect(this->editActionCopy, SIGNAL(triggered()), editor, SLOT(copy())); connect(this->editActionPaste, SIGNAL(triggered()), editor, SLOT(paste())); connect(this->editActionIndent, SIGNAL(triggered()), editor, SLOT(indentSelection())); connect(this->editActionUnindent, SIGNAL(triggered()), editor, SLOT(unindentSelection())); connect(this->editActionComment, SIGNAL(triggered()), editor, SLOT(commentSelection())); connect(this->editActionUncomment, SIGNAL(triggered()), editor, SLOT(uncommentSelection())); connect(this->editActionPasteVPT, SIGNAL(triggered()), this, SLOT(pasteViewportTranslation())); connect(this->editActionPasteVPR, SIGNAL(triggered()), this, SLOT(pasteViewportRotation())); connect(this->editActionZoomIn, SIGNAL(triggered()), editor, SLOT(zoomIn())); connect(this->editActionZoomOut, SIGNAL(triggered()), editor, SLOT(zoomOut())); connect(this->editActionHide, SIGNAL(triggered()), this, SLOT(hideEditor())); connect(this->editActionPreferences, SIGNAL(triggered()), this, SLOT(preferences())); // Design menu connect(this->designActionAutoReload, SIGNAL(toggled(bool)), this, SLOT(autoReloadSet(bool))); connect(this->designActionReloadAndCompile, SIGNAL(triggered()), this, SLOT(actionReloadCompile())); connect(this->designActionCompile, SIGNAL(triggered()), this, SLOT(actionCompile())); #ifdef ENABLE_CGAL connect(this->designActionCompileAndRender, SIGNAL(triggered()), this, SLOT(actionRenderCGAL())); #else this->designActionCompileAndRender->setVisible(false); #endif connect(this->designActionDisplayAST, SIGNAL(triggered()), this, SLOT(actionDisplayAST())); connect(this->designActionDisplayCSGTree, SIGNAL(triggered()), this, SLOT(actionDisplayCSGTree())); connect(this->designActionDisplayCSGProducts, SIGNAL(triggered()), this, SLOT(actionDisplayCSGProducts())); connect(this->designActionExportSTL, SIGNAL(triggered()), this, SLOT(actionExportSTL())); connect(this->designActionExportOFF, SIGNAL(triggered()), this, SLOT(actionExportOFF())); connect(this->designActionExportDXF, SIGNAL(triggered()), this, SLOT(actionExportDXF())); connect(this->designActionExportCSG, SIGNAL(triggered()), this, SLOT(actionExportCSG())); connect(this->designActionExportImage, SIGNAL(triggered()), this, SLOT(actionExportImage())); connect(this->designActionFlushCaches, SIGNAL(triggered()), this, SLOT(actionFlushCaches())); // View menu #ifndef ENABLE_OPENCSG this->viewActionOpenCSG->setVisible(false); #else connect(this->viewActionOpenCSG, SIGNAL(triggered()), this, SLOT(viewModeOpenCSG())); if (!this->glview->hasOpenCSGSupport()) { this->viewActionOpenCSG->setEnabled(false); } #endif #ifdef ENABLE_CGAL connect(this->viewActionCGALSurfaces, SIGNAL(triggered()), this, SLOT(viewModeCGALSurface())); connect(this->viewActionCGALGrid, SIGNAL(triggered()), this, SLOT(viewModeCGALGrid())); #else this->viewActionCGALSurfaces->setVisible(false); this->viewActionCGALGrid->setVisible(false); #endif connect(this->viewActionThrownTogether, SIGNAL(triggered()), this, SLOT(viewModeThrownTogether())); connect(this->viewActionShowEdges, SIGNAL(triggered()), this, SLOT(viewModeShowEdges())); connect(this->viewActionShowAxes, SIGNAL(triggered()), this, SLOT(viewModeShowAxes())); connect(this->viewActionShowCrosshairs, SIGNAL(triggered()), this, SLOT(viewModeShowCrosshairs())); connect(this->viewActionAnimate, SIGNAL(triggered()), this, SLOT(viewModeAnimate())); connect(this->viewActionTop, SIGNAL(triggered()), this, SLOT(viewAngleTop())); connect(this->viewActionBottom, SIGNAL(triggered()), this, SLOT(viewAngleBottom())); connect(this->viewActionLeft, SIGNAL(triggered()), this, SLOT(viewAngleLeft())); connect(this->viewActionRight, SIGNAL(triggered()), this, SLOT(viewAngleRight())); connect(this->viewActionFront, SIGNAL(triggered()), this, SLOT(viewAngleFront())); connect(this->viewActionBack, SIGNAL(triggered()), this, SLOT(viewAngleBack())); connect(this->viewActionDiagonal, SIGNAL(triggered()), this, SLOT(viewAngleDiagonal())); connect(this->viewActionCenter, SIGNAL(triggered()), this, SLOT(viewCenter())); connect(this->viewActionPerspective, SIGNAL(triggered()), this, SLOT(viewPerspective())); connect(this->viewActionOrthogonal, SIGNAL(triggered()), this, SLOT(viewOrthogonal())); connect(this->viewActionHide, SIGNAL(triggered()), this, SLOT(hideConsole())); // Help menu connect(this->helpActionAbout, SIGNAL(triggered()), this, SLOT(helpAbout())); connect(this->helpActionHomepage, SIGNAL(triggered()), this, SLOT(helpHomepage())); connect(this->helpActionManual, SIGNAL(triggered()), this, SLOT(helpManual())); connect(this->helpActionLibraryInfo, SIGNAL(triggered()), this, SLOT(helpLibrary())); setCurrentOutput(); PRINT(helptitle); PRINT(copyrighttext); PRINT(""); if (!filename.isEmpty()) { openFile(filename); } else { setFileName(""); } updateRecentFileActions(); connect(editor->document(), SIGNAL(contentsChanged()), this, SLOT(animateUpdateDocChanged())); #ifdef _QCODE_EDIT_ connect(editor, SIGNAL(contentModified(bool)), this, SLOT(setWindowModified(bool))); connect(editor, SIGNAL(contentModified(bool)), fileActionSave, SLOT(setEnabled(bool))); #else connect(editor->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool))); connect(editor->document(), SIGNAL(modificationChanged(bool)), fileActionSave, SLOT(setEnabled(bool))); #endif connect(this->glview, SIGNAL(doAnimateUpdate()), this, SLOT(animateUpdate())); connect(Preferences::inst(), SIGNAL(requestRedraw()), this->glview, SLOT(updateGL())); connect(Preferences::inst(), SIGNAL(fontChanged(const QString&,uint)), this, SLOT(setFont(const QString&,uint))); connect(Preferences::inst(), SIGNAL(openCSGSettingsChanged()), this, SLOT(openCSGSettingsChanged())); Preferences::inst()->apply(); // make sure it looks nice.. QSettings settings; resize(settings.value("window/size", QSize(800, 600)).toSize()); move(settings.value("window/position", QPoint(0, 0)).toPoint()); QList s1sizes = settings_valueList("window/splitter1sizes",QList()<<400<<400); QList s2sizes = settings_valueList("window/splitter2sizes",QList()<<400<<200); splitter1->setSizes(s1sizes); splitter2->setSizes(s2sizes); // display this window and check for OpenGL 2.0 (OpenCSG) support viewModeThrownTogether(); show(); #ifdef ENABLE_OPENCSG viewModeOpenCSG(); #else viewModeThrownTogether(); #endif loadViewSettings(); loadDesignSettings(); setAcceptDrops(true); clearCurrentOutput(); } void MainWindow::loadViewSettings(){ QSettings settings; if (settings.value("view/showEdges").toBool()) { viewActionShowEdges->setChecked(true); viewModeShowEdges(); } if (settings.value("view/showAxes").toBool()) { viewActionShowAxes->setChecked(true); viewModeShowAxes(); } if (settings.value("view/showCrosshairs").toBool()) { viewActionShowCrosshairs->setChecked(true); viewModeShowCrosshairs(); } if (settings.value("view/orthogonalProjection").toBool()) { viewOrthogonal(); } else { viewPerspective(); } if (settings.value("view/hideConsole").toBool()) { viewActionHide->setChecked(true); hideConsole(); } if (settings.value("view/hideEditor").toBool()) { editActionHide->setChecked(true); hideEditor(); } } void MainWindow::loadDesignSettings() { QSettings settings; if (settings.value("design/autoReload").toBool()) { designActionAutoReload->setChecked(true); } uint polySetCacheSize = Preferences::inst()->getValue("advanced/polysetCacheSize").toUInt(); PolySetCache::instance()->setMaxSize(polySetCacheSize); uint cgalCacheSize = Preferences::inst()->getValue("advanced/cgalCacheSize").toUInt(); CGALCache::instance()->setMaxSize(cgalCacheSize); } MainWindow::~MainWindow() { if (root_module) delete root_module; if (root_node) delete root_node; #ifdef ENABLE_CGAL if (this->root_N) delete this->root_N; delete this->cgalRenderer; #endif #ifdef ENABLE_OPENCSG delete this->opencsgRenderer; #endif } void MainWindow::showProgress() { this->statusBar()->addPermanentWidget(qobject_cast(sender())); } void MainWindow::report_func(const class AbstractNode*, void *vp, int mark) { MainWindow *thisp = static_cast(vp); int v = (int)((mark*100.0) / progress_report_count); int percent = v < 100 ? v : 99; if (percent > thisp->progresswidget->value()) { QMetaObject::invokeMethod(thisp->progresswidget, "setValue", Qt::QueuedConnection, Q_ARG(int, percent)); QApplication::processEvents(); } // FIXME: Check if cancel was requested by e.g. Application quit if (thisp->progresswidget->wasCanceled()) throw ProgressCancelException(); } /*! Requests to open a file from an external event, e.g. by double-clicking a filename. */ #ifdef ENABLE_MDI void MainWindow::requestOpenFile(const QString &filename) { new MainWindow(filename); } #else void MainWindow::requestOpenFile(const QString &) { } #endif void MainWindow::openFile(const QString &new_filename) { #ifdef ENABLE_MDI #ifdef _QCODE_EDIT_ if (this->editor->document()->lines() > 1 || !this->editor->document()->text(true, false).trimmed().isEmpty()) { #else if (!editor->toPlainText().isEmpty()) { #endif new MainWindow(new_filename); clearCurrentOutput(); return; } #endif setFileName(new_filename); refreshDocument(); updateRecentFiles(); } void MainWindow::setFileName(const QString &filename) { if (filename.isEmpty()) { this->fileName.clear(); this->root_ctx.setDocumentPath(currentdir); setWindowTitle("OpenSCAD - New Document[*]"); } else { QFileInfo fileinfo(filename); setWindowTitle("OpenSCAD - " + fileinfo.fileName() + "[*]"); // Check that the canonical file path exists - only update recent files // if it does. Should prevent empty list items on initial open etc. QString infoFileName = fileinfo.absoluteFilePath(); if (!infoFileName.isEmpty()) { this->fileName = infoFileName; } else { this->fileName = fileinfo.fileName(); } this->root_ctx.setDocumentPath(fileinfo.dir().absolutePath().toStdString()); QDir::setCurrent(fileinfo.dir().absolutePath()); } } void MainWindow::updateRecentFiles() { // Check that the canonical file path exists - only update recent files // if it does. Should prevent empty list items on initial open etc. QFileInfo fileinfo(this->fileName); QString infoFileName = fileinfo.absoluteFilePath(); QSettings settings; // already set up properly via main.cpp QStringList files = settings.value("recentFileList").toStringList(); files.removeAll(infoFileName); files.prepend(infoFileName); while (files.size() > maxRecentFiles) files.removeLast(); settings.setValue("recentFileList", files); foreach(QWidget *widget, QApplication::topLevelWidgets()) { MainWindow *mainWin = qobject_cast(widget); if (mainWin) { mainWin->updateRecentFileActions(); } } } void MainWindow::updatedFps() { bool fps_ok; double fps = this->e_fps->text().toDouble(&fps_ok); animate_timer->stop(); if (fps_ok && fps > 0) { animate_timer->setSingleShot(false); animate_timer->setInterval(int(1000 / this->e_fps->text().toDouble())); animate_timer->start(); } } void MainWindow::updateTVal() { bool fps_ok; double fps = this->e_fps->text().toDouble(&fps_ok); if (fps_ok) { if (fps <= 0) { actionCompile(); } else { double s = this->e_fsteps->text().toDouble(); double t = this->e_tval->text().toDouble() + 1/s; QString txt; txt.sprintf("%.5f", t >= 1.0 ? 0.0 : t); this->e_tval->setText(txt); } } } void MainWindow::refreshDocument() { setCurrentOutput(); if (!this->fileName.isEmpty()) { QFile file(this->fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { PRINTB("Failed to open file %s: %s", this->fileName.toStdString() % file.errorString().toStdString()); } else { QTextStream reader(&file); reader.setCodec("UTF-8"); QString text = reader.readAll(); PRINTB("Loaded design '%s'.", this->fileName.toStdString()); editor->setPlainText(text); } } setCurrentOutput(); } AbstractNode *MainWindow::find_root_tag(AbstractNode *n) { BOOST_FOREACH (AbstractNode *v, n->children) { if (v->modinst->isRoot()) return v; if (AbstractNode *vroot = find_root_tag(v)) return vroot; } return NULL; } /*! Parse and evaluate the design => this->root_node Returns true if something was compiled, false if nothing was changed and the root_node was left untouched. */ bool MainWindow::compile(bool reload, bool procevents) { if (!compileTopLevelDocument(reload)) return false; // Invalidate renderers before we kill the CSG tree this->glview->setRenderer(NULL); delete this->opencsgRenderer; this->opencsgRenderer = NULL; delete this->thrownTogetherRenderer; this->thrownTogetherRenderer = NULL; // Remove previous CSG tree delete this->absolute_root_node; this->absolute_root_node = NULL; this->root_raw_term.reset(); this->root_norm_term.reset(); delete this->root_chain; this->root_chain = NULL; this->highlight_terms.clear(); delete this->highlights_chain; this->highlights_chain = NULL; this->background_terms.clear(); delete this->background_chain; this->background_chain = NULL; this->root_node = NULL; this->tree.setRoot(NULL); if (this->root_module) { // Evaluate CSG tree PRINT("Compiling design (CSG Tree generation)..."); if (procevents) QApplication::processEvents(); AbstractNode::resetIndexCounter(); this->root_inst = ModuleInstantiation(); this->absolute_root_node = this->root_module->evaluate(&this->root_ctx, &this->root_inst); if (this->absolute_root_node) { // Do we have an explicit root node (! modifier)? if (!(this->root_node = find_root_tag(this->absolute_root_node))) { this->root_node = this->absolute_root_node; } // FIXME: Consider giving away ownership of root_node to the Tree, or use reference counted pointers this->tree.setRoot(this->root_node); // Dump the tree (to initialize caches). // FIXME: We shouldn't really need to do this explicitly.. this->tree.getString(*this->root_node); } } if (!this->root_node) { if (parser_error_pos < 0) { PRINT("ERROR: Compilation failed! (no top level object found)"); } else { PRINT("ERROR: Compilation failed!"); } if (procevents) QApplication::processEvents(); } return true; } /*! Generates CSG tree for OpenCSG evaluation. Assumes that the design has been parsed and evaluated (this->root_node is set) */ void MainWindow::compileCSG(bool procevents) { assert(this->root_node); PRINT("Compiling design (CSG Products generation)..."); if (procevents) QApplication::processEvents(); // Main CSG evaluation QTime t; t.start(); this->progresswidget = new ProgressWidget(this); connect(this->progresswidget, SIGNAL(requestShow()), this, SLOT(showProgress())); progress_report_prep(this->root_node, report_func, this); try { CGALEvaluator cgalevaluator(this->tree); PolySetCGALEvaluator psevaluator(cgalevaluator); CSGTermEvaluator csgrenderer(this->tree, &psevaluator); this->root_raw_term = csgrenderer.evaluateCSGTerm(*root_node, highlight_terms, background_terms); if (!root_raw_term) { PRINT("ERROR: CSG generation failed! (no top level object found)"); if (procevents) QApplication::processEvents(); } PolySetCache::instance()->print(); CGALCache::instance()->print(); } catch (const ProgressCancelException &e) { PRINT("CSG generation cancelled."); } progress_report_fin(); this->statusBar()->removeWidget(this->progresswidget); delete this->progresswidget; this->progresswidget = NULL; if (root_raw_term) { PRINT("Compiling design (CSG Products normalization)..."); if (procevents) QApplication::processEvents(); size_t normalizelimit = 2 * Preferences::inst()->getValue("advanced/openCSGLimit").toUInt(); CSGTermNormalizer normalizer(normalizelimit); this->root_norm_term = normalizer.normalize(this->root_raw_term); if (this->root_norm_term) { this->root_chain = new CSGChain(); this->root_chain->import(this->root_norm_term); } else { this->root_chain = NULL; PRINT("WARNING: CSG normalization resulted in an empty tree"); if (procevents) QApplication::processEvents(); } if (highlight_terms.size() > 0) { PRINTB("Compiling highlights (%d CSG Trees)...", highlight_terms.size()); if (procevents) QApplication::processEvents(); highlights_chain = new CSGChain(); for (unsigned int i = 0; i < highlight_terms.size(); i++) { highlight_terms[i] = normalizer.normalize(highlight_terms[i]); highlights_chain->import(highlight_terms[i]); } } if (background_terms.size() > 0) { PRINTB("Compiling background (%d CSG Trees)...", background_terms.size()); if (procevents) QApplication::processEvents(); background_chain = new CSGChain(); for (unsigned int i = 0; i < background_terms.size(); i++) { background_terms[i] = normalizer.normalize(background_terms[i]); background_chain->import(background_terms[i]); } } if (this->root_chain && (this->root_chain->polysets.size() > Preferences::inst()->getValue("advanced/openCSGLimit").toUInt())) { PRINTB("WARNING: Normalized tree has %d elements!", this->root_chain->polysets.size()); PRINT("WARNING: OpenCSG rendering has been disabled."); } else { PRINTB("Normalized CSG tree has %d elements", (this->root_chain ? this->root_chain->polysets.size() : 0)); this->opencsgRenderer = new OpenCSGRenderer(this->root_chain, this->highlights_chain, this->background_chain, this->glview->shaderinfo); } this->thrownTogetherRenderer = new ThrownTogetherRenderer(this->root_chain, this->highlights_chain, this->background_chain); PRINT("CSG generation finished."); int s = t.elapsed() / 1000; PRINTB("Total rendering time: %d hours, %d minutes, %d seconds", (s / (60*60)) % ((s / 60) % 60) % (s % 60)); if (procevents) QApplication::processEvents(); } } void MainWindow::actionNew() { #ifdef ENABLE_MDI new MainWindow(QString()); #else if (!maybeSave()) return; setFileName(""); editor->setPlainText(""); #endif } void MainWindow::actionOpen() { QString new_filename = QFileDialog::getOpenFileName(this, "Open File", "", "OpenSCAD Designs (*.scad *.csg)"); #ifdef ENABLE_MDI if (!new_filename.isEmpty()) { new MainWindow(new_filename); } #else if (!new_filename.isEmpty()) { if (!maybeSave()) return; setCurrentOutput(); openFile(new_filename); clearCurrentOutput(); } #endif } void MainWindow::actionOpenRecent() { QAction *action = qobject_cast(sender()); #ifdef ENABLE_MDI new MainWindow(action->data().toString()); #else if (!maybeSave()) return; if (action) { openFile(action->data().toString()); } #endif } void MainWindow::clearRecentFiles() { QSettings settings; // already set up properly via main.cpp QStringList files; settings.setValue("recentFileList", files); updateRecentFileActions(); } void MainWindow::updateRecentFileActions() { QSettings settings; // set up project and program properly in main.cpp QStringList files = settings.value("recentFileList").toStringList(); int originalNumRecentFiles = files.size(); // Remove any duplicate or empty entries from the list #if (QT_VERSION >= QT_VERSION_CHECK(4, 5, 0)) files.removeDuplicates(); #endif files.removeAll(QString()); // Now remove any entries which do not exist for(int i = files.size()-1; i >= 0; --i) { QFileInfo fileInfo(files[i]); if (!QFile(fileInfo.absoluteFilePath()).exists()) files.removeAt(i); } int numRecentFiles = qMin(files.size(), static_cast(maxRecentFiles)); for (int i = 0; i < numRecentFiles; ++i) { this->actionRecentFile[i]->setText(QFileInfo(files[i]).fileName()); this->actionRecentFile[i]->setData(files[i]); this->actionRecentFile[i]->setVisible(true); } for (int j = numRecentFiles; j < maxRecentFiles; ++j) this->actionRecentFile[j]->setVisible(false); // If we had to prune the list, then save the cleaned list if (originalNumRecentFiles != numRecentFiles) settings.setValue("recentFileList", files); } void MainWindow::actionOpenExample() { QAction *action = qobject_cast(sender()); if (action) { openFile(examplesdir + QDir::separator() + action->text()); } } void MainWindow::actionSave() { if (this->fileName.isEmpty()) { actionSaveAs(); } else { setCurrentOutput(); QFile file(this->fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { PRINTB("Failed to open file for writing: %s (%s)", this->fileName.toStdString() % file.errorString().toStdString()); } else { QTextStream writer(&file); writer.setCodec("UTF-8"); writer << this->editor->toPlainText(); PRINTB("Saved design '%s'.", this->fileName.toStdString()); this->editor->setContentModified(false); } clearCurrentOutput(); updateRecentFiles(); } } void MainWindow::actionSaveAs() { QString new_filename = QFileDialog::getSaveFileName(this, "Save File", this->fileName.isEmpty()?"Untitled.scad":this->fileName, "OpenSCAD Designs (*.scad)"); if (!new_filename.isEmpty()) { if (QFileInfo(new_filename).suffix().isEmpty()) { new_filename.append(".scad"); // Manual overwrite check since Qt doesn't do it, when using the // defaultSuffix property QFileInfo info(new_filename); if (info.exists()) { if (QMessageBox::warning(this, windowTitle(), tr("%1 already exists.\nDo you want to replace it?").arg(info.fileName()), QMessageBox::Yes | QMessageBox::No, QMessageBox::No) != QMessageBox::Yes) { return; } } } setFileName(new_filename); actionSave(); } } void MainWindow::actionReload() { if (checkEditorModified()) refreshDocument(); } void MainWindow::hideEditor() { QSettings settings; if (editActionHide->isChecked()) { editor->hide(); settings.setValue("view/hideEditor",true); } else { editor->show(); settings.setValue("view/hideEditor",false); } } void MainWindow::pasteViewportTranslation() { #ifdef _QCODE_EDIT_ QDocumentCursor cursor = editor->cursor(); #else QTextCursor cursor = editor->textCursor(); #endif QString txt; txt.sprintf("[ %.2f, %.2f, %.2f ]", -this->glview->object_trans_x, -this->glview->object_trans_y, -this->glview->object_trans_z); cursor.insertText(txt); } void MainWindow::pasteViewportRotation() { #ifdef _QCODE_EDIT_ QDocumentCursor cursor = editor->cursor(); #else QTextCursor cursor = editor->textCursor(); #endif QString txt; txt.sprintf("[ %.2f, %.2f, %.2f ]", fmodf(360 - this->glview->object_rot_x + 90, 360), fmodf(360 - this->glview->object_rot_y, 360), fmodf(360 - this->glview->object_rot_z, 360)); cursor.insertText(txt); } void MainWindow::updateTemporalVariables() { this->root_ctx.set_variable("$t", Value(this->e_tval->text().toDouble())); Value::VectorType vpt; vpt.push_back(Value(-this->glview->object_trans_x)); vpt.push_back(Value(-this->glview->object_trans_y)); vpt.push_back(Value(-this->glview->object_trans_z)); this->root_ctx.set_variable("$vpt", Value(vpt)); Value::VectorType vpr; vpr.push_back(Value(fmodf(360 - this->glview->object_rot_x + 90, 360))); vpr.push_back(Value(fmodf(360 - this->glview->object_rot_y, 360))); vpr.push_back(Value(fmodf(360 - this->glview->object_rot_z, 360))); root_ctx.set_variable("$vpr", Value(vpr)); } bool MainWindow::fileChangedOnDisk() { if (!this->fileName.isEmpty()) { struct stat st; memset(&st, 0, sizeof(struct stat)); stat(this->fileName.toLocal8Bit(), &st); std::string newid = str(boost::format("%x.%x") % st.st_mtime % st.st_size); if (newid != this->autoReloadId) { this->autoReloadId = newid; return true; } } return false; } // FIXME: The following two methods are duplicated in ModuleCache.cc - refactor static bool is_modified(const std::string &filename, const time_t &mtime) { struct stat st; memset(&st, 0, sizeof(struct stat)); stat(filename.c_str(), &st); return (st.st_mtime > mtime); } bool MainWindow::includesChanged() { if (this->root_module) { BOOST_FOREACH(const Module::IncludeContainer::value_type &item, this->root_module->includes) { if (is_modified(item.first, item.second)) return true; } } return false; } /*! If reload is true, does a timestamp check on the document and tries to reload it. Otherwise, just reparses the current document and any dependencies, updates the GUI accordingly and populates this->root_module. Returns true if anything was compiled. */ bool MainWindow::compileTopLevelDocument(bool reload) { bool shouldcompiletoplevel = !reload; if ((reload && fileChangedOnDisk() && checkEditorModified()) || includesChanged()) { shouldcompiletoplevel = true; refreshDocument(); } if (shouldcompiletoplevel) { console->clear(); updateTemporalVariables(); this->last_compiled_doc = editor->toPlainText(); std::string fulltext = this->last_compiled_doc.toStdString() + "\n" + commandline_commands; delete this->root_module; this->root_module = NULL; this->root_module = parse(fulltext.c_str(), this->fileName.isEmpty() ? "" : QFileInfo(this->fileName).absolutePath().toLocal8Bit(), false); // Error highlighting delete this->highlighter; this->highlighter = NULL; if (!this->root_module) { this->highlighter = new Highlighter(editor->document()); if (!animate_panel->isVisible()) { #ifdef _QCODE_EDIT_ QDocumentCursor cursor = editor->cursor(); cursor.setPosition(parser_error_pos); #else QTextCursor cursor = editor->textCursor(); cursor.setPosition(parser_error_pos); editor->setTextCursor(cursor); #endif } } } bool changed = shouldcompiletoplevel; if (this->root_module) { changed |= this->root_module->handleDependencies(); if (changed) PRINTB("Module cache size: %d modules", ModuleCache::instance()->size()); } return changed; } void MainWindow::checkAutoReload() { if (!this->fileName.isEmpty()) actionReloadCompile(); } void MainWindow::autoReloadSet(bool on) { QSettings settings; settings.setValue("design/autoReload",designActionAutoReload->isChecked()); if (on) { autoReloadId = ""; autoReloadTimer->start(200); } else { autoReloadTimer->stop(); } } bool MainWindow::checkEditorModified() { if (editor->isContentModified()) { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, "Application", "The document has been modified.\n" "Do you really want to reload the file?", QMessageBox::Yes | QMessageBox::No); if (ret != QMessageBox::Yes) { designActionAutoReload->setChecked(false); return false; } } return true; } void MainWindow::actionReloadCompile() { if (GuiLocker::isLocked()) return; GuiLocker lock; setCurrentOutput(); // PRINT("Parsing design (AST generation)..."); // QApplication::processEvents(); if (!compile(true, true)) return; if (this->root_node) compileCSG(true); // Go to non-CGAL view mode if (viewActionThrownTogether->isChecked()) { viewModeThrownTogether(); } else { #ifdef ENABLE_OPENCSG viewModeOpenCSG(); #else viewModeThrownTogether(); #endif } clearCurrentOutput(); } void MainWindow::actionCompile() { if (GuiLocker::isLocked()) return; GuiLocker lock; setCurrentOutput(); console->clear(); PRINT("Parsing design (AST generation)..."); QApplication::processEvents(); compile(false, !viewActionAnimate->isChecked()); if (this->root_node) compileCSG(!viewActionAnimate->isChecked()); // Go to non-CGAL view mode if (viewActionThrownTogether->isChecked()) { viewModeThrownTogether(); } else { #ifdef ENABLE_OPENCSG viewModeOpenCSG(); #else viewModeThrownTogether(); #endif } if (viewActionAnimate->isChecked() && e_dump->isChecked()) { QImage img = this->glview->grabFrameBuffer(); QString filename; double s = this->e_fsteps->text().toDouble(); double t = this->e_tval->text().toDouble(); filename.sprintf("frame%05d.png", int(round(s*t))); img.save(filename, "PNG"); } clearCurrentOutput(); } #ifdef ENABLE_CGAL void MainWindow::actionRenderCGAL() { if (GuiLocker::isLocked()) return; GuiLocker lock; setCurrentOutput(); console->clear(); PRINT("Parsing design (AST generation)..."); QApplication::processEvents(); compile(false, true); if (!this->root_module || !this->root_node) { return; } this->glview->setRenderer(NULL); delete this->cgalRenderer; this->cgalRenderer = NULL; if (this->root_N) { delete this->root_N; this->root_N = NULL; } PRINT("Rendering Polygon Mesh using CGAL..."); this->progresswidget = new ProgressWidget(this); connect(this->progresswidget, SIGNAL(requestShow()), this, SLOT(showProgress())); progress_report_prep(this->root_node, report_func, this); GuiLocker::lock(); // Will be unlocked in actionRenderCGALDone() this->cgalworker->start(this->tree); } void MainWindow::actionRenderCGALDone(CGAL_Nef_polyhedron *root_N) { progress_report_fin(); if (root_N) { PolySetCache::instance()->print(); CGALCache::instance()->print(); if (!root_N->isNull()) { if (root_N->dim == 2) { PRINT(" Top level object is a 2D object:"); PRINTB(" Empty: %6s", (root_N->p2->is_empty() ? "yes" : "no")); PRINTB(" Plane: %6s", (root_N->p2->is_plane() ? "yes" : "no")); PRINTB(" Vertices: %6d", root_N->p2->explorer().number_of_vertices()); PRINTB(" Halfedges: %6d", root_N->p2->explorer().number_of_halfedges()); PRINTB(" Edges: %6d", root_N->p2->explorer().number_of_edges()); PRINTB(" Faces: %6d", root_N->p2->explorer().number_of_faces()); PRINTB(" FaceCycles: %6d", root_N->p2->explorer().number_of_face_cycles()); PRINTB(" ConnComp: %6d", root_N->p2->explorer().number_of_connected_components()); } if (root_N->dim == 3) { PRINT(" Top level object is a 3D object:"); PRINTB(" Simple: %6s", (root_N->p3->is_simple() ? "yes" : "no")); PRINTB(" Valid: %6s", (root_N->p3->is_valid() ? "yes" : "no")); PRINTB(" Vertices: %6d", root_N->p3->number_of_vertices()); PRINTB(" Halfedges: %6d", root_N->p3->number_of_halfedges()); PRINTB(" Edges: %6d", root_N->p3->number_of_edges()); PRINTB(" Halffacets: %6d", root_N->p3->number_of_halffacets()); PRINTB(" Facets: %6d", root_N->p3->number_of_facets()); PRINTB(" Volumes: %6d", root_N->p3->number_of_volumes()); } } int s = this->progresswidget->elapsedTime() / 1000; PRINTB("Total rendering time: %d hours, %d minutes, %d seconds", (s / (60*60)) % ((s / 60) % 60) % (s % 60)); this->root_N = root_N; if (!this->root_N->isNull()) { this->cgalRenderer = new CGALRenderer(*this->root_N); // Go to CGAL view mode if (viewActionCGALGrid->isChecked()) { viewModeCGALGrid(); } else { viewModeCGALSurface(); } PRINT("Rendering finished."); } else { PRINT("WARNING: No top level geometry to render"); } } this->statusBar()->removeWidget(this->progresswidget); delete this->progresswidget; this->progresswidget = NULL; clearCurrentOutput(); GuiLocker::unlock(); } #endif /* ENABLE_CGAL */ void MainWindow::actionDisplayAST() { setCurrentOutput(); QTextEdit *e = new QTextEdit(this); e->setWindowFlags(Qt::Window); e->setTabStopWidth(30); e->setWindowTitle("AST Dump"); e->setReadOnly(true); if (root_module) { e->setPlainText(QString::fromStdString(root_module->dump("", ""))); } else { e->setPlainText("No AST to dump. Please try compiling first..."); } e->show(); e->resize(600, 400); clearCurrentOutput(); } void MainWindow::actionDisplayCSGTree() { setCurrentOutput(); QTextEdit *e = new QTextEdit(this); e->setWindowFlags(Qt::Window); e->setTabStopWidth(30); e->setWindowTitle("CSG Tree Dump"); e->setReadOnly(true); if (this->root_node) { e->setPlainText(QString::fromStdString(this->tree.getString(*this->root_node))); } else { e->setPlainText("No CSG to dump. Please try compiling first..."); } e->show(); e->resize(600, 400); clearCurrentOutput(); } void MainWindow::actionDisplayCSGProducts() { setCurrentOutput(); QTextEdit *e = new QTextEdit(this); e->setWindowFlags(Qt::Window); e->setTabStopWidth(30); e->setWindowTitle("CSG Products Dump"); e->setReadOnly(true); e->setPlainText(QString("\nCSG before normalization:\n%1\n\n\nCSG after normalization:\n%2\n\n\nCSG rendering chain:\n%3\n\n\nHighlights CSG rendering chain:\n%4\n\n\nBackground CSG rendering chain:\n%5\n").arg(root_raw_term ? QString::fromStdString(root_raw_term->dump()) : "N/A", root_norm_term ? QString::fromStdString(root_norm_term->dump()) : "N/A", this->root_chain ? QString::fromStdString(this->root_chain->dump()) : "N/A", highlights_chain ? QString::fromStdString(highlights_chain->dump()) : "N/A", background_chain ? QString::fromStdString(background_chain->dump()) : "N/A")); e->show(); e->resize(600, 400); clearCurrentOutput(); } #ifdef ENABLE_CGAL void MainWindow::actionExportSTLorOFF(bool stl_mode) #else void MainWindow::actionExportSTLorOFF(bool) #endif { if (GuiLocker::isLocked()) return; GuiLocker lock; #ifdef ENABLE_CGAL setCurrentOutput(); if (!this->root_N) { PRINT("Nothing to export! Try building first (press F6)."); clearCurrentOutput(); return; } if (this->root_N->dim != 3) { PRINT("Current top level object is not a 3D object."); clearCurrentOutput(); return; } if (!this->root_N->p3->is_simple()) { PRINT("Object isn't a valid 2-manifold! Modify your design. See http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/STL_Import_and_Export"); clearCurrentOutput(); return; } QString suffix = stl_mode ? ".stl" : ".off"; QString stl_filename = QFileDialog::getSaveFileName(this, stl_mode ? "Export STL File" : "Export OFF File", this->fileName.isEmpty() ? "Untitled"+suffix : QFileInfo(this->fileName).baseName()+suffix, stl_mode ? "STL Files (*.stl)" : "OFF Files (*.off)"); if (stl_filename.isEmpty()) { PRINTB("No filename specified. %s export aborted.", (stl_mode ? "STL" : "OFF")); clearCurrentOutput(); return; } std::ofstream fstream(stl_filename.toUtf8()); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", stl_filename.toStdString()); } else { if (stl_mode) export_stl(this->root_N, fstream); else export_off(this->root_N, fstream); fstream.close(); PRINTB("%s export finished.", (stl_mode ? "STL" : "OFF")); } clearCurrentOutput(); #endif /* ENABLE_CGAL */ } void MainWindow::actionExportSTL() { actionExportSTLorOFF(true); } void MainWindow::actionExportOFF() { actionExportSTLorOFF(false); } void MainWindow::actionExportDXF() { #ifdef ENABLE_CGAL setCurrentOutput(); if (!this->root_N) { PRINT("Nothing to export! Try building first (press F6)."); clearCurrentOutput(); return; } if (this->root_N->dim != 2) { PRINT("Current top level object is not a 2D object."); clearCurrentOutput(); return; } QString dxf_filename = QFileDialog::getSaveFileName(this, "Export DXF File", this->fileName.isEmpty() ? "Untitled.dxf" : QFileInfo(this->fileName).baseName()+".dxf", "DXF Files (*.dxf)"); if (dxf_filename.isEmpty()) { PRINT("No filename specified. DXF export aborted."); clearCurrentOutput(); return; } std::ofstream fstream(dxf_filename.toUtf8()); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", dxf_filename.toStdString()); } else { export_dxf(this->root_N, fstream); fstream.close(); PRINT("DXF export finished."); } clearCurrentOutput(); #endif /* ENABLE_CGAL */ } void MainWindow::actionExportCSG() { setCurrentOutput(); if (!this->root_node) { PRINT("Nothing to export. Please try compiling first..."); clearCurrentOutput(); return; } QString csg_filename = QFileDialog::getSaveFileName(this, "Export CSG File", this->fileName.isEmpty() ? "Untitled.csg" : QFileInfo(this->fileName).baseName()+".csg", "CSG Files (*.csg)"); if (csg_filename.isEmpty()) { PRINT("No filename specified. CSG export aborted."); clearCurrentOutput(); return; } std::ofstream fstream(csg_filename.toUtf8()); if (!fstream.is_open()) { PRINTB("Can't open file \"%s\" for export", csg_filename.toStdString()); } else { fstream << this->tree.getString(*this->root_node) << "\n"; fstream.close(); PRINT("CSG export finished."); } clearCurrentOutput(); } void MainWindow::actionExportImage() { QImage img = this->glview->grabFrameBuffer(); setCurrentOutput(); QString img_filename = QFileDialog::getSaveFileName(this, "Export Image", "", "PNG Files (*.png)"); if (img_filename.isEmpty()) { PRINT("No filename specified. Image export aborted."); clearCurrentOutput(); return; } img.save(img_filename, "PNG"); clearCurrentOutput(); } void MainWindow::actionFlushCaches() { PolySetCache::instance()->clear(); #ifdef ENABLE_CGAL CGALCache::instance()->clear(); #endif dxf_dim_cache.clear(); dxf_cross_cache.clear(); ModuleCache::instance()->clear(); } void MainWindow::viewModeActionsUncheck() { viewActionOpenCSG->setChecked(false); #ifdef ENABLE_CGAL viewActionCGALSurfaces->setChecked(false); viewActionCGALGrid->setChecked(false); #endif viewActionThrownTogether->setChecked(false); } #ifdef ENABLE_OPENCSG /*! Go to the OpenCSG view mode. Falls back to thrown together mode if OpenCSG is not available */ void MainWindow::viewModeOpenCSG() { if (this->glview->hasOpenCSGSupport()) { viewModeActionsUncheck(); viewActionOpenCSG->setChecked(true); this->glview->setRenderer(this->opencsgRenderer ? (Renderer *)this->opencsgRenderer : (Renderer *)this->thrownTogetherRenderer); } else { viewModeThrownTogether(); } } #endif /* ENABLE_OPENCSG */ #ifdef ENABLE_CGAL void MainWindow::viewModeCGALSurface() { viewModeActionsUncheck(); viewActionCGALSurfaces->setChecked(true); this->glview->setShowFaces(true); this->glview->setRenderer(this->cgalRenderer); this->glview->updateGL(); } void MainWindow::viewModeCGALGrid() { viewModeActionsUncheck(); viewActionCGALGrid->setChecked(true); this->glview->setShowFaces(false); this->glview->setRenderer(this->cgalRenderer); } #endif /* ENABLE_CGAL */ void MainWindow::viewModeThrownTogether() { viewModeActionsUncheck(); viewActionThrownTogether->setChecked(true); this->glview->setRenderer(this->thrownTogetherRenderer); } void MainWindow::viewModeShowEdges() { QSettings settings; settings.setValue("view/showEdges",viewActionShowEdges->isChecked()); this->glview->setShowEdges(viewActionShowEdges->isChecked()); this->glview->updateGL(); } void MainWindow::viewModeShowAxes() { QSettings settings; settings.setValue("view/showAxes",viewActionShowAxes->isChecked()); this->glview->setShowAxes(viewActionShowAxes->isChecked()); this->glview->updateGL(); } void MainWindow::viewModeShowCrosshairs() { QSettings settings; settings.setValue("view/showCrosshairs",viewActionShowCrosshairs->isChecked()); this->glview->setShowCrosshairs(viewActionShowCrosshairs->isChecked()); this->glview->updateGL(); } void MainWindow::viewModeAnimate() { if (viewActionAnimate->isChecked()) { animate_panel->show(); actionCompile(); updatedFps(); } else { animate_panel->hide(); animate_timer->stop(); } } void MainWindow::animateUpdateDocChanged() { QString current_doc = editor->toPlainText(); if (current_doc != last_compiled_doc) animateUpdate(); } void MainWindow::animateUpdate() { if (animate_panel->isVisible()) { bool fps_ok; double fps = this->e_fps->text().toDouble(&fps_ok); if (fps_ok && fps <= 0 && !animate_timer->isActive()) { animate_timer->stop(); animate_timer->setSingleShot(true); animate_timer->setInterval(50); animate_timer->start(); } } } void MainWindow::viewAngleTop() { this->glview->object_rot_x = 90; this->glview->object_rot_y = 0; this->glview->object_rot_z = 0; this->glview->updateGL(); } void MainWindow::viewAngleBottom() { this->glview->object_rot_x = 270; this->glview->object_rot_y = 0; this->glview->object_rot_z = 0; this->glview->updateGL(); } void MainWindow::viewAngleLeft() { this->glview->object_rot_x = 0; this->glview->object_rot_y = 0; this->glview->object_rot_z = 90; this->glview->updateGL(); } void MainWindow::viewAngleRight() { this->glview->object_rot_x = 0; this->glview->object_rot_y = 0; this->glview->object_rot_z = 270; this->glview->updateGL(); } void MainWindow::viewAngleFront() { this->glview->object_rot_x = 0; this->glview->object_rot_y = 0; this->glview->object_rot_z = 0; this->glview->updateGL(); } void MainWindow::viewAngleBack() { this->glview->object_rot_x = 0; this->glview->object_rot_y = 0; this->glview->object_rot_z = 180; this->glview->updateGL(); } void MainWindow::viewAngleDiagonal() { this->glview->object_rot_x = 35; this->glview->object_rot_y = 0; this->glview->object_rot_z = -25; this->glview->updateGL(); } void MainWindow::viewCenter() { this->glview->object_trans_x = 0; this->glview->object_trans_y = 0; this->glview->object_trans_z = 0; this->glview->updateGL(); } void MainWindow::viewPerspective() { QSettings settings; settings.setValue("view/orthogonalProjection",false); viewActionPerspective->setChecked(true); viewActionOrthogonal->setChecked(false); this->glview->setOrthoMode(false); this->glview->updateGL(); } void MainWindow::viewOrthogonal() { QSettings settings; settings.setValue("view/orthogonalProjection",true); viewActionPerspective->setChecked(false); viewActionOrthogonal->setChecked(true); this->glview->setOrthoMode(true); this->glview->updateGL(); } void MainWindow::hideConsole() { QSettings settings; if (viewActionHide->isChecked()) { console->hide(); settings.setValue("view/hideConsole",true); } else { console->show(); settings.setValue("view/hideConsole",false); } } void MainWindow::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) event->acceptProposedAction(); } void MainWindow::dropEvent(QDropEvent *event) { setCurrentOutput(); const QList urls = event->mimeData()->urls(); for (int i = 0; i < urls.size(); i++) { if (urls[i].scheme() != "file") continue; openFile(urls[i].toLocalFile()); } clearCurrentOutput(); } void MainWindow::helpAbout() { qApp->setWindowIcon(QApplication::windowIcon()); AboutDialog *dialog = new AboutDialog(this); dialog->exec(); //QMessageBox::information(this, "About OpenSCAD", QString(helptitle) + QString(copyrighttext)); } void MainWindow::helpHomepage() { QDesktopServices::openUrl(QUrl("http://openscad.org/")); } void MainWindow::helpManual() { QDesktopServices::openUrl(QUrl("http://en.wikibooks.org/wiki/OpenSCAD_User_Manual")); } #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) void MainWindow::helpLibrary() { QString libinfo; libinfo.sprintf("Boost version: %s\n" "Eigen version: %d.%d.%d\n" "CGAL version: %s\n" "OpenCSG version: %s\n" "Qt version: %s\n\n", BOOST_LIB_VERSION, EIGEN_WORLD_VERSION, EIGEN_MAJOR_VERSION, EIGEN_MINOR_VERSION, TOSTRING(CGAL_VERSION), OPENCSG_VERSION_STRING, qVersion()); if (!this->openglbox) { this->openglbox = new QMessageBox(QMessageBox::Information, "OpenGL Info", "Detailed Library Info", QMessageBox::Ok, this); } this->openglbox->setDetailedText(libinfo + this->glview->getRendererInfo()); this->openglbox->show(); } /*! FIXME: In MDI mode, should this be called on both reload functions? */ bool MainWindow::maybeSave() { if (editor->isContentModified()) { QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, "Application", "The document has been modified.\n" "Do you want to save your changes?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if (ret == QMessageBox::Save) { actionSave(); return true; // FIXME: Should return false on error } else if (ret == QMessageBox::Cancel) { return false; } } return true; } void MainWindow::closeEvent(QCloseEvent *event) { if (maybeSave()) { QSettings settings; settings.setValue("window/size", size()); settings.setValue("window/position", pos()); settings_setValueList("window/splitter1sizes",splitter1->sizes()); settings_setValueList("window/splitter2sizes",splitter2->sizes()); event->accept(); } else { event->ignore(); } } void MainWindow::preferences() { Preferences::inst()->show(); Preferences::inst()->activateWindow(); Preferences::inst()->raise(); } void MainWindow::setFont(const QString &family, uint size) { QFont font; if (!family.isEmpty()) font.setFamily(family); else font.setFixedPitch(true); if (size > 0) font.setPointSize(size); font.setStyleHint(QFont::TypeWriter); editor->setFont(font); } void MainWindow::quit() { QCloseEvent ev; QApplication::sendEvent(QApplication::instance(), &ev); if (ev.isAccepted()) QApplication::instance()->quit(); // FIXME: Cancel any CGAL calculations } void MainWindow::consoleOutput(const std::string &msg, void *userdata) { // Invoke the append function in the main thread in case the output // originates in a worker thread. MainWindow *thisp = static_cast(userdata); QMetaObject::invokeMethod(thisp->console, "append", Qt::QueuedConnection, Q_ARG(QString, QString::fromStdString(msg))); } void MainWindow::setCurrentOutput() { set_output_handler(&MainWindow::consoleOutput, this); } void MainWindow::clearCurrentOutput() { set_output_handler(NULL, NULL); } void MainWindow::openCSGSettingsChanged() { #ifdef ENABLE_OPENCSG OpenCSG::setOption(OpenCSG::AlgorithmSetting, Preferences::inst()->getValue("advanced/forceGoldfeather").toBool() ? OpenCSG::Goldfeather : OpenCSG::Automatic); #endif } openscad-2013.01+dfsg.orig/src/rotateextrude.cc0000644000175000017500000001072312001145114020715 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "rotateextrudenode.h" #include "module.h" #include "context.h" #include "printutils.h" #include "builtin.h" #include "polyset.h" #include "visitor.h" #include "PolySetEvaluator.h" #include "openscad.h" // get_fragments_from_r() #include #include using namespace boost::assign; // bring 'operator+=()' into scope #include namespace fs = boost::filesystem; class RotateExtrudeModule : public AbstractModule { public: RotateExtrudeModule() { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *RotateExtrudeModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { RotateExtrudeNode *node = new RotateExtrudeNode(inst); std::vector argnames; argnames += "file", "layer", "origin", "scale"; std::vector argexpr; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); node->fn = c.lookup_variable("$fn").toDouble(); node->fs = c.lookup_variable("$fs").toDouble(); node->fa = c.lookup_variable("$fa").toDouble(); Value file = c.lookup_variable("file"); Value layer = c.lookup_variable("layer", true); Value convexity = c.lookup_variable("convexity", true); Value origin = c.lookup_variable("origin", true); Value scale = c.lookup_variable("scale", true); if (!file.isUndefined()) { PRINT("DEPRECATED: Support for reading files in rotate_extrude will be removed in future releases. Use a child import() instead."); node->filename = c.getAbsolutePath(file.toString()); } node->layername = layer.isUndefined() ? "" : layer.toString(); node->convexity = (int)convexity.toDouble(); origin.getVec2(node->origin_x, node->origin_y); node->scale = scale.toDouble(); if (node->convexity <= 0) node->convexity = 1; if (node->scale <= 0) node->scale = 1; if (node->filename.empty()) { std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); } return node; } PolySet *RotateExtrudeNode::evaluate_polyset(PolySetEvaluator *evaluator) const { if (!evaluator) { PRINTB("WARNING: No suitable PolySetEvaluator found for %s module!", this->name()); return NULL; } print_messages_push(); PolySet *ps = evaluator->evaluatePolySet(*this); print_messages_pop(); return ps; } std::string RotateExtrudeNode::toString() const { std::stringstream stream; stream << this->name() << "("; if (!this->filename.empty()) { // Ignore deprecated parameters if empty fs::path path((std::string)this->filename); stream << "file = " << this->filename << ", " "layer = " << QuotedString(this->layername) << ", " "origin = [" << std::dec << this->origin_x << ", " << this->origin_y << "], " "scale = " << this->scale << ", " #ifndef OPENSCAD_TESTING // timestamp is needed for caching, but disturbs the test framework << "timestamp = " << (fs::exists(path) ? fs::last_write_time(path) : 0) << ", " #endif ; } stream << "convexity = " << this->convexity << ", " "$fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs << ")"; return stream.str(); } void register_builtin_dxf_rotate_extrude() { Builtins::init("dxf_rotate_extrude", new RotateExtrudeModule()); Builtins::init("rotate_extrude", new RotateExtrudeModule()); } openscad-2013.01+dfsg.orig/src/visitor.h0000644000175000017500000000413511641217140017367 0ustar chrysnchrysn#ifndef VISITOR_H_ #define VISITOR_H_ #include "traverser.h" class Visitor { public: Visitor() {} virtual ~Visitor() {} virtual Response visit(class State &state, const class AbstractNode &node) = 0; virtual Response visit(class State &state, const class AbstractIntersectionNode &node) { return visit(state, (const class AbstractNode &)node); } virtual Response visit(class State &state, const class AbstractPolyNode &node) { return visit(state, (const class AbstractNode &)node); } virtual Response visit(class State &state, const class CgaladvNode &node) { return visit(state, (const class AbstractNode &)node); } virtual Response visit(class State &state, const class CsgNode &node) { return visit(state, (const class AbstractNode &)node); } virtual Response visit(class State &state, const class LinearExtrudeNode &node) { return visit(state, (const class AbstractPolyNode &)node); } virtual Response visit(class State &state, const class RotateExtrudeNode &node) { return visit(state, (const class AbstractPolyNode &)node); } virtual Response visit(class State &state, const class ImportNode &node) { return visit(state, (const class AbstractPolyNode &)node); } virtual Response visit(class State &state, const class PrimitiveNode &node) { return visit(state, (const class AbstractPolyNode &)node); } virtual Response visit(class State &state, const class ProjectionNode &node) { return visit(state, (const class AbstractPolyNode &)node); } virtual Response visit(class State &state, const class RenderNode &node) { return visit(state, (const class AbstractNode &)node); } virtual Response visit(class State &state, const class SurfaceNode &node) { return visit(state, (const class AbstractPolyNode &)node); } virtual Response visit(class State &state, const class TransformNode &node) { return visit(state, (const class AbstractNode &)node); } virtual Response visit(class State &state, const class ColorNode &node) { return visit(state, (const class AbstractNode &)node); } // Add visit() methods for new visitable subtypes of AbstractNode here }; #endif openscad-2013.01+dfsg.orig/src/AppleEvents.h0000644000175000017500000000013111516152336020114 0ustar chrysnchrysn#ifndef APPLEEVENTS_H_ #define APPLEEVENTS_H_ void installAppleEventHandlers(); #endif openscad-2013.01+dfsg.orig/src/printutils.cc0000644000175000017500000000215211707660753020257 0ustar chrysnchrysn#include "printutils.h" #include std::list print_messages_stack; OutputHandlerFunc *outputhandler = NULL; void *outputhandler_data = NULL; void set_output_handler(OutputHandlerFunc *newhandler, void *userdata) { outputhandler = newhandler; outputhandler_data = userdata; } void print_messages_push() { print_messages_stack.push_back(std::string()); } void print_messages_pop() { std::string msg = print_messages_stack.back(); print_messages_stack.pop_back(); if (print_messages_stack.size() > 0 && !msg.empty()) { if (!print_messages_stack.back().empty()) { print_messages_stack.back() += "\n"; } print_messages_stack.back() += msg; } } void PRINT(const std::string &msg) { if (msg.empty()) return; if (print_messages_stack.size() > 0) { if (!print_messages_stack.back().empty()) { print_messages_stack.back() += "\n"; } print_messages_stack.back() += msg; } PRINT_NOCACHE(msg); } void PRINT_NOCACHE(const std::string &msg) { if (msg.empty()) return; if (!outputhandler) { fprintf(stderr, "%s\n", msg.c_str()); } else { outputhandler(msg, outputhandler_data); } } openscad-2013.01+dfsg.orig/src/cgal.h0000644000175000017500000000472612076022155016607 0ustar chrysnchrysn#ifndef CGAL_H_ #define CGAL_H_ #ifdef ENABLE_CGAL #ifdef _MSC_VER // see http://en.wikipedia.org/wiki/Stdint.h // and http://www.mpfr.org/mpfr-2.4.2/#stdint #include using boost::intmax_t; using boost::uintmax_t; #endif // NDEBUG must be disabled when including CGAL headers, otherwise CGAL assertions // will not be thrown, causing OpenSCAD's CGAL error checking to fail. // To be on the safe side, this has to be done when including any CGAL header file. // FIXME: It might be possible to rewrite the error checking to get rid of this // requirement. kintel 20111206. #ifdef NDEBUG #define PREV_NDEBUG NDEBUG #undef NDEBUG #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef CGAL::Gmpq NT; typedef CGAL::Extended_cartesian CGAL_Kernel2; typedef CGAL::Nef_polyhedron_2 CGAL_Nef_polyhedron2; typedef CGAL_Kernel2::Aff_transformation_2 CGAL_Aff_transformation2; typedef CGAL::Exact_predicates_exact_constructions_kernel CGAL_ExactKernel2; typedef CGAL::Polygon_2 CGAL_Poly2; typedef CGAL::Polygon_with_holes_2 CGAL_Poly2h; typedef CGAL::Cartesian CGAL_Kernel3; typedef CGAL::Nef_polyhedron_3 CGAL_Nef_polyhedron3; typedef CGAL_Nef_polyhedron3::Aff_transformation_3 CGAL_Aff_transformation; typedef CGAL::Polyhedron_3 CGAL_Polyhedron; typedef CGAL_Polyhedron::HalfedgeDS CGAL_HDS; typedef CGAL::Polyhedron_incremental_builder_3 CGAL_Polybuilder; typedef CGAL::Point_3 CGAL_Point_3; typedef CGAL::Iso_cuboid_3 CGAL_Iso_cuboid_3; // CGAL_Nef_polyhedron2 uses CGAL_Kernel2, but Iso_rectangle_2 needs to match // CGAL_Nef_polyhedron2::Explorer::Point which is different than // CGAL_Kernel2::Point. Hence the suffix 'e' typedef CGAL_Nef_polyhedron2::Explorer::Point CGAL_Point_2e; typedef CGAL::Iso_rectangle_2< CGAL::Simple_cartesian > CGAL_Iso_rectangle_2e; #ifdef PREV_NDEBUG #define NDEBUG PREV_NDEBUG #endif #endif /* ENABLE_CGAL */ #endif openscad-2013.01+dfsg.orig/src/control.cc0000644000175000017500000001303012000421643017473 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "module.h" #include "node.h" #include "context.h" #include "builtin.h" #include "printutils.h" #include enum control_type_e { CHILD, ECHO, ASSIGN, FOR, INT_FOR, IF }; class ControlModule : public AbstractModule { public: control_type_e type; ControlModule(control_type_e type) : type(type) { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; void for_eval(AbstractNode &node, const ModuleInstantiation &inst, size_t l, const std::vector &call_argnames, const std::vector &call_argvalues, const Context *arg_context) { if (call_argnames.size() > l) { const std::string &it_name = call_argnames[l]; const Value &it_values = call_argvalues[l]; Context c(arg_context); if (it_values.type() == Value::RANGE) { Value::RangeType range = it_values.toRange(); if (range.end < range.begin) { double t = range.begin; range.begin = range.end; range.end = t; } if (range.step > 0 && (range.begin-range.end)/range.step < 10000) { for (double i = range.begin; i <= range.end; i += range.step) { c.set_variable(it_name, Value(i)); for_eval(node, inst, l+1, call_argnames, call_argvalues, &c); } } } else if (it_values.type() == Value::VECTOR) { for (size_t i = 0; i < it_values.toVector().size(); i++) { c.set_variable(it_name, it_values.toVector()[i]); for_eval(node, inst, l+1, call_argnames, call_argvalues, &c); } } else if (it_values.type() != Value::UNDEFINED) { c.set_variable(it_name, it_values); for_eval(node, inst, l+1, call_argnames, call_argvalues, &c); } } else if (l > 0) { std::vector evaluatednodes = inst.evaluateChildren(arg_context); node.children.insert(node.children.end(), evaluatednodes.begin(), evaluatednodes.end()); } } AbstractNode *ControlModule::evaluate(const Context*, const ModuleInstantiation *inst) const { AbstractNode *node = NULL; if (type == CHILD) { size_t n = 0; if (inst->argvalues.size() > 0) { double v; if (inst->argvalues[0].getDouble(v)) n = v; } for (int i = Context::ctx_stack.size()-1; i >= 0; i--) { const Context *c = Context::ctx_stack[i]; if (c->inst_p) { if (n < c->inst_p->children.size()) { node = c->inst_p->children[n]->evaluate(c->inst_p->ctx); // FIXME: We'd like to inherit any tags from the ModuleInstantiation // given as parameter to this method. However, the instantition which belongs // to the returned node cannot be changed. This causes the test // features/child-background.scad to fail. } return node; } c = c->parent; } return NULL; } if (type == INT_FOR) node = new AbstractIntersectionNode(inst); else node = new AbstractNode(inst); if (type == ECHO) { std::stringstream msg; msg << "ECHO: "; for (size_t i = 0; i < inst->argnames.size(); i++) { if (i > 0) msg << ", "; if (!inst->argnames[i].empty()) msg << inst->argnames[i] << " = "; msg << inst->argvalues[i]; } PRINTB("%s", msg.str()); } if (type == ASSIGN) { Context c(inst->ctx); for (size_t i = 0; i < inst->argnames.size(); i++) { if (!inst->argnames[i].empty()) c.set_variable(inst->argnames[i], inst->argvalues[i]); } std::vector evaluatednodes = inst->evaluateChildren(&c); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); } if (type == FOR || type == INT_FOR) { for_eval(*node, *inst, 0, inst->argnames, inst->argvalues, inst->ctx); } if (type == IF) { const IfElseModuleInstantiation *ifelse = dynamic_cast(inst); if (ifelse->argvalues.size() > 0 && ifelse->argvalues[0].toBool()) { std::vector evaluatednodes = ifelse->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); } else { std::vector evaluatednodes = ifelse->evaluateElseChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); } } return node; } void register_builtin_control() { Builtins::init("child", new ControlModule(CHILD)); Builtins::init("echo", new ControlModule(ECHO)); Builtins::init("assign", new ControlModule(ASSIGN)); Builtins::init("for", new ControlModule(FOR)); Builtins::init("intersection_for", new ControlModule(INT_FOR)); Builtins::init("if", new ControlModule(IF)); } openscad-2013.01+dfsg.orig/src/EventFilter.h0000644000175000017500000000111611516152336020121 0ustar chrysnchrysn#ifndef FILTER_H_ #define FILTER_H_ #include #include #include "MainWindow.h" class EventFilter : public QObject { Q_OBJECT; public: EventFilter(QObject *parent) : QObject(parent) {} protected: bool eventFilter(QObject *obj, QEvent *event) { // Handle Apple event for opening files if (event->type() == QEvent::FileOpen) { QFileOpenEvent *foe = static_cast(event); MainWindow::requestOpenFile(foe->file()); return true; } else { // standard event processing return QObject::eventFilter(obj, event); } } }; #endif openscad-2013.01+dfsg.orig/src/editor.h0000644000175000017500000000206212005335315017153 0ustar chrysnchrysn#include #include #include #include #ifdef _QCODE_EDIT_ #include class Editor : public QEditor #else #include class Editor : public QTextEdit #endif { Q_OBJECT public: #ifdef _QCODE_EDIT_ Editor(QWidget *parent) : QEditor(parent) {} QString toPlainText() const { return text(); } void setPlainText(const QString& text) { setText(text); } public slots: //void zoomIn() { zoom(1); } void zoomIn(int n = 1) { zoom(n); } //void zoomOut() { zoom(-1); } void zoomOut(int n = 1) { zoom(-n); } #else Editor(QWidget *parent) : QTextEdit(parent) { setAcceptRichText(false); } public slots: void zoomIn(); void zoomOut(); void setLineWrapping(bool on) { if(on) setWordWrapMode(QTextOption::WrapAnywhere); } void setContentModified(bool y) { document()->setModified(y); } bool isContentModified() { return document()->isModified(); } void indentSelection(); void unindentSelection(); void commentSelection(); void uncommentSelection(); private: void wheelEvent ( QWheelEvent * event ); #endif }; openscad-2013.01+dfsg.orig/src/state.h0000644000175000017500000000237011701151225017005 0ustar chrysnchrysn#ifndef STATE_H_ #define STATE_H_ #include #include "linalg.h" class State { public: State(const class AbstractNode *parent) : parentnode(parent), isprefix(false), ispostfix(false), numchildren(0) { this->matrix_ = Transform3d::Identity(); this->color_.fill(-1.0f); } virtual ~State() {} void setPrefix(bool on) { this->isprefix = on; } void setPostfix(bool on) { this->ispostfix = on; } void setNumChildren(unsigned int numc) { this->numchildren = numc; } void setParent(const AbstractNode *parent) { this->parentnode = parent; } void setMatrix(const Transform3d &m) { this->matrix_ = m; } void setColor(const Color4f &c) { this->color_ = c; } bool isPrefix() const { return this->isprefix; } bool isPostfix() const { return this->ispostfix; } unsigned int numChildren() const { return this->numchildren; } const AbstractNode *parent() const { return this->parentnode; } const Transform3d &matrix() const { return this->matrix_; } const Color4f &color() const { return this->color_; } private: const AbstractNode * parentnode; bool isprefix; bool ispostfix; unsigned int numchildren; // Transformation matrix and color. FIXME: Generalize such state variables? Transform3d matrix_; Color4f color_; }; #endif openscad-2013.01+dfsg.orig/src/expression.h0000644000175000017500000000152112000421643020056 0ustar chrysnchrysn#ifndef EXPRESSION_H_ #define EXPRESSION_H_ #include #include #include "value.h" class Expression { public: std::vector children; const Value const_value; std::string var_name; std::string call_funcname; std::vector call_argnames; // Boolean: ! && || // Operators: * / % + - // Relations: < <= == != >= > // Vector element: [] // Condition operator: ?: // Invert (prefix '-'): I // Constant value: C // Create Range: R // Create Vector: V // Create Matrix: M // Lookup Variable: L // Lookup member per name: N // Function call: F std::string type; Expression(); Expression(const Value &val); ~Expression(); Value evaluate(const class Context *context) const; std::string toString() const; }; std::ostream &operator<<(std::ostream &stream, const Expression &expr); #endif openscad-2013.01+dfsg.orig/src/dxfdim.cc0000644000175000017500000001463312014547135017312 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "dxfdim.h" #include "value.h" #include "function.h" #include "dxfdata.h" #include "builtin.h" #include "printutils.h" #include "context.h" #include "mathc99.h" #include #include boost::unordered_map dxf_dim_cache; boost::unordered_map dxf_cross_cache; namespace fs = boost::filesystem; Value builtin_dxf_dim(const Context *ctx, const std::vector &argnames, const std::vector &args) { std::string filename; std::string layername; std::string name; double xorigin = 0; double yorigin = 0; double scale = 1; for (size_t i = 0; i < argnames.size() && i < args.size(); i++) { if (argnames[i] == "file") filename = ctx->getAbsolutePath(args[i].toString()); if (argnames[i] == "layer") layername = args[i].toString(); if (argnames[i] == "origin") args[i].getVec2(xorigin, yorigin); if (argnames[i] == "scale") args[i].getDouble(scale); if (argnames[i] == "name") name = args[i].toString(); } std::stringstream keystream; keystream << filename << "|" << layername << "|" << name << "|" << xorigin << "|" << yorigin <<"|" << scale << "|" << fs::last_write_time(filename) << "|" << fs::file_size(filename); std::string key = keystream.str(); if (dxf_dim_cache.find(key) != dxf_dim_cache.end()) return dxf_dim_cache.find(key)->second; DxfData dxf(36, 0, 0, filename, layername, xorigin, yorigin, scale); for (size_t i = 0; i < dxf.dims.size(); i++) { if (!name.empty() && dxf.dims[i].name != name) continue; DxfData::Dim *d = &dxf.dims[i]; int type = d->type & 7; if (type == 0) { // Rotated, horizontal or vertical double x = d->coords[4][0] - d->coords[3][0]; double y = d->coords[4][1] - d->coords[3][1]; double angle = d->angle; double distance_projected_on_line = fabs(x * cos(angle*M_PI/180) + y * sin(angle*M_PI/180)); return dxf_dim_cache[key] = Value(distance_projected_on_line); } else if (type == 1) { // Aligned double x = d->coords[4][0] - d->coords[3][0]; double y = d->coords[4][1] - d->coords[3][1]; return dxf_dim_cache[key] = Value(sqrt(x*x + y*y)); } else if (type == 2) { // Angular double a1 = atan2(d->coords[0][0] - d->coords[5][0], d->coords[0][1] - d->coords[5][1]); double a2 = atan2(d->coords[4][0] - d->coords[3][0], d->coords[4][1] - d->coords[3][1]); return dxf_dim_cache[key] = Value(fabs(a1 - a2) * 180 / M_PI); } else if (type == 3 || type == 4) { // Diameter or Radius double x = d->coords[5][0] - d->coords[0][0]; double y = d->coords[5][1] - d->coords[0][1]; return dxf_dim_cache[key] = Value(sqrt(x*x + y*y)); } else if (type == 5) { // Angular 3 Point } else if (type == 6) { // Ordinate return dxf_dim_cache[key] = Value((d->type & 64) ? d->coords[3][0] : d->coords[3][1]); } PRINTB("WARNING: Dimension '%s' in '%s', layer '%s' has unsupported type!", name % filename % layername); return Value(); } PRINTB("WARNING: Can't find dimension '%s' in '%s', layer '%s'!", name % filename % layername); return Value(); } Value builtin_dxf_cross(const Context *ctx, const std::vector &argnames, const std::vector &args) { std::string filename; std::string layername; double xorigin = 0; double yorigin = 0; double scale = 1; for (size_t i = 0; i < argnames.size() && i < args.size(); i++) { if (argnames[i] == "file") filename = ctx->getAbsolutePath(args[i].toString()); if (argnames[i] == "layer") layername = args[i].toString(); if (argnames[i] == "origin") args[i].getVec2(xorigin, yorigin); if (argnames[i] == "scale") args[i].getDouble(scale); } std::stringstream keystream; keystream << filename << "|" << layername << "|" << xorigin << "|" << yorigin << "|" << scale << "|" << fs::last_write_time(filename) << "|" << fs::file_size(filename); std::string key = keystream.str(); if (dxf_cross_cache.find(key) != dxf_cross_cache.end()) return dxf_cross_cache.find(key)->second; DxfData dxf(36, 0, 0, filename, layername, xorigin, yorigin, scale); double coords[4][2]; for (size_t i = 0, j = 0; i < dxf.paths.size(); i++) { if (dxf.paths[i].indices.size() != 2) continue; coords[j][0] = dxf.points[dxf.paths[i].indices[0]][0]; coords[j++][1] = dxf.points[dxf.paths[i].indices[0]][1]; coords[j][0] = dxf.points[dxf.paths[i].indices[1]][0]; coords[j++][1] = dxf.points[dxf.paths[i].indices[1]][1]; if (j == 4) { double x1 = coords[0][0], y1 = coords[0][1]; double x2 = coords[1][0], y2 = coords[1][1]; double x3 = coords[2][0], y3 = coords[2][1]; double x4 = coords[3][0], y4 = coords[3][1]; double dem = (y4 - y3)*(x2 - x1) - (x4 - x3)*(y2 - y1); if (dem == 0) break; double ua = ((x4 - x3)*(y1 - y3) - (y4 - y3)*(x1 - x3)) / dem; // double ub = ((x2 - x1)*(y1 - y3) - (y2 - y1)*(x1 - x3)) / dem; double x = x1 + ua*(x2 - x1); double y = y1 + ua*(y2 - y1); Value::VectorType ret; ret.push_back(Value(x)); ret.push_back(Value(y)); return dxf_cross_cache[key] = Value(ret); } } PRINTB("WARNING: Can't find cross in '%s', layer '%s'!", filename % layername); return Value(); } void initialize_builtin_dxf_dim() { Builtins::init("dxf_dim", new BuiltinFunction(&builtin_dxf_dim)); Builtins::init("dxf_cross", new BuiltinFunction(&builtin_dxf_cross)); } openscad-2013.01+dfsg.orig/src/builtin.cc0000644000175000017500000000455712061131250017476 0ustar chrysnchrysn#include "builtin.h" #include "function.h" #include "module.h" #include Builtins *Builtins::instance(bool erase) { static Builtins *s_builtins = new Builtins; if (erase) { delete s_builtins; s_builtins = NULL; } return s_builtins; } void Builtins::init(const char *name, class AbstractModule *module) { Builtins::instance()->builtinmodules[name] = module; } void Builtins::init(const char *name, class AbstractFunction *function) { Builtins::instance()->builtinfunctions[name] = function; } extern void register_builtin_functions(); extern void register_builtin_csgops(); extern void register_builtin_transform(); extern void register_builtin_color(); extern void register_builtin_primitives(); extern void register_builtin_surface(); extern void register_builtin_control(); extern void register_builtin_render(); extern void register_builtin_import(); extern void register_builtin_projection(); extern void register_builtin_cgaladv(); extern void register_builtin_dxf_linear_extrude(); extern void register_builtin_dxf_rotate_extrude(); extern void initialize_builtin_dxf_dim(); /*! Registers all builtin functions. Call once for the whole app. */ void Builtins::initialize() { register_builtin_functions(); initialize_builtin_dxf_dim(); init("group", new AbstractModule()); register_builtin_csgops(); register_builtin_transform(); register_builtin_color(); register_builtin_primitives(); register_builtin_surface(); register_builtin_control(); register_builtin_render(); register_builtin_import(); register_builtin_projection(); register_builtin_cgaladv(); register_builtin_dxf_linear_extrude(); register_builtin_dxf_rotate_extrude(); this->deprecations["dxf_linear_extrude"] = "linear_extrude"; this->deprecations["dxf_rotate_extrude"] = "rotate_extrude"; this->deprecations["import_stl"] = "import"; this->deprecations["import_dxf"] = "import"; this->deprecations["import_off"] = "import"; } std::string Builtins::isDeprecated(const std::string &name) { if (this->deprecations.find(name) != this->deprecations.end()) { return this->deprecations[name]; } return std::string(); } Builtins::~Builtins() { BOOST_FOREACH(FunctionContainer::value_type &f, this->builtinfunctions) delete f.second; this->builtinfunctions.clear(); BOOST_FOREACH(ModuleContainer::value_type &m, this->builtinmodules) delete m.second; this->builtinmodules.clear(); } openscad-2013.01+dfsg.orig/src/renderer.h0000644000175000017500000000121211701151225017465 0ustar chrysnchrysn#ifndef RENDERER_H_ #define RENDERER_H_ #include "system-gl.h" #ifdef _MSC_VER // NULL #include #endif class Renderer { public: virtual ~Renderer() {} virtual void draw(bool showfaces, bool showedges) const = 0; enum ColorMode { COLORMODE_NONE, COLORMODE_MATERIAL, COLORMODE_CUTOUT, COLORMODE_HIGHLIGHT, COLORMODE_BACKGROUND, COLORMODE_MATERIAL_EDGES, COLORMODE_CUTOUT_EDGES, COLORMODE_HIGHLIGHT_EDGES, COLORMODE_BACKGROUND_EDGES }; virtual void setColor(const float color[4], GLint *shaderinfo = NULL) const; virtual void setColor(ColorMode colormode, GLint *shaderinfo = NULL) const; }; #endif // RENDERER_H openscad-2013.01+dfsg.orig/src/render-opencsg.cc.org0000644000175000017500000000547711640436732021552 0ustar chrysnchrysn#include "render-opencsg.h" #include "polyset.h" #include "csgterm.h" #ifdef ENABLE_OPENCSG # include #endif class OpenCSGPrim : public OpenCSG::Primitive { public: OpenCSGPrim(OpenCSG::Operation operation, unsigned int convexity) : OpenCSG::Primitive(operation, convexity) { } PolySet *p; double *m; int csgmode; virtual void render() { glPushMatrix(); glMultMatrixd(m); p->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode), m); glPopMatrix(); } }; void renderCSGChainviaOpenCSG(CSGChain *chain, GLint *shaderinfo, bool highlight, bool background) { std::vector primitives; int j = 0; for (int i = 0;; i++) { bool last = i == chain->polysets.size(); if (last || chain->types[i] == CSGTerm::TYPE_UNION) { if (j+1 != i) { OpenCSG::render(primitives); glDepthFunc(GL_EQUAL); } if (shaderinfo) glUseProgram(shaderinfo[0]); for (; j < i; j++) { double *m = chain->matrices[j]; glPushMatrix(); glMultMatrixd(m); int csgmode = chain->types[j] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; if (highlight) { chain->polysets[j]->render_surface(PolySet::COLORMODE_HIGHLIGHT, PolySet::csgmode_e(csgmode + 20), m, shaderinfo); } else if (background) { chain->polysets[j]->render_surface(PolySet::COLORMODE_BACKGROUND, PolySet::csgmode_e(csgmode + 10), m, shaderinfo); } else if (m[16] >= 0 || m[17] >= 0 || m[18] >= 0 || m[19] >= 0) { // User-defined color from source glColor4d(m[16], m[17], m[18], m[19]); if (shaderinfo) { glUniform4f(shaderinfo[1], m[16], m[17], m[18], m[19]); glUniform4f(shaderinfo[2], (m[16]+1)/2, (m[17]+1)/2, (m[18]+1)/2, 1.0); } chain->polysets[j]->render_surface(PolySet::COLORMODE_NONE, PolySet::csgmode_e(csgmode), m, shaderinfo); } else if (chain->types[j] == CSGTerm::TYPE_DIFFERENCE) { chain->polysets[j]->render_surface(PolySet::COLORMODE_CUTOUT, PolySet::csgmode_e(csgmode), m, shaderinfo); } else { chain->polysets[j]->render_surface(PolySet::COLORMODE_MATERIAL, PolySet::csgmode_e(csgmode), m, shaderinfo); } glPopMatrix(); } if (shaderinfo) glUseProgram(0); for (unsigned int k = 0; k < primitives.size(); k++) { delete primitives[k]; } glDepthFunc(GL_LEQUAL); primitives.clear(); } if (last) break; OpenCSGPrim *prim = new OpenCSGPrim(chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? OpenCSG::Subtraction : OpenCSG::Intersection, chain->polysets[i]->convexity); prim->p = chain->polysets[i]; prim->m = chain->matrices[i]; prim->csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; if (highlight) prim->csgmode += 20; else if (background) prim->csgmode += 10; primitives.push_back(prim); } } openscad-2013.01+dfsg.orig/src/nodedumper.cc0000644000175000017500000000434411642654340020202 0ustar chrysnchrysn#include "nodedumper.h" #include "state.h" #include #include #include /*! \class NodeDumper A visitor responsible for creating a text dump of a node tree. Also contains a cache for fast retrieval of the text representation of any node or subtree. */ bool NodeDumper::isCached(const AbstractNode &node) const { return !this->cache[node].empty(); } /*! Indent or deindent. Must be called before we output any children. */ void NodeDumper::handleIndent(const State &state) { if (state.isPrefix()) { this->currindent += "\t"; } else if (state.isPostfix()) { this->currindent.erase((this->currindent.length() >= 1) ? this->currindent.length() - 1 : 0); } } /*! Dumps the block of children contained in this->visitedchildren, including braces and indentation. All children are assumed to be cached already. */ std::string NodeDumper::dumpChildren(const AbstractNode &node) { std::stringstream dump; if (!this->visitedchildren[node.index()].empty()) { dump << " {\n"; for (ChildList::const_iterator iter = this->visitedchildren[node.index()].begin(); iter != this->visitedchildren[node.index()].end(); iter++) { assert(isCached(**iter)); dump << this->cache[**iter] << "\n"; } dump << this->currindent << "}"; } else { dump << ";"; } return dump.str(); } /*! Called for each node in the tree. Will abort traversal if we're cached */ Response NodeDumper::visit(State &state, const AbstractNode &node) { if (isCached(node)) return PruneTraversal; handleIndent(state); if (state.isPostfix()) { std::stringstream dump; dump << this->currindent; if (this->idprefix) dump << "n" << node.index() << ":"; dump << node; dump << dumpChildren(node); this->cache.insert(node, dump.str()); } handleVisitedChildren(state, node); return ContinueTraversal; } /*! Adds this given node to its parent's child list. Should be called for all nodes, including leaf nodes. */ void NodeDumper::handleVisitedChildren(const State &state, const AbstractNode &node) { if (state.isPostfix()) { this->visitedchildren.erase(node.index()); if (!state.parent()) { this->root = &node; } else { this->visitedchildren[state.parent()->index()].push_back(&node); } } } openscad-2013.01+dfsg.orig/src/progress.h0000644000175000017500000000102711516152336017537 0ustar chrysnchrysn#ifndef PROGRESS_H_ #define PROGRESS_H_ // Reset to 0 in _prep() and increased for each Node instance in progress_prepare() extern int progress_report_count; extern void (*progress_report_f)(const class AbstractNode*, void*, int); extern void *progress_report_userdata; void progress_report_prep(AbstractNode *root, void (*f)(const class AbstractNode *node, void *userdata, int mark), void *userdata); void progress_report_fin(); void progress_update(const AbstractNode *node, int mark); class ProgressCancelException { }; #endif openscad-2013.01+dfsg.orig/src/rendersettings.h0000644000175000017500000000116611710057132020731 0ustar chrysnchrysn#ifndef RENDERSETTINGS_H_ #define RENDERSETTINGS_H_ #include #include "linalg.h" class RenderSettings { public: static RenderSettings *inst(bool erase = false); enum RenderColor { BACKGROUND_COLOR, OPENCSG_FACE_FRONT_COLOR, OPENCSG_FACE_BACK_COLOR, CGAL_FACE_FRONT_COLOR, CGAL_FACE_2D_COLOR, CGAL_FACE_BACK_COLOR, CGAL_EDGE_FRONT_COLOR, CGAL_EDGE_BACK_COLOR, CGAL_EDGE_2D_COLOR, CROSSHAIR_COLOR }; void setColors(const std::map &colors); Color4f color(RenderColor idx); private: RenderSettings(); ~RenderSettings() {} std::map colors; }; #endif openscad-2013.01+dfsg.orig/src/mathc99.h0000644000175000017500000000044311516401335017146 0ustar chrysnchrysn#ifndef MATHC99_H_ #define MATHC99_H_ #ifdef WIN32 #include //for native win32 builds we need to provide C99 math functions by ourselves double round(double a); float fmin(float a, float b); float fmax(float a, float b); #else #include #endif #endif openscad-2013.01+dfsg.orig/src/PolySetEvaluator.h0000644000175000017500000000142311642654340021157 0ustar chrysnchrysn#ifndef POLYSETEVALUATOR_H_ #define POLYSETEVALUATOR_H_ #include "memory.h" class PolySetEvaluator { public: PolySetEvaluator(const class Tree &tree) : tree(tree) {} virtual ~PolySetEvaluator() {} const Tree &getTree() const { return this->tree; } virtual shared_ptr getPolySet(const class AbstractNode &, bool cache); virtual PolySet *evaluatePolySet(const class ProjectionNode &) { return NULL; } virtual PolySet *evaluatePolySet(const class LinearExtrudeNode &) { return NULL; } virtual PolySet *evaluatePolySet(const class RotateExtrudeNode &) { return NULL; } virtual PolySet *evaluatePolySet(const class CgaladvNode &) { return NULL; } virtual PolySet *evaluatePolySet(const class RenderNode &) { return NULL; } private: const Tree &tree; }; #endif openscad-2013.01+dfsg.orig/src/ProgressWidget.ui0000644000175000017500000000340011516152336021026 0ustar chrysnchrysn ProgressWidget 0 0 121 20 Form 5 0 24 %v / %m 0 0 12 12 12 12 :/icons/stopbutton.png:/icons/stopbutton.png 12 12 true openscad-2013.01+dfsg.orig/src/CGALCache.cc0000644000175000017500000000215111707660753017473 0ustar chrysnchrysn#include "CGALCache.h" #include "printutils.h" #include "CGAL_Nef_polyhedron.h" CGALCache *CGALCache::inst = NULL; CGALCache::CGALCache(size_t limit) : cache(limit) { } const CGAL_Nef_polyhedron &CGALCache::get(const std::string &id) const { const CGAL_Nef_polyhedron &N = *this->cache[id]; #ifdef DEBUG PRINTB("CGAL Cache hit: %s (%d bytes)", id.substr(0, 40) % N.weight()); #endif return N; } bool CGALCache::insert(const std::string &id, const CGAL_Nef_polyhedron &N) { bool inserted = this->cache.insert(id, new CGAL_Nef_polyhedron(N), N.weight()); #ifdef DEBUG if (inserted) PRINTB("CGAL Cache insert: %s (%d bytes)", id.substr(0, 40) % N.weight()); else PRINTB("CGAL Cache insert failed: %s (%d bytes)", id.substr(0, 40) % N.weight()); #endif return inserted; } size_t CGALCache::maxSize() const { return this->cache.maxCost(); } void CGALCache::setMaxSize(size_t limit) { this->cache.setMaxCost(limit); } void CGALCache::clear() { cache.clear(); } void CGALCache::print() { PRINTB("CGAL Polyhedrons in cache: %d", this->cache.size()); PRINTB("CGAL cache size in bytes: %d", this->cache.totalCost()); } openscad-2013.01+dfsg.orig/src/AppleEvents.cc0000644000175000017500000000150311516152336020256 0ustar chrysnchrysn#include #include #include "MainWindow.h" extern "C" { OSErr eventHandler(const AppleEvent *ev, AppleEvent *reply, SRefCon refcon); } OSErr eventHandler(const AppleEvent *, AppleEvent *, SRefCon ) { // FIXME: Ugly hack; just using the first MainWindow we can find MainWindow *mainwin = NULL; foreach (QWidget *w, QApplication::topLevelWidgets()) { mainwin = qobject_cast(w); if (mainwin) break; } if (mainwin) { mainwin->actionReloadCompile(); } return noErr; } void installAppleEventHandlers() { // Reload handler OSErr err = AEInstallEventHandler('SCAD', 'relo', NewAEEventHandlerUPP(eventHandler), 0, true); require_noerr(err, CantInstallAppleEventHandler); return; CantInstallAppleEventHandler: fprintf(stderr, "AEInstallEventHandler() failed: %d\n", err); ; } openscad-2013.01+dfsg.orig/src/rendersettings.cc0000644000175000017500000000206711710057161021072 0ustar chrysnchrysn#include "rendersettings.h" RenderSettings *RenderSettings::inst(bool erase) { static RenderSettings *instance = new RenderSettings; if (erase) { delete instance; instance = NULL; } return instance; } RenderSettings::RenderSettings() { this->colors[BACKGROUND_COLOR] = Color4f(0xff, 0xff, 0xe5); this->colors[OPENCSG_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); this->colors[OPENCSG_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); this->colors[CGAL_FACE_FRONT_COLOR] = Color4f(0xf9, 0xd7, 0x2c); this->colors[CGAL_FACE_BACK_COLOR] = Color4f(0x9d, 0xcb, 0x51); this->colors[CGAL_FACE_2D_COLOR] = Color4f(0x00, 0xbf, 0x99); this->colors[CGAL_EDGE_FRONT_COLOR] = Color4f(0xff, 0x00, 0x00); this->colors[CGAL_EDGE_BACK_COLOR] = Color4f(0xff, 0x00, 0x00); this->colors[CGAL_EDGE_2D_COLOR] = Color4f(0xff, 0x00, 0x00); this->colors[CROSSHAIR_COLOR] = Color4f(0x80, 0x00, 0x00); } Color4f RenderSettings::color(RenderColor idx) { return this->colors[idx]; } void RenderSettings::setColors(const std::map &colors) { this->colors = colors; } openscad-2013.01+dfsg.orig/src/cgalfwd.h0000644000175000017500000000256411640436732017314 0ustar chrysnchrysn#ifndef CGALFWD_H_ #define CGALFWD_H_ #ifndef CGAL_FORWARD #include "cgal.h" #else #ifdef ENABLE_CGAL #include namespace CGAL { class Gmpq; template class Extended_cartesian; class HDS_items; template class Nef_polyhedron_2; } typedef CGAL::Gmpq NT; typedef CGAL::Extended_cartesian CGAL_Kernel2; typedef CGAL::Nef_polyhedron_2 CGAL_Nef_polyhedron2; namespace CGAL { template class Cartesian; template struct Default_items; class SNC_indexed_items; template class Nef_polyhedron_3; } typedef CGAL::Cartesian CGAL_Kernel3; typedef CGAL::Nef_polyhedron_3 CGAL_Nef_polyhedron3; namespace CGAL { #ifndef CGAL_ALLOCATOR # define CGAL_ALLOCATOR(T) std::allocator< T > #endif class HalfedgeDS_items_2; template class HalfedgeDS_default; class Polyhedron_items_3; template class Polyhedron_3; } typedef CGAL::Polyhedron_3, CGAL_ALLOCATOR(int)> CGAL_Polyhedron; #endif /* ENABLE_CGAL */ #endif #endif openscad-2013.01+dfsg.orig/src/CGALEvaluator.cc0000644000175000017500000005133712076022154020427 0ustar chrysnchrysn#include "CGALCache.h" #include "CGALEvaluator.h" #include "visitor.h" #include "state.h" #include "module.h" // FIXME: Temporarily for ModuleInstantiation #include "printutils.h" #include "csgnode.h" #include "cgaladvnode.h" #include "transformnode.h" #include "polyset.h" #include "dxfdata.h" #include "dxftess.h" #include "Tree.h" #include "CGALCache.h" #include "cgal.h" #include "cgalutils.h" #ifdef NDEBUG #define PREV_NDEBUG NDEBUG #undef NDEBUG #endif #include #ifdef PREV_NDEBUG #define NDEBUG PREV_NDEBUG #endif #include #include #include #include #include #include #include #include #include CGAL_Nef_polyhedron CGALEvaluator::evaluateCGALMesh(const AbstractNode &node) { if (!isCached(node)) { Traverser evaluate(*this, node, Traverser::PRE_AND_POSTFIX); evaluate.execute(); return this->root; } return CGALCache::instance()->get(this->tree.getIdString(node)); } bool CGALEvaluator::isCached(const AbstractNode &node) const { return CGALCache::instance()->contains(this->tree.getIdString(node)); } /*! Modifies target by applying op to target and src: target = target [op] src */ void CGALEvaluator::process(CGAL_Nef_polyhedron &target, const CGAL_Nef_polyhedron &src, CGALEvaluator::CsgOp op) { if (target.dim != 2 && target.dim != 3) { assert(false && "Dimension of Nef polyhedron must be 2 or 3"); } if (src.isEmpty()) return; // Empty polyhedron. This can happen for e.g. square([0,0]) if (target.isEmpty() && op != CGE_UNION) return; // empty op => empty if (target.dim != src.dim) return; // If someone tries to e.g. union 2d and 3d objects CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { switch (op) { case CGE_UNION: if (target.isEmpty()) target = src.copy(); else target += src; break; case CGE_INTERSECTION: target *= src; break; case CGE_DIFFERENCE: target -= src; break; case CGE_MINKOWSKI: target.minkowski(src); break; } } catch (const CGAL::Failure_exception &e) { // union && difference assert triggered by testdata/scad/bugs/rotate-diff-nonmanifold-crash.scad and testdata/scad/bugs/issue204.scad std::string opstr = op == CGE_UNION ? "union" : op == CGE_INTERSECTION ? "intersection" : op == CGE_DIFFERENCE ? "difference" : op == CGE_MINKOWSKI ? "minkowski" : "UNKNOWN"; PRINTB("CGAL error in CGAL_Nef_polyhedron's %s operator: %s", opstr % e.what()); // Errors can result in corrupt polyhedrons, so put back the old one target = src; } CGAL::set_error_behaviour(old_behaviour); } /*! */ CGAL_Nef_polyhedron CGALEvaluator::applyToChildren(const AbstractNode &node, CGALEvaluator::CsgOp op) { CGAL_Nef_polyhedron N; BOOST_FOREACH(const ChildItem &item, this->visitedchildren[node.index()]) { const AbstractNode *chnode = item.first; const CGAL_Nef_polyhedron &chN = item.second; // FIXME: Don't use deep access to modinst members if (chnode->modinst->isBackground()) continue; // NB! We insert into the cache here to ensure that all children of // a node is a valid object. If we inserted as we created them, the // cache could have been modified before we reach this point due to a large // sibling object. if (!isCached(*chnode)) { CGALCache::instance()->insert(this->tree.getIdString(*chnode), chN); } // Initialize N on first iteration with first expected geometric object if (N.isNull() && !N.isEmpty()) N = chN.copy(); else process(N, chN, op); chnode->progress_report(); } return N; } CGAL_Nef_polyhedron CGALEvaluator::applyHull(const CgaladvNode &node) { CGAL_Nef_polyhedron N; std::list polys; std::list points2d; std::list points3d; int dim = 0; BOOST_FOREACH(const ChildItem &item, this->visitedchildren[node.index()]) { const AbstractNode *chnode = item.first; const CGAL_Nef_polyhedron &chN = item.second; // FIXME: Don't use deep access to modinst members if (chnode->modinst->isBackground()) continue; if (chN.dim == 0) continue; // Ignore object with dimension 0 (e.g. echo) if (dim == 0) { dim = chN.dim; } else if (dim != chN.dim) { PRINT("WARNING: hull() does not support mixing 2D and 3D objects."); continue; } if (dim == 2) { CGAL_Nef_polyhedron2::Explorer explorer = chN.p2->explorer(); BOOST_FOREACH(const CGAL_Nef_polyhedron2::Explorer::Vertex &vh, std::make_pair(explorer.vertices_begin(), explorer.vertices_end())) { if (explorer.is_standard(&vh)) { points2d.push_back(explorer.point(&vh)); } } } else if (dim == 3) { CGAL_Polyhedron P; if (!chN.p3->is_simple()) { PRINT("Hull() currently requires a valid 2-manifold. Please modify your design. See http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/STL_Import_and_Export"); } else { chN.p3->convert_to_Polyhedron(P); std::transform(P.vertices_begin(), P.vertices_end(), std::back_inserter(points3d), boost::bind(static_cast(&CGAL_Polyhedron::Vertex::point), _1)); } } chnode->progress_report(); } if (dim == 2) { std::list result; CGAL::convex_hull_2(points2d.begin(), points2d.end(),std:: back_inserter(result)); N = CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron2(result.begin(), result.end(), CGAL_Nef_polyhedron2::INCLUDED)); } else if (dim == 3) { CGAL_Polyhedron P; if (points3d.size()>3) CGAL::convex_hull_3(points3d.begin(), points3d.end(), P); N = CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron3(P)); } return N; } /* Typical visitor behavior: o In prefix: Check if we're cached -> prune o In postfix: Check if we're cached -> don't apply operator to children o In postfix: addToParent() */ Response CGALEvaluator::visit(State &state, const AbstractNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { CGAL_Nef_polyhedron N; if (!isCached(node)) N = applyToChildren(node, CGE_UNION); else N = CGALCache::instance()->get(this->tree.getIdString(node)); addToParent(state, node, N); } return ContinueTraversal; } Response CGALEvaluator::visit(State &state, const AbstractIntersectionNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { CGAL_Nef_polyhedron N; if (!isCached(node)) N = applyToChildren(node, CGE_INTERSECTION); else N = CGALCache::instance()->get(this->tree.getIdString(node)); addToParent(state, node, N); } return ContinueTraversal; } Response CGALEvaluator::visit(State &state, const CsgNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { CGAL_Nef_polyhedron N; if (!isCached(node)) { CGALEvaluator::CsgOp op; switch (node.type) { case CSG_TYPE_UNION: op = CGE_UNION; break; case CSG_TYPE_DIFFERENCE: op = CGE_DIFFERENCE; break; case CSG_TYPE_INTERSECTION: op = CGE_INTERSECTION; break; default: assert(false); } N = applyToChildren(node, op); } else { N = CGALCache::instance()->get(this->tree.getIdString(node)); } addToParent(state, node, N); } return ContinueTraversal; } Response CGALEvaluator::visit(State &state, const TransformNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { CGAL_Nef_polyhedron N; if (!isCached(node)) { // First union all children N = applyToChildren(node, CGE_UNION); if ( matrix_contains_infinity( node.matrix ) || matrix_contains_nan( node.matrix ) ) { // due to the way parse/eval works we can't currently distinguish between NaN and Inf PRINT("Warning: Transformation matrix contains Not-a-Number and/or Infinity - removing object."); N.reset(); } // Then apply transform // If there is no geometry under the transform, N will be empty // just silently ignore such nodes if (!N.isNull()) { if (N.dim == 2) { // Unfortunately CGAL provides no transform method for CGAL_Nef_polyhedron2 // objects. So we convert in to our internal 2d data format, transform it, // tesselate it and create a new CGAL_Nef_polyhedron2 from it.. What a hack! Eigen::Matrix2f testmat; testmat << node.matrix(0,0), node.matrix(0,1), node.matrix(1,0), node.matrix(1,1); if (testmat.determinant() == 0) { PRINT("Warning: Scaling a 2D object with 0 - removing object"); N.reset(); } else { CGAL_Aff_transformation2 t( node.matrix(0,0), node.matrix(0,1), node.matrix(0,3), node.matrix(1,0), node.matrix(1,1), node.matrix(1,3), node.matrix(3,3)); DxfData *dd = N.convertToDxfData(); for (size_t i=0; i < dd->points.size(); i++) { CGAL_Kernel2::Point_2 p = CGAL_Kernel2::Point_2(dd->points[i][0], dd->points[i][1]); p = t.transform(p); dd->points[i][0] = to_double(p.x()); dd->points[i][1] = to_double(p.y()); } PolySet ps; ps.is2d = true; dxf_tesselate(&ps, *dd, 0, true, false, 0); N = evaluateCGALMesh(ps); delete dd; } } else if (N.dim == 3) { if (node.matrix.matrix().determinant() == 0) { PRINT("Warning: Scaling a 3D object with 0 - removing object"); N.reset(); } else { CGAL_Aff_transformation t( node.matrix(0,0), node.matrix(0,1), node.matrix(0,2), node.matrix(0,3), node.matrix(1,0), node.matrix(1,1), node.matrix(1,2), node.matrix(1,3), node.matrix(2,0), node.matrix(2,1), node.matrix(2,2), node.matrix(2,3), node.matrix(3,3)); N.p3->transform(t); } } } } else { N = CGALCache::instance()->get(this->tree.getIdString(node)); } addToParent(state, node, N); } return ContinueTraversal; } Response CGALEvaluator::visit(State &state, const AbstractPolyNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { CGAL_Nef_polyhedron N; if (!isCached(node)) { // Apply polyset operation shared_ptr ps = this->psevaluator.getPolySet(node, false); if (ps) { N = evaluateCGALMesh(*ps); // print_messages_pop(); node.progress_report(); } } else { N = CGALCache::instance()->get(this->tree.getIdString(node)); } addToParent(state, node, N); } return ContinueTraversal; } Response CGALEvaluator::visit(State &state, const CgaladvNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { CGAL_Nef_polyhedron N; if (!isCached(node)) { CGALEvaluator::CsgOp op; switch (node.type) { case MINKOWSKI: op = CGE_MINKOWSKI; N = applyToChildren(node, op); break; case GLIDE: PRINT("WARNING: glide() is not implemented yet!"); return PruneTraversal; break; case SUBDIV: PRINT("WARNING: subdiv() is not implemented yet!"); return PruneTraversal; break; case HULL: N = applyHull(node); break; } } else { N = CGALCache::instance()->get(this->tree.getIdString(node)); } addToParent(state, node, N); } return ContinueTraversal; } /*! Adds ourself to out parent's list of traversed children. Call this for _every_ node which affects output during the postfix traversal. */ void CGALEvaluator::addToParent(const State &state, const AbstractNode &node, const CGAL_Nef_polyhedron &N) { assert(state.isPostfix()); this->visitedchildren.erase(node.index()); if (state.parent()) { this->visitedchildren[state.parent()->index()].push_back(std::make_pair(&node, N)); } else { // Root node, insert into cache if (!isCached(node)) { if (!CGALCache::instance()->insert(this->tree.getIdString(node), N)) { PRINT("WARNING: CGAL Evaluator: Root node didn't fit into cache"); } } this->root = N; } } CGAL_Nef_polyhedron CGALEvaluator::evaluateCGALMesh(const PolySet &ps) { if (ps.empty()) return CGAL_Nef_polyhedron(ps.is2d ? 2 : 3); if (ps.is2d) { #if 0 // This version of the code causes problems in some cases. // Example testcase: import_dxf("testdata/polygon8.dxf"); // typedef std::list point_list_t; typedef point_list_t::iterator point_list_it; std::list< point_list_t > pdata_point_lists; std::list < std::pair < point_list_it, point_list_it > > pdata; Grid2d grid(GRID_COARSE); for (int i = 0; i < ps.polygons.size(); i++) { pdata_point_lists.push_back(point_list_t()); for (int j = 0; j < ps.polygons[i].size(); j++) { double x = ps.polygons[i][j].x; double y = ps.polygons[i][j].y; CGAL_Nef_polyhedron2::Point p; if (grid.has(x, y)) { p = grid.data(x, y); } else { p = CGAL_Nef_polyhedron2::Point(x, y); grid.data(x, y) = p; } pdata_point_lists.back().push_back(p); } pdata.push_back(std::make_pair(pdata_point_lists.back().begin(), pdata_point_lists.back().end())); } CGAL_Nef_polyhedron2 N(pdata.begin(), pdata.end(), CGAL_Nef_polyhedron2::POLYGONS); return CGAL_Nef_polyhedron(N); #endif #if 0 // This version of the code works fine but is pretty slow. // CGAL_Nef_polyhedron2 N; Grid2d grid(GRID_COARSE); for (int i = 0; i < ps.polygons.size(); i++) { std::list plist; for (int j = 0; j < ps.polygons[i].size(); j++) { double x = ps.polygons[i][j].x; double y = ps.polygons[i][j].y; CGAL_Nef_polyhedron2::Point p; if (grid.has(x, y)) { p = grid.data(x, y); } else { p = CGAL_Nef_polyhedron2::Point(x, y); grid.data(x, y) = p; } plist.push_back(p); } N += CGAL_Nef_polyhedron2(plist.begin(), plist.end(), CGAL_Nef_polyhedron2::INCLUDED); } return CGAL_Nef_polyhedron(N); #endif #if 1 // This version of the code does essentially the same thing as the 2nd // version but merges some triangles before sending them to CGAL. This adds // complexity but speeds up things.. // struct PolyReducer { Grid2d grid; std::map, std::pair > edge_to_poly; std::map points; typedef std::map > PolygonMap; PolygonMap polygons; int poly_n; void add_edges(int pn) { for (unsigned int j = 1; j <= this->polygons[pn].size(); j++) { int a = this->polygons[pn][j-1]; int b = this->polygons[pn][j % this->polygons[pn].size()]; if (a > b) { a = a^b; b = a^b; a = a^b; } if (this->edge_to_poly[std::pair(a, b)].first == 0) this->edge_to_poly[std::pair(a, b)].first = pn; else if (this->edge_to_poly[std::pair(a, b)].second == 0) this->edge_to_poly[std::pair(a, b)].second = pn; else abort(); } } void del_poly(int pn) { for (unsigned int j = 1; j <= this->polygons[pn].size(); j++) { int a = this->polygons[pn][j-1]; int b = this->polygons[pn][j % this->polygons[pn].size()]; if (a > b) { a = a^b; b = a^b; a = a^b; } if (this->edge_to_poly[std::pair(a, b)].first == pn) this->edge_to_poly[std::pair(a, b)].first = 0; if (this->edge_to_poly[std::pair(a, b)].second == pn) this->edge_to_poly[std::pair(a, b)].second = 0; } this->polygons.erase(pn); } PolyReducer(const PolySet &ps) : grid(GRID_COARSE), poly_n(1) { int point_n = 1; for (size_t i = 0; i < ps.polygons.size(); i++) { for (size_t j = 0; j < ps.polygons[i].size(); j++) { double x = ps.polygons[i][j][0]; double y = ps.polygons[i][j][1]; if (this->grid.has(x, y)) { int idx = this->grid.data(x, y); // Filter away two vertices with the same index (due to grid) // This could be done in a more general way, but we'd rather redo the entire // grid concept instead. std::vector &poly = this->polygons[this->poly_n]; if (std::find(poly.begin(), poly.end(), idx) == poly.end()) { poly.push_back(this->grid.data(x, y)); } } else { this->grid.align(x, y) = point_n; this->polygons[this->poly_n].push_back(point_n); this->points[point_n] = CGAL_Nef_polyhedron2::Point(x, y); point_n++; } } if (this->polygons[this->poly_n].size() >= 3) { add_edges(this->poly_n); this->poly_n++; } else { this->polygons.erase(this->poly_n); } } } int merge(int p1, int p1e, int p2, int p2e) { for (unsigned int i = 1; i < this->polygons[p1].size(); i++) { int j = (p1e + i) % this->polygons[p1].size(); this->polygons[this->poly_n].push_back(this->polygons[p1][j]); } for (unsigned int i = 1; i < this->polygons[p2].size(); i++) { int j = (p2e + i) % this->polygons[p2].size(); this->polygons[this->poly_n].push_back(this->polygons[p2][j]); } del_poly(p1); del_poly(p2); add_edges(this->poly_n); return this->poly_n++; } void reduce() { std::deque work_queue; BOOST_FOREACH(const PolygonMap::value_type &i, polygons) { work_queue.push_back(i.first); } while (!work_queue.empty()) { int poly1_n = work_queue.front(); work_queue.pop_front(); if (this->polygons.find(poly1_n) == this->polygons.end()) continue; for (unsigned int j = 1; j <= this->polygons[poly1_n].size(); j++) { int a = this->polygons[poly1_n][j-1]; int b = this->polygons[poly1_n][j % this->polygons[poly1_n].size()]; if (a > b) { a = a^b; b = a^b; a = a^b; } if (this->edge_to_poly[std::pair(a, b)].first != 0 && this->edge_to_poly[std::pair(a, b)].second != 0) { int poly2_n = this->edge_to_poly[std::pair(a, b)].first + this->edge_to_poly[std::pair(a, b)].second - poly1_n; int poly2_edge = -1; for (unsigned int k = 1; k <= this->polygons[poly2_n].size(); k++) { int c = this->polygons[poly2_n][k-1]; int d = this->polygons[poly2_n][k % this->polygons[poly2_n].size()]; if (c > d) { c = c^d; d = c^d; c = c^d; } if (a == c && b == d) { poly2_edge = k-1; continue; } int poly3_n = this->edge_to_poly[std::pair(c, d)].first + this->edge_to_poly[std::pair(c, d)].second - poly2_n; if (poly3_n < 0) continue; if (poly3_n == poly1_n) goto next_poly1_edge; } work_queue.push_back(merge(poly1_n, j-1, poly2_n, poly2_edge)); goto next_poly1; } next_poly1_edge:; } next_poly1:; } } CGAL_Nef_polyhedron2 *toNef() { CGAL_Nef_polyhedron2 *N = new CGAL_Nef_polyhedron2; BOOST_FOREACH(const PolygonMap::value_type &i, polygons) { std::list plist; for (unsigned int j = 0; j < i.second.size(); j++) { int p = i.second[j]; plist.push_back(points[p]); } *N += CGAL_Nef_polyhedron2(plist.begin(), plist.end(), CGAL_Nef_polyhedron2::INCLUDED); } return N; } }; PolyReducer pr(ps); pr.reduce(); return CGAL_Nef_polyhedron(pr.toNef()); #endif #if 0 // This is another experimental version. I should run faster than the above, // is a lot simpler and has only one known weakness: Degenerate polygons, which // get repaired by GLUTess, might trigger a CGAL crash here. The only // known case for this is triangle-with-duplicate-vertex.dxf // FIXME: If we just did a projection, we need to recreate the border! if (ps.polygons.size() > 0) assert(ps.borders.size() > 0); CGAL_Nef_polyhedron2 N; Grid2d grid(GRID_COARSE); for (int i = 0; i < ps.borders.size(); i++) { std::list plist; for (int j = 0; j < ps.borders[i].size(); j++) { double x = ps.borders[i][j].x; double y = ps.borders[i][j].y; CGAL_Nef_polyhedron2::Point p; if (grid.has(x, y)) { p = grid.data(x, y); } else { p = CGAL_Nef_polyhedron2::Point(x, y); grid.data(x, y) = p; } plist.push_back(p); } // FIXME: If a border (path) has a duplicate vertex in dxf, // the CGAL_Nef_polyhedron2 constructor will crash. N ^= CGAL_Nef_polyhedron2(plist.begin(), plist.end(), CGAL_Nef_polyhedron2::INCLUDED); } return CGAL_Nef_polyhedron(N); #endif } else // not (this->is2d) { CGAL_Nef_polyhedron3 *N = NULL; CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); try { // FIXME: Are we leaking memory for the CGAL_Polyhedron object? CGAL_Polyhedron *P = createPolyhedronFromPolySet(ps); if (P) { N = new CGAL_Nef_polyhedron3(*P); } } catch (const CGAL::Assertion_exception &e) { PRINTB("CGAL error in CGAL_Nef_polyhedron3(): %s", e.what()); } CGAL::set_error_behaviour(old_behaviour); return CGAL_Nef_polyhedron(N); } return CGAL_Nef_polyhedron(); } openscad-2013.01+dfsg.orig/src/printutils.h0000644000175000017500000000227312076022156020112 0ustar chrysnchrysn#ifndef PRINTUTILS_H_ #define PRINTUTILS_H_ #include #include #include #include typedef void (OutputHandlerFunc)(const std::string &msg, void *userdata); extern OutputHandlerFunc *outputhandler; extern void *outputhandler_data; void set_output_handler(OutputHandlerFunc *newhandler, void *userdata); extern std::list print_messages_stack; void print_messages_push(); void print_messages_pop(); void PRINT(const std::string &msg); #define PRINTB(_fmt, _arg) do { PRINT(str(boost::format(_fmt) % _arg)); } while (0) void PRINT_NOCACHE(const std::string &msg); #define PRINTB_NOCACHE(_fmt, _arg) do { PRINT_NOCACHE(str(boost::format(_fmt) % _arg)); } while (0) // extremely simple logging, eventually replace with something like boost.log // usage: logstream out(5); openscad_loglevel=6; out << "hi"; static int openscad_loglevel = 0; class logstream { public: std::ostream *out; int loglevel; logstream( int level = 0 ) { loglevel = level; out = &(std::cout); } template logstream & operator<<( T const &t ) { if (out && loglevel <= openscad_loglevel) { (*out) << t ; out->flush(); } return *this; } }; #endif openscad-2013.01+dfsg.orig/src/stl-utils.h0000644000175000017500000000035611640436732017642 0ustar chrysnchrysn#ifndef STLUTILS_H_ #define STLUTILS_H_ template struct del_fun_t { del_fun_t& operator()(T* p) { delete p; return *this; } }; template del_fun_t del_fun() { return del_fun_t(); } #endif openscad-2013.01+dfsg.orig/src/AboutDialog.html0000644000175000017500000001152112076022243020575 0ustar chrysnchrysn

OpenSCAD version __VERSION__

Copyright (C) 2009-2013 Marius Kintel <marius@kintel.net> and Clifford Wolf <clifford@clifford.at>

License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Please visit this link for a copy of the license: GPL 2.0

Tools & Libraries used

  • GNU GMP
  • GNU MPFR
  • CGAL
  • Eigen2
  • OpenCSG
  • OpenGL
  • GLEW
  • Qt Toolkit
  • Boost
  • Bison
  • Flex
  • CMake
  • MingW
  • LodePNG
  • MXE
  • Linux
  • Mac OSX
  • C++, GCC, clang
  • python
  • Nullsoft installer

    Acknowledgements

    OpenSCAD Github Project members (public)

  • Marius Kintel
  • Clifford Wolf
  • Giles Bathgate
  • Brad Pitcher
  • Don Bright

    Debian maintainer: chrysn

    Patches

  • meta23
  • jasonblewis
  • gregjurman
  • brianolson
  • tjhowse
  • logxen
  • iamwilhelm
  • clothbot
  • colah

    Mailing list, bug reports, testing, contribs, &c

    nop head, Triffid Hunter, Len Trigg, Kliment Yanev, Christian Siefkes, Andrew Plumb, Whosawhatsis, MichaelAtOz, Tony Buser, mrhdias, ibyte8bits, Koen Kooi, Tomas Mudrunka, knuds, cadr, mshearn, Hans L, Brett Sutton, hmnapier, Eero af Heurlin, caliston, 5263, ghost, 42loop, uniqx, Michael Thomson, Michael Ivko, Pierre Doucet, myglc2, Alan Cox, Peter Falke, Michael Ambrus, Gordon Wrigley, Ed Nisley, Stony Smith, Pasca Andrei, David Goodenough, William A Adams, mrrobinson, 1i7, benhowes ... and many others

    Hosting & resources

  • Github
  • Rock Linux
  • Thingiverse

    Laurent Guerby and the GCC Compile Farm, with OSUOSL, IRILL, FSF France, AMD, Intel, IBM, &c.

    Trademarks are property of their owners and do not imply affiliation with OpenSCAD

    Apologies to anyone left out. Please file an issue on OpenSCAD's github if you know of someone who belongs here.

    openscad-2013.01+dfsg.orig/src/CGALCache.h0000644000175000017500000000115311703565233017327 0ustar chrysnchrysn#ifndef CGALCACHE_H_ #define CGALCACHE_H_ #include "cache.h" /*! */ class CGALCache { public: CGALCache(size_t limit = 100*1024*1024); static CGALCache *instance() { if (!inst) inst = new CGALCache; return inst; } bool contains(const std::string &id) const { return this->cache.contains(id); } const class CGAL_Nef_polyhedron &get(const std::string &id) const; bool insert(const std::string &id, const CGAL_Nef_polyhedron &N); size_t maxSize() const; void setMaxSize(size_t limit); void clear(); void print(); private: static CGALCache *inst; Cache cache; }; #endif openscad-2013.01+dfsg.orig/src/editor.cc0000644000175000017500000000544312006350464017322 0ustar chrysnchrysn#include "editor.h" #include "Preferences.h" #ifndef _QCODE_EDIT_ void Editor::indentSelection() { QTextCursor cursor = textCursor(); int p1 = cursor.selectionStart(); QString txt = cursor.selectedText(); txt.replace(QString(QChar(8233)), QString(QChar(8233)) + QString("\t")); if (txt.endsWith(QString(QChar(8233)) + QString("\t"))) txt.chop(1); txt = QString("\t") + txt; cursor.insertText(txt); int p2 = cursor.position(); cursor.setPosition(p1, QTextCursor::MoveAnchor); cursor.setPosition(p2, QTextCursor::KeepAnchor); setTextCursor(cursor); } void Editor::unindentSelection() { QTextCursor cursor = textCursor(); int p1 = cursor.selectionStart(); QString txt = cursor.selectedText(); txt.replace(QString(QChar(8233)) + QString("\t"), QString(QChar(8233))); if (txt.startsWith(QString("\t"))) txt.remove(0, 1); cursor.insertText(txt); int p2 = cursor.position(); cursor.setPosition(p1, QTextCursor::MoveAnchor); cursor.setPosition(p2, QTextCursor::KeepAnchor); setTextCursor(cursor); } void Editor::commentSelection() { QTextCursor cursor = textCursor(); int p1 = cursor.selectionStart(); QString txt = cursor.selectedText(); txt.replace(QString(QChar(8233)), QString(QChar(8233)) + QString("//")); if (txt.endsWith(QString(QChar(8233)) + QString("//"))) txt.chop(2); txt = QString("//") + txt; cursor.insertText(txt); int p2 = cursor.position(); cursor.setPosition(p1, QTextCursor::MoveAnchor); cursor.setPosition(p2, QTextCursor::KeepAnchor); setTextCursor(cursor); } void Editor::uncommentSelection() { QTextCursor cursor = textCursor(); int p1 = cursor.selectionStart(); QString txt = cursor.selectedText(); txt.replace(QString(QChar(8233)) + QString("//"), QString(QChar(8233))); if (txt.startsWith(QString("//"))) txt.remove(0, 2); cursor.insertText(txt); int p2 = cursor.position(); cursor.setPosition(p1, QTextCursor::MoveAnchor); cursor.setPosition(p2, QTextCursor::KeepAnchor); setTextCursor(cursor); } void Editor::zoomIn() { // See also QT's implementation in QEditor.cpp QSettings settings; QFont tmp_font = this->font() ; if ( font().pointSize() >= 1 ) tmp_font.setPointSize( 1 + font().pointSize() ); else tmp_font.setPointSize( 1 ); settings.setValue("editor/fontsize", tmp_font.pointSize()); this->setFont( tmp_font ); } void Editor::zoomOut() { QSettings settings; QFont tmp_font = this->font(); if ( font().pointSize() >= 2 ) tmp_font.setPointSize( -1 + font().pointSize() ); else tmp_font.setPointSize( 1 ); settings.setValue("editor/fontsize", tmp_font.pointSize()); this->setFont( tmp_font ); } void Editor::wheelEvent ( QWheelEvent * event ) { if (event->modifiers() == Qt::ControlModifier) { if (event->delta() > 0 ) zoomIn(); else if (event->delta() < 0 ) zoomOut(); } else { QTextEdit::wheelEvent( event ); } } #endif openscad-2013.01+dfsg.orig/src/CGALRenderer.h0000644000175000017500000000053711703405075020074 0ustar chrysnchrysn#ifndef CGALRENDERER_H_ #define CGALRENDERER_H_ #include "renderer.h" class CGALRenderer : public Renderer { public: CGALRenderer(const class CGAL_Nef_polyhedron &root); ~CGALRenderer(); void draw(bool showfaces, bool showedges) const; public: const CGAL_Nef_polyhedron &root; class Polyhedron *polyhedron; class PolySet *polyset; }; #endif openscad-2013.01+dfsg.orig/src/traverser.h0000644000175000017500000000113311664172103017704 0ustar chrysnchrysn#ifndef TRAVERSER_H_ #define TRAVERSER_H_ enum Response {ContinueTraversal, AbortTraversal, PruneTraversal}; class Traverser { public: enum TraversalType {PREFIX, POSTFIX, PRE_AND_POSTFIX}; Traverser(class Visitor &visitor, const class AbstractNode &root, TraversalType travtype) : visitor(visitor), root(root), traversaltype(travtype) { } virtual ~Traverser() { } void execute(); // FIXME: reverse parameters Response traverse(const AbstractNode &node, const class State &state); private: Visitor &visitor; const AbstractNode &root; TraversalType traversaltype; }; #endif openscad-2013.01+dfsg.orig/src/cgalworker.h0000644000175000017500000000055711703565233020044 0ustar chrysnchrysn#ifndef CGALWORKER_H_ #define CGALWORKER_H_ #include class CGALWorker : public QObject { Q_OBJECT; public: CGALWorker(); virtual ~CGALWorker(); public slots: void start(const class Tree &tree); protected slots: void work(); signals: void done(class CGAL_Nef_polyhedron *); protected: class QThread *thread; const class Tree *tree; }; #endif openscad-2013.01+dfsg.orig/src/OpenCSGWarningDialog.h0000644000175000017500000000045711670266504021611 0ustar chrysnchrysn#ifndef OPENCSGWARNINGDIALOG_H_ #define OPENCSGWARNINGDIALOG_H_ #include "ui_OpenCSGWarningDialog.h" class OpenCSGWarningDialog : public QDialog, public Ui::OpenCSGWarningDialog { Q_OBJECT; public: OpenCSGWarningDialog(QWidget *parent); public slots: void setText(const QString &text); }; #endif openscad-2013.01+dfsg.orig/src/linalg.h0000644000175000017500000000170712040570421017136 0ustar chrysnchrysn#ifndef LINALG_H_ #define LINALG_H_ #include #include #include using Eigen::Vector2d; using Eigen::Vector3d; using Eigen::Vector3f; typedef Eigen::AlignedBox BoundingBox; using Eigen::Matrix3f; using Eigen::Matrix3d; using Eigen::Matrix4d; #if EIGEN_WORLD_VERSION >= 3 #define Transform3d Eigen::Affine3d #else using Eigen::Transform3d; #endif bool matrix_contains_infinity( const Transform3d &m ); bool matrix_contains_nan( const Transform3d &m ); BoundingBox operator*(const Transform3d &m, const BoundingBox &box); class Color4f : public Eigen::Vector4f { public: Color4f() { } Color4f(int r, int g, int b, int a = 255) { setRgb(r,g,b,a); } Color4f(float r, float g, float b, float a = 1.0f) : Eigen::Vector4f(r, g, b, a) { } void setRgb(int r, int g, int b, int a = 255) { *this << r/255.0f, g/255.0f, b/255.0f, a/255.0f; } bool isValid() const { return this->minCoeff() >= 0.0f; } }; #endif openscad-2013.01+dfsg.orig/src/csgops.cc0000644000175000017500000000450211671720014017324 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "csgnode.h" #include "module.h" #include "csgterm.h" #include "builtin.h" #include #include class CsgModule : public AbstractModule { public: csg_type_e type; CsgModule(csg_type_e type) : type(type) { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *CsgModule::evaluate(const Context*, const ModuleInstantiation *inst) const { CsgNode *node = new CsgNode(inst, type); std::vector evaluatednodes = inst->evaluateChildren(); node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); return node; } std::string CsgNode::toString() const { return this->name() + "()"; } std::string CsgNode::name() const { switch (this->type) { case CSG_TYPE_UNION: return "union"; break; case CSG_TYPE_DIFFERENCE: return "difference"; break; case CSG_TYPE_INTERSECTION: return "intersection"; break; default: assert(false); } } void register_builtin_csgops() { Builtins::init("union", new CsgModule(CSG_TYPE_UNION)); Builtins::init("difference", new CsgModule(CSG_TYPE_DIFFERENCE)); Builtins::init("intersection", new CsgModule(CSG_TYPE_INTERSECTION)); } openscad-2013.01+dfsg.orig/src/import.cc0000644000175000017500000001714312076022155017346 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "importnode.h" #include "module.h" #include "polyset.h" #include "context.h" #include "builtin.h" #include "dxfdata.h" #include "dxftess.h" #include "printutils.h" #include "handle_dep.h" // handle_dep() #ifdef ENABLE_CGAL #include "cgalutils.h" #endif #include #include #include #include #include #include #include #include namespace fs = boost::filesystem; #include using namespace boost::assign; // bring 'operator+=()' into scope #include "boosty.h" class ImportModule : public AbstractModule { public: import_type_e type; ImportModule(import_type_e type = TYPE_UNKNOWN) : type(type) { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; AbstractNode *ImportModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { std::vector argnames; argnames += "file", "layer", "convexity", "origin", "scale"; std::vector argexpr; // Map old argnames to new argnames for compatibility std::vector inst_argnames = inst->argnames; for (size_t i=0; iargvalues); Value v = c.lookup_variable("file"); std::string filename = c.getAbsolutePath(v.isUndefined() ? "" : v.toString()); import_type_e actualtype = this->type; if (actualtype == TYPE_UNKNOWN) { std::string extraw = boosty::extension_str( fs::path(filename) ); std::string ext = boost::algorithm::to_lower_copy( extraw ); if (ext == ".stl") actualtype = TYPE_STL; else if (ext == ".off") actualtype = TYPE_OFF; else if (ext == ".dxf") actualtype = TYPE_DXF; } ImportNode *node = new ImportNode(inst, actualtype); node->fn = c.lookup_variable("$fn").toDouble(); node->fs = c.lookup_variable("$fs").toDouble(); node->fa = c.lookup_variable("$fa").toDouble(); node->filename = filename; Value layerval = c.lookup_variable("layer", true); node->layername = layerval.isUndefined() ? "" : layerval.toString(); node->convexity = c.lookup_variable("convexity", true).toDouble(); if (node->convexity <= 0) node->convexity = 1; Value origin = c.lookup_variable("origin", true); node->origin_x = node->origin_y = 0; origin.getVec2(node->origin_x, node->origin_y); node->scale = c.lookup_variable("scale", true).toDouble(); if (node->scale <= 0) node->scale = 1; return node; } PolySet *ImportNode::evaluate_polyset(class PolySetEvaluator *) const { PolySet *p = NULL; if (this->type == TYPE_STL) { handle_dep((std::string)this->filename); std::ifstream f(this->filename.c_str(), std::ios::in | std::ios::binary); if (!f.good()) { PRINTB("WARNING: Can't open import file '%s'.", this->filename); return p; } p = new PolySet(); boost::regex ex_sfe("solid|facet|endloop"); boost::regex ex_outer("outer loop"); boost::regex ex_vertex("vertex"); boost::regex ex_vertices("\\s*vertex\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)"); char data[5]; f.read(data, 5); if (!f.eof() && !memcmp(data, "solid", 5)) { int i = 0; double vdata[3][3]; std::string line; std::getline(f, line); while (!f.eof()) { std::getline(f, line); boost::trim(line); if (boost::regex_search(line, ex_sfe)) { continue; } if (boost::regex_search(line, ex_outer)) { i = 0; continue; } boost::smatch results; if (boost::regex_search(line, results, ex_vertices)) { try { for (int v=0;v<3;v++) { vdata[i][v] = boost::lexical_cast(results[v+1]); } } catch (const boost::bad_lexical_cast &blc) { PRINTB("WARNING: Can't parse vertex line '%s'.", line); i = 10; continue; } if (++i == 3) { p->append_poly(); p->append_vertex(vdata[0][0], vdata[0][1], vdata[0][2]); p->append_vertex(vdata[1][0], vdata[1][1], vdata[1][2]); p->append_vertex(vdata[2][0], vdata[2][1], vdata[2][2]); } } } } else { f.ignore(80-5+4); while (1) { #ifdef _MSC_VER #pragma pack(push,1) #endif struct { float i, j, k; float x1, y1, z1; float x2, y2, z2; float x3, y3, z3; unsigned short acount; } #ifdef __GNUC__ __attribute__ ((packed)) #endif stldata; #ifdef _MSC_VER #pragma pack(pop) #endif f.read((char*)&stldata, sizeof(stldata)); if (f.eof()) break; p->append_poly(); p->append_vertex(stldata.x1, stldata.y1, stldata.z1); p->append_vertex(stldata.x2, stldata.y2, stldata.z2); p->append_vertex(stldata.x3, stldata.y3, stldata.z3); } } } else if (this->type == TYPE_OFF) { #ifdef ENABLE_CGAL CGAL_Polyhedron poly; std::ifstream file(this->filename.c_str(), std::ios::in | std::ios::binary); file >> poly; file.close(); p = createPolySetFromPolyhedron(poly); #else PRINT("WARNING: OFF import requires CGAL."); #endif } else if (this->type == TYPE_DXF) { p = new PolySet(); DxfData dd(this->fn, this->fs, this->fa, this->filename, this->layername, this->origin_x, this->origin_y, this->scale); p->is2d = true; dxf_tesselate(p, dd, 0, true, false, 0); dxf_border_to_ps(p, dd); } else { PRINTB("ERROR: Unsupported file format while trying to import file '%s'", this->filename); } if (p) p->convexity = this->convexity; return p; } std::string ImportNode::toString() const { std::stringstream stream; fs::path path((std::string)this->filename); stream << this->name(); stream << "(file = " << this->filename << ", " "layer = " << QuotedString(this->layername) << ", " "origin = [" << std::dec << this->origin_x << ", " << this->origin_y << "], " "scale = " << this->scale << ", " "convexity = " << this->convexity << ", " "$fn = " << this->fn << ", $fa = " << this->fa << ", $fs = " << this->fs #ifndef OPENSCAD_TESTING // timestamp is needed for caching, but disturbs the test framework << ", " "timestamp = " << (fs::exists(path) ? fs::last_write_time(path) : 0) #endif << ")"; return stream.str(); } std::string ImportNode::name() const { return "import"; } void register_builtin_import() { Builtins::init("import_stl", new ImportModule(TYPE_STL)); Builtins::init("import_off", new ImportModule(TYPE_OFF)); Builtins::init("import_dxf", new ImportModule(TYPE_DXF)); Builtins::init("import", new ImportModule()); } openscad-2013.01+dfsg.orig/src/boosty.h0000644000175000017500000000347412076022155017217 0ustar chrysnchrysn// boosty.h by don bright 2012. Copyright assigned to Marius Kintel and // Clifford Wolf 2012. Released under the GPL 2, or later, as described in // the file named 'COPYING' in OpenSCAD's project root. #ifndef boosty_h_ #define boosty_h_ /* boosty is a wrapper around boost so that OpenSCAD can work with old versions of boost found on popular versions of linux, circa early 2012. design hope that the user is compiling with boost>1.46 + filesystem v3 if not, fall back to older deprecated functions, and rely on testing to find bugs. implement the minimum needed by OpenSCAD and no more. in a few years, this file should be deleted as unnecessary. see also http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/index.htm http://www.boost.org/doc/libs/1_45_0/libs/filesystem/v2/doc/index.htm http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/index.htm http://www.boost.org/doc/libs/1_35_0/libs/filesystem/doc/index.htm include/boost/wave/util/filesystem_compatability.hpp */ #include #include #include namespace fs = boost::filesystem; namespace boosty { #if BOOST_VERSION >= 104400 && BOOST_FILESYSTEM_VERSION >= 3 inline bool is_absolute( fs::path p ) { return p.is_absolute(); } inline fs::path absolute( fs::path p ) { return fs::absolute( p ); } inline std::string stringy( fs::path p ) { return p.generic_string(); } inline std::string extension_str( fs::path p) { return p.extension().generic_string(); } #else inline bool is_absolute( fs::path p ) { return p.is_complete(); } inline fs::path absolute( fs::path p ) { return fs::complete(p, fs::current_path()); } inline std::string stringy( fs::path p ) { return p.string(); } inline std::string extension_str( fs::path p) { return p.extension(); } #endif } // namespace #endif openscad-2013.01+dfsg.orig/src/csgtermnormalizer.cc0000644000175000017500000001365711777162366021631 0ustar chrysnchrysn#include "csgtermnormalizer.h" #include "csgterm.h" #include "printutils.h" /*! NB! for e.g. empty intersections, this can normalize a tree to nothing and return NULL. */ shared_ptr CSGTermNormalizer::normalize(const shared_ptr &root) { shared_ptr temp = root; while (1) { this->rootnode = temp; this->nodecount = 0; shared_ptr n = normalizePass(temp); if (!n) return n; // If normalized to nothing if (temp == n) break; temp = n; if (this->nodecount > this->limit) { PRINTB("WARNING: Normalized tree is growing past %d elements. Aborting normalization.\n", this->limit); // Clean up any partially evaluated terms shared_ptr newroot = root, tmproot; while (newroot != tmproot) { tmproot = newroot; newroot = collapse_null_terms(tmproot); } return newroot; } } this->rootnode.reset(); return temp; } shared_ptr CSGTermNormalizer::normalizePass(shared_ptr term) { // This function implements the CSG normalization // Reference: // Goldfeather, J., Molnar, S., Turk, G., and Fuchs, H. Near // Realtime CSG Rendering Using Tree Normalization and Geometric // Pruning. IEEE Computer Graphics and Applications, 9(3):20-28, // 1989. // http://www.cc.gatech.edu/~turk/my_papers/pxpl_csg.pdf if (term->type == CSGTerm::TYPE_PRIMITIVE) { return term; } do { while (term && match_and_replace(term)) { } this->nodecount++; if (nodecount > this->limit) { return shared_ptr(); } if (!term || term->type == CSGTerm::TYPE_PRIMITIVE) return term; if (term->left) term->left = normalizePass(term->left); } while (term->type != CSGTerm::TYPE_UNION && ((term->right && term->right->type != CSGTerm::TYPE_PRIMITIVE) || (term->left && term->left->type == CSGTerm::TYPE_UNION))); term->right = normalizePass(term->right); // FIXME: Do we need to take into account any transformation of item here? return collapse_null_terms(term); } shared_ptr CSGTermNormalizer::collapse_null_terms(const shared_ptr &term) { if (!term->right) { if (term->type == CSGTerm::TYPE_UNION || term->type == CSGTerm::TYPE_DIFFERENCE) return term->left; else return term->right; } if (!term->left) { if (term->type == CSGTerm::TYPE_UNION) return term->right; else return term->left; } return term; } bool CSGTermNormalizer::match_and_replace(shared_ptr &term) { if (term->type == CSGTerm::TYPE_UNION || term->type == CSGTerm::TYPE_PRIMITIVE) { return false; } // Part A: The 'x . (y . z)' expressions shared_ptr x = term->left; shared_ptr y = term->right->left; shared_ptr z = term->right->right; shared_ptr result = term; // 1. x - (y + z) -> (x - y) - z if (term->type == CSGTerm::TYPE_DIFFERENCE && term->right->type == CSGTerm::TYPE_UNION) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, y), z); return true; } // 2. x * (y + z) -> (x * y) + (x * z) else if (term->type == CSGTerm::TYPE_INTERSECTION && term->right->type == CSGTerm::TYPE_UNION) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, y), CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z)); return true; } // 3. x - (y * z) -> (x - y) + (x - z) else if (term->type == CSGTerm::TYPE_DIFFERENCE && term->right->type == CSGTerm::TYPE_INTERSECTION) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, y), CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, z)); return true; } // 4. x * (y * z) -> (x * y) * z else if (term->type == CSGTerm::TYPE_INTERSECTION && term->right->type == CSGTerm::TYPE_INTERSECTION) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, y), z); return true; } // 5. x - (y - z) -> (x - y) + (x * z) else if (term->type == CSGTerm::TYPE_DIFFERENCE && term->right->type == CSGTerm::TYPE_DIFFERENCE) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, y), CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z)); return true; } // 6. x * (y - z) -> (x * y) - z else if (term->type == CSGTerm::TYPE_INTERSECTION && term->right->type == CSGTerm::TYPE_DIFFERENCE) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, y), z); return true; } // Part B: The '(x . y) . z' expressions x = term->left->left; y = term->left->right; z = term->right; // 7. (x - y) * z -> (x * z) - y if (term->left->type == CSGTerm::TYPE_DIFFERENCE && term->type == CSGTerm::TYPE_INTERSECTION) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z), y); return true; } // 8. (x + y) - z -> (x - z) + (y - z) else if (term->left->type == CSGTerm::TYPE_UNION && term->type == CSGTerm::TYPE_DIFFERENCE) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, z), CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, y, z)); return true; } // 9. (x + y) * z -> (x * z) + (y * z) else if (term->left->type == CSGTerm::TYPE_UNION && term->type == CSGTerm::TYPE_INTERSECTION) { term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z), CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, y, z)); return true; } return false; } // Counts all non-leaf nodes unsigned int CSGTermNormalizer::count(const shared_ptr &term) const { if (!term) return 0; return term->type == CSGTerm::TYPE_PRIMITIVE ? 0 : 1 + count(term->left) + count(term->right); } openscad-2013.01+dfsg.orig/src/renderer.cc0000644000175000017500000000326412076022156017642 0ustar chrysnchrysn#include "renderer.h" #include "rendersettings.h" #include "linalg.h" void Renderer::setColor(const float color[4], GLint *shaderinfo) const { Color4f col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_FRONT_COLOR); float c[4] = {color[0], color[1], color[2], color[3]}; if (c[0] < 0) c[0] = col[0]; if (c[1] < 0) c[1] = col[1]; if (c[2] < 0) c[2] = col[2]; if (c[3] < 0) c[3] = col[3]; glColor4fv(c); if (shaderinfo) { glUniform4f(shaderinfo[1], c[0], c[1], c[2], c[3]); glUniform4f(shaderinfo[2], (c[0]+1)/2, (c[1]+1)/2, (c[2]+1)/2, 1.0); } } void Renderer::setColor(ColorMode colormode, GLint *shaderinfo) const { Color4f col; switch (colormode) { case COLORMODE_NONE: return; break; case COLORMODE_MATERIAL: col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_FRONT_COLOR); break; case COLORMODE_CUTOUT: col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_BACK_COLOR); break; case COLORMODE_HIGHLIGHT: col.setRgb(255, 157, 81, 128); break; case COLORMODE_BACKGROUND: col.setRgb(180, 180, 180, 128); break; case COLORMODE_MATERIAL_EDGES: col.setRgb(255, 236, 94); break; case COLORMODE_CUTOUT_EDGES: col.setRgb(171, 216, 86); break; case COLORMODE_HIGHLIGHT_EDGES: col.setRgb(255, 171, 86, 128); break; case COLORMODE_BACKGROUND_EDGES: col.setRgb(150, 150, 150, 128); break; default: return; break; } float rgba[4]; rgba[0] = col[0]; rgba[1] = col[1]; rgba[2] = col[2]; rgba[3] = col[3]; glColor4fv(rgba); #ifdef ENABLE_OPENCSG if (shaderinfo) { glUniform4f(shaderinfo[1], col[0], col[1], col[2], 1.0f); glUniform4f(shaderinfo[2], (col[0]+1)/2, (col[1]+1)/2, (col[2]+1)/2, 1.0f); } #endif } openscad-2013.01+dfsg.orig/src/CSGTermEvaluator.cc0000644000175000017500000001355711701151225021163 0ustar chrysnchrysn#include "CSGTermEvaluator.h" #include "visitor.h" #include "state.h" #include "csgterm.h" #include "module.h" #include "csgnode.h" #include "transformnode.h" #include "colornode.h" #include "rendernode.h" #include "cgaladvnode.h" #include "printutils.h" #include "PolySetEvaluator.h" #include #include #include #include #include #include #include #include /*! \class CSGTermEvaluator A visitor responsible for creating a tree of CSGTerm nodes used for rendering with OpenCSG. */ shared_ptr CSGTermEvaluator::evaluateCSGTerm(const AbstractNode &node, std::vector > &highlights, std::vector > &background) { Traverser evaluate(*this, node, Traverser::PRE_AND_POSTFIX); evaluate.execute(); highlights = this->highlights; background = this->background; return this->stored_term[node.index()]; } void CSGTermEvaluator::applyToChildren(const AbstractNode &node, CSGTermEvaluator::CsgOp op) { shared_ptr t1; BOOST_FOREACH(const AbstractNode *chnode, this->visitedchildren[node.index()]) { shared_ptr t2(this->stored_term[chnode->index()]); this->stored_term.erase(chnode->index()); if (t2 && !t1) { t1 = t2; } else if (t2 && t1) { if (op == CSGT_UNION) { t1 = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, t1, t2); } else if (op == CSGT_DIFFERENCE) { t1 = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, t1, t2); } else if (op == CSGT_INTERSECTION) { t1 = CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, t1, t2); } } } if (t1 && node.modinst->isHighlight()) { this->highlights.push_back(t1); } if (t1 && node.modinst->isBackground()) { this->background.push_back(t1); t1.reset(); // don't propagate background tagged nodes } this->stored_term[node.index()] = t1; } Response CSGTermEvaluator::visit(State &state, const AbstractNode &node) { if (state.isPostfix()) { applyToChildren(node, CSGT_UNION); addToParent(state, node); } return ContinueTraversal; } Response CSGTermEvaluator::visit(State &state, const AbstractIntersectionNode &node) { if (state.isPostfix()) { applyToChildren(node, CSGT_INTERSECTION); addToParent(state, node); } return ContinueTraversal; } static shared_ptr evaluate_csg_term_from_ps(const State &state, std::vector > &highlights, std::vector > &background, const shared_ptr &ps, const ModuleInstantiation *modinst, const AbstractNode &node) { std::stringstream stream; stream << node.name() << node.index(); shared_ptr t(new CSGTerm(ps, state.matrix(), state.color(), stream.str())); if (modinst->isHighlight()) { highlights.push_back(t); } if (modinst->isBackground()) { background.push_back(t); t.reset(); } return t; } Response CSGTermEvaluator::visit(State &state, const AbstractPolyNode &node) { if (state.isPostfix()) { shared_ptr t1; if (this->psevaluator) { shared_ptr ps = this->psevaluator->getPolySet(node, true); if (ps) { t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background, ps, node.modinst, node); } } this->stored_term[node.index()] = t1; addToParent(state, node); } return ContinueTraversal; } Response CSGTermEvaluator::visit(State &state, const CsgNode &node) { if (state.isPostfix()) { CsgOp op; switch (node.type) { case CSG_TYPE_UNION: op = CSGT_UNION; break; case CSG_TYPE_DIFFERENCE: op = CSGT_DIFFERENCE; break; case CSG_TYPE_INTERSECTION: op = CSGT_INTERSECTION; break; default: assert(false); } applyToChildren(node, op); addToParent(state, node); } return ContinueTraversal; } Response CSGTermEvaluator::visit(State &state, const TransformNode &node) { if (state.isPrefix()) { state.setMatrix(state.matrix() * node.matrix); } if (state.isPostfix()) { applyToChildren(node, CSGT_UNION); addToParent(state, node); } return ContinueTraversal; } Response CSGTermEvaluator::visit(State &state, const ColorNode &node) { if (state.isPrefix()) { if (!state.color().isValid()) state.setColor(node.color); } if (state.isPostfix()) { applyToChildren(node, CSGT_UNION); addToParent(state, node); } return ContinueTraversal; } // FIXME: If we've got CGAL support, render this node as a CGAL union into a PolySet Response CSGTermEvaluator::visit(State &state, const RenderNode &node) { if (state.isPostfix()) { shared_ptr t1; shared_ptr ps; if (this->psevaluator) { ps = this->psevaluator->getPolySet(node, true); } if (ps) { t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background, ps, node.modinst, node); } this->stored_term[node.index()] = t1; addToParent(state, node); } return ContinueTraversal; } Response CSGTermEvaluator::visit(State &state, const CgaladvNode &node) { if (state.isPostfix()) { shared_ptr t1; // FIXME: Calling evaluator directly since we're not a PolyNode. Generalize this. shared_ptr ps; if (this->psevaluator) { ps = this->psevaluator->getPolySet(node, true); } if (ps) { t1 = evaluate_csg_term_from_ps(state, this->highlights, this->background, ps, node.modinst, node); } this->stored_term[node.index()] = t1; addToParent(state, node); } return ContinueTraversal; } /*! Adds ourself to out parent's list of traversed children. Call this for _every_ node which affects output during the postfix traversal. */ void CSGTermEvaluator::addToParent(const State &state, const AbstractNode &node) { assert(state.isPostfix()); this->visitedchildren.erase(node.index()); if (state.parent()) { this->visitedchildren[state.parent()->index()].push_back(&node); } } openscad-2013.01+dfsg.orig/src/MainWindow.ui0000644000175000017500000004547712076022154020152 0ustar chrysnchrysn MainWindow 0 0 681 647 MainWindow 0 Qt::Horizontal Monaco 8 Qt::Vertical true true QFrame::NoFrame QFrame::Raised 0 0 Time: FPS: Steps: Dump Pictures 0 0 681 22 &File Open Recent Examples &Edit &Design &View &Help &New Ctrl+N &Open... Ctrl+O &Save Ctrl+S Save &As... Ctrl+Shift+S &Reload Ctrl+R &Quit Ctrl+Q &Undo Ctrl+Z &Redo Ctrl+Shift+Z Cu&t Ctrl+X &Copy Ctrl+C &Paste Ctrl+V &Indent Ctrl+I U&nindent Ctrl+Shift+I C&omment Ctrl+D Unco&mment Ctrl+Shift+D Paste viewport translation Ctrl+T Paste viewport rotation Zoom In Ctrl++ Zoom Out Ctrl+- true Hide editor &Reload and Compile F4 &Compile F5 Compile and &Render (CGAL) F6 Display &AST... Display CSG &Tree... Display CSG &Products... Export as &STL... Export as &OFF... true OpenCSG F9 true CGAL Surfaces F10 true CGAL Grid Only F11 true Thrown Together F12 true Show Edges Ctrl+1 true Show Axes Ctrl+2 true Show Crosshairs Ctrl+3 true Animate Top Ctrl+4 Bottom Ctrl+5 Left Ctrl+6 Right Ctrl+7 Front Ctrl+8 Back Ctrl+9 Diagonal Ctrl+0 Center Ctrl+P true Perspective true Orthogonal true Hide console About OpenSCAD Manual Clear Recent Export as DXF... Close Ctrl+W Preferences Flush Caches OpenSCAD Homepage true Automatic Reload and Compile Export as Image... Export as CSG... Library info GLView QWidget
    GLView.h
    1
    Editor QWidget
    editor.h
    fileActionClose triggered() MainWindow close() -1 -1 340 323
    openscad-2013.01+dfsg.orig/src/nodedumper.h0000644000175000017500000000163411652110437020036 0ustar chrysnchrysn#ifndef NODEDUMPER_H_ #define NODEDUMPER_H_ #include #include #include #include "visitor.h" #include "nodecache.h" class NodeDumper : public Visitor { public: /*! If idPrefix is true, we will output "n:" in front of each node, which is useful for debugging. */ NodeDumper(NodeCache &cache, bool idPrefix = false) : cache(cache), idprefix(idPrefix), root(NULL) { } virtual ~NodeDumper() {} virtual Response visit(State &state, const AbstractNode &node); private: void handleVisitedChildren(const State &state, const AbstractNode &node); bool isCached(const AbstractNode &node) const; void handleIndent(const State &state); std::string dumpChildren(const AbstractNode &node); NodeCache &cache; bool idprefix; std::string currindent; const AbstractNode *root; typedef std::list ChildList; std::map visitedchildren; }; #endif openscad-2013.01+dfsg.orig/src/dxftess.h0000644000175000017500000000035711640436732017363 0ustar chrysnchrysn#ifndef DXFTESS_H_ #define DXFTESS_H_ class DxfData; class PolySet; void dxf_tesselate(PolySet *ps, DxfData &dxf, double rot, bool up, bool do_triangle_splitting, double h); void dxf_border_to_ps(PolySet *ps, const DxfData &dxf); #endif openscad-2013.01+dfsg.orig/src/export.h0000644000175000017500000000060511775567400017226 0ustar chrysnchrysn#ifndef EXPORT_H_ #define EXPORT_H_ #include #ifdef ENABLE_CGAL void export_stl(class CGAL_Nef_polyhedron *root_N, std::ostream &output); void export_off(CGAL_Nef_polyhedron *root_N, std::ostream &output); void export_dxf(CGAL_Nef_polyhedron *root_N, std::ostream &output); #endif #ifdef DEBUG void export_stl(const class PolySet &ps, std::ostream &output); #endif #endif openscad-2013.01+dfsg.orig/src/linalg.cc0000644000175000017500000000230612040570421017270 0ustar chrysnchrysn#include "linalg.h" #include // FIXME: We can achieve better pruning by either: // o Recalculate the box based on the transformed object // o Store boxes are oriented bounding boxes and implement oriented // bbox intersection // FIXME: This function can be generalized, but we don't need it atm. /*! Transforms the given bounding box by transforming each of its 8 vertices. Returns a new bounding box. */ BoundingBox operator*(const Transform3d &m, const BoundingBox &box) { BoundingBox newbox; Vector3d boxvec[2] = { box.min(), box.max() }; for (int k=0;k<2;k++) { for (int j=0;j<2;j++) { for (int i=0;i<2;i++) { newbox.extend(m * Vector3d(boxvec[i][0], boxvec[j][1], boxvec[k][2])); } } } return newbox; } bool matrix_contains_infinity( const Transform3d &m ) { for (int i=0;i and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "module.h" #include "node.h" #include "polyset.h" #include "context.h" #include "builtin.h" #include "printutils.h" #include "handle_dep.h" // handle_dep() #include "visitor.h" #include #include #include #include #include #include #include #include using namespace boost::assign; // bring 'operator+=()' into scope #include namespace fs = boost::filesystem; class SurfaceModule : public AbstractModule { public: SurfaceModule() { } virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; }; class SurfaceNode : public AbstractPolyNode { public: SurfaceNode(const ModuleInstantiation *mi) : AbstractPolyNode(mi) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const { return "surface"; } Filename filename; bool center; int convexity; virtual PolySet *evaluate_polyset(class PolySetEvaluator *) const; }; AbstractNode *SurfaceModule::evaluate(const Context *ctx, const ModuleInstantiation *inst) const { SurfaceNode *node = new SurfaceNode(inst); node->center = false; node->convexity = 1; std::vector argnames; argnames += "file", "center", "convexity"; std::vector argexpr; Context c(ctx); c.args(argnames, argexpr, inst->argnames, inst->argvalues); Value fileval = c.lookup_variable("file"); node->filename = c.getAbsolutePath(fileval.isUndefined() ? "" : fileval.toString()); Value center = c.lookup_variable("center", true); if (center.type() == Value::BOOL) { node->center = center.toBool(); } Value convexity = c.lookup_variable("convexity", true); if (convexity.type() == Value::NUMBER) { node->convexity = (int)convexity.toDouble(); } return node; } PolySet *SurfaceNode::evaluate_polyset(class PolySetEvaluator *) const { handle_dep(filename); std::ifstream stream(filename.c_str()); if (!stream.good()) { PRINTB("WARNING: Can't open DAT file '%s'.", filename); return NULL; } PolySet *p = new PolySet(); int lines = 0, columns = 0; boost::unordered_map,double> data; double min_val = 0; typedef boost::tokenizer > tokenizer; boost::char_separator sep(" \t"); while (!stream.eof()) { std::string line; while (!stream.eof() && (line.size() == 0 || line[0] == '#')) { std::getline(stream, line); boost::trim(line); } if (stream.eof()) break; int col = 0; tokenizer tokens(line, sep); try { BOOST_FOREACH(const std::string &token, tokens) { double v = boost::lexical_cast(token); data[std::make_pair(lines, col++)] = v; if (col > columns) columns = col; min_val = std::min(v-1, min_val); } } catch (const boost::bad_lexical_cast &blc) { if (!stream.eof()) { PRINTB("WARNING: Illegal value in '%s': %s", filename % blc.what()); } break; } lines++; } p->convexity = convexity; double ox = center ? -(columns-1)/2.0 : 0; double oy = center ? -(lines-1)/2.0 : 0; for (int i = 1; i < lines; i++) for (int j = 1; j < columns; j++) { double v1 = data[std::make_pair(i-1, j-1)]; double v2 = data[std::make_pair(i-1, j)]; double v3 = data[std::make_pair(i, j-1)]; double v4 = data[std::make_pair(i, j)]; double vx = (v1 + v2 + v3 + v4) / 4; p->append_poly(); p->append_vertex(ox + j-1, oy + i-1, v1); p->append_vertex(ox + j, oy + i-1, v2); p->append_vertex(ox + j-0.5, oy + i-0.5, vx); p->append_poly(); p->append_vertex(ox + j, oy + i-1, v2); p->append_vertex(ox + j, oy + i, v4); p->append_vertex(ox + j-0.5, oy + i-0.5, vx); p->append_poly(); p->append_vertex(ox + j, oy + i, v4); p->append_vertex(ox + j-1, oy + i, v3); p->append_vertex(ox + j-0.5, oy + i-0.5, vx); p->append_poly(); p->append_vertex(ox + j-1, oy + i, v3); p->append_vertex(ox + j-1, oy + i-1, v1); p->append_vertex(ox + j-0.5, oy + i-0.5, vx); } for (int i = 1; i < lines; i++) { p->append_poly(); p->append_vertex(ox + 0, oy + i-1, min_val); p->append_vertex(ox + 0, oy + i-1, data[std::make_pair(i-1, 0)]); p->append_vertex(ox + 0, oy + i, data[std::make_pair(i, 0)]); p->append_vertex(ox + 0, oy + i, min_val); p->append_poly(); p->insert_vertex(ox + columns-1, oy + i-1, min_val); p->insert_vertex(ox + columns-1, oy + i-1, data[std::make_pair(i-1, columns-1)]); p->insert_vertex(ox + columns-1, oy + i, data[std::make_pair(i, columns-1)]); p->insert_vertex(ox + columns-1, oy + i, min_val); } for (int i = 1; i < columns; i++) { p->append_poly(); p->insert_vertex(ox + i-1, oy + 0, min_val); p->insert_vertex(ox + i-1, oy + 0, data[std::make_pair(0, i-1)]); p->insert_vertex(ox + i, oy + 0, data[std::make_pair(0, i)]); p->insert_vertex(ox + i, oy + 0, min_val); p->append_poly(); p->append_vertex(ox + i-1, oy + lines-1, min_val); p->append_vertex(ox + i-1, oy + lines-1, data[std::make_pair(lines-1, i-1)]); p->append_vertex(ox + i, oy + lines-1, data[std::make_pair(lines-1, i)]); p->append_vertex(ox + i, oy + lines-1, min_val); } p->append_poly(); for (int i = 0; i < columns-1; i++) p->insert_vertex(ox + i, oy + 0, min_val); for (int i = 0; i < lines-1; i++) p->insert_vertex(ox + columns-1, oy + i, min_val); for (int i = columns-1; i > 0; i--) p->insert_vertex(ox + i, oy + lines-1, min_val); for (int i = lines-1; i > 0; i--) p->insert_vertex(ox + 0, oy + i, min_val); return p; } std::string SurfaceNode::toString() const { std::stringstream stream; fs::path path((std::string)this->filename); stream << this->name() << "(file = " << this->filename << ", " "center = " << (this->center ? "true" : "false") #ifndef OPENSCAD_TESTING // timestamp is needed for caching, but disturbs the test framework << ", " "timestamp = " << (fs::exists(path) ? fs::last_write_time(path) : 0) #endif << ")"; return stream.str(); } void register_builtin_surface() { Builtins::init("surface", new SurfaceModule()); } openscad-2013.01+dfsg.orig/src/context.h0000644000175000017500000000321512076022155017355 0ustar chrysnchrysn#ifndef CONTEXT_H_ #define CONTEXT_H_ #include #include #include #include "value.h" using boost::unordered_map; class Context { public: Context(const Context *parent = NULL, const class Module *library = NULL); ~Context(); void args(const std::vector &argnames, const std::vector &argexpr, const std::vector &call_argnames, const std::vector &call_argvalues); void set_variable(const std::string &name, const Value &value); void set_constant(const std::string &name, const Value &value); Value lookup_variable(const std::string &name, bool silent = false) const; Value evaluate_function(const std::string &name, const std::vector &argnames, const std::vector &argvalues) const; class AbstractNode *evaluate_module(const class ModuleInstantiation &inst) const; void setDocumentPath(const std::string &path) { this->document_path = path; } std::string getAbsolutePath(const std::string &filename) const; public: const Context *parent; const unordered_map *functions_p; const unordered_map *modules_p; typedef unordered_map ModuleContainer; const ModuleContainer *usedlibs_p; const ModuleInstantiation *inst_p; static std::vector ctx_stack; mutable unordered_map recursioncount; private: typedef unordered_map ValueMap; ValueMap constants; ValueMap variables; ValueMap config_variables; std::string document_path; }; #endif openscad-2013.01+dfsg.orig/src/highlighter.h0000644000175000017500000000052611676112341020173 0ustar chrysnchrysn#ifndef HIGHLIGHTER_H_ #define HIGHLIGHTER_H_ #include #ifdef _QCODE_EDIT_ #include "qdocument.h" #endif class Highlighter : public QSyntaxHighlighter { public: #ifdef _QCODE_EDIT_ Highlighter(QDocument *parent); #else Highlighter(QTextDocument *parent); #endif void highlightBlock(const QString &text); }; #endif openscad-2013.01+dfsg.orig/src/context.cc0000644000175000017500000001623412076022155017520 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "context.h" #include "expression.h" #include "function.h" #include "module.h" #include "builtin.h" #include "printutils.h" #include #include namespace fs = boost::filesystem; #include "boosty.h" std::vector Context::ctx_stack; /*! Initializes this context. Optionally initializes a context for an external library */ Context::Context(const Context *parent, const Module *library) : parent(parent), inst_p(NULL) { if (parent) recursioncount = parent->recursioncount; ctx_stack.push_back(this); if (parent) document_path = parent->document_path; if (library) { // FIXME: Don't access module members directly this->functions_p = &library->functions; this->modules_p = &library->modules; this->usedlibs_p = &library->usedlibs; for (size_t j = 0; j < library->assignments_var.size(); j++) { this->set_variable(library->assignments_var[j], library->assignments_expr[j]->evaluate(this)); } } else { functions_p = NULL; modules_p = NULL; usedlibs_p = NULL; } } Context::~Context() { ctx_stack.pop_back(); } /*! Initialize context from argument lists (function call/module instantiation) */ void Context::args(const std::vector &argnames, const std::vector &argexpr, const std::vector &call_argnames, const std::vector &call_argvalues) { for (size_t i=0; ievaluate(this->parent) : Value()); } size_t posarg = 0; for (size_t i=0; iconfig_variables[name] = value; else this->variables[name] = value; } void Context::set_constant(const std::string &name, const Value &value) { if (this->constants.find(name) != this->constants.end()) { PRINTB("WARNING: Attempt to modify constant '%s'.", name); } else { this->constants[name] = value; } } Value Context::lookup_variable(const std::string &name, bool silent) const { if (name[0] == '$') { for (int i = ctx_stack.size()-1; i >= 0; i--) { const ValueMap &confvars = ctx_stack[i]->config_variables; if (confvars.find(name) != confvars.end()) return confvars.find(name)->second; } return Value(); } if (!this->parent && this->constants.find(name) != this->constants.end()) return this->constants.find(name)->second; if (this->variables.find(name) != this->variables.end()) return this->variables.find(name)->second; if (this->parent) return this->parent->lookup_variable(name, silent); if (!silent) PRINTB("WARNING: Ignoring unknown variable '%s'.", name); return Value(); } class RecursionGuard { public: RecursionGuard(const Context &c, const std::string &name) : c(c), name(name) { c.recursioncount[name]++; } ~RecursionGuard() { if (--c.recursioncount[name] == 0) c.recursioncount.erase(name); } bool recursion_detected() const { return (c.recursioncount[name] > 100); } private: const Context &c; const std::string &name; }; Value Context::evaluate_function(const std::string &name, const std::vector &argnames, const std::vector &argvalues) const { RecursionGuard g(*this, name); if (g.recursion_detected()) { PRINTB("Recursion detected calling function '%s'", name); return Value(); } if (this->functions_p && this->functions_p->find(name) != this->functions_p->end()) return this->functions_p->find(name)->second->evaluate(this, argnames, argvalues); if (this->usedlibs_p) { BOOST_FOREACH(const ModuleContainer::value_type &m, *this->usedlibs_p) { if (m.second->functions.find(name) != m.second->functions.end()) { Context ctx(this->parent, m.second); return m.second->functions[name]->evaluate(&ctx, argnames, argvalues); } } } if (this->parent) return this->parent->evaluate_function(name, argnames, argvalues); PRINTB("WARNING: Ignoring unknown function '%s'.", name); return Value(); } AbstractNode *Context::evaluate_module(const ModuleInstantiation &inst) const { if (this->modules_p && this->modules_p->find(inst.name()) != this->modules_p->end()) { AbstractModule *m = this->modules_p->find(inst.name())->second; std::string replacement = Builtins::instance()->isDeprecated(inst.name()); if (!replacement.empty()) { PRINTB("DEPRECATED: The %s() module will be removed in future releases. Use %s() instead.", inst.name() % replacement); } return m->evaluate(this, &inst); } if (this->usedlibs_p) { BOOST_FOREACH(const ModuleContainer::value_type &m, *this->usedlibs_p) { assert(m.second); if (m.second->modules.find(inst.name()) != m.second->modules.end()) { Context ctx(this->parent, m.second); return m.second->modules[inst.name()]->evaluate(&ctx, &inst); } } } if (this->parent) return this->parent->evaluate_module(inst); PRINTB("WARNING: Ignoring unknown module '%s'.", inst.name()); return NULL; } /*! Returns the absolute path to the given filename, unless it's empty. */ std::string Context::getAbsolutePath(const std::string &filename) const { if (!filename.empty() && !boosty::is_absolute(fs::path(filename))) { return boosty::absolute(fs::path(this->document_path) / filename).string(); } else { return filename; } } void register_builtin(Context &ctx) { ctx.functions_p = &Builtins::instance()->functions(); ctx.modules_p = &Builtins::instance()->modules(); ctx.set_variable("$fn", Value(0.0)); ctx.set_variable("$fs", Value(2.0)); ctx.set_variable("$fa", Value(12.0)); ctx.set_variable("$t", Value(0.0)); Value::VectorType zero3; zero3.push_back(Value(0.0)); zero3.push_back(Value(0.0)); zero3.push_back(Value(0.0)); Value zero3val(zero3); ctx.set_variable("$vpt", zero3val); ctx.set_variable("$vpr", zero3val); ctx.set_constant("PI",Value(M_PI)); } openscad-2013.01+dfsg.orig/src/cgaladv_minkowski2.cc0000644000175000017500000001070711667260210021612 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifdef ENABLE_CGAL #include "printutils.h" #include "grid.h" #include "cgal.h" extern CGAL_Poly2 nef2p2(CGAL_Nef_polyhedron2 p); //----------------------------------------------------------------------------- // Pretty-print a CGAL polygon. // template void print_polygon (const CGAL::Polygon_2& P) { typename CGAL::Polygon_2::Vertex_const_iterator vit; std::cout << "[ " << P.size() << " vertices:"; for (vit = P.vertices_begin(); vit != P.vertices_end(); ++vit) std::cout << " (" << *vit << ')'; std::cout << " ]" << std::endl; } //----------------------------------------------------------------------------- // Pretty-print a polygon with holes. // template void print_polygon_with_holes (const CGAL::Polygon_with_holes_2& pwh) { if (! pwh.is_unbounded()) { std::cout << "{ Outer boundary = "; print_polygon (pwh.outer_boundary()); } else std::cout << "{ Unbounded polygon." << std::endl; typename CGAL::Polygon_with_holes_2::Hole_const_iterator hit; unsigned int k = 1; std::cout << " " << pwh.number_of_holes() << " holes:" << std::endl; for (hit = pwh.holes_begin(); hit != pwh.holes_end(); ++hit, ++k) { std::cout << " Hole #" << k << " = "; print_polygon (*hit); } std::cout << " }" << std::endl; return; } CGAL_Poly2 nef2p2(CGAL_Nef_polyhedron2 p) { std::list points; Grid2d grid(GRID_COARSE); typedef CGAL_Nef_polyhedron2::Explorer Explorer; typedef Explorer::Face_const_iterator fci_t; typedef Explorer::Halfedge_around_face_const_circulator heafcc_t; Explorer E = p.explorer(); for (fci_t fit = E.faces_begin(), facesend = E.faces_end(); fit != facesend; ++fit) { if (!E.mark(fit)) { continue; } //if (fit != E.faces_begin()) { if (points.size() != 0) { PRINT("WARNING: minkowski() and hull() is not implemented for 2d objects with holes!"); break; } heafcc_t fcirc(E.halfedge(fit)), fend(fcirc); CGAL_For_all(fcirc, fend) { if (E.is_standard(E.target(fcirc))) { Explorer::Point ep = E.point(E.target(fcirc)); double x = to_double(ep.x()), y = to_double(ep.y()); grid.align(x, y); points.push_back(CGAL_ExactKernel2::Point_2(x, y)); } } } return CGAL_Poly2(points.begin(), points.end()); } static CGAL_Nef_polyhedron2 p2nef2(CGAL_Poly2 p2) { std::list points; for (size_t j = 0; j < p2.size(); j++) { double x = to_double(p2[j].x()); double y = to_double(p2[j].y()); CGAL_Nef_polyhedron2::Point p = CGAL_Nef_polyhedron2::Point(x, y); points.push_back(p); } return CGAL_Nef_polyhedron2(points.begin(), points.end(), CGAL_Nef_polyhedron2::INCLUDED); } CGAL_Nef_polyhedron2 minkowski2(const CGAL_Nef_polyhedron2 &a, const CGAL_Nef_polyhedron2 &b) { CGAL_Poly2 ap = nef2p2(a), bp = nef2p2(b); if (ap.size() == 0) { PRINT("WARNING: minkowski() could not get any points from object 1!"); return CGAL_Nef_polyhedron2(); } else if (bp.size() == 0) { PRINT("WARNING: minkowski() could not get any points from object 2!"); return CGAL_Nef_polyhedron2(); } else { CGAL_Poly2h x = minkowski_sum_2(ap, bp); // Make a CGAL_Nef_polyhedron2 out of just the boundary for starters return p2nef2(x.outer_boundary()); } } #endif openscad-2013.01+dfsg.orig/src/dxfdata.h0000644000175000017500000000174111776112753017320 0ustar chrysnchrysn#ifndef DXFDATA_H_ #define DXFDATA_H_ #include "linalg.h" #include class DxfData { public: struct Path { std::vector indices; // indices into DxfData::points bool is_closed, is_inner; Path() : is_closed(false), is_inner(false) { } }; struct Dim { unsigned int type; double coords[7][2]; double angle; double length; std::string name; Dim() { for (int i = 0; i < 7; i++) for (int j = 0; j < 2; j++) coords[i][j] = 0; type = 0; angle = 0; length = 0; } }; #ifdef __APPLE__ std::vector > points; #else std::vector points; #endif std::vector paths; std::vector dims; DxfData(); DxfData(double fn, double fs, double fa, const std::string &filename, const std::string &layername = "", double xorigin = 0.0, double yorigin = 0.0, double scale = 1.0); int addPoint(double x, double y); void fixup_path_direction(); std::string dump() const; }; #endif openscad-2013.01+dfsg.orig/src/csgterm.cc0000644000175000017500000001567612014547135017513 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "csgterm.h" #include "polyset.h" #include "linalg.h" #include /*! \class CSGTerm A CSGTerm is either a "primitive" or a CSG operation with two children terms. A primitive in this context is any PolySet, which may or may not have a subtree which is already evaluated (e.g. using the render() module). */ /*! \class CSGChain A CSGChain is just a vector of primitives, each having a CSG type associated with it. It's created by importing a CSGTerm tree. */ shared_ptr CSGTerm::createCSGTerm(type_e type, shared_ptr left, shared_ptr right) { if (type != TYPE_PRIMITIVE) { // In case we're creating a CSG terms from a pruned tree, left/right can be NULL if (!right) { if (type == TYPE_UNION || type == TYPE_DIFFERENCE) return left; else return right; } if (!left) { if (type == TYPE_UNION) return right; else return left; } } // Pruning the tree. For details, see: // http://www.cc.gatech.edu/~turk/my_papers/pxpl_csg.pdf const BoundingBox &leftbox = left->getBoundingBox(); const BoundingBox &rightbox = right->getBoundingBox(); Vector3d newmin, newmax; if (type == TYPE_INTERSECTION) { #if EIGEN_WORLD_VERSION == 2 newmin = leftbox.min().cwise().max( rightbox.min() ); newmax = leftbox.max().cwise().min( rightbox.max() ); #else newmin = leftbox.min().array().cwiseMax( rightbox.min().array() ); newmax = leftbox.max().array().cwiseMin( rightbox.max().array() ); #endif BoundingBox newbox( newmin, newmax ); if (newbox.isNull()) { return shared_ptr(); // Prune entire product } } else if (type == TYPE_DIFFERENCE) { #if EIGEN_WORLD_VERSION == 2 newmin = leftbox.min().cwise().max( rightbox.min() ); newmax = leftbox.max().cwise().min( rightbox.max() ); #else newmin = leftbox.min().array().cwiseMax( rightbox.min().array() ); newmax = leftbox.max().array().cwiseMin( rightbox.max().array() ); #endif BoundingBox newbox( newmin, newmax ); if (newbox.isNull()) { return left; // Prune the negative component } } return shared_ptr(new CSGTerm(type, left, right)); } shared_ptr CSGTerm::createCSGTerm(type_e type, CSGTerm *left, CSGTerm *right) { return createCSGTerm(type, shared_ptr(left), shared_ptr(right)); } CSGTerm::CSGTerm(const shared_ptr &polyset, const Transform3d &matrix, const Color4f &color, const std::string &label) : type(TYPE_PRIMITIVE), polyset(polyset), label(label), m(matrix), color(color) { initBoundingBox(); } CSGTerm::CSGTerm(type_e type, shared_ptr left, shared_ptr right) : type(type), left(left), right(right), m(Transform3d::Identity()) { initBoundingBox(); } CSGTerm::CSGTerm(type_e type, CSGTerm *left, CSGTerm *right) : type(type), left(left), right(right), m(Transform3d::Identity()) { initBoundingBox(); } CSGTerm::~CSGTerm() { } void CSGTerm::initBoundingBox() { if (this->type == TYPE_PRIMITIVE) { this->bbox = this->m * this->polyset->getBoundingBox(); } else { const BoundingBox &leftbox = this->left->getBoundingBox(); const BoundingBox &rightbox = this->right->getBoundingBox(); Vector3d newmin, newmax; switch (this->type) { case TYPE_UNION: #if EIGEN_WORLD_VERSION == 2 newmin = leftbox.min().cwise().min( rightbox.min() ); newmax = leftbox.max().cwise().max( rightbox.max() ); #else newmin = leftbox.min().array().cwiseMin( rightbox.min().array() ); newmax = leftbox.max().array().cwiseMax( rightbox.max().array() ); #endif this->bbox = this->m * BoundingBox( newmin, newmax ); break; case TYPE_INTERSECTION: #if EIGEN_WORLD_VERSION == 2 newmin = leftbox.min().cwise().max( rightbox.min() ); newmax = leftbox.max().cwise().min( rightbox.max() ); #else newmin = leftbox.min().array().cwiseMax( rightbox.min().array() ); newmax = leftbox.max().array().cwiseMin( rightbox.max().array() ); #endif this->bbox = this->m * BoundingBox( newmin, newmax ); break; case TYPE_DIFFERENCE: this->bbox = this->m * leftbox; break; case TYPE_PRIMITIVE: break; default: assert(false); } } } std::string CSGTerm::dump() { std::stringstream dump; if (type == TYPE_UNION) dump << "(" << left->dump() << " + " << right->dump() << ")"; else if (type == TYPE_INTERSECTION) dump << "(" << left->dump() << " * " << right->dump() << ")"; else if (type == TYPE_DIFFERENCE) dump << "(" << left->dump() << " - " << right->dump() << ")"; else dump << this->label; return dump.str(); } CSGChain::CSGChain() { } void CSGChain::add(const shared_ptr &polyset, const Transform3d &m, const Color4f &color, CSGTerm::type_e type, std::string label) { polysets.push_back(polyset); matrices.push_back(m); colors.push_back(color); types.push_back(type); labels.push_back(label); } void CSGChain::import(shared_ptr term, CSGTerm::type_e type) { if (term->type == CSGTerm::TYPE_PRIMITIVE) { add(term->polyset, term->m, term->color, type, term->label); } else { import(term->left, type); import(term->right, term->type); } } std::string CSGChain::dump(bool full) { std::stringstream dump; for (size_t i = 0; i < types.size(); i++) { if (types[i] == CSGTerm::TYPE_UNION) { if (i != 0) dump << "\n"; dump << "+"; } else if (types[i] == CSGTerm::TYPE_DIFFERENCE) dump << " -"; else if (types[i] == CSGTerm::TYPE_INTERSECTION) dump << " *"; dump << labels[i]; if (full) { dump << " polyset: \n" << polysets[i]->dump() << "\n"; dump << " matrix: \n" << matrices[i].matrix() << "\n"; dump << " color: \n" << colors[i] << "\n"; } } dump << "\n"; return dump.str(); } BoundingBox CSGChain::getBoundingBox() const { BoundingBox bbox; for (size_t i=0;igetBoundingBox(); if (!psbox.isNull()) { bbox.extend(matrices[i] * psbox); } } } return bbox; } openscad-2013.01+dfsg.orig/src/rendernode.h0000644000175000017500000000102111640436732020015 0ustar chrysnchrysn#ifndef RENDERNODE_H_ #define RENDERNODE_H_ #include "node.h" #include "visitor.h" #include class RenderNode : public AbstractNode { public: RenderNode(const ModuleInstantiation *mi) : AbstractNode(mi), convexity(1) { } virtual Response accept(class State &state, Visitor &visitor) const { return visitor.visit(state, *this); } virtual std::string toString() const; virtual std::string name() const { return "render"; } PolySet *evaluate_polyset(class PolySetEvaluator *ps) const; int convexity; }; #endif openscad-2013.01+dfsg.orig/src/parsersettings.cc0000644000175000017500000000364012076022155021106 0ustar chrysnchrysn#include "parsersettings.h" #include #include #include "boosty.h" #include // Needed for Q_ defines - move the offending code somewhere else namespace fs = boost::filesystem; std::vector librarypath; void add_librarydir(const std::string &libdir) { librarypath.push_back(libdir); } /*! Searces for the given file in library paths and returns the full path if found. Returns an empty path if file cannot be found or filename is a directory. */ std::string locate_file(const std::string &filename) { BOOST_FOREACH(const std::string &dir, librarypath) { fs::path usepath = fs::path(dir) / filename; if (fs::exists(usepath) && !fs::is_directory(usepath)) return usepath.string(); } return std::string(); } void parser_init(const std::string &applicationpath) { // Add path from OPENSCADPATH before adding built-in paths const char *openscadpath = getenv("OPENSCADPATH"); if (openscadpath) { add_librarydir(boosty::absolute(fs::path(openscadpath)).string()); } // FIXME: Support specifying more than one path in OPENSCADPATH // FIXME: Add ~/.openscad/libraries // FIXME: Add ~/Documents/OpenSCAD/libraries on Mac? std::string librarydir; fs::path libdir(applicationpath); fs::path tmpdir; #ifdef __APPLE__ libdir /= "../Resources"; // Libraries can be bundled if (!is_directory(libdir / "libraries")) libdir /= "../../.."; #elif !defined(WIN32) if (is_directory(tmpdir = libdir / "../share/openscad/libraries")) { librarydir = boosty::stringy( tmpdir ); } else if (is_directory(tmpdir = libdir / "../../share/openscad/libraries")) { librarydir = boosty::stringy( tmpdir ); } else if (is_directory(tmpdir = libdir / "../../libraries")) { librarydir = boosty::stringy( tmpdir ); } else #endif if (is_directory(tmpdir = libdir / "libraries")) { librarydir = boosty::stringy( tmpdir ); } if (!librarydir.empty()) add_librarydir(librarydir); } openscad-2013.01+dfsg.orig/src/CGAL_Nef_polyhedron_DxfData.cc0000644000175000017500000000557012076022154023170 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "dxfdata.h" #include "grid.h" #include "CGAL_Nef_polyhedron.h" #include "cgal.h" #include "cgalutils.h" #include "svg.h" #ifdef ENABLE_CGAL DxfData *CGAL_Nef_polyhedron::convertToDxfData() const { assert(this->dim == 2); DxfData *dxfdata = new DxfData(); Grid2d grid(GRID_COARSE); typedef CGAL_Nef_polyhedron2::Explorer Explorer; typedef Explorer::Face_const_iterator fci_t; typedef Explorer::Halfedge_around_face_const_circulator heafcc_t; Explorer E = this->p2->explorer(); for (fci_t fit = E.faces_begin(), facesend = E.faces_end(); fit != facesend; ++fit) { heafcc_t fcirc(E.halfedge(fit)), fend(fcirc); int first_point = -1, last_point = -1; CGAL_For_all(fcirc, fend) { if (E.is_standard(E.target(fcirc))) { Explorer::Point ep = E.point(E.target(fcirc)); double x = to_double(ep.x()), y = to_double(ep.y()); int this_point = -1; if (grid.has(x, y)) { this_point = grid.align(x, y); } else { this_point = grid.align(x, y) = dxfdata->points.size(); dxfdata->points.push_back(Vector2d(x, y)); } if (first_point < 0) { dxfdata->paths.push_back(DxfData::Path()); first_point = this_point; } if (this_point != last_point) { dxfdata->paths.back().indices.push_back(this_point); last_point = this_point; } } } if (first_point >= 0) { dxfdata->paths.back().is_closed = 1; dxfdata->paths.back().indices.push_back(first_point); } } dxfdata->fixup_path_direction(); return dxfdata; } std::string CGAL_Nef_polyhedron::dump() const { if (this->dim==2) return OpenSCAD::dump_svg( *this->p2 ); else if (this->dim==3) return OpenSCAD::dump_svg( *this->p3 ); else return std::string("Nef Polyhedron with dimension != 2 or 3"); } #endif // ENABLE_CGAL openscad-2013.01+dfsg.orig/src/Tree.h0000644000175000017500000000126711667257412016610 0ustar chrysnchrysn#ifndef TREE_H_ #define TREE_H_ #include "nodecache.h" /*! For now, just an abstraction of the node tree which keeps a dump cache based on node indices around. Note that since node trees don't survive a recompilation, the tree cannot either. */ class Tree { public: Tree(const AbstractNode *root = NULL) : root_node(root) {} ~Tree(); void setRoot(const AbstractNode *root); const AbstractNode *root() const { return this->root_node; } const std::string &getString(const AbstractNode &node) const; const std::string &getIdString(const AbstractNode &node) const; private: const AbstractNode *root_node; mutable NodeCache nodecache; mutable NodeCache nodeidcache; }; #endif openscad-2013.01+dfsg.orig/glew.pri0000644000175000017500000000053312076022154016402 0ustar chrysnchrysnglew { # Optionally specify location of GLEW using the # GLEWDIR env. variable GLEW_DIR = $$(GLEWDIR) !isEmpty(GLEW_DIR) { QMAKE_INCDIR += $$GLEW_DIR/include QMAKE_LIBDIR += $$GLEW_DIR/lib QMAKE_LIBDIR += $$GLEW_DIR/lib64 } unix:LIBS += -lGLEW win32:LIBS += -lglew32s CONFIG(mingw-cross-env):DEFINES += GLEW_STATIC } openscad-2013.01+dfsg.orig/OpenSCAD.sdef0000644000175000017500000000057211516152336017136 0ustar chrysnchrysn openscad-2013.01+dfsg.orig/mingw-cross-env.pri0000644000175000017500000000100312013171370020467 0ustar chrysnchrysn# cross compilation unix->win32 CONFIG(mingw-cross-env) { LIBS += mingw-cross-env/lib/libglew32s.a LIBS += mingw-cross-env/lib/libglut.a LIBS += mingw-cross-env/lib/libopengl32.a LIBS += mingw-cross-env/lib/libGLEW.a LIBS += mingw-cross-env/lib/libglaux.a LIBS += mingw-cross-env/lib/libglu32.a LIBS += mingw-cross-env/lib/libopencsg.a LIBS += mingw-cross-env/lib/libmpfr.a LIBS += mingw-cross-env/lib/libgmp.a LIBS += mingw-cross-env/lib/libCGAL.a QMAKE_CXXFLAGS += -fpermissive } openscad-2013.01+dfsg.orig/boost.pri0000644000175000017500000000466212001145114016567 0ustar chrysnchrysnboost { # Optionally specify location of boost using the # BOOSTDIR env. variable BOOST_DIR = $$(BOOSTDIR) !isEmpty(BOOST_DIR) { QMAKE_INCDIR += $$BOOST_DIR message("boost location: $$BOOST_DIR") win32: QMAKE_LIBDIR += -L$$BOOST_DIR/lib } CONFIG(mingw-cross-env) { DEFINES += BOOST_STATIC DEFINES += BOOST_THREAD_USE_LIB DEFINES += Boost_USE_STATIC_LIBS BOOST_LINK_FLAGS = -lboost_thread_win32-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt -lboost_chrono-mt } isEmpty(BOOST_LINK_FLAGS):win32 { BOOST_LINK_FLAGS = -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1 -llibboost_filesystem-vc90-mt-s-1_46_1 -llibboost_system-vc90-mt-s-1_46_1 -llibboost_regex-vc90-mt-s-1_46_1 } # check for OPENSCAD_LIBDIR + multithread isEmpty(BOOST_LINK_FLAGS) { OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES) !isEmpty(OPENSCAD_LIBDIR) { exists($$OPENSCAD_LIBDIR/lib/libboost*thread-mt*) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt } else { exists($$OPENSCAD_LIBDIR/lib/libboost*thread*) { BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options -lboost_filesystem -lboost_system -lboost_regex } } } } # check for BOOSTDIR + multithread isEmpty(BOOST_LINK_FLAGS) { BOOST_DIR = $$(BOOSTDIR) !isEmpty(BOOST_DIR) { exists($$BOOST_DIR/lib/libboost*thread-mt*) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt } else { exists($$BOOST_DIR/lib/libboost*thread*) { BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options -lboost_filesystem -lboost_system -lboost_regex } } } } isEmpty(BOOST_LINK_FLAGS) { unix { BMT_TEST1 = /usr/lib64/libboost*thread-mt* BMT_TEST2 = /usr/lib/libboost*thread-mt* BMT_TEST3 = /usr/pkg/lib/libboost*thread-mt* # netbsd exists($$BMT_TEST1)|exists($$BMT_TEST2)|exists($$BMT_TEST3) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt } } } isEmpty(BOOST_LINK_FLAGS) { unix|macx { BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options -lboost_filesystem -lboost_system -lboost_regex } } LIBS += $$BOOST_LINK_FLAGS } openscad-2013.01+dfsg.orig/qxs/0000755000175000017500000000000012110740367015544 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/qxs/openscad.qnfa0000644000175000017500000000404311516152336020212 0ustar chrysnchrysn /\* \*/ // \n \\\n \n \\ " " \n \\[nrtvf\\"'\n] use \n < > include \n < > ( ) { } \[ \] module function for if else false true undef -?[0-9]*.[0-9]+f? -?[0-9]+[ulUL]* openscad-2013.01+dfsg.orig/qxs/openscad.qxf0000644000175000017500000001102311516152336020057 0ustar chrysnchrysn false false false false false false false false false false false false #008000 true false false false false false #ff00ff false true false false false false #a0a0a4 false true false false false false #000080 true false false false false false #000000 true false false false false false #0095ff true false false false false false #ff0000 #ffff00 true false false false false false #ff0000 #ffff00 true false false false false false #ffff00 #ff0000 true true false false false false #ff0000 #ffff00 true false false false false true #d060d0 #ff0000 false false false false false false #800080 false false false false false false #ff0000 false false false false false false #ff1493 openscad-2013.01+dfsg.orig/tests/0000755000175000017500000000000012110740367016073 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/cgalcachetest.cc0000644000175000017500000001224711777162366021221 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "printutils.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include "CGAL_Nef_polyhedron.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #include "CGALCache.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include namespace fs = boost::filesystem; #include namespace po = boost::program_options; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; void cgalTree(Tree &tree) { assert(tree.root()); CGALEvaluator evaluator(tree); Traverser evaluate(evaluator, *tree.root(), Traverser::PRE_AND_POSTFIX); evaluate.execute(); } AbstractNode *find_root_tag(AbstractNode *n) { foreach(AbstractNode *v, n->children) { if (v->modinst->tag_root) return v; if (AbstractNode *vroot = find_root_tag(v)) return vroot; } return NULL; } po::variables_map parse_options(int argc, char *argv[]) { po::options_description desc("Allowed options"); desc.add_options() ("help,h", "help message") ("cgalcachesize", po::value(), "Set CGAL cache size in bytes"); po::options_description hidden("Hidden options"); hidden.add_options() ("input-file", po::value(), "input file") ("output-file", po::value(), "output file"); po::positional_options_description p; p.add("input-file", 1).add("output-file", 1); po::options_description all_options; all_options.add(desc).add(hidden); po::variables_map vm; po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm); po::notify(vm); return vm; } int main(int argc, char **argv) { const char *filename, *outfilename = NULL; size_t cgalcachesize = 1*1024*1024; po::variables_map vm; try { vm = parse_options(argc, argv); } catch ( po::error e ) { std::cerr << "error parsing options: " << e.what() << "\n"; } if (vm.count("cgalcachesize")) { cgalcachesize = vm["cgalcachesize"].as(); } if (vm.count("input-file")) { filename = vm["input-file"].as().c_str(); } if (vm.count("output-file")) { outfilename = vm["output-file"].as().c_str(); } if ((!filename || !outfilename)) { std::cerr << "Usage: " << argv[0] << " \n"; exit(1); } CGALCache::instance()->setMaxSize(cgalcachesize); Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); AbstractNode *absolute_root_node = root_module->evaluate(&root_ctx, &root_inst); AbstractNode *root_node; // Do we have an explicit root node (! modifier)? if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node; Tree tree(root_node); CGALEvaluator cgalevaluator(tree); PolySetCGALEvaluator psevaluator(cgalevaluator); print_messages_push(); std::cout << "First evaluation:\n"; CGAL_Nef_polyhedron N = cgalevaluator.evaluateCGALMesh(*root_node); std::cout << "Second evaluation:\n"; CGAL_Nef_polyhedron N2 = cgalevaluator.evaluateCGALMesh(*root_node); // FIXME: // Evaluate again to make cache kick in // Record printed output and compare it // Compare the polyhedrons // Record cache statistics? print_messages_pop(); current_path(original_path); Builtins::instance(true); return 0; } openscad-2013.01+dfsg.orig/tests/tests-common.h0000644000175000017500000000015011717547746020712 0ustar chrysnchrysn#ifndef TESTS_COMMON_H_ #define TESTS_COMMON_H_ class Module *parsefile(const char *filename); #endif openscad-2013.01+dfsg.orig/tests/system-gl.cc0000644000175000017500000000260311667754403020343 0ustar chrysnchrysn /* OpenGL helper functions */ #include #include #include #include "system-gl.h" #include using namespace std; using namespace boost; string glew_dump(bool dumpall) { stringstream out; out << "GLEW version: " << glewGetString(GLEW_VERSION) << endl << "GL Renderer: " << (const char *)glGetString(GL_RENDERER) << endl << "GL Vendor: " << (const char *)glGetString(GL_VENDOR) << endl << "OpenGL Version: " << (const char *)glGetString(GL_VERSION) << endl; out << "GL Extensions: " << endl; if (dumpall) { string extensions((const char *)glGetString(GL_EXTENSIONS)); replace_all( extensions, " ", "\n " ); out << " " << extensions << endl; } out << "GL_ARB_framebuffer_object: " << (glewIsSupported("GL_ARB_framebuffer_object") ? "yes" : "no") << endl << "GL_EXT_framebuffer_object: " << (glewIsSupported("GL_EXT_framebuffer_object") ? "yes" : "no") << endl << "GL_EXT_packed_depth_stencil: " << (glewIsSupported("GL_EXT_packed_depth_stencil") ? "yes" : "no") << endl; return out.str(); }; bool report_glerror(const char * function) { GLenum tGLErr = glGetError(); if (tGLErr != GL_NO_ERROR) { cerr << "OpenGL error 0x" << hex << tGLErr << ": " << gluErrorString(tGLErr) << " after " << function << endl; return true; } return false; } openscad-2013.01+dfsg.orig/tests/EnforceConfig.cmake0000644000175000017500000000015511664230101021576 0ustar chrysnchrysnmessage("Enforcing config") if(NOT CTEST_CONFIGURATION_TYPE) set(CTEST_CONFIGURATION_TYPE Default) endif() openscad-2013.01+dfsg.orig/tests/lodepng.cpp0000644000175000017500000061510311775567400020250 0ustar chrysnchrysn/* LodePNG version 20110908 Copyright (c) 2005-2011 Lode Vandevenne This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* The manual and changelog are in the header file "lodepng.h" Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. */ #include "lodepng.h" #include #include #ifdef __cplusplus #include #endif /*__cplusplus*/ #define VERSION_STRING "20110908" /* This source file is built up in the following large parts. The code sections with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. -Tools for C and common code for PNG and Zlib -C Code for Zlib (huffman, deflate, ...) -C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) -The C++ wrapper around all of the above */ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ /* // Tools for C, and common code for PNG and Zlib. // */ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ /* Often in case of an error a value is assigned to a variable and then it breaks out of a loop (to go to the cleanup phase of a function). This macro does that. It makes the error handling code shorter and more readable. Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(9924); */ #define CERROR_BREAK(errorvar, code)\ {\ errorvar = code;\ break;\ } /*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ #define ERROR_BREAK(code) CERROR_BREAK(error, code) /* About vector, uivector, ucvector and string: -All of them wrap dynamic arrays or text strings in a similar way. -LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. -The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. -They're not used in the interface, only internally in this file as static functions. -As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. */ #ifdef LODEPNG_COMPILE_ZLIB #ifdef LODEPNG_COMPILE_ENCODER typedef struct vector /*dynamic vector of void* pointers. This one is used only by the deflate compressor*/ { void* data; size_t size; /*in groups of bytes depending on type*/ size_t allocsize; /*in bytes*/ unsigned typesize; /*sizeof the type you store in data*/ } vector; static unsigned vector_resize(vector* p, size_t size) /*returns 1 if success, 0 if failure ==> nothing done*/ { if(size * p->typesize > p->allocsize) { size_t newsize = size * p->typesize * 2; void* data = realloc(p->data, newsize); if(data) { p->allocsize = newsize; p->data = data; p->size = size; } else return 0; } else p->size = size; return 1; } /*resize and use destructor on elements if it gets smaller*/ static unsigned vector_resized(vector* p, size_t size, void dtor(void*)) { size_t i; if(size < p->size) { for(i = size; i < p->size; i++) { dtor(&((char*)(p->data))[i * p->typesize]); } } return vector_resize(p, size); } static void vector_cleanup(void* p) { ((vector*)p)->size = ((vector*)p)->allocsize = 0; free(((vector*)p)->data); ((vector*)p)->data = NULL; } static void vector_cleanupd(vector* p, void dtor(void*)) /*clear and use destructor on elements*/ { vector_resized(p, 0, dtor); vector_cleanup(p); } static void vector_init(vector* p, unsigned typesize) { p->data = NULL; p->size = p->allocsize = 0; p->typesize = typesize; } static void vector_swap(vector* p, vector* q) /*they're supposed to have the same typesize*/ { size_t tmp; void* tmpp; tmp = p->size; p->size = q->size; q->size = tmp; tmp = p->allocsize; p->allocsize = q->allocsize; q->allocsize = tmp; tmpp = p->data; p->data = q->data; q->data = tmpp; } static void* vector_get(vector* p, size_t index) { return &((char*)p->data)[index * p->typesize]; } #endif /*LODEPNG_COMPILE_ENCODER*/ #endif /*LODEPNG_COMPILE_ZLIB*/ /* /////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_ZLIB /*dynamic vector of unsigned ints*/ typedef struct uivector { unsigned* data; size_t size; /*size in number of unsigned longs*/ size_t allocsize; /*allocated size in bytes*/ } uivector; static void uivector_cleanup(void* p) { ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; free(((uivector*)p)->data); ((uivector*)p)->data = NULL; } /*returns 1 if success, 0 if failure ==> nothing done*/ static unsigned uivector_resize(uivector* p, size_t size) { if(size * sizeof(unsigned) > p->allocsize) { size_t newsize = size * sizeof(unsigned) * 2; void* data = realloc(p->data, newsize); if(data) { p->allocsize = newsize; p->data = (unsigned*)data; p->size = size; } else return 0; } else p->size = size; return 1; } /*resize and give all new elements the value*/ static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) { size_t oldsize = p->size, i; if(!uivector_resize(p, size)) return 0; for(i = oldsize; i < size; i++) p->data[i] = value; return 1; } static void uivector_init(uivector* p) { p->data = NULL; p->size = p->allocsize = 0; } #ifdef LODEPNG_COMPILE_ENCODER /*returns 1 if success, 0 if failure ==> nothing done*/ static unsigned uivector_push_back(uivector* p, unsigned c) { if(!uivector_resize(p, p->size + 1)) return 0; p->data[p->size - 1] = c; return 1; } /*copy q to p, returns 1 if success, 0 if failure ==> nothing done*/ static unsigned uivector_copy(uivector* p, const uivector* q) { size_t i; if(!uivector_resize(p, q->size)) return 0; for(i = 0; i < q->size; i++) p->data[i] = q->data[i]; return 1; } static void uivector_swap(uivector* p, uivector* q) { size_t tmp; unsigned* tmpp; tmp = p->size; p->size = q->size; q->size = tmp; tmp = p->allocsize; p->allocsize = q->allocsize; q->allocsize = tmp; tmpp = p->data; p->data = q->data; q->data = tmpp; } #endif /*LODEPNG_COMPILE_ENCODER*/ #endif /*LODEPNG_COMPILE_ZLIB*/ /* /////////////////////////////////////////////////////////////////////////// */ /*dynamic vector of unsigned chars*/ typedef struct ucvector { unsigned char* data; size_t size; /*used size*/ size_t allocsize; /*allocated size*/ } ucvector; static void ucvector_cleanup(void* p) { ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; free(((ucvector*)p)->data); ((ucvector*)p)->data = NULL; } /*returns 1 if success, 0 if failure ==> nothing done*/ static unsigned ucvector_resize(ucvector* p, size_t size) { if(size * sizeof(unsigned char) > p->allocsize) { size_t newsize = size * sizeof(unsigned char) * 2; void* data = realloc(p->data, newsize); if(data) { p->allocsize = newsize; p->data = (unsigned char*)data; p->size = size; } else return 0; /*error: not enough memory*/ } else p->size = size; return 1; } #ifdef LODEPNG_COMPILE_DECODER #ifdef LODEPNG_COMPILE_PNG /*resize and give all new elements the value*/ static unsigned ucvector_resizev(ucvector* p, size_t size, unsigned char value) { size_t oldsize = p->size, i; if(!ucvector_resize(p, size)) return 0; for(i = oldsize; i < size; i++) p->data[i] = value; return 1; } #endif /*LODEPNG_COMPILE_PNG*/ #endif /*LODEPNG_COMPILE_DECODER*/ static void ucvector_init(ucvector* p) { p->data = NULL; p->size = p->allocsize = 0; } #ifdef LODEPNG_COMPILE_ZLIB /*you can both convert from vector to buffer&size and vica versa. If you use init_buffer to take over a buffer and size, it is not needed to use cleanup*/ static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) { p->data = buffer; p->allocsize = p->size = size; } #endif /*LODEPNG_COMPILE_ZLIB*/ #ifdef LODEPNG_COMPILE_ENCODER /*returns 1 if success, 0 if failure ==> nothing done*/ static unsigned ucvector_push_back(ucvector* p, unsigned char c) { if(!ucvector_resize(p, p->size + 1)) return 0; p->data[p->size - 1] = c; return 1; } #endif /*LODEPNG_COMPILE_ENCODER*/ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_PNG #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /*returns 1 if success, 0 if failure ==> nothing done*/ static unsigned string_resize(char** out, size_t size) { char* data = (char*)realloc(*out, size + 1); if(data) { data[size] = 0; /*null termination char*/ *out = data; } return data != 0; } /*init a {char*, size_t} pair for use as string*/ static void string_init(char** out) { *out = NULL; string_resize(out, 0); } /*free the above pair again*/ static void string_cleanup(char** out) { free(*out); *out = NULL; } static void string_set(char** out, const char* in) { size_t insize = strlen(in), i = 0; if(string_resize(out, insize)) { for(i = 0; i < insize; i++) { (*out)[i] = in[i]; } } } #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #endif /*LODEPNG_COMPILE_PNG*/ /* ////////////////////////////////////////////////////////////////////////// */ unsigned LodePNG_read32bitInt(const unsigned char* buffer) { return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; } /*buffer must have at least 4 allocated bytes available*/ static void LodePNG_set32bitInt(unsigned char* buffer, unsigned value) { buffer[0] = (unsigned char)((value >> 24) & 0xff); buffer[1] = (unsigned char)((value >> 16) & 0xff); buffer[2] = (unsigned char)((value >> 8) & 0xff); buffer[3] = (unsigned char)((value ) & 0xff); } #ifdef LODEPNG_COMPILE_ENCODER static void LodePNG_add32bitInt(ucvector* buffer, unsigned value) { ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ LodePNG_set32bitInt(&buffer->data[buffer->size - 4], value); } #endif /*LODEPNG_COMPILE_ENCODER*/ /* ////////////////////////////////////////////////////////////////////////// */ /* / File IO / */ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_DISK unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* filename) { FILE* file; long size; /*provide some proper output values if error will happen*/ *out = 0; *outsize = 0; file = fopen(filename, "rb"); if(!file) return 78; /*get filesize:*/ fseek(file , 0 , SEEK_END); size = ftell(file); rewind(file); /*read contents of the file into the vector*/ *outsize = 0; *out = (unsigned char*)malloc((size_t)size); if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file); fclose(file); if(!(*out) && size) return 9900; /*the above malloc failed*/ return 0; } /*write given buffer to the file, overwriting the file, it doesn't append to it.*/ unsigned LodePNG_saveFile(const unsigned char* buffer, size_t buffersize, const char* filename) { FILE* file; file = fopen(filename, "wb" ); if(!file) return 79; fwrite((char*)buffer , 1 , buffersize, file); fclose(file); return 0; } #endif /*LODEPNG_COMPILE_DISK*/ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ /* // End of common code and tools. Begin of Zlib related code. // */ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_ZLIB /* ////////////////////////////////////////////////////////////////////////// */ /* / Reading and writing single bits and bytes from/to stream for Deflate / */ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_ENCODER /*TODO: this ignores potential out of memory errors*/ static void addBitToStream(size_t* bitpointer, ucvector* bitstream, unsigned char bit) { /*add a new byte at the end*/ if((*bitpointer) % 8 == 0) ucvector_push_back(bitstream, (unsigned char)0); /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7)); (*bitpointer)++; } static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) { size_t i; for(i = 0; i < nbits; i++) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); } static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) { size_t i; for(i = 0; i < nbits; i++) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); } #endif /*LODEPNG_COMPILE_ENCODER*/ #ifdef LODEPNG_COMPILE_DECODER #define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) { unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); (*bitpointer)++; return result; } static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) { unsigned result = 0, i; for(i = 0; i < nbits; i++) { result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; (*bitpointer)++; } return result; } #endif /*LODEPNG_COMPILE_DECODER*/ /* ////////////////////////////////////////////////////////////////////////// */ /* / Deflate - Huffman / */ /* ////////////////////////////////////////////////////////////////////////// */ #define FIRST_LENGTH_CODE_INDEX 257 #define LAST_LENGTH_CODE_INDEX 285 /*256 literals, the end code, some length codes, and 2 unused codes*/ #define NUM_DEFLATE_CODE_SYMBOLS 288 /*the distance codes have their own symbols, 30 used, 2 unused*/ #define NUM_DISTANCE_SYMBOLS 32 /*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ #define NUM_CODE_LENGTH_CODES 19 /*the base lengths represented by codes 257-285*/ static const unsigned LENGTHBASE[29] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; /*the extra bits used by codes 257-285 (added to base length)*/ static const unsigned LENGTHEXTRA[29] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; /*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ static const unsigned DISTANCEBASE[30] = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; /*the extra bits of backwards distances (added to base)*/ static const unsigned DISTANCEEXTRA[30] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; /*the order in which "code length alphabet code lengths" are stored, out of this the huffman tree of the dynamic huffman tree lengths is generated*/ static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; /* ////////////////////////////////////////////////////////////////////////// */ /* Huffman tree struct, containing multiple representations of the tree */ typedef struct HuffmanTree { uivector tree2d; uivector tree1d; uivector lengths; /*the lengths of the codes of the 1d-tree*/ unsigned maxbitlen; /*maximum number of bits a single code can get*/ unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ } HuffmanTree; /*function used for debug purposes to draw the tree in ascii art with C++*/ /*#include static void HuffmanTree_draw(HuffmanTree* tree) { std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; for(size_t i = 0; i < tree->tree1d.size; i++) { if(tree->lengths.data[i]) std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; } std::cout << std::endl; }*/ static void HuffmanTree_init(HuffmanTree* tree) { uivector_init(&tree->tree2d); uivector_init(&tree->tree1d); uivector_init(&tree->lengths); } static void HuffmanTree_cleanup(HuffmanTree* tree) { uivector_cleanup(&tree->tree2d); uivector_cleanup(&tree->tree1d); uivector_cleanup(&tree->lengths); } /*the tree representation used by the decoder. return value is error*/ static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) { unsigned nodefilled = 0; /*up to which node it is filled*/ unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ unsigned n, i; if(!uivector_resize(&tree->tree2d, tree->numcodes * 2)) return 9901; /*alloc fail*/ /* convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means uninited, a value >= numcodes is an address to another bit, a value < numcodes is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as many columns as codes - 1. A good huffmann tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. Here, the internal nodes are stored (what their 0 and 1 option point to). There is only memory for such good tree currently, if there are more nodes (due to too long length codes), error 55 will happen */ for(n = 0; n < tree->numcodes * 2; n++) { tree->tree2d.data[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ } for(n = 0; n < tree->numcodes; n++) /*the codes*/ { for(i = 0; i < tree->lengths.data[n]; i++) /*the bits for this code*/ { unsigned char bit = (unsigned char)((tree->tree1d.data[n] >> (tree->lengths.data[n] - i - 1)) & 1); if(treepos > tree->numcodes - 2) return 55; /*error 55: oversubscribed; see description in header*/ if(tree->tree2d.data[2 * treepos + bit] == 32767) /*not yet filled in*/ { if(i + 1 == tree->lengths.data[n]) /*last bit*/ { tree->tree2d.data[2 * treepos + bit] = n; /*put the current code in it*/ treepos = 0; } else { /*put address of the next step in here, first that address has to be found of course (it's just nodefilled + 1)...*/ nodefilled++; /*addresses encoded with numcodes added to it*/ tree->tree2d.data[2 * treepos + bit] = nodefilled + tree->numcodes; treepos = nodefilled; } } else treepos = tree->tree2d.data[2 * treepos + bit] - tree->numcodes; } } for(n = 0; n < tree->numcodes * 2; n++) { if(tree->tree2d.data[n] == 32767) tree->tree2d.data[n] = 0; /*remove possible remaining 32767's*/ } return 0; } /* Second step for the ...makeFromLengths and ...makeFromFrequencies functions. numcodes, lengths and maxbitlen must already be filled in correctly. return value is error. */ static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) { uivector blcount; uivector nextcode; unsigned bits, n, error = 0; uivector_init(&blcount); uivector_init(&nextcode); if(!uivector_resize(&tree->tree1d, tree->numcodes) || !uivector_resizev(&blcount, tree->maxbitlen + 1, 0) || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) error = 9902; /*alloc fail*/ if(!error) { /*step 1: count number of instances of each code length*/ for(bits = 0; bits < tree->numcodes; bits++) blcount.data[tree->lengths.data[bits]]++; /*step 2: generate the nextcode values*/ for(bits = 1; bits <= tree->maxbitlen; bits++) { nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; } /*step 3: generate all the codes*/ for(n = 0; n < tree->numcodes; n++) { if(tree->lengths.data[n] != 0) tree->tree1d.data[n] = nextcode.data[tree->lengths.data[n]]++; } } uivector_cleanup(&blcount); uivector_cleanup(&nextcode); if(!error) return HuffmanTree_make2DTree(tree); else return error; } /* given the code lengths (as stored in the PNG file), generate the tree as defined by Deflate. maxbitlen is the maximum bits that a code in the tree can have. return value is error. */ static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, size_t numcodes, unsigned maxbitlen) { unsigned i; if(!uivector_resize(&tree->lengths, numcodes)) return 9903; /*alloc fail*/ for(i = 0; i < numcodes; i++) tree->lengths.data[i] = bitlen[i]; tree->numcodes = (unsigned)numcodes; /*number of symbols*/ tree->maxbitlen = maxbitlen; return HuffmanTree_makeFromLengths2(tree); } #ifdef LODEPNG_COMPILE_ENCODER /* A coin, this is the terminology used for the package-merge algorithm and the coin collector's problem. This is used to generate the huffman tree. A coin can be multiple coins (when they're merged) */ typedef struct Coin { uivector symbols; float weight; /*the sum of all weights in this coin*/ } Coin; static void Coin_init(Coin* c) { uivector_init(&c->symbols); } /*argument c is void* so that this dtor can be given as function pointer to the vector resize function*/ static void Coin_cleanup(void* c) { uivector_cleanup(&((Coin*)c)->symbols); } static void Coin_copy(Coin* c1, const Coin* c2) { c1->weight = c2->weight; uivector_copy(&c1->symbols, &c2->symbols); } static void addCoins(Coin* c1, const Coin* c2) { size_t i; for(i = 0; i < c2->symbols.size; i++) uivector_push_back(&c1->symbols, c2->symbols.data[i]); c1->weight += c2->weight; } /* Coin_sort: This uses a simple combsort to sort the data. This function is not critical for overall encoding speed and the data amount isn't that large. */ static void Coin_sort(Coin* data, size_t amount) { size_t gap = amount; unsigned char swapped = 0; while((gap > 1) || swapped) { size_t i; gap = (gap * 10) / 13; /*shrink factor 1.3*/ if(gap == 9 || gap == 10) gap = 11; /*combsort11*/ if(gap < 1) gap = 1; swapped = 0; for(i = 0; i < amount - gap; i++) { size_t j = i + gap; if(data[j].weight < data[i].weight) { float temp = data[j].weight; data[j].weight = data[i].weight; data[i].weight = temp; uivector_swap(&data[i].symbols, &data[j].symbols); swapped = 1; } } } } static unsigned HuffmanTree_fillInCoins(vector* coins, const unsigned* frequencies, unsigned numcodes, size_t sum) { unsigned i; for(i = 0; i < numcodes; i++) { Coin* coin; if(frequencies[i] == 0) continue; /*it's important to exclude symbols that aren't present*/ if(!vector_resize(coins, coins->size + 1)) { vector_cleanup(coins); return 9904; /*alloc fail*/ } coin = (Coin*)(vector_get(coins, coins->size - 1)); Coin_init(coin); coin->weight = frequencies[i] / (float)sum; uivector_push_back(&coin->symbols, i); } if(coins->size) Coin_sort((Coin*)coins->data, coins->size); return 0; } /*Create the Huffman tree given the symbol frequencies*/ static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, size_t numcodes, unsigned maxbitlen) { unsigned i, j; size_t sum = 0, numpresent = 0; unsigned error = 0; vector prev_row; /*type Coin, the previous row of coins*/ vector coins; /*type Coin, the coins of the currently calculated row*/ tree->maxbitlen = maxbitlen; for(i = 0; i < numcodes; i++) { if(frequencies[i] > 0) { numpresent++; sum += frequencies[i]; } } if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ tree->numcodes = (unsigned)numcodes; /*number of symbols*/ uivector_resize(&tree->lengths, 0); if(!uivector_resizev(&tree->lengths, tree->numcodes, 0)) return 9905; /*alloc fail*/ /*there are no symbols at all, in that case add one symbol of value 0 to the tree (see RFC 1951 section 3.2.7) */ if(numpresent == 0) { tree->lengths.data[0] = 1; return HuffmanTree_makeFromLengths2(tree); } /*the package merge algorithm gives wrong results if there's only one symbol (theoretically 0 bits would then suffice, but we need a proper symbol for zlib)*/ else if(numpresent == 1) { for(i = 0; i < numcodes; i++) if(frequencies[i]) tree->lengths.data[i] = 1; return HuffmanTree_makeFromLengths2(tree); } vector_init(&coins, sizeof(Coin)); vector_init(&prev_row, sizeof(Coin)); /*Package-Merge algorithm represented by coin collector's problem For every symbol, maxbitlen coins will be created*/ /*first row, lowest denominator*/ error = HuffmanTree_fillInCoins(&coins, frequencies, tree->numcodes, sum); if(!error) { for(j = 1; j <= maxbitlen && !error; j++) /*each of the remaining rows*/ { vector_swap(&coins, &prev_row); /*swap instead of copying*/ if(!vector_resized(&coins, 0, Coin_cleanup)) ERROR_BREAK(9906 /*alloc fail*/); for(i = 0; i + 1 < prev_row.size; i += 2) { if(!vector_resize(&coins, coins.size + 1)) ERROR_BREAK(9907 /*alloc fail*/); Coin_init((Coin*)vector_get(&coins, coins.size - 1)); Coin_copy((Coin*)vector_get(&coins, coins.size - 1), (Coin*)vector_get(&prev_row, i)); /*merge the coins into packages*/ addCoins((Coin*)vector_get(&coins, coins.size - 1), (Coin*)vector_get(&prev_row, i + 1)); } if(j < maxbitlen) { error = HuffmanTree_fillInCoins(&coins, frequencies, tree->numcodes, sum); } } } if(!error) { /*keep the coins with lowest weight, so that they add up to the amount of symbols - 1*/ vector_resized(&coins, numpresent - 1, Coin_cleanup); /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/ for(i = 0; i < coins.size; i++) { Coin* coin = (Coin*)vector_get(&coins, i); for(j = 0; j < coin->symbols.size; j++) tree->lengths.data[coin->symbols.data[j]]++; } error = HuffmanTree_makeFromLengths2(tree); } vector_cleanupd(&coins, Coin_cleanup); vector_cleanupd(&prev_row, Coin_cleanup); return error; } static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) { return tree->tree1d.data[index]; } static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) { return tree->lengths.data[index]; } #endif /*LODEPNG_COMPILE_ENCODER*/ /*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ static unsigned generateFixedLitLenTree(HuffmanTree* tree) { unsigned i, error = 0; uivector bitlen; uivector_init(&bitlen); if(!uivector_resize(&bitlen, NUM_DEFLATE_CODE_SYMBOLS)) error = 9909; /*alloc fail*/ if(!error) { /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ for(i = 0; i <= 143; i++) bitlen.data[i] = 8; for(i = 144; i <= 255; i++) bitlen.data[i] = 9; for(i = 256; i <= 279; i++) bitlen.data[i] = 7; for(i = 280; i <= 287; i++) bitlen.data[i] = 8; error = HuffmanTree_makeFromLengths(tree, bitlen.data, NUM_DEFLATE_CODE_SYMBOLS, 15); } uivector_cleanup(&bitlen); return error; } /*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ static unsigned generateFixedDistanceTree(HuffmanTree* tree) { unsigned i, error = 0; uivector bitlen; uivector_init(&bitlen); if(!uivector_resize(&bitlen, NUM_DISTANCE_SYMBOLS)) error = 9910; /*alloc fail*/ /*there are 32 distance codes, but 30-31 are unused*/ if(!error) { for(i = 0; i < NUM_DISTANCE_SYMBOLS; i++) bitlen.data[i] = 5; error = HuffmanTree_makeFromLengths(tree, bitlen.data, NUM_DISTANCE_SYMBOLS, 15); } uivector_cleanup(&bitlen); return error; } #ifdef LODEPNG_COMPILE_DECODER /* returns the code, or (unsigned)(-1) if error happened inbitlength is the length of the complete buffer, in bits (so its byte length times 8) */ static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, const HuffmanTree* codetree, size_t inbitlength) { unsigned treepos = 0, ct; for(;;) { if(*bp > inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ /* decode the symbol from the tree. The "readBitFromStream" code is inlined in the expression below because this is the biggest bottleneck while decoding */ ct = codetree->tree2d.data[(treepos << 1) + READBIT(*bp, in)]; (*bp)++; if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ } } #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_DECODER /* ////////////////////////////////////////////////////////////////////////// */ /* / Inflator (Decompressor) / */ /* ////////////////////////////////////////////////////////////////////////// */ /*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) { /*error checking not done, this is fixed stuff, it works, it doesn't depend on the image*/ /*TODO: out of memory errors could still happen...*/ generateFixedLitLenTree(tree_ll); generateFixedDistanceTree(tree_d); } /*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, const unsigned char* in, size_t* bp, size_t inlength) { /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ unsigned error = 0; unsigned n, HLIT, HDIST, HCLEN, i; size_t inbitlength = inlength * 8; /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ uivector bitlen_ll; /*lit,len code lengths*/ uivector bitlen_d; /*dist code lengths*/ /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ uivector bitlen_cl; HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ if((*bp) >> 3 >= inlength - 2) return 49; /*the bit pointer is or will go past the memory*/ /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ HLIT = readBitsFromStream(bp, in, 5) + 257; /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ HDIST = readBitsFromStream(bp, in, 5) + 1; /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ HCLEN = readBitsFromStream(bp, in, 4) + 4; HuffmanTree_init(&tree_cl); uivector_init(&bitlen_ll); uivector_init(&bitlen_d); uivector_init(&bitlen_cl); while(!error) { /*read the code length codes out of 3 * (amount of code length codes) bits*/ if(!uivector_resize(&bitlen_cl, NUM_CODE_LENGTH_CODES)) ERROR_BREAK(9911); for(i = 0; i < NUM_CODE_LENGTH_CODES; i++) { if(i < HCLEN) bitlen_cl.data[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); else bitlen_cl.data[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ } error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl.data, bitlen_cl.size, 7); if(error) break; /*now we can use this tree to read the lengths for the tree that this function will return*/ uivector_resizev(&bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 0); uivector_resizev(&bitlen_d, NUM_DISTANCE_SYMBOLS, 0); i = 0; if(!bitlen_ll.data || !bitlen_d.data) ERROR_BREAK(9912); /*alloc fail*/ /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ while(i < HLIT + HDIST) { unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); if(code <= 15) /*a length code*/ { if(i < HLIT) bitlen_ll.data[i] = code; else bitlen_d.data[i - HLIT] = code; i++; } else if(code == 16) /*repeat previous*/ { unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ unsigned value; /*set value to the previous code*/ if((*bp) >> 3 >= inlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ replength += readBitsFromStream(bp, in, 2); if((i - 1) < HLIT) value = bitlen_ll.data[i - 1]; else value = bitlen_d.data[i - HLIT - 1]; /*repeat this value in the next lengths*/ for(n = 0; n < replength; n++) { if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ if(i < HLIT) bitlen_ll.data[i] = value; else bitlen_d.data[i - HLIT] = value; i++; } } else if(code == 17) /*repeat "0" 3-10 times*/ { unsigned replength = 3; /*read in the bits that indicate repeat length*/ if((*bp) >> 3 >= inlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ replength += readBitsFromStream(bp, in, 3); /*repeat this value in the next lengths*/ for(n = 0; n < replength; n++) { if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ if(i < HLIT) bitlen_ll.data[i] = 0; else bitlen_d.data[i - HLIT] = 0; i++; } } else if(code == 18) /*repeat "0" 11-138 times*/ { unsigned replength = 11; /*read in the bits that indicate repeat length*/ if((*bp) >> 3 >= inlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ replength += readBitsFromStream(bp, in, 7); /*repeat this value in the next lengths*/ for(n = 0; n < replength; n++) { if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ if(i < HLIT) bitlen_ll.data[i] = 0; else bitlen_d.data[i - HLIT] = 0; i++; } } else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ { if(code == (unsigned)(-1)) { /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol (10=no endcode, 11=wrong jump outside of tree)*/ error = (*bp) > inlength * 8 ? 10 : 11; } else error = 16; /*unexisting code, this can never happen*/ break; } } if(error) break; if(bitlen_ll.data[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ error = HuffmanTree_makeFromLengths(tree_ll, &bitlen_ll.data[0], bitlen_ll.size, 15); if(error) break; error = HuffmanTree_makeFromLengths(tree_d, &bitlen_d.data[0], bitlen_d.size, 15); break; /*end of error-while*/ } uivector_cleanup(&bitlen_cl); uivector_cleanup(&bitlen_ll); uivector_cleanup(&bitlen_d); HuffmanTree_cleanup(&tree_cl); return error; } /*inflate a block with dynamic of fixed Huffman tree*/ static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength, unsigned btype) { unsigned error = 0; HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ HuffmanTree tree_d; /*the huffman tree for distance codes*/ size_t inbitlength = inlength * 8; HuffmanTree_init(&tree_ll); HuffmanTree_init(&tree_d); if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); else if(btype == 2) { error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); } for(;;) /*decode all symbols until end reached*/ { /*code_ll is literal, length or end code*/ unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); if(code_ll <= 255) /*literal symbol*/ { if((*pos) >= out->size) { /*reserve more room at once*/ if(!ucvector_resize(out, ((*pos) + 1) * 2)) ERROR_BREAK(9913 /*alloc fail*/); } out->data[(*pos)] = (unsigned char)(code_ll); (*pos)++; } else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ { unsigned code_d, distance; unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ size_t start, forward, backward, length; /*part 1: get length base*/ length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; /*part 2: get extra bits and add the value of that to length*/ numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; if(((*bp) >> 3) >= inlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ length += readBitsFromStream(bp, in, numextrabits_l); /*part 3: get distance code*/ code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); if(code_d > 29) { if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ { /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol (10=no endcode, 11=wrong jump outside of tree)*/ error = (*bp) > inlength * 8 ? 10 : 11; } else error = 18; /*error: invalid distance code (30-31 are never used)*/ break; } distance = DISTANCEBASE[code_d]; /*part 4: get extra bits from distance*/ numextrabits_d = DISTANCEEXTRA[code_d]; if(((*bp) >> 3) >= inlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ distance += readBitsFromStream(bp, in, numextrabits_d); /*part 5: fill in all the out[n] values based on the length and dist*/ start = (*pos); backward = start - distance; if((*pos) + length >= out->size) { /*reserve more room at once*/ if(!ucvector_resize(out, ((*pos) + length) * 2)) ERROR_BREAK(9914 /*alloc fail*/); } for(forward = 0; forward < length; forward++) { out->data[(*pos)] = out->data[backward]; (*pos)++; backward++; if(backward >= start) backward = start - distance; } } else if(code_ll == 256) { break; /*end code, break the loop*/ } else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ { /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol (10=no endcode, 11=wrong jump outside of tree)*/ error = (*bp) > inlength * 8 ? 10 : 11; break; } } HuffmanTree_cleanup(&tree_ll); HuffmanTree_cleanup(&tree_d); return error; } static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) { /*go to first boundary of byte*/ size_t p; unsigned LEN, NLEN, n, error = 0; while(((*bp) & 0x7) != 0) (*bp)++; p = (*bp) / 8; /*byte position*/ /*read LEN (2 bytes) and NLEN (2 bytes)*/ if(p >= inlength - 4) return 52; /*error, bit pointer will jump past memory*/ LEN = in[p] + 256 * in[p + 1]; p += 2; NLEN = in[p] + 256 * in[p + 1]; p += 2; /*check if 16-bit NLEN is really the one's complement of LEN*/ if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ if((*pos) + LEN >= out->size) { if(!ucvector_resize(out, (*pos) + LEN)) return 9915; /*alloc fail*/ } /*read the literal data: LEN bytes are now stored in the out buffer*/ if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ for(n = 0; n < LEN; n++) out->data[(*pos)++] = in[p++]; (*bp) = p * 8; return error; } /*inflate the deflated data (cfr. deflate spec); return value is the error*/ static unsigned LodePNG_inflate(ucvector* out, const unsigned char* in, size_t insize, size_t inpos) { /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ size_t bp = 0; unsigned BFINAL = 0; size_t pos = 0; /*byte position in the out buffer*/ unsigned error = 0; while(!BFINAL) { unsigned BTYPE; if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ BFINAL = readBitFromStream(&bp, &in[inpos]); BTYPE = 1 * readBitFromStream(&bp, &in[inpos]); BTYPE += 2 * readBitFromStream(&bp, &in[inpos]); if(BTYPE == 3) return 20; /*error: invalid BTYPE*/ else if(BTYPE == 0) error = inflateNoCompression(out, &in[inpos], &bp, &pos, insize); /*no compression*/ else error = inflateHuffmanBlock(out, &in[inpos], &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ if(error) return error; } /*Only now we know the true size of out, resize it to that*/ if(!ucvector_resize(out, pos)) error = 9916; /*alloc fail*/ return error; } #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER /* ////////////////////////////////////////////////////////////////////////// */ /* / Deflator (Compressor) / */ /* ////////////////////////////////////////////////////////////////////////// */ static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; /*bitlen is the size in bits of the code*/ static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) { addBitsToStreamReversed(bp, compressed, code, bitlen); } /*search the index in the array, that has the largest value smaller than or equal to the given value, given array must be sorted (if no value is smaller, it returns the size of the given array)*/ static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) { /*linear search implementation*/ /*for(size_t i = 1; i < array_size; i++) if(array[i] > value) return i - 1; return array_size - 1;*/ /*binary search implementation (not that much faster) (precondition: array_size > 0)*/ size_t left = 1; size_t right = array_size - 1; while(left <= right) { size_t mid = (left + right) / 2; if(array[mid] <= value) left = mid + 1; /*the value to find is more to the right*/ else if(array[mid - 1] > value) right = mid - 1; /*the value to find is more to the left*/ else return mid - 1; } return array_size - 1; } static void addLengthDistance(uivector* values, size_t length, size_t distance) { /*values in encoded vector are those used by deflate: 0-255: literal bytes 256: end 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) 286-287: invalid*/ unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); uivector_push_back(values, extra_length); uivector_push_back(values, dist_code); uivector_push_back(values, extra_distance); } #if 0 /*the "brute force" version of the encodeLZ7 algorithm, not used anymore, kept here for reference*/ static unsigned encodeLZ77_brute(uivector* out, const unsigned char* in, size_t insize, unsigned windowSize) { size_t pos; for(pos = 0; pos < insize; pos++) { size_t length = 0, offset = 0; /*the length and offset found for the current position*/ size_t max_offset = pos < windowSize ? pos : windowSize; /*how far back to test*/ size_t current_offset; /**search for the longest string, backwards through all possible distances (=offsets)**/ for(current_offset = 1; current_offset < max_offset; current_offset++) { size_t backpos = pos - current_offset; if(in[backpos] == in[pos]) { /*test the next characters*/ size_t current_length = 1; size_t backtest = backpos + 1; size_t foretest = pos + 1; /*maximum supporte length by deflate is max length*/ while(foretest < insize && in[backtest] == in[foretest] && current_length < MAX_SUPPORTED_DEFLATE_LENGTH) { if(backpos >= pos) { /*continue as if we work on the decoded bytes after pos by jumping back before pos*/ backpos -= current_offset; } current_length++; backtest++; foretest++; } if(current_length > length) { length = current_length; /*the longest length*/ offset = current_offset; /*the offset that is related to this longest length*/ /*you can jump out of this for loop once a length of max length is found (gives significant speed gain)*/ if(current_length == MAX_SUPPORTED_DEFLATE_LENGTH) break; } } } /**encode it as length/distance pair or literal value**/ if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ { uivector_push_back(out, in[pos]); } else { addLengthDistance(out, length, offset); pos += (length - 1); } } /*end of the loop through each character of input*/ return 0; } #endif static const unsigned HASH_NUM_VALUES = 2048; static const unsigned HASH_NUM_CHARACTERS = 3; static const unsigned HASH_SHIFT = 2; /* The HASH_NUM_CHARACTERS value is used to make encoding faster by using longer sequences to generate a hash value from the stream bytes. Setting it to 3 gives exactly the same compression as the brute force method, since deflate's run length encoding starts with lengths of 3. Setting it to higher values, like 6, can make the encoding faster (not always though!), but will cause the encoding to miss any length between 3 and this value, so that the compression may be worse (but this can vary too depending on the image, sometimes it is even a bit better instead). The HASH_NUM_VALUES is the amount of unique possible hash values that combinations of bytes can give, the higher it is the more memory is needed, but if it's too low the advantage of hashing is gone. */ static unsigned getHash(const unsigned char* data, size_t size, size_t pos, size_t num) { unsigned result = 0; size_t amount, i; if(pos >= size) return 0; amount = num; if(pos + amount >= size) amount = size - pos; for(i = 0; i < amount; i++) result ^= (data[pos + i] << (i * HASH_SHIFT)); return result % HASH_NUM_VALUES; } static unsigned countInitialZeros(const unsigned char* data, size_t size, size_t pos) { size_t max_count = MAX_SUPPORTED_DEFLATE_LENGTH; size_t i; if(max_count > size - pos) max_count = size - pos; for(i = 0; i < max_count; i++) { if(data[pos + i] != 0) return i; } return max_count; } /*push a value to the vector in a circular way. This is to do as if we're extending the vector's size forever, but instead the size is limited to maxsize and it wraps around, to avoid too large memory size. The pos pointer gets updated to the current end (unless updatepos is false, in that case pos is only used to know the current value). returns 1 on success, 0 if fail*/ static unsigned push_circular(uivector* v, unsigned* pos, unsigned value, size_t maxsize, unsigned updatepos) { if(v->size < maxsize) { if(!uivector_push_back(v, value)) return 0; if(updatepos) (*pos)++; } else { if(updatepos) { (*pos)++; if((*pos) > maxsize) (*pos) = 1; } v->data[(*pos) - 1] = value; } return 1; } /*Enable to use lazy instead of greedy matghing. It looks one byte further to see if that one gives a longer distance. This gives slightly better compression, at the cost of a speed loss.*/ #define LAZY_MATCHING /* LZ77-encode the data. Return value is error code. The input are raw bytes, the output is in the form of unsigned integers with codes representing for example literal bytes, or length/distance pairs. It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a sliding window (of windowSize) is used, and all past bytes in that window can be used as the "dictionary". A brute force search through all possible distances would be slow, and this hash technique is one out of several ways to speed this up. */ static unsigned encodeLZ77(uivector* out, const unsigned char* in, size_t insize, unsigned windowSize) { /**generate hash table**/ /* The hash table is 2-dimensional. For every possible hash value, it contains a list of positions in the data where this hash occured. tablepos1 and tablepos2 remember the last used start and end index in the hash table for each hash value. */ vector table; /*HASH_NUM_VALUES uivectors; this is what would be an std::vector > in C++*/ uivector tablepos1, tablepos2; /*hash 0 indicates a possible common case of a long sequence of zeros, store and use the amount here for a speedup*/ uivector initialZerosTable; unsigned pos, i, error = 0; unsigned hash_num_characters = HASH_NUM_CHARACTERS; vector_init(&table, sizeof(uivector)); if(!vector_resize(&table, HASH_NUM_VALUES)) return 9917; /*alloc fail*/ for(i = 0; i < HASH_NUM_VALUES; i++) { uivector* v = (uivector*)vector_get(&table, i); uivector_init(v); } /*remember start and end positions in the tables to search in*/ uivector_init(&tablepos1); uivector_init(&tablepos2); uivector_init(&initialZerosTable); if(!uivector_resizev(&tablepos1, HASH_NUM_VALUES, 0)) error = 9918; /*alloc fail*/ if(!uivector_resizev(&tablepos2, HASH_NUM_VALUES, 0)) error = 9919; /*alloc fail*/ if(!error) { unsigned offset, max_offset; /*the offset represents the distance in LZ77 terminology*/ unsigned length, tablepos; #ifdef LAZY_MATCHING unsigned lazy = 0; unsigned lazylength, lazyoffset; #endif /*LAZY_MATCHING*/ unsigned hash, initialZeros = 0; unsigned backpos, current_offset, t1, t2, t11, current_length; const unsigned char *lastptr, *foreptr, *backptr; uivector* v; /*vector from the hash table we're currently working on*/ unsigned hashWindow = windowSize; unsigned numones = 0; for(pos = 0; pos < insize; pos++) { length = 0, offset = 0; /*the length and offset found for the current position*/ max_offset = pos < windowSize ? pos : windowSize; /*how far back to test*/ /*search for the longest string. First find out where in the table to start (the first value that is in the range from "pos - max_offset" to "pos")*/ hash = getHash(in, insize, pos, hash_num_characters); v = (uivector*)vector_get(&table, hash); if(!push_circular(v, &tablepos2.data[hash], pos, hashWindow, 1)) ERROR_BREAK(9920 /*alloc fail*/); if(hash == 0) { initialZeros = countInitialZeros(in, insize, pos); if(!push_circular(&initialZerosTable, &tablepos2.data[hash], initialZeros, hashWindow, 0)) ERROR_BREAK(9920 /*alloc fail*/); } while(v->data[tablepos1.data[hash]] < pos - max_offset) { /*it now points to the first value in the table for which the index is larger than or equal to pos - max_offset*/ tablepos1.data[hash]++; if(tablepos1.data[hash] >= hashWindow) tablepos1.data[hash] = 0; } t1 = tablepos1.data[hash]; t2 = tablepos2.data[hash] - 1; if(tablepos2.data[hash] == 0) t2 = hashWindow - 1; lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; t11 = t1 == 0 ? hashWindow - 1 : t1 - 1; for(tablepos = t2 == 0 ? hashWindow - 1 : t2 - 1; tablepos != t2 && tablepos != t11 && tablepos < v->size; tablepos = tablepos == 0 ? hashWindow - 1 : tablepos - 1) { backpos = v->data[tablepos]; current_offset = pos - backpos; /*test the next characters*/ foreptr = &in[pos]; backptr = &in[backpos]; if(hash == 0) { unsigned skip = initialZerosTable.data[tablepos]; if(skip > initialZeros) skip = initialZeros; if(skip > insize - pos) skip = insize - pos; backptr += skip; foreptr += skip; } while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ { ++backptr; ++foreptr; } current_length = (unsigned)(foreptr - &in[pos]); if(current_length > length) { length = current_length; /*the longest length*/ offset = current_offset; /*the offset that is related to this longest length*/ /*you can jump out of this for loop once a length of max length is found (gives significant speed gain)*/ if(current_length == MAX_SUPPORTED_DEFLATE_LENGTH) break; } } #ifdef LAZY_MATCHING if(!lazy && length >= 3 && length < MAX_SUPPORTED_DEFLATE_LENGTH) { lazylength = length; lazyoffset = offset; lazy = 1; continue; } if(lazy) { if(pos == 0) ERROR_BREAK(81); lazy = 0; if(length > lazylength + 1) { /*push the previous character as literal*/ if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(9921 /*alloc fail*/); } else { length = lazylength; offset = lazyoffset; pos--; } } #endif /*LAZY_MATCHING*/ /**encode it as length/distance pair or literal value**/ if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ { if(!uivector_push_back(out, in[pos])) ERROR_BREAK(9921 /*alloc fail*/); } else { unsigned j, local_hash; addLengthDistance(out, length, offset); for(j = 0; j < length - 1; j++) { unsigned* t2p; /*pointer to current tablepos2 element*/ pos++; local_hash = getHash(in, insize, pos, hash_num_characters); t2p = &tablepos2.data[local_hash]; v = (uivector*)vector_get(&table, local_hash); if(!push_circular(v, t2p, pos, hashWindow, 1)) ERROR_BREAK(9920 /*alloc fail*/); if(local_hash == 0) { initialZeros = countInitialZeros(in, insize, pos); if(!push_circular(&initialZerosTable, t2p, initialZeros, hashWindow, 0)) ERROR_BREAK(9922 /*alloc fail*/); } if(local_hash == 1 && hash_num_characters == 3) { /* If many hash values are getting grouped together in hash value 1, 4, 16, 20, ..., it indicates there are many near-zero values. This is not zero enough to benefit from a speed increase from the initialZerosTable, and makes it very slow. For that case only, switch to hash_num_characters = 6. Value 6 is experimentally found to be fastest. For this particular type of file, the compression isn't even worse, despite the fact that lengths < 6 are now no longer found, and that by changing hash_num_characters not all previously found hash values are still valid. Almost all images compress fast enough and smaller with hash_num_characters = 3, except sine plasma images. Those benefit a lot from this heuristic. */ if(numones > 8192 && numones > pos / 16) hash_num_characters = 6; else numones++; } } } } /*end of the loop through each character of input*/ } /*end of "if(!error)"*/ /*cleanup*/ for(i = 0; i < table.size; i++) { uivector* v = (uivector*)vector_get(&table, i); uivector_cleanup(v); } vector_cleanup(&table); uivector_cleanup(&tablepos1); uivector_cleanup(&tablepos2); uivector_cleanup(&initialZerosTable); return error; } /* /////////////////////////////////////////////////////////////////////////// */ static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) { /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ size_t i, j, numdeflateblocks = datasize / 65536 + 1; unsigned datapos = 0; for(i = 0; i < numdeflateblocks; i++) { unsigned BFINAL, BTYPE, LEN, NLEN; unsigned char firstbyte; BFINAL = (i == numdeflateblocks - 1); BTYPE = 0; firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); ucvector_push_back(out, firstbyte); LEN = 65535; if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; NLEN = 65535 - LEN; ucvector_push_back(out, (unsigned char)(LEN % 256)); ucvector_push_back(out, (unsigned char)(LEN / 256)); ucvector_push_back(out, (unsigned char)(NLEN % 256)); ucvector_push_back(out, (unsigned char)(NLEN / 256)); /*Decompressed data*/ for(j = 0; j < 65535 && datapos < datasize; j++) { ucvector_push_back(out, data[datapos++]); } } return 0; } /* write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. tree_ll: the tree for lit and len codes. tree_d: the tree for distance codes. */ static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, const HuffmanTree* tree_ll, const HuffmanTree* tree_d) { size_t i = 0; for(i = 0; i < lz77_encoded->size; i++) { unsigned val = lz77_encoded->data[i]; addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); if(val > 256) /*for a length code, 3 more things have to be added*/ { unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; unsigned length_extra_bits = lz77_encoded->data[++i]; unsigned distance_code = lz77_encoded->data[++i]; unsigned distance_index = distance_code; unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; unsigned distance_extra_bits = lz77_encoded->data[++i]; addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), HuffmanTree_getLength(tree_d, distance_code)); addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); } } } /*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ static unsigned deflateDynamic(ucvector* out, const unsigned char* data, size_t datasize, const LodePNG_CompressSettings* settings) { unsigned error = 0; /* A block is compressed as follows: The PNG data is lz77 encoded, resulting in literal bytes and length/distance pairs. This is then huffman compressed with two huffman trees. One huffman tree is used for the lit and len values ("ll"), another huffman tree is used for the dist values ("d"). These two trees are stored using their code lengths, and to compress even more these code lengths are also run-length encoded and huffman compressed. This gives a huffman tree of code lengths "cl". The code lenghts used to describe this third tree are the code length code lengths ("clcl"). */ /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ uivector lz77_encoded; HuffmanTree tree_ll; /*tree for lit,len values*/ HuffmanTree tree_d; /*tree for distance codes*/ HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ uivector frequencies_ll; /*frequency of lit,len codes*/ uivector frequencies_d; /*frequency of dist codes*/ uivector frequencies_cl; /*frequency of code length codes*/ uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl (these are written as is in the file, it would be crazy to compress these using yet another huffman tree that needs to be represented by yet another set of code lengths)*/ uivector bitlen_cl; /* Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: bitlen_lld is to tree_cl what data is to tree_ll and tree_d. bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. */ unsigned BFINAL = 1; /*make only one block... the first and final one*/ size_t numcodes_ll, numcodes_d, i; size_t bp = 0; /*the bit pointer*/ unsigned HLIT, HDIST, HCLEN; uivector_init(&lz77_encoded); HuffmanTree_init(&tree_ll); HuffmanTree_init(&tree_d); HuffmanTree_init(&tree_cl); uivector_init(&frequencies_ll); uivector_init(&frequencies_d); uivector_init(&frequencies_cl); uivector_init(&bitlen_lld); uivector_init(&bitlen_lld_e); uivector_init(&bitlen_cl); /*This while loop is never loops due to a break at the end, it is here to allow breaking out of it to the cleanup phase on error conditions.*/ while(!error) { if(settings->useLZ77) { error = encodeLZ77(&lz77_encoded, data, datasize, settings->windowSize); /*LZ77 encoded*/ if(error) break; } else { if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(9923 /*alloc fail*/); for(i = 0; i < datasize; i++) lz77_encoded.data[i] = data[i]; /*no LZ77, but still will be Huffman compressed*/ } if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(9924 /*alloc fail*/); if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(9925 /*alloc fail*/); /*Count the frequencies of lit, len and dist codes*/ for(i = 0; i < lz77_encoded.size; i++) { unsigned symbol = lz77_encoded.data[i]; frequencies_ll.data[symbol]++; if(symbol > 256) { unsigned dist = lz77_encoded.data[i + 2]; frequencies_d.data[dist]++; i += 3; } } frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, frequencies_ll.size, 15); if(error) break; error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, frequencies_d.size, 15); if(error) break; numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286; numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30; /*store the code lengths of both generated trees in bitlen_lld*/ for(i = 0; i < numcodes_ll; i++) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); for(i = 0; i < numcodes_d; i++) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), 17 (3-10 zeroes), 18 (11-138 zeroes)*/ for(i = 0; i < (unsigned)bitlen_lld.size; i++) { unsigned j = 0; /*amount of repititions*/ while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) j++; if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ { j++; /*include the first zero*/ if(j <= 10) /*repeat code 17 supports max 10 zeroes*/ { uivector_push_back(&bitlen_lld_e, 17); uivector_push_back(&bitlen_lld_e, j - 3); } else /*repeat code 18 supports max 138 zeroes*/ { if(j > 138) j = 138; uivector_push_back(&bitlen_lld_e, 18); uivector_push_back(&bitlen_lld_e, j - 11); } i += (j - 1); } else if(j >= 3) /*repeat code for value other than zero*/ { size_t k; unsigned num = j / 6, rest = j % 6; uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); for(k = 0; k < num; k++) { uivector_push_back(&bitlen_lld_e, 16); uivector_push_back(&bitlen_lld_e, 6 - 3); } if(rest >= 3) { uivector_push_back(&bitlen_lld_e, 16); uivector_push_back(&bitlen_lld_e, rest - 3); } else j -= rest; i += j; } else /*too short to benefit from repeat code*/ { uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); } } /*generate tree_cl, the huffmantree of huffmantrees*/ if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(9926 /*alloc fail*/); for(i = 0; i < bitlen_lld_e.size; i++) { frequencies_cl.data[bitlen_lld_e.data[i]]++; /*after a repeat code come the bits that specify the number of repetitions, those don't need to be in the frequencies_cl calculation*/ if(bitlen_lld_e.data[i] >= 16) i++; } error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, frequencies_cl.size, 7); if(error) break; if(!uivector_resize(&bitlen_cl, NUM_CODE_LENGTH_CODES)) ERROR_BREAK(9927 /*alloc fail*/); for(i = 0; i < NUM_CODE_LENGTH_CODES; i++) { /*lenghts of code length tree is in the order as specified by deflate*/ bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); } while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) { /*remove zeros at the end, but minimum size must be 4*/ if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(9928 /*alloc fail*/); } if(error) break; /* Write everything into the output After the BFINAL and BTYPE, the dynamic block consists out of the following: - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN - (HCLEN+4)*3 bits code lengths of code length alphabet - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) - HDIST + 1 code lengths of distance alphabet (encoded using the code length alphabet, + possible repetition codes 16, 17, 18) - compressed data - 256 (end code) */ /*Write block type*/ addBitToStream(&bp, out, BFINAL); addBitToStream(&bp, out, 0); /*first bit of BTYPE "dynamic"*/ addBitToStream(&bp, out, 1); /*second bit of BTYPE "dynamic"*/ /*write the HLIT, HDIST and HCLEN values*/ HLIT = (unsigned)(numcodes_ll - 257); HDIST = (unsigned)(numcodes_d - 1); HCLEN = (unsigned)bitlen_cl.size - 4; addBitsToStream(&bp, out, HLIT, 5); addBitsToStream(&bp, out, HDIST, 5); addBitsToStream(&bp, out, HCLEN, 4); /*write the code lenghts of the code length alphabet*/ for(i = 0; i < HCLEN + 4; i++) addBitsToStream(&bp, out, bitlen_cl.data[i], 3); /*write the lenghts of the lit/len AND the dist alphabet*/ for(i = 0; i < bitlen_lld_e.size; i++) { addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); /*extra bits of repeat codes*/ if(bitlen_lld_e.data[i] == 16) addBitsToStream(&bp, out, bitlen_lld_e.data[++i], 2); else if(bitlen_lld_e.data[i] == 17) addBitsToStream(&bp, out, bitlen_lld_e.data[++i], 3); else if(bitlen_lld_e.data[i] == 18) addBitsToStream(&bp, out, bitlen_lld_e.data[++i], 7); } /*write the compressed data symbols*/ writeLZ77data(&bp, out, &lz77_encoded, &tree_ll, &tree_d); /*error: the length of the end code 256 must be larger than 0*/ if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); /*write the end code*/ addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); break; /*end of error-while*/ } /*cleanup*/ uivector_cleanup(&lz77_encoded); HuffmanTree_cleanup(&tree_ll); HuffmanTree_cleanup(&tree_d); HuffmanTree_cleanup(&tree_cl); uivector_cleanup(&frequencies_ll); uivector_cleanup(&frequencies_d); uivector_cleanup(&frequencies_cl); uivector_cleanup(&bitlen_lld_e); uivector_cleanup(&bitlen_lld); uivector_cleanup(&bitlen_cl); return error; } static unsigned deflateFixed(ucvector* out, const unsigned char* data, size_t datasize, const LodePNG_CompressSettings* settings) { HuffmanTree tree_ll; /*tree for literal values and length codes*/ HuffmanTree tree_d; /*tree for distance codes*/ unsigned BFINAL = 1; /*make only one block... the first and final one*/ unsigned error = 0; size_t i, bp = 0; /*the bit pointer*/ HuffmanTree_init(&tree_ll); HuffmanTree_init(&tree_d); generateFixedLitLenTree(&tree_ll); generateFixedDistanceTree(&tree_d); addBitToStream(&bp, out, BFINAL); addBitToStream(&bp, out, 1); /*first bit of BTYPE*/ addBitToStream(&bp, out, 0); /*second bit of BTYPE*/ if(settings->useLZ77) /*LZ77 encoded*/ { uivector lz77_encoded; uivector_init(&lz77_encoded); error = encodeLZ77(&lz77_encoded, data, datasize, settings->windowSize); if(!error) writeLZ77data(&bp, out, &lz77_encoded, &tree_ll, &tree_d); uivector_cleanup(&lz77_encoded); } else /*no LZ77, but still will be Huffman compressed*/ { for(i = 0; i < datasize; i++) { addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); } } /*add END code*/ if(!error) addHuffmanSymbol(&bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); /*cleanup*/ HuffmanTree_cleanup(&tree_ll); HuffmanTree_cleanup(&tree_d); return error; } static unsigned LodePNG_deflate(ucvector* out, const unsigned char* data, size_t datasize, const LodePNG_CompressSettings* settings) { unsigned error = 0; if(settings->btype == 0) error = deflateNoCompression(out, data, datasize); else if(settings->btype == 1) error = deflateFixed(out, data, datasize, settings); else if(settings->btype == 2) error = deflateDynamic(out, data, datasize, settings); else error = 61; return error; } #endif /*LODEPNG_COMPILE_DECODER*/ /* ////////////////////////////////////////////////////////////////////////// */ /* / Adler32 */ /* ////////////////////////////////////////////////////////////////////////// */ static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) { unsigned s1 = adler & 0xffff; unsigned s2 = (adler >> 16) & 0xffff; while(len > 0) { /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ unsigned amount = len > 5550 ? 5550 : len; len -= amount; while(amount > 0) { s1 = (s1 + *data++); s2 = (s2 + s1); amount--; } s1 %= 65521; s2 %= 65521; } return (s2 << 16) | s1; } /*Return the adler32 of the bytes data[0..len-1]*/ static unsigned adler32(const unsigned char* data, unsigned len) { return update_adler32(1L, data, len); } /* ////////////////////////////////////////////////////////////////////////// */ /* / Zlib / */ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_DECODER unsigned LodePNG_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodePNG_DecompressSettings* settings) { unsigned error = 0; unsigned CM, CINFO, FDICT; ucvector outv; if(insize < 2) return 53; /*error, size of zlib data too small*/ /*read information from zlib header*/ if((in[0] * 256 + in[1]) % 31 != 0) { /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ return 24; } CM = in[0] & 15; CINFO = (in[0] >> 4) & 15; /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ FDICT = (in[1] >> 5) & 1; /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ if(CM != 8 || CINFO > 7) { /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ return 25; } if(FDICT != 0) { /*error: the specification of PNG says about the zlib stream: "The additional flags shall not specify a preset dictionary."*/ return 26; } /*ucvector-controlled version of the output buffer, for dynamic array*/ ucvector_init_buffer(&outv, *out, *outsize); error = LodePNG_inflate(&outv, in, insize, 2); *out = outv.data; *outsize = outv.size; if(error) return error; if(!settings->ignoreAdler32) { unsigned ADLER32 = LodePNG_read32bitInt(&in[insize - 4]); unsigned checksum = adler32(outv.data, (unsigned)outv.size); if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ } return 0; /*no error*/ } #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER unsigned LodePNG_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodePNG_CompressSettings* settings) { /*initially, *out must be NULL and outsize 0, if you just give some random *out that's pointing to a non allocated buffer, this'll crash*/ ucvector deflatedata, outv; size_t i; unsigned error; unsigned ADLER32; /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ unsigned FLEVEL = 0; unsigned FDICT = 0; unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; unsigned FCHECK = 31 - CMFFLG % 31; CMFFLG += FCHECK; /*ucvector-controlled version of the output buffer, for dynamic array*/ ucvector_init_buffer(&outv, *out, *outsize); ucvector_push_back(&outv, (unsigned char)(CMFFLG / 256)); ucvector_push_back(&outv, (unsigned char)(CMFFLG % 256)); ucvector_init(&deflatedata); error = LodePNG_deflate(&deflatedata, in, insize, settings); if(!error) { ADLER32 = adler32(in, (unsigned)insize); for(i = 0; i < deflatedata.size; i++) ucvector_push_back(&outv, deflatedata.data[i]); ucvector_cleanup(&deflatedata); LodePNG_add32bitInt(&outv, ADLER32); } *out = outv.data; *outsize = outv.size; return error; } #endif /*LODEPNG_COMPILE_ENCODER*/ #else /*no LODEPNG_COMPILE_ZLIB*/ /* Dummy functions used if LODEPNG_COMPILE_ZLIB isn't defined. You need to implement these yourself when disabling the LodePNG Zlib part, e.g. by calling another library from here. *out must be NULL and *outsize must be 0 initially, and after the function is done, *out must point to the decompressed data, *outsize must be the size of it, and must be the size of the useful data in bytes, not the alloc size. */ #ifdef LODEPNG_COMPILE_DECODER static unsigned LodePNG_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodePNG_DecompressSettings* settings) { return 0; //Placeholder to be implemented if LODEPNG_COMPILE_ZLIB is disabled. } #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER static unsigned LodePNG_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodePNG_CompressSettings* settings) { return 0; //Placeholder to be implemented if LODEPNG_COMPILE_ZLIB is disabled. } #endif /*LODEPNG_COMPILE_ENCODER*/ #endif /*LODEPNG_COMPILE_ZLIB*/ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_ENCODER /*this is a good tradeoff between speed and compression ratio*/ #define DEFAULT_WINDOWSIZE 2048 void LodePNG_CompressSettings_init(LodePNG_CompressSettings* settings) { /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ settings->btype = 2; settings->useLZ77 = 1; settings->windowSize = DEFAULT_WINDOWSIZE; } const LodePNG_CompressSettings LodePNG_defaultCompressSettings = {2, 1, DEFAULT_WINDOWSIZE}; #endif /*LODEPNG_COMPILE_ENCODER*/ #ifdef LODEPNG_COMPILE_DECODER void LodePNG_DecompressSettings_init(LodePNG_DecompressSettings* settings) { settings->ignoreAdler32 = 0; } const LodePNG_DecompressSettings LodePNG_defaultDecompressSettings = {0}; #endif /*LODEPNG_COMPILE_DECODER*/ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ /* // End of Zlib related code. Begin of PNG related code. // */ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_PNG /* ////////////////////////////////////////////////////////////////////////// */ /* / CRC32 / */ /* ////////////////////////////////////////////////////////////////////////// */ static unsigned Crc32_crc_table_computed = 0; static unsigned Crc32_crc_table[256]; /*Make the table for a fast CRC.*/ static void Crc32_make_crc_table(void) { unsigned c, k, n; for(n = 0; n < 256; n++) { c = n; for(k = 0; k < 8; k++) { if(c & 1) c = 0xedb88320L ^ (c >> 1); else c = c >> 1; } Crc32_crc_table[n] = c; } Crc32_crc_table_computed = 1; } /*Update a running CRC with the bytes buf[0..len-1]--the CRC should be initialized to all 1's, and the transmitted value is the 1's complement of the final running CRC (see the crc() routine below).*/ static unsigned Crc32_update_crc(const unsigned char* buf, unsigned crc, size_t len) { unsigned c = crc; size_t n; if(!Crc32_crc_table_computed) Crc32_make_crc_table(); for(n = 0; n < len; n++) { c = Crc32_crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); } return c; } /*Return the CRC of the bytes buf[0..len-1].*/ static unsigned Crc32_crc(const unsigned char* buf, size_t len) { return Crc32_update_crc(buf, 0xffffffffL, len) ^ 0xffffffffL; } /* ////////////////////////////////////////////////////////////////////////// */ /* / Reading and writing single bits and bytes from/to stream for LodePNG / */ /* ////////////////////////////////////////////////////////////////////////// */ static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) { unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); (*bitpointer)++; return result; } static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) { unsigned result = 0; size_t i; for(i = nbits - 1; i < nbits; i--) { result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i; } return result; } #ifdef LODEPNG_COMPILE_DECODER static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) { /*the current bit in bitstream must be 0 for this to work*/ if(bit) { /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); } (*bitpointer)++; } #endif /*LODEPNG_COMPILE_DECODER*/ static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) { /*the current bit in bitstream may be 0 or 1 for this to work*/ if(bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); (*bitpointer)++; } /* ////////////////////////////////////////////////////////////////////////// */ /* / PNG chunks / */ /* ////////////////////////////////////////////////////////////////////////// */ unsigned LodePNG_chunk_length(const unsigned char* chunk) { return LodePNG_read32bitInt(&chunk[0]); } void LodePNG_chunk_type(char type[5], const unsigned char* chunk) { unsigned i; for(i = 0; i < 4; i++) type[i] = chunk[4 + i]; type[4] = 0; /*null termination char*/ } unsigned char LodePNG_chunk_type_equals(const unsigned char* chunk, const char* type) { if(strlen(type) != 4) return 0; return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); } unsigned char LodePNG_chunk_critical(const unsigned char* chunk) { return((chunk[4] & 32) == 0); } unsigned char LodePNG_chunk_private(const unsigned char* chunk) { return((chunk[6] & 32) != 0); } unsigned char LodePNG_chunk_safetocopy(const unsigned char* chunk) { return((chunk[7] & 32) != 0); } unsigned char* LodePNG_chunk_data(unsigned char* chunk) { return &chunk[8]; } const unsigned char* LodePNG_chunk_data_const(const unsigned char* chunk) { return &chunk[8]; } unsigned LodePNG_chunk_check_crc(const unsigned char* chunk) { unsigned length = LodePNG_chunk_length(chunk); unsigned CRC = LodePNG_read32bitInt(&chunk[length + 8]); /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ unsigned checksum = Crc32_crc(&chunk[4], length + 4); if(CRC != checksum) return 1; else return 0; } void LodePNG_chunk_generate_crc(unsigned char* chunk) { unsigned length = LodePNG_chunk_length(chunk); unsigned CRC = Crc32_crc(&chunk[4], length + 4); LodePNG_set32bitInt(chunk + 8 + length, CRC); } unsigned char* LodePNG_chunk_next(unsigned char* chunk) { unsigned total_chunk_length = LodePNG_chunk_length(chunk) + 12; return &chunk[total_chunk_length]; } const unsigned char* LodePNG_chunk_next_const(const unsigned char* chunk) { unsigned total_chunk_length = LodePNG_chunk_length(chunk) + 12; return &chunk[total_chunk_length]; } unsigned LodePNG_append_chunk(unsigned char** out, size_t* outlength, const unsigned char* chunk) { unsigned i; unsigned total_chunk_length = LodePNG_chunk_length(chunk) + 12; unsigned char *chunk_start, *new_buffer; size_t new_length = (*outlength) + total_chunk_length; if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ new_buffer = (unsigned char*)realloc(*out, new_length); if(!new_buffer) return 9929; /*alloc fail*/ (*out) = new_buffer; (*outlength) = new_length; chunk_start = &(*out)[new_length - total_chunk_length]; for(i = 0; i < total_chunk_length; i++) chunk_start[i] = chunk[i]; return 0; } unsigned LodePNG_create_chunk(unsigned char** out, size_t* outlength, unsigned length, const char* type, const unsigned char* data) { unsigned i; unsigned char *chunk, *new_buffer; size_t new_length = (*outlength) + length + 12; if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ new_buffer = (unsigned char*)realloc(*out, new_length); if(!new_buffer) return 9930; /*alloc fail*/ (*out) = new_buffer; (*outlength) = new_length; chunk = &(*out)[(*outlength) - length - 12]; /*1: length*/ LodePNG_set32bitInt(chunk, (unsigned)length); /*2: chunk name (4 letters)*/ chunk[4] = type[0]; chunk[5] = type[1]; chunk[6] = type[2]; chunk[7] = type[3]; /*3: the data*/ for(i = 0; i < length; i++) chunk[8 + i] = data[i]; /*4: CRC (of the chunkname characters and the data)*/ LodePNG_chunk_generate_crc(chunk); return 0; } /* ////////////////////////////////////////////////////////////////////////// */ /* / Color types and such / */ /* ////////////////////////////////////////////////////////////////////////// */ /*return type is a LodePNG error code*/ static unsigned checkColorValidity(unsigned colorType, unsigned bd) /*bd = bitDepth*/ { switch(colorType) { case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ case 2: if(!( bd == 8 || bd == 16)) return 37; break; /*RGB*/ case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 )) return 37; break; /*palette*/ case 4: if(!( bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ case 6: if(!( bd == 8 || bd == 16)) return 37; break; /*RGBA*/ default: return 31; } return 0; /*allowed color type / bits combination*/ } static unsigned getNumColorChannels(unsigned colorType) { switch(colorType) { case 0: return 1; /*grey*/ case 2: return 3; /*RGB*/ case 3: return 1; /*palette*/ case 4: return 2; /*grey + alpha*/ case 6: return 4; /*RGBA*/ } return 0; /*unexisting color type*/ } static unsigned getBpp(unsigned colorType, unsigned bitDepth) { /*bits per pixel is amount of channels * bits per channel*/ return getNumColorChannels(colorType) * bitDepth; } /* ////////////////////////////////////////////////////////////////////////// */ void LodePNG_InfoColor_init(LodePNG_InfoColor* info) { info->key_defined = 0; info->key_r = info->key_g = info->key_b = 0; info->colorType = 6; info->bitDepth = 8; info->palette = 0; info->palettesize = 0; } void LodePNG_InfoColor_cleanup(LodePNG_InfoColor* info) { LodePNG_InfoColor_clearPalette(info); } void LodePNG_InfoColor_clearPalette(LodePNG_InfoColor* info) { if(info->palette) free(info->palette); info->palettesize = 0; } unsigned LodePNG_InfoColor_addPalette(LodePNG_InfoColor* info, unsigned char r, unsigned char g, unsigned char b, unsigned char a) { unsigned char* data; /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with the max of 256 colors, it'll have the exact alloc size*/ if(!(info->palettesize & (info->palettesize - 1))) /*if palettesize is 0 or a power of two*/ { /*allocated data must be at least 4* palettesize (for 4 color bytes)*/ size_t alloc_size = info->palettesize == 0 ? 4 : info->palettesize * 4 * 2; data = (unsigned char*)realloc(info->palette, alloc_size); if(!data) return 9931; /*alloc fail*/ else info->palette = data; } info->palette[4 * info->palettesize + 0] = r; info->palette[4 * info->palettesize + 1] = g; info->palette[4 * info->palettesize + 2] = b; info->palette[4 * info->palettesize + 3] = a; info->palettesize++; return 0; } unsigned LodePNG_InfoColor_getBpp(const LodePNG_InfoColor* info) { /*calculate bits per pixel out of colorType and bitDepth*/ return getBpp(info->colorType, info->bitDepth); } unsigned LodePNG_InfoColor_getChannels(const LodePNG_InfoColor* info) { return getNumColorChannels(info->colorType); } unsigned LodePNG_InfoColor_isGreyscaleType(const LodePNG_InfoColor* info) { return info->colorType == 0 || info->colorType == 4; } unsigned LodePNG_InfoColor_isAlphaType(const LodePNG_InfoColor* info) { return (info->colorType & 4) != 0; } unsigned LodePNG_InfoColor_isPaletteType(const LodePNG_InfoColor* info) { return info->colorType == 3; } unsigned LodePNG_InfoColor_hasPaletteAlpha(const LodePNG_InfoColor* info) { size_t i; for(i = 0; i < info->palettesize; i++) { if(info->palette[i * 4 + 3] < 255) return 1; } return 0; } unsigned LodePNG_InfoColor_canHaveAlpha(const LodePNG_InfoColor* info) { return info->key_defined || LodePNG_InfoColor_isAlphaType(info) || LodePNG_InfoColor_hasPaletteAlpha(info); } unsigned LodePNG_InfoColor_equal(const LodePNG_InfoColor* info1, const LodePNG_InfoColor* info2) { return info1->colorType == info2->colorType && info1->bitDepth == info2->bitDepth; /*palette and color key not compared*/ } #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS void LodePNG_UnknownChunks_init(LodePNG_UnknownChunks* chunks) { unsigned i; for(i = 0; i < 3; i++) chunks->data[i] = 0; for(i = 0; i < 3; i++) chunks->datasize[i] = 0; } void LodePNG_UnknownChunks_cleanup(LodePNG_UnknownChunks* chunks) { unsigned i; for(i = 0; i < 3; i++) free(chunks->data[i]); } unsigned LodePNG_UnknownChunks_copy(LodePNG_UnknownChunks* dest, const LodePNG_UnknownChunks* src) { unsigned i; LodePNG_UnknownChunks_cleanup(dest); for(i = 0; i < 3; i++) { size_t j; dest->datasize[i] = src->datasize[i]; dest->data[i] = (unsigned char*)malloc(src->datasize[i]); if(!dest->data[i] && dest->datasize[i]) return 9932; /*alloc fail*/ for(j = 0; j < src->datasize[i]; j++) dest->data[i][j] = src->data[i][j]; } return 0; } #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS void LodePNG_Text_init(LodePNG_Text* text) { text->num = 0; text->keys = NULL; text->strings = NULL; } void LodePNG_Text_cleanup(LodePNG_Text* text) { LodePNG_Text_clear(text); } unsigned LodePNG_Text_copy(LodePNG_Text* dest, const LodePNG_Text* source) { size_t i = 0; dest->keys = 0; dest->strings = 0; dest->num = 0; for(i = 0; i < source->num; i++) { unsigned error = LodePNG_Text_add(dest, source->keys[i], source->strings[i]); if(error) return error; } return 0; } void LodePNG_Text_clear(LodePNG_Text* text) { size_t i; for(i = 0; i < text->num; i++) { string_cleanup(&text->keys[i]); string_cleanup(&text->strings[i]); } free(text->keys); free(text->strings); } unsigned LodePNG_Text_add(LodePNG_Text* text, const char* key, const char* str) { char** new_keys = (char**)(realloc(text->keys, sizeof(char*) * (text->num + 1))); char** new_strings = (char**)(realloc(text->strings, sizeof(char*) * (text->num + 1))); if(!new_keys || !new_strings) { free(new_keys); free(new_strings); return 9933; /*alloc fail*/ } text->num++; text->keys = new_keys; text->strings = new_strings; string_init(&text->keys[text->num - 1]); string_set(&text->keys[text->num - 1], key); string_init(&text->strings[text->num - 1]); string_set(&text->strings[text->num - 1], str); return 0; } /******************************************************************************/ void LodePNG_IText_init(LodePNG_IText* text) { text->num = 0; text->keys = NULL; text->langtags = NULL; text->transkeys = NULL; text->strings = NULL; } void LodePNG_IText_cleanup(LodePNG_IText* text) { LodePNG_IText_clear(text); } unsigned LodePNG_IText_copy(LodePNG_IText* dest, const LodePNG_IText* source) { size_t i = 0; dest->keys = 0; dest->langtags = 0; dest->transkeys = 0; dest->strings = 0; dest->num = 0; for(i = 0; i < source->num; i++) { unsigned error = LodePNG_IText_add(dest, source->keys[i], source->langtags[i], source->transkeys[i], source->strings[i]); if(error) return error; } return 0; } void LodePNG_IText_clear(LodePNG_IText* text) { size_t i; for(i = 0; i < text->num; i++) { string_cleanup(&text->keys[i]); string_cleanup(&text->langtags[i]); string_cleanup(&text->transkeys[i]); string_cleanup(&text->strings[i]); } free(text->keys); free(text->langtags); free(text->transkeys); free(text->strings); } unsigned LodePNG_IText_add(LodePNG_IText* text, const char* key, const char* langtag, const char* transkey, const char* str) { char** new_keys = (char**)(realloc(text->keys, sizeof(char*) * (text->num + 1))); char** new_langtags = (char**)(realloc(text->langtags, sizeof(char*) * (text->num + 1))); char** new_transkeys = (char**)(realloc(text->transkeys, sizeof(char*) * (text->num + 1))); char** new_strings = (char**)(realloc(text->strings, sizeof(char*) * (text->num + 1))); if(!new_keys || !new_langtags || !new_transkeys || !new_strings) { free(new_keys); free(new_langtags); free(new_transkeys); free(new_strings); return 9934; /*alloc fail*/ } text->num++; text->keys = new_keys; text->langtags = new_langtags; text->transkeys = new_transkeys; text->strings = new_strings; string_init(&text->keys[text->num - 1]); string_set(&text->keys[text->num - 1], key); string_init(&text->langtags[text->num - 1]); string_set(&text->langtags[text->num - 1], langtag); string_init(&text->transkeys[text->num - 1]); string_set(&text->transkeys[text->num - 1], transkey); string_init(&text->strings[text->num - 1]); string_set(&text->strings[text->num - 1], str); return 0; } #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ void LodePNG_InfoPng_init(LodePNG_InfoPng* info) { info->width = info->height = 0; LodePNG_InfoColor_init(&info->color); info->interlaceMethod = 0; info->compressionMethod = 0; info->filterMethod = 0; #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS info->background_defined = 0; info->background_r = info->background_g = info->background_b = 0; LodePNG_Text_init(&info->text); LodePNG_IText_init(&info->itext); info->time_defined = 0; info->phys_defined = 0; #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS LodePNG_UnknownChunks_init(&info->unknown_chunks); #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } void LodePNG_InfoPng_cleanup(LodePNG_InfoPng* info) { LodePNG_InfoColor_cleanup(&info->color); #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS LodePNG_Text_cleanup(&info->text); LodePNG_IText_cleanup(&info->itext); #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS LodePNG_UnknownChunks_cleanup(&info->unknown_chunks); #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } unsigned LodePNG_InfoPng_copy(LodePNG_InfoPng* dest, const LodePNG_InfoPng* source) { unsigned error = 0; LodePNG_InfoPng_cleanup(dest); *dest = *source; LodePNG_InfoColor_init(&dest->color); error = LodePNG_InfoColor_copy(&dest->color, &source->color); if(error) return error; #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS error = LodePNG_Text_copy(&dest->text, &source->text); if(error) return error; error = LodePNG_IText_copy(&dest->itext, &source->itext); if(error) return error; #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS LodePNG_UnknownChunks_init(&dest->unknown_chunks); error = LodePNG_UnknownChunks_copy(&dest->unknown_chunks, &source->unknown_chunks); if(error) return error; #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ return error; } void LodePNG_InfoPng_swap(LodePNG_InfoPng* a, LodePNG_InfoPng* b) { LodePNG_InfoPng temp = *a; *a = *b; *b = temp; } unsigned LodePNG_InfoColor_copy(LodePNG_InfoColor* dest, const LodePNG_InfoColor* source) { size_t i; LodePNG_InfoColor_cleanup(dest); *dest = *source; dest->palette = (unsigned char*)malloc(source->palettesize * 4); if(!dest->palette && source->palettesize) return 9935; /*alloc fail*/ for(i = 0; i < source->palettesize * 4; i++) dest->palette[i] = source->palette[i]; return 0; } void LodePNG_InfoRaw_init(LodePNG_InfoRaw* info) { LodePNG_InfoColor_init(&info->color); } void LodePNG_InfoRaw_cleanup(LodePNG_InfoRaw* info) { LodePNG_InfoColor_cleanup(&info->color); } unsigned LodePNG_InfoRaw_copy(LodePNG_InfoRaw* dest, const LodePNG_InfoRaw* source) { unsigned error = 0; LodePNG_InfoRaw_cleanup(dest); *dest = *source; LodePNG_InfoColor_init(&dest->color); error = LodePNG_InfoColor_copy(&dest->color, &source->color); return error; /*this variable could be removed, but it's more clear what is returned this way*/ } /* ////////////////////////////////////////////////////////////////////////// */ /*convert from any color type to RGB or RGBA with 8 bits per sample*/ static unsigned LodePNG_convert_rgb_a_8(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoIn, size_t numpixels, unsigned bytes, unsigned alpha) { size_t i, c, bp = 0; /*bp = bitpointer, used by less-than-8-bit color types*/ if(infoIn->bitDepth == 8) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 1] = out[bytes * i + 2] = in[i]; if(alpha) out[bytes * i + 3] = infoIn->key_defined && in[i] == infoIn->key_r ? 0 : 255; } break; case 2: /*RGB color*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < 3; c++) out[bytes * i + c] = in[3 * i + c]; if(alpha) { if(infoIn->key_defined == 1 && in[3 * i + 0] == infoIn->key_r && in[3 * i + 1] == infoIn->key_g && in[3 * i + 2] == infoIn->key_b) out[bytes * i + 3] = 0; else out[bytes * i + 3] = 255; } } break; case 3: /*indexed color (palette)*/ for(i = 0; i < numpixels; i++) { if(in[i] >= infoIn->palettesize) return 46; /*invalid palette index*/ for(c = 0; c < bytes; c++) out[bytes * i + c] = infoIn->palette[4 * in[i] + c]; } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 1] = out[bytes * i + 2] = in[2 * i + 0]; if(alpha) out[bytes * i + 3] = in[2 * i + 1]; } break; case 6: /*RGB with alpha*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < bytes; c++) out[bytes * i + c] = in[4 * i + c]; } break; default: break; } } else if(infoIn->bitDepth == 16) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 1] = out[bytes * i + 2] = in[2 * i]; if(alpha) out[bytes * i + 3] = infoIn->key_defined && 256U * in[i] + in[i + 1] == infoIn->key_r ? 0 : 255; } break; case 2: /*RGB color*/ for(i = 0; i < numpixels; i++) { if(alpha) out[bytes * i + 3] = 255; for(c = 0; c < 3; c++) out[bytes * i + c] = in[6 * i + 2 * c]; if(alpha) { if(infoIn->key_defined && 256U * in[6 * i + 0] + in[6 * i + 1] == infoIn->key_r && 256U * in[6 * i + 2] + in[6 * i + 3] == infoIn->key_g && 256U * in[6 * i + 4] + in[6 * i + 5] == infoIn->key_b) out[bytes * i + 3] = 0; else out[bytes * i + 3] = 255; } } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 1] = out[bytes * i + 2] = in[4 * i]; if(alpha) out[bytes * i + 3] = in[4 * i + 2]; } break; case 6: /*RGB with alpha*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < bytes; c++) out[bytes * i + c] = in[8 * i + 2 * c]; } break; default: break; } } else /*infoIn->bitDepth is less than 8 bit per channel*/ { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth); unsigned highest = ((1U << infoIn->bitDepth) - 1U); /*highest possible value for this bit depth*/ /*scale value from 0 to 255*/ out[bytes * i + 0] = out[bytes * i + 1] = out[bytes * i + 2] = (unsigned char)((value * 255) / highest); if(alpha) out[bytes * i + 3] = infoIn->key_defined && value == infoIn->key_r ? 0 : 255; } break; case 3: /*indexed color (palette)*/ for(i = 0; i < numpixels; i++) { unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth); if(value >= infoIn->palettesize) return 47; for(c = 0; c < bytes; c++) out[bytes * i + c] = infoIn->palette[4 * value + c]; } break; default: break; } } return 0; } /*convert from any greyscale color type to 8-bit greyscale with or without alpha channel*/ static unsigned LodePNG_convert_grey_8(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoIn, size_t numpixels, unsigned bytes, unsigned alpha) { size_t i, bp = 0; /*bp = bitpointer, used by less-than-8-bit color types*/ if(infoIn->bitDepth == 8) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i] = in[i]; if(alpha) out[bytes * i + 1] = infoIn->key_defined && in[i] == infoIn->key_r ? 0 : 255; } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = in[2 * i + 0]; if(alpha) out[bytes * i + 1] = in[2 * i + 1]; } break; default: return 31; } } else if(infoIn->bitDepth == 16) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { if(alpha) out[bytes * i + 1] = 255; out[bytes * i] = in[2 * i]; if(alpha && infoIn->key_defined && 256U * in[i] + in[i + 1] == infoIn->key_r) { out[bytes * i + 1] = 0; } } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i] = in[4 * i]; /*most significant byte*/ if(alpha) out[bytes * i + 1] = in[4 * i + 2]; /*most significant byte*/ } break; default: return 31; } } else /*infoIn->bitDepth is less than 8 bit per channel*/ { if(infoIn->colorType != 0) return 31; /*colorType 0 is the only greyscale type with < 8 bits per channel*/ for(i = 0; i < numpixels; i++) { unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth); unsigned highest = ((1U << infoIn->bitDepth) - 1U); /*highest possible value for this bit depth*/ out[bytes * i] = (unsigned char)((value * 255) / highest); /*scale value from 0 to 255*/ if(alpha) { if(infoIn->key_defined && value == infoIn->key_r) out[bytes * i + 1] = 0; else out[bytes * i + 1] = 255; } } } return 0; } /*convert from any color type to RGB or RGBA with 8 bits per sample*/ static unsigned LodePNG_convert_rgb_a_16(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoIn, size_t numpixels, unsigned bytes, unsigned alpha) { size_t i, c, bp = 0; /*bp = bitpointer, used by less-than-8-bit color types*/ if(infoIn->bitDepth == 8) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 2] = out[bytes * i + 4] = in[i]; out[bytes * i + 1] = out[bytes * i + 3] = out[bytes * i + 5] = in[i]; if(alpha) { if(alpha && infoIn->key_defined && in[i] == infoIn->key_r) out[bytes * i + 6] = out[bytes * i + 7] = 0; else out[bytes * i + 6] = out[bytes * i + 7] = 255; } } break; case 2: /*RGB color*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 1] = in[3 * i + 0]; out[bytes * i + 2] = out[bytes * i + 3] = in[3 * i + 1]; out[bytes * i + 4] = out[bytes * i + 5] = in[3 * i + 2]; if(alpha) { if(infoIn->key_defined == 1 && in[3 * i + 0] == infoIn->key_r && in[3 * i + 1] == infoIn->key_g && in[3 * i + 2] == infoIn->key_b) out[bytes * i + 6] = out[bytes * i + 7] = 0; else out[bytes * i + 6] = out[bytes * i + 7] = 255; } } break; case 3: /*indexed color (palette)*/ for(i = 0; i < numpixels; i++) { if(in[i] >= infoIn->palettesize) return 46; /*invalid palette index*/ for(c = 0; c < bytes; c++) { out[bytes * i + 2 * c] = out[bytes * i + 2 * c + 1] = infoIn->palette[4 * in[i] + c]; } } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 2] = out[bytes * i + 4] = in[i]; out[bytes * i + 1] = out[bytes * i + 3] = out[bytes * i + 5] = in[i]; if(alpha) { out[bytes * i + 6] = out[bytes * i + 7] = in[2 * i + 1]; } } break; case 6: /*RGB with alpha*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < 3; c++) { out[bytes * i + 2 * c] = out[bytes * i + 2 * c + 1] = in[4 * i + c]; } if(alpha) { out[bytes * i + 6] = out[bytes * i + 7] = in[4 * i + c]; } } break; default: break; } } else if(infoIn->bitDepth == 16) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 2] = out[bytes * i + 4] = in[2 * i]; out[bytes * i + 1] = out[bytes * i + 3] = out[bytes * i + 5] = in[2 * i + 1]; if(alpha) { if(infoIn->key_defined && 256U * in[i] + in[i + 1] == infoIn->key_r) out[bytes * i + 6] = out[bytes * i + 7] = 0; else out[bytes * i + 6] = out[bytes * i + 7] = 255; } } break; case 2: /*RGB color*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < 6; c++) out[bytes * i + c] = in[6 * i + c]; if(alpha) { if(infoIn->key_defined && 256U * in[6 * i + 0] + in[6 * i + 1] == infoIn->key_r && 256U * in[6 * i + 2] + in[6 * i + 3] == infoIn->key_g && 256U * in[6 * i + 4] + in[6 * i + 5] == infoIn->key_b) out[bytes * i + 6] = out[bytes * i + 7] = 0; else out[bytes * i + 6] = out[bytes * i + 7] = 255; } } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 2] = out[bytes * i + 4] = in[4 * i + 0]; out[bytes * i + 1] = out[bytes * i + 3] = out[bytes * i + 5] = in[4 * i + 1]; if(alpha) { out[bytes * i + 6] = in[4 * i + 2]; out[bytes * i + 7] = in[4 * i + 3]; } } break; case 6: /*RGB with alpha*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < bytes; c++) out[bytes * i + c] = in[8 * i + 2 * c]; } break; default: break; } } else /*infoIn->bitDepth is less than 8 bit per channel*/ { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth); unsigned highest = ((1U << infoIn->bitDepth) - 1U); /*highest possible value for this bit depth*/ /*scale value from 0 to 255*/ out[bytes * i + 0] = out[bytes * i + 2] = out[bytes * i + 4] = out[bytes * i + 1] = out[bytes * i + 3] = out[bytes * i + 5] = (unsigned char)((value * 255) / highest); if(alpha) { if(infoIn->key_defined && value == infoIn->key_r) out[bytes * i + 6] = out[bytes * i + 7] = 0; else out[bytes * i + 6] = out[bytes * i + 7] = 255; } } break; case 3: /*indexed color (palette)*/ for(i = 0; i < numpixels; i++) { unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth); if(value >= infoIn->palettesize) return 47; for(c = 0; c < bytes / 2; c++) { out[bytes * i + c * 2 + 0] = out[bytes * i + c * 2 + 1] = infoIn->palette[4 * value + c]; } } break; default: break; } } return 0; } /*convert from any greyscale color type to 16-bit greyscale with or without alpha channel*/ static unsigned LodePNG_convert_grey_16(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoIn, size_t numpixels, unsigned bytes, unsigned alpha) { size_t i, c, bp = 0; /*bp = bitpointer, used by less-than-8-bit color types*/ if(infoIn->bitDepth == 8) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i] = out[bytes * i + 1] = in[i]; if(alpha) { if(infoIn->key_defined && in[i] == infoIn->key_r) out[bytes * i + 2] = out[bytes * i + 3] = 0; else out[bytes * i + 2] = out[bytes * i + 3] = 255; } } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = out[bytes * i + 1] = in[2 * i + 0]; if(alpha) out[bytes * i + 2] = out[bytes * i + 3] = in[2 * i + 1]; } break; default: return 31; } } else if(infoIn->bitDepth == 16) { switch(infoIn->colorType) { case 0: /*greyscale color*/ for(i = 0; i < numpixels; i++) { out[bytes * i + 0] = in[2 * i + 0]; out[bytes * i + 1] = in[2 * i + 1]; if(alpha) { if(infoIn->key_defined && 256U * in[i] + in[i + 1] == infoIn->key_r) out[bytes * i + 2] = out[bytes * i + 3] = 0; else out[bytes * i + 2] = out[bytes * i + 3] = 255; } } break; case 4: /*greyscale with alpha*/ for(i = 0; i < numpixels; i++) { for(c = 0; c < bytes; c++) out[bytes * i + c] = in[4 * i + c]; } break; default: return 31; } } else /*infoIn->bitDepth is less than 8 bit per channel*/ { if(infoIn->colorType != 0) return 31; /*colorType 0 is the only greyscale type with < 8 bits per channel*/ for(i = 0; i < numpixels; i++) { unsigned value = readBitsFromReversedStream(&bp, in, infoIn->bitDepth); unsigned highest = ((1U << infoIn->bitDepth) - 1U); /*highest possible value for this bit depth*/ out[bytes * i] = out[bytes * i + 1] = (unsigned char)((value * 255) / highest); /*scale value from 0 to 255*/ if(alpha) { if(infoIn->key_defined && value == infoIn->key_r) out[bytes * i + 2] = out[bytes * i + 3] = 0; else out[bytes * i + 2] = out[bytes * i + 3] = 255; } } } return 0; } /* converts from any color type to 24-bit or 32-bit (later maybe more supported). return value = LodePNG error code the out buffer must have (w * h * bpp + 7) / 8 bytes, where bpp is the bits per pixel of the output color type (LodePNG_InfoColor_getBpp) for < 8 bpp images, there may _not_ be padding bits at the end of scanlines. */ unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoOut, LodePNG_InfoColor* infoIn, unsigned w, unsigned h) { size_t numpixels = w * h; /*amount of pixels*/ unsigned bytes = LodePNG_InfoColor_getBpp(infoOut) / 8; /*bytes per pixel in the output image*/ unsigned alpha = LodePNG_InfoColor_isAlphaType(infoOut); /*use 8-bit alpha channel*/ /*cases where in and out already have the same format*/ if(LodePNG_InfoColor_equal(infoIn, infoOut)) { size_t i; size_t size = (numpixels * LodePNG_InfoColor_getBpp(infoIn) + 7) / 8; for(i = 0; i < size; i++) out[i] = in[i]; return 0; } else if((infoOut->colorType == 2 || infoOut->colorType == 6) && infoOut->bitDepth == 8) { LodePNG_convert_rgb_a_8(out, in, infoIn, numpixels, bytes, alpha); } else if(LodePNG_InfoColor_isGreyscaleType(infoOut) && infoOut->bitDepth == 8) { /*conversion from greyscale to greyscale*/ if(!LodePNG_InfoColor_isGreyscaleType(infoIn)) return 62; /*converting from color to grey is not supported*/ LodePNG_convert_grey_8(out, in, infoIn, numpixels, bytes, alpha); } else if((infoOut->colorType == 2 || infoOut->colorType == 6) && infoOut->bitDepth == 16) { LodePNG_convert_rgb_a_16(out, in, infoIn, numpixels, bytes, alpha); } else if(LodePNG_InfoColor_isGreyscaleType(infoOut) && infoOut->bitDepth == 16) { /*conversion from greyscale to greyscale*/ if(!LodePNG_InfoColor_isGreyscaleType(infoIn)) return 62; /*converting from color to grey is not supported*/ LodePNG_convert_grey_16(out, in, infoIn, numpixels, bytes, alpha); } else return 59; /*invalid color mode*/ return 0; } /* Paeth predicter, used by PNG filter type 4 The parameters are of type short, but should come from unsigned chars, the shorts are only needed to make the paeth calculation correct. */ static unsigned char paethPredictor(short a, short b, short c) { short pa = abs(b - c); short pb = abs(a - c); short pc = abs(a + b - c - c); /*short pc = a + b - c; short pa = abs(pc - a); short pb = abs(pc - b); pc = abs(pc - c);*/ if(pa <= pb && pa <= pc) return (unsigned char)a; else if(pb <= pc) return (unsigned char)b; else return (unsigned char)c; } /*shared values used by multiple Adam7 related functions*/ static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) { /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ unsigned i; /*calculate width and height in pixels of each pass*/ for(i = 0; i < 7; i++) { passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; if(passw[i] == 0) passh[i] = 0; if(passh[i] == 0) passw[i] = 0; } filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; for(i = 0; i < 7; i++) { /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ filter_passstart[i + 1] = filter_passstart[i] + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); /*bits padded if needed to fill full byte at end of each scanline*/ padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); /*only padded at end of reduced image*/ passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; } } #ifdef LODEPNG_COMPILE_DECODER /* ////////////////////////////////////////////////////////////////////////// */ /* / PNG Decoder / */ /* ////////////////////////////////////////////////////////////////////////// */ /*read the information from the header and store it in the LodePNG_Info. return value is error*/ void LodePNG_Decoder_inspect(LodePNG_Decoder* decoder, const unsigned char* in, size_t inlength) { if(inlength == 0 || in == 0) { decoder->error = 48; /*the given data is empty*/ return; } if(inlength < 29) { decoder->error = 27; /*error: the data length is smaller than the length of a PNG header*/ return; } /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ LodePNG_InfoPng_cleanup(&decoder->infoPng); LodePNG_InfoPng_init(&decoder->infoPng); decoder->error = 0; if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) { decoder->error = 28; /*error: the first 8 bytes are not the correct PNG signature*/ return; } if(in[12] != 'I' || in[13] != 'H' || in[14] != 'D' || in[15] != 'R') { decoder->error = 29; /*error: it doesn't start with a IHDR chunk!*/ return; } /*read the values given in the header*/ decoder->infoPng.width = LodePNG_read32bitInt(&in[16]); decoder->infoPng.height = LodePNG_read32bitInt(&in[20]); decoder->infoPng.color.bitDepth = in[24]; decoder->infoPng.color.colorType = in[25]; decoder->infoPng.compressionMethod = in[26]; decoder->infoPng.filterMethod = in[27]; decoder->infoPng.interlaceMethod = in[28]; if(!decoder->settings.ignoreCrc) { unsigned CRC = LodePNG_read32bitInt(&in[29]); unsigned checksum = Crc32_crc(&in[12], 17); if(CRC != checksum) { decoder->error = 57; /*invalid CRC*/ return; } } /*error: only compression method 0 is allowed in the specification*/ if(decoder->infoPng.compressionMethod != 0) { decoder->error = 32; return; } /*error: only filter method 0 is allowed in the specification*/ if(decoder->infoPng.filterMethod != 0) { decoder->error = 33; return; } /*error: only interlace methods 0 and 1 exist in the specification*/ if(decoder->infoPng.interlaceMethod > 1) { decoder->error = 34; return; } decoder->error = checkColorValidity(decoder->infoPng.color.colorType, decoder->infoPng.color.bitDepth); } static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, size_t bytewidth, unsigned char filterType, size_t length) { /* For PNG filter method 0 unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, the filter works byte per byte (bytewidth = 1) precon is the previous unfiltered scanline, recon the result, scanline the current one the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead recon and scanline MAY be the same memory address! precon must be disjoint. */ size_t i; switch(filterType) { case 0: for(i = 0; i < length; i++) recon[i] = scanline[i]; break; case 1: for(i = 0; i < bytewidth; i++) recon[i] = scanline[i]; for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + recon[i - bytewidth]; break; case 2: if(precon) { for(i = 0; i < length; i++) recon[i] = scanline[i] + precon[i]; } else { for(i = 0; i < length; i++) recon[i] = scanline[i]; } break; case 3: if(precon) { for(i = 0; i < bytewidth; i++) recon[i] = scanline[i] + precon[i] / 2; for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) / 2); } else { for(i = 0; i < bytewidth; i++) recon[i] = scanline[i]; for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + recon[i - bytewidth] / 2; } break; case 4: if(precon) { for(i = 0; i < bytewidth; i++) { recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ } for(i = bytewidth; i < length; i++) { recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); } } else { for(i = 0; i < bytewidth; i++) { recon[i] = scanline[i]; } for(i = bytewidth; i < length; i++) { /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ recon[i] = (scanline[i] + recon[i - bytewidth]); } } break; default: return 36; /*error: unexisting filter type given*/ } return 0; } static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) { /* For PNG filter method 0 this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) */ unsigned y; unsigned char* prevline = 0; /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ size_t bytewidth = (bpp + 7) / 8; size_t linebytes = (w * bpp + 7) / 8; for(y = 0; y < h; y++) { size_t outindex = linebytes * y; size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ unsigned char filterType = in[inindex]; unsigned error = unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes); if(error) return error; prevline = &out[outindex]; } return 0; } static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) { /*Note: this function works on image buffers WITHOUT padding bits at end of scanlines with non-multiple-of-8 bit amounts, only between reduced images is padding out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation (because that's likely a little bit faster)*/ unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; unsigned i; Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); if(bpp >= 8) { for(i = 0; i < 7; i++) { unsigned x, y, b; size_t bytewidth = bpp / 8; for(y = 0; y < passh[i]; y++) for(x = 0; x < passw[i]; x++) { size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; for(b = 0; b < bytewidth; b++) { out[pixeloutstart + b] = in[pixelinstart + b]; } } } } else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ { for(i = 0; i < 7; i++) { unsigned x, y, b; unsigned ilinebits = bpp * passw[i]; unsigned olinebits = bpp * w; size_t obp, ibp; /*bit pointers (for out and in buffer)*/ for(y = 0; y < passh[i]; y++) for(x = 0; x < passw[i]; x++) { ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; for(b = 0; b < bpp; b++) { unsigned char bit = readBitFromReversedStream(&ibp, in); /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ setBitOfReversedStream0(&obp, out, bit); } } } } } static void removePaddingBits(unsigned char* out, const unsigned char* in, size_t olinebits, size_t ilinebits, unsigned h) { /* After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers for the Adam7 code, the color convert code and the output to the user. in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 only useful if (ilinebits - olinebits) is a value in the range 1..7 */ unsigned y; size_t diff = ilinebits - olinebits; size_t ibp = 0, obp = 0; /*input and output bit pointers*/ for(y = 0; y < h; y++) { size_t x; for(x = 0; x < olinebits; x++) { unsigned char bit = readBitFromReversedStream(&ibp, in); setBitOfReversedStream(&obp, out, bit); } ibp += diff; } } /*out must be buffer big enough to contain full image, and in must contain the full decompressed data from the IDAT chunks (with filter index bytes and possible padding bits) return value is error*/ static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, const LodePNG_InfoPng* infoPng) { /* This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. Steps: *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace NOTE: the in buffer will be overwritten with intermediate data! */ unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color); unsigned w = infoPng->width; unsigned h = infoPng->height; unsigned error = 0; if(bpp == 0) return 31; /*error: invalid colortype*/ if(infoPng->interlaceMethod == 0) { if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) { error = unfilter(in, in, w, h, bpp); if(error) return error; removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); } else error = unfilter(out, in, w, h, bpp); /*we can immediatly filter into the out buffer, no other steps needed*/ } else /*interlaceMethod is 1 (Adam7)*/ { unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; unsigned i; Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); for(i = 0; i < 7; i++) { error = unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp); if(error) return error; /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, move bytes instead of bits or move not at all*/ if(bpp < 8) { /*remove padding bits in scanlines; after this there still may be padding bits between the different reduced images: each reduced image still starts nicely at a byte*/ removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, ((passw[i] * bpp + 7) / 8) * 8, passh[i]); } } Adam7_deinterlace(out, in, w, h, bpp); } return error; } /*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ static void decodeGeneric(LodePNG_Decoder* decoder, unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize) { unsigned char IEND = 0; const unsigned char* chunk; size_t i; ucvector idat; /*the data from idat chunks*/ /*for unknown chunk order*/ unsigned unknown = 0; #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ /*provide some proper output values if error will happen*/ *out = 0; *outsize = 0; LodePNG_Decoder_inspect(decoder, in, insize); /*reads header and resets other parameters in decoder->infoPng*/ if(decoder->error) return; ucvector_init(&idat); chunk = &in[33]; /*first byte of the first chunk after the header*/ /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. IDAT data is put at the start of the in buffer*/ while(!IEND) { unsigned chunkLength; const unsigned char* data; /*the data in the chunk*/ /*error: size of the in buffer too small to contain next chunk*/ if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(decoder->error, 30); /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ chunkLength = LodePNG_chunk_length(chunk); /*error: chunk length larger than the max PNG chunk size*/ if(chunkLength > 2147483647) CERROR_BREAK(decoder->error, 63); if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) { CERROR_BREAK(decoder->error, 64); /*error: size of the in buffer too small to contain next chunk*/ } data = LodePNG_chunk_data_const(chunk); /*IDAT chunk, containing compressed image data*/ if(LodePNG_chunk_type_equals(chunk, "IDAT")) { size_t oldsize = idat.size; if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(decoder->error, 9936 /*alloc fail*/); for(i = 0; i < chunkLength; i++) idat.data[oldsize + i] = data[i]; #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS critical_pos = 3; #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } /*IEND chunk*/ else if(LodePNG_chunk_type_equals(chunk, "IEND")) { IEND = 1; } /*palette chunk (PLTE)*/ else if(LodePNG_chunk_type_equals(chunk, "PLTE")) { unsigned pos = 0; if(decoder->infoPng.color.palette) free(decoder->infoPng.color.palette); decoder->infoPng.color.palettesize = chunkLength / 3; decoder->infoPng.color.palette = (unsigned char*)malloc(4 * decoder->infoPng.color.palettesize); if(!decoder->infoPng.color.palette && decoder->infoPng.color.palettesize) { decoder->infoPng.color.palettesize = 0; CERROR_BREAK(decoder->error, 9937); /*alloc fail*/ } if(decoder->infoPng.color.palettesize > 256) CERROR_BREAK(decoder->error, 38); /*error: palette too big*/ for(i = 0; i < decoder->infoPng.color.palettesize; i++) { decoder->infoPng.color.palette[4 * i + 0] = data[pos++]; /*R*/ decoder->infoPng.color.palette[4 * i + 1] = data[pos++]; /*G*/ decoder->infoPng.color.palette[4 * i + 2] = data[pos++]; /*B*/ decoder->infoPng.color.palette[4 * i + 3] = 255; /*alpha*/ } #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS critical_pos = 2; #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } /*palette transparency chunk (tRNS)*/ else if(LodePNG_chunk_type_equals(chunk, "tRNS")) { if(decoder->infoPng.color.colorType == 3) { /*error: more alpha values given than there are palette entries*/ if(chunkLength > decoder->infoPng.color.palettesize) CERROR_BREAK(decoder->error, 38); for(i = 0; i < chunkLength; i++) decoder->infoPng.color.palette[4 * i + 3] = data[i]; } else if(decoder->infoPng.color.colorType == 0) { /*error: this chunk must be 2 bytes for greyscale image*/ if(chunkLength != 2) CERROR_BREAK(decoder->error, 30); decoder->infoPng.color.key_defined = 1; decoder->infoPng.color.key_r = decoder->infoPng.color.key_g = decoder->infoPng.color.key_b = 256 * data[0] + data[1]; } else if(decoder->infoPng.color.colorType == 2) { /*error: this chunk must be 6 bytes for RGB image*/ if(chunkLength != 6) CERROR_BREAK(decoder->error, 41); decoder->infoPng.color.key_defined = 1; decoder->infoPng.color.key_r = 256 * data[0] + data[1]; decoder->infoPng.color.key_g = 256 * data[2] + data[3]; decoder->infoPng.color.key_b = 256 * data[4] + data[5]; } else CERROR_BREAK(decoder->error, 42); /*error: tRNS chunk not allowed for other color models*/ } #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /*background color chunk (bKGD)*/ else if(LodePNG_chunk_type_equals(chunk, "bKGD")) { if(decoder->infoPng.color.colorType == 3) { /*error: this chunk must be 1 byte for indexed color image*/ if(chunkLength != 1) CERROR_BREAK(decoder->error, 43); decoder->infoPng.background_defined = 1; decoder->infoPng.background_r = decoder->infoPng.background_g = decoder->infoPng.background_b = data[0]; } else if(decoder->infoPng.color.colorType == 0 || decoder->infoPng.color.colorType == 4) { /*error: this chunk must be 2 bytes for greyscale image*/ if(chunkLength != 2) CERROR_BREAK(decoder->error, 44); decoder->infoPng.background_defined = 1; decoder->infoPng.background_r = decoder->infoPng.background_g = decoder->infoPng.background_b = 256 * data[0] + data[1]; } else if(decoder->infoPng.color.colorType == 2 || decoder->infoPng.color.colorType == 6) { /*error: this chunk must be 6 bytes for greyscale image*/ if(chunkLength != 6) CERROR_BREAK(decoder->error, 45); decoder->infoPng.background_defined = 1; decoder->infoPng.background_r = 256 * data[0] + data[1]; decoder->infoPng.background_g = 256 * data[2] + data[3]; decoder->infoPng.background_b = 256 * data[4] + data[5]; } } /*text chunk (tEXt)*/ else if(LodePNG_chunk_type_equals(chunk, "tEXt")) { if(decoder->settings.readTextChunks) { char *key = 0, *str = 0; while(!decoder->error) /*not really a while loop, only used to break on error*/ { unsigned length, string2_begin; length = 0; while(length < chunkLength && data[length] != 0) length++; /*error, end reached, no null terminator?*/ if(length + 1 >= chunkLength) CERROR_BREAK(decoder->error, 75); key = (char*)malloc(length + 1); if(!key) CERROR_BREAK(decoder->error, 9938); /*alloc fail*/ key[length] = 0; for(i = 0; i < length; i++) key[i] = data[i]; string2_begin = length + 1; /*error, end reached, no null terminator?*/ if(string2_begin > chunkLength) CERROR_BREAK(decoder->error, 75); length = chunkLength - string2_begin; str = (char*)malloc(length + 1); if(!str) CERROR_BREAK(decoder->error, 9939); /*alloc fail*/ str[length] = 0; for(i = 0; i < length; i++) str[i] = data[string2_begin + i]; decoder->error = LodePNG_Text_add(&decoder->infoPng.text, key, str); break; } free(key); free(str); } } /*compressed text chunk (zTXt)*/ else if(LodePNG_chunk_type_equals(chunk, "zTXt")) { if(decoder->settings.readTextChunks) { unsigned length, string2_begin; char *key = 0; ucvector decoded; ucvector_init(&decoded); while(!decoder->error) /*not really a while loop, only used to break on error*/ { for(length = 0; length < chunkLength && data[length] != 0; length++) ; if(length + 2 >= chunkLength) CERROR_BREAK(decoder->error, 75); /*no null termination, corrupt?*/ key = (char*)malloc(length + 1); if(!key) CERROR_BREAK(decoder->error, 9940); /*alloc fail*/ key[length] = 0; for(i = 0; i < length; i++) key[i] = data[i]; if(data[length + 1] != 0) CERROR_BREAK(decoder->error, 72); /*the 0 byte indicating compression must be 0*/ string2_begin = length + 2; if(string2_begin > chunkLength) CERROR_BREAK(decoder->error, 75); /*no null termination, corrupt?*/ length = chunkLength - string2_begin; decoder->error = LodePNG_zlib_decompress(&decoded.data, &decoded.size, (unsigned char*)(&data[string2_begin]), length, &decoder->settings.zlibsettings); if(decoder->error) break; ucvector_push_back(&decoded, 0); decoder->error = LodePNG_Text_add(&decoder->infoPng.text, key, (char*)decoded.data); break; } free(key); ucvector_cleanup(&decoded); if(decoder->error) break; } } /*international text chunk (iTXt)*/ else if(LodePNG_chunk_type_equals(chunk, "iTXt")) { if(decoder->settings.readTextChunks) { unsigned length, begin, compressed; char *key = 0, *langtag = 0, *transkey = 0; ucvector decoded; ucvector_init(&decoded); while(!decoder->error) /*not really a while loop, only used to break on error*/ { /*Quick check if the chunk length isn't too small. Even without check it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ if(chunkLength < 5) CERROR_BREAK(decoder->error, 30); /*iTXt chunk too short*/ /*read the key*/ for(length = 0; length < chunkLength && data[length] != 0; length++) ; if(length + 2 >= chunkLength) CERROR_BREAK(decoder->error, 75); /*no null termination char found*/ key = (char*)malloc(length + 1); if(!key) CERROR_BREAK(decoder->error, 9941); /*alloc fail*/ key[length] = 0; for(i = 0; i < length; i++) key[i] = data[i]; /*read the compression method*/ compressed = data[length + 1]; if(data[length + 2] != 0) CERROR_BREAK(decoder->error, 72); /*the 0 byte indicating compression must be 0*/ /*read the langtag*/ begin = length + 3; length = 0; for(i = begin; i < chunkLength && data[i] != 0; i++) length++; if(begin + length + 1 >= chunkLength) CERROR_BREAK(decoder->error, 75); /*no null termination char found*/ langtag = (char*)malloc(length + 1); if(!langtag) CERROR_BREAK(decoder->error, 9942); /*alloc fail*/ langtag[length] = 0; for(i = 0; i < length; i++) langtag[i] = data[begin + i]; /*read the transkey*/ begin += length + 1; length = 0; for(i = begin; i < chunkLength && data[i] != 0; i++) length++; if(begin + length + 1 >= chunkLength) CERROR_BREAK(decoder->error, 75); /*no null termination, corrupt?*/ transkey = (char*)malloc(length + 1); if(!transkey) CERROR_BREAK(decoder->error, 9943); /*alloc fail*/ transkey[length] = 0; for(i = 0; i < length; i++) transkey[i] = data[begin + i]; /*read the actual text*/ begin += length + 1; if(begin > chunkLength) CERROR_BREAK(decoder->error, 75); /*no null termination, corrupt?*/ length = chunkLength - begin; if(compressed) { decoder->error = LodePNG_zlib_decompress(&decoded.data, &decoded.size, (unsigned char*)(&data[begin]), length, &decoder->settings.zlibsettings); if(decoder->error) break; ucvector_push_back(&decoded, 0); } else { if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(decoder->error, 9944 /*alloc fail*/); decoded.data[length] = 0; for(i = 0; i < length; i++) decoded.data[i] = data[begin + i]; } decoder->error = LodePNG_IText_add(&decoder->infoPng.itext, key, langtag, transkey, (char*)decoded.data); break; } free(key); free(langtag); free(transkey); ucvector_cleanup(&decoded); if(decoder->error) break; } } else if(LodePNG_chunk_type_equals(chunk, "tIME")) { if(chunkLength != 7) CERROR_BREAK(decoder->error, 73); /*invalid tIME chunk size*/ decoder->infoPng.time_defined = 1; decoder->infoPng.time.year = 256 * data[0] + data[+ 1]; decoder->infoPng.time.month = data[2]; decoder->infoPng.time.day = data[3]; decoder->infoPng.time.hour = data[4]; decoder->infoPng.time.minute = data[5]; decoder->infoPng.time.second = data[6]; } else if(LodePNG_chunk_type_equals(chunk, "pHYs")) { if(chunkLength != 9) CERROR_BREAK(decoder->error, 74); /*invalid pHYs chunk size*/ decoder->infoPng.phys_defined = 1; decoder->infoPng.phys_x = 16777216 * data[0] + 65536 * data[1] + 256 * data[2] + data[3]; decoder->infoPng.phys_y = 16777216 * data[4] + 65536 * data[5] + 256 * data[6] + data[7]; decoder->infoPng.phys_unit = data[8]; } #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ else /*it's not an implemented chunk type, so ignore it: skip over the data*/ { /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ if(LodePNG_chunk_critical(chunk)) CERROR_BREAK(decoder->error, 69); unknown = 1; #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS if(decoder->settings.rememberUnknownChunks) { LodePNG_UnknownChunks* unknown = &decoder->infoPng.unknown_chunks; decoder->error = LodePNG_append_chunk(&unknown->data[critical_pos - 1], &unknown->datasize[critical_pos - 1], chunk); if(decoder->error) break; } #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } if(!decoder->settings.ignoreCrc && !unknown) /*check CRC if wanted, only on known chunk types*/ { if(LodePNG_chunk_check_crc(chunk)) CERROR_BREAK(decoder->error, 57); /*invalid CRC*/ } if(!IEND) chunk = LodePNG_chunk_next_const(chunk); } if(!decoder->error) { ucvector scanlines; ucvector_init(&scanlines); /*maximum final image length is already reserved in the vector's length - this is not really necessary*/ if(!ucvector_resize(&scanlines, ((decoder->infoPng.width * (decoder->infoPng.height * LodePNG_InfoColor_getBpp(&decoder->infoPng.color) + 7)) / 8) + decoder->infoPng.height)) { decoder->error = 9945; /*alloc fail*/ } if(!decoder->error) { /*decompress with the Zlib decompressor*/ decoder->error = LodePNG_zlib_decompress(&scanlines.data, &scanlines.size, idat.data, idat.size, &decoder->settings.zlibsettings); } if(!decoder->error) { ucvector outv; ucvector_init(&outv); if(!ucvector_resizev(&outv, (decoder->infoPng.height * decoder->infoPng.width * LodePNG_InfoColor_getBpp(&decoder->infoPng.color) + 7) / 8, 0)) decoder->error = 9946; /*alloc fail*/ if(!decoder->error) decoder->error = postProcessScanlines(outv.data, scanlines.data, &decoder->infoPng); *out = outv.data; *outsize = outv.size; } ucvector_cleanup(&scanlines); } ucvector_cleanup(&idat); } void LodePNG_Decoder_decode(LodePNG_Decoder* decoder, unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize) { *out = 0; *outsize = 0; decodeGeneric(decoder, out, outsize, in, insize); if(decoder->error) return; if(!decoder->settings.color_convert || LodePNG_InfoColor_equal(&decoder->infoRaw.color, &decoder->infoPng.color)) { /*same color type, no copying or converting of data needed*/ /*store the infoPng color settings on the infoRaw so that the infoRaw still reflects what colorType the raw image has to the end user*/ if(!decoder->settings.color_convert) { decoder->error = LodePNG_InfoColor_copy(&decoder->infoRaw.color, &decoder->infoPng.color); if(decoder->error) return; } } else { /*color conversion needed; sort of copy of the data*/ unsigned char* data = *out; /*TODO: check if this works according to the statement in the documentation: "The converter can convert from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ if(!(decoder->infoRaw.color.colorType == 2 || decoder->infoRaw.color.colorType == 6) && !(decoder->infoRaw.color.bitDepth == 8)) { decoder->error = 56; /*unsupported color mode conversion*/ return; } *outsize = (decoder->infoPng.width * decoder->infoPng.height * LodePNG_InfoColor_getBpp(&decoder->infoRaw.color) + 7) / 8; *out = (unsigned char*)malloc(*outsize); if(!(*out)) { decoder->error = 9947; /*alloc fail*/ *outsize = 0; } else decoder->error = LodePNG_convert(*out, data, &decoder->infoRaw.color, &decoder->infoPng.color, decoder->infoPng.width, decoder->infoPng.height); free(data); } } unsigned LodePNG_decode(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize, unsigned colorType, unsigned bitDepth) { unsigned error; size_t dummy_size; LodePNG_Decoder decoder; LodePNG_Decoder_init(&decoder); decoder.infoRaw.color.colorType = colorType; decoder.infoRaw.color.bitDepth = bitDepth; LodePNG_Decoder_decode(&decoder, out, &dummy_size, in, insize); error = decoder.error; *w = decoder.infoPng.width; *h = decoder.infoPng.height; LodePNG_Decoder_cleanup(&decoder); return error; } unsigned LodePNG_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) { return LodePNG_decode(out, w, h, in, insize, 6, 8); } unsigned LodePNG_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) { return LodePNG_decode(out, w, h, in, insize, 2, 8); } #ifdef LODEPNG_COMPILE_DISK unsigned LodePNG_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, unsigned colorType, unsigned bitDepth) { unsigned char* buffer; size_t buffersize; unsigned error; error = LodePNG_loadFile(&buffer, &buffersize, filename); if(!error) error = LodePNG_decode(out, w, h, buffer, buffersize, colorType, bitDepth); free(buffer); return error; } unsigned LodePNG_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) { return LodePNG_decode_file(out, w, h, filename, 6, 8); } unsigned LodePNG_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) { return LodePNG_decode_file(out, w, h, filename, 2, 8); } #endif /*LODEPNG_COMPILE_DISK*/ void LodePNG_DecodeSettings_init(LodePNG_DecodeSettings* settings) { settings->color_convert = 1; #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS settings->readTextChunks = 1; #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ settings->ignoreCrc = 0; #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS settings->rememberUnknownChunks = 0; #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ LodePNG_DecompressSettings_init(&settings->zlibsettings); } void LodePNG_Decoder_init(LodePNG_Decoder* decoder) { LodePNG_DecodeSettings_init(&decoder->settings); LodePNG_InfoRaw_init(&decoder->infoRaw); LodePNG_InfoPng_init(&decoder->infoPng); decoder->error = 1; } void LodePNG_Decoder_cleanup(LodePNG_Decoder* decoder) { LodePNG_InfoRaw_cleanup(&decoder->infoRaw); LodePNG_InfoPng_cleanup(&decoder->infoPng); } void LodePNG_Decoder_copy(LodePNG_Decoder* dest, const LodePNG_Decoder* source) { LodePNG_Decoder_cleanup(dest); *dest = *source; LodePNG_InfoRaw_init(&dest->infoRaw); LodePNG_InfoPng_init(&dest->infoPng); dest->error = LodePNG_InfoRaw_copy(&dest->infoRaw, &source->infoRaw); if(dest->error) return; dest->error = LodePNG_InfoPng_copy(&dest->infoPng, &source->infoPng); if(dest->error) return; } #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER /* ////////////////////////////////////////////////////////////////////////// */ /* / PNG Encoder / */ /* ////////////////////////////////////////////////////////////////////////// */ /*chunkName must be string of 4 characters*/ static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) { unsigned error = LodePNG_create_chunk(&out->data, &out->size, (unsigned)length, chunkName, data); if(error) return error; out->allocsize = out->size; /*fix the allocsize again*/ return 0; } static void writeSignature(ucvector* out) { /*8 bytes PNG signature, aka the magic bytes*/ ucvector_push_back(out, 137); ucvector_push_back(out, 80); ucvector_push_back(out, 78); ucvector_push_back(out, 71); ucvector_push_back(out, 13); ucvector_push_back(out, 10); ucvector_push_back(out, 26); ucvector_push_back(out, 10); } static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, unsigned bitDepth, unsigned colorType, unsigned interlaceMethod) { unsigned error = 0; ucvector header; ucvector_init(&header); LodePNG_add32bitInt(&header, w); /*width*/ LodePNG_add32bitInt(&header, h); /*height*/ ucvector_push_back(&header, (unsigned char)bitDepth); /*bit depth*/ ucvector_push_back(&header, (unsigned char)colorType); /*color type*/ ucvector_push_back(&header, 0); /*compression method*/ ucvector_push_back(&header, 0); /*filter method*/ ucvector_push_back(&header, interlaceMethod); /*interlace method*/ error = addChunk(out, "IHDR", header.data, header.size); ucvector_cleanup(&header); return error; } static unsigned addChunk_PLTE(ucvector* out, const LodePNG_InfoColor* info) { unsigned error = 0; size_t i; ucvector PLTE; ucvector_init(&PLTE); for(i = 0; i < info->palettesize * 4; i++) { /*add all channels except alpha channel*/ if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); } error = addChunk(out, "PLTE", PLTE.data, PLTE.size); ucvector_cleanup(&PLTE); return error; } static unsigned addChunk_tRNS(ucvector* out, const LodePNG_InfoColor* info) { unsigned error = 0; size_t i; ucvector tRNS; ucvector_init(&tRNS); if(info->colorType == 3) { /*add only alpha channel*/ for(i = 0; i < info->palettesize; i++) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); } else if(info->colorType == 0) { if(info->key_defined) { ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256)); ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256)); } } else if(info->colorType == 2) { if(info->key_defined) { ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256)); ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256)); ucvector_push_back(&tRNS, (unsigned char)(info->key_g / 256)); ucvector_push_back(&tRNS, (unsigned char)(info->key_g % 256)); ucvector_push_back(&tRNS, (unsigned char)(info->key_b / 256)); ucvector_push_back(&tRNS, (unsigned char)(info->key_b % 256)); } } error = addChunk(out, "tRNS", tRNS.data, tRNS.size); ucvector_cleanup(&tRNS); return error; } static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, LodePNG_CompressSettings* zlibsettings) { ucvector zlibdata; unsigned error = 0; /*compress with the Zlib compressor*/ ucvector_init(&zlibdata); error = LodePNG_zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); ucvector_cleanup(&zlibdata); return error; } static unsigned addChunk_IEND(ucvector* out) { unsigned error = 0; error = addChunk(out, "IEND", 0, 0); return error; } #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) { unsigned error = 0; size_t i; ucvector text; ucvector_init(&text); for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&text, (unsigned char)keyword[i]); ucvector_push_back(&text, 0); for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&text, (unsigned char)textstring[i]); error = addChunk(out, "tEXt", text.data, text.size); ucvector_cleanup(&text); return error; } static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, LodePNG_CompressSettings* zlibsettings) { unsigned error = 0; ucvector data, compressed; size_t i, textsize = strlen(textstring); ucvector_init(&data); ucvector_init(&compressed); for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&data, (unsigned char)keyword[i]); ucvector_push_back(&data, 0); /* 0 termination char*/ ucvector_push_back(&data, 0); /*compression method: 0*/ error = LodePNG_zlib_compress(&compressed.data, &compressed.size, (unsigned char*)textstring, textsize, zlibsettings); if(!error) { for(i = 0; i < compressed.size; i++) ucvector_push_back(&data, compressed.data[i]); error = addChunk(out, "zTXt", data.data, data.size); } ucvector_cleanup(&compressed); ucvector_cleanup(&data); return error; } static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, const char* transkey, const char* textstring, LodePNG_CompressSettings* zlibsettings) { unsigned error = 0; ucvector data, compressed_data; size_t i, textsize = strlen(textstring); ucvector_init(&data); for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&data, (unsigned char)keyword[i]); ucvector_push_back(&data, 0); /*null termination char*/ ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ ucvector_push_back(&data, 0); /*compression method*/ for(i = 0; langtag[i] != 0; i++) ucvector_push_back(&data, (unsigned char)langtag[i]); ucvector_push_back(&data, 0); /*null termination char*/ for(i = 0; transkey[i] != 0; i++) ucvector_push_back(&data, (unsigned char)transkey[i]); ucvector_push_back(&data, 0); /*null termination char*/ if(compressed) { ucvector_init(&compressed_data); error = LodePNG_zlib_compress(&compressed_data.data, &compressed_data.size, (unsigned char*)textstring, textsize, zlibsettings); if(!error) { for(i = 0; i < compressed_data.size; i++) ucvector_push_back(&data, compressed_data.data[i]); for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&data, (unsigned char)textstring[i]); } } else /*not compressed*/ { for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&data, (unsigned char)textstring[i]); } if(!error) error = addChunk(out, "iTXt", data.data, data.size); ucvector_cleanup(&data); return error; } static unsigned addChunk_bKGD(ucvector* out, const LodePNG_InfoPng* info) { unsigned error = 0; ucvector bKGD; ucvector_init(&bKGD); if(info->color.colorType == 0 || info->color.colorType == 4) { ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256)); ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); } else if(info->color.colorType == 2 || info->color.colorType == 6) { ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256)); ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); ucvector_push_back(&bKGD, (unsigned char)(info->background_g / 256)); ucvector_push_back(&bKGD, (unsigned char)(info->background_g % 256)); ucvector_push_back(&bKGD, (unsigned char)(info->background_b / 256)); ucvector_push_back(&bKGD, (unsigned char)(info->background_b % 256)); } else if(info->color.colorType == 3) { ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); /*palette index*/ } error = addChunk(out, "bKGD", bKGD.data, bKGD.size); ucvector_cleanup(&bKGD); return error; } static unsigned addChunk_tIME(ucvector* out, const LodePNG_Time* time) { unsigned error = 0; unsigned char* data = (unsigned char*)malloc(7); if(!data) return 9948; /*alloc fail*/ data[0] = (unsigned char)(time->year / 256); data[1] = (unsigned char)(time->year % 256); data[2] = time->month; data[3] = time->day; data[4] = time->hour; data[5] = time->minute; data[6] = time->second; error = addChunk(out, "tIME", data, 7); free(data); return error; } static unsigned addChunk_pHYs(ucvector* out, const LodePNG_InfoPng* info) { unsigned error = 0; ucvector data; ucvector_init(&data); LodePNG_add32bitInt(&data, info->phys_x); LodePNG_add32bitInt(&data, info->phys_y); ucvector_push_back(&data, info->phys_unit); error = addChunk(out, "pHYs", data.data, data.size); ucvector_cleanup(&data); return error; } #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, size_t length, size_t bytewidth, unsigned char filterType) { size_t i; switch(filterType) { case 0: /*None*/ for(i = 0; i < length; i++) out[i] = scanline[i]; break; case 1: /*Sub*/ if(prevline) { for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; for(i = bytewidth; i < length ; i++) out[i] = scanline[i] - scanline[i - bytewidth]; } else { for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth]; } break; case 2: /*Up*/ if(prevline) { for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i]; } else { for(i = 0; i < length; i++) out[i] = scanline[i]; } break; case 3: /*Average*/ if(prevline) { for(i = 0; i < bytewidth; i++) out[i] = scanline[i] - prevline[i] / 2; for(i = bytewidth; i < length; i++) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) / 2); } else { for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth] / 2; } break; case 4: /*Paeth*/ if(prevline) { /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ for(i = 0; i < bytewidth; i++) out[i] = (scanline[i] - prevline[i]); for(i = bytewidth; i < length; i++) { out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); } } else { for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ for(i = bytewidth; i < length; i++) out[i] = (scanline[i] - scanline[i - bytewidth]); } break; default: return; /*unexisting filter type given*/ } } static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, const LodePNG_InfoColor* info, const LodePNG_EncodeSettings* settings) { /* For PNG filter method 0 out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are the scanlines with 1 extra byte per scanline */ unsigned bpp = LodePNG_InfoColor_getBpp(info); /*the width of a scanline in bytes, not including the filter type*/ size_t linebytes = (w * bpp + 7) / 8; /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ size_t bytewidth = (bpp + 7) / 8; const unsigned char* prevline = 0; unsigned x, y; unsigned error = 0; if(bpp == 0) return 31; /*error: invalid color type*/ if(!settings->bruteForceFilters) { /* There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. use fixed filtering, with the filter None). * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply all five filters and select the filter that produces the smallest sum of absolute values per row. */ if(info->colorType == 3 || info->bitDepth < 8) /*None filtertype for everything*/ { for(y = 0; y < h; y++) { size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ size_t inindex = linebytes * y; const unsigned TYPE = 0; out[outindex] = TYPE; /*filter type byte*/ filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, TYPE); prevline = &in[inindex]; } } else /*adaptive filtering*/ { size_t sum[5]; ucvector attempt[5]; /*five filtering attempts, one for each filter type*/ size_t smallest = 0; unsigned type, bestType = 0; for(type = 0; type < 5; type++) ucvector_init(&attempt[type]); for(type = 0; type < 5; type++) { if(!ucvector_resize(&attempt[type], linebytes)) ERROR_BREAK(9949 /*alloc fail*/); } if(!error) { for(y = 0; y < h; y++) { /*try the 5 filter types*/ for(type = 0; type < 5; type++) { filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type); /*calculate the sum of the result*/ sum[type] = 0; /*note that not all pixels are checked to speed this up while still having probably the best choice*/ for(x = 0; x < attempt[type].size; x+=3) { /*For differences, each byte should be treated as signed, values above 127 are negative (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. This means filtertype 0 is almost never chosen, but that is justified.*/ if(type == 0) sum[type] += (unsigned char)(attempt[type].data[x]); else { signed char s = (signed char)(attempt[type].data[x]); sum[type] += s < 0 ? -s : s; } } /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ if(type == 0 || sum[type] < smallest) { bestType = type; smallest = sum[type]; } } prevline = &in[y * linebytes]; /*now fill the out values*/ out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x]; } } for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]); } } else { /*brute force filter chooser. deflate the scanline after every filter attempt to see which one deflates best. This is very slow and gives only slightly smaller, sometimes even larger, result*/ size_t size[5]; ucvector attempt[5]; /*five filtering attempts, one for each filter type*/ size_t smallest; unsigned type = 0, bestType = 0; unsigned char* dummy; LodePNG_CompressSettings zlibsettings = settings->zlibsettings; /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, to simulate the true case where the tree is the same for the whole image. Sometimes it gives better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare cases better compression. It does make this a bit less slow, so it's worth doing this.*/ zlibsettings.btype = 1; for(type = 0; type < 5; type++) { ucvector_init(&attempt[type]); ucvector_resize(&attempt[type], linebytes); /*todo: give error if resize failed*/ } for(y = 0; y < h; y++) /*try the 5 filter types*/ { for(type = 0; type < 5; type++) { unsigned testsize = attempt[type].size; /*unsigned testsize = attempt[type].size / 8;*/ /*it already works good enough by testing a part of the row*/ /*if(testsize == 0) testsize = attempt[type].size;*/ filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type); size[type] = 0; dummy = 0; LodePNG_zlib_compress(&dummy, &size[type], attempt[type].data, testsize, &zlibsettings); free(dummy); /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ if(type == 0 || size[type] < smallest) { bestType = type; smallest = size[type]; } } prevline = &in[y * linebytes]; out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x]; } for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]); } return error; } static void addPaddingBits(unsigned char* out, const unsigned char* in, size_t olinebits, size_t ilinebits, unsigned h) { /*The opposite of the removePaddingBits function olinebits must be >= ilinebits*/ unsigned y; size_t diff = olinebits - ilinebits; size_t obp = 0, ibp = 0; /*bit pointers*/ for(y = 0; y < h; y++) { size_t x; for(x = 0; x < ilinebits; x++) { unsigned char bit = readBitFromReversedStream(&ibp, in); setBitOfReversedStream(&obp, out, bit); } /*obp += diff; --> no, fill in some value in the padding bits too, to avoid "Use of uninitialised value of size ###" warning from valgrind*/ for(x = 0; x < diff; x++) setBitOfReversedStream(&obp, out, 0); } } static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) { /*Note: this function works on image buffers WITHOUT padding bits at end of scanlines with non-multiple-of-8 bit amounts, only between reduced images is padding*/ unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; unsigned i; Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); if(bpp >= 8) { for(i = 0; i < 7; i++) { unsigned x, y, b; size_t bytewidth = bpp / 8; for(y = 0; y < passh[i]; y++) for(x = 0; x < passw[i]; x++) { size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; for(b = 0; b < bytewidth; b++) { out[pixeloutstart + b] = in[pixelinstart + b]; } } } } else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ { for(i = 0; i < 7; i++) { unsigned x, y, b; unsigned ilinebits = bpp * passw[i]; unsigned olinebits = bpp * w; size_t obp, ibp; /*bit pointers (for out and in buffer)*/ for(y = 0; y < passh[i]; y++) for(x = 0; x < passw[i]; x++) { ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); for(b = 0; b < bpp; b++) { unsigned char bit = readBitFromReversedStream(&ibp, in); setBitOfReversedStream(&obp, out, bit); } } } } } /*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. return value is error**/ static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, const LodePNG_InfoPng* infoPng, const LodePNG_EncodeSettings* settings) { /* This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter */ unsigned bpp = LodePNG_InfoColor_getBpp(&infoPng->color); unsigned w = infoPng->width; unsigned h = infoPng->height; unsigned error = 0; if(infoPng->interlaceMethod == 0) { *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ *out = (unsigned char*)malloc(*outsize); if(!(*out) && (*outsize)) error = 9950; /*alloc fail*/ if(!error) { /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) { ucvector padded; ucvector_init(&padded); if(!ucvector_resize(&padded, h * ((w * bpp + 7) / 8))) error = 9951; /*alloc fail*/ if(!error) { addPaddingBits(padded.data, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); error = filter(*out, padded.data, w, h, &infoPng->color, settings); } ucvector_cleanup(&padded); } else { /*we can immediatly filter into the out buffer, no other steps needed*/ error = filter(*out, in, w, h, &infoPng->color, settings); } } } else /*interlaceMethod is 1 (Adam7)*/ { unsigned char* adam7 = (unsigned char*)malloc((h * w * bpp + 7) / 8); if(!adam7 && ((h * w * bpp + 7) / 8)) error = 9952; /*alloc fail*/ while(!error) /*not a real while loop, used to break out to cleanup to avoid a goto*/ { unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; unsigned i; Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ *out = (unsigned char*)malloc(*outsize); if(!(*out) && (*outsize)) ERROR_BREAK(9953 /*alloc fail*/); Adam7_interlace(adam7, in, w, h, bpp); for(i = 0; i < 7; i++) { if(bpp < 8) { ucvector padded; ucvector_init(&padded); if(!ucvector_resize(&padded, h * ((w * bpp + 7) / 8))) error = 9954; /*alloc fail*/ if(!error) { addPaddingBits(&padded.data[padded_passstart[i]], &adam7[passstart[i]], ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); error = filter(&(*out)[filter_passstart[i]], &padded.data[padded_passstart[i]], passw[i], passh[i], &infoPng->color, settings); } ucvector_cleanup(&padded); } else { error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], passw[i], passh[i], &infoPng->color, settings); } } break; } free(adam7); } return error; } /*palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA...*/ static unsigned isPaletteFullyOpaque(const unsigned char* palette, size_t palettesize) { size_t i; for(i = 0; i < palettesize; i++) { if(palette[4 * i + 3] != 255) return 0; } return 1; } /*this function checks if the input image given by the user has no transparent pixels*/ static unsigned isFullyOpaque(const unsigned char* image, unsigned w, unsigned h, const LodePNG_InfoColor* info) { /*TODO: When the user specified a color key for the input image, then this function must also check for pixels that are the same as the color key and treat those as transparent.*/ unsigned i, numpixels = w * h; if(info->colorType == 6) { if(info->bitDepth == 8) { for(i = 0; i < numpixels; i++) { if(image[i * 4 + 3] != 255) return 0; } } else { for(i = 0; i < numpixels; i++) { if(image[i * 8 + 6] != 255 || image[i * 8 + 7] != 255) return 0; } } return 1; /*no single pixel with alpha channel other than 255 found*/ } else if(info->colorType == 4) { if(info->bitDepth == 8) { for(i = 0; i < numpixels; i++) { if(image[i * 2 + 1] != 255) return 0; } } else { for(i = 0; i < numpixels; i++) { if(image[i * 4 + 2] != 255 || image[i * 4 + 3] != 255) return 0; } } return 1; /*no single pixel with alpha channel other than 255 found*/ } else if(info->colorType == 3) { /*when there's a palette, we could check every pixel for translucency, but much quicker is to just check the palette*/ return(isPaletteFullyOpaque(info->palette, info->palettesize)); } return 0; /*color type that isn't supported by this function yet, so assume there is transparency to be safe*/ } #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) { unsigned char* inchunk = data; while((size_t)(inchunk - data) < datasize) { unsigned error = LodePNG_append_chunk(&out->data, &out->size, inchunk); if(error) return error; /*error: not enough memory*/ out->allocsize = out->size; /*fix the allocsize again*/ inchunk = LodePNG_chunk_next(inchunk); } return 0; } #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ void LodePNG_Encoder_encode(LodePNG_Encoder* encoder, unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) { LodePNG_InfoPng info; ucvector outv; unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ size_t datasize = 0; /*provide some proper output values if error will happen*/ *out = 0; *outsize = 0; encoder->error = 0; /*UNSAFE copy to avoid having to cleanup! but we will only change primitive parameters, and not invoke the cleanup function nor touch the palette's buffer so we use it safely*/ info = encoder->infoPng; info.width = w; info.height = h; if(encoder->settings.autoLeaveOutAlphaChannel && isFullyOpaque(image, w, h, &encoder->infoRaw.color)) { /*go to a color type without alpha channel*/ if(info.color.colorType == 6) info.color.colorType = 2; else if(info.color.colorType == 4) info.color.colorType = 0; } if(encoder->settings.zlibsettings.windowSize > 32768) { encoder->error = 60; /*error: windowsize larger than allowed*/ return; } if(encoder->settings.zlibsettings.btype > 2) { encoder->error = 61; /*error: unexisting btype*/ return; } if(encoder->infoPng.interlaceMethod > 1) { encoder->error = 71; /*error: unexisting interlace mode*/ return; } /*error: unexisting color type given*/ if((encoder->error = checkColorValidity(info.color.colorType, info.color.bitDepth))) return; /*error: unexisting color type given*/ if((encoder->error = checkColorValidity(encoder->infoRaw.color.colorType, encoder->infoRaw.color.bitDepth))) return; if(!LodePNG_InfoColor_equal(&encoder->infoRaw.color, &info.color)) { unsigned char* converted; size_t size = (w * h * LodePNG_InfoColor_getBpp(&info.color) + 7) / 8; if((info.color.colorType != 6 && info.color.colorType != 2) || (info.color.bitDepth != 8)) { encoder->error = 59; /*for the output image, only these types are supported*/ return; } converted = (unsigned char*)malloc(size); if(!converted && size) encoder->error = 9955; /*alloc fail*/ if(!encoder->error) { encoder->error = LodePNG_convert(converted, image, &info.color, &encoder->infoRaw.color, w, h); } if(!encoder->error) preProcessScanlines(&data, &datasize, converted, &info, &encoder->settings); free(converted); } else preProcessScanlines(&data, &datasize, image, &info, &encoder->settings); ucvector_init(&outv); while(!encoder->error) /*while only executed once, to break on error*/ { #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS size_t i; #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ /*write signature and chunks*/ writeSignature(&outv); /*IHDR*/ addChunk_IHDR(&outv, w, h, info.color.bitDepth, info.color.colorType, info.interlaceMethod); #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS /*unknown chunks between IHDR and PLTE*/ if(info.unknown_chunks.data[0]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[0], info.unknown_chunks.datasize[0]); if(encoder->error) break; } #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ /*PLTE*/ if(info.color.colorType == 3) { if(info.color.palettesize == 0 || info.color.palettesize > 256) { encoder->error = 68; /*invalid palette size*/ break; } addChunk_PLTE(&outv, &info.color); } if(encoder->settings.force_palette && (info.color.colorType == 2 || info.color.colorType == 6)) { if(info.color.palettesize == 0 || info.color.palettesize > 256) { encoder->error = 68; /*invalid palette size*/ break; } addChunk_PLTE(&outv, &info.color); } /*tRNS*/ if(info.color.colorType == 3 && !isPaletteFullyOpaque(info.color.palette, info.color.palettesize)) { addChunk_tRNS(&outv, &info.color); } if((info.color.colorType == 0 || info.color.colorType == 2) && info.color.key_defined) { addChunk_tRNS(&outv, &info.color); } #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /*bKGD (must come between PLTE and the IDAt chunks*/ if(info.background_defined) addChunk_bKGD(&outv, &info); /*pHYs (must come before the IDAT chunks)*/ if(info.phys_defined) addChunk_pHYs(&outv, &info); #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS /*unknown chunks between PLTE and IDAT*/ if(info.unknown_chunks.data[1]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[1], info.unknown_chunks.datasize[1]); if(encoder->error) break; } #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ /*IDAT (multiple IDAT chunks must be consecutive)*/ encoder->error = addChunk_IDAT(&outv, data, datasize, &encoder->settings.zlibsettings); if(encoder->error) break; #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /*tIME*/ if(info.time_defined) addChunk_tIME(&outv, &info.time); /*tEXt and/or zTXt*/ for(i = 0; i < info.text.num; i++) { if(strlen(info.text.keys[i]) > 79) { encoder->error = 66; /*text chunk too large*/ break; } if(strlen(info.text.keys[i]) < 1) { encoder->error = 67; /*text chunk too small*/ break; } if(encoder->settings.text_compression) addChunk_zTXt(&outv, info.text.keys[i], info.text.strings[i], &encoder->settings.zlibsettings); else addChunk_tEXt(&outv, info.text.keys[i], info.text.strings[i]); } /*LodePNG version id in text chunk*/ if(encoder->settings.add_id) { unsigned alread_added_id_text = 0; for(i = 0; i < info.text.num; i++) { if(!strcmp(info.text.keys[i], "LodePNG")) { alread_added_id_text = 1; break; } } if(alread_added_id_text == 0) addChunk_tEXt(&outv, "LodePNG", VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ } /*iTXt*/ for(i = 0; i < info.itext.num; i++) { if(strlen(info.itext.keys[i]) > 79) { encoder->error = 66; /*text chunk too large*/ break; } if(strlen(info.itext.keys[i]) < 1) { encoder->error = 67; /*text chunk too small*/ break; } addChunk_iTXt(&outv, encoder->settings.text_compression, info.itext.keys[i], info.itext.langtags[i], info.itext.transkeys[i], info.itext.strings[i], &encoder->settings.zlibsettings); } #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS /*unknown chunks between IDAT and IEND*/ if(info.unknown_chunks.data[2]) { encoder->error = addUnknownChunks(&outv, info.unknown_chunks.data[2], info.unknown_chunks.datasize[2]); if(encoder->error) break; } #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ /*IEND*/ addChunk_IEND(&outv); break; /*this isn't really a while loop; no error happened so break out now!*/ } free(data); /*instead of cleaning the vector up, give it to the output*/ *out = outv.data; *outsize = outv.size; } unsigned LodePNG_encode(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth) { unsigned error; LodePNG_Encoder encoder; LodePNG_Encoder_init(&encoder); encoder.infoRaw.color.colorType = colorType; encoder.infoRaw.color.bitDepth = bitDepth; encoder.infoPng.color.colorType = colorType; encoder.infoPng.color.bitDepth = bitDepth; LodePNG_Encoder_encode(&encoder, out, outsize, image, w, h); error = encoder.error; LodePNG_Encoder_cleanup(&encoder); return error; } unsigned LodePNG_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) { return LodePNG_encode(out, outsize, image, w, h, 6, 8); } unsigned LodePNG_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) { return LodePNG_encode(out, outsize, image, w, h, 2, 8); } #ifdef LODEPNG_COMPILE_DISK unsigned LodePNG_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth) { unsigned char* buffer; size_t buffersize; unsigned error = LodePNG_encode(&buffer, &buffersize, image, w, h, colorType, bitDepth); if(!error) error = LodePNG_saveFile(buffer, buffersize, filename); free(buffer); return error; } unsigned LodePNG_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) { return LodePNG_encode_file(filename, image, w, h, 6, 8); } unsigned LodePNG_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) { return LodePNG_encode_file(filename, image, w, h, 2, 8); } #endif /*LODEPNG_COMPILE_DISK*/ void LodePNG_EncodeSettings_init(LodePNG_EncodeSettings* settings) { LodePNG_CompressSettings_init(&settings->zlibsettings); settings->bruteForceFilters = 0; settings->autoLeaveOutAlphaChannel = 1; settings->force_palette = 0; #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS settings->add_id = 1; settings->text_compression = 0; #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ } void LodePNG_Encoder_init(LodePNG_Encoder* encoder) { LodePNG_EncodeSettings_init(&encoder->settings); LodePNG_InfoPng_init(&encoder->infoPng); LodePNG_InfoRaw_init(&encoder->infoRaw); encoder->error = 1; } void LodePNG_Encoder_cleanup(LodePNG_Encoder* encoder) { LodePNG_InfoPng_cleanup(&encoder->infoPng); LodePNG_InfoRaw_cleanup(&encoder->infoRaw); } void LodePNG_Encoder_copy(LodePNG_Encoder* dest, const LodePNG_Encoder* source) { LodePNG_Encoder_cleanup(dest); *dest = *source; LodePNG_InfoPng_init(&dest->infoPng); LodePNG_InfoRaw_init(&dest->infoRaw); dest->error = LodePNG_InfoPng_copy(&dest->infoPng, &source->infoPng); if(dest->error) return; dest->error = LodePNG_InfoRaw_copy(&dest->infoRaw, &source->infoRaw); if(dest->error) return; } #endif /*LODEPNG_COMPILE_ENCODER*/ #endif /*LODEPNG_COMPILE_PNG*/ #ifdef LODEPNG_COMPILE_ERROR_TEXT /* This returns the description of a numerical error code in English. This is also the documentation of all the error codes. */ const char* LodePNG_error_text(unsigned code) { switch(code) { case 0: return "no error, everything went ok"; case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ case 13: return "problem while processing dynamic deflate block"; case 14: return "problem while processing dynamic deflate block"; case 15: return "problem while processing dynamic deflate block"; case 16: return "unexisting code while processing dynamic deflate block"; case 17: return "end of out buffer memory reached while inflating"; case 18: return "invalid distance code while inflating"; case 19: return "end of out buffer memory reached while inflating"; case 20: return "invalid deflate block BTYPE encountered while decoding"; case 21: return "NLEN is not ones complement of LEN in a deflate block"; /*end of out buffer memory reached while inflating: This can happen if the inflated deflate data is longer than the amount of bytes required to fill up all the pixels of the image, given the color depth and image dimensions. Something that doesn't happen in a normal, well encoded, PNG image.*/ case 22: return "end of out buffer memory reached while inflating"; case 23: return "end of in buffer memory reached while inflating"; case 24: return "invalid FCHECK in zlib header"; case 25: return "invalid compression method in zlib header"; case 26: return "FDICT encountered in zlib header while it's not used for PNG"; case 27: return "PNG file is smaller than a PNG header"; /*Checks the magic file header, the first 8 bytes of the PNG file*/ case 28: return "incorrect PNG signature, it's no PNG or corrupted"; case 29: return "first chunk is not the header chunk"; case 30: return "chunk length too large, chunk broken off at end of file"; case 31: return "illegal PNG color type or bpp"; case 32: return "illegal PNG compression method"; case 33: return "illegal PNG filter method"; case 34: return "illegal PNG interlace method"; case 35: return "chunk length of a chunk is too large or the chunk too small"; case 36: return "illegal PNG filter type encountered"; case 37: return "illegal bit depth for this color type given"; case 38: return "the palette is too big"; /*more than 256 colors*/ case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; case 40: return "tRNS chunk has wrong size for greyscale image"; case 41: return "tRNS chunk has wrong size for RGB image"; case 42: return "tRNS chunk appeared while it was not allowed for this color type"; case 43: return "bKGD chunk has wrong size for palette image"; case 44: return "bKGD chunk has wrong size for greyscale image"; case 45: return "bKGD chunk has wrong size for RGB image"; /*Is the palette too small?*/ case 46: return "a value in indexed image is larger than the palette size (bitdepth = 8)"; /*Is the palette too small?*/ case 47: return "a value in indexed image is larger than the palette size (bitdepth < 8)"; /*the input data is empty, maybe a PNG file doesn't exist or is in the wrong path*/ case 48: return "empty input or file doesn't exist"; case 49: return "jumped past memory while generating dynamic huffman tree"; case 50: return "jumped past memory while generating dynamic huffman tree"; case 51: return "jumped past memory while inflating huffman block"; case 52: return "jumped past memory while inflating"; case 53: return "size of zlib data too small"; /*jumped past tree while generating huffman tree, this could be when the tree will have more leaves than symbols after generating it out of the given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ case 55: return "jumped past tree while generating huffman tree"; case 56: return "given output image colorType or bitDepth not supported for color conversion"; case 57: return "invalid CRC encountered (checking CRC can be disabled)"; case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; case 59: return "conversion to unexisting color mode or color mode conversion not supported"; case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ case 62: return "conversion from RGB to greyscale not supported"; case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; case 73: return "invalid tIME chunk size"; case 74: return "invalid pHYs chunk size"; /*length could be wrong, or data chopped off*/ case 75: return "no null termination char found while decoding text chunk"; case 76: return "iTXt chunk too short to contain required bytes"; case 77: return "integer overflow in buffer size"; case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ case 79: return "failed to open file for writing"; case 80: return "tried creating a tree of 0 symbols"; case 81: return "lazy matching at pos 0 is impossible"; default: ; /*nothing to do here, checks for other error values are below*/ } if(code >= 9900 && code <= 9999) return "memory allocation failed"; return "unknown error code"; } #endif /*LODEPNG_COMPILE_ERROR_TEXT*/ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ /* // End of PNG related code. Begin of C++ wrapper. // */ /* ////////////////////////////////////////////////////////////////////////// */ /* ////////////////////////////////////////////////////////////////////////// */ #ifdef __cplusplus namespace LodePNG { #ifdef LODEPNG_COMPILE_DISK void loadFile(std::vector& buffer, const std::string& filename) { std::ifstream file(filename.c_str(), std::ios::in|std::ios::binary|std::ios::ate); /*get filesize*/ std::streamsize size = 0; if(file.seekg(0, std::ios::end).good()) size = file.tellg(); if(file.seekg(0, std::ios::beg).good()) size -= file.tellg(); /*read contents of the file into the vector*/ buffer.resize(size_t(size)); if(size > 0) file.read((char*)(&buffer[0]), size); } /*write given buffer to the file, overwriting the file, it doesn't append to it.*/ void saveFile(const std::vector& buffer, const std::string& filename) { std::ofstream file(filename.c_str(), std::ios::out|std::ios::binary); file.write(buffer.empty() ? 0 : (char*)&buffer[0], std::streamsize(buffer.size())); } #endif //LODEPNG_COMPILE_DISK /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_ZLIB #ifdef LODEPNG_COMPILE_DECODER unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, const LodePNG_DecompressSettings& settings) { unsigned char* buffer = 0; size_t buffersize = 0; unsigned error = LodePNG_zlib_decompress(&buffer, &buffersize, in, insize, &settings); if(buffer) { out.insert(out.end(), &buffer[0], &buffer[buffersize]); free(buffer); } return error; } unsigned decompress(std::vector& out, const std::vector& in, const LodePNG_DecompressSettings& settings) { return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); } #endif //LODEPNG_COMPILE_DECODER #ifdef LODEPNG_COMPILE_ENCODER unsigned compress(std::vector& out, const unsigned char* in, size_t insize, const LodePNG_CompressSettings& settings) { unsigned char* buffer = 0; size_t buffersize = 0; unsigned error = LodePNG_zlib_compress(&buffer, &buffersize, in, insize, &settings); if(buffer) { out.insert(out.end(), &buffer[0], &buffer[buffersize]); free(buffer); } return error; } unsigned compress(std::vector& out, const std::vector& in, const LodePNG_CompressSettings& settings) { return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); } #endif //LODEPNG_COMPILE_ENCODER #endif //LODEPNG_COMPILE_ZLIB #ifdef LODEPNG_COMPILE_PNG #ifdef LODEPNG_COMPILE_DECODER Decoder::Decoder() { LodePNG_Decoder_init(this); } Decoder::~Decoder() { LodePNG_Decoder_cleanup(this); } void Decoder::operator=(const LodePNG_Decoder& other) { LodePNG_Decoder_copy(this, &other); } bool Decoder::hasError() const { return error != 0; } unsigned Decoder::getError() const { return error; } unsigned Decoder::getWidth() const { return infoPng.width; } unsigned Decoder::getHeight() const { return infoPng.height; } unsigned Decoder::getBpp() { return LodePNG_InfoColor_getBpp(&infoPng.color); } unsigned Decoder::getChannels() { return LodePNG_InfoColor_getChannels(&infoPng.color); } unsigned Decoder::isGreyscaleType() { return LodePNG_InfoColor_isGreyscaleType(&infoPng.color); } unsigned Decoder::isAlphaType() { return LodePNG_InfoColor_isAlphaType(&infoPng.color); } void Decoder::decode(std::vector& out, const unsigned char* in, size_t insize) { unsigned char* buffer; size_t buffersize; LodePNG_Decoder_decode(this, &buffer, &buffersize, in, insize); if(buffer) { out.insert(out.end(), &buffer[0], &buffer[buffersize]); free(buffer); } } void Decoder::decode(std::vector& out, const std::vector& in) { decode(out, in.empty() ? 0 : &in[0], in.size()); } void Decoder::inspect(const unsigned char* in, size_t insize) { LodePNG_Decoder_inspect(this, in, insize); } void Decoder::inspect(const std::vector& in) { inspect(in.empty() ? 0 : &in[0], in.size()); } const LodePNG_DecodeSettings& Decoder::getSettings() const { return settings; } LodePNG_DecodeSettings& Decoder::getSettings() { return settings; } void Decoder::setSettings(const LodePNG_DecodeSettings& settings) { this->settings = settings; } const LodePNG_InfoPng& Decoder::getInfoPng() const { return infoPng; } LodePNG_InfoPng& Decoder::getInfoPng() { return infoPng; } void Decoder::setInfoPng(const LodePNG_InfoPng& info) { error = LodePNG_InfoPng_copy(&this->infoPng, &info); } void Decoder::swapInfoPng(LodePNG_InfoPng& info) { LodePNG_InfoPng_swap(&this->infoPng, &info); } const LodePNG_InfoRaw& Decoder::getInfoRaw() const { return infoRaw; } LodePNG_InfoRaw& Decoder::getInfoRaw() { return infoRaw; } void Decoder::setInfoRaw(const LodePNG_InfoRaw& info) { error = LodePNG_InfoRaw_copy(&this->infoRaw, &info); } #endif //LODEPNG_COMPILE_DECODER /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_ENCODER Encoder::Encoder() { LodePNG_Encoder_init(this); } Encoder::~Encoder() { LodePNG_Encoder_cleanup(this); } void Encoder::operator=(const LodePNG_Encoder& other) { LodePNG_Encoder_copy(this, &other); } bool Encoder::hasError() const { return error != 0; } unsigned Encoder::getError() const { return error; } void Encoder::encode(std::vector& out, const unsigned char* image, unsigned w, unsigned h) { unsigned char* buffer; size_t buffersize; LodePNG_Encoder_encode(this, &buffer, &buffersize, image, w, h); if(buffer) { out.insert(out.end(), &buffer[0], &buffer[buffersize]); free(buffer); } } void Encoder::encode(std::vector& out, const std::vector& image, unsigned w, unsigned h) { encode(out, image.empty() ? 0 : &image[0], w, h); } void Encoder::clearPalette() { LodePNG_InfoColor_clearPalette(&infoPng.color); } void Encoder::addPalette(unsigned char r, unsigned char g, unsigned char b, unsigned char a) { error = LodePNG_InfoColor_addPalette(&infoPng.color, r, g, b, a); } #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS void Encoder::clearText() { LodePNG_Text_clear(&infoPng.text); } void Encoder::addText(const std::string& key, const std::string& str) { error = LodePNG_Text_add(&infoPng.text, key.c_str(), str.c_str()); } void Encoder::clearIText() { LodePNG_IText_clear(&infoPng.itext); } void Encoder::addIText(const std::string& key, const std::string& langtag, const std::string& transkey, const std::string& str) { error = LodePNG_IText_add(&infoPng.itext, key.c_str(), langtag.c_str(), transkey.c_str(), str.c_str()); } #endif //LODEPNG_COMPILE_ANCILLARY_CHUNKS const LodePNG_EncodeSettings& Encoder::getSettings() const { return settings; } LodePNG_EncodeSettings& Encoder::getSettings() { return settings; } void Encoder::setSettings(const LodePNG_EncodeSettings& settings) { this->settings = settings; } const LodePNG_InfoPng& Encoder::getInfoPng() const { return infoPng; } LodePNG_InfoPng& Encoder::getInfoPng() { return infoPng; } void Encoder::setInfoPng(const LodePNG_InfoPng& info) { error = LodePNG_InfoPng_copy(&this->infoPng, &info); } void Encoder::swapInfoPng(LodePNG_InfoPng& info) { LodePNG_InfoPng_swap(&this->infoPng, &info); } const LodePNG_InfoRaw& Encoder::getInfoRaw() const { return infoRaw; } LodePNG_InfoRaw& Encoder::getInfoRaw() { return infoRaw; } void Encoder::setInfoRaw(const LodePNG_InfoRaw& info) { error = LodePNG_InfoRaw_copy(&this->infoRaw, &info); } #endif //LODEPNG_COMPILE_ENCODER /* ////////////////////////////////////////////////////////////////////////// */ #ifdef LODEPNG_COMPILE_DECODER unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, size_t insize, unsigned colorType, unsigned bitDepth) { Decoder decoder; decoder.getInfoRaw().color.colorType = colorType; decoder.getInfoRaw().color.bitDepth = bitDepth; decoder.decode(out, in, insize); w = decoder.getWidth(); h = decoder.getHeight(); return decoder.getError(); } unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::vector& in, unsigned colorType, unsigned bitDepth) { return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colorType, bitDepth); } #ifdef LODEPNG_COMPILE_DISK unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, unsigned colorType, unsigned bitDepth) { std::vector buffer; loadFile(buffer, filename); return decode(out, w, h, buffer, colorType, bitDepth); } #endif //LODEPNG_COMPILE_DECODER #endif //LODEPNG_COMPILE_DISK #ifdef LODEPNG_COMPILE_ENCODER unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth) { Encoder encoder; encoder.getInfoRaw().color.colorType = colorType; encoder.getInfoRaw().color.bitDepth = bitDepth; encoder.getInfoPng().color.colorType = colorType; encoder.getInfoPng().color.bitDepth = bitDepth; encoder.encode(out, in, w, h); return encoder.getError(); } unsigned encode(std::vector& out, const std::vector& in, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth) { return encode(out, in.empty() ? 0 : &in[0], w, h, colorType, bitDepth); } #ifdef LODEPNG_COMPILE_DISK unsigned encode(const std::string& filename, const unsigned char* in, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth) { std::vector buffer; Encoder encoder; encoder.getInfoRaw().color.colorType = colorType; encoder.getInfoRaw().color.bitDepth = bitDepth; encoder.encode(buffer, in, w, h); if(!encoder.hasError()) saveFile(buffer, filename); return encoder.getError(); } unsigned encode(const std::string& filename, const std::vector& in, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth) { return encode(filename, in.empty() ? 0 : &in[0], w, h, colorType, bitDepth); } #endif //LODEPNG_COMPILE_DISK #endif //LODEPNG_COMPILE_ENCODER #endif //LODEPNG_COMPILE_PNG } //namespace LodePNG #endif /*__cplusplus C++ RAII wrapper*/ openscad-2013.01+dfsg.orig/tests/csgtestcore.cc0000644000175000017500000002745112041375121020733 0ustar chrysnchrysn// csg test core, used by throwntegether test and opencsg test #include "csgtestcore.h" #include "tests-common.h" #include "system-gl.h" #include "openscad.h" #include "parsersettings.h" #include "builtin.h" #include "context.h" #include "node.h" #include "module.h" #include "polyset.h" #include "Tree.h" #include "CSGTermEvaluator.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #include #include "OpenCSGRenderer.h" #include "ThrownTogetherRenderer.h" #include "csgterm.h" #include "csgtermnormalizer.h" #include "OffscreenView.h" #include #include #include #include #include #include namespace po = boost::program_options; namespace fs = boost::filesystem; #include "boosty.h" using std::string; using std::vector; using std::cerr; using std::cout; std::string commandline_commands; //#define DEBUG class CsgInfo { public: CsgInfo(); shared_ptr root_norm_term; // Normalized CSG products class CSGChain *root_chain; std::vector > highlight_terms; CSGChain *highlights_chain; std::vector > background_terms; CSGChain *background_chain; OffscreenView *glview; }; CsgInfo::CsgInfo() { root_chain = NULL; highlights_chain = NULL; background_chain = NULL; glview = NULL; } AbstractNode *find_root_tag(AbstractNode *n) { foreach(AbstractNode *v, n->children) { if (v->modinst->tag_root) return v; if (AbstractNode *vroot = find_root_tag(v)) return vroot; } return NULL; } string info_dump(OffscreenView *glview) { assert(glview); #ifdef __GNUG__ #define compiler_info "GCC " << __VERSION__ #elif defined(_MSC_VER) #define compiler_info "MSVC " << _MSC_FULL_VER #else #define compiler_info "unknown compiler" #endif #ifndef OPENCSG_VERSION_STRING #define OPENCSG_VERSION_STRING "unknown, <1.3.2" #endif std::stringstream out; #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) out << "\nOpenSCAD Version: " << TOSTRING(OPENSCAD_VERSION) << "\nCompiled by: " << compiler_info << "\nCompile date: " << __DATE__ << "\nBoost version: " << BOOST_LIB_VERSION << "\nEigen version: " << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." << EIGEN_MINOR_VERSION << "\nCGAL version: " << TOSTRING(CGAL_VERSION) << "\nOpenCSG version: " << OPENCSG_VERSION_STRING << "\n" << glview->getInfo() << "\n"; return out.str(); } po::variables_map parse_options(int argc, char *argv[]) { po::options_description desc("Allowed options"); desc.add_options() ("help,h", "help message")//; ("info,i", "information on GLEW, OpenGL, OpenSCAD, and OS")//; // po::options_description hidden("Hidden options"); // hidden.add_options() ("input-file", po::value< vector >(), "input file") ("output-file", po::value< vector >(), "output file"); po::positional_options_description p; p.add("input-file", 1).add("output-file", 1); po::options_description all_options; all_options.add(desc); // .add(hidden); po::variables_map vm; po::store(po::command_line_parser(argc, argv).options(all_options).positional(p).run(), vm); po::notify(vm); return vm; } void enable_opencsg_shaders( OffscreenView *glview ) { bool ignore_gl_version = true; const char *openscad_disable_gl20_env = getenv("OPENSCAD_DISABLE_GL20"); if (openscad_disable_gl20_env && !strcmp(openscad_disable_gl20_env, "0")) openscad_disable_gl20_env = NULL; if (glewIsSupported("GL_VERSION_2_0") && openscad_disable_gl20_env == NULL ) { const char *vs_source = "uniform float xscale, yscale;\n" "attribute vec3 pos_b, pos_c;\n" "attribute vec3 trig, mask;\n" "varying vec3 tp, tr;\n" "varying float shading;\n" "void main() {\n" " vec4 p0 = gl_ModelViewProjectionMatrix * gl_Vertex;\n" " vec4 p1 = gl_ModelViewProjectionMatrix * vec4(pos_b, 1.0);\n" " vec4 p2 = gl_ModelViewProjectionMatrix * vec4(pos_c, 1.0);\n" " float a = distance(vec2(xscale*p1.x/p1.w, yscale*p1.y/p1.w), vec2(xscale*p2.x/p2.w, yscale*p2.y/p2.w));\n" " float b = distance(vec2(xscale*p0.x/p0.w, yscale*p0.y/p0.w), vec2(xscale*p1.x/p1.w, yscale*p1.y/p1.w));\n" " float c = distance(vec2(xscale*p0.x/p0.w, yscale*p0.y/p0.w), vec2(xscale*p2.x/p2.w, yscale*p2.y/p2.w));\n" " float s = (a + b + c) / 2.0;\n" " float A = sqrt(s*(s-a)*(s-b)*(s-c));\n" " float ha = 2.0*A/a;\n" " gl_Position = p0;\n" " tp = mask * ha;\n" " tr = trig;\n" " vec3 normal, lightDir;\n" " normal = normalize(gl_NormalMatrix * gl_Normal);\n" " lightDir = normalize(vec3(gl_LightSource[0].position));\n" " shading = abs(dot(normal, lightDir));\n" "}\n"; const char *fs_source = "uniform vec4 color1, color2;\n" "varying vec3 tp, tr, tmp;\n" "varying float shading;\n" "void main() {\n" " gl_FragColor = vec4(color1.r * shading, color1.g * shading, color1.b * shading, color1.a);\n" " if (tp.x < tr.x || tp.y < tr.y || tp.z < tr.z)\n" " gl_FragColor = color2;\n" "}\n"; GLuint vs = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vs, 1, (const GLchar**)&vs_source, NULL); glCompileShader(vs); GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fs, 1, (const GLchar**)&fs_source, NULL); glCompileShader(fs); GLuint edgeshader_prog = glCreateProgram(); glAttachShader(edgeshader_prog, vs); glAttachShader(edgeshader_prog, fs); glLinkProgram(edgeshader_prog); glview->shaderinfo[0] = edgeshader_prog; glview->shaderinfo[1] = glGetUniformLocation(edgeshader_prog, "color1"); glview->shaderinfo[2] = glGetUniformLocation(edgeshader_prog, "color2"); glview->shaderinfo[3] = glGetAttribLocation(edgeshader_prog, "trig"); glview->shaderinfo[4] = glGetAttribLocation(edgeshader_prog, "pos_b"); glview->shaderinfo[5] = glGetAttribLocation(edgeshader_prog, "pos_c"); glview->shaderinfo[6] = glGetAttribLocation(edgeshader_prog, "mask"); glview->shaderinfo[7] = glGetUniformLocation(edgeshader_prog, "xscale"); glview->shaderinfo[8] = glGetUniformLocation(edgeshader_prog, "yscale"); GLenum err = glGetError(); if (err != GL_NO_ERROR) { fprintf(stderr, "OpenGL Error: %s\n", gluErrorString(err)); } GLint status; glGetProgramiv(edgeshader_prog, GL_LINK_STATUS, &status); if (status == GL_FALSE) { int loglen; char logbuffer[1000]; glGetProgramInfoLog(edgeshader_prog, sizeof(logbuffer), &loglen, logbuffer); fprintf(stderr, "OpenGL Program Linker Error:\n%.*s", loglen, logbuffer); } else { int loglen; char logbuffer[1000]; glGetProgramInfoLog(edgeshader_prog, sizeof(logbuffer), &loglen, logbuffer); if (loglen > 0) { fprintf(stderr, "OpenGL Program Link OK:\n%.*s", loglen, logbuffer); } glValidateProgram(edgeshader_prog); glGetProgramInfoLog(edgeshader_prog, sizeof(logbuffer), &loglen, logbuffer); if (loglen > 0) { fprintf(stderr, "OpenGL Program Validation results:\n%.*s", loglen, logbuffer); } } } glview->shaderinfo[9] = glview->width; glview->shaderinfo[10] = glview->height; } int csgtestcore(int argc, char *argv[], test_type_e test_type) { bool sysinfo_dump = false; const char *filename, *outfilename = NULL; po::variables_map vm; try { vm = parse_options(argc, argv); } catch ( po::error e ) { cerr << "error parsing options\n"; } if (vm.count("info")) sysinfo_dump = true; if (vm.count("input-file")) filename = vm["input-file"].as< vector >().begin()->c_str(); if (vm.count("output-file")) outfilename = vm["output-file"].as< vector >().begin()->c_str(); if ((!filename || !outfilename) && !sysinfo_dump) { cerr << "Usage: " << argv[0] << " \n"; exit(1); } Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); std::string currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; if (sysinfo_dump) root_module = parse("sphere();","",false); else root_module = parsefile(filename); if (!root_module) { exit(1); } if (!sysinfo_dump) { if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } } AbstractNode::resetIndexCounter(); AbstractNode *absolute_root_node = root_module->evaluate(&root_ctx, &root_inst); AbstractNode *root_node; // Do we have an explicit root node (! modifier)? if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node; Tree tree(root_node); CsgInfo csgInfo = CsgInfo(); CGALEvaluator cgalevaluator(tree); CSGTermEvaluator evaluator(tree, &cgalevaluator.psevaluator); shared_ptr root_raw_term = evaluator.evaluateCSGTerm(*root_node, csgInfo.highlight_terms, csgInfo.background_terms); if (!root_raw_term) { cerr << "Error: CSG generation failed! (no top level object found)\n"; return 1; } // CSG normalization CSGTermNormalizer normalizer(5000); csgInfo.root_norm_term = normalizer.normalize(root_raw_term); if (csgInfo.root_norm_term) { csgInfo.root_chain = new CSGChain(); csgInfo.root_chain->import(csgInfo.root_norm_term); fprintf(stderr, "Normalized CSG tree has %d elements\n", int(csgInfo.root_chain->polysets.size())); } else { csgInfo.root_chain = NULL; fprintf(stderr, "WARNING: CSG normalization resulted in an empty tree\n"); } if (csgInfo.highlight_terms.size() > 0) { cerr << "Compiling highlights (" << csgInfo.highlight_terms.size() << " CSG Trees)...\n"; csgInfo.highlights_chain = new CSGChain(); for (unsigned int i = 0; i < csgInfo.highlight_terms.size(); i++) { csgInfo.highlight_terms[i] = normalizer.normalize(csgInfo.highlight_terms[i]); csgInfo.highlights_chain->import(csgInfo.highlight_terms[i]); } } if (csgInfo.background_terms.size() > 0) { cerr << "Compiling background (" << csgInfo.background_terms.size() << " CSG Trees)...\n"; csgInfo.background_chain = new CSGChain(); for (unsigned int i = 0; i < csgInfo.background_terms.size(); i++) { csgInfo.background_terms[i] = normalizer.normalize(csgInfo.background_terms[i]); csgInfo.background_chain->import(csgInfo.background_terms[i]); } } fs::current_path(original_path); try { csgInfo.glview = new OffscreenView(512,512); } catch (int error) { fprintf(stderr,"Can't create OpenGL OffscreenView. Code: %i. Exiting.\n", error); exit(1); } enable_opencsg_shaders(csgInfo.glview); if (sysinfo_dump) cout << info_dump(csgInfo.glview); Vector3d center(0,0,0); double radius = 1.0; if (csgInfo.root_chain) { BoundingBox bbox = csgInfo.root_chain->getBoundingBox(); center = (bbox.min() + bbox.max()) / 2; radius = (bbox.max() - bbox.min()).norm() / 2; } Vector3d cameradir(1, 1, -0.5); Vector3d camerapos = center - radius*1.8*cameradir; csgInfo.glview->setCamera(camerapos, center); OpenCSGRenderer opencsgRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain, csgInfo.glview->shaderinfo); ThrownTogetherRenderer thrownTogetherRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain); if (test_type == TEST_THROWNTOGETHER) csgInfo.glview->setRenderer(&thrownTogetherRenderer); else csgInfo.glview->setRenderer(&opencsgRenderer); OpenCSG::setContext(0); OpenCSG::setOption(OpenCSG::OffscreenSetting, OpenCSG::FrameBufferObject); csgInfo.glview->paintGL(); csgInfo.glview->save(outfilename); delete root_node; delete root_module; Builtins::instance(true); return 0; } openscad-2013.01+dfsg.orig/tests/CSGTextCache.h0000644000175000017500000000105411664172104020452 0ustar chrysnchrysn#ifndef CSGTEXTCACHE_H_ #define CSGTEXTCACHE_H_ #include "Tree.h" #include #include using std::string; class CSGTextCache { public: CSGTextCache(const Tree &tree) : tree(tree) {} ~CSGTextCache() {} bool contains(const AbstractNode &node) const; string operator[](const AbstractNode &node) const; void insert(const class AbstractNode &node, const string & value); void remove(const class AbstractNode &node); void clear(); private: boost::unordered_map cache; const Tree &tree; }; #endif openscad-2013.01+dfsg.orig/tests/CMakeLists.txt0000644000175000017500000006743512076022157020653 0ustar chrysnchrysn# instructions - see ../doc/testing.txt cmake_minimum_required(VERSION 2.8) if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_GREATER 2.8.3) # Explicitly use new include policy to avoid globally shadowing included modules # http://www.cmake.org/cmake/help/cmake-2-8-docs.html#policy:CMP0017 cmake_policy(SET CMP0017 NEW) endif() # Detect Lion and force gcc IF (APPLE) EXECUTE_PROCESS(COMMAND sw_vers -productVersion OUTPUT_VARIABLE MACOSX_VERSION) IF (NOT ${MACOSX_VERSION} VERSION_LESS "10.7.0") message("Detected Lion or later") set(CMAKE_C_COMPILER "gcc") set(CMAKE_CXX_COMPILER "g++") ELSE() message("Detected Snow Leopard or older") if (USE_LLVM) message("Using LLVM compiler") set(CMAKE_C_COMPILER "llvm-gcc") set(CMAKE_CXX_COMPILER "llvm-g++") endif() ENDIF() ENDIF(APPLE) project(tests) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}") # Build debug build as default if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing") endif() if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUG") endif() # # Windows # if(WIN32 AND MSVC) set(WIN32_STATIC_BUILD "True") endif() if(WIN32_STATIC_BUILD AND MSVC) if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(EMSG "\nTo build Win32 STATIC OpenSCAD please see doc/testing.txt") message(FATAL_ERROR ${EMSG}) endif() endif() # Disable warnings if(WIN32 AND MSVC) # too long decorated names set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4503") # int cast to bool in CGAL set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800") # unreferenced parameters in CGAL set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4100") # fopen_s advertisement set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_DEPRECATE") # lexer uses strdup & other POSIX stuff set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_NONSTDC_NO_DEPRECATE") # M_PI set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_USE_MATH_DEFINES") endif() # Debugging - if you uncomment, use nmake -f Makefile > log.txt (the log is big) if(WIN32 AND MSVC) # Linker debugging #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -VERBOSE") # Compiler debugging # you have to pass -DCMAKE_VERBOSE_MAKEFILE=ON to cmake when you run it. endif() if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -frounding-math") endif() # Clang compiler if(CMAKE_CXX_COMPILER MATCHES ".*clang.*") # disable enormous amount of warnings about CGAL set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-function") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++11-extensions") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare") endif() # # Build test apps # function(inclusion user_set_path found_paths) # If user_set_path indicates an env. variable was specifically # set by the user, then found_paths become an include priority (prepend); # otherwise found_paths are stuck on the end of the include flags (append). # message(STATUS "inclusion ${user_set_path} ${found_paths}") # message(STATUS "inclusion ${${user_set_path}} ${${found_paths}}") set( inclusion_match 0 ) foreach( found_path ${${found_paths}} ) if (${found_path} MATCHES ${${user_set_path}}.*) set( inclusion_match 1 ) endif() endforeach() if (user_set_path AND inclusion_match) include_directories(BEFORE ${${found_paths}}) # message(STATUS "inclusion prepend ${${found_paths}} for ${user_set_path}") else() include_directories(AFTER ${${found_paths}}) # message(STATUS "inclusion append ${${found_paths}} for ${user_set_path}") endif() set( inclusion_match 0 ) endfunction() # Boost # # FindBoost.cmake has been included from Cmake's GIT circa the end of 2011 # because most existing installs of cmake had a buggy older version. # # Update this if FindBoost.cmake gets out of sync with the current boost release # set(Boost_ADDITIONAL_VERSIONS "1.47.0" "1.46.0") if (WIN32) set(Boost_USE_STATIC_LIBS TRUE) set(BOOST_STATIC TRUE) set(BOOST_THREAD_USE_LIB TRUE) endif() if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") set(BOOST_ROOT "$ENV{OPENSCAD_LIBRARIES}") if (EXISTS ${BOOST_ROOT}/include/boost) # if boost is under OPENSCAD_LIBRARIES, then # don't look in the system paths (workaround FindBoost.cmake bug) set(Boost_NO_SYSTEM_PATHS "TRUE") message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) endif() endif() if (NOT $ENV{BOOSTDIR} STREQUAL "") set(BOOST_ROOT "$ENV{BOOSTDIR}") set(Boost_NO_SYSTEM_PATHS "TRUE") set(Boost_DEBUG TRUE) message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) endif() find_package( Boost 1.35.0 COMPONENTS thread program_options filesystem system regex REQUIRED) message(STATUS "Boost includes found: " ${Boost_INCLUDE_DIRS}) message(STATUS "Boost libraries found:") foreach(boostlib ${Boost_LIBRARIES}) message(STATUS " " ${boostlib}) endforeach() inclusion(BOOST_ROOT Boost_INCLUDE_DIRS) add_definitions(-DBOOST_FILESYSTEM_VERSION=3) # Use V3 for boost 1.44-1.45 # Mac OS X if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") FIND_LIBRARY(COCOA_LIBRARY Cocoa REQUIRED) endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # Qt4 set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) find_package(OpenGL REQUIRED) if (MINGW_CROSS_ENV_DIR) mingw_cross_env_find_qt() mingw_cross_env_info() include_directories( ${QT_INCLUDE_DIRS} ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${QT_CFLAGS_OTHER}") else() find_package(Qt4 COMPONENTS QtCore REQUIRED) include(${QT_USE_FILE}) endif() set(CMAKE_INCLUDE_DIRECTORIES_BEFORE OFF) # Eigen # Turn off Eigen SIMD optimization if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_ALIGN") endif() endif() # Priority # 3. EIGENDIR if set (EIGEN2DIR for backwards compatability) # 1. OPENSCAD_LIBRARIES eigen3 # 2. OPENSCAD_LIBRARIES eigen2 # 4. system's standard include paths for eigen3 # 5. system's standard include paths for eigen2 set(EIGEN2_DIR "$ENV{EIGEN2DIR}") set(EIGEN_DIR "$ENV{EIGENDIR}") set(OPENSCAD_LIBDIR "$ENV{OPENSCAD_LIBRARIES}") if (EIGEN_DIR) set(EIGHINT ${EIGEN_DIR}/include/eigen3 ${EIGEN_DIR}/include/eigen2 ${EIGEN_DIR}) find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${EIGHINT}) endif() if (EIGEN2_DIR) find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${EIGEN2_DIR}/include/eigen2 ${EIGEN2_DIR}) endif() if (NOT EIGEN_INCLUDE_DIR) find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${OPENSCAD_LIBDIR}/include/eigen3) endif() if (NOT EIGEN_INCLUDE_DIR) find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${OPENSCAD_LIBDIR}/include/eigen2) endif() if (NOT EIGEN_INCLUDE_DIR) if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/local/include/eigen3) elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/pkg/include/eigen3) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /opt/local/include/eigen3) else() find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/include/eigen3) endif() endif() if (NOT EIGEN_INCLUDE_DIR) if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/local/include/eigen2) elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/pkg/include/eigen2) elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /opt/local/include/eigen2) else() find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/include/eigen2) endif() endif() if (NOT EIGEN_INCLUDE_DIR) message(STATUS "Eigen not found") else() message(STATUS "Eigen found in " ${EIGEN_INCLUDE_DIR}) inclusion(EIGEN_DIR EIGEN_INCLUDE_DIR) endif() # OpenCSG if (NOT $ENV{OPENCSGDIR} STREQUAL "") set(OPENCSG_DIR "$ENV{OPENCSGDIR}") elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") set(OPENCSG_DIR "$ENV{OPENSCAD_LIBRARIES}") endif() if (NOT OPENCSG_INCLUDE_DIR) message(STATUS "OPENCSG_DIR: " ${OPENCSG_DIR}) find_path(OPENCSG_INCLUDE_DIR opencsg.h HINTS ${OPENCSG_DIR}/include) find_library(OPENCSG_LIBRARY opencsg HINTS ${OPENCSG_DIR}/lib) if (NOT OPENCSG_INCLUDE_DIR OR NOT OPENCSG_LIBRARY) message(FATAL_ERROR "OpenCSG not found") else() message(STATUS "OpenCSG include found in " ${OPENCSG_INCLUDE_DIR}) message(STATUS "OpenCSG library found in " ${OPENCSG_LIBRARY}) endif() endif() inclusion(OPENCSG_DIR OPENCSG_INCLUDE_DIR) # GLEW if(WIN32_STATIC_BUILD) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGLEW_STATIC") endif() if (NOT $ENV{GLEWDIR} STREQUAL "") set(GLEW_DIR "$ENV{GLEWDIR}") elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") set(GLEW_DIR "$ENV{OPENSCAD_LIBRARIES}") endif() if (NOT GLEW_INCLUDE_DIR) message(STATUS "OPENCSG_DIR: " ${OPENCSG_DIR}) find_path(GLEW_INCLUDE_DIR GL/glew.h HINTS ${GLEW_DIR}/include NO_DEFAULT_PATH) find_library(GLEW_LIBRARY NAMES GLEW glew HINTS ${GLEW_DIR}/lib ${GLEW_DIR}/lib64 NO_DEFAULT_PATH) if (NOT GLEW_LIBRARY) find_package(GLEW REQUIRED) if (NOT GLEW_LIBRARY) message(FATAL_ERROR "GLEW not found") endif() endif() message(STATUS "GLEW include: " ${GLEW_INCLUDE_DIR}) message(STATUS "GLEW library: " ${GLEW_LIBRARY}) endif() inclusion(GLEW_DIR GLEW_INCLUDE_DIR) # Flex/Bison find_package(BISON REQUIRED) if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") # FreeBSD has an old flex in /usr/bin and a new flex in /usr/local/bin set(FLEX_EXECUTABLE /usr/local/bin/flex) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") include_directories( /usr/pkg/include /usr/X11R7/include ) set(FLEX_EXECUTABLE /usr/pkg/bin/flex) endif() find_package(FLEX REQUIRED) # The COMPILE_FLAGS and forced C++ compiler is just to be compatible with qmake if (WIN32) set(FLEX_UNISTD_FLAG "-DYY_NO_UNISTD_H") endif() FLEX_TARGET(OpenSCADlexer ../src/lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp COMPILE_FLAGS "-Plexer ${FLEX_UNISTD_FLAG}") BISON_TARGET(OpenSCADparser ../src/parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser_yacc.c COMPILE_FLAGS "-p parser") ADD_FLEX_BISON_DEPENDENCY(OpenSCADlexer OpenSCADparser) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/parser_yacc.c PROPERTIES LANGUAGE "CXX") # CGAL if (NOT $ENV{CGALDIR} STREQUAL "") set(CGAL_DIR "$ENV{CGALDIR}") elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") if (EXISTS "$ENV{OPENSCAD_LIBRARIES}/lib/CGAL") set(CGAL_DIR "$ENV{OPENSCAD_LIBRARIES}/lib/CGAL") set(CMAKE_MODULE_PATH "${CGAL_DIR}") elseif (EXISTS "$ENV{OPENSCAD_LIBRARIES}/include/CGAL") set(CGAL_DIR "$ENV{OPENSCAD_LIBRARIES}") set(CMAKE_MODULE_PATH "${CGAL_DIR}") endif() endif() message(STATUS "CGAL_DIR: " ${CGAL_DIR}) find_package(CGAL REQUIRED) message(STATUS "CGAL config found in " ${CGAL_USE_FILE} ) foreach(cgal_incdir ${CGAL_INCLUDE_DIRS}) message(STATUS "CGAL include found in " ${cgal_incdir} ) endforeach() message(STATUS "CGAL libraries found in " ${CGAL_LIBRARIES_DIR} ) if("${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}" VERSION_LESS 3.6) message(FATAL_ERROR "CGAL >= 3.6 required") endif() inclusion(CGAL_DIR CGAL_INCLUDE_DIRS) # Imagemagick if (NOT SKIP_IMAGEMAGICK) find_package(ImageMagick COMPONENTS convert) if (ImageMagick_convert_FOUND) message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) else() message(FATAL_ERROR "Couldn't find imagemagick 'convert' program") endif() endif() # Internal includes include_directories(../src) add_definitions(-DOPENSCAD_VERSION=test -DOPENSCAD_YEAR=2011 -DOPENSCAD_MONTH=10) add_definitions(-DOPENSCAD_TESTING) set(CORE_SOURCES tests-common.cc ../src/parsersettings.cc ../src/mathc99.cc ../src/linalg.cc ../src/handle_dep.cc ../src/value.cc ../src/expr.cc ../src/func.cc ../src/module.cc ../src/ModuleCache.cc ../src/node.cc ../src/context.cc ../src/csgterm.cc ../src/csgtermnormalizer.cc ../src/polyset.cc ../src/csgops.cc ../src/transform.cc ../src/color.cc ../src/primitives.cc ../src/projection.cc ../src/cgaladv.cc ../src/surface.cc ../src/control.cc ../src/render.cc ../src/dxfdata.cc ../src/dxfdim.cc ../src/linearextrude.cc ../src/rotateextrude.cc ../src/printutils.cc ../src/progress.cc ${FLEX_OpenSCADlexer_OUTPUTS} ${BISON_OpenSCADparser_OUTPUTS}) set(NOCGAL_SOURCES ../src/builtin.cc ../src/dxftess.cc ../src/import.cc ../src/export.cc) set(CGAL_SOURCES ${NOCGAL_SOURCES} ../src/CSGTermEvaluator.cc ../src/CGAL_Nef_polyhedron.cc ../src/cgalutils.cc ../src/CGALEvaluator.cc ../src/CGALCache.cc ../src/PolySetCGALEvaluator.cc ../src/CGAL_Nef_polyhedron_DxfData.cc ../src/cgaladv_minkowski2.cc ../src/svg.cc) set(COMMON_SOURCES ../src/nodedumper.cc ../src/traverser.cc ../src/PolySetEvaluator.cc ../src/PolySetCache.cc ../src/Tree.cc lodepng.cpp) # # Offscreen OpenGL context source code # if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") message(STATUS "Offscreen OpenGL Context - using Apple CGL") set(OFFSCREEN_CTX_SOURCE "OffscreenContext.mm" CACHE TYPE STRING) elseif(UNIX) message(STATUS "Offscreen OpenGL Context - using Unix GLX") set(OFFSCREEN_CTX_SOURCE "OffscreenContextGLX.cc" CACHE TYPE STRING) elseif(WIN32) message(STATUS "Offscreen OpenGL Context - using Microsoft WGL") set(OFFSCREEN_CTX_SOURCE "OffscreenContextWGL.cc" CACHE TYPE STRING) endif() set(OFFSCREEN_SOURCES OffscreenView.cc ${OFFSCREEN_CTX_SOURCE} imageutils.cc fbo.cc system-gl.cc) add_library(tests-core STATIC ${CORE_SOURCES}) target_link_libraries(tests-core ${OPENGL_LIBRARY}) set(TESTS-CORE-LIBRARIES ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) add_library(tests-common STATIC ${COMMON_SOURCES}) target_link_libraries(tests-common tests-core) add_library(tests-cgal STATIC ${CGAL_SOURCES}) set_target_properties(tests-cgal PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(tests-cgal tests-common) set(TESTS-CGAL-LIBRARIES ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${GMP_LIBRARIES} ${MPFR_LIBRARIES} ${TESTS-CORE-LIBRARIES}) add_library(tests-nocgal STATIC ${NOCGAL_SOURCES}) target_link_libraries(tests-nocgal tests-common) add_library(tests-offscreen STATIC ${OFFSCREEN_SOURCES}) # set_target_properties(tests-offscreen PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") set(TESTS-NOCGAL-LIBRARIES ${TESTS-CORE-LIBRARIES}) # # echotest # add_executable(echotest echotest.cc) target_link_libraries(echotest tests-nocgal ${TESTS-NOCGAL-LIBRARIES}) # # dumptest # add_executable(dumptest dumptest.cc) target_link_libraries(dumptest tests-nocgal ${TESTS-NOCGAL-LIBRARIES}) # # modulecachetest # add_executable(modulecachetest modulecachetest.cc) target_link_libraries(modulecachetest tests-nocgal ${TESTS-NOCGAL-LIBRARIES}) # # csgtexttest # add_executable(csgtexttest csgtexttest.cc CSGTextRenderer.cc CSGTextCache.cc) target_link_libraries(csgtexttest tests-nocgal ${TESTS-NOCGAL-LIBRARIES}) # # csgtermtest # add_executable(csgtermtest csgtermtest.cc ../src/CSGTermEvaluator.cc) target_link_libraries(csgtermtest tests-nocgal ${TESTS-NOCGAL-LIBRARIES}) # # cgaltest # add_executable(cgaltest cgaltest.cc) set_target_properties(cgaltest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(cgaltest tests-cgal ${TESTS-CGAL-LIBRARIES}) # # cgalstlsanitytest # add_executable(cgalstlsanitytest cgalstlsanitytest.cc) set_target_properties(cgalstlsanitytest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(cgalstlsanitytest tests-cgal ${TESTS-CGAL-LIBRARIES}) # # cgalpngtest # add_executable(cgalpngtest cgalpngtest.cc bboxhelp.cc ../src/CGALRenderer.cc ../src/renderer.cc ../src/rendersettings.cc) set_target_properties(cgalpngtest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(cgalpngtest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY}) # # cgalcachetest # add_executable(cgalcachetest cgalcachetest.cc bboxhelp.cc) set_target_properties(cgalcachetest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(cgalcachetest tests-cgal ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY}) # # opencsgtest # add_executable(opencsgtest opencsgtest.cc csgtestcore.cc ../src/OpenCSGRenderer.cc ../src/ThrownTogetherRenderer.cc ../src/renderer.cc ../src/rendersettings.cc) set_target_properties(opencsgtest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(opencsgtest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY}) # # throwntogethertest # add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/OpenCSGRenderer.cc ../src/ThrownTogetherRenderer.cc ../src/renderer.cc ../src/rendersettings.cc) set_target_properties(throwntogethertest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") target_link_libraries(throwntogethertest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY}) # # Tags tests as disabled. This is more convenient than removing them manually # from the lists of filenames # macro(disable_tests) foreach (TESTNAME ${ARGN}) # message("Disabling ${TESTNAME}") list(APPEND DISABLED_TESTS ${TESTNAME}) endforeach() endmacro() # # Tags the given tests as belonging to the given CONFIG, i.e. will # only be executed when run using ctest -C # # Usage example: set_test_config(Heavy dumptest_testname opencsgtest_testname2) # function(set_test_config CONFIG) list(APPEND ${CONFIG}_TEST_CONFIG ${ARGN}) list(FIND TEST_CONFIGS ${CONFIG} FOUND) if (FOUND EQUAL -1) list(APPEND TEST_CONFIGS ${CONFIG}) # Export to parent scope set(TEST_CONFIGS ${TEST_CONFIGS} PARENT_SCOPE) endif() # Export to parent scope set(${CONFIG}_TEST_CONFIG ${${CONFIG}_TEST_CONFIG} PARENT_SCOPE) endfunction() # # Returns a list of test configs # function(get_test_config TESTNAME CONFIGS) foreach(CONFIG ${TEST_CONFIGS}) list(FIND ${CONFIG}_TEST_CONFIG ${TESTNAME} IDX) if (${IDX} GREATER -1) list(APPEND ${CONFIGS} ${CONFIG}) endif() endforeach() if (${CONFIGS}) # Convert to a format understood by add_test() string(REPLACE ";" "|" ${${CONFIGS}} ${CONFIGS}) # Export to parent scope set(${CONFIGS} ${${CONFIGS}} PARENT_SCOPE) endif() endfunction() # # Returns into the FULLNAME variable the global full test name (identifier) # given a test command and source filename # function(get_test_fullname TESTCMD FILENAME FULLNAME) get_filename_component(TESTCMD_NAME ${TESTCMD} NAME_WE) get_filename_component(TESTNAME ${FILENAME} NAME_WE) string(REPLACE " " "_" TESTNAME ${TESTNAME}) # Test names cannot include spaces set(${FULLNAME} ${TESTCMD_NAME}_${TESTNAME}) # Export to parent scope set(${FULLNAME} ${${FULLNAME}} PARENT_SCOPE) endfunction() # comparison method to use if (NOT $ENV{COMPARATOR} STREQUAL "") set(COMPARATOR "$ENV{COMPARATOR}") message(STATUS "ImageMagick method modified with COMPARATOR: " ${COMPARATOR}) endif() # # This functions adds cmd-line tests given files. # Files are sent as the parameters following TESTSUFFIX # # Usage add_cmdline_test(TESTCMD TESTSUFFIX ) # find_package(PythonInterp) macro(add_cmdline_test TESTCMD TESTSUFFIX) get_filename_component(TESTCMD_NAME ${TESTCMD} NAME_WE) # Add tests from args foreach (SCADFILE ${ARGN}) get_filename_component(TESTNAME ${SCADFILE} NAME_WE) string(REPLACE " " "_" TESTNAME ${TESTNAME}) # Test names cannot include spaces set(TEST_FULLNAME "${TESTCMD_NAME}_${TESTNAME}") list(FIND DISABLED_TESTS ${TEST_FULLNAME} DISABLED) if (${DISABLED} EQUAL -1) # Handle configurations unset(FOUNDCONFIGS) get_test_config(${TEST_FULLNAME} FOUNDCONFIGS) if (NOT FOUNDCONFIGS) set_test_config(Default ${TEST_FULLNAME}) endif() set_test_config(All ${TEST_FULLNAME}) unset(FOUNDCONFIGS) get_test_config(${TEST_FULLNAME} FOUNDCONFIGS) set(CONFARG CONFIGURATIONS) set(CONFVAL ${FOUNDCONFIGS}) if (MINGW_CROSS_ENV_DIR) set( MINGW_CROSS_ARG "--mingw-cross-env" ) endif() add_test(NAME ${TEST_FULLNAME} ${CONFARG} ${CONFVAL} COMMAND ${PYTHON_EXECUTABLE} ${tests_SOURCE_DIR}/test_cmdline_tool.py ${MINGW_CROSS_ARG} --comparator=${COMPARATOR} -c ${ImageMagick_convert_EXECUTABLE} -s ${TESTSUFFIX} ${CMAKE_BINARY_DIR}/${TESTCMD} "${SCADFILE}") endif() endforeach() endmacro() enable_testing() # set up custom pretty printing of results set(INFOCMD "execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/opencsgtest --info OUTPUT_FILE sysinfo.txt)") if (MINGW_CROSS_ENV_DIR) set(INFOCMD "execute_process(COMMAND wine ${CMAKE_CURRENT_BINARY_DIR}/opencsgtest --info OUTPUT_FILE sysinfo.txt)") endif() set(PRETTYCMD "\"${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_pretty_print.py --builddir=${CMAKE_CURRENT_BINARY_DIR}\"") set(CTEST_CUSTOM_FILE ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake) set(CTEST_CUSTOM_TXT "\n message(\"running 'opencsgtest --info' to generate sysinfo.txt\")\n ${INFOCMD}\n set(CTEST_CUSTOM_POST_TEST ${PRETTYCMD})\n ") file(WRITE ${CTEST_CUSTOM_FILE} ${CTEST_CUSTOM_TXT}) foreach(FILE test_pretty_print.py) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/${FILE} COPYONLY) endforeach() set_directory_properties(PROPERTIES TEST_INCLUDE_FILE "${CMAKE_SOURCE_DIR}/EnforceConfig.cmake") # Subst files configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/include-tests-template.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad) configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/use-tests-template.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad) configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/import_stl-tests-template.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/features/import_stl-tests.scad) configure_file(${CMAKE_SOURCE_DIR}/../testdata/scad/templates/import_dxf-tests-template.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/features/import_dxf-tests.scad) # Find all scad files file(GLOB MINIMAL_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/minimal/*.scad) file(GLOB FEATURES_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/*.scad) file(GLOB BUGS_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/*.scad) file(GLOB SCAD_DXF_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/dxf/*.scad) file(GLOB FUNCTION_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/functions/*.scad) file(GLOB EXAMPLE_FILES ${CMAKE_SOURCE_DIR}/../examples/*.scad) list(APPEND ECHO_FILES ${FUNCTION_FILES} ${CMAKE_SOURCE_DIR}/../testdata/scad/minimal/echo.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/echo-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/parser-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/builtin-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/dim-all.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/string-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/string-indexing.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/vector-values.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/search-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/recursion-tests.scad) list(APPEND DUMPTEST_FILES ${MINIMAL_FILES} ${FEATURES_FILES} ${EXAMPLE_FILES}) list(APPEND DUMPTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/escape-test.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad) list(APPEND CGALPNGTEST_FILES ${FEATURES_FILES} ${SCAD_DXF_FILES} ${EXAMPLE_FILES}) list(APPEND CGALPNGTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/include-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/use-tests.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/transform-nan-inf-tests.scad) list(APPEND OPENCSGTEST_FILES ${CGALPNGTEST_FILES}) list(APPEND OPENCSGTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/bbox-transform-bug.scad) list(APPEND OPENCSGTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/intersection-prune-test.scad) list(APPEND THROWNTOGETHERTEST_FILES ${OPENCSGTEST_FILES}) list(APPEND CGALSTLSANITYTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/normal-nan.scad) # Disable tests which are known to cause floating point comparison issues # Once we're capable of comparing these across platforms, we can put these back in disable_tests(dumptest_transform-tests dumptest_render-tests dumptest_difference-tests dumptest_intersection-tests dumptest_text-search-test dumptest_example001 dumptest_example005 dumptest_example006 dumptest_example007 dumptest_example008 dumptest_example012 dumptest_example013 dumptest_example016 dumptest_example017 dumptest_example020 dumptest_example021 dumptest_example022 dumptest_example023) # FIXME: This test illustrates a weakness in child() combined with modifiers. # Reenable it when this is improved disable_tests(opencsgtest_child-background) # FIXME: This single test takes over an hour to run on a 2.7 GHz P4 disable_tests(opencsgtest_example006 cgalpngtest_example006) # These tests only makes sense in OpenCSG mode disable_tests(cgalpngtest_child-background cgalpngtest_highlight-and-background-modifier cgalpngtest_testcolornames throwntogethertest_child-background throwntogethertest_highlight-and-background-modifier throwntogethertest_testcolornames) # Test config handling set_test_config(Heavy opencsgtest_minkowski3-tests opencsgtest_projection-tests throwntogethertest_minkowski3-tests throwntogethertest_projection-tests cgalpngtest_projection-tests cgalpngtest_rotate_extrude-tests cgalpngtest_surface-tests cgalpngtest_sphere-tests cgalpngtest_minkowski3-tests cgalpngtest_for-tests cgalpngtest_for-nested-tests cgalpngtest_intersection-tests) foreach(FILE ${EXAMPLE_FILES}) get_test_fullname(cgalpngtest ${FILE} TEST_FULLNAME) set_test_config(Examples ${TEST_FULLNAME}) get_test_fullname(opencsgtest ${FILE} TEST_FULLNAME) set_test_config(Examples ${TEST_FULLNAME}) get_test_fullname(throwntogethertest ${FILE} TEST_FULLNAME) set_test_config(Examples ${TEST_FULLNAME}) endforeach() # Add tests add_cmdline_test(echotest txt ${ECHO_FILES}) add_cmdline_test(dumptest txt ${DUMPTEST_FILES}) add_cmdline_test(csgtexttest txt ${MINIMAL_FILES}) add_cmdline_test(csgtermtest txt ${MINIMAL_FILES}) add_cmdline_test(cgalpngtest png ${CGALPNGTEST_FILES}) add_cmdline_test(opencsgtest png ${OPENCSGTEST_FILES}) add_cmdline_test(throwntogethertest png ${THROWNTOGETHERTEST_FILES}) # FIXME: We don't actually need to compare the output of cgalstlsanitytest # with anything. It's self-contained and returns != 0 on error add_cmdline_test(cgalstlsanitytest txt ${CGALSTLSANITYTEST_FILES}) message("Available test configurations: ${TEST_CONFIGS}") #foreach(CONF ${TEST_CONFIGS}) # message("${CONF}: ${${CONF}_TEST_CONFIG}") #endforeach() openscad-2013.01+dfsg.orig/tests/compare-bitmaps.sh0000755000175000017500000000125111640436733021522 0ustar chrysnchrysn#!/bin/sh while getopts 'v' c do case $c in v) set -x ;; esac done shift $(($OPTIND - 1)) # FIXME: Sometimes, compare fails when comparing very small images (e.g. 40 x 10 pixels). # It's unknown why this happens.. pixelerror=`compare -fuzz 10% -metric AE $1 $2 null: 2>&1` if [ $? -ne 0 ]; then echo "General error: Ouch" exit 1 # Compare failed to read image else # Check if $pixelerror contains an integer (it sometimes outputs things like '0 @ 0,0') if [ $pixelerror -eq $pixelerror 2> /dev/null ]; then if [ $pixelerror == 0 ]; then exit 0 fi echo "Pixel error: $pixelerror" else echo "Pixel error: Err" fi exit 1 fi exit 0 openscad-2013.01+dfsg.orig/tests/test_pretty_print.py0000755000175000017500000003636412076022157022267 0ustar chrysnchrysn#!/usr/bin/python # test_pretty_print by don bright 2012. Copyright assigned to Marius Kintel and # Clifford Wolf 2012. Released under the GPL 2, or later, as described in # the file named 'COPYING' in OpenSCAD's project root. # # This program 'pretty prints' the ctest output, namely # files from builddir/Testing/Temporary. # html & wiki output are produced in Testing/Temporary/sysid_report # # experimental wiki uploading is available by running # # python test_pretty_print.py --upload # # Design philosophy # # 1. parse the data (images, logs) into easy-to-use data structures # 2. wikifiy the data # 3. save the wikified data to disk # todo # deal better with the situation where Offscreen rendering fails # do something if tests for GL extensions for OpenCSG fail (test fail, no image production) # copy all images, sysinfo.txt to bundle for html/upload (images # can be altered by subsequent runs) # why is hash differing # fix windows so that it won't keep asking 'this program crashed' over and over. # (you can set this in the registry to never happen, but itd be better if the program # itself was able to disable that temporarily in it's own process) import string,sys,re,os,hashlib,subprocess,textwrap,time,platform def tryread(filename): data = None try: f = open(filename,'rb') data = f.read() f.close() except: print 'couldn\'t open ',filename return data def trysave(filename,data): try: if not os.path.isdir(os.path.dirname(filename)): #print 'creating',os.path.dirname(filename) os.mkdir(os.path.dirname(filename)) f=open(filename,'wb') f.write(data) f.close() except: print 'problem writing to',filename return None return True def ezsearch(pattern,str): x = re.search(pattern,str,re.DOTALL|re.MULTILINE) if x and len(x.groups())>0: return x.group(1).strip() return '' def read_gitinfo(): # won't work if run from outside of branch. data = subprocess.Popen(['git','remote','-v'],stdout=subprocess.PIPE).stdout.read() origin = ezsearch('^origin *?(.*?)\(fetch.*?$',data) upstream = ezsearch('^upstream *?(.*?)\(fetch.*?$',data) data = subprocess.Popen(['git','branch'],stdout=subprocess.PIPE).stdout.read() branch = ezsearch('^\*(.*?)$',data) out = 'Git branch: ' + branch + ' from origin ' + origin + '\n' out += 'Git upstream: ' + upstream + '\n' return out def read_sysinfo(filename): data = tryread(filename) if not data: sinfo = platform.sys.platform sinfo += '\nsystem cannot create offscreen GL framebuffer object' sinfo += '\nsystem cannot create images' sysid = platform.sys.platform+'_no_images' return sinfo, sysid machine = ezsearch('Machine:(.*?)\n',data) machine = machine.replace(' ','-').replace('/','-') osinfo = ezsearch('OS info:(.*?)\n',data) osplain = osinfo.split(' ')[0].strip().replace('/','-') if 'windows' in osinfo.lower(): osplain = 'win' renderer = ezsearch('GL Renderer:(.*?)\n',data) tmp = renderer.split(' ') tmp = string.join(tmp[0:3],'-') tmp = tmp.split('/')[0] renderer = tmp data += read_gitinfo() data += 'Image comparison: ImageMagick' data = data.strip() # create 4 letter hash and stick on end of sysid nondate_data = re.sub("\n.*?ompile date.*?\n","\n",data).strip() hexhash = hashlib.md5() hexhash.update(nondate_data) hexhash = hexhash.hexdigest()[-4:].upper() hash = '' for c in hexhash: hash += chr(ord(c)+97-48) sysid = osplain + '_' + machine + '_' + renderer + '_' + hash sysid = sysid.lower() return data, sysid class Test: def __init__(self,fullname,time,passed,output,type,actualfile,expectedfile,scadfile,log): self.fullname,self.time,self.passed,self.output = \ fullname, time, passed, output self.type, self.actualfile, self.expectedfile, self.scadfile = \ type, actualfile, expectedfile, scadfile self.fulltestlog = log def __str__(self): x = 'fullname: ' + self.fullname x+= '\nactualfile: ' + self.actualfile x+= '\nexpectedfile: ' + self.expectedfile x+= '\ntesttime: ' + self.time x+= '\ntesttype: ' + self.type x+= '\npassed: ' + str(self.passed) x+= '\nscadfile: ' + self.scadfile x+= '\noutput bytes: ' + str(len(self.output)) x+= '\ntestlog bytes: ' + str(len(self.fulltestlog)) x+= '\n' return x def parsetest(teststring): patterns = ["Test:(.*?)\n", # fullname "Test time =(.*?) sec\n", "Test time.*?Test (Passed)", # pass/fail "Output:(.*?)", 'Command:.*?-s" "(.*?)"', # type "^ actual .*?:(.*?)\n", "^ expected .*?:(.*?)\n", 'Command:.*?(testdata.*?)"' # scadfile ] hits = map( lambda pattern: ezsearch(pattern,teststring), patterns ) test = Test(hits[0],hits[1],hits[2]=='Passed',hits[3],hits[4],hits[5],hits[6],hits[7],teststring) if len(test.actualfile) > 0: test.actualfile_data = tryread(test.actualfile) if len(test.expectedfile) > 0: test.expectedfile_data = tryread(test.expectedfile) return test def parselog(data): startdate = ezsearch('Start testing: (.*?)\n',data) enddate = ezsearch('End testing: (.*?)\n',data) pattern = '([0-9]*/[0-9]* Testing:.*?time elapsed.*?\n)' test_chunks = re.findall(pattern,data,re.S) tests = map( parsetest, test_chunks ) tests = sorted(tests, key = lambda t:t.passed) return startdate, tests, enddate def load_makefiles(builddir): filelist = [] for root, dirs, files in os.walk(builddir): for fname in files: filelist += [ os.path.join(root, fname) ] files = filter(lambda x: 'build.make' in os.path.basename(x), filelist) files += filter(lambda x: 'flags.make' in os.path.basename(x), filelist) files = filter(lambda x: 'esting' not in x and 'emporary' not in x, files) result = {} for fname in files: result[fname.replace(builddir,'')] = open(fname,'rb').read() return result def wikify_filename(fname, wiki_rootpath, sysid): wikifname = fname.replace('/','_').replace('\\','_').strip('.') return wiki_rootpath + '_' + sysid + '_' + wikifname def towiki(wiki_rootpath, startdate, tests, enddate, sysinfo, sysid, makefiles): wiki_template = """

    [[WIKI_ROOTPATH]] test run report

    '''Sysid''': SYSID '''Result summary''': NUMPASSED / NUMTESTS tests passed ( PERCENTPASSED % )
    '''System info''':
    SYSINFO
    
    start time: STARTDATE
    end time : ENDDATE
    '''Image tests''' {| border=1 cellspacing=0 cellpadding=1 |- | colspan=2 | FTESTNAME |- | Expected image || Actual image |- | [[File:EXPECTEDFILE|250px]] || ACTUALFILE_WIKI |}
    TESTLOG
    
    '''Text tests''' {|border=1 cellspacing=0 cellpadding=1 |- | FTESTNAME |}
    TESTLOG
    
    '''build.make and flags.make''' *[[MAKEFILE_NAME]] """ txtpages = {} imgs = {} passed_tests = filter(lambda x: x.passed, tests) failed_tests = filter(lambda x: not x.passed, tests) tests_to_report = failed_tests if include_passed: tests_to_report = tests try: percent = str(int(100.0*len(passed_tests) / len(tests))) except ZeroDivisionError: percent = 'n/a' s = wiki_template repeat1 = ezsearch('(.*?)',s) repeat2 = ezsearch('(.*?)',s) repeat3 = ezsearch('(.*?)',s) dic = { 'STARTDATE': startdate, 'ENDDATE': enddate, 'WIKI_ROOTPATH': wiki_rootpath, 'SYSINFO': sysinfo, 'SYSID':sysid, 'NUMTESTS':len(tests), 'NUMPASSED':len(passed_tests), 'PERCENTPASSED':percent } for key in dic.keys(): s = s.replace(key,str(dic[key])) for t in tests_to_report: if t.type=='txt': newchunk = re.sub('FTESTNAME',t.fullname,repeat2) newchunk = newchunk.replace('TESTLOG',t.fulltestlog) s = s.replace(repeat2, newchunk+repeat2) elif t.type=='png': tmp = t.actualfile.replace(builddir,'') wikiname_a = wikify_filename(tmp,wiki_rootpath,sysid) tmp = t.expectedfile.replace(os.path.dirname(builddir),'') wikiname_e = wikify_filename(tmp,wiki_rootpath,sysid) if hasattr(t, 'expectedfile_data'): imgs[wikiname_e] = t.expectedfile_data if t.actualfile: actualfile_wiki = '[[File:'+wikiname_a+'|250px]]' if hasattr(t, 'actualfile_data'): imgs[wikiname_a] = t.actualfile_data else: actualfile_wiki = 'No image generated.' newchunk = re.sub('FTESTNAME',t.fullname,repeat1) newchunk = newchunk.replace('ACTUALFILE_WIKI',actualfile_wiki) newchunk = newchunk.replace('EXPECTEDFILE',wikiname_e) newchunk = newchunk.replace('TESTLOG',t.fulltestlog) s = s.replace(repeat1, newchunk+repeat1) makefiles_wikinames = {} for mf in sorted(makefiles.keys()): tmp = mf.replace('CMakeFiles','').replace('.dir','') wikiname = wikify_filename(tmp,wiki_rootpath,sysid) newchunk = re.sub('MAKEFILE_NAME',wikiname,repeat3) s = s.replace(repeat3, newchunk+repeat3) makefiles_wikinames[mf] = wikiname s = s.replace(repeat1,'') s = s.replace(repeat2,'') s = s.replace(repeat3,'') s = re.sub('\n','',s) s = re.sub('','',s) mainpage_wikiname = wiki_rootpath + '_' + sysid + '_test_report' txtpages[ mainpage_wikiname ] = s for mf in sorted(makefiles.keys()): txtpages[ makefiles_wikinames[ mf ] ] = '\n*Subreport from [['+mainpage_wikiname+']]\n\n\n
    \n'+makefiles[mf]+'\n
    ' return imgs, txtpages def tohtml(wiki_rootpath, startdate, tests, enddate, sysinfo, sysid, makefiles): # kludge. assume wiki stuff has alreayd run and dumped files properly head = ''+wiki_rootpath+' test run for '+sysid +'' tail = '' passed_tests = filter(lambda x: x.passed, tests) failed_tests = filter(lambda x: not x.passed, tests) try: percent = str(int(100.0*len(passed_tests) / len(tests))) except ZeroDivisionError: percent = 'n/a' tests_to_report = failed_tests if include_passed: tests_to_report = tests s='' s+= '\n
    '
    	s+= '\nSYSINFO\n'+ sysinfo
    	s+= '\n

    ' s+= '\n

    '
    	s+= '\nSTARTDATE: '+ startdate
    	s+= '\nENDDATE: '+ enddate
    	s+= '\nWIKI_ROOTPATH: '+ wiki_rootpath
    	s+= '\nSYSID: '+sysid
    	s+= '\nNUMTESTS: '+str(len(tests))
    	s+= '\nNUMPASSED: '+str(len(passed_tests))
    	s+= '\nPERCENTPASSED: '+ percent
    	s+= '\n
    ' for t in tests_to_report: if t.type=='txt': s+='\n
    '+t.fullname+'
    \n' s+='

    '+t.fulltestlog+'
    \n\n' elif t.type=='png': tmp = t.actualfile.replace(builddir,'') wikiname_a = wikify_filename(tmp,wiki_rootpath,sysid) tmp = t.expectedfile.replace(os.path.dirname(builddir),'') wikiname_e = wikify_filename(tmp,wiki_rootpath,sysid) s+='' s+='\n
    '+t.fullname s+='\n
    ExpectedActual' s+='\n
    ' s+='\n ' s+='\n
    ' s+='\n
    '
    			s+=t.fulltestlog
    			s+='\n
    ' s+='\n\n

    \n\n' makefiles_wikinames = {} for mf in sorted(makefiles.keys()): tmp = mf.replace('CMakeFiles','').replace('.dir','') wikiname = wikify_filename(tmp,wiki_rootpath,sysid) s += '\n'+wikiname+'
    ' s+='\n' return head + s + tail def wiki_login(wikiurl,api_php_path,botname,botpass): site = mwclient.Site(wikiurl,api_php_path) site.login(botname,botpass) return site def wiki_upload(wikiurl,api_php_path,botname,botpass,filedata,wikipgname): counter = 0 done = False descrip = 'test' time.sleep(1) while not done: try: print 'login',botname,'to',wikiurl site = wiki_login(wikiurl,api_php_path,botname,botpass) print 'uploading...', if wikipgname.endswith('png'): site.upload(filedata,wikipgname,descrip,ignore=True) else: page = site.Pages[wikipgname] text = page.edit() page.save(filedata) done = True print 'transfer ok' except Exception, e: print 'Error:', type(e),e counter += 1 if counter>maxretry: print 'giving up. please try a different wiki site' done = True else: print 'wiki',wikiurl,'down. retrying in 15 seconds' time.sleep(15) def upload(wikiurl,api_php_path='/',wiki_rootpath='test', sysid='null', botname='cakebaby',botpass='anniew',wikidir='.',dryrun=True): wetrun = not dryrun if dryrun: print 'dry run' try: global mwclient import mwclient except: print 'please download mwclient 0.6.5 and unpack here:', os.getcwd() sys.exit() if wetrun: site = wiki_login(wikiurl,api_php_path,botname,botpass) wikifiles = os.listdir(wikidir) testreport_page = filter( lambda x: 'test_report' in x, wikifiles ) if (len(testreport_page)>1): print 'multiple test reports found, please clean dir',wikidir sys.exit() rootpage = testreport_page[0] print 'add',rootpage,' to main report page ',wiki_rootpath if wetrun: page = site.Pages[wiki_rootpath] text = page.edit() if not '[['+rootpage+']]' in text: page.save(text +'\n*[['+rootpage+']]\n') wikifiles = os.listdir(wikidir) wikifiles = filter(lambda x: not x.endswith('html'), wikifiles) print 'upload wiki pages:' for wikiname in wikifiles: filename = os.path.join(wikidir,wikiname) filedata = tryread(filename) print 'upload',len(filedata),'bytes from',wikiname if wetrun and len(filedata)>0: wiki_upload(wikiurl,api_php_path,botname,botpass,filedata,wikiname) if len(filedata)==0: print 'cancelling empty upload' def findlogfile(builddir): logpath = os.path.join(builddir,'Testing','Temporary') logfilename = os.path.join(logpath,'LastTest.log.tmp') if not os.path.isfile(logfilename): logfilename = os.path.join(logpath,'LastTest.log') if not os.path.isfile(logfilename): print 'cant find and/or open logfile',logfilename sys.exit() return logpath, logfilename def main(): dry = False if verbose: print 'running test_pretty_print' if '--dryrun' in sys.argv: dry=True suffix = ezsearch('--suffix=(.*?) ',string.join(sys.argv)+' ') builddir = ezsearch('--builddir=(.*?) ',string.join(sys.argv)+' ') if builddir=='': builddir=os.getcwd() if verbose: print 'build dir set to', builddir sysinfo, sysid = read_sysinfo(os.path.join(builddir,'sysinfo.txt')) makefiles = load_makefiles(builddir) logpath, logfilename = findlogfile(builddir) testlog = tryread(logfilename) startdate, tests, enddate = parselog(testlog) if verbose: print 'found sysinfo.txt,', print 'found', len(makefiles),'makefiles,', print 'found', len(tests),'test results' imgs, txtpages = towiki(wiki_rootpath, startdate, tests, enddate, sysinfo, sysid, makefiles) wikidir = os.path.join(logpath,sysid+'_report') if verbose: print 'erasing files in',wikidir try: map(lambda x:os.remove(os.path.join(wikidir,x)), os.listdir(wikidir)) except: pass print 'writing',len(imgs),'images, ',len(txtpages)-1,'text pages, and index.html to:\n', ' .'+wikidir.replace(os.getcwd(),'') for pgname in sorted(imgs): trysave( os.path.join(wikidir,pgname), imgs[pgname]) for pgname in sorted(txtpages): trysave( os.path.join(wikidir,pgname), txtpages[pgname]) htmldata = tohtml(wiki_rootpath, startdate, tests, enddate, sysinfo, sysid, makefiles) trysave( os.path.join(wikidir,'index.html'), htmldata ) if '--upload' in sys.argv: upload(wikisite,wiki_api_path,wiki_rootpath,sysid,'openscadbot', 'tobdacsnepo',wikidir,dryrun=dry) print 'upload attempt complete' if verbose: print 'test_pretty_print complete' #wikisite = 'cakebaby.referata.com' #wiki_api_path = '' wikisite = 'cakebaby.wikia.com' wiki_api_path = '/' wiki_rootpath = 'OpenSCAD' builddir = os.getcwd() # os.getcwd()+'/build' verbose = False maxretry = 10 if bool(os.getenv("TEST_GENERATE")): sys.exit(0) include_passed = False if '--include-passed' in sys.argv: include_passed = True main() openscad-2013.01+dfsg.orig/tests/FindBoost.cmake0000644000175000017500000015342211667754403021007 0ustar chrysnchrysn# - Try to find Boost include dirs and libraries # Usage of this module as follows: # # NOTE: Take note of the Boost_ADDITIONAL_VERSIONS variable below. # Due to Boost naming conventions and limitations in CMake this find # module is NOT future safe with respect to Boost version numbers, # and may break. # # == Using Header-Only libraries from within Boost: == # # find_package( Boost 1.36.0 ) # if(Boost_FOUND) # include_directories(${Boost_INCLUDE_DIRS}) # add_executable(foo foo.cc) # endif() # # # == Using actual libraries from within Boost: == # # set(Boost_USE_STATIC_LIBS ON) # set(Boost_USE_MULTITHREADED ON) # set(Boost_USE_STATIC_RUNTIME OFF) # find_package( Boost 1.36.0 COMPONENTS date_time filesystem system ... ) # # if(Boost_FOUND) # include_directories(${Boost_INCLUDE_DIRS}) # add_executable(foo foo.cc) # target_link_libraries(foo ${Boost_LIBRARIES}) # endif() # # # The components list needs to contain actual names of boost libraries only, # such as "date_time" for "libboost_date_time". If you're using parts of # Boost that contain header files only (e.g. foreach) you do not need to # specify COMPONENTS. # # You should provide a minimum version number that should be used. If you provide this # version number and specify the REQUIRED attribute, this module will fail if it # can't find the specified or a later version. If you specify a version number this is # automatically put into the considered list of version numbers and thus doesn't need # to be specified in the Boost_ADDITIONAL_VERSIONS variable (see below). # # NOTE for Visual Studio Users: # Automatic linking is used on MSVC & Borland compilers by default when # #including things in Boost. It's important to note that setting # Boost_USE_STATIC_LIBS to OFF is NOT enough to get you dynamic linking, # should you need this feature. Automatic linking typically uses static # libraries with a few exceptions (Boost.Python is one). # # Please see the section below near Boost_LIB_DIAGNOSTIC_DEFINITIONS for # more details. Adding a TARGET_LINK_LIBRARIES() as shown in the example # above appears to cause VS to link dynamically if Boost_USE_STATIC_LIBS # gets set to OFF. It is suggested you avoid automatic linking since it # will make your application less portable. # # =========== The mess that is Boost_ADDITIONAL_VERSIONS (sorry?) ============ # # OK, so the Boost_ADDITIONAL_VERSIONS variable can be used to specify a list of # boost version numbers that should be taken into account when searching # for Boost. Unfortunately boost puts the version number into the # actual filename for the libraries, so this variable will certainly be needed # in the future when new Boost versions are released. # # Currently this module searches for the following version numbers: # 1.33, 1.33.0, 1.33.1, 1.34, 1.34.0, 1.34.1, 1.35, 1.35.0, 1.35.1, # 1.36, 1.36.0, 1.36.1, 1.37, 1.37.0, 1.38, 1.38.0, 1.39, 1.39.0, # 1.40, 1.40.0, 1.41, 1.41.0, 1.42, 1.42.0, 1.43, 1.43.0, 1.44, 1.44.0, # 1.45, 1.45.0, 1.46, 1.46.0, 1.46.1, 1.47, 1.47.0, 1.48, 1.48.0 # # NOTE: If you add a new major 1.x version in Boost_ADDITIONAL_VERSIONS you should # add both 1.x and 1.x.0 as shown above. Official Boost include directories # omit the 3rd version number from include paths if it is 0 although not all # binary Boost releases do so. # # set(Boost_ADDITIONAL_VERSIONS "1.78" "1.78.0" "1.79" "1.79.0") # # ===================================== ============= ======================== # # Variables used by this module, they can change the default behaviour and # need to be set before calling find_package: # # Boost_USE_MULTITHREADED Can be set to OFF to use the non-multithreaded # boost libraries. If not specified, defaults # to ON. # # Boost_USE_STATIC_LIBS Can be set to ON to force the use of the static # boost libraries. Defaults to OFF. # # Boost_NO_SYSTEM_PATHS Set to TRUE to suppress searching in system # paths (or other locations outside of BOOST_ROOT # or BOOST_INCLUDEDIR). Useful when specifying # BOOST_ROOT. Defaults to OFF. # [Since CMake 2.8.3] # # Boost_NO_BOOST_CMAKE Do not do a find_package call in config mode # before searching for a regular boost install. # This will avoid finding boost-cmake installs. # Defaults to OFF. # [Since CMake 2.8.6] # # Boost_USE_STATIC_RUNTIME If enabled, searches for boost libraries # linked against a static C++ standard library # ('s' ABI tag). This option should be set to # ON or OFF because the default behavior # if not specified is platform dependent # for backwards compatibility. # [Since CMake 2.8.3] # # Boost_USE_DEBUG_PYTHON If enabled, searches for boost libraries # compiled against a special debug build of # Python ('y' ABI tag). Defaults to OFF. # [Since CMake 2.8.3] # # Boost_USE_STLPORT If enabled, searches for boost libraries # compiled against the STLPort standard # library ('p' ABI tag). Defaults to OFF. # [Since CMake 2.8.3] # # Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS # If enabled, searches for boost libraries # compiled against the deprecated STLPort # "native iostreams" feature ('n' ABI tag). # Defaults to OFF. # [Since CMake 2.8.3] # # Other Variables used by this module which you may want to set. # # Boost_ADDITIONAL_VERSIONS A list of version numbers to use for searching # the boost include directory. Please see # the documentation above regarding this # annoying, but necessary variable :( # # Boost_DEBUG Set this to TRUE to enable debugging output # of FindBoost.cmake if you are having problems. # Please enable this before filing any bug # reports. # # Boost_DETAILED_FAILURE_MSG FindBoost doesn't output detailed information # about why it failed or how to fix the problem # unless this is set to TRUE or the REQUIRED # keyword is specified in find_package(). # [Since CMake 2.8.0] # # Boost_COMPILER Set this to the compiler suffix used by Boost # (e.g. "-gcc43") if FindBoost has problems finding # the proper Boost installation # # Boost_THREADAPI When building boost.thread, sometimes the name of the # library contains an additional "pthread" or "win32" # string known as the threadapi. This can happen when # compiling against pthreads on Windows or win32 threads # on Cygwin. You may specify this variable and if set # when FindBoost searches for the Boost threading library # it will first try to match the threadapi you specify. # For Example: libboost_thread_win32-mgw45-mt-1_43.a # might be found if you specified "win32" here before # falling back on libboost_thread-mgw45-mt-1_43.a. # [Since CMake 2.8.3] # # Boost_REALPATH Resolves symbolic links for discovered boost libraries # to assist with packaging. For example, instead of # Boost_SYSTEM_LIBRARY_RELEASE being resolved to # "/usr/lib/libboost_system.so" it would be # "/usr/lib/libboost_system.so.1.42.0" instead. # This does not affect linking and should not be # enabled unless the user needs this information. # [Since CMake 2.8.3] # # # These last three variables are available also as environment variables: # Also, note they are completely UPPERCASE, except Boost_DIR. # # Boost_DIR or The preferred installation prefix for searching for # BOOST_ROOT or BOOSTROOT Boost. Set this if the module has problems finding # the proper Boost installation. # # Note that Boost_DIR behaves exactly as _DIR # variables are documented to behave in find_package's # Config mode. That is, if it is set as a -D argument # to CMake, it must point to the location of the # BoostConfig.cmake or Boost-config.cmake file. If it # is set as an environment variable, it must point to # the root of the boost installation. BOOST_ROOT and # BOOSTROOT, on the other hand, will point to the root # in either case. # # To prevent falling back on the system paths, set # Boost_NO_SYSTEM_PATHS to true. # # To avoid finding boost-cmake installations, set # Boost_NO_BOOST_CMAKE to true. # # BOOST_INCLUDEDIR Set this to the include directory of Boost, if the # module has problems finding the proper Boost installation # # BOOST_LIBRARYDIR Set this to the lib directory of Boost, if the # module has problems finding the proper Boost installation # # Variables defined by this module: # # Boost_FOUND System has Boost, this means the include dir was # found, as well as all the libraries specified in # the COMPONENTS list. # # Boost_INCLUDE_DIRS Boost include directories: not cached # # Boost_INCLUDE_DIR This is almost the same as above, but this one is # cached and may be modified by advanced users # # Boost_LIBRARIES Link to these to use the Boost libraries that you # specified: not cached # # Boost_LIBRARY_DIRS The path to where the Boost library files are. # # Boost_VERSION The version number of the boost libraries that # have been found, same as in version.hpp from Boost # # Boost_LIB_VERSION The version number in filename form as # it's appended to the library filenames # # Boost_MAJOR_VERSION major version number of boost # Boost_MINOR_VERSION minor version number of boost # Boost_SUBMINOR_VERSION subminor version number of boost # # Boost_LIB_DIAGNOSTIC_DEFINITIONS [WIN32 Only] You can call # add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) # to have diagnostic information about Boost's # automatic linking outputted during compilation time. # # For each component you specify in find_package(), the following (UPPER-CASE) # variables are set. You can use these variables if you would like to pick and # choose components for your targets instead of just using Boost_LIBRARIES. # # Boost_${COMPONENT}_FOUND True IF the Boost library "component" was found. # # Boost_${COMPONENT}_LIBRARY Contains the libraries for the specified Boost # "component" (includes debug and optimized keywords # when needed). #============================================================================= # Copyright 2006-2009 Kitware, Inc. # Copyright 2006-2008 Andreas Schneider # Copyright 2007 Wengo # Copyright 2007 Mike Jackson # Copyright 2008 Andreas Pakulat # Copyright 2008-2010 Philip Lowman # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) #------------------------------------------------------------------------------- # Before we go searching, check whether boost-cmake is avaialble, unless the # user specifically asked NOT to search for boost-cmake. # # If Boost_DIR is set, this behaves as any find_package call would. If not, # it looks at BOOST_ROOT and BOOSTROOT to find Boost. # if (NOT Boost_NO_BOOST_CMAKE) # If Boost_DIR is not set, look for BOOSTROOT and BOOST_ROOT as alternatives, # since these are more conventional for Boost. if ("$ENV{Boost_DIR}" STREQUAL "") if (NOT "$ENV{BOOST_ROOT}" STREQUAL "") set(ENV{Boost_DIR} $ENV{BOOST_ROOT}) elseif (NOT "$ENV{BOOSTROOT}" STREQUAL "") set(ENV{Boost_DIR} $ENV{BOOSTROOT}) endif() endif() # Do the same find_package call but look specifically for the CMake version. # Note that args are passed in the Boost_FIND_xxxxx variables, so there is no # need to delegate them to this find_package call. find_package(Boost QUIET NO_MODULE) # If we found boost-cmake, then we're done. Print out what we found. # Otherwise let the rest of the module try to find it. if (Boost_FOUND) message("Boost ${Boost_FIND_VERSION} found.") if (Boost_FIND_COMPONENTS) message("Found Boost components:") message(" ${Boost_FIND_COMPONENTS}") endif() return() endif() endif() #------------------------------------------------------------------------------- # FindBoost functions & macros # ############################################ # # Check the existence of the libraries. # ############################################ # This macro was taken directly from the FindQt4.cmake file that is included # with the CMake distribution. This is NOT my work. All work was done by the # original authors of the FindQt4.cmake file. Only minor modifications were # made to remove references to Qt and make this file more generally applicable # And ELSE/ENDIF pairs were removed for readability. ######################################################################### macro(_Boost_ADJUST_LIB_VARS basename) if(Boost_INCLUDE_DIR ) if(Boost_${basename}_LIBRARY_DEBUG AND Boost_${basename}_LIBRARY_RELEASE) # if the generator supports configuration types then set # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) set(Boost_${basename}_LIBRARY optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG}) else() # if there are no configuration types and CMAKE_BUILD_TYPE has no value # then just use the release libraries set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} ) endif() # FIXME: This probably should be set for both cases set(Boost_${basename}_LIBRARIES optimized ${Boost_${basename}_LIBRARY_RELEASE} debug ${Boost_${basename}_LIBRARY_DEBUG}) endif() # if only the release version was found, set the debug variable also to the release version if(Boost_${basename}_LIBRARY_RELEASE AND NOT Boost_${basename}_LIBRARY_DEBUG) set(Boost_${basename}_LIBRARY_DEBUG ${Boost_${basename}_LIBRARY_RELEASE}) set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE}) set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE}) endif() # if only the debug version was found, set the release variable also to the debug version if(Boost_${basename}_LIBRARY_DEBUG AND NOT Boost_${basename}_LIBRARY_RELEASE) set(Boost_${basename}_LIBRARY_RELEASE ${Boost_${basename}_LIBRARY_DEBUG}) set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_DEBUG}) set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_DEBUG}) endif() # If the debug & release library ends up being the same, omit the keywords if(${Boost_${basename}_LIBRARY_RELEASE} STREQUAL ${Boost_${basename}_LIBRARY_DEBUG}) set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY_RELEASE} ) set(Boost_${basename}_LIBRARIES ${Boost_${basename}_LIBRARY_RELEASE} ) endif() if(Boost_${basename}_LIBRARY) set(Boost_${basename}_LIBRARY ${Boost_${basename}_LIBRARY} CACHE FILEPATH "The Boost ${basename} library") # Remove superfluous "debug" / "optimized" keywords from # Boost_LIBRARY_DIRS foreach(_boost_my_lib ${Boost_${basename}_LIBRARY}) get_filename_component(_boost_my_lib_path "${_boost_my_lib}" PATH) list(APPEND Boost_LIBRARY_DIRS ${_boost_my_lib_path}) endforeach() list(REMOVE_DUPLICATES Boost_LIBRARY_DIRS) set(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIRS} CACHE FILEPATH "Boost library directory") set(Boost_${basename}_FOUND ON CACHE INTERNAL "Whether the Boost ${basename} library found") endif(Boost_${basename}_LIBRARY) endif(Boost_INCLUDE_DIR ) # Make variables changeble to the advanced user mark_as_advanced( Boost_${basename}_LIBRARY Boost_${basename}_LIBRARY_RELEASE Boost_${basename}_LIBRARY_DEBUG ) endmacro(_Boost_ADJUST_LIB_VARS) #------------------------------------------------------------------------------- # # Runs compiler with "-dumpversion" and parses major/minor # version with a regex. # function(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION) exec_program(${CMAKE_CXX_COMPILER} ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion OUTPUT_VARIABLE _boost_COMPILER_VERSION ) string(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2" _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION}) set(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE) endfunction() # # A convenience function for marking desired components # as found or not # function(_Boost_MARK_COMPONENTS_FOUND _yes_or_no) foreach(COMPONENT ${Boost_FIND_COMPONENTS}) string(TOUPPER ${COMPONENT} UPPERCOMPONENT) set(Boost_${UPPERCOMPONENT}_FOUND ${_yes_or_no} CACHE INTERNAL "Whether the Boost ${COMPONENT} library found" FORCE) endforeach() endfunction() # # Take a list of libraries with "thread" in it # and prepend duplicates with "thread_${Boost_THREADAPI}" # at the front of the list # function(_Boost_PREPEND_LIST_WITH_THREADAPI _output) set(_orig_libnames ${ARGN}) string(REPLACE "thread" "thread_${Boost_THREADAPI}" _threadapi_libnames ${_orig_libnames}) set(${_output} ${_threadapi_libnames} ${_orig_libnames} PARENT_SCOPE) endfunction() # # If a library is found, replace its cache entry with its REALPATH # function(_Boost_SWAP_WITH_REALPATH _library _docstring) if(${_library}) get_filename_component(_boost_filepathreal ${${_library}} REALPATH) unset(${_library} CACHE) set(${_library} ${_boost_filepathreal} CACHE FILEPATH "${_docstring}") endif() endfunction() function(_Boost_CHECK_SPELLING _var) if(${_var}) string(TOUPPER ${_var} _var_UC) message(FATAL_ERROR "ERROR: ${_var} is not the correct spelling. The proper spelling is ${_var_UC}.") endif() endfunction() # # End functions/macros # #------------------------------------------------------------------------------- if(NOT DEFINED Boost_USE_MULTITHREADED) set(Boost_USE_MULTITHREADED TRUE) endif() if(Boost_FIND_VERSION_EXACT) # The version may appear in a directory with or without the patch # level, even when the patch level is non-zero. set(_boost_TEST_VERSIONS "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}.${Boost_FIND_VERSION_PATCH}" "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") else(Boost_FIND_VERSION_EXACT) # The user has not requested an exact version. Among known # versions, find those that are acceptable to the user request. set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS} "1.48.0" "1.48" "1.47.0" "1.47" "1.46.1" "1.46.0" "1.46" "1.45.0" "1.45" "1.44.0" "1.44" "1.43.0" "1.43" "1.42.0" "1.42" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" "1.36.1" "1.36.0" "1.36" "1.35.1" "1.35.0" "1.35" "1.34.1" "1.34.0" "1.34" "1.33.1" "1.33.0" "1.33") set(_boost_TEST_VERSIONS) if(Boost_FIND_VERSION) set(_Boost_FIND_VERSION_SHORT "${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") # Select acceptable versions. foreach(version ${_Boost_KNOWN_VERSIONS}) if(NOT "${version}" VERSION_LESS "${Boost_FIND_VERSION}") # This version is high enough. list(APPEND _boost_TEST_VERSIONS "${version}") elseif("${version}.99" VERSION_EQUAL "${_Boost_FIND_VERSION_SHORT}.99") # This version is a short-form for the requested version with # the patch level dropped. list(APPEND _boost_TEST_VERSIONS "${version}") endif() endforeach(version) else(Boost_FIND_VERSION) # Any version is acceptable. set(_boost_TEST_VERSIONS "${_Boost_KNOWN_VERSIONS}") endif(Boost_FIND_VERSION) endif(Boost_FIND_VERSION_EXACT) # The reason that we failed to find Boost. This will be set to a # user-friendly message when we fail to find some necessary piece of # Boost. set(Boost_ERROR_REASON) set( _boost_IN_CACHE TRUE) if(Boost_INCLUDE_DIR) # On versions < 1.35, remove the System library from the considered list # since it wasn't added until 1.35. if(Boost_VERSION AND Boost_FIND_COMPONENTS) if(Boost_VERSION LESS 103500) list(REMOVE_ITEM Boost_FIND_COMPONENTS system) endif() endif() foreach(COMPONENT ${Boost_FIND_COMPONENTS}) string(TOUPPER ${COMPONENT} COMPONENT) if(NOT Boost_${COMPONENT}_FOUND) set( _boost_IN_CACHE FALSE) endif(NOT Boost_${COMPONENT}_FOUND) endforeach(COMPONENT) else(Boost_INCLUDE_DIR) set( _boost_IN_CACHE FALSE) endif(Boost_INCLUDE_DIR) if(_boost_IN_CACHE) # in cache already set(Boost_FOUND TRUE) foreach(COMPONENT ${Boost_FIND_COMPONENTS}) string(TOUPPER ${COMPONENT} COMPONENT) _Boost_ADJUST_LIB_VARS( ${COMPONENT} ) set(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${COMPONENT}_LIBRARY}) endforeach(COMPONENT) set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR}) if(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0") math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000") math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000") math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100") endif(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0") if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "boost ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION} " "is already in the cache. To view debugging messages, please clear the cache.") endif() else(_boost_IN_CACHE) # Need to search for boost if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Boost not in cache") # Output some of their choices message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Boost_USE_MULTITHREADED = ${Boost_USE_MULTITHREADED}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Boost_USE_STATIC_LIBS = ${Boost_USE_STATIC_LIBS}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Boost_USE_STATIC_RUNTIME = ${Boost_USE_STATIC_RUNTIME}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Boost_ADDITIONAL_VERSIONS = ${Boost_ADDITIONAL_VERSIONS}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Boost_NO_SYSTEM_PATHS = ${Boost_NO_SYSTEM_PATHS}") endif() if(WIN32) # In windows, automatic linking is performed, so you do not have # to specify the libraries. If you are linking to a dynamic # runtime, then you can choose to link to either a static or a # dynamic Boost library, the default is to do a static link. You # can alter this for a specific library "whatever" by defining # BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to be # linked dynamically. Alternatively you can force all Boost # libraries to dynamic link by defining BOOST_ALL_DYN_LINK. # This feature can be disabled for Boost library "whatever" by # defining BOOST_WHATEVER_NO_LIB, or for all of Boost by defining # BOOST_ALL_NO_LIB. # If you want to observe which libraries are being linked against # then defining BOOST_LIB_DIAGNOSTIC will cause the auto-linking # code to emit a #pragma message each time a library is selected # for linking. set(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC" CACHE STRING "Boost diagnostic define") endif(WIN32) set(_boost_INCLUDE_SEARCH_DIRS_SYSTEM C:/boost/include C:/boost "$ENV{ProgramFiles}/boost/include" "$ENV{ProgramFiles}/boost" /sw/local/include ) _Boost_CHECK_SPELLING(Boost_ROOT) _Boost_CHECK_SPELLING(Boost_LIBRARYDIR) _Boost_CHECK_SPELLING(Boost_INCLUDEDIR) # If BOOST_ROOT was defined in the environment, use it. if (NOT BOOST_ROOT AND NOT $ENV{Boost_DIR} STREQUAL "") set(BOOST_ROOT $ENV{Boost_DIR}) endif() # If BOOST_ROOT was defined in the environment, use it. if (NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "") set(BOOST_ROOT $ENV{BOOST_ROOT}) endif() # If BOOSTROOT was defined in the environment, use it. if (NOT BOOST_ROOT AND NOT $ENV{BOOSTROOT} STREQUAL "") set(BOOST_ROOT $ENV{BOOSTROOT}) endif() # If BOOST_INCLUDEDIR was defined in the environment, use it. if( NOT $ENV{BOOST_INCLUDEDIR} STREQUAL "" ) set(BOOST_INCLUDEDIR $ENV{BOOST_INCLUDEDIR}) endif() # If BOOST_LIBRARYDIR was defined in the environment, use it. if( NOT $ENV{BOOST_LIBRARYDIR} STREQUAL "" ) set(BOOST_LIBRARYDIR $ENV{BOOST_LIBRARYDIR}) endif() if( BOOST_ROOT ) file(TO_CMAKE_PATH ${BOOST_ROOT} BOOST_ROOT) endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Declared as CMake or Environmental Variables:") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " " BOOST_ROOT = ${BOOST_ROOT}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " " BOOST_INCLUDEDIR = ${BOOST_INCLUDEDIR}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " " BOOST_LIBRARYDIR = ${BOOST_LIBRARYDIR}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "_boost_TEST_VERSIONS = ${_boost_TEST_VERSIONS}") endif() if( Boost_NO_SYSTEM_PATHS) set(_boost_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH) else() set(_boost_INCLUDE_SEARCH_DIRS ${_boost_INCLUDE_SEARCH_DIRS_SYSTEM}) endif() if( BOOST_ROOT ) set(_boost_INCLUDE_SEARCH_DIRS ${BOOST_ROOT}/include ${BOOST_ROOT} ${_boost_INCLUDE_SEARCH_DIRS}) endif() # prepend BOOST_INCLUDEDIR to search path if specified if( BOOST_INCLUDEDIR ) file(TO_CMAKE_PATH ${BOOST_INCLUDEDIR} BOOST_INCLUDEDIR) set(_boost_INCLUDE_SEARCH_DIRS ${BOOST_INCLUDEDIR} ${_boost_INCLUDE_SEARCH_DIRS}) endif( BOOST_INCLUDEDIR ) # ------------------------------------------------------------------------ # Search for Boost include DIR # ------------------------------------------------------------------------ # Try to find Boost by stepping backwards through the Boost versions # we know about. if( NOT Boost_INCLUDE_DIR ) # Build a list of path suffixes for each version. set(_boost_PATH_SUFFIXES) foreach(_boost_VER ${_boost_TEST_VERSIONS}) # Add in a path suffix, based on the required version, ideally # we could read this from version.hpp, but for that to work we'd # need to know the include dir already set(_boost_BOOSTIFIED_VERSION) # Transform 1.35 => 1_35 and 1.36.0 => 1_36_0 if(_boost_VER MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+") string(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1_\\2_\\3" _boost_BOOSTIFIED_VERSION ${_boost_VER}) elseif(_boost_VER MATCHES "[0-9]+\\.[0-9]+") string(REGEX REPLACE "([0-9]+)\\.([0-9]+)" "\\1_\\2" _boost_BOOSTIFIED_VERSION ${_boost_VER}) endif() list(APPEND _boost_PATH_SUFFIXES "boost-${_boost_BOOSTIFIED_VERSION}") list(APPEND _boost_PATH_SUFFIXES "boost_${_boost_BOOSTIFIED_VERSION}") endforeach(_boost_VER) if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Include debugging info:") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " " _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " " _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}") endif() # Look for a standard boost header file. find_path(Boost_INCLUDE_DIR NAMES boost/config.hpp HINTS ${_boost_INCLUDE_SEARCH_DIRS} PATH_SUFFIXES ${_boost_PATH_SUFFIXES} ${_boost_FIND_OPTIONS} ) endif( NOT Boost_INCLUDE_DIR ) # ------------------------------------------------------------------------ # Extract version information from version.hpp # ------------------------------------------------------------------------ if(Boost_INCLUDE_DIR) # Extract Boost_VERSION and Boost_LIB_VERSION from version.hpp # Read the whole file: # set(BOOST_VERSION 0) set(BOOST_LIB_VERSION "") file(READ "${Boost_INCLUDE_DIR}/boost/version.hpp" _boost_VERSION_HPP_CONTENTS) if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "location of version.hpp: ${Boost_INCLUDE_DIR}/boost/version.hpp") endif() string(REGEX REPLACE ".*#define BOOST_VERSION ([0-9]+).*" "\\1" Boost_VERSION "${_boost_VERSION_HPP_CONTENTS}") string(REGEX REPLACE ".*#define BOOST_LIB_VERSION \"([0-9_]+)\".*" "\\1" Boost_LIB_VERSION "${_boost_VERSION_HPP_CONTENTS}") set(Boost_LIB_VERSION ${Boost_LIB_VERSION} CACHE INTERNAL "The library version string for boost libraries") set(Boost_VERSION ${Boost_VERSION} CACHE INTERNAL "The version number for boost libraries") if(NOT "${Boost_VERSION}" STREQUAL "0") math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000") math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000") math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100") set(Boost_ERROR_REASON "${Boost_ERROR_REASON}Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}\nBoost include path: ${Boost_INCLUDE_DIR}") endif(NOT "${Boost_VERSION}" STREQUAL "0") if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "version.hpp reveals boost " "${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") endif() else(Boost_INCLUDE_DIR) set(Boost_ERROR_REASON "${Boost_ERROR_REASON}Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boost's headers.") endif(Boost_INCLUDE_DIR) # ------------------------------------------------------------------------ # Suffix initialization and compiler suffix detection. # ------------------------------------------------------------------------ # Setting some more suffixes for the library set(Boost_LIB_PREFIX "") if ( WIN32 AND Boost_USE_STATIC_LIBS AND NOT CYGWIN) set(Boost_LIB_PREFIX "lib") endif() if (Boost_COMPILER) set(_boost_COMPILER ${Boost_COMPILER}) if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "using user-specified Boost_COMPILER = ${_boost_COMPILER}") endif() else(Boost_COMPILER) # Attempt to guess the compiler suffix # NOTE: this is not perfect yet, if you experience any issues # please report them and use the Boost_COMPILER variable # to work around the problems. if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR "${CMAKE_CXX_COMPILER}" MATCHES "icl" OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc") if(WIN32) set (_boost_COMPILER "-iw") else() set (_boost_COMPILER "-il") endif() elseif (MSVC11) set(_boost_COMPILER "-vc110") elseif (MSVC10) set(_boost_COMPILER "-vc100") elseif (MSVC90) set(_boost_COMPILER "-vc90") elseif (MSVC80) set(_boost_COMPILER "-vc80") elseif (MSVC71) set(_boost_COMPILER "-vc71") elseif (MSVC70) # Good luck! set(_boost_COMPILER "-vc7") # yes, this is correct elseif (MSVC60) # Good luck! set(_boost_COMPILER "-vc6") # yes, this is correct elseif (BORLAND) set(_boost_COMPILER "-bcb") elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "SunPro") set(_boost_COMPILER "-sw") elseif (MINGW) if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34) set(_boost_COMPILER "-mgw") # no GCC version encoding prior to 1.34 else() _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION) set(_boost_COMPILER "-mgw${_boost_COMPILER_VERSION}") endif() elseif (UNIX) if (CMAKE_COMPILER_IS_GNUCXX) if(${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION} VERSION_LESS 1.34) set(_boost_COMPILER "-gcc") # no GCC version encoding prior to 1.34 else() _Boost_COMPILER_DUMPVERSION(_boost_COMPILER_VERSION) # Determine which version of GCC we have. if(APPLE) if(Boost_MINOR_VERSION) if(${Boost_MINOR_VERSION} GREATER 35) # In Boost 1.36.0 and newer, the mangled compiler name used # on Mac OS X/Darwin is "xgcc". set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}") else(${Boost_MINOR_VERSION} GREATER 35) # In Boost <= 1.35.0, there is no mangled compiler name for # the Mac OS X/Darwin version of GCC. set(_boost_COMPILER "") endif(${Boost_MINOR_VERSION} GREATER 35) else(Boost_MINOR_VERSION) # We don't know the Boost version, so assume it's # pre-1.36.0. set(_boost_COMPILER "") endif(Boost_MINOR_VERSION) else() set(_boost_COMPILER "-gcc${_boost_COMPILER_VERSION}") endif() endif() endif (CMAKE_COMPILER_IS_GNUCXX) endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "guessed _boost_COMPILER = ${_boost_COMPILER}") endif() endif(Boost_COMPILER) set (_boost_MULTITHREADED "-mt") if( NOT Boost_USE_MULTITHREADED ) set (_boost_MULTITHREADED "") endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "_boost_MULTITHREADED = ${_boost_MULTITHREADED}") endif() #====================== # Systematically build up the Boost ABI tag # http://boost.org/doc/libs/1_41_0/more/getting_started/windows.html#library-naming set( _boost_RELEASE_ABI_TAG "-") set( _boost_DEBUG_ABI_TAG "-") # Key Use this library when: # s linking statically to the C++ standard library and # compiler runtime support libraries. if(Boost_USE_STATIC_RUNTIME) set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}s") set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}s") endif() # g using debug versions of the standard and runtime # support libraries if(WIN32) if(MSVC OR "${CMAKE_CXX_COMPILER}" MATCHES "icl" OR "${CMAKE_CXX_COMPILER}" MATCHES "icpc") set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}g") endif() endif() # y using special debug build of python if(Boost_USE_DEBUG_PYTHON) set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}y") endif() # d using a debug version of your code set(_boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}d") # p using the STLport standard library rather than the # default one supplied with your compiler if(Boost_USE_STLPORT) set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}p") set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}p") endif() # n using the STLport deprecated "native iostreams" feature if(Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS) set( _boost_RELEASE_ABI_TAG "${_boost_RELEASE_ABI_TAG}n") set( _boost_DEBUG_ABI_TAG "${_boost_DEBUG_ABI_TAG}n") endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "_boost_RELEASE_ABI_TAG = ${_boost_RELEASE_ABI_TAG}") message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "_boost_DEBUG_ABI_TAG = ${_boost_DEBUG_ABI_TAG}") endif() # ------------------------------------------------------------------------ # Begin finding boost libraries # ------------------------------------------------------------------------ if(BOOST_ROOT) set(_boost_LIBRARY_SEARCH_DIRS_ALWAYS ${BOOST_ROOT}/lib ${BOOST_ROOT}/stage/lib) endif() set(_boost_LIBRARY_SEARCH_DIRS_ALWAYS ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS} ${Boost_INCLUDE_DIR}/lib ${Boost_INCLUDE_DIR}/../lib ${Boost_INCLUDE_DIR}/stage/lib ) set(_boost_LIBRARY_SEARCH_DIRS_SYSTEM C:/boost/lib C:/boost "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}_${Boost_SUBMINOR_VERSION}/lib" "$ENV{ProgramFiles}/boost/boost_${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION}/lib" "$ENV{ProgramFiles}/boost/lib" "$ENV{ProgramFiles}/boost" /sw/local/lib ) set(_boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_ALWAYS}) if( Boost_NO_SYSTEM_PATHS ) set(_boost_FIND_OPTIONS NO_CMAKE_SYSTEM_PATH) else() list(APPEND _boost_LIBRARY_SEARCH_DIRS ${_boost_LIBRARY_SEARCH_DIRS_SYSTEM}) endif() # prepend BOOST_LIBRARYDIR to search path if specified if( BOOST_LIBRARYDIR ) file(TO_CMAKE_PATH ${BOOST_LIBRARYDIR} BOOST_LIBRARYDIR) set(_boost_LIBRARY_SEARCH_DIRS ${BOOST_LIBRARYDIR} ${_boost_LIBRARY_SEARCH_DIRS}) endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "_boost_LIBRARY_SEARCH_DIRS = ${_boost_LIBRARY_SEARCH_DIRS}") endif() # Support preference of static libs by adjusting CMAKE_FIND_LIBRARY_SUFFIXES if( Boost_USE_STATIC_LIBS ) set( _boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) if(WIN32) set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) else() set(CMAKE_FIND_LIBRARY_SUFFIXES .a ) endif() endif() # We want to use the tag inline below without risking double dashes if(_boost_RELEASE_ABI_TAG) if(${_boost_RELEASE_ABI_TAG} STREQUAL "-") set(_boost_RELEASE_ABI_TAG "") endif() endif() if(_boost_DEBUG_ABI_TAG) if(${_boost_DEBUG_ABI_TAG} STREQUAL "-") set(_boost_DEBUG_ABI_TAG "") endif() endif() # The previous behavior of FindBoost when Boost_USE_STATIC_LIBS was enabled # on WIN32 was to: # 1. Search for static libs compiled against a SHARED C++ standard runtime library (use if found) # 2. Search for static libs compiled against a STATIC C++ standard runtime library (use if found) # We maintain this behavior since changing it could break people's builds. # To disable the ambiguous behavior, the user need only # set Boost_USE_STATIC_RUNTIME either ON or OFF. set(_boost_STATIC_RUNTIME_WORKAROUND false) if(WIN32 AND Boost_USE_STATIC_LIBS) if(NOT DEFINED Boost_USE_STATIC_RUNTIME) set(_boost_STATIC_RUNTIME_WORKAROUND true) endif() endif() foreach(COMPONENT ${Boost_FIND_COMPONENTS}) string(TOUPPER ${COMPONENT} UPPERCOMPONENT) set( Boost_${UPPERCOMPONENT}_LIBRARY "Boost_${UPPERCOMPONENT}_LIBRARY-NOTFOUND" ) set( Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE-NOTFOUND" ) set( Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG-NOTFOUND") set( _boost_docstring_release "Boost ${COMPONENT} library (release)") set( _boost_docstring_debug "Boost ${COMPONENT} library (debug)") # # Find RELEASE libraries # set(_boost_RELEASE_NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} ${Boost_LIB_PREFIX}boost_${COMPONENT} ) if(_boost_STATIC_RUNTIME_WORKAROUND) set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}") list(APPEND _boost_RELEASE_NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_RELEASE_STATIC_ABI_TAG} ) endif() if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread") _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_RELEASE_NAMES ${_boost_RELEASE_NAMES}) endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}") endif() find_library(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE NAMES ${_boost_RELEASE_NAMES} HINTS ${_boost_LIBRARY_SEARCH_DIRS} ${_boost_FIND_OPTIONS} DOC "${_boost_docstring_release}" ) # # Find DEBUG libraries # set(_boost_DEBUG_NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_ABI_TAG} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED} ${Boost_LIB_PREFIX}boost_${COMPONENT} ) if(_boost_STATIC_RUNTIME_WORKAROUND) set(_boost_DEBUG_STATIC_ABI_TAG "-s${_boost_DEBUG_ABI_TAG}") list(APPEND _boost_DEBUG_NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_DEBUG_STATIC_ABI_TAG} ) endif() if(Boost_THREADAPI AND ${COMPONENT} STREQUAL "thread") _Boost_PREPEND_LIST_WITH_THREADAPI(_boost_DEBUG_NAMES ${_boost_DEBUG_NAMES}) endif() if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}") endif() find_library(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG NAMES ${_boost_DEBUG_NAMES} HINTS ${_boost_LIBRARY_SEARCH_DIRS} ${_boost_FIND_OPTIONS} DOC "${_boost_docstring_debug}" ) if(Boost_REALPATH) _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE "${_boost_docstring_release}") _Boost_SWAP_WITH_REALPATH(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG "${_boost_docstring_debug}" ) endif() _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT}) endforeach(COMPONENT) # Restore the original find library ordering if( Boost_USE_STATIC_LIBS ) set(CMAKE_FIND_LIBRARY_SUFFIXES ${_boost_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) endif() # ------------------------------------------------------------------------ # End finding boost libraries # ------------------------------------------------------------------------ set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR} ) set(Boost_FOUND FALSE) if(Boost_INCLUDE_DIR) set( Boost_FOUND TRUE ) # Check the version of Boost against the requested version. if (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR) message(SEND_ERROR "When requesting a specific version of Boost, you must provide at least the major and minor version numbers, e.g., 1.34") endif (Boost_FIND_VERSION AND NOT Boost_FIND_VERSION_MINOR) if(Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" ) set( Boost_FOUND FALSE ) set(_Boost_VERSION_AGE "old") elseif(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) if(Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" ) set( Boost_FOUND FALSE ) set(_Boost_VERSION_AGE "old") elseif(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) if( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" ) set( Boost_FOUND FALSE ) set(_Boost_VERSION_AGE "old") endif( Boost_FIND_VERSION_PATCH AND Boost_SUBMINOR_VERSION LESS "${Boost_FIND_VERSION_PATCH}" ) endif( Boost_MINOR_VERSION LESS "${Boost_FIND_VERSION_MINOR}" ) endif( Boost_MAJOR_VERSION LESS "${Boost_FIND_VERSION_MAJOR}" ) if (NOT Boost_FOUND) _Boost_MARK_COMPONENTS_FOUND(OFF) endif() if (Boost_FOUND AND Boost_FIND_VERSION_EXACT) # If the user requested an exact version of Boost, check # that. We already know that the Boost version we have is >= the # requested version. set(_Boost_VERSION_AGE "new") # If the user didn't specify a patchlevel, it's 0. if (NOT Boost_FIND_VERSION_PATCH) set(Boost_FIND_VERSION_PATCH 0) endif (NOT Boost_FIND_VERSION_PATCH) # We'll set Boost_FOUND true again if we have an exact version match. set(Boost_FOUND FALSE) _Boost_MARK_COMPONENTS_FOUND(OFF) if(Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) if(Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) if(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" ) set( Boost_FOUND TRUE ) _Boost_MARK_COMPONENTS_FOUND(ON) endif(Boost_SUBMINOR_VERSION EQUAL "${Boost_FIND_VERSION_PATCH}" ) endif( Boost_MINOR_VERSION EQUAL "${Boost_FIND_VERSION_MINOR}" ) endif( Boost_MAJOR_VERSION EQUAL "${Boost_FIND_VERSION_MAJOR}" ) endif (Boost_FOUND AND Boost_FIND_VERSION_EXACT) if(NOT Boost_FOUND) # State that we found a version of Boost that is too new or too old. set(Boost_ERROR_REASON "${Boost_ERROR_REASON}\nDetected version of Boost is too ${_Boost_VERSION_AGE}. Requested version was ${Boost_FIND_VERSION_MAJOR}.${Boost_FIND_VERSION_MINOR}") if (Boost_FIND_VERSION_PATCH) set(Boost_ERROR_REASON "${Boost_ERROR_REASON}.${Boost_FIND_VERSION_PATCH}") endif (Boost_FIND_VERSION_PATCH) if (NOT Boost_FIND_VERSION_EXACT) set(Boost_ERROR_REASON "${Boost_ERROR_REASON} (or newer)") endif (NOT Boost_FIND_VERSION_EXACT) set(Boost_ERROR_REASON "${Boost_ERROR_REASON}.") endif (NOT Boost_FOUND) # Always check for missing components set(_boost_CHECKED_COMPONENT FALSE) set(_Boost_MISSING_COMPONENTS "") foreach(COMPONENT ${Boost_FIND_COMPONENTS}) string(TOUPPER ${COMPONENT} COMPONENT) set(_boost_CHECKED_COMPONENT TRUE) if(NOT Boost_${COMPONENT}_FOUND) string(TOLOWER ${COMPONENT} COMPONENT) list(APPEND _Boost_MISSING_COMPONENTS ${COMPONENT}) set( Boost_FOUND FALSE) endif() endforeach(COMPONENT) if(Boost_DEBUG) message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] Boost_FOUND = ${Boost_FOUND}") endif() if (_Boost_MISSING_COMPONENTS) # We were unable to find some libraries, so generate a sensible # error message that lists the libraries we were unable to find. set(Boost_ERROR_REASON "${Boost_ERROR_REASON}\nThe following Boost libraries could not be found:\n") foreach(COMPONENT ${_Boost_MISSING_COMPONENTS}) set(Boost_ERROR_REASON "${Boost_ERROR_REASON} boost_${COMPONENT}\n") endforeach(COMPONENT) list(LENGTH Boost_FIND_COMPONENTS Boost_NUM_COMPONENTS_WANTED) list(LENGTH _Boost_MISSING_COMPONENTS Boost_NUM_MISSING_COMPONENTS) if (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) set(Boost_ERROR_REASON "${Boost_ERROR_REASON}No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.") else (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) set(Boost_ERROR_REASON "${Boost_ERROR_REASON}Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.") endif (${Boost_NUM_COMPONENTS_WANTED} EQUAL ${Boost_NUM_MISSING_COMPONENTS}) endif (_Boost_MISSING_COMPONENTS) if( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT ) # Compatibility Code for backwards compatibility with CMake # 2.4's FindBoost module. # Look for the boost library path. # Note that the user may not have installed any libraries # so it is quite possible the Boost_LIBRARY_PATH may not exist. set(_boost_LIB_DIR ${Boost_INCLUDE_DIR}) if("${_boost_LIB_DIR}" MATCHES "boost-[0-9]+") get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH) endif() if("${_boost_LIB_DIR}" MATCHES "/include$") # Strip off the trailing "/include" in the path. get_filename_component(_boost_LIB_DIR ${_boost_LIB_DIR} PATH) endif() if(EXISTS "${_boost_LIB_DIR}/lib") set(_boost_LIB_DIR ${_boost_LIB_DIR}/lib) else() if(EXISTS "${_boost_LIB_DIR}/stage/lib") set(_boost_LIB_DIR ${_boost_LIB_DIR}/stage/lib) else() set(_boost_LIB_DIR "") endif() endif() if(_boost_LIB_DIR AND EXISTS "${_boost_LIB_DIR}") set(Boost_LIBRARY_DIRS ${_boost_LIB_DIR} CACHE FILEPATH "Boost library directory") endif() endif( NOT Boost_LIBRARY_DIRS AND NOT _boost_CHECKED_COMPONENT ) else(Boost_INCLUDE_DIR) set( Boost_FOUND FALSE) endif(Boost_INCLUDE_DIR) if(Boost_FOUND) if(NOT Boost_FIND_QUIETLY) message(STATUS "Boost version: ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}") if(Boost_FIND_COMPONENTS) message(STATUS "Found the following Boost libraries:") endif() endif(NOT Boost_FIND_QUIETLY) foreach( COMPONENT ${Boost_FIND_COMPONENTS} ) string( TOUPPER ${COMPONENT} UPPERCOMPONENT ) if( Boost_${UPPERCOMPONENT}_FOUND ) if(NOT Boost_FIND_QUIETLY) message (STATUS " ${COMPONENT}") endif(NOT Boost_FIND_QUIETLY) set(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${UPPERCOMPONENT}_LIBRARY}) endif( Boost_${UPPERCOMPONENT}_FOUND ) endforeach(COMPONENT) else() if(Boost_FIND_REQUIRED) message(SEND_ERROR "Unable to find the requested Boost libraries.\n${Boost_ERROR_REASON}") else() if(NOT Boost_FIND_QUIETLY) # we opt not to automatically output Boost_ERROR_REASON here as # it could be quite lengthy and somewhat imposing in it's requests # Since Boost is not always a required dependency we'll leave this # up to the end-user. if(Boost_DEBUG OR Boost_DETAILED_FAILURE_MSG) message(STATUS "Could NOT find Boost\n${Boost_ERROR_REASON}") else() message(STATUS "Could NOT find Boost") endif() endif() endif(Boost_FIND_REQUIRED) endif() # show the Boost_INCLUDE_DIRS AND Boost_LIBRARIES variables only in the advanced view mark_as_advanced(Boost_INCLUDE_DIR Boost_INCLUDE_DIRS Boost_LIBRARY_DIRS ) endif(_boost_IN_CACHE) openscad-2013.01+dfsg.orig/tests/csgtexttest.cc0000644000175000017500000000636411777162366021013 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "CSGTextRenderer.h" #include "CSGTextCache.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; void csgTree(CSGTextCache &cache, const AbstractNode &root) { CSGTextRenderer renderer(cache); Traverser render(renderer, root, Traverser::PRE_AND_POSTFIX); render.execute(); } int main(int argc, char **argv) { if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfilename = argv[2]; int rc = 0; Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; AbstractNode *root_node; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); Tree tree; tree.setRoot(root_node); CSGTextCache csgcache(tree); csgTree(csgcache, *root_node); // std::cout << tree.getString(*root_node) << "\n"; current_path(original_path); std::ofstream outfile; outfile.open(outfilename); outfile << csgcache[*root_node] << "\n"; outfile.close(); delete root_node; delete root_module; Builtins::instance(true); return rc; } openscad-2013.01+dfsg.orig/tests/CMingw-cross-env.cmake0000644000175000017500000001247511720162270022204 0ustar chrysnchrysn# # CMake Toolchain file for cross compiling OpenSCAD tests linux->mingw-win32 # -------------------------------------------------------------------------- # # Prerequisites: mingw-cross-env, ImageMagick 6.5.9.3 or newer, wine # # Usage: # # - follow Brad Pitcher's mingw-cross-env for OpenSCAD setup: # http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X # - cross-compile openscad.exe, to verify your installation works properly. # - cd openscad/tests && mkdir build-mingw32 && cd build-mingw32 # - cmake .. -DCMAKE_TOOLCHAIN_FILE=../CMingw-cross-env.cmake \ # -DMINGW_CROSS_ENV_DIR= # - make should proceed as normal. # - now run 'ctest' on your *nix machine. # The test .exe programs should run under Wine. # # See also: # # http://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/threads.html#00078 # (thread "Qt with Cmake") # http://lists.gnu.org/archive/html/mingw-cross-env-list/2011-01/threads.html#00012 # (thread "Qt: pkg-config files?") # http://mingw-cross-env.nongnu.org/#requirements # http://www.vtk.org/Wiki/CMake_Cross_Compiling # https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch # http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake # http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html # Makefile.Release generated by qmake # cmake's FindQt4.cmake & Qt4ConfigDependentSettings.cmake files # mingw-cross-env's qmake.conf and *.prl files # mingw-cross-env's pkg-config files in usr/i686-pc-mingw32/lib/pkgconfig # http://www.vtk.org/Wiki/CMake:How_To_Find_Libraries # # # Notes: # # To debug the build process run "make VERBOSE=1". 'strace -f' is also useful. # # This file is actually called multiple times by cmake, so various 'if NOT set' # guards are used to keep programs from running twice. # # The test will not currently run under win32 because the ctest harness # is created by cmake on the machine that it is called on, not on the # machine it is targeting. # # # Part 1. Find *nix-ImageMagick # # The tests run under Wine under *nix. Therefore we need to find the # ImageMagick comparison program on the *nix machine. It must be # searched before the 'cross-compile' environment is setup. # if (NOT imagemagick_cross_set) find_package(ImageMagick COMPONENTS convert REQUIRED) message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) set( SKIP_IMAGEMAGICK TRUE ) set( imagemagick_cross_set ) endif() # # Part 2. cross-compiler setup # set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) set(BUILD_SHARED_LIBS OFF) set(CMAKE_SYSTEM_NAME Windows) set(MSYS 1) set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres) set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) set(CMAKE_BUILD_TYPE RelWithDebInfo) # # Part 3. library settings for mingw-cross-env # set( Boost_USE_STATIC_LIBS ON ) set( Boost_USE_MULTITHREADED ON ) set( Boost_COMPILER "_win32" ) # set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} ) set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} ) set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL ) set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} ) # # Qt4 # # To workaround problems with CMake's FindQt4.cmake when combined with # mingw-cross-env (circa early 2012), we here instead use pkg-config. To # workaround Cmake's insertion of -bdynamic, we stick 'static' on the # end of QT_LIBRARIES # set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc) set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic) function(mingw_cross_env_find_qt) # called from CMakeLists.txt find_package( PkgConfig ) pkg_check_modules( QTCORE QtCore ) pkg_check_modules( QTGUI QtGui ) pkg_check_modules( QTOPENGL QtOpenGL ) set(QT_INCLUDE_DIRS ${QTCORE_INCLUDE_DIRS} ${QTGUI_INCLUDE_DIRS} ${QTOPENGL_INCLUDE_DIRS}) set(QT_CFLAGS_OTHER "${QTCORE_CFLAGS_OTHER} ${QTGUI_CFLAGS_OTHER} ${QTOPENGL_CFLAGS_OTHER}") set(QT_LIBRARIES "${QTCORE_STATIC_LDFLAGS} ${QTGUI_STATIC_LDFLAGS} ${QTOPENGL_STATIC_LDFLAGS};-static") set(QT_INCLUDE_DIRS ${QT_INCLUDE_DIRS} PARENT_SCOPE) set(QT_CFLAGS_OTHER ${QT_CFLAGS_OTHER} PARENT_SCOPE) set(QT_LIBRARIES ${QT_LIBRARIES} PARENT_SCOPE) endfunction() function(mingw_cross_env_info) message(STATUS "QT INCLUDE_DIRS: ${QT_INCLUDE_DIRS}") message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}") message(STATUS "QT_CFLAGS_OTHER: ${QT_CFLAGS_OTHER}") endfunction() # # Part 4. -D definitions # if( NOT cross_defs_set ) add_definitions( -DGLEW_STATIC ) # FindGLEW.cmake needs this add_definitions( -DBOOST_STATIC ) add_definitions( -DBOOST_THREAD_USE_LIB ) add_definitions( -DUNICODE ) # because qmake does it set(cross_defs_set 1) endif() openscad-2013.01+dfsg.orig/tests/FindGLEW.cmake0000644000175000017500000000362411745120722020441 0ustar chrysnchrysn# # Try to find GLEW library and include path. # Once done this will define # # GLEW_FOUND # GLEW_INCLUDE_DIR # GLEW_LIBRARY # # a few lines of this file are based on the LGPL code found at # http://openlibraries.org/browser/trunk/FindGLEW.cmake?rev=1383 include(FindPkgConfig) if (PKG_CONFIG_FOUND) message("Doing pkg config glew check...") pkg_check_modules(GLEW glew>=1.6) endif() if (GLEW_LIBRARIES) set(GLEW_INCLUDE_DIR "${GLEW_INCLUDE_DIRS}") set(GLEW_LIBRARY ${GLEW_LDFLAGS}) else() if (WIN32 AND MSVC) if (WIN32_STATIC_BUILD) # passed from caller set(GLEW_LIB_SEARCH_NAME glew32s.lib) # static, non-debug (Release) else () set(GLEW_LIB_SEARCH_NAME glew32.lib) # other. untested with OpenSCAD endif() else () # GCC set(GLEW_LIB_SEARCH_NAME "libglew32s.a") endif () if (WIN32) find_path(GLEW_INCLUDE_DIR GL/glew.h $ENV{PROGRAMFILES}/GLEW/include ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include DOC "The directory where GL/glew.h resides") find_library(GLEW_LIBRARY NAMES ${GLEW_LIB_SEARCH_NAME} PATHS $ENV{PROGRAMFILES}/GLEW/lib ${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin ${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib DOC "The GLEW library") else (WIN32) find_path(GLEW_INCLUDE_DIR GL/glew.h PATHS /usr/include /usr/local/include /usr/pkg/include NO_DEFAULT_PATH DOC "The directory where GL/glew.h resides") find_library(GLEW_LIBRARY NAMES GLEW glew PATHS /usr/lib /usr/local/lib /usr/pkg/lib NO_DEFAULT_PATH DOC "The GLEW library") endif (WIN32) if (GLEW_INCLUDE_DIR) set(GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") message(STATUS "GLEW include found in " ${GLEW_INCLUDE_DIR} ) message(STATUS "GLEW library found in " ${GLEW_LIBRARY} ) else() set(GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") endif() endif() openscad-2013.01+dfsg.orig/tests/cgalpngtest.cc0000644000175000017500000001177512076022157020731 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "polyset.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include "CGAL_Nef_polyhedron.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #include "CGALRenderer.h" #include "CGAL_renderer.h" #include "cgal.h" #include "OffscreenView.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; void cgalTree(Tree &tree) { assert(tree.root()); CGALEvaluator evaluator(tree); Traverser evaluate(evaluator, *tree.root(), Traverser::PRE_AND_POSTFIX); evaluate.execute(); } AbstractNode *find_root_tag(AbstractNode *n) { foreach(AbstractNode *v, n->children) { if (v->modinst->tag_root) return v; if (AbstractNode *vroot = find_root_tag(v)) return vroot; } return NULL; } struct CsgInfo { OffscreenView *glview; }; extern Vector3d getBoundingCenter(BoundingBox bbox); extern double getBoundingRadius(BoundingBox bbox); int main(int argc, char **argv) { if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfile = argv[2]; #ifdef ENABLE_CGAL // Causes CGAL errors to abort directly instead of throwing exceptions // (which we don't catch). This gives us stack traces without rerunning in gdb. CGAL::set_error_behaviour(CGAL::ABORT); #endif Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); AbstractNode *absolute_root_node = root_module->evaluate(&root_ctx, &root_inst); AbstractNode *root_node; // Do we have an explicit root node (! modifier)? if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node; Tree tree(root_node); CsgInfo csgInfo; CGALEvaluator cgalevaluator(tree); PolySetCGALEvaluator psevaluator(cgalevaluator); CGAL_Nef_polyhedron N = cgalevaluator.evaluateCGALMesh(*root_node); current_path(original_path); // match with csgtest ends try { csgInfo.glview = new OffscreenView(512,512); } catch (int error) { fprintf(stderr,"Can't create OpenGL OffscreenView. Code: %i. Exiting.\n", error); exit(1); } CGALRenderer cgalRenderer(N); BoundingBox bbox; if (cgalRenderer.polyhedron) { CGAL::Bbox_3 cgalbbox = cgalRenderer.polyhedron->bbox(); bbox = BoundingBox(Vector3d(cgalbbox.xmin(), cgalbbox.ymin(), cgalbbox.zmin()), Vector3d(cgalbbox.xmax(), cgalbbox.ymax(), cgalbbox.zmax())); } else if (cgalRenderer.polyset) { bbox = cgalRenderer.polyset->getBoundingBox(); } Vector3d center = getBoundingCenter(bbox); double radius = getBoundingRadius(bbox); Vector3d cameradir(1, 1, -0.5); Vector3d camerapos = center - radius*2*cameradir; csgInfo.glview->setCamera(camerapos, center); csgInfo.glview->setRenderer(&cgalRenderer); csgInfo.glview->paintGL(); csgInfo.glview->save(outfile); delete root_node; delete root_module; Builtins::instance(true); return 0; } openscad-2013.01+dfsg.orig/tests/system-gl.h0000644000175000017500000000025311667754403020204 0ustar chrysnchrysn#ifndef SYSTEMGL_H_ #define SYSTEMGL_H_ #include #include std::string glew_dump(bool dumpall=false); bool report_glerror(const char *task); #endif openscad-2013.01+dfsg.orig/tests/OffscreenContextGLX.cc0000644000175000017500000002266311667754403022261 0ustar chrysnchrysn/* Create an OpenGL context without creating an OpenGL Window. for Linux. See Also glxgears.c by Brian Paul from mesa-demos (mesa3d.org) http://cgit.freedesktop.org/mesa/demos/tree/src/xdemos?id=mesa-demos-8.0.1 http://www.opengl.org/sdk/docs/man/xhtml/glXIntro.xml http://www.mesa3d.org/brianp/sig97/offscrn.htm http://glprogramming.com/blue/ch07.html OffscreenContext.mm (Mac OSX version) */ /* * Some portions of the code below are: * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "OffscreenContext.h" #include "printutils.h" #include "imageutils.h" #include "system-gl.h" #include "fbo.h" #include #include #include #include #include // for uname using namespace std; struct OffscreenContext { GLXContext openGLContext; Display *xdisplay; Window xwindow; int width; int height; fbo_t *fbo; }; void offscreen_context_init(OffscreenContext &ctx, int width, int height) { ctx.width = width; ctx.height = height; ctx.openGLContext = NULL; ctx.xdisplay = NULL; ctx.xwindow = (Window)NULL; ctx.fbo = NULL; } string get_os_info() { struct utsname u; stringstream out; if (uname(&u) < 0) out << "OS info: unknown, uname() error\n"; else { out << "OS info: " << u.sysname << " " << u.release << " " << u.version << "\n"; out << "Machine: " << u.machine; } return out.str(); } string offscreen_context_getinfo(OffscreenContext *ctx) { assert(ctx); if (!ctx->xdisplay) return string("No GL Context initialized. No information to report\n"); int major, minor; glXQueryVersion(ctx->xdisplay, &major, &minor); stringstream out; out << "GL context creator: GLX\n" << "PNG generator: lodepng\n" << "GLX version: " << major << "." << minor << "\n" << get_os_info(); return out.str(); } static XErrorHandler original_xlib_handler = (XErrorHandler) NULL; static bool XCreateWindow_failed = false; static int XCreateWindow_error(Display *dpy, XErrorEvent *event) { cerr << "XCreateWindow failed: XID: " << event->resourceid << " request: " << (int)event->request_code << " minor: " << (int)event->minor_code << "\n"; char description[1024]; XGetErrorText( dpy, event->error_code, description, 1023 ); cerr << " error message: " << description << "\n"; XCreateWindow_failed = true; return 0; } bool create_glx_dummy_window(OffscreenContext &ctx) { /* create a dummy X window without showing it. (without 'mapping' it) and save information to the ctx. This purposely does not use glxCreateWindow, to avoid crashes, "failed to create drawable" errors, and Mesa "WARNING: Application calling GLX 1.3 function when GLX 1.3 is not supported! This is an application bug!" This function will alter ctx.openGLContext and ctx.xwindow if successfull */ int attributes[] = { GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT, //support all 3, for OpenCSG GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DEPTH_SIZE, 24, // depth-stencil for OpenCSG GLX_STENCIL_SIZE, 8, GLX_DOUBLEBUFFER, True, None }; Display *dpy = ctx.xdisplay; int num_returned = 0; GLXFBConfig *fbconfigs = glXChooseFBConfig( dpy, DefaultScreen(dpy), attributes, &num_returned ); if ( fbconfigs == NULL ) { cerr << "glXChooseFBConfig failed\n"; return false; } XVisualInfo *visinfo = glXGetVisualFromFBConfig( dpy, fbconfigs[0] ); if ( visinfo == NULL ) { cerr << "glXGetVisualFromFBConfig failed\n"; XFree( fbconfigs ); return false; } // can't depend on xWin==NULL at failure. use a custom Xlib error handler instead. original_xlib_handler = XSetErrorHandler( XCreateWindow_error ); Window root = DefaultRootWindow( dpy ); XSetWindowAttributes xwin_attr; int width = ctx.width; int height = ctx.height; xwin_attr.background_pixmap = None; xwin_attr.background_pixel = 0; xwin_attr.border_pixel = 0; xwin_attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone); xwin_attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask; unsigned long int mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; Window xWin = XCreateWindow( dpy, root, 0, 0, width, height, 0, visinfo->depth, InputOutput, visinfo->visual, mask, &xwin_attr ); // Window xWin = XCreateSimpleWindow( dpy, DefaultRootWindow(dpy), 0,0,42,42, 0,0,0 ); XSync( dpy, false ); if ( XCreateWindow_failed ) { XFree( visinfo ); XFree( fbconfigs ); return false; } XSetErrorHandler( original_xlib_handler ); // Most programs would call XMapWindow here. But we don't, to keep the window hidden // XMapWindow( dpy, xWin ); GLXContext context = glXCreateNewContext( dpy, fbconfigs[0], GLX_RGBA_TYPE, NULL, True ); if ( context == NULL ) { cerr << "glXCreateNewContext failed\n"; XDestroyWindow( dpy, xWin ); XFree( visinfo ); XFree( fbconfigs ); return false; } //GLXWindow glxWin = glXCreateWindow( dpy, fbconfigs[0], xWin, NULL ); if (!glXMakeContextCurrent( dpy, xWin, xWin, context )) { //if (!glXMakeContextCurrent( dpy, glxWin, glxWin, context )) { cerr << "glXMakeContextCurrent failed\n"; glXDestroyContext( dpy, context ); XDestroyWindow( dpy, xWin ); XFree( visinfo ); XFree( fbconfigs ); return false; } ctx.openGLContext = context; ctx.xwindow = xWin; XFree( visinfo ); XFree( fbconfigs ); return true; } Bool create_glx_dummy_context(OffscreenContext &ctx) { // This will alter ctx.openGLContext and ctx.xdisplay and ctx.xwindow if successfull int major; int minor; Bool result = False; ctx.xdisplay = XOpenDisplay( NULL ); if ( ctx.xdisplay == NULL ) { cerr << "Unable to open a connection to the X server\n"; return False; } // glxQueryVersion is not always reliable. Use it, but then // also check to see if GLX 1.3 functions exist glXQueryVersion(ctx.xdisplay, &major, &minor); if ( major==1 && minor<=2 && glXGetVisualFromFBConfig==NULL ) { cerr << "Error: GLX version 1.3 functions missing. " << "Your GLX version: " << major << "." << minor << endl; } else { result = create_glx_dummy_window(ctx); } if (!result) XCloseDisplay( ctx.xdisplay ); return result; } OffscreenContext *create_offscreen_context(int w, int h) { OffscreenContext *ctx = new OffscreenContext; offscreen_context_init( *ctx, w, h ); // before an FBO can be setup, a GLX context must be created // this call alters ctx->xDisplay and ctx->openGLContext // and ctx->xwindow if successfull if (!create_glx_dummy_context( *ctx )) { return NULL; } // glewInit must come after Context creation and before FBO calls. GLenum err = glewInit(); if (GLEW_OK != err) { cerr << "Unable to init GLEW: " << glewGetErrorString(err) << endl; return NULL; } ctx->fbo = fbo_new(); if (!fbo_init(ctx->fbo, w, h)) { cerr << "GL Framebuffer Object init failed; dumping GLEW info" << endl; return NULL; } return ctx; } bool teardown_offscreen_context(OffscreenContext *ctx) { if (ctx) { fbo_unbind(ctx->fbo); fbo_delete(ctx->fbo); XDestroyWindow( ctx->xdisplay, ctx->xwindow ); glXDestroyContext( ctx->xdisplay, ctx->openGLContext ); XCloseDisplay( ctx->xdisplay ); return true; } return false; } /*! Capture framebuffer from OpenGL and write it to the given filename as PNG. */ bool save_framebuffer(OffscreenContext *ctx, const char *filename) { glXSwapBuffers(ctx->xdisplay, ctx->xwindow); if (!ctx || !filename) return false; int samplesPerPixel = 4; // R, G, B and A GLubyte pixels[ctx->width * ctx->height * samplesPerPixel]; glReadPixels(0, 0, ctx->width, ctx->height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); // Flip it vertically - images read from OpenGL buffers are upside-down int rowBytes = samplesPerPixel * ctx->width; unsigned char *flippedBuffer = (unsigned char *)malloc(rowBytes * ctx->height); if (!flippedBuffer) { cerr << "Unable to allocate flipped buffer for corrected image."; return 1; } flip_image(pixels, flippedBuffer, samplesPerPixel, ctx->width, ctx->height); bool writeok = write_png(filename, flippedBuffer, ctx->width, ctx->height); free(flippedBuffer); return writeok; } void bind_offscreen_context(OffscreenContext *ctx) { if (ctx) fbo_bind(ctx->fbo); } openscad-2013.01+dfsg.orig/tests/CSGTextCache.cc0000644000175000017500000000126111664172104020610 0ustar chrysnchrysn#include "CSGTextCache.h" bool CSGTextCache::contains(const AbstractNode &node) const { return this->cache.find(this->tree.getString(node)) != this->cache.end(); } // We cannot return a reference since the [] operator returns a temporary value string CSGTextCache::operator[](const AbstractNode &node) const { return this->cache.at(this->tree.getString(node)); } void CSGTextCache::insert(const class AbstractNode &node, const string & value) { this->cache.insert(std::make_pair(this->tree.getString(node), value)); } void CSGTextCache::remove(const class AbstractNode &node) { this->cache.erase(this->tree.getString(node)); } void CSGTextCache::clear() { this->cache.clear(); } openscad-2013.01+dfsg.orig/tests/cgaltest.cc0000644000175000017500000000700112076022157020207 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include "CGAL_Nef_polyhedron.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; void cgalTree(Tree &tree) { assert(tree.root()); CGALEvaluator evaluator(tree); Traverser evaluate(evaluator, *tree.root(), Traverser::PRE_AND_POSTFIX); evaluate.execute(); } AbstractNode *find_root_tag(AbstractNode *n) { foreach(AbstractNode *v, n->children) { if (v->modinst->tag_root) return v; if (AbstractNode *vroot = find_root_tag(v)) return vroot; } return NULL; } int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); AbstractNode *absolute_root_node = root_module->evaluate(&root_ctx, &root_inst); AbstractNode *root_node; // Do we have an explicit root node (! modifier)? if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node; Tree tree(root_node); CGALEvaluator cgalevaluator(tree); PolySetCGALEvaluator psevaluator(cgalevaluator); CGAL_Nef_polyhedron N = cgalevaluator.evaluateCGALMesh(*root_node); current_path(original_path); if (!N.isNull()) { export_stl(&N, std::cout); } Builtins::instance(true); return 0; } openscad-2013.01+dfsg.orig/tests/cgalstlsanitytest.cc0000644000175000017500000001030512076022157022163 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include "CGAL_Nef_polyhedron.h" #include "CGALEvaluator.h" #include "PolySetCGALEvaluator.h" #include #include #include #include #include #ifndef _MSC_VER #include #endif #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; void cgalTree(Tree &tree) { assert(tree.root()); CGALEvaluator evaluator(tree); Traverser evaluate(evaluator, *tree.root(), Traverser::PRE_AND_POSTFIX); evaluate.execute(); } AbstractNode *find_root_tag(AbstractNode *n) { foreach(AbstractNode *v, n->children) { if (v->modinst->tag_root) return v; if (AbstractNode *vroot = find_root_tag(v)) return vroot; } return NULL; } int main(int argc, char **argv) { int retval = 0; if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfilename = argv[2]; Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); AbstractNode *absolute_root_node = root_module->evaluate(&root_ctx, &root_inst); AbstractNode *root_node; // Do we have an explicit root node (! modifier)? if (!(root_node = find_root_tag(absolute_root_node))) root_node = absolute_root_node; Tree tree(root_node); CGALEvaluator cgalevaluator(tree); PolySetCGALEvaluator psevaluator(cgalevaluator); CGAL_Nef_polyhedron N = cgalevaluator.evaluateCGALMesh(*root_node); current_path(original_path); if (!N.isNull()) { std::ofstream outfile; outfile.open(outfilename); if (N.dim != 3) { outfile << "Error: Current top level object is not a 3D object.\n"; retval = 2; } else if (!N.p3->is_simple()) { outfile << "Error: Object isn't a valid 2-manifold! Modify your design.\n"; retval = 2; } else { std::stringstream out; export_stl(&N, out); if (out.str().find("nan") != string::npos) { outfile << "Error: nan found\n"; retval = 2; } if (out.str().find("inf") != string::npos) { outfile << "Error: inf found\n"; retval = 2; } } outfile.close(); } Builtins::instance(true); return retval; } openscad-2013.01+dfsg.orig/tests/regression/0000755000175000017500000000000012110740367020253 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/dumptest/0000755000175000017500000000000012110740367022120 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/dumptest/example010-expected.txt0000644000175000017500000000034711673656712026355 0ustar chrysnchrysn intersection() { surface(file = "example010.dat", center = true); multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { surface(file = "example010.dat", center = true); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/null-polygons-expected.txt0000644000175000017500000000056611664172105027313 0ustar chrysnchrysn linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { import(file = "null-polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 1); } linear_extrude(file = "null-polygons.dxf", layer = "", origin = [0, 0], scale = 1, height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/hull-tests-expected.txt0000644000175000017500000000257211640436733026600 0ustar chrysnchrysngroup() { group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 1, r = 10); } difference() { circle($fn = 0, $fa = 12, $fs = 1, r = 10); circle($fn = 0, $fa = 12, $fs = 1, r = 5); } } } multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 1, r = 10); } circle($fn = 0, $fa = 12, $fs = 1, r = 10); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 10, r1 = 1, r2 = 1, center = false); } difference() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 10, r1 = 1, r2 = 1, center = false); cylinder($fn = 0, $fa = 12, $fs = 1, h = 5, r1 = 1, r2 = 1, center = false); } } } } multmatrix([[1, 0, 0, 40], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 1, r1 = 10, r2 = 10, center = false); } cylinder($fn = 0, $fa = 12, $fs = 1, h = 1, r1 = 10, r2 = 10, center = false); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/dxf_rotate_extrude-expected.txt0000644000175000017500000000007511675160336030370 0ustar chrysnchrysn rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/hull3-tests-expected.txt0000644000175000017500000000170112076022157026647 0ustar chrysnchrysn hull(); hull(); hull() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 10, r2 = 10, center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) { cube(size = [5, 5, 5], center = true); } } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { hull() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 3, r2 = 3, center = false); } difference() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 4, r1 = 10, r2 = 10, center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 5, r2 = 5, center = true); } } } multmatrix([[1, 0, 0, -5], [0, 1, 0, -5], [0, 0, 1, -5], [0, 0, 0, 1]]) { hull() { intersection() { cube(size = [1, 1, 1], center = false); multmatrix([[1, 0, 0, -1], [0, 1, 0, -1], [0, 0, 1, -1], [0, 0, 0, 1]]) { cube(size = [1, 1, 1], center = false); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example019-expected.txt0000644000175000017500000001507111675160336026360 0ustar chrysnchrysn group() { multmatrix([[1, 0, 0, -100], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 45, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -95], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 46.5, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -90], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 48, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -85], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 49.5, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -80], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 51, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -75], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 52.5, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -70], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 54, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -65], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.5, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -60], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 57, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -55], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 58.5, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 60, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -45], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 59, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -40], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 58, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -35], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 57, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 56, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 55, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 54, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.05, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 56.1, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, -5], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 57.15, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 58.2, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 59.25, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 60.3, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 61.35, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 62.4, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 63.45, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 64.5, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 35], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 65.55, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 66.6, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 45], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 67.65, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 68.7, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 55], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 69.75, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 60], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 70.8, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 65], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 71.85, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 70], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 72.9, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 75], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 73.95, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 80], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 75, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 85], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 70.0714, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 90], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 65.1429, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 95], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 60.2143, r1 = 6, r2 = 2, center = false); } multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, -30], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 55.2857, r1 = 6, r2 = 2, center = false); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/glide-expected.txt0000644000175000017500000000004611673656714025563 0ustar chrysnchrysn glide(path = undef, convexity = 0); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example013-expected.txt0000644000175000017500000000154211675160336026350 0ustar chrysnchrysn intersection() { linear_extrude(height = 100, center = true, convexity = 3, $fn = 0, $fa = 12, $fs = 2) { import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) { linear_extrude(height = 100, center = true, convexity = 3, $fn = 0, $fa = 12, $fs = 2) { import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } } multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { linear_extrude(height = 100, center = true, convexity = 3, $fn = 0, $fa = 12, $fs = 2) { import(file = "example013.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/escape-test-expected.txt0000644000175000017500000000023011675160336026677 0ustar chrysnchrysn import(file = "B-\" C-\t D-\n E-'", layer = "A:\\ B:\" C:\t D:\n E:' F:\\\\", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/allmodules-expected.txt0000644000175000017500000000336312034314024026616 0ustar chrysnchrysn minkowski(convexity = 0); glide(path = undef, convexity = 0); subdiv(level = 1, convexity = 0); hull(); group(); group(); group(); intersection(); group(); union(); difference(); intersection(); linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2); linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2); rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); group(); cube(size = [1, 1, 1], center = false); sphere($fn = 0, $fa = 12, $fs = 2, r = 1); cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); polyhedron(points = undef, triangles = undef, convexity = 1); square(size = [1, 1], center = false); circle($fn = 0, $fa = 12, $fs = 2, r = 1); polygon(points = undef, paths = undef, convexity = 1); projection(cut = false, convexity = 0); render(convexity = 1); surface(file = "", center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); color([-1, -1, -1, 1]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/circle-expected.txt0000644000175000017500000000005512034314025025712 0ustar chrysnchrysn circle($fn = 0, $fa = 12, $fs = 2, r = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/highlight-modifier-expected.txt0000644000175000017500000000031112076022157030217 0ustar chrysnchrysn difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } group() { cube(size = [25, 6, 3], center = true); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/surface-expected.txt0000644000175000017500000000004611673656712026125 0ustar chrysnchrysn surface(file = "", center = false); openscad-2013.01+dfsg.orig/tests/regression/dumptest/background-modifier-expected.txt0000644000175000017500000000031312076022157030371 0ustar chrysnchrysn difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); %cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } %group() { cube(size = [25, 6, 3], center = true); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/assign-expected.txt0000644000175000017500000000001312034314025025727 0ustar chrysnchrysn group(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example007-expected.txt0000644000175000017500000000437011664172105026350 0ustar chrysnchrysn multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) { group() { difference() { rotate_extrude(file = "example007.dxf", layer = "dorn", origin = [0, 0], scale = 1, convexity = 3, $fn = 0, $fa = 12, $fs = 1); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { intersection() { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) { linear_extrude(file = "example007.dxf", layer = "cutout1", origin = [0, 0], scale = 1, height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 1); } } multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) { linear_extrude(file = "example007.dxf", layer = "cutout2", origin = [0, 0], scale = 1, height = 100, center = false, convexity = 2, $fn = 0, $fa = 12, $fs = 1); } } } } } } multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { intersection() { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) { linear_extrude(file = "example007.dxf", layer = "cutout1", origin = [0, 0], scale = 1, height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 1); } } multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -50], [0, 0, 0, 1]]) { linear_extrude(file = "example007.dxf", layer = "cutout2", origin = [0, 0], scale = 1, height = 100, center = false, convexity = 2, $fn = 0, $fa = 12, $fs = 1); } } } } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/sphere-expected.txt0000644000175000017500000000005511675160336025755 0ustar chrysnchrysn sphere($fn = 0, $fa = 12, $fs = 2, r = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/intersection-expected.txt0000644000175000017500000000002211673656713027176 0ustar chrysnchrysn intersection(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/sphere-tests-expected.txt0000644000175000017500000000217411675160336027121 0ustar chrysnchrysn sphere($fn = 0, $fa = 12, $fs = 2, r = 1); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 0); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -11], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 11], [0, 1, 0, -11], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 11], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 10, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 11], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 15, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 22], [0, 1, 0, -11], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 20, $fs = 0.3, r = 5); } multmatrix([[1, 0, 0, 22], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 30, $fs = 0.3, r = 5); } multmatrix([[1, 0, 0, 22], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 40, $fs = 0.3, r = 5); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/render-expected.txt0000644000175000017500000000003111673656714025750 0ustar chrysnchrysn render(convexity = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/group-expected.txt0000644000175000017500000000001311673656715025626 0ustar chrysnchrysn group(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example003-expected.txt0000644000175000017500000000061211673656711026351 0ustar chrysnchrysn group() { difference() { union() { cube(size = [30, 30, 30], center = true); cube(size = [40, 15, 15], center = true); cube(size = [15, 40, 15], center = true); cube(size = [15, 15, 40], center = true); } union() { cube(size = [50, 10, 10], center = true); cube(size = [10, 50, 10], center = true); cube(size = [10, 10, 50], center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/subdiv-expected.txt0000644000175000017500000000004411673656715025772 0ustar chrysnchrysn subdiv(level = 1, convexity = 0); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example004-expected.txt0000644000175000017500000000020011675160336026336 0ustar chrysnchrysn group() { difference() { cube(size = [30, 30, 30], center = true); sphere($fn = 0, $fa = 12, $fs = 2, r = 20); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example021-expected.txt0000644000175000017500000003266511664172105026354 0ustar chrysnchrysn multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = false, convexity = 0) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 15], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -15], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -5], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -5], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -15], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 15], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } multmatrix([[0.933013, 0.0669873, -0.353553, 0], [0.0669873, 0.933013, 0.353553, 0], [0.353553, -0.353553, 0.866025, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) { linear_extrude(height = 0.5, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 1) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { multmatrix([[0.933013, 0.0669873, 0.353553, 0], [0.0669873, 0.933013, -0.353553, 0], [-0.353553, 0.353553, 0.866025, 0], [0, 0, 0, 1]]) { group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } } } } } } group() { difference() { sphere($fn = 0, $fa = 30, $fs = 1, r = 25); cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 30, $fs = 1, h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/use-tests-expected.txt0000644000175000017500000000764711713230315026425 0ustar chrysnchrysn group() { group() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 0.7, r2 = 0.2, center = true); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 10, $fa = 12, $fs = 2, h = 1, r1 = 0.5, r2 = 0.5, center = true); } } cube(size = [1, 1, 1], center = true); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 4], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, -2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { sphere($fn = 8, $fa = 12, $fs = 2, r = 0.5); } } multmatrix([[1, 0, 0, -2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { difference() { cube(size = [1, 1, 1], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 2, r1 = 0.4, r2 = 0.4, center = true); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [0.5, 0.5, 1], center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 16, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) { union() { linear_extrude(height = 1.5, center = true, convexity = 1, twist = 0, slices = 2, $fn = 0, $fa = 12, $fs = 2) { circle($fn = 30, $fa = 12, $fs = 2, r = 0.3); } linear_extrude(height = 1.5, center = true, convexity = 1, twist = 0, slices = 2, $fn = 0, $fa = 12, $fs = 2) { projection(cut = false, convexity = 0) { multmatrix([[2.22045e-16, 0, -1, 0], [0, 1, 0, 0], [1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0.318198], [0, 0, 0, 1]]) { cylinder($fn = 30, $fa = 12, $fs = 2, h = 0.212132, r1 = 0.212132, r2 = 0, center = true); } } } } } } } } multmatrix([[1, 0, 0, -2], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1.43239, 0.5, 0.5], center = true); } multmatrix([[1, 0, 0, 2], [0, 1, 0, -4], [0, 0, 1, -0.5], [0, 0, 0, 1]]) { multmatrix([[0.05, 0, 0, 0], [0, 0.05, 0, 0], [0, 0, 0.05, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 17], [0, 0, 0, 1]]) { cylinder($fn = 30, $fa = 12, $fs = 2, h = 8, r1 = 6, r2 = 6, center = false); cylinder($fn = 20, $fa = 12, $fs = 2, h = 10.5, r1 = 2.5, r2 = 2.5, center = false); } multmatrix([[1, 0, 0, -6], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [12, 22.8, 19.5], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 17], [0, 0, 0, 1]]) { cube(size = [12, 7, 2.5], center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 20.8], [0, 0, 1, 17], [0, 0, 0, 1]]) { cube(size = [12, 7, 2.5], center = false); } } group(); multmatrix([[1, 0, 0, -6], [0, 1, 0, 0], [0, 0, 1, 19], [0, 0, 0, 1]]) { multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 12, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { polygon(points = [[0, 0], [18, 0], [0, 4]], paths = [[0, 1, 2]], convexity = 1); } } } } multmatrix([[1, 0, 0, -6], [0, 1, 0, -6], [0, 0, 1, 19], [0, 0, 0, 1]]) { cube(size = [12, 6.5, 4], center = false); } } group(); } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/minkowski-expected.txt0000644000175000017500000000003411673656713026506 0ustar chrysnchrysn minkowski(convexity = 0); openscad-2013.01+dfsg.orig/tests/regression/dumptest/dxf_linear_extrude-expected.txt0000644000175000017500000000013311675160336030337 0ustar chrysnchrysn linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/cube-tests-expected.txt0000644000175000017500000000066711673656711026563 0ustar chrysnchrysn cube(size = [1, 1, 1], center = false); cube(size = [1, 1, 0], center = false); cube(size = [1, 0, 1], center = false); cube(size = [0, 1, 1], center = false); cube(size = [0, 0, 0], center = false); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [2, 3, 1], center = false); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [2, 4, 2], center = true); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/color-expected.txt0000644000175000017500000000003212034314025025562 0ustar chrysnchrysn color([-1, -1, -1, 1]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/text-search-test-expected.txt0000644000175000017500000011407711745120722027676 0ustar chrysnchrysn group(); group() { multmatrix([[1, 0, 0, -60], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 2], [6, 2], [6, 1], [3, 2], [3, 6], [5, 6], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1); } multmatrix([[1, 0, 0, -52], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 0], [1, 6], [6, 6], [6, 5], [7, 5], [7, 3], [6, 3], [6, 2], [3, 2], [3, 0], [3, 3], [3, 5], [5, 5], [5, 3]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13]], convexity = 1); } multmatrix([[1, 0, 0, -44], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 3], [3, 3], [3, 2], [6, 2], [6, 1], [3, 4], [3, 5], [5, 5], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17]], convexity = 1); } multmatrix([[1, 0, 0, -36], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 1], [1, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 5], [3, 5], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], convexity = 1); } multmatrix([[1, 0, 0, -28], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[2, 1], [2, 2], [5, 2], [5, 4], [2, 4], [2, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [3, 6], [3, 5], [6, 5], [6, 4], [7, 4], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [5, 5], [5, 6], [3, 6], [3, 2], [5, 2], [5, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 1], [1, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 6], [6, 6], [6, 5], [7, 5], [7, 1], [5, 1], [5, 2], [3, 2], [3, 1], [3, 3], [3, 5], [5, 5], [5, 3]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, -4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 1], [1, 7], [5, 7], [5, 6], [6, 6], [6, 5], [7, 5], [7, 3], [6, 3], [6, 2], [5, 2], [5, 1], [3, 2], [3, 6], [4, 6], [4, 5], [5, 5], [5, 3], [4, 3], [4, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = undef, paths = undef, convexity = 1); } multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 1], [1, 7], [6, 7], [6, 6], [7, 6], [7, 4], [6, 4], [6, 2], [7, 2], [7, 1], [5, 1], [5, 2], [4, 2], [4, 3], [3, 3], [3, 1], [3, 4], [3, 6], [5, 6], [5, 4]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [7, 5], [7, 2], [6, 2], [6, 1], [3, 2], [3, 5], [5, 5], [5, 2]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15]], convexity = 1); } multmatrix([[1, 0, 0, 28], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 5], [2, 5], [2, 6], [6, 6], [6, 5], [3, 5], [3, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } multmatrix([[1, 0, 0, 36], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 1], [1, 7], [3, 7], [3, 4], [4, 4], [4, 5], [6, 5], [6, 4], [5, 4], [5, 3], [6, 3], [6, 2], [7, 2], [7, 1], [5, 1], [5, 2], [4, 2], [4, 3], [3, 3], [3, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, 44], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[1, 1], [1, 2], [5, 2], [5, 3], [2, 3], [2, 4], [1, 4], [1, 5], [2, 5], [2, 6], [7, 6], [7, 5], [3, 5], [3, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]], convexity = 1); } multmatrix([[1, 0, 0, 52], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[3, 1], [3, 2], [5, 2], [5, 1], [3, 3], [3, 7], [5, 7], [5, 3]], paths = [[0, 1, 2, 3], [4, 5, 6, 7]], convexity = 1); } } group() { multmatrix([[1, 0, 0, -24], [0, 1, 0, -8], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { group() { union() { group() { hull() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 1], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } union() { group() { hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } } } } } multmatrix([[1, 0, 0, -16], [0, 1, 0, -8], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { group() { union() { group() { hull() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 1], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } union() { group() { hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } union() { group() { hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } } } } } multmatrix([[1, 0, 0, -8], [0, 1, 0, -8], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { group() { union() { group() { hull() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 1], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 1], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 2], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 7], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 7], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } hull() { multmatrix([[1, 0, 0, 6], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 0.125); } } } } } } } } group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, -16], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { group() { union() { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } group() { group() { multmatrix([[1, 0, 0, 0.25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 1.53081e-17], [0, 1, 0, 0.25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.25], [0, 1, 0, 3.06162e-17], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -4.59243e-17], [0, 1, 0, -0.25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [3, 2], [3, 5], [2, 5], [2, 6], [3, 6], [3, 7], [5, 7], [5, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]], convexity = 1); } } } } } } } } } } multmatrix([[1, 0, 0, 8], [0, 1, 0, -16], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { group() { union() { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } group() { group() { multmatrix([[1, 0, 0, 0.25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 1.53081e-17], [0, 1, 0, 0.25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.25], [0, 1, 0, 3.06162e-17], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -4.59243e-17], [0, 1, 0, -0.25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[1, 1], [1, 2], [2, 2], [2, 3], [3, 3], [3, 4], [4, 4], [4, 5], [5, 5], [5, 6], [3, 6], [3, 5], [1, 5], [1, 6], [2, 6], [2, 7], [6, 7], [6, 6], [7, 6], [7, 5], [6, 5], [6, 4], [5, 4], [5, 3], [4, 3], [4, 2], [3, 2], [7, 2], [7, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]], convexity = 1); } } } } } } } } } } multmatrix([[1, 0, 0, 16], [0, 1, 0, -16], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { group() { union() { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } group() { group() { multmatrix([[1, 0, 0, 0.25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 1.53081e-17], [0, 1, 0, 0.25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, 0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.25], [0, 1, 0, 3.06162e-17], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, -4.59243e-17], [0, 1, 0, -0.25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } group() { multmatrix([[1, 0, 0, 0.176777], [0, 1, 0, -0.176777], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { polygon(points = [[2, 1], [2, 2], [1, 2], [1, 3], [3, 3], [3, 2], [5, 2], [5, 3], [4, 3], [4, 4], [3, 4], [3, 5], [4, 5], [4, 6], [1, 6], [1, 7], [7, 7], [7, 6], [6, 6], [6, 5], [5, 5], [5, 4], [6, 4], [6, 3], [7, 3], [7, 2], [6, 2], [6, 1]], paths = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]], convexity = 1); } } } } } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/child-expected.txt0000644000175000017500000000000112034314025025523 0ustar chrysnchrysn openscad-2013.01+dfsg.orig/tests/regression/dumptest/child-tests-expected.txt0000644000175000017500000000247511675160336026722 0ustar chrysnchrysn group() { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 16, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 16, $fa = 12, $fs = 2, h = 2, r1 = 1, r2 = 1, center = true); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [2, 2, 2], center = true); } } } group() { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 16, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); } } } multmatrix([[1, 0, 0, 2.5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 16, $fa = 12, $fs = 2, h = 2, r1 = 1, r2 = 1, center = true); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group(); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/difference-tests-expected.txt0000644000175000017500000000260111675160336027720 0ustar chrysnchrysn difference(); difference(); difference() { cube(size = [10, 10, 10], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 4, r2 = 4, center = true); } multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cube(size = [10, 10, 10], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 10.5, r1 = 4, r2 = 4, center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cube(size = [10, 10, 10], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 11, r1 = 4, r2 = 4, center = true); multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 11, r1 = 4, r2 = 4, center = true); } } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cube(size = [10, 10, 10], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.01], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 4, r1 = 4, r2 = 4, center = true); } } } multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cube(size = [10, 10, 10], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 6.99], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 4, r1 = 4, r2 = 4, center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/scale3D-tests-expected.txt0000644000175000017500000000302711745120722027100 0ustar chrysnchrysn multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 8, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); } } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 8, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); } } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 8, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); } } } linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 8, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); } } } linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 8, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); } } } linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 8, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/circle-tests-expected.txt0000644000175000017500000000216311675160336027072 0ustar chrysnchrysn circle($fn = 0, $fa = 12, $fs = 2, r = 1); multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -1], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 0); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 4, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 3], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 8, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 6], [0, 1, 0, -3], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 12, $fa = 12, $fs = 2, r = 1); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 20, $fs = 0.3, r = 1); } multmatrix([[1, 0, 0, 3], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 30, $fs = 0.3, r = 1); } multmatrix([[1, 0, 0, 6], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 40, $fs = 0.3, r = 1); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/import_dxf-tests-expected.txt0000644000175000017500000000370011776112755030006 0ustar chrysnchrysn import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, -210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/polygons.dxf", layer = "", origin = [0, 110], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, -210], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/polygons.dxf", layer = "", origin = [110, 110], scale = 0.5, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } import(file = "../../dxf/multiple-layers.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, -200], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/multiple-layers.dxf", layer = "0", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/multiple-layers.dxf", layer = "0", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 200], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/multiple-layers.dxf", layer = "noname", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 200], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/multiple-layers.dxf", layer = "Layer with a pretty long name including \\ \"special\" /'\\\\ characters", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 200], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "../../dxf/polygons.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example014-expected.txt0000644000175000017500000000131511673656711026354 0ustar chrysnchrysn intersection() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } multmatrix([[0.469846, 0.882564, 0.0180283, 0], [-0.813798, 0.44097, -0.378522, 0], [-0.34202, 0.163176, 0.925417, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } multmatrix([[0.417218, 0.668356, -0.615817, 0], [0.642459, -0.696172, -0.320299, 0], [-0.642788, -0.262003, -0.719846, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } multmatrix([[0.0190076, -0.601928, 0.798324, 0], [0.0292692, 0.798461, 0.601335, 0], [-0.999391, 0.0119363, 0.0327948, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/polyhedron-expected.txt0000644000175000017500000000010011673656715026652 0ustar chrysnchrysn polyhedron(points = undef, triangles = undef, convexity = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/hull2-tests-expected.txt0000644000175000017500000000323311675160336026656 0ustar chrysnchrysn group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 10); } difference() { circle($fn = 0, $fa = 12, $fs = 2, r = 10); circle($fn = 0, $fa = 12, $fs = 2, r = 5); } } } multmatrix([[1, 0, 0, 40], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 10); } circle($fn = 0, $fa = 12, $fs = 2, r = 10); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { hull() { multmatrix([[1, 0, 0, 15], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [2, 2], center = false); } multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [2, 2], center = false); } square(size = [2, 2], center = false); } } } multmatrix([[1, 0, 0, 30], [0, 1, 0, -25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { hull() { group() { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 3); } } group() { multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 3); } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/rotate-expected.txt0000644000175000017500000000011011673656714025765 0ustar chrysnchrysn multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example008-expected.txt0000644000175000017500000000307311664172105026350 0ustar chrysnchrysn difference() { intersection() { multmatrix([[1, 0, 0, -25], [0, 1, 0, -25], [0, 0, 1, -25], [0, 0, 0, 1]]) { linear_extrude(file = "example008.dxf", layer = "G", origin = [0, 0], scale = 1, height = 50, center = false, convexity = 3, $fn = 0, $fa = 12, $fs = 1); } multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -25], [0, 1, 0, -125], [0, 0, 1, -25], [0, 0, 0, 1]]) { linear_extrude(file = "example008.dxf", layer = "E", origin = [0, 0], scale = 1, height = 50, center = false, convexity = 3, $fn = 0, $fa = 12, $fs = 1); } } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -125], [0, 1, 0, -125], [0, 0, 1, -25], [0, 0, 0, 1]]) { linear_extrude(file = "example008.dxf", layer = "B", origin = [0, 0], scale = 1, height = 50, center = false, convexity = 3, $fn = 0, $fa = 12, $fs = 1); } } } intersection() { multmatrix([[1, 0, 0, -125], [0, 1, 0, -25], [0, 0, 1, -25], [0, 0, 0, 1]]) { linear_extrude(file = "example008.dxf", layer = "X", origin = [0, 0], scale = 1, height = 50, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 1); } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -125], [0, 1, 0, -25], [0, 0, 1, -25], [0, 0, 0, 1]]) { linear_extrude(file = "example008.dxf", layer = "X", origin = [0, 0], scale = 1, height = 50, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 1); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/import_stl-expected.txt0000644000175000017500000000015011675160336026657 0ustar chrysnchrysn import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/highlight-and-background-modifier-expected.txt0000644000175000017500000000075612076022157033111 0ustar chrysnchrysn difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); %cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); %group() { cube(size = [6, 25, 3], center = true); } } multmatrix([[1, 0, 0, 13], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); %cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); %group() { cube(size = [6, 25, 3], center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/import-expected.txt0000644000175000017500000000015011675160336025775 0ustar chrysnchrysn import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example002-expected.txt0000644000175000017500000000110711675160336026343 0ustar chrysnchrysn group() { intersection() { difference() { union() { cube(size = [30, 30, 30], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { cube(size = [15, 15, 50], center = true); } } union() { cube(size = [50, 10, 10], center = true); cube(size = [10, 50, 10], center = true); cube(size = [10, 10, 50], center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 5], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 20, r2 = 5, center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/surface-simple-expected.txt0000644000175000017500000000006711676112354027407 0ustar chrysnchrysn surface(file = "surface-simple.dat", center = true); openscad-2013.01+dfsg.orig/tests/regression/dumptest/minkowski3-tests-expected.txt0000644000175000017500000000170111675160336027724 0ustar chrysnchrysn multmatrix([[1, 0, 0, -20], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { cube(size = [10, 10, 5], center = true); cube(size = [8, 8, 10], center = true); } cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 2, r2 = 2, center = false); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { cube(size = [10, 10, 5], center = false); cube(size = [5, 5, 5], center = false); } cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 5, r2 = 5, center = false); } } } multmatrix([[1, 0, 0, 25], [0, 1, 0, 25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { cube(size = [10, 10, 5], center = false); cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 5, r2 = 5, center = false); } } } minkowski(convexity = 0); minkowski(convexity = 0); openscad-2013.01+dfsg.orig/tests/regression/dumptest/if-expected.txt0000644000175000017500000000001311673656713025066 0ustar chrysnchrysn group(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/polygon-expected.txt0000644000175000017500000000007111673656714026164 0ustar chrysnchrysn polygon(points = undef, paths = undef, convexity = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/transform-tests-expected.txt0000644000175000017500000000321611664172105027637 0ustar chrysnchrysn multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0.5, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } } multmatrix([[1, 0, 0, 20], [0, 1, 0, -30], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[0.5, 0, 0, 0], [0, 0.5, 0, 0], [0, 0, 0.5, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 2.22045e-16, -1, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[0.707107, -1.11022e-16, 0.707107, 0], [0.707107, 2.22045e-16, -0.707107, 0], [0, 1, 3.33067e-16, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } } multmatrix([[1, 0, 0, 0], [0, 0.707107, 0.707107, 0], [0, -0.707107, 0.707107, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } multmatrix([[1, 0.4, 0.1, -25], [0.4, 0.8, 0, -25], [0.2, 0.2, 0.5, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 20, r1 = 10, r2 = 0, center = false); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example005-expected.txt0000644000175000017500000000341611664172105026346 0ustar chrysnchrysn group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -120], [0, 0, 0, 1]]) { difference() { cylinder($fn = 0, $fa = 12, $fs = 1, h = 50, r1 = 100, r2 = 100, center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 50, r1 = 80, r2 = 80, center = false); } multmatrix([[1, 0, 0, 100], [0, 1, 0, 0], [0, 0, 1, 35], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } } group() { group(); multmatrix([[1, 0, 0, 0], [0, 1, 0, 80], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 200, r1 = 10, r2 = 10, center = false); } group(); multmatrix([[1, 0, 0, 69.282], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 200, r1 = 10, r2 = 10, center = false); } group(); multmatrix([[1, 0, 0, 69.282], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 200, r1 = 10, r2 = 10, center = false); } group(); multmatrix([[1, 0, 0, 9.79717e-15], [0, 1, 0, -80], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 200, r1 = 10, r2 = 10, center = false); } group(); multmatrix([[1, 0, 0, -69.282], [0, 1, 0, -40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 200, r1 = 10, r2 = 10, center = false); } group(); multmatrix([[1, 0, 0, -69.282], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 200, r1 = 10, r2 = 10, center = false); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 200], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 120, r2 = 0, center = false); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/for-expected.txt0000644000175000017500000000001311673656715025260 0ustar chrysnchrysn group(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/for-nested-tests-expected.txt0000644000175000017500000001063211675160336027677 0ustar chrysnchrysn group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 5], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 5], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 5], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 5], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 5], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 5], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 10], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 10], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 5], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 5], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 10], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } multmatrix([[1, 0, 0, 30], [0, 1, 0, 10], [0, 0, 1, 30], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 3); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/control-hull-dimension-expected.txt0000644000175000017500000000010612076022157031063 0ustar chrysnchrysn hull() { circle($fn = 0, $fa = 12, $fs = 2, r = 1); group(); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/assign-tests-expected.txt0000644000175000017500000000313611673656711027123 0ustar chrysnchrysn group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [0, 0, 0], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [0, 0, 0], center = false); } } } multmatrix([[1, 0, 0, 0.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1, 1, 1], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [0.5, 0.5, 0.5], center = false); } } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [2, 2, 2], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [1, 1, 1], center = false); } } } multmatrix([[1, 0, 0, 4.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [3, 3, 3], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [1.5, 1.5, 1.5], center = false); } } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [4, 4, 4], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = false); } } } multmatrix([[1, 0, 0, 12.5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [5, 5, 5], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2.5, 2.5, 2.5], center = false); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/root-modifier-expected.txt0000644000175000017500000000022111675160336027241 0ustar chrysnchrysn difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/scale-expected.txt0000644000175000017500000000011011673656714025556 0ustar chrysnchrysn multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/cylinder-expected.txt0000644000175000017500000000011711675160336026277 0ustar chrysnchrysn cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); openscad-2013.01+dfsg.orig/tests/regression/dumptest/cylinder-tests-expected.txt0000644000175000017500000000337611701151225027434 0ustar chrysnchrysn cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); multmatrix([[1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 0, r2 = 0, center = false); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 0, r2 = 0, center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true); } multmatrix([[1, 0, 0, 11], [0, 1, 0, -11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 5, r2 = 1, center = false); } multmatrix([[1, 0, 0, 11], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 5, r2 = 0, center = false); } multmatrix([[1, 0, 0, 11], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 8, r1 = 5, r2 = 5, center = false); } multmatrix([[1, 0, 0, 22], [0, 1, 0, -11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 0, r2 = 5, center = true); } multmatrix([[1, 0, 0, 22], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 5, r1 = 5, r2 = 0, center = false); } multmatrix([[1, 0, 0, 22], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 15, r1 = 5, r2 = 5, center = false); } multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 6, $fa = 12, $fs = 2, h = 2, r1 = 3, r2 = 3, center = false); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/import_stl-tests-expected.txt0000644000175000017500000000125511776112755030032 0ustar chrysnchrysn import(file = "import.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "import.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "import_bin.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "import.stl", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/surface-tests-expected.txt0000644000175000017500000000012511673656712027263 0ustar chrysnchrysn surface(file = "", center = false); surface(file = "surface.dat", center = true); openscad-2013.01+dfsg.orig/tests/regression/dumptest/polygon-illegal-winding-expected.txt0000644000175000017500000000077711640436733031234 0ustar chrysnchrysngroup() { polyhedron(points = [[0, -10, 60], [0, 10, 60], [0, 10, 0], [0, -10, 0], [60, -10, 60], [60, 10, 60], [10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30, -10, 50], [30, 10, 50]], triangles = [[0, 2, 3], [0, 1, 2], [0, 4, 5], [0, 5, 1], [5, 4, 2], [2, 4, 3], [6, 8, 9], [6, 7, 8], [6, 10, 11], [6, 11, 7], [10, 8, 11], [10, 9, 8], [0, 3, 9], [9, 0, 6], [10, 6, 0], [0, 4, 10], [3, 9, 10], [3, 10, 4], [1, 7, 11], [1, 11, 5], [1, 7, 8], [1, 8, 2], [2, 8, 11], [2, 11, 5]], convexity = 1); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/cube-expected.txt0000644000175000017500000000005211673656712025410 0ustar chrysnchrysn cube(size = [1, 1, 1], center = false); openscad-2013.01+dfsg.orig/tests/regression/dumptest/rotate_extrude_dxf-tests-expected.txt0000644000175000017500000000021311675160336031522 0ustar chrysnchrysn rotate_extrude(file = "../../dxf/open-polyline.dxf", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/ifelse-tests-expected.txt0000644000175000017500000000262311673656710027105 0ustar chrysnchrysn group() { cube(size = [2, 2, 2], center = true); } multmatrix([[1, 0, 0, 3], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { cube(size = [2, 2, 2], center = true); } } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { cube(size = [2, 2, 2], center = true); } } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [2, 2, 2], center = true); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example012-expected.txt0000644000175000017500000000062111664172105026337 0ustar chrysnchrysn difference() { sphere($fn = 0, $fa = 12, $fs = 1, r = 20); multmatrix([[1, 0, 0, -2.92], [0, 1, 0, 0.5], [0, 0, 1, 20], [0, 0, 0, 1]]) { multmatrix([[-1, 1.22465e-16, 1.49976e-32, 0], [1.22465e-16, 1, 1.22465e-16, 0], [0, 1.22465e-16, -1, 0], [0, 0, 0, 1]]) { import(file = "example012.stl", layer = "", origin = [0, 0], scale = 1, convexity = 5, $fn = 0, $fa = 12, $fs = 1); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/root-modifier-if-expected.txt0000644000175000017500000000016412076022157027635 0ustar chrysnchrysn group() { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } group() { cube(size = [5, 5, 5], center = false); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/intersection_for-tests-expected.txt0000644000175000017500000000135711673656712031217 0ustar chrysnchrysn intersection(); intersection(); intersection() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } multmatrix([[0.469846, 0.882564, 0.0180283, 0], [-0.813798, 0.44097, -0.378522, 0], [-0.34202, 0.163176, 0.925417, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } multmatrix([[0.417218, 0.668356, -0.615817, 0], [0.642459, -0.696172, -0.320299, 0], [-0.642788, -0.262003, -0.719846, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } multmatrix([[0.0190076, -0.601928, 0.798324, 0], [0.0292692, 0.798461, 0.601335, 0], [-0.999391, 0.0119363, 0.0327948, 0], [0, 0, 0, 1]]) { cube(size = [100, 20, 20], center = true); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/echo-expected.txt0000644000175000017500000000001311673656715025410 0ustar chrysnchrysn group(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/linear_extrude-expected.txt0000644000175000017500000000013311675160336027476 0ustar chrysnchrysn linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/projection-expected.txt0000644000175000017500000000005211673656713026647 0ustar chrysnchrysn projection(cut = false, convexity = 0); openscad-2013.01+dfsg.orig/tests/regression/dumptest/polyhedron-tests-expected.txt0000644000175000017500000000346311673656712030026 0ustar chrysnchrysn group() { polyhedron(points = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], triangles = [[0, 4, 2], [0, 2, 5], [0, 3, 4], [0, 5, 3], [1, 2, 4], [1, 5, 2], [1, 4, 3], [1, 3, 5]], convexity = 1); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polyhedron(points = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], triangles = [[0, 4, 2], [0, 2, 5], [0, 3, 4], [0, 5, 3], [1, 2, 4], [1, 5, 2], [1, 3, 4], [1, 3, 5]], convexity = 1); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polyhedron(points = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], triangles = [[0, 2, 4], [0, 5, 2], [0, 4, 3], [0, 3, 5], [1, 4, 2], [1, 2, 5], [1, 3, 4], [1, 5, 3]], convexity = 1); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { group() { polyhedron(points = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], triangles = [[0, 4, 2], [0, 2, 5], [0, 3, 4], [0, 5, 3], [1, 2, 4], [1, 5, 2], [1, 4, 3], [1, 3, 5]], convexity = 1); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polyhedron(points = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], triangles = [[0, 4, 2], [0, 2, 5], [0, 3, 4], [0, 5, 3], [1, 2, 4], [1, 5, 2], [1, 3, 4], [1, 3, 5]], convexity = 1); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polyhedron(points = [[1, 0, 0], [-1, 0, 0], [0, 1, 0], [0, -1, 0], [0, 0, 1], [0, 0, -1]], triangles = [[0, 2, 4], [0, 5, 2], [0, 4, 3], [0, 3, 5], [1, 4, 2], [1, 2, 5], [1, 3, 4], [1, 5, 3]], convexity = 1); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 2], [0, 0, 0, 1]]) { cube(size = [8, 3, 3], center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/include-tests-expected.txt0000644000175000017500000000602411713230315027240 0ustar chrysnchrysn group() { group() { cube(size = [1, 1, 1], center = true); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 0.7, r2 = 0.2, center = true); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 10, $fa = 12, $fs = 2, h = 1, r1 = 0.5, r2 = 0.5, center = true); } } multmatrix([[1, 0, 0, -2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { sphere($fn = 8, $fa = 12, $fs = 2, r = 0.5); } } multmatrix([[1, 0, 0, -2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { difference() { cube(size = [1, 1, 1], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 2, r1 = 0.4, r2 = 0.4, center = true); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [0.5, 0.5, 1], center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 16, $fa = 12, $fs = 2, r = 0.7); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1.5708, 0.5, 0.5], center = true); } multmatrix([[1, 0, 0, -2], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1.43239, 0.5, 0.5], center = true); } multmatrix([[1, 0, 0, 2], [0, 1, 0, -4], [0, 0, 1, -0.5], [0, 0, 0, 1]]) { multmatrix([[0.05, 0, 0, 0], [0, 0.05, 0, 0], [0, 0, 0.05, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 17], [0, 0, 0, 1]]) { cylinder($fn = 30, $fa = 12, $fs = 2, h = 8, r1 = 6, r2 = 6, center = false); cylinder($fn = 20, $fa = 12, $fs = 2, h = 10.5, r1 = 2.5, r2 = 2.5, center = false); } multmatrix([[1, 0, 0, -6], [0, 1, 0, -6], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [12, 22.8, 19.5], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, -5], [0, 0, 1, 17], [0, 0, 0, 1]]) { cube(size = [12, 7, 2.5], center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 20.8], [0, 0, 1, 17], [0, 0, 0, 1]]) { cube(size = [12, 7, 2.5], center = false); } } group(); multmatrix([[1, 0, 0, -6], [0, 1, 0, 0], [0, 0, 1, 19], [0, 0, 0, 1]]) { multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 12, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { polygon(points = [[0, 0], [18, 0], [0, 4]], paths = [[0, 1, 2]], convexity = 1); } } } } multmatrix([[1, 0, 0, -6], [0, 1, 0, -6], [0, 0, 1, 19], [0, 0, 0, 1]]) { cube(size = [12, 6.5, 4], center = false); } } group(); } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/minkowski2-tests-expected.txt0000644000175000017500000000143411675160336027726 0ustar chrysnchrysn multmatrix([[1, 0, 0, -20], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { square(size = [10, 10], center = true); square(size = [8, 8], center = true); } circle($fn = 0, $fa = 12, $fs = 2, r = 2); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { square(size = [10, 10], center = false); square(size = [5, 5], center = false); } circle($fn = 0, $fa = 12, $fs = 2, r = 5); } } } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { square(size = [10, 10], center = false); circle($fn = 0, $fa = 12, $fs = 2, r = 5); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/render-tests-expected.txt0000644000175000017500000000444711664172105027112 0ustar chrysnchrysn render(convexity = 1); render(convexity = 1); group() { difference() { cube(size = [100, 100, 100], center = true); multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } } } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } } } } } } } multmatrix([[1, 0, 0, 110], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { difference() { cube(size = [100, 100, 100], center = true); multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { group() { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } } } } } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { group() { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } } } } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/linear_extrude-tests-expected.txt0000644000175000017500000000261011675160336030640 0ustar chrysnchrysn rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { cube(size = [1, 1, 1], center = false); } linear_extrude(height = 10, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { square(size = [10, 10], center = false); } multmatrix([[1, 0, 0, 19], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 10, center = true, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { difference() { circle($fn = 0, $fa = 12, $fs = 2, r = 5); circle($fn = 0, $fa = 12, $fs = 2, r = 3); } } } multmatrix([[1, 0, 0, 31.5], [0, 1, 0, 2.5], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 10, center = false, convexity = 1, twist = -45, slices = 3, $fn = 0, $fa = 12, $fs = 2) { polygon(points = [[-5, -2.5], [5, -2.5], [0, 2.5]], paths = undef, convexity = 1); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 20, center = false, convexity = 1, twist = 45, slices = 2, $fn = 0, $fa = 12, $fs = 2) { square(size = [10, 10], center = false); } } multmatrix([[1, 0, 0, 19], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 20, center = false, convexity = 1, twist = 45, slices = 10, $fn = 0, $fa = 12, $fs = 2) { square(size = [10, 10], center = false); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example020-expected.txt0000644000175000017500000002545611664172105026353 0ustar chrysnchrysn multmatrix([[1, 0, 0, -30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { linear_extrude(height = 100, center = false, convexity = 8, twist = 411.429, slices = 34, $fn = 0, $fa = 12, $fs = 1) { difference() { circle($fn = 0, $fa = 12, $fs = 1, r = 20); group() { group(); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[0.62349, -0.781831, 0, 0], [0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.222521, -0.974928, 0, 0], [0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.900969, -0.433884, 0, 0], [0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.900969, 0.433884, 0, 0], [-0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.222521, 0.974928, 0, 0], [-0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[0.62349, 0.781831, 0, 0], [-0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[40, 0], [20, 0], [14.62391868272735, 3.337814009344716], [13.51453301853629, 6.508256086763372], [15.6366296493606, 12.46979603717467], [31.27325929872119, 24.93959207434934]], paths = undef, convexity = 1); } } } } } } } multmatrix([[1, 0, 0, 30], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { difference() { cylinder($fn = 6, $fa = 12, $fs = 1, h = 20, r1 = 30, r2 = 30, center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -10], [0, 0, 0, 1]]) { group() { linear_extrude(height = 40, center = false, convexity = 3, twist = 164.571, slices = 13, $fn = 0, $fa = 12, $fs = 1) { difference() { circle($fn = 0, $fa = 12, $fs = 1, r = 21); group() { group(); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[0.62349, -0.781831, 0, 0], [0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.222521, -0.974928, 0, 0], [0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.900969, -0.433884, 0, 0], [0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.900969, 0.433884, 0, 0], [-0.433884, -0.900969, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[-0.222521, 0.974928, 0, 0], [-0.974928, -0.222521, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } group(); group() { multmatrix([[0.62349, 0.781831, 0, 0], [-0.781831, 0.62349, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[42, 0], [21, 0], [15.59884659490918, 3.56033494330103], [14.41550188643871, 6.94213982588093], [16.41846113182863, 13.0932858390334], [32.83692226365725, 26.18657167806681]], paths = undef, convexity = 1); } } } } } } } } } } group() { linear_extrude(height = 100, center = false, convexity = 5, twist = 1500, slices = 79, $fn = 19.2, $fa = 12, $fs = 1) { group() { group() { group() { polygon(points = [[100, 0], [90.10870717256485, 30.58778441039996], [99.27731872645629, 33.70010865023236]], paths = undef, convexity = 1); } group(); group(); } group() { group(); group(); group() { polygon(points = [[99.27731872645629, 33.70010865023236], [90.10870717256485, 30.58778441039996], [74.08779492859099, 56.84956452855862], [84.58287312965604, 64.90272127318551]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[84.58287312965604, 64.90272127318551], [74.08779492859099, 56.84956452855862], [51.22010456048879, 76.65630364955641], [59.89394204343166, 89.63761881095262]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[59.89394204343166, 89.63761881095262], [51.22010456048879, 76.65630364955641], [23.64046582983194, 88.22741959152876], [28.12334319067221, 104.9577456662849]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[28.12334319067221, 104.9577456662849], [23.64046582983194, 88.22741959152876], [-5.934009687954409, 90.53549252778905], [-7.146616158074179, 109.0362921199316]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-7.146616158074179, 109.0362921199316], [-5.934009687954409, 90.53549252778905], [-34.56302683546026, 83.44252814283341], [-41.97365963755769, 101.3333783594239]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-41.97365963755769, 101.3333783594239], [-34.56302683546026, 83.44252814283341], [-59.39283755470954, 67.72455141159254], [-72.47632546530423, 82.64341008420294]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-72.47632546530423, 82.64341008420294], [-59.39283755470954, 67.72455141159254], [-77.94228634059948, 44.99999999999999], [-95.26279441628826, 54.99999999999999]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-95.26279441628826, 54.99999999999999], [-77.94228634059948, 44.99999999999999], [-88.34760075969918, 17.57343041942462], [-107.8094553209469, 21.444633983801]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-107.8094553209469, 21.444633983801], [-88.34760075969918, 17.57343041942462], [-89.54486254542182, -11.78880480022482], [-108.7441097293403, -14.31643364378545]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-108.7441097293403, -14.31643364378545], [-89.54486254542182, -11.78880480022482], [-81.37304131717875, -40.12874312782305], [-98.0015069893589, -48.32899491597725]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-98.0015069893589, -48.32899491597725], [-81.37304131717875, -40.12874312782305], [-64.58695376169682, -64.5869537616968], [-76.83440247561271, -76.83440247561269]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-76.83440247561271, -76.83440247561269], [-64.58695376169682, -64.5869537616968], [-40.77625404048524, -82.68606355865667], [-47.68148400331503, -96.68848474788098]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-47.68148400331503, -96.68848474788098], [-40.77625404048524, -82.68606355865667], [-12.18926961151899, -92.58669478281102], [-13.91596883249134, -105.7022774919511]], paths = undef, convexity = 1); } } group() { group(); group(); group() { polygon(points = [[-13.91596883249134, -105.7022774919511], [-12.18926961151899, -92.58669478281102], [18.56455524139444, -93.33032171881419], [20.45350916183121, -102.8267343618319]], paths = undef, convexity = 1); } } group() { group(); group() { polygon(points = [[20.45350916183121, -102.8267343618319], [18.56455524139444, -93.33032171881419], [50, -86.60254037844386]], paths = undef, convexity = 1); } group(); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/multmatrix-expected.txt0000644000175000017500000000011011673656712026673 0ustar chrysnchrysn multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/scale2D-tests-expected.txt0000644000175000017500000000201011745120722027066 0ustar chrysnchrysn multmatrix([[2, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1]]) { group() { square(size = [2, 3], center = true); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2, 0, 0, 0], [0, 1.33333, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { square(size = [2, 3], center = true); } } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2, 0, 0, 0], [0, 2, 0, 0], [0, 0, 2, 0], [0, 0, 0, 1]]) { group() { square(size = [2, 3], center = true); } } } linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { square(size = [2, 3], center = true); } } } linear_extrude(height = 100, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { square(size = [2, 3], center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/rotate_extrude-tests-expected.txt0000644000175000017500000000305311675160336030666 0ustar chrysnchrysn rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { cube(size = [1, 1, 1], center = false); } rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 10); } } multmatrix([[1, 0, 0, 50], [0, 1, 0, -20], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { circle($fn = 0, $fa = 12, $fs = 2, r = 10); circle($fn = 0, $fa = 12, $fs = 2, r = 8); } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [100, 100, 100], center = true); } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { difference() { rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 10); } } rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 8); } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [100, 100, 100], center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example017-expected.txt0000644000175000017500000002213711675160336026357 0ustar chrysnchrysn group(); group(); group() { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 74], [0, 0, 0, 1]]) { linear_extrude(height = 6, center = false, convexity = 4, $fn = 0, $fa = 12, $fs = 2) { group() { difference() { circle($fn = 0, $fa = 12, $fs = 2, r = 47); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 10], center = true); } } multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 10], center = true); } } multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 36], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 10], center = true); } } } circle($fn = 0, $fa = 12, $fs = 2, r = 25); } } } } linear_extrude(height = 6, center = false, convexity = 4, $fn = 0, $fa = 12, $fs = 2) { group() { difference() { circle($fn = 0, $fa = 12, $fs = 2, r = 102); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 15], center = true); } } multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 15], center = true); } } multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 88.5], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 15], center = true); } } } circle($fn = 0, $fa = 12, $fs = 2, r = 75); } } } color([0.7, 0.7, 1, 1]) { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 102], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { linear_extrude(height = 6, center = true, convexity = 10, $fn = 0, $fa = 12, $fs = 2) { group() { union() { difference() { polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } } multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [9, 12], center = false); } multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { circle($fn = 0, $fa = 12, $fs = 2, r = 6); multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12, 12], center = false); } } } multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { circle($fn = 0, $fa = 12, $fs = 2, r = 6); multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12, 12], center = false); } } } } } } } } } multmatrix([[-0.5, -0.866025, 0, 0], [0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 102], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { linear_extrude(height = 6, center = true, convexity = 10, $fn = 0, $fa = 12, $fs = 2) { group() { union() { difference() { polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } } multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [9, 12], center = false); } multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { circle($fn = 0, $fa = 12, $fs = 2, r = 6); multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12, 12], center = false); } } } multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { circle($fn = 0, $fa = 12, $fs = 2, r = 6); multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12, 12], center = false); } } } } } } } } } multmatrix([[-0.5, 0.866025, 0, 0], [-0.866025, -0.5, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 102], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[2.22045e-16, 2.22045e-16, -1, 0], [-1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { linear_extrude(height = 6, center = true, convexity = 10, $fn = 0, $fa = 12, $fs = 2) { group() { union() { difference() { polygon(points = [[0, 6], [6, 6], [6, 0], [21, 0], [21, 6], [27, 6], [27, 0], [77, 0], [83, 12], [77, 18], [77, 74], [71, 74], [71, 80], [61, 80], [61, 74], [55, 74], [55, 80], [49, 74], [49, 18], [43, 12], [6, 12]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 43], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } multmatrix([[1, 0, 0, 83], [0, 1, 0, 18], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } } multmatrix([[1, 0, 0, 77], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [9, 12], center = false); } multmatrix([[1, 0, 0, 86], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 6); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { circle($fn = 0, $fa = 12, $fs = 2, r = 6); multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12, 12], center = false); } } } multmatrix([[1, 0, 0, 55], [0, 1, 0, 74], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { circle($fn = 0, $fa = 12, $fs = 2, r = 6); multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12, 12], center = false); } } } } } } } } } } } %multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) { group() { rotate_extrude(convexity = 2, $fn = 0, $fa = 12, $fs = 2) { square(size = [25, 68], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 68], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { square(size = [25, 25], center = false); multmatrix([[1, 0, 0, 0], [0, 0.7, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 25); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 93], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { multmatrix([[1, 0, 0, 0], [0, 1, 0, -12.5], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [12.5, 25], center = false); } circle($fn = 0, $fa = 12, $fs = 2, r = 12.5); } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/projection-tests-expected.txt0000644000175000017500000000365511775004604030010 0ustar chrysnchrysn projection(cut = false, convexity = 0); projection(cut = false, convexity = 0); projection(cut = true, convexity = 0) { square(size = [1, 1], center = false); } linear_extrude(height = 20, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { projection(cut = false, convexity = 0) { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); } } multmatrix([[1, 0, 0, 22], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 20, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 9], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); } } } } multmatrix([[1, 0, 0, 44], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 20, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -22], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 5, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { projection(cut = true, convexity = 0) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -5], [0, 0, 0, 1]]) { cube(size = [10, 10, 10], center = true); } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -44], [0, 0, 1, 0], [0, 0, 0, 1]]) { linear_extrude(height = 5, center = false, convexity = 1, $fn = 0, $fa = 12, $fs = 2) { projection(cut = true, convexity = 0) { union() { difference() { cube(size = [5, 5, 5], center = true); cube(size = [4, 4, 4], center = true); } multmatrix([[1, 0, 0, 2.1], [0, 1, 0, 2.1], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cube(size = [5, 5, 5], center = true); cube(size = [4, 4, 4], center = true); } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/child-background-expected.txt0000644000175000017500000000024211675160336027665 0ustar chrysnchrysn difference() { sphere($fn = 0, $fa = 12, $fs = 2, r = 10); group() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/hull-expected.txt0000644000175000017500000000001211673656714025434 0ustar chrysnchrysn hull(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example001-expected.txt0000644000175000017500000000126411664172105026341 0ustar chrysnchrysn group() { difference() { sphere($fn = 0, $fa = 12, $fs = 1, r = 25); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 62.5, r1 = 12.5, r2 = 12.5, center = true); } } group() { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 62.5, r1 = 12.5, r2 = 12.5, center = true); } } group() { multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 62.5, r1 = 12.5, r2 = 12.5, center = true); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example009-expected.txt0000644000175000017500000000233011675160336026351 0ustar chrysnchrysn %linear_extrude(height = 22, center = true, convexity = 10, $fn = 0, $fa = 12, $fs = 2) { import(file = "example009.dxf", layer = "body", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } %group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 12], [0, 0, 0, 1]]) { linear_extrude(height = 2, center = true, convexity = 10, $fn = 0, $fa = 12, $fs = 2) { import(file = "example009.dxf", layer = "plate", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, -12], [0, 0, 0, 1]]) { linear_extrude(height = 2, center = true, convexity = 10, $fn = 0, $fa = 12, $fs = 2) { import(file = "example009.dxf", layer = "plate", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } } } intersection() { linear_extrude(height = 20, center = true, convexity = 10, twist = -57.5288, slices = 4, $fn = 0, $fa = 12, $fs = 2) { import(file = "example009.dxf", layer = "fan_top", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); } rotate_extrude(file = "example009.dxf", layer = "fan_side", origin = [0, -40], scale = 1, convexity = 10, $fn = 0, $fa = 12, $fs = 2); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/square-expected.txt0000644000175000017500000000005111673656714025773 0ustar chrysnchrysn square(size = [1, 1], center = false); openscad-2013.01+dfsg.orig/tests/regression/dumptest/intersection_for-expected.txt0000644000175000017500000000002211673656715030046 0ustar chrysnchrysn intersection(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example022-expected.txt0000644000175000017500000001322611675160336026352 0ustar chrysnchrysn multmatrix([[1, 0, 0, -15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { cube(size = [10, 30, 40], center = true); cube(size = [20, 20, 40], center = true); group() { multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true); } multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true); } multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 40, r1 = 5, r2 = 5, center = true); } } } } } multmatrix([[1, 0, 0, 15], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { cube(size = [20, 20, 30], center = true); cube(size = [10, 30, 30], center = true); cube(size = [10, 20, 40], center = true); group() { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 5, r2 = 5, center = true); } } } group() { multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -10], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true); } } multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -10], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true); } } multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 10], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true); } } multmatrix([[2.22045e-16, -2.22045e-16, 1, 0], [1, 0, -2.22045e-16, 0], [0, 1, 2.22045e-16, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 10], [0, 1, 0, 15], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 10, r1 = 5, r2 = 5, center = true); } } } group() { multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -15], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true); } } multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, -15], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true); } } multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 15], [0, 1, 0, -5], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true); } } multmatrix([[2.22045e-16, 1, 2.22045e-16, 0], [0, 2.22045e-16, -1, 0], [-1, 2.22045e-16, 0, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 15], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 20, r1 = 5, r2 = 5, center = true); } } } } group() { multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, -15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, -5], [0, 1, 0, -10], [0, 0, 1, 15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, -15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, -5], [0, 1, 0, 10], [0, 0, 1, 15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, -15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 5], [0, 1, 0, -10], [0, 0, 1, 15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, -15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 15], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/union-expected.txt0000644000175000017500000000001311673656714025621 0ustar chrysnchrysn union(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/import_off-expected.txt0000644000175000017500000000015011675160336026627 0ustar chrysnchrysn import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/testcolornames-expected.txt0000644000175000017500000005577311701151225027535 0ustar chrysnchrysn multmatrix([[1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.803922, 0.360784, 0.360784, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.941176, 0.501961, 0.501961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.980392, 0.501961, 0.447059, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.913725, 0.588235, 0.478431, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.627451, 0.478431, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.862745, 0.0784314, 0.235294, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.698039, 0.133333, 0.133333, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.545098, 0, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.752941, 0.796078, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.713726, 0.756863, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.411765, 0.705882, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.0784314, 0.576471, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.780392, 0.0823529, 0.521569, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.858824, 0.439216, 0.576471, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.627451, 0.478431, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.498039, 0.313726, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.388235, 0.278431, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.270588, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.54902, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.647059, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.843137, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 1, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 1, 0.878431, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.980392, 0.803922, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.980392, 0.980392, 0.823529, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.937255, 0.835294, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.894118, 0.709804, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.854902, 0.72549, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.933333, 0.909804, 0.666667, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.941176, 0.901961, 0.54902, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.741176, 0.717647, 0.419608, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.901961, 0.901961, 0.980392, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.847059, 0.74902, 0.847059, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.866667, 0.627451, 0.866667, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.933333, 0.509804, 0.933333, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.854902, 0.439216, 0.839216, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 3], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.729412, 0.333333, 0.827451, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.576471, 0.439216, 0.858824, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.541176, 0.168627, 0.886275, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.580392, 0, 0.827451, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.6, 0.196078, 0.8, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.545098, 0, 0.545098, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.501961, 0, 0.501961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.294118, 0, 0.509804, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.282353, 0.239216, 0.545098, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.415686, 0.352941, 0.803922, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 4], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.482353, 0.407843, 0.933333, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.678431, 1, 0.184314, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.498039, 1, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.486275, 0.988235, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.196078, 0.803922, 0.196078, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.596078, 0.984314, 0.596078, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.564706, 0.933333, 0.564706, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.980392, 0.603922, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 0.498039, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 5], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.235294, 0.701961, 0.443137, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.180392, 0.545098, 0.341176, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.133333, 0.545098, 0.133333, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.501961, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.392157, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.603922, 0.803922, 0.196078, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.419608, 0.556863, 0.137255, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.501961, 0.501961, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.333333, 0.419608, 0.184314, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.4, 0.803922, 0.666667, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.560784, 0.737255, 0.560784, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 6], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.12549, 0.698039, 0.666667, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.545098, 0.545098, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.501961, 0.501961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 1, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.878431, 1, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.686275, 0.933333, 0.933333, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.498039, 1, 0.831373, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.25098, 0.878431, 0.815686, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.282353, 0.819608, 0.8, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 7], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.807843, 0.819608, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.372549, 0.619608, 0.627451, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.27451, 0.509804, 0.705882, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.690196, 0.768627, 0.870588, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.690196, 0.878431, 0.901961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.678431, 0.847059, 0.901961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.529412, 0.807843, 0.921569, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.529412, 0.807843, 0.980392, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.74902, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.117647, 0.564706, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.392157, 0.584314, 0.929412, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 8], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.254902, 0.411765, 0.882353, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0, 0.803922, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0, 0.545098, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0, 0.501961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.0980392, 0.0980392, 0.439216, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.972549, 0.862745, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.921569, 0.803922, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.894118, 0.768627, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.870588, 0.678431, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 9], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.960784, 0.870588, 0.701961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.870588, 0.721569, 0.529412, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.823529, 0.705882, 0.54902, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.737255, 0.560784, 0.560784, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.956863, 0.643137, 0.376471, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.854902, 0.647059, 0.12549, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.721569, 0.52549, 0.0431373, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.803922, 0.521569, 0.247059, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.823529, 0.411765, 0.117647, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.545098, 0.270588, 0.0745098, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.627451, 0.321569, 0.176471, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.647059, 0.164706, 0.164706, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.501961, 0, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 1, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.980392, 0.980392, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.941176, 1, 0.941176, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.960784, 1, 0.980392, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.941176, 1, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.941176, 0.972549, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.972549, 0.972549, 1, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.960784, 0.960784, 0.960784, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.960784, 0.933333, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.960784, 0.960784, 0.862745, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.992157, 0.960784, 0.901961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.980392, 0.941176, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 1, 0.941176, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.980392, 0.921569, 0.843137, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.980392, 0.941176, 0.901961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.941176, 0.960784, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0.894118, 0.882353, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 9], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.862745, 0.862745, 0.862745, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 10], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.827451, 0.827451, 0.827451, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.752941, 0.752941, 0.752941, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.662745, 0.662745, 0.662745, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 2], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.501961, 0.501961, 0.501961, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 3], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.411765, 0.411765, 0.411765, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 4], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.466667, 0.533333, 0.6, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 5], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.439216, 0.501961, 0.564706, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 6], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.184314, 0.309804, 0.309804, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } multmatrix([[1, 0, 0, 7], [0, 1, 0, 13], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0, 0, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/render-2d-tests-expected.txt0000644000175000017500000000021611676112354027406 0ustar chrysnchrysn render(convexity = 1) { difference() { square(size = [100, 100], center = true); circle($fn = 0, $fa = 12, $fs = 2, r = 30); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/allfunctions-expected.txt0000644000175000017500000000000112034314024027140 0ustar chrysnchrysn openscad-2013.01+dfsg.orig/tests/regression/dumptest/translate-expected.txt0000644000175000017500000000011011673656713026463 0ustar chrysnchrysn multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/square-tests-expected.txt0000644000175000017500000000151611673656711027137 0ustar chrysnchrysn square(size = [1, 1], center = false); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [1, 1], center = true); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [1, 1], center = true); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [0, 0], center = true); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [1, 0], center = true); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [0, 1], center = true); } multmatrix([[1, 0, 0, 4], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [1, 2], center = true); } multmatrix([[1, 0, 0, 6], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [2, 1], center = true); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/for-tests-expected.txt0000644000175000017500000001111311675160336026412 0ustar chrysnchrysn group(); group(); multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group(); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 3, r2 = 3, center = false); } } group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); } multmatrix([[1, 0, 0, -10], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 2, r2 = 2, center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 3, r2 = 3, center = false); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 4, r2 = 4, center = false); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); } } group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); } multmatrix([[1, 0, 0, -10], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 2, r2 = 2, center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 3, r2 = 3, center = false); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 4, r2 = 4, center = false); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 20], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); } } group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 2, r1 = 0.5, r2 = 0.5, center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 3, r2 = 3, center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 2, r1 = 1.5, r2 = 1.5, center = true); } } multmatrix([[1, 0, 0, 20], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { difference() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 2, r1 = 2.5, r2 = 2.5, center = true); } } } group() { multmatrix([[1, 0, 0, -15], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1, 6, 2], center = true); } multmatrix([[1, 0, 0, -13], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1, 6.8, 2], center = true); } multmatrix([[1, 0, 0, -11], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1, 7.6, 2], center = true); } multmatrix([[1, 0, 0, -9], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1, 8.4, 2], center = true); } multmatrix([[1, 0, 0, -7], [0, 1, 0, 30], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [1, 9.2, 2], center = true); } } group(); group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); } multmatrix([[1, 0, 0, -10], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 2, r2 = 2, center = false); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 3, r2 = 3, center = false); } multmatrix([[1, 0, 0, 10], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 4, r2 = 4, center = false); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 40], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); } } group(); group(); group(); group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 1, r2 = 1, center = false); } multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 2, r2 = 2, center = false); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 5, r2 = 5, center = false); } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example011-expected.txt0000644000175000017500000000025611673656712026355 0ustar chrysnchrysn polyhedron(points = [[10, 0, 0], [0, 10, 0], [-10, 0, 0], [0, -10, 0], [0, 0, 10]], triangles = [[0, 1, 2, 3], [4, 1, 0], [4, 2, 1], [4, 3, 2], [4, 0, 3]], convexity = 1); openscad-2013.01+dfsg.orig/tests/regression/dumptest/2d-3d-expected.txt0000644000175000017500000000023611673656711025306 0ustar chrysnchrysn cube(size = [1, 1, 1], center = false); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [1, 1], center = false); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/minkowski-tests-expected.txt0000644000175000017500000000353611640436733027650 0ustar chrysnchrysngroup() { multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { square(size = [10, 10], center = false); multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [6, 6], center = false); } } circle($fn = 0, $fa = 12, $fs = 1, r = 2); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { square(size = [10, 10], center = false); square(size = [5, 5], center = false); } circle($fn = 0, $fa = 12, $fs = 1, r = 5); } } } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { square(size = [10, 10], center = false); circle($fn = 0, $fa = 12, $fs = 1, r = 5); } } } multmatrix([[1, 0, 0, -25], [0, 1, 0, 25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { cube(size = [10, 10, 5], center = false); multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, -2], [0, 0, 0, 1]]) { cube(size = [6, 6, 10], center = false); } } cylinder($fn = 0, $fa = 12, $fs = 1, h = 1, r1 = 2, r2 = 2, center = false); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { difference() { cube(size = [10, 10, 5], center = false); cube(size = [5, 5, 5], center = false); } cylinder($fn = 0, $fa = 12, $fs = 1, h = 5, r1 = 5, r2 = 5, center = false); } } } multmatrix([[1, 0, 0, 25], [0, 1, 0, 25], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { minkowski(convexity = 0) { cube(size = [10, 10, 5], center = false); cylinder($fn = 0, $fa = 12, $fs = 1, h = 5, r1 = 5, r2 = 5, center = false); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example018-expected.txt0000644000175000017500000001137311675160336026360 0ustar chrysnchrysn group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, -150], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [60, 60, 60], center = true); } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true); } multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [45, 45, 45], center = true); multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } } } multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 30); } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true); } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [45, 45, 45], center = true); multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 30); } multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [60, 60, 60], center = true); } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [45, 45, 45], center = true); multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 30); } multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [60, 60, 60], center = true); } multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true); } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 150], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { group() { multmatrix([[1, 0, 0, -150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 2, r = 30); } multmatrix([[1, 0, 0, -50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [60, 60, 60], center = true); } multmatrix([[1, 0, 0, 50], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 50, r1 = 30, r2 = 30, center = true); } multmatrix([[1, 0, 0, 150], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [45, 45, 45], center = true); multmatrix([[1, 0, 0, 0], [0, 0.707107, -0.707107, 0], [0, 0.707107, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, 0, 0.707107, 0], [0, 1, 0, 0], [-0.707107, 0, 0.707107, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { cube(size = [50, 50, 50], center = true); } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/union-tests-expected.txt0000644000175000017500000000273611673656711026774 0ustar chrysnchrysn multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [10, 10, 10], center = false); multmatrix([[1, 0, 0, 4], [0, 1, 0, 4], [0, 0, 1, 8], [0, 0, 0, 1]]) { cube(size = [2, 2, 10], center = false); } } } union() { cube(size = [10, 10, 10], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 10], [0, 0, 0, 1]]) { cube(size = [2, 2, 10], center = false); } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [10, 10, 10], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 11], [0, 0, 0, 1]]) { cube(size = [2, 2, 10], center = false); } } } multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [10, 10, 10], center = false); multmatrix([[1, 0, 0, 4], [0, 1, 0, 4], [0, 0, 1, 10], [0, 0, 0, 1]]) { cube(size = [2, 2, 10], center = false); } } } multmatrix([[1, 0, 0, -12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [10, 10, 10], center = false); multmatrix([[1, 0, 0, -2], [0, 1, 0, 10], [0, 0, 1, 10], [0, 0, 0, 1]]) { cube(size = [2, 2, 10], center = false); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { cube(size = [10, 10, 10], center = false); multmatrix([[1, 0, 0, 0], [0, 1, 0, 10], [0, 0, 1, 10], [0, 0, 0, 1]]) { cube(size = [2, 2, 10], center = false); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/color-tests-expected.txt0000644000175000017500000000277711676112354026760 0ustar chrysnchrysn color([-1, -1, -1, 1]); color([-1, -1, -1, 1]); multmatrix([[1, 0, 0, 12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [10, 10, 10], center = false); } } color([1, 0, 0, 1]) { multmatrix([[1, 0, 0, 24], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { cube(size = [10, 10, 10], center = false); } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0.501961, 0, 0.501961, 1]) { group() { cube(size = [10, 10, 10], center = false); } } } color([0, 0, 1, 0.5]) { group() { cube(size = [10, 10, 10], center = false); } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0, 1, 0.5]) { group() { cube(size = [10, 10, 10], center = false); } } } multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([0, 0.501961, 0, 0.2]) { group() { cube(size = [10, 10, 10], center = false); } } } multmatrix([[1, 0, 0, -12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([-1, -1, -1, 1]) { group() { cube(size = [10, 10, 10], center = false); } } } multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([-1, -1, -1, 0.5]) { group() { cube(size = [10, 10, 10], center = false); } } } multmatrix([[1, 0, 0, 24], [0, 1, 0, -12], [0, 0, 1, 0], [0, 0, 0, 1]]) { color([1, 0, 0, 1]) { color([0, 0, 1, 1]) { group() { cube(size = [10, 10, 10], center = false); } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/disable-modifier-expected.txt0000644000175000017500000000014311675160336027664 0ustar chrysnchrysn difference() { cylinder($fn = 0, $fa = 12, $fs = 2, h = 30, r1 = 6, r2 = 6, center = true); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/polyset-reduce-crash-expected.txt0000644000175000017500000000212711640436733030532 0ustar chrysnchrysngroup() { multmatrix([[0.809017, -0.587785, 0, 0], [0.587785, 0.809017, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { union() { multmatrix([[1, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[18.7661, -2.97225], [16.5303, -3.96857], [18.475, -4.43546]], paths = undef, convexity = 1); polygon(points = [[18.7661, -2.97225], [16.7907, -2.65939], [16.5303, -3.96857]], paths = undef, convexity = 1); polygon(points = [[19, 0], [17, 0], [16.7907, -2.65939]], paths = undef, convexity = 1); polygon(points = [[19, 0], [16.7907, -2.65939], [18.7661, -2.97225]], paths = undef, convexity = 1); polygon(points = [[19, 0], [17, 0], [16.7907, 2.65939]], paths = undef, convexity = 1); polygon(points = [[19, 0], [16.7907, 2.65939], [18.7661, 2.97225]], paths = undef, convexity = 1); polygon(points = [[18.7661, 2.97225], [16.7907, 2.65939], [16.5303, 3.96857]], paths = undef, convexity = 1); polygon(points = [[18.7661, 2.97225], [16.5303, 3.96857], [18.475, 4.43546]], paths = undef, convexity = 1); } circle($fn = 0, $fa = 12, $fs = 1, r = 20); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/difference-expected.txt0000644000175000017500000000002011673656714026561 0ustar chrysnchrysn difference(); openscad-2013.01+dfsg.orig/tests/regression/dumptest/import_dxf-expected.txt0000644000175000017500000000015011675160336026636 0ustar chrysnchrysn import(file = "", layer = "", origin = [0, 0], scale = 1, convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/polygon-tests-expected.txt0000644000175000017500000000355311673656710027330 0ustar chrysnchrysn polygon(points = undef, paths = undef, convexity = 1); polygon(points = [], paths = undef, convexity = 1); polygon(points = [[], []], paths = undef, convexity = 1); polygon(points = [[[]]], paths = undef, convexity = 1); multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 0], [1, 1]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 1]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, 2], [0, 1, 0, 2], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 1], [2, 2]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 0], [1, 1], [0, 1]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, 0], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 0], [1, 1], [0, 1]], paths = [], convexity = 1); } multmatrix([[1, 0, 0, 2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 0], [0.8, 0.5], [1, 1], [0, 1]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, -2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [0.5, -0.2], [1, 0], [1.2, 0.5], [1, 1], [0.5, 1.2], [0, 1], [-0.2, 0.5]], paths = undef, convexity = 1); } multmatrix([[1, 0, 0, -2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [0.5, -0.2], [1, 0], [1.2, 0.5], [1, 1], [0.5, 1.2], [0, 1], [-0.2, 0.5]], paths = [[0, 1, 2, 3], [4, 5, 6, 7]], convexity = 1); } multmatrix([[1, 0, 0, 2], [0, 1, 0, -4], [0, 0, 1, 0], [0, 0, 0, 1]]) { polygon(points = [[0, 0], [1, 0], [1, 1], [0, 0]], paths = undef, convexity = 1); } openscad-2013.01+dfsg.orig/tests/regression/dumptest/example006-expected.txt0000644000175000017500000003632011664172105026347 0ustar chrysnchrysn group() { difference() { cube(size = [100, 100, 100], center = true); group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } } } multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } } } multmatrix([[6.12323e-17, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 6.12323e-17, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, -50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } multmatrix([[1, 0, 0, 50], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { render(convexity = 2) { difference() { cube(size = [20, 20, 150], center = true); multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 1, h = 80, r1 = 10, r2 = 10, center = true); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, 40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -10], [0, 1, 0, -10], [0, 0, 1, -40], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } } } } group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } multmatrix([[6.12323e-17, -1, 0, 0], [1, 6.12323e-17, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 20], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } multmatrix([[-1, -1.22465e-16, 0, 0], [1.22465e-16, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 20], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } multmatrix([[-1.83697e-16, 1, 0, 0], [-1, -1.83697e-16, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, 1, 0], [0, -1, 6.12323e-17, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -50], [0, 0, 1, 0], [0, 0, 0, 1]]) { group() { multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, -25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, -25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } multmatrix([[1, 0, 0, 25], [0, 1, 0, 0], [0, 0, 1, 25], [0, 0, 0, 1]]) { sphere($fn = 0, $fa = 12, $fs = 1, r = 10); } } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/intersection-tests-expected.txt0000644000175000017500000000373711701151225030332 0ustar chrysnchrysn intersection(); intersection(); intersection() { sphere($fn = 0, $fa = 12, $fs = 2, r = 5); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 3], [0, 0, 0, 1]]) { cube(size = [4, 4, 6], center = true); } } multmatrix([[1, 0, 0, 0], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 4, r2 = 4, center = true); } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 4, r2 = 4, center = true); multmatrix([[2.22045e-16, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 2.22045e-16, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 12, r1 = 4, r2 = 4, center = true); } } } multmatrix([[1, 0, 0, 12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.01], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 4, r1 = 4, r2 = 4, center = true); } } } multmatrix([[1, 0, 0, 24], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 6.99], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 4, r1 = 4, r2 = 4, center = true); } } } multmatrix([[1, 0, 0, -12], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, -10], [0, 0, 1, -10], [0, 0, 0, 1]]) { cube(size = [10, 10, 10], center = true); } } } multmatrix([[1, 0, 0, -12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); multmatrix([[1, 0, 0, 0], [0, 1, 0, -9.99], [0, 0, 1, -9.99], [0, 0, 0, 1]]) { cube(size = [10, 10, 10], center = true); } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/mirror-expected.txt0000644000175000017500000000011111673656713026001 0ustar chrysnchrysn multmatrix([[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example016-expected.txt0000644000175000017500000000515011664172105026345 0ustar chrysnchrysn difference() { group() { cube(size = [65, 28, 28], center = true); } group() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { render(convexity = 12) { difference() { group() { difference() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) { cube(size = [60, 28, 14], center = true); } cube(size = [8, 32, 32], center = true); } } group() { multmatrix([[1, 0, 0, -14], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 1); } } } } } multmatrix([[1, 0, 0, 0], [0, 6.12323e-17, -1, 0], [0, 1, 6.12323e-17, 0], [0, 0, 0, 1]]) { render(convexity = 12) { difference() { group() { difference() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) { cube(size = [60, 28, 14], center = true); } cube(size = [8, 32, 32], center = true); } } group() { multmatrix([[1, 0, 0, -14], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 1); } } } } } multmatrix([[1, 0, 0, 0], [0, -1, -1.22465e-16, 0], [0, 1.22465e-16, -1, 0], [0, 0, 0, 1]]) { render(convexity = 12) { difference() { group() { difference() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) { cube(size = [60, 28, 14], center = true); } cube(size = [8, 32, 32], center = true); } } group() { multmatrix([[1, 0, 0, -14], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 1); } } } } } multmatrix([[1, 0, 0, 0], [0, -1.83697e-16, 1, 0], [0, -1, -1.83697e-16, 0], [0, 0, 0, 1]]) { render(convexity = 12) { difference() { group() { difference() { multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.5], [0, 0, 0, 1]]) { cube(size = [60, 28, 14], center = true); } cube(size = [8, 32, 32], center = true); } } group() { multmatrix([[1, 0, 0, -14], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { import(file = "example016.stl", layer = "", origin = [0, 0], scale = 1, convexity = 12, $fn = 0, $fa = 12, $fs = 1); } } } } } } } openscad-2013.01+dfsg.orig/tests/regression/dumptest/rotate_extrude-expected.txt0000644000175000017500000000007511675160336027527 0ustar chrysnchrysn rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2); openscad-2013.01+dfsg.orig/tests/regression/dumptest/example015-expected.txt0000644000175000017500000000201611675160336026347 0ustar chrysnchrysn group() { difference() { multmatrix([[1, 0, 0, -35], [0, 1, 0, -35], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { union() { difference() { square(size = [100, 100], center = true); square(size = [50, 50], center = true); } multmatrix([[1, 0, 0, 50], [0, 1, 0, 50], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [15, 15], center = true); } } multmatrix([[0.707107, -0.707107, 0, 0], [0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[1, 0, 0, 0], [0, 1, 0, -15], [0, 0, 1, 0], [0, 0, 0, 1]]) { square(size = [100, 30], center = false); } } } } multmatrix([[0.707107, 0.707107, 0, 0], [-0.707107, 0.707107, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { multmatrix([[0.7, 0, 0, 0], [0, 1.3, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { circle($fn = 0, $fa = 12, $fs = 2, r = 5); } } } import(file = "example009.dxf", layer = "body", origin = [0, 0], scale = 2, convexity = 6, $fn = 0, $fa = 12, $fs = 2); } openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/0000755000175000017500000000000012110740367022566 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example021-expected.png0000644000175000017500000002615211664235237026767 0ustar chrysnchrysnPNG  IHDR{C IDATx5W}56DAnhPI䨍xHH8GAE!?E* UHGJ$D*EM[EZc VQHR%-~!0IT`9ݳ;;;wf̹3sZY;w9{{k~O G,c@ :@ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -@` `^ @B 0B /m@X @@6 @P K` P(Ph᥍0k((F5JZxi# @ % -[^t;k~O@`ᴏn^Au]O8+!u?CWRl`ٔR"t?&Fs+ a+(L_\\dX 7ca:0sߓHJ㈇`ٗX&*QCoӢo6m(2&mWj&ХQJ_]_}/wLE;8 t~*aG{ napkdntR Hrƿ>(?1+<~M}#`Wjk!P͘o7٪zzsRGe\6zs`M͡􇾭w~Nty]UjSNkZhhkQ?xwգw9l0_Ow| l2+lJ)ȶ8}~k87Of  8Īy6+~gS/{_uv~ʯ2VU튣Gi؏_g.{XaKk$%v yApXkkW :H]KacxFI5?}pe T؞ЇO? ?GJ1zQWU\%EcACAF|(tO}C# J&=iRvWZrf6!]wm0L ][gvT>?K0Z `؊"Ө6Kɴw /~"~t܄76sH6@>naPǵ3VX5a0L%P՗s֍D*((rM`B횻_ -SOqU0T4nYS ` Uú"3۸?Hpo̝l2Y/? U5j?>pBm0s[뷆`\l\싼yH`٪3MB$=}`kxF`&!T>֭Df\[EMFO#MO7,:zVCI)2-6 q^? 4RY¯~nČ20TCԿ!?L4}?#32p'r[om^34 Ͽ2SJCJ=*&jx!,,f?Lw?dK6Z"wƋߚt][G^RChx5z6dmhA g. ?dW}"!ҟ0rksv=Npӿ͛*i0B$3Q*!&X1dCw0nnA¿M;_;IMNK!aӏ[<`e0p40.7Vs]P}>U!U6vT8] T(k0PhosEi]n$m OHywl~m7{v .6>ɻ0?˘ߌGG_~؊ E@꿋LJ.6|w>P+>N0E{XYK`ߎJ"C49 `r<HP䷮H(k{zE[/uK}ͱ/=R[ox8`3z/fTj= gSw1iaRtQqq+bX+ b]*NI>WLy-F2F8 `OQhYXLR ^wWJA٘ſ zE(]0IǪK_mt@ f{S:G! )gfcQcʶ_XYL`|o~{sly}B+W`G /?T=ً4<лnj=EqtMZ0Bio}1Kg{'Lo|+O$+f`A9-O6! Mu]:'mzjwpݟU{`7^vֱE=b *K6͵ EmC%ʓ|moj ᜠwԃ<a1lpwIv=7l<|Xx4,,,{&Pײ̺7 z=g.o 2:m,Aӫvըqq|i3e8eoR5ⳣCd736ڭT'4?Su io4x@ hn'.i>q*6IW`;߸تUϡ82707a6=R[JknP?{ }׿̻BR0!LC*˯PώnØ?tC[qpV `V? p EǑ&~w~cd8N0Mzr ,CvӠgo[H0Q ?Lf6Ѻ> t>F^`Bi6s]~8&]*O7L> Vſr8!^~\I$&kn8G,?nh0(~L`{/f'[c6_RCTvr% "L^*Ls"0{#uZoZ\<`GMqHSV GR9BkFp@Կa;l}J[wݘ 1JoI,t͋@TqoWsOL%a._[~k3$lt_~b?xD70a߻u$Nc6X쳬M 7[TF̣/Zi2֎;$):+C ;EC[lf8#w;`8>@ЄL҅Lq?d &. Y]'8Qp^U]im'an q7,-%iO3W_i$8ĉT*~|ז!!Կ<W3Or?ؔ݅?n7CIr)(&:3\8|f_F7Ȓ\,I{\uIGG=NwW52po-?zcat'rHc___‘W^0b^h3ACWpo ş6q"7Α_7D&6ӽ/yu+!{wGn,a:a? `it6P;'2E]_LC W(` M]j[ ?v!R9nĀ??.+LgG1A$o][Tϼpo.W)(k<ݟq'xg̝7M_@)BL+[ ;ݟDÅ$_ ?0~ty>Q7K+smqEJJpiCC˳T$_(R}<^~ů8voW˨Ru`!*A&G=]_ogtgoG=ljp o/ufɥ?D>BqcOm~,v p 8sϽx@o}y|]q!# L(aUhN u+tJZm ߵCP?:XI R9O|ۃw}|m`&Wɥ?8MC Ol?@XՏ[@*ool9G脟؈3Y?Ы?8AծMn'!Q7yɂy<~qpQ<+o9۶_>]>{6Np֠{;OkF%a G"w\5R>ɰ0f=|]L磝\85wl- `&Dpgk8)͡끥WC0ol;onԿIjM]cٳǀ_n =+L/>~Ox'*C=xzB PjE Ŝ(qi?]s!L6vp7pçk8ޮO&P+?tu|Ͽ c-|xg?<[c#Y ,!ЃO,wWu?DO0n_wp<Qu&0 Z(ZqxyO W}~|z='8w;ZK?Ocwp{y߷~M[f9ݳO bʋ_0S[J[+(/8|if!]Oo9nKr:`]t?KaO)㼣z0/EFwC;u^k6G0o͟z ڇB+4k_  V"uY^nKpp ?ي nxM61<믭p^NN5QWG1=O wPt(ꋳ.ʓA} yn뽠eH\0$y|?z:dY=43:k$Kf/I>?/'aF?mM5ZIUkyި9cwǒbSP3v& ]W}yOr)ӱ$yz "6,z/,?fbh>@@:`t@#Lr~h5 %IDAT8]7"ȷZ뫮FJ YU+(y|bOP G<u{쵍1NѤУawa0}_>ʤ=HʵfPɯm ܜ-a u_Կ1vP/i :n|{&KnC}} wI'` NAP̴ox궋#^s>kmH}t?<|n7*CQ??{ t:ǧx>3?\7|͡ӽo꿉7# 6zɨɻ~(%?X_hk@l+2Fh{>OYyݏݻCpPe@Z)޻{\۟M!.o1O+2Pp)ޟ?_17\D ;t?V?ݯl`M"}3owAԿO 7xQ~2_}i8kSF;_CyϼPx^ѝt3*{@ N)J? F4%`Ul`7zq@Fe160X_ꓱ} T!pBL88*ݯa@4 [o/6ЋgNٮ?vt? ,u/t(~@T %>G(v]Y|\SiQn5?03 U48d `pE3h_yv "p@b=#soSkDDpBM@  ) $` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @M@  *H @PE9  @4]@0(@ H  C$` tAr r@ . @@U @$@ȁȡr@0h 9`9TQ @r,{IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/import_stl-tests-expected.png0000644000175000017500000001317611776112755030452 0ustar chrysnchrysnPNG  IHDR{CEIDATx?%}Yy![2H!mb0&) `1kpc*kFQ8i I m*A؍B*T\EʁśbV3gf{ gK F UX [@@'cMq)a0ݼX׮M[ , 8???פ 86/^ñ_݃ABf&GM`QSK T:MfQn=g4+_{OY LM jC&e 7lM 4kRilABG^ Bӿf0.ilozh%FnyhF|`m=GRgsMJUU_2Sx܀g @{]=2PI^>sN &M+4`fxm,?* J N. x𛿩?aҀAK_Xj23U45s @ kT_gN2c! & @۩OWfkdvt9<bx* L- 3zpv"6`)0oȒq y(@YvZo37حݯK>qZ\M4^ɛY`^4>e:,%o3ֳ3t-m-?9ܲ F)A=[| La%9PPe萍η`fOXN>h+ְ&c5cz<#M.϶Ghl%Xla h~߅N]WnMd`?QV"-fAMƝ\D:loPi[@Zyjs]n{7߿{ ~uaW7'}ǦeZTwݬ'9v>طd5,0MyU?(Y@>k{<3gߦmoxԮ߾QUՃq(S1e3Lqֱvq}gs* qƮwY̩%aܻo6mx׺^~co6W6?KAdʯlh7V59]w_j P'jɣqwe",hBJw:6 DR~ \wTj'it!%Y|ۧ W`(pu9y!/aWʽt.{)2'e@ToGpߗ@,vzWd(yY^wW@w-kSd~5{V[gݝ߱*?Nv?_U_nnoG1u%s_#ޏZSrp30Z .^*lLxlА}^wϿҟTE @opl;޺px(=STsd]nm{xnatRz&[:ɇɉ%O۟ DE@#'~60D /<)bA0ӮΠ5 @E@mUX ̪J0árk:ZK0l79m&gY$~l]/~q?9+q?F_3@݀_#3X僪n~t]4sAQg*fоN7 p앓vf+=Ǘ>{;o69KLb,}+]>u4;B?em!xWBaӅ4_:20cf]t<0jF? @G2pű]o俟'Yw\.<܀j 5so 8L}-Kj}s a~;Bꎋ ik@{Ap9`G;hk)ٖZ`#|pUUݺ?cd12Kjk񍟌@Wdf`‰P g\>|ϰf%})CSҎ~?`|#f`Te`Usy(`35 <~ڏh2x9{C90ZITʽw?4SU;>Ki'7V؀>QO4*TO"ꘁV8'(VZo'>"v3PwO 12PK }(pԕ lx!d_}cã-z%e ?N{bOcCfdJJdPs/|Gu^p( d`4M6RG6F:l$E 0K\CM͎Un:oKP7`D3e? +} @-g\{?؀z98ӱ=}sNURF @b2;F?"T@l0и Y ,[@s4|蜟5aV3j00"ݹ7zNkF?LDDxʦz3L>ͷ荟|~_ЇEgC'c }X`43`j #3` @@ PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB?&߆UIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example013-expected.png0000644000175000017500000002675011664234141026765 0ustar chrysnchrysnPNG  IHDR{C IDATx_gYwcTFZB7^E(D!AQjHKAB/"7"HЦЛ*Bn]d3g<3gyIw~>zKW@g/d" 0 06  5@( @` @0J0*NpIw.z +lu%XeSh,=?@ly0 P[@v; iІ@T 3Dv0qpO۷LLR x4 PPc8d6`e g#l5oo"gS(A @7z@;;< EEb?:c/6`qs1lCK3 @> ^B *3L_{:_~(L/>DX7iA6`lnfleJw5 1!}ƌkX P(EgEe*| #npӣH@$(N{;g07 60Y6fD=*1!m`>*(q%@Ph/栴 ~>yӈ!P✻P &֯ -HW) /EPwǞym"*E, .lկj Km H9 `΄#䩋^6[m=@>+97 Dtl\ rs g=S|'FYPd8f'rV"V`8j G JhwS$ps `GcV2-=ڀGyS< &@xـ$\U Y}4L6,z5ogU|/xі([1 @8Fـp1#Bk3r˥Imb  *͓5Эl WXSq fE#SE/.>"y?Nm`UYmotT}aw@Jk,~[^IRA)2o <;Jd .'YV/aTE@·G|Ժgke1"Ǽ64E7}{AET }Ne !$!: ߉_m 42A!5]=;2ͳL#J2.oGPyt=לfP(v`HCٟ]h`צ j@šL<`Wd=Pꗱo2oH7c x;9os @Eh1ڪCz w1Tnkg>ھej< d5s "+6pB=ZOJnm '}4>M2pN;&15ugM<{dN8u؝evp~H8;EٿBKdRi(,01^@ͤndn=% C{zdI8 7@}EY/ ttP V`BI?<(7'~0l!.4<`-釒7^ ۘAHCm~35럻ҭ)}C IiVxySz橷46- voc:a1s_a%H$}ə fK?g*}O? IA @L0ԓ y>üN*}C??#C5JYI^4ȡe-K0jg*$pQz3v;yu Jb)}cys QKP+L,_ )2rNp?Kp9 ' }{gg*?WI 0)E@?<`Լ*'`B28擾4c.: ;rL]~0B)O/KBE]u.w$G-. '@FuU{CUbjK>TBn}b:uϪ@ T8 2$psAkCs<#? ǩJScb :ep!S 2 ـ/ .xOx P@]b1 `pR lmZ$,b1}p X? eK&@2zG 4p [evU vTX E?k1=@.aKgj0jh y@AR` hx=voy(\! 6p\<`djHa)c PU_RQ 4h;|+,zB@{% 8{Rmxj.'F 9xJ9G0g|/Gi T Kc/X]~LCA@&%;yQk?C'1SUHJ&}T /b#K) ]A @ L AHCC;򩀆200tv'WZ~4&>yY-sP `(F9R acX0ԟex ,t1@]w§#=աj?&N /ROVS@|zzW O ;?] h7qC9< ADӸttpv}sϾYڭl: 3%Bƭw{"%odf5i."'- apJʕ}t* :T խ_+`H_=wݟ#ZGT*x.Pn`;Ol 0kZP??P#:(Hhak%z_v„`@E{U% {ӿTN3_wg59A}Xp9U>zD/ך)u0{u5>RbWЦvP5 _ӨE|ڰb dG涀ȑ6p[RJ6 }HnTOw/tn䵁@&?!GtP)@?QS3>?B'ٿ @$ PNYdO)yv&U LV IDAT)Tv@y$Kk oi l1fw wNz@Lz[[@%ﻟ>ֶ=HV,FW(/{pik@ c7:h~wXR.'8' _~T9n1R{_hﷀ:w1b g>kΖR ۠kQq<*L 3vgaWAyuK1[#(6JR6U:`dY<3r_Hv#hNܳwy4,HsTFSPnAd ȭk8jo5I~ESs~Q@y1#%k;?AEݥ-7 S(Py8n@Gg d<e(Yգ}ނ@0v J귔9p;֌|E6  `KKPdJw`-4!עSkvǡM\x@uՑ'8^$/!/j;jc4ve{[R쟍dtGY(ysb0*a%?^<qqfG ψh 8 `%$.jY)< # ysO~MXO|Y|\y@Y0 ]c|AK7^,hGhKX{5i @2r@%+au66:hm EV=x_6PcK[TmJHb~O2Kd1@c foZ}ٿGS?mR;:V&` aX8JG#00# 4koB_ yan߹"?'y|hXIiٟCML`Jn]!<+o7>O{ @ЃJ]1PVj5PHl(h P̙p?{7ڗ}j Eh#@P #-D)^@"]" ` Mx08h'eL'gF`FfdP{ZK$N|U0fRm  J0J kJn\>' eВkM"\ّ0˜/R@r6 =h?2΅kl@.\uR?zr`%0H!-wx@H0HPV@&orf`r/ `|x7ъd{͒3 #CKl~&nkc, ` G1f੯?~F4 C9#^ Tn Qx Ц ]q""ϸX*Wp?b*P/6+@91T'TG΀v,@GYP##-agd3` &<^9{0v*W#TC@ J%up 'X,6@Lt#@# kR+(K@tr1ҬK&&L$@|&Sތ%ĒE@! HɆ(01{KnP[CΡa/ʏ:A)nnLh8Wyi';~o/K58_~{s C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &֟!0: ``[  Omm0L0,>C `'z@0 &Y"]yF6IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-tests-expected.png0000644000175000017500000001711311664172104027726 0ustar chrysnchrysnPNG  IHDR{CIDATxƱPM9t)ŠAa5@9$>Uݯf%_CUovL9 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofE@6 @@QPM` PT@mm @@EofEm^<ŏ~ p-p~M_y>MP*N £46hIppaoO#}34T藀0 ~,ǐ|X@|>@ Fn˻$}0؅؇E}zV 94P \qZoۧ l[{;.q+~O*)q%!ݦeR5M w,%7\R'\;P}LhoJğ@\o2-2@O}w3eTG b8#IK$i2 <2Ӕ,ʏtmoH"ֽڛXQ?@{I1)(z?jËhPɶH`{7~ &{h.ۆ?y^̓V`h MSeOߊ D·y8M+RP`tf# d QN)]9ˀvfLS RKA9àeWְT@v)Y`}< s^Aa޿ v־.'$X_zZc%O)"s/^նyIIobK͸)@v@~~ax~wH$ruuR>i`8ɿrxn㌅wU7/вG}j`WH̹={|sk/vVjH{5Td=ɿz[}1}$kbiPFi{voߨ-9a=?}t?Ȥ5:bg75v coZ>`6UǴtkۍ^7VlUϺ n4qxX+K.x~ƴPz؎߸DtgŸ4ڧoZV u"h]۽qԸ>ik^ˀVF+o]5`yzI@lm޸>{wڔ0Իʯ:pX_$a.|{}}g]`^v7oRu0ˀ5ݬK'lݑX?3os0Nx#I%6L.o9o)/v6: ՐRhʃ0k`G+A={vȀӍ^;}[/^hA Lߍ[WFkD{\cO٫QNj:<79TŶc/wV9}'}r{+v|7`Y$uOY&A:lx[{7W ۈCNt1ze/=ߓ3 nzs&~YgttU={ jp5r^(~_y ~NS&Þ {tOt],\9 SI:9`j•"bht.O<7 SIw61 c~):8Պ+kpXd./3LK$޶G,7|Mcfw{b?Lp2n% M;_ˀEý̿1\aܹ7bP;W^w}hpw+Ã7V?.ekjs ~oaӯ Mb/ߝڒdg7\qn67TF54e+z_~3a1 ojO^wP/`9 }~r~?{O&cs沍J _j(4{,o墔?AOYnE^_6=X-67+Mc᏿?t \x4 s1HX$oa^quԇWrT6mz!k|,rU{K=3N˰濓4Q Q8e[6sOl>OçUMV0i.{:HǜNˀqyWLi[ILr9<.g{:<ǜ=?s4*~]{y6ѵG+ovN:Uu+~p w';~c'(0'nK;S[~7NcF ۟KvB+MipF^`[M yH%~8y/a$U,ϴImSҶGvH{u3öpweQҡ>br# q3`:*u^w0vgW46l⏀NܜǥM氣r2=za1ڄ< Z_s7U;ÎxJ>5yƮ/վ>a}~v`{-dpZۄlZvߟ|,  ?v~P3s䁹+#]`WZ>&tio_i sEg_]ӱ9 "C> 6pwGvwyJ=3W;˭^n8<t>t|;GK{^˟8pMNL$X̃cI`(_Gn#??P+# 3\@3G5ͣ8ҏrɤ~~a\@?T琷8Ə~$s1pba1f@jWb78(%z>-$P76Wɛ1{i| w>^06, WšI1c$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD@Tz$IlD&-tIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/linear_extrude-tests-expected.png0000644000175000017500000003007711652254623031261 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxmfGYwKiw6( /j|21F%A 4!lBKP F`b$h7VH_v[*vgwv9>̜kΙ\ͦs99' #p!3b@!0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %M<Æ 0 %pq3lQ|7f'`v\_Ehl$lDM!$2eVs/KwzH8"Z ` Yd  PU2k֖Q <f̆O 00 !PL@h(E"I?UN!8 :!SKP:O@s{ Hws+Z1(8O #OƢ%Eş4)'>-_j;O'#C1ߺa*t= :nUG]=~Iqҥ_iq 3"/>(;WD` E;_] @*79u0Z)2 Vů.dtM şB&נs^pn 0PL`TiiK6/0F?Gd}Ɠg9 `bm;7<)c=&{9{s? `|R?5~Jj-= ?/,Kx^Kג)qby7./Q|370)ƥ_ve Y#`"0rտ"E? F .?nPj͜]!0+v%Qjڈ, xm}ϵ<%ٺxkE"OPuMRF5"7[X?ѵUyx>ŴkTzM9oi-3CQ@^̟t;'Wxh#/|Sݕm5>%vP8'0c9E9Vgpd<|Y``V~zqoqo|Dm^]ojΠ^7Ŗ{މ۵zί^ۜ'#][ߑ~s_>\a\Z*^:`>vۯ5P^wl:spב}P[Q~*9,7_KA:X~"t M!07 `nZW[#<я2ȡFҘ1Ϭ#tnVh%1?~6?}b˔pLQX  `5<)M~w@+\@._Tlw ~  \,IE@cA4E`(l Z2E`0/46,=R `gZ xN'Y;?w6K KµTLA5OLjgWk%}귭(5XWaD_k;jjn߳p<,! jC/xC>R0/|տy""%=v}zXTCt4DIaSh)wBrKPVv@+@h! Д6xŧ`%j`H4QPX% 0_TIj W ,DzDPs@*d?֔/~lZ `kq-.#Azw!_b3g#/F4p3bܳh߾B$lF?ONfN}?ba#0F!F#ejV}נI,EX|붣n7}ot(2q~X2"4`Rr7*>wa%x@>, ! ʺ`=ڦ? @ѧz@({ax4(+%$%NOq-FuxsnCr-VADGـVK4(> ݏvtxQT+miOQ> >6 NOѰet*Hk!e `U:;I+R^OlNW*9W{} t܈ojyq8Rס0ĜXʮl4'sh^Wu6?eX՝GՊI  Lԩ OZYM仌<0y8g_eY?=ƃhh V}UQlr9]n>3Lm3`Q0-o× X{ ] 0˱QH$76H`G?#+: ؉=-MV w:^&鿿롓JZ9Q<s!D3'hVf0%>YoQc:Ƿv =p #m'~4Q'^T;nM-t=[=b=P@gp4V3akb}&Hm̪Gv٭t' K~jA(Ǝ J=`exmXr ֥WBead]:VpG(WsgN+l n#Q|y (>t@dFԿL~qou xݗU.0t?JGeC <&/(3V'l ޿>Qӥw==<=PUYO0$<>P?[g@w6N= W<<VU|L O/8 ,~/e}/M4v@ (Sf.wJ>h ?nБ÷$XQţ_Rtt{ت ;[ruPDGgpKu_lb5 @m.?}w3l>AY'd|/?i}0pv|7N~h ~w*>6 !(ѭ< F6龯 m`DE ij@q`40o=mehٝ_{͙‹w qG$ ~۽cá @4pZNK7&q~;R\_o" yV>ݺOـߛުjhC% ~L@Be ڞ-lGNp3wOlza g ?e|޹':}w a ut?>Yl( Q0dwx& [ȥfH?6?nYߺW:3#ZeA's]|wADUmQ>3@̭K??(`ɔ&aD}X!=rSlMo?ltdW u{9]b$ˍtROGW}A(iH|N}&g: )rb'R«:;e~#Sp{ab/j[B z@4d3lz9IN+FGe]p'J6 |'+)O1:+X|'lk* i}$aiJ?Pz#:5P;?~B`l~S lA7j"v 殓~tՎl?e25-#_|[O"W(^?_}י:| @ٷocpgr "`FNZSs~?lAu՚Zo,}\LWM1LTDetOý#w64`]@z^)J(Yuť?m0Y kWKWye&D/H@=/,~_hqo<}_1{~]Q(B_GP;{c& T) ea+QUK N6H<*Ň3Z1?fSGB 3`DvîW<=M_??=esGosR6о;9sQaW#׾CW>0RAGHxm:Otߏ7*xљadNu4)^5m 4 :?7cCzĻ@e'" ȅTَ؀5䳖p IDATکbzg@;G~n mtDG~p;'xӛ? 9~@O\ RH '`x/;΍$\}揓~]ֿs{=5-7??>p*+IaoW?ڬ# x@}(@gNf-@G] 3?SD7)0kq O;B,:] Oyj.ZԿ!DUL3_k¿anED۸#TO?[} *JMK/{[#μtYj?ntm?RX@yXh P.G@D dޭ 0hQt(V> l6TAu@C>?Ҟ=}dvTmhp z|6 !?6P~By @#" G5g&@6 HhU PH(k[/ B@!&?@%@9 Fiz&PA.=8?F@~RB `{6Mg @bũ;BN@30:8߹:}+  N#@GЗ%-i20 SK`-d ,@X:@ (u PL(FGC@ `G `h@@7 @w@1  !CUȣg?7ώ bg T"TK+z\l0UA@'3 UVFR>Rrkh!@ M ,2@0h4NwU rX$:L( `@`m0e@H$$VH_¤ ȡE]@+"( @ u!d2@90Z3f0u`3^:R .*kQ1{O@ (}'@} <@6*)5@@IX$ o\r^OOzrY2lZܦq=u|?UF `Fk "zpJX=Կ, V 3%z jcMmjZG~-nUPPLB[,6!;'/kCn&~y00%VZ8t[  %Su0S,[={?Mx?zK2et0f6Vm`νQKN)'pf;Byj ('n"l"[I[ ( iJm@R#f .Dݗ"i Zƅƻ.!Jxs^9d{O82:0L;$΀u&a$\3EH@VH& fޥG~ӟV̵w68mi9rzeg 3Cp0'w@\u@R6+<>  `̖/!c0tV,%0V/M,,f}1WrU0{@5Nbn-A t6 1l_"}%hҿ|@9 @y_dH#0Fa;d@mOF/LJw l~_@Ӌ Z XȲ1v6~m#^e`FsR$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )I ,a @@ E~ (#(KB"H@`F`R$2. )> ZIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example023-expected.png0000644000175000017500000001551011745120722026755 0ustar chrysnchrysnPNG  IHDR{CIDATx=gZ8XbND>A7qlf /Pv'p"p 9Pr 5Ywb_"SN}uuwUuu?bw?fzϿc_- m (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (e~ T{o~ T${~-˲[O TT^dYv⮽g =/<_~Ȏo0g>_,;[O bI/>2l A]tN TriP {P3>fY:[v(JOJNJsy/̲',ΉӼSyzc7>z؍ObVP^aЅ`m*Ĥg>yg@T?>?m߻~&̀*!,1 N{7V&O^>|4wLeuS?Ʊ^ITPj;΁YixlI)Mf# Ͼ5UlQR oJTjSUu$`ҵ w,yCK73aFy'@gduu?5HCӫ"JA-qTЬC&B(]/% [BЬ܌;NP)T/iϠS{޹L}J쨺EWpyѿyyom`KSaOM[捀~k3eE:ugAâU>o ]  h*Z|ïF;Ӯ~VCʥBpNewg$jѯ]I-^k^_xoOSO{{o|f~Sfy<差 PKгb=AQ\J j ʛ-qU`ԙ?GzKC-aP,X&Xy9l@2h>)(3[My:@FWX-+գF^.}‡N *F Vk]k/iF~^Cwhu^NvFy,/||2R5Thl-A 8WRO>S]0jsyS)taP`WOIgé;Nv[pͳ-K N_beY5 h_q@ѷSȃa[FΑ$jLܿb"وIhap.)tKCa*Bds aT7~͂'z6Ad`E9~zVe[ל{+qwTjQLuߔ;i Eiw`GTڝd4R|Yl^FfoG2m)[ tS=>-]u.ͤbKD?-7>y|Rb5 rVzSf\l +CtOEPEl!yG]R粺s&UW]Ͳ Ȳl 6KDrnּ7Í,-dM'/~_xnekQo?3 ~ t_Iۚ~^*I>'vʊgU0UNu1AR4ԌKm#Y;H%v“:V~L{ i J.KXUnwrM{r9WQ< v8]!BP}q,O^Nm4^ZlPV+9"߹ύW[c,k˩-uP>eOH5}?>EUj8]p}Y#/d &vrnZv?slQ ANAknexgߘұ)$DZמ2.W9i̤=-Ǜb o'NaTᓗZ"m>K'Z^j%~sH,˪sxrM"-z*C县q,:\6ᑙ=૷gɥ1_⳻N`dAYma F0ri_6~2Ѿv#<$n,Z:G3<)!qvNыbP:MxVX,dhf,m][]ڢ`7|>;uge(Mtwr٥;ww!iо9Zːo/[-PQYUŽ˦W\AӖAuH{ 8b*MF&vYZkvé;Y$|]-{>:KjURB5K \:ٲ(Djbu[-=noy,14MJ" s_mS wSX uls;{ZwTzMpŚ{6t2f`HTovoy?[8Z# [Pw#ݟ~Kp8K~쩜7S T.YܞҊ&+_x٧,Ka>՟8vVi@o{+Tmo!XoywNG P:u㴖ڋTZk$_D XlY_סz˚G} v@)Yi0 :Ѯ kGwjHϥ浾uH`"s^@Џ;& }U\׆A{_\^PB&_Xo|x"LaP]6<}&n2v{mK9zWʀ D{Տ#IJCie8uç{~ 39=./Mn4MkIZ;n̹=jʀ /޿zq!\=WrV#vюnV󿦠:,/9V=S ȲiL)uJveM=M=^s3K7f M@wTuࣟNj8U.B48?q˽2q?\Sۡ_moꨯҝ!3;G$)oEa F%t;/-vtofW?AХt|6Q xf_ɲfo"P֤ N_ߒR?7F(-6~viWڅ`%ŠqrV&‹֦%`~z$l]&Q/`'mR3]@/0՟A tfwi%A l^Y/ i)yM`5e}`l7>zϾ߽?ˁSoYsw[v6f5SǷmg -_c^w/:sz~Mƽ/.+ Ae@P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (JФIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/use-tests-expected.png0000644000175000017500000002636711713230315027040 0ustar chrysnchrysnPNG  IHDR{C IDATx -W} BxE!i7lMR$( THB*MDʣDӆ[n?N[N @``I+EѯV/n Z]C`C~3R֛w7m2{N} bZ oS x#q{{ 7HOuAj >_qs^:={ \S@$9TA-]}_a$/z-Y<ƒ'#02VJ%AfHo D?tZ~(|k±^Z By1ky"n TPMCt# 5uYO?8iOٻgl1!w@ 0an `ӍuN}_<R /ʧ\W4rzQ=߽'eil=xXo\vfkZ>gt1p~g;HUC,-=XN}}񧃂ſ5^ |'Umy#3749!nj3ڭq׽t?쪞5_=\Psƪ\w7X=KzS4jE/"n |D~ԸYΗ]Z鯩;/ P.*l<:bAPj)-2F+48(eV.E/ %DVbcMl<TThY !\ s5Й|#6uN94|_>~Ǿuu>fD3aOPxǫb喚+Bez[VF ɯ a Л/9Dhc7}M `ͰrPEu;/_\]66ٵǟR:>ox}cj_V;,3Z&];᱙gfJOU{e"]k/~tPIC7>,şF/]2B)ߛl*m'`O-GtpX̭~EkU}eZY{ٸu |Nn&b\ ֟jxGpCj;l #1țW} aT A!:bt%jH ?7ÇVܽ Ӣ u`N.w#YubAaVukO?oۋrв{w_v9Eo®}ij^ jSNB{1|i?A?tLZ4q=o۪6Q~jտZ\,Jů;4z#~ ]Л>u</k.+yɿ%(" ˚v0ͼU6T?g[~>GZ]Կfh e/S#N? "Eږ fP/~{==C:oi mY.:G겠krxI[کh6] `3+F|Z۾ym;Z7U9++>"3E&$Bg^{axgR hCwqPfa 3h| `#k]} n箕?ş2+-wP9;ʿA߁ml#&7"H?Tgg~t-T}lw WoojhS `S#?^̳P\)bR)mOX:nHosî8 A6͍/+:TT@kX拼z7ZsD4@- .տ3~!XTƷϸ}'E[;oUxol1}.959Ht$XUAm9Ǿ+*Oo_{S\ieagq޼jAK 3SDق2] x@ܮńSgF&[UIfv_sqhQDC;Ar{| c,/Z{",+N HL?}>6ب^~!(|^|Í2t<_QP<1+ e#=me@b?2Kݪf:;Au8w՘V/o:/d% 䧿e=2htqHN|ge[&xgPmo 0g%  %!32[(T=`A/_LFcWuωO nW._l{ڬ_2YokԿES/:л뇪/-8u].f13-Xp߻~4H#K_o\ :$hn.{ۯ%b?_ gkس-~?4 !_y~hv_>|YYۃm,z@8\-Ec)O`o6^y ߯0ip\\ʺPh}^F~w/C8/~,}nw;?՛mnt/(ad#- `y'\˼1-ZB~O|aPpp_UkEW} SŽǯkrSri8D{޻akN0?b^.(?ؑGݵ`|{{s?n{E|ú_|Lo TVXji+F4rLbx^r׆L T 2є1Y(Yw>^;9ፗJt_cv}M{1<0Gb /Z+G-V&s]ZsNvXZKvZAOUekfƑ1X׬GV0Q^uȺ_y)'e 0aTK^pfmu` 䥿C^ftvUgDlCe[NhP?M^/{)|83u)Y "M=w/ (Y,E&o[> @HnX4~ m: Hctoqh/ky_6`;`ԿD %r"`W>?Ԣ_廋Q,.~#lܖ`{=|O6v :@ om7?mK!6ഫ2tI{ v#q`#9q]#ׄ/_ gsZe;3=aHxwW?ѕG$,P·.m`8_Sff+gb_`+g ([|hA/.hO'GVJcNj[_Oa_?'D z `,"@aGބS\KZW{BOngm_d%3P;DO ˆY<`[򫟌*8A_b'MίLı]p>| aohul 3E9' )({x#w# }yh?CX՞Bu vP:Ah?``]'c|"_Sc`\̤1sn彋[K'NqnU¾sc2{ȬcNO'v.88?ZJ\yNxl`P˫ v'|§ .e22'JvL ʵ:`P^Xy-G,^' PL%1Ba)A_cU@ػdϑ@p9(\Z\Zl/_l IDATe{;l }+rg%*0Phbp9vN?im-3}7Y=wg/g8={h1,,Ȅ ;th `hG`((ٴ{ H@RRR0V[[ ]9Nԉxd ɦfc3MaEﱢecNEDaR #-?$%1DD ҟJ&G2y?O0@0R^H^R `J0>pRb@9 9dy12{%4v1ҿ#`#tlHto$`&dL`, OI&6@Ƞ>`]9.1}Ol$H2J ];nl `l6@g\C`T 6L8q ` 2 h] d:`9,; 6@|ѣ&@V8 )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@   "bVńD`TAR$R̪@ * @@Y AD@RHH1bB"0H )`)fUL @I@ E Ŭ  " HU1!@$U@ 0*&@  S`KIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example010-expected.png0000644000175000017500000011020411676112354026752 0ustar chrysnchrysnPNG  IHDR{C IDATx%U}$Zje+KV’%90`0g<0o>x3|``>¼Dc0 Ɩ$ VlQvz9ή:-պݵk]{Z;GZ)@J %= Lt@J %$AJ %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H $3H :*$vJ %Hg %H tTI@J %@J %:z)@J @J %Q $tgS)@@>)@JHnR)$|R)@G%N RI R)J 7>H H R@@Go|v;%H MR)H_~GG?{guO >z'HS)q!W7|@ϡ#G'&V[2qqfiD,)%+kN_i*EN;nqٌH8oJ6)%pIWLhsAqD#GW qzcY)Go}߇33G :<>|߷^9$qu;1)NksAEX4#_,ԓӷ(3'_/wvm)dS)V 1]v@TY6:Jp;w8Di'7IՌk{jj׬Y%u/ؓOD@|- CÏVCcFЙUOXg_^I]@xB7虠?Xϟ%>~B ߲q{Y@s 8ժ5Ҙ:5=s'XgƏ8\ 0z5@HpV(pgW{qz'VOܫ˟>ȑUf>Xϓc xe b#{!=lGWˆИ5__"= WK'U/|$Dt@yɉ{oX [&~󯐀ПD_q@S:TӁ Ъ0 (t#$c.c('åAaG0k'1g]7ө g_=woy+ N>7?E58-S6NMeΜ@Z+,'M;l$ E @/xtїj}2_Z3z Y?z|Di ]BRRQOؼM_LdH0?ȃW^#n#@{=oxs҉k~7v\ǰiC?/^󗯿VqƩ^زybjJ~=FZ srŵ"Bq"VCR}G g^덕/zk ʥ[+A0ݩ\F` THXbr@!;!+vɼZ?3jN;cvGTQ`w Hhg^OO+tX8QٞO9nVg Ѻ_q@!P hm0;nk.J2qY%}U_J)gy"'C@&pzjaqQ+഍=cLb!DAx.f\ٜF-Nc8=AӰ n& %H+2^ rgV}4k?vM^!CUXY,]?{58C)1]~7N޽7&Wq(9~H8FAs0NR=@xNA˿@x}Wy'ZK7D~_ p@Lv[?4ÅB;Ht +W0o8v"8a}U-С)Ef=;7/sQ?E0BQC)Qju'G AayVy_6gSp +N  EYPià1L;LG*h j-SNJ=s+-Bzu\»D~{:ySZ8=k{&M#)*]b Dh3grd<[Q{Sk@(mW+Vk"`S ۶jf"ĥ`??CF-_= հhpݕ_~[~+ϰ>s|B> Yg-W DWY8/+K `eĸ"迶5 U\M3Q|ToA4 R>6n4RzQcw=Cfb'd rG~"I29#/酾E_$\dӡ)y :rJ(,UO'95)]&S&gc Fe<"6p[㞙=!ŭN¨Ϣ.;Oݪ"D;܎VZQ8|\$r8掘[Yց/8@^ AVerK `%īgV8$ݽ  Ƞkkl?S&t/Ag8>rLfx=JWȿrwˇ78xe߿zjsƩYyub07 yyD6k'~U8;b6o%g'6U 7Ee=\(yØ_/@WПvATjN5v\ ` * QTH~·UG@?wƀ@D_B0֋9"T\tCRl986?M,37Wۈh- fG|Q0VIml`yV*+]angK `e~^fO zT[Q}l|A`hߩLsI~?w#Cն3rl#|dOA `n'@xTgn,L.]輳zO!E Ef_|궵?'i"`ϑgaX,MtJL'pߟ$Ee32+s) /xz_\?㠉Ֆ Ʃ<^Z^,vdg_p$!9'Jv>r]08D>s6Qsꍌ;CußlQ+~W{A5pǎ!ϕA7s6[yUeI}>o{ <CWglO J.8/Ï{!;OaDB-X}.xU^~Qq&kRSpdv|x2}U T~ECpU7H*WHAEUE"Fj o/~jrzZW="f1O;r(O FNo z@GچH/onh@L^ ;#>9L01c++$tg>Ϫ4J:?0=K#u2U԰!o_ 6\i~2? ^]pYlYmӒ.qg=`ˡ3C"q M?ONGE@_]tgGTBuWnx>ۧe];^ H4 ꏣ89XQ*ƇY;h3I !Eߕ@yW5yIK/\OA4F*<3}/ZAg?]Q7beПx O/_G`3>'՟!$}VFDlpX2{S198AeUz*DBZIE}'%C|K0P(d2-[ W={?8rm}շΟGٚ'H\9R4 j7pJ1 ӱAc)9^kw>9q|KΟ<%lÿnU>(!6r9{O90[F ^v#`<8 >`*9X8 x/dF# &q/TN_W~Ӏ$t+T6Pi  >OY*MxU=w,]zgFkpX_;pv5R@*5WT Vn.Bg҆'54ڕO3edPub;~ddPoR,N| يCMuق⩌/o2] ]| .['ZcR&^ > dV51'qND|<|qP2BWVkoxg\`;CP:P,D=[]@_5YъFjE嵴?s}qǿK[lAO G1No<-9}us@B%θq$_'|[|A[N $,tQ7?-+nN}+5tC%NO!sY "t*⯁?r@r@?\*ʥq! M[#,{7`".l8MYuy֊ '/*4tM!&/|R?03"!2dЎ BRADpEnm0- IFOa*h 0_eGQVU aFwLɘ$??Pלe~15PrU/K3f@ L@@cVgnl€2P@8 (3x~[Ժk()0_\Бaj8UńsZ'/8Hs1D~Ŕ<~{"<4<]CrTg^r`T,"4WcHSΜdnՆ4 ]c/A\W{)=暋+~j읋O?{_v $,p^c,ev,3+4.WpY*P\8 t~2HO A2?@,wM6A&k'U6cs PÙeü#$ɥӏD1grpȖz9J"sZG8*Pgc;!"T ?k t|# c 7љe+`HeqUѸT⋟sfd$B%Pys07UiV죿@?Aр_׊HJo~ : ō@3H_t6a4Vȅ5whA ",qB~EGD,[q-+~8eA?usLԶ,uKq,-x Fl,ڡDRC|= ؎{oC>.ԈXCƗI}XLe퍝?~Q<9@Vm8qiC{tH0 c|l⽭ R)Q;ifBꑀ GX $/A`:d ) xhmx >f<+u毇@Stʰ+wEYXJ&or6bJ3̢Xe @+r2Ѐ/_t߃; 7h=T:xo4X*a ,?B~pUݖn+ )<_?uz~'"Rt8@YSl PBӡG)k1h*v1Kij=\V,Fiȿc!#={Srk.b땆Z +CuvQT} -ta֌̊IXgd ?HPI)[ci#2a/r֎ʘlV#Zpv~ߝJT&(_g|~Y3)x5sVOv69 ,Yf:Xua, a+R ?XEHL2bcs~Ɂ{ꛈc*SĘ'~i/79um Ա6Q[Nj^诲|ӭ J ]AG:&&nyR/LA󝥎:L!ѐ0wReS? Ћ? hH/#HɇjId4\U'ؐ s@TaxV832H73 v=yڷ{We>~2_%bjq90--?J#8'*V꿚 (jZ![P# _?p }"|ԛ ~`XW(Cs6Nue6~~PF sL;wkz>쭺PZ2,4F]&ի9 bT%cbv<. Z>_D "LS\W#`l} }ʺSQyz^_Ϊ"p(y W_t񖡯8Z{玙ߺz ~5˿2bDpo<#M=9^q@".\s; ./e^iW&5f磻Tk`{"D20&ۈ i%ƣ~540T S/Q륡{D-*wWA,-L8aO`<0L@HcP?[l|ģ"nq#-G6,CP-Z U-:8= CS+JʦF7_V]#_>o#0M0ukV_u_zq޷8/ߵkJes_>/wT|'F$/ַx:,F?dƲ()"PT!-37sV,ep!"~H >}S ?sF#Mp-.M #E&!rhy&!N $q)s]wB8VLr!C5iPC+ }Tcnn U#Aptqم 2n?V  (7>6ǯET,-nRN?Żv~]Qtkry<~a()~9# ڋ*Mjy?d~F;,;/G՗~P ak!5& P#(9 U)~ ;#6r@,B(Nv4L}!V #h,G HFG)5V/ njUThbY¥N!pz^cVu|n/6ж:8V~VDpAn#mWz[? 焸 P٣uѡ`.BcxM٬~~QZ+zPAosȊI`[>i. }7p'[n̏"/4t?4eS1 C诸24{8x E&HM8|T}6o pg^"rzA28ֺ 35lYT! @k-wKo~>m1+f)$Cd9Z$ N$_;n-}Wd|Y%X mΫF^ruM\ L)iMpIyp| .׋D_NSy|N 3 hj4%HG?]톭O}aY0˧ lޓ୏1]Mt} sENuhL/gY)bBgF$QlS?0efBj7F89EzHh$i1}i&)LhR>Ry$HX1V*/ouu@ƛ=ln ?f@1 Pꈕ}"k 3|@8JB\vAAsy87ph_8EkYhKPiQۺ@s;=(/~lCb}"qA3ztC)`"Oxlx{?b")>ٛPLPU-DvG .eMkƩpfׯhRԙ @6T䜧oP4u<;MϐuSn *(O7o))DEUD}> Tiџ߉0hc8@ w,QiN!>*?Z2 gME7XBP`вoN Ua)ʦ{zɮۣu\/}f ?S?ǗDUmEA?t߇>YX7:1ejmDOr7:Qy2}%4"PdP9@{? #eĈĘ1ˁՌY!" (>Q݊<7?0 I+| +d>,"dT|ß?JVVU/14^6/Hڑg#8 }mO^#o!cZ[߼8uGOX,M f_bE跫g9QF FLzVBQg.@O|xυPF(pDNћmEﵧGKE;g*6#7T |ӏ+c{?r{# F'&O/MlvF9#}Z?Aktq0S?B ,-~vpOdQja[$W#_Ye|s HJo5l)12鏆ϴl.F<8@ͬUB{~6.Zh@t *ۧ폙.q_ݳS(pxHG}Zye7*|S_V )P9S7g. A{@^泯4LTV"(`F $Ś@r@8- `>m cp]dbv#(|Hj .N$Ng7Q/O#W_|+K/rIPɪyflDq͗oމ51^Th@wn6h#kp%~4r^"\, `|bqQ٬ь7e2I`qYktZn r2Pc? %BY&Z @~@a47Jzscgve!8v~(| ˧iO"/r:пW II7,0!yv@*;"r"劬&!5꿸 q{N4}??Bi3\#Ǧ#g=ݥ?1`"Q䯒44W`Hkr U~?Ĉ4 IDATlh!bMlc$2xg],rҼXOR"z9{yqh̓pf4 /z%?-CߤoWp1Y9@5/0o$E7?_;YLQy~̪GF$|_[wd4kȦ??5C|d 6bY2T׿aBKt8xINWs~BKkd8YЪ$Д2o xGo et6sM;ߟv fb{F; O;ym5= DmT>٦ Sv'R(68e;@@ vʼnHNQ!@N9='o]{Yr}:p9(%n!c-r)<[9Km3Fe%;ю\D'}AYh _5 7yI)WHim*{A4|F@|cE ̎:E>4W)DZ]㞃V}7;E#C Hd{:QN5J kS3 Azw- "89Eo1_ҋO!bOq0ZL ¬$89*U_nĢSS BV "?jwOA?@&nbjF")\|[rG%K/X/'AU֪B-D3yj$xl!cQ 쮪u3T_:)j)_7VƷ\%0/̜0R4 >qɳ fBAGs@4 duSeH `4*Ӛ.i6*7y3߃~mM?Wၡ5-@aFZa@fʪ=~&-7(#zcċ1SQ6"$Hi!y@V15qE : 2ͷE;h>~A2ݫZz)+wY0TƩdjq}m G *n}v['#f #RR$r)")^kU- TCbC{vQ3vd?۷iJ6ShE}]fzD/)qȉgl8<(oQ|LJq$mpߕ2trTL%.YwǁͻW%x8 Nn,A˼ՠB @Y^1c9 p)7/H zkG@HAo~)lOB25Wtx=3ki?pÇT}f>}v?՝=ZrE"S[gG>7>E͈Sl4o;iBGP"5 a bXTdj5~yme88` Rt7V! 3OtxM{7`nh^nD'#@Z9 AeݵRc 5XָI㤳$5padp-8߼5B?+`*o-hQKn MbW{peR٦~k8y΀:ŨIJa}^HG'E{jV""VSٞTbͺh7WDp(:tBڪn9""lC&xd`2NPH*M:$M?.$j!9 ).2|WoQJozRRhYfss!s:r}C"M,b _7:d `>B! -~02k/F :-#M;Yww8 ;uA|;&RQE[/Ϥ !6eA.tW%# G "q1PlrShg7mXI.!ܙ{9_ `,"]|QS]e4;fD55=\v@c|/'_j '{QM+t(T.2L5߆C%ҺC—5DSBVu%KS- 룿+1 j~vWH B1O $vH!>P|1fJF?^5gԧ*28TmC⯏͈OL%xRC8Z}UvpHKY7U1l\#П1?zj[R,4܏2[|Fੱ^hr`R) ڹ; 4)8@b b`2L$e.诂V5`a0F(S_mA J xXqXA{7!XVg{ᔌ,^I5hЯ5_t @:K9lz #mẁD}3=|ʃO!FGF2?ـxM`5G *|,z 3= 32R#eq ]_!ۅh@ DPD ?֬C"'<]p!F@Ph4u/97eEwxb+虛6( N#@Eϼz#{4;7}>CإlGWc2#BGoLYU[굲R |K> E(ߦHAC Q3rR[pgE<(|uK|Cx N6 JF9hPs4 s144$01y7X5p&]G8"Y66ò_LJl᧰c1 f BN?Džpu(7- g3fHgဘ څ}zW)}dͦP36~=."p@sZ=`Ù>ٺeb #SY?,{A#܊[yXQQ,*#!( v O}:MYVd#3gVB NypS3rL$z9A%NҐ¨2e(>ۢ@zf[FC笵P'}C+܈lNw$qp".*"|_h\x%xh˲$v;psk0F+vp5)`k qAx y"6f'ȿf/TD[} шW_nv@kJl8Ŷhf}P q9"6+# ӹ~l6ݰ5, 3}?\JF{&Ek]-Ҹ+mbڬw?f( 0J2˒^;XRUg&a-D1G[ 8I"f;ZLv>)5 Έ&QLBv){\ʁ_Uqlw,"`k+*ztj>AD >06ђgw[]OGpTCbŘD /RԌJ2cE)sʒj\}532--H9o8@chR4 6Wua+@xͫpfξjcD=C0>T`p*m<=/B+ ,n-)pSk4Ny[_H/DuuFΝ{*b$UY1G}A{<to{Ir4S0oOvPeJhmDiſva8Z\sP6/.+: &l/fVUFCgк/J @[˪8HIT~ ~Uͭ1} $4{ΨD~Z+Hq/7CZi-M*]`h <:3.Oᰩp@5ܟJze֖7oDY {ΖYI!R# #@9!!EU0‹V6T`܏9ѻ.3nR I.A пX7.=L'B/J%33ą[]! _p[[P&P TC܈T)q )Ԙ_M?)j@_tdߛ~CpJ (ހHd 2ꃧjS4G j%2I{DX_BG ÏVh8jZ+վ()z=ޙky&*/ r1 -wC%F`F_ֱRuQ؈Syk5E%7,.Z hnLZpԍ9q&}6* k4gL0F+w*Rw %⹧CqEn,#~׌A|Y׶3#O,EF_dEY|U!5bR3=) ^ÿ1dpGx ֩jFOF^.76!$Ɓw9/6Vcr@?Gb1ʲTӞ#D8 %~ƩeJ )nq) 'Twwg >$3>ٛ_*(mTgn"*)Ut_uy!6}%"M*K \"rp-@!֪l^ß|ح҆bSa|ܰ,R-"ks V ty1ڣУ9W(b`uiJǗY9*D3U?\F4Є~GWmk+ď5 bFO+4V_q'r@6](&Ԁ86֏-N| j& S/A~ရo(.R3ŷn~=9Srّ%22 $̥|Y*#iuqyAfDpH2|Qv^.o@* 4PD}ka~{?*_,@ m꿧^;s=jp{ BЄ+Lu@>6]sb%ڃhԨoIUy-x7pӷ1`ѿC/peU(κ/|8CghF;t*;[cĹg4O)Z?Ҫ:XEA?ΣHQC6h eZ2?ѿ9LX,.;ڳ>zB⚈7 `%TmJ۹g|d` PUO4CH?8p_A\4d28t$PE [h+X]|!vy5/Tq\F;WVfb`:՗]Dxs}C%rY](<函"\pLķh9?Fn >`-YO[dG^-^Hp%cX ((~ڸ 46p}@G  `:ucb|ϕ[%?}Cը_^<_u1VS 9⡂K)-&hŲ8@ZweIJ=%=n|JiVt=]'H+ Ŕ"穋ZFnhhTO_+f$c җb# ?2F1#o3^!E!'&L;?FyS=TmMMgNQ7+|;ՓbsϚP#"p t,N x@<#dEpX\Qg J E-Qk"֮=altub3B%C$hf; "w{x:G*S@֕TC\ Qgi0"L#$1YS׉UF;mͅbykS,Z5G]4Q}v];6+z$>.;Z66|^k`8p;y}8G\Dg^ 18Sr4{Wz?8\"lk-|*b07`E/tdLU =Ѫ`ljO9B-uٔq\ 6SRD ??'=HrTwS7:r9 Jڥ@ Pe.Kw jhu(H/}yPS&ȘXC;)B#ADKIمE]Qa.,Y $/ٓ3̠Ѧvh@h`X^ 53aPcx3uoe.Uog.]:x-п);gm45 k"`НQQPME'V!]ƙ]LJ|uҳTe D^wTc:3&#v lFm)s2 q@䀆HX^5 xTo {:˩'3T%@q^r_kRy!n4@8Dɽ)O܁C  ynn'osr>8E]Xsf"l7yӚ(l;qӸYb4Rw e3 W+WĬQXuIbܑJ `Z|[26q.kD34!Fz$hviS ggq8 iڑT9@t}#`.-`.eMxaFWBD.)7@&HVV9.(b6HcңanI'fd^+13$y >PF~REF#m0G5@ .2[7Gmg k(x"onU"(wJgȉry[r)xS_J3M:h[55@@\@#„Wbb3o')[q,)s@\yN]^dpyr0XRɕa_{O~+6W.'!,CwY*_:2"OζaN /Sxa=r@m("fw79`u)D=&h௳Zac80yQ)__Ya*$YEt,2f n1ny@RD%пٱ!EZ?%O/}/\&HMcc=̝9.^>EPʊP؁(ASEJF&b'{#А7r@RZ|< `2\ݺm-/ xg5t^Lb& ,e_76wJ `[ݲi uz/"ԎvQ (@ Vu6Fhicj!@+9s \|^px#`#PVЅ*-m2( e:"N]4X Ox.Ȩ8T#8Ca G]3xGpI]45aˍΊ#?˕$F@z;cEA8C OpF~wPKMߒYL$ `1;e7x0*?Q_ 'pg"Ư]@Qk ą:;J bmM j[quXsR=@xu/O2THX*IzփV׿)fg {<ŇZ`yN=(,/#U oBiF|4O:B\_D%j6r>yӄМ( @24 48+|wG7Kxőtz9T}o~}St[4hiTvy,^⻒Zk@^'YKqh`ӆ K<JsZ`ѿ&"M <2/b'㋔@ZqQv[385#lRzyC"sz)Ep㵍қv@3)JP"6.rI H1^5ho,eR6*<IGu=/,o.IYKi/2z߬00ӅcnidǷ*\`Sysһ'0/k0RhezߞW/ ['@o0׆KyfJk`쯮2N@˒~PI5_Z,Se-lVK4/ Zouۊ˕X'g]ʛxO_?$E"9.;E_ϧf[B ;;8d܂h#eVPvq9N@o;=$T(_h>,F:Qiom 9,ʱH}gѼoT6}{O4{R~Ye|v;MZWD"\Y Fd}@r~v/\(5@@B3_j.{ ։J X}:eE=grR >Y%1xf|'YA#%+;`cAMsJ|_ZmwJ͖s3CJoH<ӚU/ nA>\2z@{F+o;wz  )GM@PfV_Q.,`e [?K}l{+;=quVN +k]8]zӛ4v)5@JK,ZHm]" phLJt V1o) ,$cM?uxf*ߠU@q-t5 X,ia>daK, Tˀ^ҡ7^RRrePE3#?v(O<[xf_!ѿڡړIպw PT}`@mp]/l`J9Pu::4,H}9( .: o0k2^e‘g;MN@j&5'~ *[yvwSЅJ~(ю^^wP9ډR [V@JPE[GDYvXKiz0LMB&P):k +㧶O|UҖ>4 מeqX*#U~U@PJ|Wk+ +-7m5Y+!Ym1wka+ tU8v7~zl0 ~n"s@WSIDAT6YERom#.39'`݄7Gcʖ㢒 /va;r{Ȃ߽j 2k~{7"W__X!]6@䕝m^УmiN (/ԀBeI΁[glC{^hX:6N@e_P~V}IWuB͢;bV =gDw;}4'\n?~qF> ~Lg'/4@<;/=GoY4J-=-QCX#4 ΠрW_9Ƴ^uݮ:3b6p/&-".z2=o17iW5!=>idb軮m>ٌjwh:z`A P /=Ƣ ;;[-o?msbѿ64 z#p4@_d`\JVg*[ \ ,5/(WuegU˃"`o4IWd3tcY'@9e'@x//ҍ \բU1?y|K_9 ~H*pp#H010J0%4/#?mT'p|N:xwځ Ym[U7?= |ZC_t_XDfMO{7Em5__jQls۟pќɢ  MA?uCrPv cq{BV)Gi;Xln\/+D/5=Edͧ+0(~o=z|SتC (O꧔v~y5r~?gsKg6w4bsH`yį6Me_PlȎ@ukr]fUL`#B:OW-gnk̎]ߘ"&oKt0woXrO`i~~6"=+G*2O mm;fByFm,Ӏw~Ԁ4혔7bk@~Fg෰_Oyy(`dnSeW}'q?e '~=>9E/wsG`7iAJH PB[cFi,]XS֤ք4jZ{sY4αwAbyeH 1 lHN@zlik@{ǚeWߢ&:F,٣5ӀqX۶rHP +4?4#ޟSl.{+vmn7@Aw뗁 ]_ ̳}41- -o=xZ_.c4LɆtlKS/OW_zf?u6=@6˷O+Wl,HG )ԡ|[h A+k8ԙ&ۏ^Twu~]%lvZ&ߘ`b B{&@~?ni;ҀEV(HߣYi?6px_!"`Ep#L X7Ҁ< tjW N ?l6W'o[kw?m205X3Ҽkˀ4@2P^etM/L_hOoD2Tdc耲,v ۸ ^F i@)2msw7HL&V]FU@]dlz}G tYK˕?c%U@ tR&0\,`)Ii `_\*kؠ ܵ]诒Bў_`U<0qّP}hEu\{x6N{W`we ;@B-?JCN5sZ}ɀ E|:W^ ѿ&Lr>ڕhɗ7e`HVaO﮿"Sw%2,gd`|:/7w$пS-Lfw\;`L 2pN3?o7޹j"{?dXp׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx?IDATxFPKR؀68  #ܳ<|N?W  @C@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8Z L߹W u~ OEˆhw7Z \c?_9ZN6oM|w ,wĿ6 ߯17)r}s`Z@];'; &Y6w\lxW`xdmmZa#i[z% _]W`sZOjV _9`U..^s*\ 5isj `l;:.p1k'jHkd/t%sDL$xǜ<]oպIph|CW8~s0NSYRgkOȀB.+`׶+dPt >ivZv}UUuoE|;Qs]N`s-'_JzM;m./pX@K %]H< H詛2)O7yx=J#@z l*L/_օ]w/_(_KOA _g P+tݿv$8苁N] .If@xeZxm~{'ܿ'q{ C1 &xORʝ2k{E`(?#4ONPaj ''܏\u>? PWO+ ]u G6`q̀ws)\H 1?- b1`_= @%coƣκ 0D0GM1:|a/{]OprI'H@8W>fpo٧~'n =`Oѻ:pza}o7#' n3`xOoߴ k ŀ 01N? yǣ '1'<:_uKcafᾏ@xf^A@C dK P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW( :vŞ P -AcW(Kҝ\ȾIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/control-hull-dimension-expected.png0000644000175000017500000001423512076022157031506 0ustar chrysnchrysnPNG  IHDR{CdIDATx rFP-̂f5& "4mJ-6?hS $pċ.T[S~!@r‡u֬?֨ye|.pe߮wWXoszS?Oz?}ꏹR^G`~WF\F@\&A\?0Z;q'pdtypn?h EaYp꯳:^noȁU: z8Ǻh5})ZF?]m[f+#tœNؚר%G.#6FyRZGW 4oy9A\.kW" !O>桮W.1/(ڌ(kYW^ҁ]6bWi;uZU跸N :q+S?U\٬LQ@5}KoQuV3u7'sk:b+[bS7pco|MN#{!Ť9qN unޥW4p>6we4I7&6t@찉&)XCSUhy~86i=-_]Y@ q 7jେ?G@) g*GT@~j`OT 'k*'8/?R_ 9:` K)/^^9y:`L%Z^K`XM'"?~|^.{W 0K'9x-50r\(]H?j` L^>=A^V ޗ7./p~Q EKƵ i0϶bKŖ'{8Y`UZ,_Lv7(zo}IlV`ƿ='Z+,ؙXR~PثFUma>mi1 pT Qk&oۘ.ke=|0jA[p,V ziG.QT@|roD:yIB<6ڼU5b~5(9Jzhc~trr~;xß\; {"r/VN_)o `&ԥ_girPN|QM^>%}>y{K4PMh 5!88}c~ᱳ~ `?>)\g=\@,7|uk`ƿ~iZD=dЫԀKq&+(OP|k5_xP.pJcoOI{pVPW=\AY?\@Wc~eVP8W50y1( P1pgx/ދsC >W _U]a?[ O{cv$OJ۬@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@t ,:co(P&@@g9{#@@(ĵ4: ( @!  Y@tN P( q-M s:FBPkitPӱ7 (B\K @蜎 @P@Z@tGoIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/scale3D-tests-expected.png0000644000175000017500000001476211745120722027523 0ustar chrysnchrysnPNG  IHDR{CIDATxݿ,gG  Z !`+M V"( X$\""FDP@ "; ^bcb,$I6wٳggvvw~@y~ϜݽΝ7Cy敬b@@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` *p_h& pǮWy׮L{ܹY 4 pp. q!`EO5˩& ̱_(!.,^8P ;!!.\`1j"p@[R{C'ָ@K^$H9_ rzLrVmS^8`d/'`߶\ l)V!Vw K_%A "]tQ96s',$8U%zK`H?3A:޷ݻӗGI@9\ dm~08 7BPܵXޑ#\ ݏ}2֞a^qL ?_<:+$6dɈpS L!V)}3<10-#lF` .n|h#p/|~_{xG'@@ܺ [ ?WxճbT*QzڝjEg;O~ie2jPˀ[?zLj{)ޢKF@G2_֙{'kU-*g-Lȥ_ϥ_@;g@'ʻw89 Ht V;[´Z Xt2on{N<@ @.:#glZs x1p;=/1E`ffzG~?Ӟحc0Ml.vWIwkYC LR ]K8s2@ r]e@/~bi+~ ?)P*Wc-H..b;|`dSn_}ZVܿɀx|xVݾ@g}ߊzn%З?“b 6.`Wm In  gcGs`M&u72d/d?߽_O>j!rߎVZΥSAK@Zy>rU_oͥA~/g&-I0?S᳇^^s*<_6i֖u=`/yn2muY0<.v*X 1'(fvlw-,w X|8Z@`տSZ`ƞnWޝ0v]@AKTxꙁM=Ԭh [^yG,U`UQ"PտĮ8A+c/ (A+, N9L.-VUp1+hi~M)+f)p ϳ,a o\W7W,[+;PϦMS1;v0$pMh*J_jWCdPrwBV0V~1|Z [  tEG>;B?W Xߡ/u :,<$Xh0Z[g&@mM)ʢiu# qkw آg. gMx5ͱ 4& kr 0V(svXD8ɫ{1 -]W=:`  * Bl3@Pxe @@ ߽rs$h+X=N@[-ˍ7c>! #^ 3*%@@ppr@NUJ+ / # rzR\W8|Ak @@s`W  4z+s d[ М@v4N @`oeK4% jb 0^@%MS1/bx-|&M\ *'@ 6-uS-;op< < [w<z@  кh#@@@`=v7>7 @G@ ;>7g8M@h[@_ @W@xm ^ PUGvf{F QL6"@@{ȧBF@U 4'ttVEh= E@򀫝~芗b2k q #]2gM@@Rtcj !Uv@;(y"`n ,]f(@@dt>#jRRwLLnu8"Gd:A@O>OLw{"஄ " v}ontf>]w ܷ:6}?z~?Jd FtysM0bC @"Wh Д+Yr Ц+s\9#@W7 ?_o; Ў+z`"H!@`1WSS|Amo˂y2~>l- sj׬Ы|Nر*\,զ5 P?/ۏ/]\r*~Ds d Ъ}ov $ Į +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f%A9\eMlIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/render-tests-expected.png0000644000175000017500000002177111664172104027523 0ustar chrysnchrysnPNG  IHDR{C IDATxmuiY3S`/ԔԀA!4GE^H/1?dhQՀcT6 3$6ֈOzs{׺ }w^Ye[^}? O|S6c& $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I ojx_|+nzO ަ?>/0]P`FW>!!jRKZ Z,~ >ͽ++ ,P[ǿZ$\JTPsu\[ xUD¸OU bR5>۾+w: 6@FD4 ӭ)t: bJx%%@ -<p^Ft5 h E$_ai[vWЇ$OmX.u=}=3I/?~frP_}|J|#B#ު$9 Bw}_6vO-ڭ+/v=h wCնw}?)6@- Lzmw+nkà m0jZA!鯏 (E\W'p?>ay03)Mxp0Ԙ-[YM08$3ҾYEm`ܧwvmm0Z:`HTS k҆}W~ݞ߶qX@Ήtqyp?$R M&n P-#;Aw:tK>/w'WlL )τ{f<6 lCU0(E\_._n4wDyUx_hd*e܈?sJà1okOMn ~+' P$Q37 3;YD@,XA.~cgRBTWY}oz}tpソ:`;R]3l:a!$*.tӋ5= aචH{G[y"NXy{ K<) .ZaMw~k+_w巀fZzLvN:O' [-5@A9Wld`gJ"-ϼ' w춯W>_:b%_ c ![fz:HC2~LP\p+SO=vmZo?ئ7;<`8rxmX: SP}I0nuvǍ?-미AhK^^;5!ON3 JtρiBmP%ts >^<q]<Hsp`Ύ?Bַ򾹏 пicæf>H2Q@L1LӿaqxkLJp^ذ/%3:` <uv]sxn{]/oS.`8?”+%uFm[5G_m/웿:k.{O/{W>>lS؏0eM:j:&?s~νp/_s7rW_|Nx}onrpUWa2ռI?[_ 4SR]-?܏_? ͽ@)͚oky`6wk j=l>Ã'qA#{uo@4}x{@ؤ?9_KkQ] tWftx' 7>\i{eX `lyG>;~޾'?'=ރ|}؇_}9G``ێ[tߵD/c'¡r%t $vهAiLc@G_I`ת╧B_$8l hՃVfߗ_[>=_]ʗ~{ޏ?K3Otn ԍYz [@wS@ ʛ~_IݿpOڄX|x/ʽtRڇ5W=1׮ܽG @Ew |~vħ>_ᵭpI`d^݋0/. *jSml;Ow}ؑ1vSjL?>~KG5KKfqzne/OD޿X9S_/Lye7ySfm̸@5??rȵ_?t?HoUoo~_?!R[JT`*PgKs缾UtM$>3/67.&ʙ hʩ!@3$;WPWpCxᅜ>w\; }wOs&T#΄O0`^uWS|"m;Sٿ /Xw]VFD )pC0r?y3^}f^k &v)NI[y rk[_C9n =|%v6U}_hN*G߯ /g/tC/3@I`W7ץ?HHnzᆦ?Ԉ}ӯ(Ǚ7B߿&Blu4b&8oBu?ރY cM`Q-U4 v VY%I inw26ϭ@Yں!˪~'c8B)n1ϩ}^gH[h /!O!t`¯vC/V3Lǁ]&`@_NH t .{zGns/nﻻoHy'AN 0igxw_<.>{˿_$ Ps. y{x] g=5iolP{"A@KUXjrg/^hN-[@qsn|=?,y?M?󗈽t`wwEd:_9'"|a[ }dg=Ϧ"`w`/ yMX$+h\{Ttb'Ntg}:fG`"ͷkdZ 4 \fJIk ?3L6@urf }|J?kGfC` ?l9u`) @ HZxN%p[g>#R E7e\m+TX+@`}E+yL@8%v|bY;Ylv"@4Zi\x?kʫNG>LjM䝗3E[@[{ }3so԰P@ 믧ugd_ ;*sIxɧkX*ŋ, /xC!)u@M??Z?za6wjk}ms |{^{__}F@8 J T'WWi$9E>J3UBkx7`KPV0K>}J V+ LЇrhuc[l\yp鑍/ ZnoCIG]  je͋G?u+6}". 1_TTMs!p@e>tݛ_ow78fB"Pe084 |hV @-0@= B@(I @\@ك!@2@= )-Tik( 'zFB)@@Ш˼VZyӧst\<0C@@ ZZ*u6 h`D ֿvs 5PZrV0PA\˄?G@Qը*Oզ|ߛY\˞kvN9_^@߾9@䨳Y6"7R )4._/ڭ+ GbshOpσlLu`5mn:+ n^@oQ& To:t=WwofXU@d 9g/s_1|mXA" Vav~:ǙSK3P@ߩg tv$pM@Εo,o\?Z@M|59S+,Y+ЇOǏ}ۖ@kЖnvσkJ&a]xG1ZsK Ebxb@*َ$ "U\ sb{g2@S fo:u u- @t( Zk&@`D @@Ūf, `X8k0TK(: % @` 6#ᖨ}cK%6# nһ{2-W>!W>\ @#$S 4{Wɭ@O{C]#~fsd?H!Mcu(X}l~Bn^/^Le [P@ɺc-xZE X~2D`Vƅ7隴IL+ :sVi[;o*+[B\cLЕLTnb $ TJ뫉+J!f֧ȥz?{ڑz3=ZI&sS_hk(; 3r+0a?D?,+ t+/NFE6EXHf@ >pT&O2p ֿŋ׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx6IDATxVP?m4q@bV=4FBt$թ]?~#@u{hҮ}i:w%Mg̮% ۼ$ަ7oľzvuwqu2c7 eI#t.^4vYL irhҶE&NTO/oء_o&M\l7[}85fq]ӛxv ~0jx⚞qxvc7]` A_{׃0|>wԑ<kv v'~eE1`4ÁGCb0aWfS'ƾ&Q<cTEwzKk)P\x޽C7]ᰇFIpA:Ozx2 @eoA(-8ŀ (Ytg ~o8=0^. [<_uk8 u&Y=g^??9QAlw qg/ ݝo˃mCޓw۫;_79}|L>(EusޥA':}pc+ :EU@T2 U~U#'XZz?/~כg* ˀ"20E%@>`%RWt32`(YBd` ~_C9, kI: ӄN@KK;]Nrh}?&y|y ܀h(I`@q?Lx79 pHpȶ_ Xt3f|B. e@Em5t{w+C;}ݣ:8U@vZ mnOfpc cuӪwB/9s1{#ǿ/+BTYSD=9Q3OpdfeK~!>7#T}}"|:Zw- E\ù|F+ /~?3S` 10k u>9!oWқ:=y$)5it8@G]+.hc`? Lvq>S~C 48ZlF7pprY!K9ez `ߖ*5k%v7?epa]QWuEH2E pٷ8o=/(' ߡ],`|r`gǗ.*[䧮+dvÅ.[@Unu 6bvlQ.$ h/?xp3H-u{#[FVN /c`_ m+W@`G/ubyQgXEbҵ 'oqIs>"p?bc[ \p" дt}S@Fey-n>lxZxTOu*E@D}0Ƀyzg?67 ަy#=qW7nN[=.w9;EacZ% (׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxPSG)( Gb4,.̛}|_C}mَ  @ 9 @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@( ޶   (m  @@oݱxعy/5KVP+{ ޹f}ߗ.z޲Bo[]-kZ~EH Q? pu_~?@{G1h| #ՍG *n7(oڶ&_u+胍#r`en ЗY%(wDYKs)`r+lV\ٕKߍyƣ?+ }?Ȉil `zA.4A`Z+,IH~N{XɅ>{5*x▦ "YgA `M۽$Wz U2VOҽ w 3z` _> P3s; % Oa>'_&`'+Y/&P\RR9y?8*K;PgQ\Ȅ,k8ͦ_ſ_L@ $bqDa!k5okLp8~ೆg,+Q[:ʼn "0G x?( u33(Y|Wi[Ť号 502wOqK0w0j`,?&rfoQ>x ܀KyoW#Վo~j UVux*G@+G6 YJ4iQ#@`%(QN#SV: `9XrDo"B:`qb Az Ot'8x[L@,H E @`X@ G<+x|8J<>?Ll*67 (}ϻ P@lo4 M{j@M6JspwP5Q( @] (]f| ( =PoD{w p[}J "@+ (WN _ (?K&6PK%=->ߢtkP^FWP %KBC?yhWޢc2E9=Z,xpp/%y?OHxUvVϗP=Sj `^V guWVۿaպ*~>nYNU3I*p6anh}w׬LT?oڇ~"4 n~??0g{]oOYoL"dVF*i QM\Dl~:S ju?'dűK 8}_*;}Xӷpo}nߨM ]MտV .8<υ\?;A<+k0H \I `]e~j`UOYAտꊏT+.hM'. pv#3kp >wo y e7xћp޿O1 %֡ _ `][y ^;5*~{߇2]oMpx2W.{xTRK} /~ O ]D}F][+Kzæo7%GB~̕28I:؟|ݿؠ-<,{7*ukk/_(>Kg_uxdWו20I7|Y1= n+ @>sxb?S ~Z@ogi l w 3zuG`ƂY{&B7{NV2.D  @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ B@D`P& @ Bopt՛IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/union-tests-expected.png0000644000175000017500000002313211640436733027372 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݿu+'p*ʔ)5pCizo(`SgΜJNmO-HV[LɪN g Ol  T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @$?o;i0ì?}a!@5?{.jPM,}ӿmwV^ PoT>>xSӟ3"Z`_R[xfA$@@:N}>`$s@E\E`</8fz2!-_l饕@(k !w˘ p|JM@v~Zws=N͔I$VÔR>|Umo:- Ʃe䊒~*)@G0m _9B~d#coh5HwDŽ|n>>S@m,G |/C/At/ Vֺ2 24mx@]2[a'E`~!JH,?- 5K׭{s_ L@4 wρA3mWn%WTonDxK/x g5z%@`:j{{L+6&5w.zeǿV9@&Ou зID'ЃW#P: o_ߴd6Y 0ywz:~) O(+%-wMo6xuz: 鏜#@S: Sl9z~_ۆInP >~#.nAi<`I7@4+] Sa#zJǗ^#8HPdK\'PZ Vڹ5o~7;f5?]tJ@ /cwDOM~S/TLKR4 |0tno@ϽSz0Z-!_P0{# xnaW wx!4 @  Uދp3m?QQ%@@@ 'G`=;taUƋ9n7]쉗 XV ^e0z͟tgxF Ub'h#ﷹD>#) G8s=χgn p #0ogNz>08Z^-XvF|+PƝOF\ʳc(R6h OO^oc T kN8}>[aPkԬ+?J =pqq.j aURls'۷O(>@@)`kz1oXIp4(s:dwѳ1͞]'|OY?f#qUKCߺr$JwKLkY}lS g2umcz.ti7'wɭ_y:Ov|[(?ͿW+ n ž iԾLZQ}csr3ptY^w·G+jTsG?D*G؁OfebzDw]hEҋcT<]j0߄t#^p[^k\z$(\Ť^:>$ z*ϧ% )AMl$@|V)IP+}|\_}}#f8KdX5,"xik&6?x~5=FK'N]i-RK1 fU֝0?\d2}n;Y%+=(? T.M|̶?D;Zu^ ؕ.,$x2Kg_9"sɡCy{iI$W`f+Ǵb2B|M9c`ןo-iTc#MVrMP)iz>Z@- ˕rVIP}v;gbȇurbԋw8TO/KQ<ҝO􂇓}ë?X}vsԈr1)'K͏AQ?ǽ ~ M׽`y|oTͮ@%~i:[VN.l>ˀ '}is,ֳy#1PZ֋l=( +1ZfZ+? o4g>Rw:KUb#%4{j1b_36p}Y KO_r$‹Rׂ55Es$B]r#U_ kaKޭwVZ Kl-Rd)1n’BZ>TrVv}`. _O ?}25D_=} $ # pk4g%Tw;g%/ﯴ!X9Ò }.$XO} Y{|-}7{V/~REb4-}]IOk+I@Ej9w*ni˦,4}aS6,ֿa ۂ>?/hM߿w wEݧ!EO$0lLEVWsfNqzh1n2}C]#@;{1gQuWv וNnV">yC0Di"1[ { 1\W4vT>'\@[ٻtӰS@苁wkYZ)dMb~3 A˧+b @ڡ$nϟ2߷wCiw *6𝰦O1kN0O@n<, ƶ{/'t^[k.% v!f~2ժzGM)N17.F^@܋\Ac@o >`wg OO>8P h큓/ {l{}mu?q^@_y~pf[ h*~?;& v J1>H`qH uP3PwsO c Z+Ʈ_~sݿZTDT9ģsƀxǴ뷘X>m"z5V82lO&fN\Z%7ɲ%>~,,^?_U+4 c@ZهY2`1-S G x;G s)U9-]=pʭE.GWOG MV`C 렦 uZ!@sJ(h9vֿavRn指ZC& vQ"  xP-*.ԜκwjwuEq+Pl?[;_hQ hxkh׮+F2o\_fj|;G*s+'Wu9 xO\OT<^ xɳnv ~/` }w8 kU| [n1Pw g/_#3\ X~ĭ@kі׫e߲u8[ %y7S;3pnAVcs3%3+cqOh.ONyXuNa6H' [}?} Hcc ݺ̗_,q5x9G (K&_X@osx53c4M=quUnN#m9@ggI  r7i`5tM=!ZWIo-zC v-jPtq VVZ/(oCuʀPaU0Vq+ w |zW_"/`MVI'0&I@|kW0_s+?v5n@7H[r8=V hھVs-~xS)x?_5|KFHXs* u~#Lw{jw[v'8B@,H.ȷZ%E z)sV@?eg$HVAndrc@{} h{@w+9ᇿ3Q:xO/tѷZE7e (S xe @ीxɓ'ƀ֟jgYlMiAu5,J+O@WNfV@襤AN@܁t&P}+4}H; Lw%nB>-3*TQx+ZhN& f+*;d{~+^Z( 2Vv͟oZOfpA%@@gEWA%@@  $ Kh] @ H@ '@@7,@tO oXD  A ް0>@a  - +`|  x @ Z@DW՛IDATA%@@  $ Kh] @ H@ '@@7,@tO oXD  A ް0>@a  - +`|  x @ Z@DWA%@@  $ Kh] @ H@ '@@7,@tO oXD  A ް0>@a  - +`|  x @ Z@DWA%@@  $ Kh] @ H@ '@@7,@tO oXD  A ް0>@a  - +`|  x @ Z@DWA%@@  $ Kh] @ H@ '@@7,@tO oXD  A ް0>@a  - +`|  x @ Z@DWA%@@  $ Kh] @ H@ '@@7,@tO oXD  AߪJW|@IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-intersect-expected.png0000644000175000017500000001206211642654340030565 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/lwpolyline-expected.png0000644000175000017500000001450311642654340027300 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxfQH&kj q 1AeT%s_tQ@ 7  @M@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc |Û(|S>|P ؈(-J^3On0>!P;y7d0XyLi=7 ;EL@k\7r (;>b#|!n~8>~f70@Kv_a +oM)PE6_/72 tG@=~7{O/@wJ (MyD7sjH -ow * 楗Rn'#0%W_ŝp `HxAnOuh (2oj!pưϘ.v'=n;-y}k}䡺|/P/4n{j:$k7f\&sMn@@ `'P?@.@P@ANK7?.[J7ؼ(' ?! ]@Dꦿ 2xJ orPq߀%L'~ٵ{^~+N,QU$@4p? {Jx8{rm Eg,7=618Y Mj@#@ %0[Ӱ'@;<Ǻ< ,Y=xX Ez 4Ɨ8u\U֜p[ \( d (/ ^ VK+D+oj B P%p5P[| p?pkjV1'@`fO?~ N)~ o pQL-6ħ6 y  (͑T^H Ƙ`^N h]lDPg0/^j`Xؙew"<" /]= ,_3:/i`9NCS<ͺz 47 Sc-|F g:6 (7] l@^/^e^%<lPvz ax\@ ` )F (y"SdJ L!L"X>V?v+?r%S6 x5VO˕3r! `_i`VK~ O3 "aIs\YU@${a 8?=pj'3Y.O˩V^B$v3hpO܍z"p0E P{(:&P6%aqa (k*xD{ P@;u*5۰s (9s,IΤH6ɫP:]K5K"/ **iY $wE@ X (C|PրA x}'ށanP:j`wR$pM{#,5|~W~Ѹx8Kgc4'Ϝ5gs" v'Q4i@iFD/'^{_-z 40tR.n0CJxKw (ؼi50B af0sz}Pր ^9J@ D@L"(y  ૄF@ &Jws[_ @ l p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@R%ݷm'?$0[_>^^F*@w%A>$xGr8oCMZߗz-y}[3= 7Y<8#lBɴ&n(nx/W_F?pLiL?D I},I9T B_Cr9T2(}޴~)iR'/~iO~yLV +'Gwry$<[O_oz.ŒS@)~#A?(gi+"a'"~ڗ?_"( N5@Hm#Q@X?,e 8VQC_<oh}x6ٽzj}G;Q+;JKԼ[<@W"ALXK%!w+/n nf27+p Y۱r>x  @Si,GQA @Si,GQA @Si,GQA @Si,GQA @S5XG?xwOh":?Lڝdl(4M!}( 6;s2v䶐 ! U{QxAUYCM3 j,H!N\o"1o}HM "KFI~4&Y!p}D ^"zZ^#J \7Pʶ8 Im \IP09_- ')B霬>`j_ O[-`(u1@t oqcwJE{ߟ 'fbƽ0! f}0})_Og<pb`ZR/T?zܟJ.Rl%`U+/})\&I<$)_ \0S4M`y*`hr!/&=9.3ia>'T"?_ۗKG@-{T yrI0S\.@?WAM.@Ťu`X\(?B,5_71IPG !,b~?N]rDW([J|q5zut"MJp99~ws'*؆4ܷP[*;E@Zjo~7o\jMoC&P7z5A qwSLϵiKZ@ӿ[OI0K!`n$ *A `A7o^}})#R7~j?`R@oxzI;Z\KgLt wϔ9۬h. !8z7,\߭] PWh+HݼDtS5 `EKDεyCm[*<&)mH,\#Q5 Z?wUUs/w)gʼnjcoWpxCg!ǨCUA ABZJ>μ N-nd柹MxCfjW? x-oNV77muNZ'=e 5r s6p hs{Tjα>%|5X hvt-:*ӥv9.մ_ u)z6+bt@/v $ZwZRR/3p /?V@,/!  R#B hm"3@χr%j1Up%]n[} ugط^WC@UZx0tym[}n@KsY8T e_i1*+`DJ5` \I^Xx V`SWiK@G T1ߓ=pO}&hMT PF[jK [|U \bc~UG@<, \Z[V֦@z$]Mx@]Qt<ƽXK֟dݺZ.9@$_1'?/(?_]bݿZ^w;y+tүU?}dp :ZgȒAb@X>v:@M-YR;j#Pߦf-- J@[׼g3TNg dRh h-Ki3|| \btc~-@XQo/ — l8]"K1ݔB܉ Q!pWRh%\o~y-A @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@ im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o mgI@63@NzIDAT im @@RM  @ HZx&@p T@$-m @@8H* ޶  $I o m?Z%Q^IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/ellipse-reverse-expected.png0000644000175000017500000001601611642654340030211 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxkȑБ?o ̚/!sZ*ՋdD&qtH Nde_ 'UL/  + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   3ne88?:}8ޝ >TXwe;C?ޏ{ {E"ӵ㧦^~G3zgO&3'5'f_q?YM#ޛY!f]op`e8Xވ?𴾽h⪉s6[=# #qӉ츿 BW\w40=b}sj׊wnS 2r4oO{T-}u3$/}}%iy5#l5Wa=w ,w 7&'x06iU'ddQo-J}?/x0VsgU-'RjɆ׼w$Kjhҫ`=dO2TG2K=pƝ@SZ-]5ڌwV X.z_-qٱ# (Y aϸAiw?>:[wgH1[WqZ恗 î|0fɾ^bs3t3\YOW^g7;骟Ӌ'1#ۮ $F|޾\^{zrukp8RϽ}#OU [|}aPv#1퉻xM@ws[osߛmWN8U;N0iZAl/yd/ ]h7jKٺ#֑ۭLp¦ϣu狻3 3ve3d[x_8~~;{˿'{=ഭ`G?Lu^zs7sgwLJ ys#yR_ vrp[~xa;=W^e`g3rl$g#f jvvQчA#Ͽh`2-`c?{[]?W>s}.hLݹ{ /avY.,cӷӉ_eaan,Yng g> }S xvl|pF6?W)>ow7v/0FsI?S7F>tb$`mNпocn[ާ|8ZWsF~>/ /]2Kަѿ .>o{x:5dO(Ӛ6o7ӷo0aHn?Z~IVk8V; x606A/`7`DFJ{L4b|M涙 m0Iܿ}m֙\=Il[OtߝgyQ; 6SY8IܿûI1 e69Y5CܿXs%6" |7 SymQ@|5o,6<^.`o7e:$u&N" y+/ /ӹpNjCwo8֮`|{=p-0[Yy8߭[ |Ӫ݊:={^ʹ.X7EKm[[ pYCV7(㧣"/}䝄 }H_dQ/ЫY#pvf 'EE5M@*MĿ-NM?3q=E^9Ʈx =Oy^x  v^lg;;) M,sğgkXb`Ƶ&F@(@Iy 1O&@L[X" (}[#F1sUX/ ֛->^/~Y{_/ mb׎a`o;L&* AI#f3@[=ۢK)t''4q,xe?,W \D@Ѩmy;A Avn ;= _@o&z3W P \a-۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@Kв"@@- j#+ R@l P  -۪(6-@˶* @@KNEwPIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/assign-tests-expected.png0000644000175000017500000002231411640436733027527 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx=$ŵ` /ɓLk6 \LEuqp U6STgw}eUeyp让N> @ JV1| W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @@* 6^ W6=@ hM` @ xe @ pwo<~Q"p>zХ]@d0)xl¦XR14 ʃU*O-v͚7 y ~׃ ƫ+g G΃mC߿lf=;:b=D{sm_z8օH`(7~[ d]4 C}xD!UV :v.LuHi\~}WVT҅.]@eZ\5} P sռJ,3,W 6>Q ̓ma`خ@O%5[5a0I55<Яa}Q 0h KoG@++%@@QP ЎhWVJ( @NE@QNFWF !pdw}eAgF@tʠfI`s hޅCQ:hoޝCF?3JN+iex8zK p;wALg%(g3hO&6&; = L-G F޲# 5v65@9. /R;sNvv0pei`goګ݂'pf^p_eR/y6<o@mCw8h [SaP$ )Ze6u,rl^神up a`Kє'OpPUoXO+`6 l~P[ۥ +8iC7ްIQ\ͳ/x?IANàV/!oa _O? N@)J%_{k#m_2c7, nAK_?e & NnoYߊ p%=4eb+_M~ xD'F*@ǿ,fۺGc !`>ѧW)N'$B~-U(%:*0+jFK70WE?]DC'W!Nt o=xi sG~ z~eg?0UGA`XnLe*Aݛۚ~sŹJ$;j?tv߯@ܛ82+ f@< 8I0qx2k>kI>i`UEgv[ TԞ٥ ?=ױ}ܶ$^?tOۚRɣ@%Xc8Թ :5hg*f.?aR$8+ z{yLxmW_/URJyg rjGAL@"Utܟ$& ~xb='gOֶ9 _:w@i7}_%1PD(݀׻dߗ0 Bu7#N]&Bv9_mP5e W' zGW'jM A^7ѝ?7Sݷ59.B͂kqx)E^P\w1Pj FGLMhCWנA+.3J+TY3o10q} UcTsz108 >ce>" h]6-68V56Vv!=գ5k:>0}uLn;zm֐͏|@ad\ujW@ƣ.ӗݏ2{ eYuc\ ?_g|~E]& 99Oֹ2 kw8x ,K> ` %OnelPO/@bjk#3/Sy#gX  9VXH.v_Ùs7oA?_OC@t" ^$&3P8N|oT@4ڸn}蟝e10quz;Ys [;S,n( ZZWknhOܽ!ۜhe,ݹ?i7w4˯z蟔 @=7BMco@sw~vsݼ\?'h 4WO~ȧ?~FU<oDџ>e{1Eb`@U$]0a^5G?Gmn]F@g*6DҋI`ysډ_27m$Vtw[C&Ȋ sL<3w=]c$xr3&ȓ_!3b@m]ƭ~agc׎N_v|3#tja'4.}EܯsEPq0+hI@T߭[ |_},@c_4ި5v^4jź}󏯊-Ņ @,@rY߽? @L7,{Yğ= U@5x? ܏Q n(+ Vzz+`G1jM$^>TmQ}K? f~CmuS_rI7S1`Tnw# ie 1pmBT.@g wͣߤ҆? F"rx+yGQ#8  @ F@qR$@@>Y% .H6@}JI]m6d(. m*  P\@'uA! U @(N/_r M#}gȀzC~4!0`?R.P@l%.z@o=ܞ?~1`fI0 ?ȖҋOnw ;C<<;K0Sm $O. 0Sa e=ڪ?1ǿ|Qh TuA~ /2WOV=ϓo>0M?e"pw6}x/KFx=RArPy[K +x迭U\3L`/yo/|4GVUۚvˀ[sX l !LWtϾ` S@WU @`V@9} >* Y"' @Og_ TrWc˭Ir?vy *^?eWHK#yGb @eH?2vr_b쿲 @9Yv+B> @.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq4eIDAT@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@.Aq@. ;x;IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/cylinder-tests-expected.png0000644000175000017500000002541111701151225030041 0ustar chrysnchrysnPNG  IHDR{C IDATx4W}vmx-G׵R&8ƩhAV$(dQG"*&* ԹU%**JVr)U(q,jHT5%Ss=sgfggwgΜ̜s3~ff{х NG \\ސ B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@Љ7l Na @@8 P(t 9@B@o* x&@p @PP6s B'ް  (T@:M @@V Iûtr8yl9 .puH LT7`TS)T3/L*aJŽ?@u" &L* &uWS@S ; ˭kѝa5Ϯ Wڵ%713 ?N=OjTAT>?>[uO[=h}1 FA}i4mw'+]s|sH& Qk(_pC:ȣj}gr4Ek@]F@L^@d?E:Hi4J@SF@L^@d?E:Hi4J@SF@L^@d?E:Hi4J@SF@L^@d?E:Hi4J@SF@LNρiB@vSCH# 8k D F@q M @ Hd' "@@Y+3| ߘUMXX\)Fr:# 3Wz_}nd4˛3=&@(`F!@L  0A <9c" Fat,O@,oQ˛3=W;n?C3<@W\@LN)myvKppcqc $g@g.rbT0=J'mQ R@Y5- , r-߆;N_~e 2}Q\7MI%T '7?o}.}O}0S:6T?{_ѿ{W\T5[Y~O/WcYP_+!4VzI.  ,O VxO}],oFof&Ğû4{-{P>T?|PR x[n}-> :`w;n?AGo~+.?Sd@C#`Un0tCܨ?q _|>WȀb. Y/7J}9ChTxO\/"hd2zb}2_1lvտOu> RX@gBu& ܨP52bYu,7^_X ʥ7և sA 2_=}?:D\0@X{xp~T\4>{nwe@RQo ;~iȲCO`/] *aK0,ehXU^! @^6`?'hڶ͆_>X2N7ҫN_Zz3G_O<=V?p',7ȀXOUU8\Ma:V~"E9 N1'%y(>̉C_ տ}.Pd@|ߤ+*\ vKg"=٬qR4@ y7:oى1ھ0 h91n\>T5xu5\~嫆~Q]X_w ^N{?e_OX}rc*'/bo.\Yo]ړk^ox9ڿ}M׌}m%$2nm^sc-V`OJ?˯v\[WԥURE8@gů>a̪͐z˛ )ߍ&xhElaعdaRnwpGOA+K1a4տE+zru& l6x'{yؚn^*ͬ~3/L2ڨW֡ۯ뿽ji4z5<q^^IM@l*haPlůn{'3\t+We_onUC?uv^l{(  Psn& 8ՅrK)JgTڊe]q⃠2]Hoa1\%k\=CJ曎ȯΌ |Gk!?졎?h%n*i hXWkǏۇUտX=f5eAL{ yoqk/J7չ^=ݝP}F;?]6 mkJR+iz4_7|{U"d@cjvcrk2ة ڼ"h3n{۫ٺAXnt~zfYԧR5,(Poq Ews?qI~o4./K?t˫ڇg33I'=˱' 4ꃄPC+?,M*icѧ⚩B_DG~,d=`i@NPz>o/\[yorȀwЕ6ѽHOot o6{y{/οWOQ;Ѩ3h[Sza?We@չ$),R տsx]t׏Ш |ˡ. ۼWoYa~.ש,{R$XvC.%)PF_ P.M7buG?d\f_ڷx* ?n77S݂sWo||VCv^*i՟ ǎ_o>79^O?W]2>jg,nAS&"ZYVnx[iWV}|HͭdrgT;ϝ?[V_]vm7^^e@=[:3k8?d-. Tju $ z~5Uv)PG"㚰P/q95qkàC _7 h?sMߥĀ8@ˉB[ƕ7qswv>^Q?>nK cd@lqe\[?_?qBgw_*š*N]z=x̖T5s 7~nSW f Xuzj>>k7ZmRWګ=O^Y \t¹k3wO{YS^.]/6J}__8~NWRۨU#i?l|\W/_NFرq?o? [TxYPx^t\[JUݯWk\tz?ƪi4:MTilx}@@/:iGo;ɓDH_k+`/0ѧث#z|ܽQj?i\76^h(gA_XuhyWf6JXGG =y@Ob~ йoȀpSbv?o~v*d@2`H݇.֮ůXn;Oz^iπտqKM@=<;4bcbw@]>èrxS]uqݸ  V. ~/ҫ'?J61Ӳ/_oPSA[_?B}ƚ {^CW[ͽB$L/S3a wtV!?nwZS& ;|ߨ:o}YᏂ-{[W>q2B6Zid@|eЮ]72f@+;djK¿͢Fm/IwSPK3 VݷSΠZs՟?3!ٿ"M@2?Dئ}C??>B J.<:Kq߭٭{ՓlTxɃzYE@g߬3 Y׷~ ]_5>n?jv h47@z ƒt ޹!i^kae,ayյܷ0Dv׼   @}ۗUĿ4ֲ;$G=s/zb z Y6 ;W o,(G\`DLZʀQk1?sOw_u}2pWFWWA\_+'m&y%&aul_JcU @5~ES 2 눪0H@gяn{=7a31@x2L &ueU[w6wnle|4YP}?p#|\C~pxכz8_Aoa_hݚT)z Ծ pM@dT]2H_%:_zIooWI 2੿pͿ{~ 46Cc^W/?~_-lM@{S᭐ :\yXBxת~ qêkWUbC~%ށm2uo0HcbW^;aЧxbnMmg.' ⇅Ozgwf67B&̿ ݮ`"(0: flu7~ pL܂O+mu#LA& "~`) _zY_<~}ѧ\XR} 7ﲎ '.mF'o曮xyM7\6ޭ?mkU賗Q_ .}g^8 VOgihm[矬`7M{ ٧`MƭkKv->f^!ȀC:6e2,<;W|'>Yc+RW-,ҿ|ϻޚK@%c ʱ[i)1 k? PӚK\$ -u ~YOo>ž5~[S`2 7 7qc?R yW_ug^;wvlw)os5C"ÿwտ?ˢ+{щqf@%ҟ|tClGb3^w! ,|3+A+Q@C?T$2]}- ?:z4_)?-m@WF?H\c]P忁FuC_?u05% IDAT n~ ?b//pх '?3ο0ot@u42`ҳI@Fyӯ͎0w6=p??plF- &/t]0$9NV5|Z@lM7O6=`A|VKMlOpl,  d o=-'0tw\}7S yEN_2!_]4$mbRSv] ! Pj3$hj 0Jvg_\{U{Moqߺ?loX ?ĺK!}=|ᤦHekT#pu1P3na 4Y߷՛!u?|!u{{ΙcsqH<za_ 4JE`;D7>U;Un};~9g[!(jkn.'W-g3/t0;n?qi^mz @uM@pa~p,l* 6Ve#- u?v3Tca ] Й+ g$oP#vnZ@#@U$KP#].z]@=sᇾҿA|曮<^ٹ&c~ h 4,J5uct=WȣϵWF׳- XUO`vwݔTU|?q)u=(w iKHuг4հ@*i&q,3k\b=f-Pϙ 8:ʞ08F'PC4@$NOVfCϏO; ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@& ŵGL@&H- RkL&B7 Z@2Ln @ H-=d" 2 @@jZ\{D@d2A  d"t@jq @ DR #@@&RDbyX9IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example018-expected.png0000644000175000017500000004255711664234304026776 0ustar chrysnchrysnPNG  IHDR{C IDATx eUu翯f*fELbD#i#vŘZthMH/6mCLdžF[!bTb {߷ywzw{[U{gϝg8 G`^|] @@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @ DJt6  ) ҁl@HnC@@@"x @L+ϐh=o@#ٳ @UDB 'PSqTL&ȦX~ Ku>{o[$G-xZxvWRR8Ha܂A }}4ݾO񾤥 {nnMeŖfb'Dhh*]6ߒ]7Zxm&v@1K u s[vw/pډKm! 9ckkX9FYq Yl@ (i lhݕ4mVtw3쥺)zpݍCq  rEHLJ RqKƔ7/8@C65whY1pY.ئmв;zˊ\O\ s~07 GnWW`M" gĜ?w2K5*Љ`j#SkG^ֶf'wXZ=8a~lJnLymXPf6e.,o뵓xt{Y_ygF,ql7/c9!"k#(K31HYZ_@H{}NMo,v6 AVal3FՄLv]?{p&焝.F S07)[|­{J C&T`Ϋ.&h(:&]Ɔ4p:3'0'깊j tEP%et94@pd^%dAod6tR72feD/#Ɔ:OZ29(=5ˢ!f|zRiG`>,TW*Y ,1FO`չ5"%Јa6Ҧbj+b@>]*e* ԎNeJyxP} G[.|2hRK޸Iͥ@ q" D0utAqRe6T}T@SGvC0&@;̽߉ }¾m6 .+?x_hs:޷O^o5f0+?hOyⱋWڄnMƥK+32=瞾Taܴz7zg^ض{?#6׾3VUW𞷟 ŗv}ώ{vSQ쮥{{hv dޒ$|ٝO<_ps tҮvb|{4ҝm/?y ]>LY$0%٘}o_vOoڥ0٥ƹk׌^ZdVxM)ǧF Ud!)X~v,.ayI=guاܺ3eeoNkKo~qKŜwҢK'ÖzaLKUs[vlަ/w±ɏS5=>ܮ:۶XW#SK؉ӹ|1f3ny!Y2b3cM'1~]ϼeӏg|c;L<0%$_:pEbr ~)L\&*}SLt>+˯: GDC”wrLͻ伐uʿb~:"B wԒƝ2vt>{' R=?d6bSH L39_$73P 6kz;#Ǭ:jwA* +ڻYu"HsKH!4S_s!.8}r32;lWq=5R4 kUVrW߽ʆ\f rjHb۲C>I_ȖL68T4@lYycmֹ-άޥZ:'NKxX:'ZKԔ\j=]`, do?&!hD1J@~rhY4 _3 2[Q;b /n#H?cP l߿rG:%KƦUٰ"Şl:Y]H*Vq[UnMrE:}tB}$,S"S\4MC*D>;~d9x!uSUPg[МA:/;`];hb5캪3Z`H%ODo5E vKTkqy&j2PB3=7.8Emdvzn>2nsFQC=鹋=\ .be:(sGNEEIL#T޽\i󪺫%V"Mi{k (\BO5VgEɊU9O"UT݌f̥VaewI@E'toeOA*m܀-sJQk(cs[u 1}r3U QԵ.ov&spvۏYWR6qkj YCQ2c;yxk{m^Q-E5aZPSVuV{X0mN{e/JAfB*16$"mA@@6vun:&=:,I&~yTS{݉곓J\Yo*N-W"qn4/"G6 r# Җ4~'gʥ%C*)K u/pAy*+*{]sud^s0Vkۑ+G{?oT갆j9О#C.}ق,ԟzXeϷ_nkZ]%#7o'7w|BՐJ`㪊T#Ɋ׸M!SmJM-RT-~@PyK͍,)]_|C'ӿVsE K hܠʋ{wm>1/Z܀M Y1YR\Y@\5;T`;7h镪~nS.emu}r0=,OuUG^ mҲ@O$E%bO7@X Hx;ofC8?Uț4sԤoQZF:+o%}߾7< [$@r>A.U ]FtAN,[m*<,Tk]AoSxHZ*ҡ[v}ɟ =_bOPOZY! QVHؤ$~& 7ttnϞNH@(_|YXƫ?sG |ggTG+97ǔ]ɢU5?in,R{dL/Z?ˋ1QYyF:,򖇰uP4s@P?Er }z_ӴܬTFm>H޿Ԣ,Kp{@Ϧֺ{$'e/{@ߨVAe,Y2/jâ5|*Q˚C.k*MR e,lrBz$xWP-Yy.ԩZrɋL^Qw5 U! TzrFjQm=H%s` TMP?uئRSw{*qW޴_BmGl4ŭRu]iRP̽$wRPn(S- =2ƀCԲgLѵUls\K3Xl[ 6 tK4`&ǃYZ3# 6,$EHVɟ)!1Iu9 kK}9&Yz)a]m-ۮ-ZŌMzh+9΢zD%_) 7o`r,rn9v|moj_7kKr5׮#d/&O1r !g,<1r+m+ɯ\ffeKL#*LC6h>S,T5/d<쿪m0T,W4@bRS>(|s m-d#Ѯȉ5U޾Aw% р[J65P׊GJ]:MG7/eE27[ZKԸ3Y䃽< w"]r}mƜZ.E5|ݵdhmp6,>KoL- )`& ^_=(YȔc;ڽ G)vȯ/CuƗh ɟpV\D8Rn"S}K] y>8_O^Cj)_a2yhϣ,\Y0bĒWD||͑ ?P3R)623+.윦&}یT 6]4@E  74¢\pKSwT8.eʰʗ=;7#;!flkLG6z"ސ\.9V

    h;e2tO\ܐAg{:iӚɁ<X&2*kW-s}<*=dA^}tESw;Qq#Y.߭p Β̱\Uu)X&w*p_q_ صL_t8Ra>vsמo?FcEՙ mKx`#lZ#%F*,2w}*ʿB΅^M-MN;a;?lJxc.ᡰKz#/a37$eڟ%R@&iĸd|1b9yÞslu(!@ ]+n}ӡܐj*IMˣkO 6 ޿mζ7CaG\Y%^iM31ka^ @;enK8% n73d)C̈́T]SB4!;2q(pWcbnQV4+>4ڑ,ѰkiO1YoeR9F|S= 9%s֟P=:t4_eFrۙ4i@aA;^}R,ɠT2_\:t@]24||t19Scr `՗)d"S:R =*Ɇ:%*m&r#MIs.η}|o l>T'%Ȗk'7my_ٍ4Y{ݢ$,Lm*ve.M&_6~ݽkWFGŎ 7_YoNuZYټW|nr6(!3$*' o-Q%Ur9P^p^FDnb$di?w[%Y,9izg:jh]"o-%J~(,jwopp^;(!oJr Dk xCBU5L( +_ʽ?9Je\I=^JYuqjܦ mbn?{etW%peDqdh;:{RTԒ$W%>Eke0^ޔoD)+#ρ^e?ߛ;=s[o[?v J !c%p{GvH6rΥZ2U 9IDqJx3*(fk/'KOͽ6aao 5\q*ΎS-cT;#Ս['ϰS,Ng^[TNm%ɹ~b|j_u.1羸c33Z޲k- -<{(`Q%"V,`LU 5@@QE5%޷OqP=d-#RcSN /W?"Ks[eJ sPuT[l" 0γм Xmx:9}PSV(O/wk}{. X8+6*;,æoo•+UjfEk| Յ/sĊ sZR$ vY u4sjuac; R}ASa!~'+}} e@m()HD}ACkkyR.x#7w[f`#Gn]Kc QIڂԅ)4*O?]lo9zage>;J Va?bC[W- aiպ?~>v_=7wWH]Ri2GC3&܆u?ߐzoovTOߑq Eq;z=ʍq-kX66b#/r h:C`_gd4Ƚ!ZflV,{瀳>LjA=[# zۅo:dQ O N~81@ShʀdL?߄,_>Si;(x܀ &ټƺ/cARPP&{z腽ЀH dE64-\/Nhٿn.tJķ#o_Ծ1G*@*a" @7@%@%L$ >@ƔADDGhߘ#@ 0@ Sz@&Ah}cJ T"TD"@#oL JJH@})= PP  о1G*@*a" @7@%@%L$ >@ƴ9=Zv}sꫥx) @K -X@`> Y-#в9, ?XKa@l#p#\cӸlGQ{nݡ?py@C|[!,"Q:X7o" 4@dB C x7ǘhiBF H7͌hoBI 7ӀhuBL`2o4e| ;h -B? ;h?}JS#S/prJ*~*G&"J:`C@|Cp> 1 4/!ew8(=@0CAC| ~߃@A@@  GpNAݳgc Q K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %Kw~IDAT%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ X@CC %K%;44 __@ XX2XIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-overlap-expected.png0000644000175000017500000001206211642654340030235 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example015-expected.png0000644000175000017500000002244611664234145026771 0ustar chrysnchrysnPNG  IHDR{C IDATx 8Щ:^Pԫ"j`a0cBq̙GڲP2O'gUL?> @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T௤u+;Z+@[T(~Џ.}J0<@ D <;?)g{PGtdgIa Z;c],Ͽm't~-&_X- wCyar! ow rRDRPic,Oc7yѧqZu\ߣ?~Ѫ)jL\>~حs.6sN[ 9;ܻsw+ ?rKo'Na?0~W`R~6ˆSG@}(W~&X7CgP^I/4XڢnS>.Naޤ8֟CM rv١63]+PE6dA*/Ϡ:=9Ibڈ.LҊ{ &-|x m/ƑG\;RΞ;֬7eЪ*߾@̬?0S?3حbs.& otAP&%@4|y#{19d;޽l*wpw0Hg[[c))Wu}?e%ke}w$8~88^>lKrpn p };Qr|Z0|柄t{_~ҍˑfc}! ;x)pyz_>!2m`u (ʅd)7s}uYR}4XN%udOjضo"ݟ^/w{[?z ^,rwx=쁗}Ik{T7c~_7R{w}|?So 9Ύ5q^Գ'kSMWwZc&WM&~o>xʸs> ~SE^e}讈ϻ.Ϲ6U{- Z ju^{yqy}9K~6U^w.[˲|1& }X W܇_+S\纭6x|n]=| W[nh.eoa {W^?9>K_E ǶuvnXCz}>#fhsUKW.3&ɡkx_k O֗[o?r%D}; =k8o{{Z3!V74]c3kϭCD]{mU C)GUa{.8= (Og}2{OQJ+_vM@Edw$<÷Ygw Y-TK {X@|X_v8-2Uuik}OΛܾ\'v9WԹ!駂~~gTٗsx8&nG ׾  ~#vkOnN7ǓRy߈-LIegqM\B ,b;U}^~=ٗ4ͱ$J#7]}7b?t+@r0zv~^t{eۏd4Y{ˮ;?} CmU зLu/-yvs.ZL.P_3f@wYvemOZ쥢~^(8t=}O#B}+{tOntg#?xۄh >:..@{UtC&{3q[w}{eɻ} L>xߪ7s6]w91ܗ@ߓ"n/1mwZSy.n\yS"-\ @$wo~%ԿxUȒ~zۧMҦW>l*>Tn7PwOT *hB3KMܑlG;ȝ2X gȡK  I P`rqx;znʷvX`.~ΝnKa>㗷lN:F2Ǽ >>oaZě?A~W~PBۦsh |^ `=_?:~#9$?H\8w셟-p;yS/4ƃ~a! Wv6LiW~ (5F 5NXUU+x~ص9t l*|WIs|qou羛0绌/Cu\ }={X߯3'xwrICt5l?݅as_U?·IcIN~v8[}rXNj>l̳l%o]wW= ?$W-y>#{}r}hl-6~nDd=>Vw;?$+0PpzθYКM+W: >U8ElnYE:kpAU8!x>(p/pl8D+m%_\EpJ>;"gbg/=^^b8 BǻzȢme[Zـ&Ym~Ug?\6ٶxJmc'tx<=g窚Q;POEa3w۰% ܶ@!oWlۂEڭ'Yáf9P(?=k bϥk)g_hl~`j9Fç;uG-1_>45GV;pq_ sr[ pE1% W|=N޺/cjgi+gIL%}{޼rvL4_O7p{{nx>y;OôY ڗH=;(P.`d?7/G@5 ?;I+NSUӨ-! X'Ov#ׯmo[;9f3;4'O#vHMRԍq-Ӈǯ򐇰\zi %|u؅Iç_d6a?cbw$#n}WT-aD oz|0-V;k'} β43}ii^ĿSewZy}ZMjt7#G6:c%˃e@}VUw&6Qxx+>:k׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx䶵P˟RP@19[2{8@kAEs-ɣ?~?W  @o` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f֭l@iBo_ RUM< ??W?uu0Մ05GFU)S)ڨC0x$9}LC0x$ .uG% կp?d?G+aHc 1 Z% x0N/WuiWz^=h" xoĭC1ww; n눮' SSۙ_Y 𺵀h-~71;|=𞗫 8| aO ^@r##RO;&ka4 W #luY=fn$ YO$0E[o%9}M} `>?@߃!W lыr-<4[9OUۨVQ7v#ta5TG+rG8z_i¦M9Oֹl؄a5.L}~ڹ?}w(vv֡[wb>˙7Ɲ *7X8~Txs,7}-G; /8uj1 !`XWECϧc>댞yTJ/6Nvl,{oƛ?OuԞYGݔdGGW4$-B||\jS=~\X`<CGt]GyhtRr;|}AcnVOFKjme6NϾqdP7(6 raiPn-7d/=8:sЎ<>K7:(!n->mCֻEz1ƹDr㺁Cz z󬟼.ZWE#u7 ' gw;gYR`pNMstr1}/%~mf<[k#q0u88jt7̗fvo35" ms^),%q9}65O/vMP@auۦMYSޜܮӠ fdԻemRxXd3J6|O^Ybkbn,6LI9Hn^}Z}p' hxBoqd9,$.߶żvn,kઇCsjIݚޮiZ}RxA<ĝܘ&ag?~ZMRxG`cwwmg7cy@hZϥnc,Gӑ`>Ӳ>vRnK`c'wwn5:6FhY|AjlZCo{nzȍt}e=Ge?_ s3z53M\0kPCg!llnIPp5LϘ׿Z U'_벋bo*^!}ޞmsfڏhq{Vm>m + TxyFm|te\$ aKh*PCvu1rJ1ڋjT nKRm1/ T{DM^pRۺ\TFϩhQkB-o T}l=/ סWs UuXgvSNͿ\(&y޳vWTv%|͏+K A q'Y\sOÿ..X)ݳ+ /@R@u4,y@k#_TK|`)q}@X(v|{aOvnuk#cyVCkqν۷?=i,'eGTΧIotղʚ~wt 47!P+}:.Yuγ5~@,f٧)|YSu[jJv="&bgyCY|b]eE?EX,ħ 3/ Tg'Q5%LA*/ƁEhg[,PI]LIP9x>~08zЧyٱ <9Uo*G'=vj޻{|,\_}W/̺-UZ;;c&M=)Z]9a*bY,[i`'ň>[Չ{ʹVe QG \>w։Yle!l yKs{OP::{u;hY+ZY+~ (mH @:IuhYV|Rr Юon'Gk U𬵭 hb|@k\;\:gu[Wg- z%ig1bbw=V`$zP.@]o)V /.+0V\q̅ "7rG^b- vЍ*bTJ.`]5uAJť~e`,mw~O:;zpO;KLg^$op[Ooq G껞)v-y/ 8_b"0^OH <%rA/G/C#aqS1C3 8\:\d#u[t>ab(YZX)h-o-:mh1Rӽx6gYڧ@#s>[ ۛ7V+R/Bw"0bWZOVۅ(0 rч+B\[U ߃87Px%7tg?Ó ]<1pSOp0I#O+C tww'`v-L tvwazj᥊ÈFXDr`runߣwM>FG>?~I@$+GW\T/p9_@rIKRӽ@0>V@b@q^=K >d/ 2C?P`f.%&C>d`ȶd.jpgU bџ7ėX\UY "YC{jƀ?gH/]t2pg $U I9ǀ!B0]K.hp=tW'&n y,29<5sUXU [չ{?JH$u{ZG[mI귁#YU7G샒^HCm?O Up:&ޙQpx5N@NfxkNI,OD&e 82C@dY{ 3^ @0 W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@PqIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/for-tests-expected.png0000644000175000017500000002536311640436733027040 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx}uY]p qzzi,|#A0Ijiԉ&l !L#E1+S4I*SLG|}s>g>{^{}} @@y7d#&@3` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o ް  * -a @@(T@Zx&@0 P(M` @PPh  @@69@B@7ls B o:!pמ8P4'#c%җ1"a}֮ĞgoJ[v vP"p+w MqC7ҍ% %_?yE/@%eV?mGGR:gI?]*wZ]FLS(puW΃[~\4v<匋$ ta ٣G$Oz=I@lwN?e5G3mQx9a|h+~g{]m?8=}pg'm<(M9Mgj^u鎇@[oo7c`9, I>_}C^o4Vvr:FF 3[!fw)!+6 x h(=2ʣΧfwӳ_l׮Ӑᯏ6'1vt~FotmfooGHëZk:??q%^T*Q⟟n$!mh!u,^,g# h ve@+fj Na_cѯ-&ǹEgY-пq=Ռ~`.}}hpO?vӇp&Ui8fEXCQWZ$ \8{~qb-3aC5v8? Ȣ_JƍzW1!V+e|5`0qPk:5nvӞ@0bR*2NY8)zp[k@|zg0_8 n*E±:xqGo{=6rY0+JTW']6~~|M}/4m᷽Ж ZhScw5}5_־*kV{ }N ׿s+Li ߑ9 ~#1>Kp2qV՗Ywdԗ;T=B_צ-w?@מ[܋_̀ɫGp-\2 "`΃$>yWοbOuyhޓ?3p'̀d#:=XO}3`Nt=K"O ^" j}*-\Lٻ^hr =DOL8] s7o{]}nw-rx5ШyI$Aue](b +TO K׃X``= ֜ggItOc1pۗk;yѵwP?Bv걷z%mkv icw 5 rc`Zֻb 4l]|pr~p{b]W ,%rs# -nr _q֍_Nk/]qUU2]>0uWG#_5$<]ApZIq\WNYC*VaƢuYpץ}qpepÏ[[hƷ tֽ@Ì$k f@eGCR`̥2bFv#.Nl*Ϧ2bꎭ܄dL@ 5f;Xjac5}{3! Z$? ]yz0c)yeukf\87Vg]tk'^RCvZ+{{_T'Vnlxca7vC~;/=XfWkmy@o+9d`=NMCGWʃ!Jֳ%>SzucاN}m hasݏlqč}!J3{cݘS7[]r!j7WyYWW~Yo /.^}?=ϸ+? V̨xMn5~:栛.0icx?'sU;vJp1ƄAwgS]y#Ӻ>yr||o좶K:岸,ݑqZt`~o4O9 ݋KcٷDp O~716sRՍoмf^еoƷ 9y|lӝp?PU.ֶC/Űq{M{^nݹ_on] lYOhV-`Z?EyWl77l l3=Wt]\H/]-m󤷽.ߟO2TA&ܵ}a j};? uS\s^ 9Nԗ=s8+]ꤹT<N^,[P}ZNN8Psyjy٫T&y}ՐWz*?1֋}v`r %~ɇj0wA?;<Ư=NKo&G'wk`tEj~n3kǔ8;şl:@zwݷ7^wvO]32[ 9fW_xX@8XCsd?Hn=5殉2q\8l͔#mONʷ^xJտ&޵FlȎ+3Kv6Ʋe'7`)~LZ9V d*v)Z`&O}6blmj~1~u[33GL7= ث@ I|6+;7VYH ~f;o 0K^ϸ; s ;O #h7k 5u{eAdٔk+v ZbBoHQXz}oQ1\/ o>KneWe;lڭpiW]xn]O—g0FB`tB4c \:/\t;ٙ&SKU6ѰB-dٝq_6<]kƑmnHa@.r|*0+*-3K@bh{UxoK^{EM;VlFuu;(F{Ŕ@  pY3[UO˽ ,`;9V$yo\y[[ l3r_PqK' `} Câ1J!@âҖ4[׾=}"\{&( 5')0coK 4MܲXJE_տۘ{QQ 0&+u*ΌA #6I_M*wWr)g,6c4P-Tag};+͋V/7_S }AqX{wX-\@E?*|1٠`v_Q9ؤgKR-/u%t 'VYw 4? L`ҷk nR@dYv:|V[G= V' v^9rp-nG}a}<Ʋ^Z\H~OK %5@{u!/-0M3*XH@,0M@V1%@B`!H!@@n / A: rUL  k-0K|UFv|lѳIqi%zpU ,׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx1oeIV6jH6 $go!+mdqF+#Ek-GM33;3g֭s~߽u;f_ VuL/ H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x TIO~y#Ǐ/ zfm.m.t|/oZyGQQ8 ll%E?K~fzEaÎZ~wӿ~QTu9Qc/^\c>!P$__|zkӿ7܂/^ҟ{ |3~{+ϼ_z.A_05 @hH z @@4@w$z=LA h ;={;!cS4 v @`ȱ)|C; @`H0M` 0rl͊5nV x* L$ ɠIੈH" Ֆ 0vt ?< H@t4 'pzvUos;*   0W@<N l`%./KQ GLH3j @ీx4( > @ H3j @ీx4( > @ H3j)p~q7f@@ 0$% @jO   PC@P' I! jړD5T#y}s = ]@l}27@OϮ4EI6}HҨ6 ;l[i @@l{#@V ;l[i @@l{#@V   W &@@KRh( ;-@K}g @h{.@R* J%@@ @%X @wGJm  л}B#@@%P ֶ]@>]7<rNK%! 8y<X@ xN=5<' qo[n 0dP$@`iQ @`0Ƞ9wG+Y@k_ o v<㣃xM騪ks+  PU@T9Fe* ڜ ~g2TUymN~@Q 6'@@٨U@U^ @_lTF*_߃" %qNϮ-^+A@S [뽰i`/y~z ڂ# f, @F#NoCLE$I@d^O.g F#{}s?rj'@kU(8<,~'  ]?  CMmA`U B0  E@D> P( ,'@@e @@(Q@IrDQ& B0 T8 lP\"@@az$@%dGlP\"@@az$@ť^tc$ 6F HM`kH  Y$ 6KK'@wrVuzvq]3=NQS7f '@`ɩ3L@?}x٧Ԏ)@ʱk^ o 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$I/z+I=@j%@` sCO.#5^OgW>@sPV;}> . V'w`\mNg@j]T`~)`)@T[.zoV~8>:@`)}~#p_]Gq' ڙ@uġǫ9lmyQG?}qm@AkOSPj_2F j],%i uF` _B` ?,h+ '֚%:$@FI~VqYxBPVߋ[Ly𼏻z$@hO?QJ*|dm էg K(c2`6oل6xN@<\? ?ϣ; ;,%)@-k `' (3o,+ z@ %!G@Kje2}OWH\.' G(??536Q+^ V+b;bW?!C)t?KC5'ƛY؊IO a_0j߄I?/cq3 |}#Cu&B3r3$/a>~<\S!}E/~=a?Gt"'Nr/&??4/ل6Q@859~:k#0ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a`: sIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example016-expected.png0000644000175000017500000002407311664234156026772 0ustar chrysnchrysnPNG  IHDR{C IDATx?4I~Cb 1N .;%&SbpbQ "8 xA.)9Ep(xNܺ}O=oU}j}@#R1 ?` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@` ` /m@X @@K` )ЩF5tJt*@߀O~Yl)H[_]uC T-Ss-I@B NVzzV_ \]76jh^b I H%DdФ|L~񃯦YB17Nno (Cγ?03ٳû,a+xYKD: e;w< wI5ZkGS@-Dr1ɩ 9A: ^bM Hqpg0Ҁ` Gv Ib P n ?#2g/ ^% )p pUcFҊo={j<㜱a)̪ jኟ.Yş_1'HJ=VSD{.)l``Ֆ0$Tgm!+C+I0UvKH(i0fl$%u3X0_ʛ]{eOml`fu0/W,zn3=l̞M D's?  '[3S@ ʗY-;)X o//;yxaWZXYh0B+zP7l\k6Ul74ly'HS?ZB.hE?'CLihg P]_Zt~|*Wi{yHkA]tpcO3bh0) Z*/^SoE)`Sگ tUqu>y=S0) 0@@_t,Q9u,Wџ4_VnF̀l|xEџN4Fmo˨9_]  `JAf~0POgS `Jr?DOR *~0 _F)~04Zh3 Jk)4)EҨ( `,3Ҹ]IP 0QAd2\1)/f0qi;]]z\1a3 Ӕ>7tf0qu{dWɳ aފޗNL~$Uػag3 ^]g#k? |֓S?|I '4)3H(kUumO/;S>=-+0rfPoLa=ZE Uٗ$IꪆdS"AƩE?XܨN<.Ivc58E 4NhUCɑ73l8TS{]I#/t H?.ћ_;_1wG. ?Ox?cZ]L:E^>q(} 7A0 w≠:u|9G8iͧ藠G}|OxcxnluQ7XcS/v~p:N|{*a0MSnmj 3MCLEz]t|:|RTSKKm=aS3\]EpPTL ă!>6 5ką3jg"nKo˶YJZDur~ 7._Uͻ&h! w^2!2usKHR{Ǻ)Ǹ=m""9CNp4j/Cn : 0t 2Q3¼wfr9?{E\e\̆ ()\5( qOXgF` ŵ7-kׁѿ!@J ь(eȑxF'~H(i@Ϯ<ۄYy׷g4@Z6`C82OϋOȄmg̍]~SbBO~Ø6ճ? VK sb 9.yo7"vF>3{3/AU[C?dmnW\i`E('ENzSG"ua(śl\P%E8 WiһO~fɡK /O8a7rC0$X s T;2{:GJu:t[#_E m^*ƽԷpg;c=qsVUg!vϺ;z?Yl^Gp8TK*P%`o>-\UHׅM@jW-A!Q.\veX;8B&`z5tXx+'Ywjowo^}(gj (]y'PUyE`tK7J,?Mh'g<'y# 1oy&E K KI4uY]5lΜ0_WүG^@ %D~տ&o>mZ,M@ݯ[oFm|'5@NJ"6B[0H\&W+]7gj.ut'GWH|-}&M@`+Ph!ll6@bh<@0зkM]o`m`cV T"GTEL H8l ss@g02wW ګ5V@K(KJKD:EWTr9zkJM~ `Dj+pjd\!D{ , ǔ~ky=} t]x6LJCjcD'`0QV`co;gEGSD< IDATxk+dׁ/~ծA:{Da$`DV`cg>):xA1B9v[lO~wv0VdF`Uq[U?}T!8xKlJ`I ,!T8@, J& 0|tP-&#!PJ{Jsm0Y9`8mrvVz*9  `JC ·PD;-Mwm@E`' L`j*p^ `/CNCK_`9V`5$]Cc[''`F* *k OGG" ^VYX!P?S Jt $/sq ^AJBp@yK3q9H_1n#nC?魀?c`DV@ʫ@( V@鏷D{{8=m P@BQ;A}un J+-=@, фY8GM'Erҟ$@: *"m`X >`+^!C`3U7mP@0$N[>͌UUd {V@/$i(NG}˶Jv @( L(9ol0J9%@iS9J&:!?ׄ$FV7׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExGIDATxݽ$IZap .qh5 A`U`"UVY!5V졺tMUeO|_sNVedN:|x{ @l I@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@+n~*/IǑc-.G @ H@:lۻF (>^MuN?al0v V7UySql40ZY㑌@81<8^@7kDwy}󿿺o}M`?&x `ht?o (/(fOɱл;~'4 P=7sxsd󭼓 `]Ŵf.ogF@ 妅_` t%uW5pS b.@_{kOu޹<&} -(`jKKc XnLl0? h0>/s2 H. y@٧wdLāU`)ښ`X-jH kE\)&d\ xH]O;;Ѽ> `gWJ (l?M0~V؉: ji\#Ϛd=w fPy6>~k`BXk`S 4$pjstI!PI@\|HgfW@n4 o lP;}O9jE\Lx$xL1cjNMp.'y# |x{7 `&X'm4ZCO 1r_` H՗C; xؠ \U6 `#NP N6P<4'5`O 65o{ xS{d-@0kM @|N'Q$oFp<'LN<L\8P`M{t5N\ȧg=pșQkM2pk0ɔ. p`&_.5~r=5p tw}57<F¯@P4):(w`9pșŬepa$MpM2 pk0)=(ӛtT 7F¯Al7+O~;ٵ}&WFf!`PcFժ4PM9WWSGP}FKc]d$  ^@7M5Tq T U!!%п?+3@92Ϳ4]8B(, P mf(HE * vw.2&$`7  8a>Y'8^"PG@j:7J (^}Mp͆W({H9h%ZI (d+@!:t@hL@fpMT&JhgH:Mb C@cUxhh(LA+@뀩#FP&~]:`3 t%kꀽ] H}&@ @ԗ:ē7%vj Vgp!@X BLM!0&J !@2̫= ݒ("AoZdY@dK$ t4P  u]@ @`X W45sQFKD `w/ |PF9 (+@ L\!]LQ\`r%ZK ȘJ/s$e (,s@>/fzK| |+lPG?įy8z>5 `s:`j y@=MO'P6{a5(ZxTP8|KL@4SG$P CaJ:`+30"a/qQ%bȞ@饟H P?'7:ķ(+0x׉$ᦩ_c $HV@]_:5 x(xa; G ; 耝]D@LH]@N> (E@-C@Ḑ=e\hy` 0zn.!9Pc[nu:\A@lsjJD 6؍B(Gt@[O*FMֺ B@r: δP{j֮: Gw=tʮѭ6:'@6o٧_?PbfJk:. rZ (Vky7}m󜼫HNM+LMfȑW+LM @C*[:Q|5m/T[T@LM;Ҷn1ӑzz[CB;`?yI@v)@V)(R~xLU tю[@d7aLzn<&j pS+L_;ȩ~ç>ȟѺzXY]<̔>+<1m Z@竑:FzZ wn V>;`jSsx>!{k>4POb_R$x(P qnpEgnnZAEup`yZÿ?cGWs ?T0Pcxoc_*o|qo7{ `_.B$胉 (#\sU%vK6HU]f&8 ^xޞE@dIy( \i}ҩ (]2ؖ}?vAg+>r:l`3ex8i c)_i0}Y&'+A!A`  m>^?Wou졜 ANAMPk<Y`OW, P FJx!*q^Wd9JT½wp/1)1sgU*s{v|^DzBO ([>hJ ְ pw|5pp.%0t%Հڐ)U)c1*!@K;H _ m;?~庂ȕ,g%p `wrKJh } ` dm5meP-qHS ;?fgU:8VԀxX+<KvE59!ZB0C&69@cJxY q : 4 4j/P3w\`m+<X9}ir ,p厳Q;b=Ve(=cIu-*!)0PV19?@,r@pL_Gnl+fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By NAd!@7IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/square-tests-expected.png0000644000175000017500000001721411640436733027546 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExYIDATxavʍмwz YPV5e5YPѩE2,KqOlY*5,wo Ye @_= @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PT@  EmwE@k @@QPt&@p PTWѾM}YyC +N 2^ (0]_~髄/oe 0tե. OS_ |kﯶ% VY?(_#_mO|PGX՞0xbOv2,~+ཿ$ VY.p6{i% T@3OO){_S)roK ,~SH_ RN+))~o~մ7KS A DR+J 4~y\g ,~_KKD3ӽi]b/+N=_:^?< 8γr+˔^w_q;[{ O. 0u;o#墅_sD#Q:'H5 ؘ؛~766Rvl _TU'p;:XYحӕ"c+K.* .:ڼ wm=  /7B+Gl&GjR@ 9EM6ƿo[~u=Qwo}.otpk$?m^U@l>&A|% 앑{(H94E_; AxIoD[VAOBIك RIPg:U@::uIo[L~ T Tvx`3Akac 1栊$Xx@t=n3_ z?'pc9ޓ ul\_Z'= gIGt=*_pro($ ;*P@b:ܞz{ΓO ͨX yX޷ oy@@$V_c/ c'At^Qpj+`I`g8!u F,'\ܭ~og@1)IlkͻҼFVvg?eحPvu0[~ SC@ι$~ ޢe{'?TOPM D W+!4MTX$Ɤ/_\S`ͺn}c&6yp 8+BO?o)41pk#>bq23I4HPfkٯ߷;lI=^Q@\q_o%< #ם: KI4G~f6=O/& .6 ӯ]RM,M:-ܯ~pV$: 6d^[G:~YaGݞ}B=]@%n7/{Ű;gVZ@W埽h({jȻ-L9γUsV`M֍K[['I_;:~a{o;^H@:~%vیqюGoά' y[qn7;+ wmyY^Exslo~hMf|SH@|kew֧>d/D h7q'e,ΉAG PΗK=}?-ۃ'.^lWfqbIn`7k?uMyNW 6={iڳ6gsݺ #rgF_ߞa>8!ýR͓@ $ q.c $ qπve> qI#J X7y$m \Q@9{ տUp6S;ow 08d0 ho6Χ{ g3F [Z@>{ Q?|ސI3FM> XM;H 1`=TO cNQc C@4Ocij!F@ 6{^~/Yr, Ϋ~{1*`-bxZJ#O@ ?I |W/ _ _e v-ؽ ɐ$R&D&U ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ P@b:@i Q$ 2MK"@@&iZj%@@t2 LR+@  I@dZ  ( 1EL ӴJ@(dV @LG @ 4- @ PIqsc~n׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxI%Gv_,H8,<%[ QC J[^^؆ygÀov0<2(A-$dsX͡Ydŋy2322232wq*odL;Y!# {3!@`C: `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @ `` @8 `ߨX>B`z#1&zO6qT}D /ݐ|_|{Ɨ9],:#lj{cv~7(4!P(PЭp/9%l_y}AcG7AS73;w@E;H`$e>܋n9؎ׯW#y.'N'<88u~-{oN xE 6ULI {fo=#p9>r}9~IGI $: h2@R1t79yS "|##$A_>6}9C/~/^Ok8G?'tyb E{ @ p]_}N}accccȩ& S-29O *Kzp=ן=ȿ0zv$fG7wTFc%KJ%KJ| @>+N6gHytd@ 0#|MK]藃O/n4'oک}G*!K_R|SрMJ HMiq2pGYr@;1`b4Yq_p=zy@l]4 uhLSS7Yt NOCc)Or+UYq/YI,wwsW2 .Pw7x(2=wV/g㣿dɬj&=Xig<Kj'0:b JG:yY]$%]K*N$=Ԁ?&)u y'Y 90Ul[wt"Y~R}zKxl"yٗuquS*1 5BѷκAF@FT!вC]%+rUwc.gHYd ]d i/RqH 4@Zl H 8G~=KcT0RSM ѫBB@@KBxSKT|䔺#-_Φ`KjY>ɨRu}* P{@z#{@ܷ6CTl⏜KiuOXK ȩ8}Ae ~~ //}OQj %k{ @jHH4 2  y+z)}xz&º=K@в$gj;9cT@ E腋;~@q[FR}G2L=> jɐKG{O1 8&D"̙6kϽxi/]\< y]%E^h@4E*>8%hm_*\jZXεÏ Xl)Rd VX q`/<ewJE`;6{wo\~Z>w27R"xȮSJЀ!! aE}yk;_5|WԮYD4 h`[&o|U>C$=U i$@rbkuck9_Gkk߲w՛]-<l{WL￧zb˖1ʏyl7w ˥M@㫬= ӏnY˧o n YQe2%qW4`S>ֿh>b(pX4ѤܹzU^}&6U>!7qÏVdwN[jZsZyh?33"@~37?ߥdC^p84fW 2 C P'q:Nv=GL ldjjIG`N7A}j'5acWI@LN& XzS_:"m~{7&-u X{[GƊ> ئh@$ݗ$!)QC^@^tFQQ sePu $ c`;?aO.UN_/O \yIVF&xuXk"-i_?dH p x0 i,X5D2{@=[Cݔj$ #yB?Xo=nQO?!ض$`TNP90 7n*0Ag#:WI\ooI@;E)13OwRԱ ; ~&uPIA^Oovd] ;r$@ I AJ>읶*|BP0)Nd<&O:{Eb źcƉ ,5rM0}:^aou$Qw߯:%sOܒS"!M & /#CRvמ:g׊6)G|oI@ u:nVi +m26fTVzƵۿkZfyܫu^5̕9aP^"p͟'X҅mYVe M&$`L6ggJn'2g`T+G2œ*р&HP6E JkV#;.JwC l_'0*ЅO˻|ȔĞXEbY~辪ij2}.R=[4M?E@!U >wXu,Mݝ|ѓݝ(NдU$ &OH@|t iB 1;6@vG˳bd Y6Қ\rSmVpMx2׽k÷}?٨vQ1ch|bʲToYʂqJEf@BNzgVO_b ʟ+/d 5'ۜS_5g`DW9S#h2 :|wWx˓[K@3~iX5 7C x+j\?xIypwKhe N?3/Bb HߣS]ʙ 1ӂX%WNM9 䩖pjFmʌݢ\굆0 6+oT#~>67J²JЕ, Jk[HBɄRD^Qdq]6@_# Z>ђS ͯT' tnnz̉wo. ϽhBw6}%!)xg^{#V5P.V}"%VO lSH<-ib+[[ >pImB t#bo#`P!n%,Ge6#g^N-=z6щh ( LGuBKW-(z w1Pv4`c-}Sz}+?E4פ)uZӋ4f5 4})P{)NOyJ5`M;)(39#OiH6K0Ki&~< ?^z ``Inr'fRB??ǩ@"뮆[YѲL_܅,e-ϒ=>uLT7fOH_R~"PƇ#p$(`ƭR@ ^HC/Hlbh&?kpf6ls5 "I=6H\%gCJN!=`u8F@)ҏ2 b_I;AK藷K'и͸t,_d@lJe;A?aPG@$v;35w'6ml`ͦb[V ,2\d-CAF뫊п>XY)/(:*VX#ߖ6N%x (=wm% o+V" kIJ` ȺuAl{>ccwC(n%pR@ٿ.Q .X33AF*|HT?'+/七b3H?ombܙ",<KqA/ Dާ$ؠ=<ߟp Ҋ{8~f2F%PFm-聘!XPI E> MdO?~ ߵI_vj4@jYBt&O. eyƯ~ %IDATwրv/|^|ǫ!0Png3F-@0/,~&E X;2 X}u/\р+ta?;_k@?^ 3>3M XZ4?MhgԽ wt# ';q]omxR<O~v#YX1HYf;qX8S 9HݟD}O-?bF;["8AL_RK2@} 4!=h-23EGl@ h'0$ 3Xo NLt.NSFy뤶b 0(59:&_j_BP&9!~;*历N Hvj u[Hqt^$h3Ƕ؄?uT2` s1AܟziK:nq-@2{դ+i" yVуߧ@K_vu@:L 9zbQH&82U{O0r8ǮLV.;ld|t3;;IKdN۾8%_7}d~^3syn-?ܦ {>n`6ٹ  b`8zF˅6*B=Bε=ַ#Gvv[e#Ԁ˭96Mm/y?m/} wn@{O녇6|k5bKx#㱝f܎ v+i⤍/pQ7qf!@ςJ2W~erԗ/%]Cğâ<؅D길n/ PUm6apa~YXCk\# jIX0emӿDy.[E&G>qn3i4N bŁ0r\|Qva=y r*ʵl'%'dhk _N 2F|ێL@] "VD@BùK+ro)@#̀4`Jp50FqzZ$},|Vhnmža{:,, ppgN8"7tEt_Y!Ǔ\wNXX'p(S}2@J4gE nAzbşo^UMX{Zw;W${ATg }+g ) %Syrw2l/Tl,&K-['nQB`N k@ץ ǎnVw_ZMmdI6 85ȏ Ha!Q5dθD1_g_??Mf008E.ttibAen$d9Pg% DNd@8 /XW5XHX-c^Q,ș◃w-$ೈxY^CBQpBhémcGlZܧkbmyϮO/MvpP`RqDu!Vb9,r/I= b 1p$ 0|+8]9C:oeD/K K@KTI[_~W=  0HFg`e9f_Inx3&{ ! `=eTߨnni_mCax'?z#pݿ;(4 AHK;Sw0|gՑb ?S5Se 2_ao0cOtQk+0._[Ti9HX$nOr0GvwV!P#P E{y%l T$C> s00L20SIfWÇj{rk'R$d" Hi!&" jS{ӅlާMџ͎90A:z\wWc~>zd=rnP2뿴su`O܏^3` ه@L\%0 V*M! J ʴ $ @ϛ?nBHp0RP\yݟ\%2 3 3PI@ .]S_i3E|~Y":@`[ L*L)+u2 e^5x܄9f-8_aNH()t)ZKO.j?C??'#z؏@ 4 F>(Ps~[pџp``@@!+PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH ``@@!(PH `]+_ЉIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/lwpolyline-closed-expected.png0000644000175000017500000001450311642654340030547 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxfQH&kj q 1AeT%s_tQ@ 7  @M@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc @@D@4xc |Û(|S>|P ؈(-J^3On0>!P;y7d0XyLi=7 ;EL@k\7r (;>b#|!n~8>~f70@Kv_a +oM)PE6_/72 tG@=~7{O/@wJ (MyD7sjH -ow * 楗Rn'#0%W_ŝp `HxAnOuh (2oj!pưϘ.v'=n;-y}k}䡺|/P/4n{j:$k7f\&sMn@@ `'P?@.@P@ANK7?.[J7ؼ(' ?! ]@Dꦿ 2xJ orPq߀%L'~ٵ{^~+N,QU$@4p? {Jx8{rm Eg,7=618Y Mj@#@ %0[Ӱ'@;<Ǻ< ,Y=xX Ez 4Ɨ8u\U֜p[ \( d (/ ^ VK+D+oj B P%p5P[| p?pkjV1'@`fO?~ N)~ o pQL-6ħ6 y  (͑T^H Ƙ`^N h]lDPg0/^j`Xؙew"<" /]= ,_3:/i`9NCS<ͺz 47 Sc-|F g:6 (7] l@^/^e^%<lPvz ax\@ ` )F (y"SdJ L!L"X>V?v+?r%S6 x5VO˕3r! `_i`VK~ O3 "aIs\YU@${a 8?=pj'3Y.O˩V^B$v3hpO܍z"p0E P{(:&P6%aqa (k*xD{ P@;u*5۰s (9s,IΤH6ɫP:]K5K"/ **iY $wE@ X (C|PրA x}'ށanP:j`wR$pM{#,5|~W~Ѹx8Kgc4'Ϝ5gs" v'Q4i@iFD/'^{_-z 40tR.n0CJxKw (ؼi50B af0sz}Pր ^9J@ D@L"(y  ૄF@ &J׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExgIDATxMmYs zKBTCЪTI34TRTAgX:HHT,QfmK\;Yw}^{WZzߵ9\q @@=ꕬb) ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@QP&@ PT@m  ElkE@+ @@Q{֭lk;J;^RK7n\/R2 O{\xLD_f[]` H8Hk\K`MCYt$zI$jXߡ/:pXrw̭@M7gQ/ Ed f<%0WwU$tLڅJ ;/:pF}Ik6a%9@}Kk 'X@?/G'`'0l- v=b{|`:'&SFw$5<{wz h#.NQ}7 #VCa#G,A`M_`؞ ׾R"a4( `{`ؾߖ/Z aN{ 8e  @7_z hБn@n=AȾ(Z J8ַ|a8z $sXΦb0t,Έ?߻9%koq/@孑@8o o[{4z׿V?S7`p!2KY4o08:.?ˁzoBgk?1oُ'++meG2#8o.~Nkm-ئK<:׾?o%kXkgc8ƍ" ,t[{{iBeߏ2, ӭD tN[ZE)bW?8u}ZFv3k?rU`q!}PkasI0qy?p ^! ri9b?\e-`-6 +-GIpca Hyپ q}W2o7>IpR{}~[>_% :tU/ МCG~ۣyoX_\ti4mgrŗ},O8p?gή?2FaaЌ?F`ՏI$ޏ^xZ[o^o_}eɃ%dX L &@v?ݜW3pӖ3 CQ?ځ' SXm\h/} @%0+w8tO@ePj'@(~ PY@T $ H5Igkd,Z@,=&G ^[c.A% xU @s S cHX> n CO| H k/,UNC"[?M4ή?z c5[]SjI.MrЋC9L+8zH( ,`?oV7> }p`'9>>ZS+PNw>GMۄ)`_f_Y Ŷ/` 2U \zz.?ucF gP} 0: Wɀq{=5$xm{[\m?5|lXy`Shyp/P`;NVXS72sOG7& s`ğxy5~s5T ~^&@jjZY@O{W F) "@`tb @22bV]@NXXf_̊ (щ{]'n @ \@p{>y ݋>~#?[R"0CGNes41pF@F0]Nw&*v@|I@_Wk&EOFZw}g=k}~lnj=WwVq}Ɗ!h2v 1>{791% $gwj%̀r angKϗ[W=!L#`ƹU@v/ߩp̷.?usc~}/|;;k/T myP L1H'e}h.0 NQֿ."ۗmF̛Bnzƾ?I- 2iKI1K[-dž Tv M8!2 G 9dD}/?}c&7td 4WtCnD`i~_j]\`Q~ӘڳhcooƾGzo䙝0),nܸ>˅ǾM% Svwl|1/9/0v2^`mko}>6/>6eR{pL|c/a'+ ~}$V&X|.T\%`?d?xhp ?dϵ5ee.-wooMÿ]O]iY`ݿm1}۪= @`Y'l~}یXξ]]N`$I|xQ~S΅[a R` JK0e_.:cKIM͔7snjZ@Ӑw۳Xb XalXj~z༉gI O~L?c~2H&VfTՊ%@jR l({] Xl,}i߷-zG<;%;UڲW+p?[% P.6M]_ +Ub2@#wz  z-0Xٚ0ֿY@ R } hgf%ۺG ]ȥŀC&@ H?7 ـػf41`?/ 0@mD"~H1~Zt[=rm8@Fѵo l_߃ơ$P S@ !!@`L0\ëG/r d.De el 0څ ,~ & ˅ &n,{I1$w2ٻ2f8ٻ2f7k6LW;;;〮+;rOS$ );B=z,T`]d| pĴl 8nZv HXZ^-O^{a#@ J|K;Bס3Xol1@i В׈}17c=3 S@l7@b5s&%P&0?`ڷsW<;@S[[+W峀2D)?Ⱦ?li8@wmcW}+`o  ɺ+`߿p{U ϯo ! pƀ p8'> ¾y @k9 ^o?@ %[~gHpڬ#:&G 0\@Vߧ%%@`@vCB>?!N$@`;h| 4͓H)`^wlCG@8 qw;q<{ G a , A G,wey @@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@442Q XO @ H*%@@~ϥIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example017-expected.png0000644000175000017500000002453611664234176027001 0ustar chrysnchrysnPNG  IHDR{C IDATx[%}'p</d줓pIcc&3Rlif)P iY-"׉2ySwQL O_m#{DF]$2\Îa4D58E*QrLYq/Ȯݓ},-}ځ ~|1/7\I9{1rYcBLZC@y7_pR_ξ 'NߐpzOM^~9@c7C6M^W}G_p+ };{m' WH#uy۾3Ґzk ;.j uЋ(9f6ZRמۿ!vM@FPxȀ+?>Zq t$#Ny`{Q p쮾Jbh7@_P\@ɾ_2  ^bf q|l=@4j .P+>/?|`q|O-$s'D{b=o?fzV^*U(9fRv2`= 2, ?\m/(&Mv+1 cc9^3:<_r qqZuPoq~ ۪ju(lll6FBί6$Dse]pPqUu{uZtnQror^G=vCpbAK?ຟ@0syӽ}wGԇԺ_޷g(|[E֟xϜ'<~VypЫ57է/)UZ}h kC@xm[My/1;r>o_ofodPV\EJ%T1bVaE[.8yxW#߶/nY`K T+n;x$z3_:3m=n;| k?hmih`>ßb9}a1A{.;?W>`yK~Ke^YYGs u9m2:Ǥ=2'K->W$^_@a*.;_ܜ˫o##(bCIp{|tQ\u[o-qrZ/x:(Syn zebPZR1S˪a?_U0aQ7* v7!:̇mzeͻ;|.ϗXŲȡ 0% ɩThA8w>6G@}y_H%&*К :[麠ek _MΟ-O欧.d3-9t r>,-Pҧ9h`K]?<8( Fz .O;o?MQ$D@$aϦѣM}O.V3s% S7G1Ts͢n?Q~=6)oalj=% rHiz7^7:OYO尿P}XzϬH"jVon v_ZŽ߱Q,:T=I$˷B hC:z5_< #sAF ^+wRLÿ[WfXM/@5Z+/͖泭aST\}M׽ίg$ZW ;CO>~OK]>4!}sk[fqEDeu:N_/Z~#;Sxb=XL+ߣ0f'! 0h]@WpCvзp_Ow׽5$][` k_f TЭd9*rb}IvSN~=YtcZ%8*d@hU $``HEKO}#<{Y\yY0In`psL dW?C9p8Î٥7}k'QɽWTGX؊gOq{t֙/[O!r`Nͭ"?YsgwXe@wY}x_c_u1@L%ڊ/kݯukS m3; 'K|;d$I {G1觩X{I@¾۟сuk!\)}<+8/J̥?th?1&7 G_}/4Vglrʀ_tjȀg^Mɵ. WE`Ws ZOJM/ເQ??,Mːu4};aw|P5p0>.';s65"ӝt<|O\o9>4wVE^eQ `~ĩ;cۧ /yWhzb`Z&h;#j\C_}SO΀Yos;?Ӈ_n\dU *t ve]  Y'&ʀ h@4m \mm Z?j9m_71=O8Πd@VHVmC!sȀٖ皏-Jm 4vE3Ca0dO۷~7)gw6o/2Jg;?;Q:d9gΟCqZVl i_ `9ln.;[]F94.1WCZ5'ݶc~DNMH9W߽H쩙7orSm/e `,QЁ6Ep~O41<}Izh u~“ݨ>Rt;^z-oUs/fOn7T u)0KfҎ&jR✳v?{?E2`ՕK?]}LOʀ`M1l7a?]v|?v=woG76lxGoe@̛عYYϖ/9[sճov\x{bD[gY&oзg'P,,}&͛eȹ::\9_;q ~WKyWy7`e _#UfCZ!ۋ;pj_D6\:W/,r9s~ :!5L{-Vs. z`הzK{hxɗ7pF@Xc=^ݥ  XvJ@W<F7m(`E/Zȃ˙ǐJTy ;q|&a(a x hX-za"ω=szg.Q}@Od}ullDFsH/! 6m_a7ɏC**QجYYϬ-ʱ΄ޑ۪W&jWx~և^L{(`^*p9XVQM~U V ? 6vU/+H>g.FF]$xkvWB,o_w?5EOzml&7U2jo!#GߐRf6d5_b9d#OmJ2K4Ia@3a{( tP'޺Nxö>^;qMw =<|m=\tc֨j`ױjOV?+}d{+нB}?1X+n$JVo Àzufm] ΰ Їj5- ٗ&V~ 7=zMPݓ!zҺ[h;Ѩ]@&};ZG0:-kwvNO띏I- uof[?ִG* FNK-a7#кv@  <1 ]݋n'֬AGFUK%:KZOIٴhjDܮ2Ub 8te9MGmϧ Q-f@2 Afߚ!7\hnY7w 9e2`@cjyнw9ou/w$yF+|h[563K'H22VտۡFW: G[̀phn&aн]Õk>6|3ɫ)hJ̀V/jN/ճuX\@*v;c`m }/důk6k_siZ̀'OL3ӫ+TJcu/Չ!h#N B:L_* 99G 3Ͻc752~ݓE_s!r X&3>{[B*5~'Eb=nu`鯡h{]IYP=61$H~nGXkAlAiCy9o!Ӫun5,π65b:ͿD?O 钽L }<\pݯK-3 0ux$8ͫĂ IDAT ,S.UQ1{nk f7ͅ[7:hOI0u?xz;lF\>6- ]ٝyMAkտ[.8)#VG[>%Z=@uw>]:2K=VS  1UsX1^4X6 мN;Pmi=+q|OߐE[v6c堥wsM8Ss/qugdO s8U PA<?:n]z̾+nGQB\Zw:7ZygX^PX)G9rjH`~'yʾ`gz j/XE{MDƐ 9't[GN-BgEy?-j =h2eC /9fzuwmgO XMYY@L! ھ'<Nc9+r^^F@,e.rekg6,ເ6 r , zsΌ]@\}x@_uݥZoHu=vVp"r8+6ۥ;f]-H®Qؕ z@)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ At)@ um @ bIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/highlight-modifier-expected.png0000644000175000017500000003022412076022157030640 0ustar chrysnchrysnPNG  IHDR{C0[IDATxkGyɉǎ;88$ RA*QAU#V*ZC4B~Z-m-P4Bj L\L.sNlǷ9̙;;3;;ѫdߝٙy~ew SX @ B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u@P@l@}@B B :! @@ u2 Ll 48z*/rl<**ȎTWB #O~c7 Ŋ}_EŅBكkaBt#i3͘0 hԣ#4ײ[6Gjk꤈+c8b4/C~JE7,|)~Ea޿U~pXh2 |m ѻh/ y` "-,Y`(|7˓"W5@4j,a3o@ tɕDQڇJyՕ<ʮM3gT Ah*""ݮ-V~os7_wށ {*_~QyM$J e|[1xyP~_8zт$chEz9̙ťz_@o Hu+g|4@\b2EQ*Z3<>]FQQTՕ'nru[-Τvlvdظy_k[zR8q|麫 Kph@yigoh%O'Ǐ&Ϡ?p,S,+7~_ I#N"9xhCҋ?F8)4l# 0^(NД@Rb__U}vб|m+ \[S:< yjG7\_{şn2rL4I@nfPCe ;oXl))dm LlS?ACՠRM߀)%/䩥Gm&N]"0B_ۣmy96 ;Xa$$|΍vcrY@YT 10 ӧ[gQ hMן'>VG̍'+mS?jPxF1' Ǚ8re^]* L$ i75h"y_7zx &N xO~zO iZ_] ZV5e_|Ry&8&!:l_]oxy߇^kOjNGH)$e7'4@~2 -p'Uz_ϣa}Mp@ hZen; c$@H޹mnZ5H7>!Hn!?ݥJXa#WE.&Ȇ$Q)77X5}bJ까I ԑI@B[Snb*h[oؠ> aOTE1 P(R?G`c[a/x "LK2c0B@~KmYę^YDgdI`m*Oi#OE|z[ɀOr&%LuIx'.ylx}m]9[nT3wիO!JW!|KF8)o}Z~p800?[D@D6eǕ"9紻G66{i< 8NmW\:Z{@G4*v8/3/b_ Zũ <$_oQZmĶ[DZ-? 5, ,1J3jrhR)Ƌ)Nئ~S׀ΆsaãѶ5@~ zӱ*EֲLOڳY4/45U7`;R YE@mE@D/AZ !y#Dg OPidCS]gk2`acoX `F֋>& CV V9Y*7tXBPo'E܏m4??áJ3ZqyX$ >}OX2DD)Gګ@{Я*)^ᙩ BZ~_T@pwX'MW=h]"ΧHПzy~i饞Epy7~SunXW%v`WA<} ƉK@ŇuF wqus Fq84~ŀ2 J+A|%!?2ZЯMD9J ıQ 4DB ~Ř2 Qbp9~y@PG:т-+zOpgsW#ފ#쇻rYblJ0?K(!{K_ C9E*At2B(, =ݾmWc{1@J2 l{%(+z Nv^27qb}4oY` D+@Up?^ R5utQ߿xY0=DZI9rօ* 6-.Ut Oy1`Ѱ!Ŋ=k'ٔ/w> ,4< \d#gb0ؽ!iO}j@+ ΊطFk@ y]HQ]] ԅ\} շԩ03 I5OŶIȀ`t_4IT8W_6i[BOPfKE@(ر3U N3 LʀhP}?:A2}N ǰ?! xh9"~e5En]DPd?Ǔ)'x El5?5#]NL-@)HksCq?ɮ0b/htD9Tߙ~DϺqJ\~3g5yN`rm@~_e\~ǧ>~>=YeOL7q?8\ N? :l)|$C`@пr5Oh4BFL@yɃ,Ȉ?|eW3T)@n ?(~cߠSxp@pX-@ czv mh'103 bo6&޾A'{H@cuΘRxPQ[ΝF' ^sBU"|m"YՀü62*wmvwn N~!0 2m>'@ Z:[^=jӧFʂ@⌬q}oX5/Z52x5'p_"5Wg%@BʭoUҍؿ$3@r.+iOdɓwegډ4|tmtKR1;==e~T"øcƀKݺ$X)=3<0Kz@ :G T@4#4$02d*_ p+;20Ϧ)˿ _"b[घDdk2kK?O&~ ہ?:5׿uȸO>GRe`z̜4?Yr($*@T6 XM_7̝`}qM/H7'1J& M8tB}{o\C@c1g\$3@~e*&!7458CNN(!6@ln`26z>yB#7dS@H۬p2<_9Ɉgzdm<%ѥr!'^Z-Q| sGm Na'00L; =8U{Չ3kL3{H,LV!&*Is4qߎ$1 ~Y1Uf\!OIjgԗE2}ģ$vUWvO{53& 4zt _|(yt :E@, :OB: z9Wר?_1)(ךu *x<+aHi?ܷ=h/%?Ί82| 5 5gנgq*R2OC([@ ;h² `x8ʖş r"die3@dY{U xm<ڣD&D%GJr}eBPD} }DSCMdJ;񚽍'#aOxmF}oaE"(86dׅyΔ<-@~: :drk 8[x"X;*?R97{w%b\6XSeTJ =:ðϳT Ov;KE Q93 ,Gf` lc;4RD.BğIT,?օ6|4QJOI6E@ER,EvOr+q_Пcn0K@1{'UTR!/QzuAD $ '@.?K@.Ch?ߞZM&}0Yױp܇Ї׮%pw A숁BrMݕsџпJ旖^ Qe@@#P yps+8ģ24T7`2$ $MʚSˀ|cSkߦD0(޲ 7ʀS*t1PI=|X*e 㾩50^jZ:%^{@#K?vF:@v +K{|o c'&FF&^~O1г(.2&ٟ~-tt}I3 ϾPHdxCsۊ+?}K iDFMU>?] Ftx?wu.@ ԀΫ@aٍCts'PĤ{pT0|wVӂǗh^&ۦUI}ɇL@ޡmeٚ0t]~\F Fp2r@y*oR}}2+oGDj}D xCq/$'%$8 @/_ؗCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L :  .BCȔc1 "D: L ?5UyJIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/circle-tests-expected.png0000644000175000017500000002036311641442560027502 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx݋཮r48 Ajzt.W]i絻_GQd @` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m  @%YZ;L7S_ UZ/7H_¤ŒR ۔jh{o.sظ|{/Os_fY<٧oɦ>TX 6%C7Ra8/BP/8T@kla^Ja:z`w/h3 ^_¦uo@ |U3ĦAWN.;m4U "bnW6{k,5r&M}o!/x zwR ނ 5~X@c ɿ]V ߃2+eZ=-?hh-%u4 1J'C$m쳲d~'{6e?b;M?ujዱL S7k/|W-w /Sy!:@DкzݿvY,=\pJW fF@̠ytS%k6v?I,c_G C;=.@m{cї?>*@k?]4uYHKe K9F@1[! ӯQ/,R0kx~ȀI3< 'vǷ>: o5|^MWz}v?gݞcFw}gSxt,LT;ҥjHfƙlzwseL0Vj.P#gf6q`k%=F:wj!:A6_;\p^&/rͅ\`C2pΖ;NqdÉ[]2tfُ 2Gpu#5 of5 ffG[[}z FcZ5V^u<8:Oz&<]?pν:~t)t-n*/hu[􉄩S#7l{VhN˗s<~~Zӗh[[l +Agg7,i;;.o'/^ ?oNٙ7gm3|tPZks3N[)GLg`_db>~]ny.u|6hpnXyi_.?.vŎ<|̫'|ss'=\%w.q)Z {&wĻ7u◹>sx|rw^y?~q}q5W0=ym43>} 0#7&ע۳~ (_Y,-\yflgP6{j;z1 6W?/.;Io/ 1pg O:ʝ (fr_~w]ه7Q[F<ퟟǃ~?;{1=iӨК2\|/ٛ"ơ;>3w >w~-SMy_^/Y 5v^nGe:"fGb'o}Ѽ[ZI{o{Bc/u~M^yZStײfXݏ^oFwæ<~]-VzM;fPG`v"~r£yt=P=kf znmJwWo~[nuaEzZO%F:f^xج~W*`jo5ߢvxw0̂C6 㫵ihh- .aO9~6lɀ ˟A :p.M#_Z?(7 6bU^H񍠗5E3;ffNW4.׷M'g|V=M~ީkk~~fנ:EWKK+@f+5y3ɶ~J_/Hkkؕ&[>^vh͸Ipϋ[NIM׸zo㕆яp} 6j~ 6X#z9!·Yk/ %|(pcEm UVٹ'~f] P2t~}^XKגtw_w[Eބ7;}0xFzԝq,LY)O$ Vtgn@ yk5%0W:#8w w >\K4/?^kK؁:h% ?ݗS м@P@@g CĀo5k(:GY>ˀ 鼱]0Q!\ w m6zO8^oX@{="" vavC|p# 镕 @`U*&:b=- a-Q@R"vA@%k$ x{8 / _bN(l(O軘_?`5/_ K E %ڬK Հouփ@15 zfvu:,ڎ[aܿX+'X \3iodrH*8.w[H`TZ`u|COzƒ-ݯ@*;3.+ w>͆k>ZxtG^ܵ (}[zD Eю^XI$o'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rI@*'@@R"@@$ "!  T@$m  Hq$I,D rIطJ͌KIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example004-expected.png0000644000175000017500000003346011664232323026761 0ustar chrysnchrysnPNG  IHDR{C IDATx fy׿e׻z6P $mr*Rp "D(PPX(jBB[%-6 DMJ-)&dmoevo9̙9[93~…Ƕ@ߔ1 l@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%tx @` @Щ6 5@S@g N :iC@X:%pYfڽeǿcy# [ٔ{E0~&܄F1 sx^/^`"PCW8GPT[ | bߘy y@?~8w· ɑ6|u6IoJ"P Пz ~qеWW6j8'>ߌ_" ɑv!Е'*eu7'JWN| ^oU5/~,G~wV=Dz9(Gv_y}~^~'Lc9oݸu6xZwe`]Ls79feD1RW$LO?R7XŰZ_ӷΝu!{@L?(LĠS0q/~_:YBtk*#{3&Ы ~u䅣0x @ބ;(ʂ! f*rs@.KTpopClE*g$@4jD*_N%AA坴^ȍUQ? #I= 3O - PP@B(oD}y'9/ļcD sID5GiUzI Dm0D2B. A_ݯ* _ {$@?C@,Q~hO7;#qE|퉉@L$@SDϜ~i20dupUC*B5G={tkq8vk#.a!XDœ*%&" l3oxB~qU>A1H (,`7A#@c/ڠT dY~qE'lL3ɂ FHD+w P|'FOaCξQ|XϿ_ `MowydaO  X_ &uWSܗ~odz֜}AoUnY3F<ʅ l{ ɞ:|0 8|tЀ}{M #~a0\G`1p;F?Y»K9r2Du^:! Nx `nμ# 1㋧@-j@ @#[@f%!R?*HXv t<+m$@0j_xE UЀ?,#XC/Yf`V*oA _d.vp+ C* #XNmVzi0Vd狫+p/j"o 0r`&!K @<Ы5ֈ&( d}Lz`O 4-@IW.\=01 ca؝? Q}F|`Y%ƥ`ӊ+C0Ri@*FO}>a_*V } `Y%`ucz`5vdډtߑ)&D5y3\0Wzд;M= )PE~dnPs#Z6}C~` +pS ?3Ч3Z1 zÚCYDT"x#{r$  /"˒$СEr3򀀮kzy@U@pF b DCS!B`?3nUOE8F`q= "76|ĝ: tU ġO{/g= rG tFQxkqp`@&L;7D:%!ԦUxX) C>d@b@PmFz 47q,Lq8`Ds[Ӯ(n( w}~S^b~昼6d~_=u/}1fRi 6^᭻%lAlhlﺦSlDO@cI2p"m ںK0 p#qBaE ~h$%NϵD}$: [[K 2 7LK ؝nU;LX@ug/%>YB( 'FP@%g>S_D*g2*~C˧i\]Rؗڍ?t# Ǜѿ> Rƺm~9~`]~h6@^g4% 4 X7dZ4@z?}ezDp.2J[$@ѿ f M!u4`$ py_MT@h(ch(@0jǍBtjd/4…7 # "Mo 5xنE5_e4@1, w蟦 {@N3iћ* : FȍU$۝k:u/I$ܥbwyk;&ʩsL`_$ Nr X==N/t![[K[m[ƪZeMhW=Izv%stK^wWK%Q6qcˮ)25*aݖ?J$`M Pu.i  croG# P(('71Ipg[ß]D_ώo'OENP/ $K@TWH}. f JlIګfȥP֙!~mu[֡A0pM F8_H) 1h rXw3j@"$ 2CwA<|:~zOx YI&J;B6$)SPq8]&O!Co7<50]r3Ë$`5Ў36kaV۰2Kg @("sT6<jye{# p%S l:6pX/+""I?sx 0Gh9«  wg%kr KLG [76:H@ Q%z׌ڒ`] D+p8ڨ. 4AAQ- l'p;#G{N i\,HQ0OY/%{>,tSs+JZF={Tܥkk->ѝ}>;A I[G3J t4*JmjSɑI#(ykYl "?(q?f p| `gOuK7Ff$ =Hw%~i ˈ. h@`uYod @Oq5/jC-iS;N>'o?׵'D`W"]ɮ]Z6B4Nj U@pFl r@r_4(WBI$`WAA>!A.!T 1@@j@j@;FkfrS PĪfr@rҥo@@*v '3k&l<[!=`]> @V5OS ּ,W17Í|,B@wI~j/:fOZ}@.!uןcU0KJ//UL@Ԓd/Pt>gDuC|:.rwG||3VIX[&@~`5 iP@4 @ cc)O .j0Y@0F{@{@p4C8yo#$@, ;x J0?|DtP)I@iDF#@z`w;ǟq7OM>8I Գ|OzyFT7 &kXD | `IOSeۡ؋*k7m_]y`IP$,D A5O~ @@/рpvc-WǦŽXj/;&A ?~!=Ӡ, ^ h@0a  3| HV[>4dbXL>OI&1>m(1{4pi2 /U|}Mט-xm$GDHte߷++BT[XX~Xoyy@F$B\}B}_%?z O~߱^s;G/ս25d-=O>F%B,ۯVw ?IKscK]ghgyx;:!#^xv[Of¹t[sSDտΖ](,/ҏx@ p4dAvvzͯ .V3(ҕoRD_ݜ<&$4E}If$C\"ΧTuGVy=@5ӆ~Fh8oҗKl _5h@hz@Q=zU>bBoK9¥WFti$E菏=ЩC;?lK,~AFb9}? Ȓful˳Pdg_r!c}~5X{۽˯{翺CUZ3c㿖iЀ~d@|1ǀG!Xr_un `YXЯ>z ?^.!wH5^ Qj =7Glo.o@#oӦ器f!{R_w PX,Rhc_t㣾:d`WB¬4ZG2zB VI_/Zte`4ɩiO#Q|HhZoN0ho@Am H%0W~9f-w  )'v{sA?pgBt&RCـ={#T`}s,?p_ӁCj&BрԧXˀ=LEq&KiheO6Sp#)Ll(4@ޭM T׍~y} ((8pφ~iȧ_S@j2Fo;/Ԁ#;rY%IB`T I_f'CL;' _f$@7 C-8 H{@r(?>/Sv _Y+ H@@zIT'P,!p6bقŒw蛔1=+\ .=Pg0E& ! yBp;أz9H|48 Ӓ}^i7ݱ] ?"Z=ṕ8(o_vh׀ԨHZA$WN5S{<̣S DP\9X;?<~S*cQL}=낕=}X}G^8 h{v~7la {isiƂ@XTU079wz\rn- 0/E䆗 Ӏ 7U!UP8 rSCG/ W߷` EaHZ D?|߷S;'4+Om)'$$vWmӀ$@ T_GRg W|9* oZSџZ# `yX5LT⾰-𒁰@sOExJ`!0%b<" Q6FlTv\w*OEhIȀTaŃ{Z2p?'C?_Q A3AuAXO{K#7w?_mxl "ߝUښ| S O?P_.CA.? C5 K}TKY ɚ@YSUKOok.M^#HAwEagAAMFCp {\9#VkŊo|40/,|}[t@]i߱^{Alu@&&?"LLH@ɀwHG/R i~ęOPjrk954߽='N@!$@g%5u0B j@%&`m@ L|$8\w#Γ[[Jd S7س7,u#6h#>(Qmݴ2 G`n-PԃiѿL?R@/g?9/Lͱ/ jqk$ ճo}p"s{o;5>WpŗDτ~wS5Sn1/@(y|a Ӏq# MSEwrd(zm VF\B`P|hÛ 4oud&k@7*f,= ޕyih2m) k9k'Dx-4KQ/>IS/|}fdԹ DjC@|;t_9h J7 O&^+c!E 0= &jTI@+D~ Ż uj{LY1F)TİZ/[818~0q 2/lkTdH$'A,:p$0|ZI@Ic.p#?١(8좐7j=pWҔ#/&@`}HrⳞÏ{;y\f/ v>Oh^C7BvY)oS rlϾ^/\[y@~xM b4;~sbT#[\ 7wK:l!.@P;F^@*,k=#͟ ( J{OoI衿{G,"kAR^`) ?%艾8zp%5Y/s*L۬=O$5`6f$3l9 X0 `؉<ʳ'pω.}W_̙쟸I\PE@[CЌ5"7E_bhyHeya3>/kiKev)U0-#ٲ /,Ur+aT' L@#$Ԭv* @ @.;D\ږjU*& ҶTRX,<'JܤD5c3p [=y;`l5݄ iO*mwpdC&!S$ZYM29g:>ZVϺ̋ z ׷3#"Z}2ջaVV2M Z ΥS"O>@N24uChЮ@ !KhwX@ %;, EGc@@C"D1 v !D@@v} Qh @]@r@Q(|4 .]a9 (@>ChЮ@ !KhwX@ %;, EGc@@C"D1 v !D@@v} Qh @]@r@Q(|4 .]a9 (@>ChЮ@ !KhwX@ %;, EGc@@C"D1 v !D@@v} Qh @]i(QNU8IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-riser-expected.png0000644000175000017500000001617611642654340027723 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExKIDATxkzVTLԣ1e4P Z.! zO0\$oi? ! (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ Tй>'#@jۅ;Օ/i+_ pW@?{_ 7~rA'iyn| 0PN쟗0޵O/-[` =6)^%^%8MP@j `5j'h P[;F ޙ`1U*NRu++ |O@|ϻ'&ޑPkI;Mկ[|z2o$M P0݃C ޹gݗWtG<PU|G`&׏pՏ'w޷ (:k54(;8^:`zs_O?` F `#x]GM!.--(7=,9MzV@<+}l}~ky}\ءn (6^-p 7|ҧ& Nlo+pYõ?o~_<|SF_%^%8X w|&y==?'J<ʦ "*JD <?g:=|&xһe 8]չ>g~^ (' no-N&u<+x&8ݎ׹_]& K" lM[hasg@MFYW@l.k`u' +YX3AXN,!&xT-Ι# r> # h#@ͷ7MDGom4  &>+ 4xcQ +o~׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx_5] x^h.-9 @ԪBUQDABzU/B^k"/z#ś"(T\RE҈ƞĀ@#礧Oדy<5kͬ+̞=?̚={^z @<@`J^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@`A6  *@ @@Pᅍ09% /l@@ (Txa# @ A 0 `rJ^  @P F@q 3zD?z=] \Wr,KO#1,3[x@;Z~Ҫ/`/UEp)f3`3 9@ݒqoJ=2U naJsȁmS/& 83"LP'8@=CؽXL &\E A^2 BW R@A|ח< KGo|>u={LPq_&2Ћ\!x_Х\в)3;׈9gBA9 P!/o Ѯ604s&3Xz_~IJjZ]P1\TRH*,*G4R:UBaQ.(  `hg?(+{_2H{i(\d5b2`#?٬TF Pƭӳ)zȔƖi$8hhAu6V<!ƺ$Nc>ʍ$NZSh 1ݽ~O{ҐXU_$O~yrj6v*חr,hXC<5"7k@.o5SWOl)*NЍY+k&36J'8k]XYւ*gɝQFZח8x 9[.ظ4â?tNuX&aTFMo0i>菃)C a§aF|ѕ@f\=˒a4ȃHeX ? eٜf'|`ΧvtFE?UPYQ ۤA|veE:wh0-,?hbzrٴOtnzx._OٞZf·eE?>'128 8%an.1 @jy3T6S3?hߜkȏQVFq WQr#ǻrdpV|\oe\O~a\7 ^پ2*E?k p#{RQUDGXUc8vu%fy39CR'INNШgbN! b#-'yW̗u= 3Il'y6zu"Zp@_yݯǿZpSR˭$ #x4`Jvy1`=#!l#PWl-]`v6N[HO@_1?;.v/d7ʖ Zu@E@' ssj9ro(~׾?7~iVyg'Hʙdx2?> 9g‰( `-P_ /l^{yWn?ØWZ9 "ejtz/ԊS^?#LE?YW־Z8rq=HOsڤޯ;ib;,-D[u jB ȥ\'hWcH_&G3m=0Pd^и HΎNY4hZP]f'+G3KïF07;g_{eH᯴u@S3ȍors#x3_k H+:A~i7!k)6%A.%c/R%UuE?eo:NPi k a 8-zvu@11'М;c@.9տC=FvDgU4q6+ꟛQ@6NPFxoK|ˈU6>= >F=BDXlV'0-}+_k-8 =}$9A6h_cd `|} oO[Z~MW `2/s+;F/欽rѿ?ƐM"X/V~xx[Ӱ} қ6${y0F  /^V቗s~h: `3Vf+9?nWwd!p*i9e}i N?)_z㭊AժUؗ@7+U? s}7.r_]1*s[/ROL6s9W.vO ,JuӏEkeoq+>˩r?K*_Ή&!O$uH_xLϋqT+~"e+hwL )&/tWdFK<(qZ mv,RSt8ml'p'=̗*aYtky~+E/"lN D'I+c*yMo.7mSoV#i_|{iӳs>s@}[kA0 oBNVY-t K V-"vZl-ۉhE{"M< MFAtm϶sj)1Qkum;jAoV tm\o;@ݿ$pNXS?7J~y" tf+ g/oGsAG=1@3XJ?"`LPǺޗ*a'>2Ǝ&Zp -eH iWݏv:-k `(ӝ5Fn 5vM5pNM6?,#6|.|d:*|@S#@=q1ܻ/HDCE?X]0rnL /NvkcC`/l1+{ɠ_J࠿[`)`;N8r]# 0OLKwҟj} @5qJPM[ yE Ze\ pA f 5o_ȃ/|2D`)!\8}Muoۿ[za^g!'%\%ŁO (9ll#m-x@ d3}X/_/`c8 G2k~n?! 3[ !C@q({M34Eu?5?sMzV9ҿcSTAzZgelTHqqNO1mz,¢?>6 pD'Y$iФ?ꈪ3 m W_<_/]g6@  `к92: p6H <` @:#н, 4]?~3Q xC>?l>0l`ާ8A  ~9$Kc*t7wW2tտs w ➽("PϪ IT8B`%%O?S@P N0}؆7!l]!J_eǭk0ИmfPg:5$;BOlJ@w!tN@\F `@ (װ<3~|F P߯Aas]=2JWoXtGhLvH~Hownd]!(!ddHX 3kx[ p"ĬJ@PFatIZ3 ;BIs4ط.ж#ٳ}1y@*@ Bf)pĎPT'd-*L@YnKN?~8H#zD{P"~} 0Lb3Pϙ0:pcz%#$b"KNEP eJm@鏕'[G䎐߹(zՐg,5@5  Y (B`KtPqF&ғ'oF_ @X~ "G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%J/pND#@X G@ ?%s(aIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/ellipse-rot-expected.png0000644000175000017500000001701211642654340027337 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx vHЪ>ZЬfԫ"j(c@!̈;g0N?^*&@?9 @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  ElgE@+ @@QP&@p PT@m  2?)U hEx9*mZ>%:Gg~KoDoz:im=ox?xiv/ oan" o) []ߏ]I#O) []Fsd,F L 41i ͌jxܻ轃IǾ{zf@]*ǶGb`q=wLStpl}7u7S_x/;L'N;._@)kr l矿z>wXG@*; Q_?V} eM t{lA@t`^HF t53 H'8O䬀͝ʀۨJSs@ݜG/d嬀zȀHzAs_G}lh/6Gmeg67lc׽뎚2- i;6qFSݶpk]` &`dicuʰ_[ &bSC==4qNKyeo J=ױ]48.h]7͏*  f?q'^ރ=<=wƽ@}Ɍze##⼛(3b`.0Xx o,r}wgRpՏׇ\e7˗L*t.\g$]^eeXuss9Og?x;5Q\5]gꉚgl϶sh'WGu`."Zùn7i{щH86f%N 3O8*Ge?jI/Ke@2Oਾ Q? |yQ8\>xQV7|wkY w71]_7n$}~_> \= #ÿ|1kmpmM> u* ǍxXgyZO7R t e/RfɌ7G[z^67ׂ \;V%K ãƴo|؎_~24|l'v@xCX|-Kd@nl7^,HNt`㲩. R9q*R`!zk{-& ru/MjGɯzR$'V=>.V\@ t{nΩ˟s@ƛi tyj>zQ.@F{5 kE)s '7<s lX[ͷh >&[_i\_d|OߝIg7@l{ŧwGweO$\.z-q8 @.RDךI@MykKF[l^t> bLoGbq_Fޅ6]ʀ^| L@ ]8p@n53D~T,UjE -iK)govM)T;l>-@}<O`Z~u~[C6٣؄E  оhGS;!`JsoxZn[)m];7!;/¾M/#l=W ɿVE idib?m? V4҈!>&L?} X1pڨmwk= } ^. †` ܏&!Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*Ѳ@f*ѲnۡIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/rotate_extrude_dxf-tests-expected.png0000644000175000017500000001655711653243561032155 0ustar chrysnchrysnPNG  IHDR{C6IDATxM$yݕk#CPL|B‚r- 9r),9r!,s6}nc !7`$A5HDnzwfg{jz'z?~;GS}{WC՛ @#` @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7mkE@›65@hM @@QPM`  @(Zx&@ PT@-i @@X(* ޴  E o 7m<n+ |pTD`ՇxK&ȹ:qi1*{ P;Jו+H@}K.ߋdф8``O /甭I)ؗc\EB(@L< ੺1`= {a2#Ki~Ze$`.:fSgnsX ^Ls9Ȧ?Jw``zl8nuR P5{u_'8d_ɨ:ZӏN~TZ*6(yPg=yN8Hk7N[jM\ 49I6[P1yiu̿/9N_"-c@/؝Uk\V=#{&rۧϫc8OU+`7/ Є񊋀a:孷fZ\Pm m2Bsn*~|m?m)`] &ti///\_/'wJzQMz_ܝkm;V{Y~SV:V ;a;KWz:1TFG4`}ﮎ$ҪKVi>|xy\sAփɶX͗7^=_@t)p j ~68c ?j_L'䆷,&TGRE7١~*vvKa^$`ڮ6sڥ^YlQQWN@ @ lE-Bz) 8o@J2vntXs:YsqjU2a4MVI;85Vc[V\뺭@xh+6ek`J} Lu3 (.2TL71n\J\0'O:6ĭ'_I013B̴pO- Zj$St"Pa0u+X^Mf$ [ک&?YGNէ~&rGu& ?a`'S'zVL=n&[Z\]\0w=%C`Hmw;Y s _\e<3~.KXR5GTuF.UҎ:10*?cN~z P/ >>ānԪv6 tRt{g<)ti )1/o \2?X@L 2o&zۛ!#z' 0z @ V@a1k`'A/ntyN"@ v@m dQv# yS@%Vd6\y+a2J |7$ T-c%@SSS @CLM @`N`N2V4 15E9 9UX p# @4\5c h5L w}@Iw`M& 0ZG h u1*}Nz7,'99@IO)0iKd` $@@ @Kp#v"v {u޷êh/  @0pK`ۍXsqМT̮F1794M96憠CO@;RKh_.7 :m@UO ~ dK@++N;!Cez{պv /7A@_nmx@G?G D`۝-@Kmɀ.%Kt&AnF*vc=cvݖוDЏٖAW 8f'qG2`ZoN?eڏʜ>~ ol &("ʑ9"<PF}d*;Sȋls 'T\ 䨃Qlod\-c[`<"`aoҩhшP纀]c_ 9Vmmb` × '#0*T9ڋ״,`_ruMlqK<$r$ I#n#qf"akͷݱN4nsuْ൉w4nsj*7 D hOOw@MS$VXp Ezw,a (~ U'hu3# NU9I>tIpϗz1曉V'GhUg.` h~}$iJ# Z*Z|ap2$ව_7܄{ork o>$qc0[@<.; E ]PʻsqI9PF u%A8QQԶG@/ m`߹?m\O hޔ%JbNj} 'n]0oZ ljsX(Z@<}se`xsY\,^t- ݾH3пl_wb>8PF!ْ`{C|u$8 S-%A?g Gnujt#n [2)?5 's?8^>Ү -Af$p2S@}N~t*`%Ahd;NT>/gQ\jtZtײ NyO[#( nɤ}_mM ?ѿr(%J_&ނ|؞ ?uѿ{Ln_ ŖmW%y:DAZsꥣ?nA&ߍ5˹?f%AdCZ fǾ- b}ٵ7GϮ%e^{[$ oa1[rpៃY>%Љ@8уG<{&q- G42`ѿ~z+WYF<+S K .0n Q)o<;s,xk͓ i+Y~%8! T`VIW鿆IQr >\WPn%nxi+;\& /8&$ph؁+h!GfPo~  @`J% \czmX2/:8K:`W 8Jrg l pq-]@Z]>]Vq/p+pGC'V1FˏmG@'@@R9-D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D ha @ H"@@> -D 뢣4;[IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon8-expected.png0000644000175000017500000001673611642654340026673 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx rȕ+@9M@> Xn/~=W,-wd#d @?9 @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m   + @@m翦@;HA0Pt  j0B<Cz?|-3^;?`SNY`m?n*6TȚC*^#S@ktUkCa&^i& 54~*C@h;ᄨក'C 9*f @v_k՗iUFȍCS0g3Z޻CMvq8HП,Ny7SOah '=? ' γOCڑTp~Yk]@ޡCN, ^&t7/r5P޶&e{_ =޸µ?.G`q;P%@-`U?%/ #o{:J$ >7:^-_z~wG@jeCNᏡ{׆Ts~6@E@TF_c{B! Iu8L@FÍ E ՚j_cK`X0lk[~4zob 0p ck6-zߤO7at6`V4 npr7]@!C@l"@஀K Z+I$ }](­,3WPxmk=Y=ƺjKM% 李 ( kh?ZGg(pyCm\3+Z |VmŖџ0>,QM\OF!,>fL}`Qc`\E]=n̾}Pڂ p8}>Z0.@`! Q9%}: Ϳ9Ѹ7Gc qnc݅`me Puۣ"K Kwu[H%e?4윒# qMwG + ϊ]C%mJ]}jTCl}*d,YH ~ AO7ic{ Ϲ[VzNܕi4nl&g: ?jeO2l> ޠ綷n ? Ц<@OM:ߤu p8~bp^o$ N趦F.C Q@\g4ӿfB2/,[%0577fߤh ^&&J4-{%0E6ho8}oa'( .tME_i?G].Oh-]=uXgb\^z]>EXG$b/5>aªUTVťm}19#F+g}uTX;eilURڱ zF'nt!!߸J'`V#J`o֯.$Ѿ%,~'ܻ6ŵn3gqߟ`pϯkWT|,oWuܻ_3о.w:0?%''goN}ZC4>?Fg]4ǂwrO˳`KG8r`vxo'_.i 4̀QyPye?G@/wǷwŰߴ/WzMjU+([b`$w+LUn/>[1PS9n?cծR[k3pwOgAѰ!W51/}o_B@ܦO?;|ik$5|lr1?S#WޣPըˋ>٧off 0诨]yOuo66,Fҭ7y-WΞT=IVY6y߄c4N ч]Q^-V, |8 8S~ӹwjw, HsFZxUpb`GܬK/FGUJg͒Qr}i9W:i$&1]UN[&N̍˴ ;P, |(+6[h7kw,;IbO{kA5ܶp-lH T:1;ty{y> <5#8Nfg10]mFU:5>=P T]gۚnL\ql{> <7{h+Q3.e%Z|v"ˊ<|q1m58iШO2KF®. )"0~Ip!X~6# _W)F" VPr_%OgwY,/b`;'X}\@ 4-Cf9W8& #Z@nu;*;]@n { ̒`OFmskk)}ƀџ~K@f10mvx8R۽x>sڂ_nh 41Y4`u?$ bqf10m= #32>.kX N= _b9Lp&`FF%*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f MT*f ċwIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/sphere-tests-expected.png0000644000175000017500000004066211676112354027536 0ustar chrysnchrysnPNG  IHDR{C IDATx %Et7v7 %7 rr:1a11nDxNL̬;x# e7M@ʪ^Uŋgeefտoݶm lX @ L :? `~ti~^+,)h5"^oQZq&co/b褃@_UOLeb cCVOd8ֽxb ܰ">}4X_xuٽ*RHuBMD_eD bg u R;3Gt_ձKF}=!d:MjEh pe ] 'NIW-71@b:s{!yeˤ/uKOQ+ӗ rZ>n2 ذ .u]uD¦E9" ~_6"~'^وYU-5)__uգRP2d8s~*7~J_t_KfU q-Ӏ8wjn<"zlR_;'_eWȮp :42 rfyj/;}p_گoGo:iˉ+Tg7o,V4R ː0 ufzٽ;Y9e65'U_,j;w0K eC+-h@% [Ey|wjVn~Ge~U{!N ¢JЀ2tI*$aTXnmyb䶱UF|рҙr=@ւ5(k_UzTtB4xMX&`^>B/#ը޿1~gC8@]6ܧ޿-c<@eq VOhP 2?TURw`]x`^ۓOx~И_Lu PyoխpRţe ˯[e5lD@Q  @dint:!<ͧ8W)zu=y+s9[zbH) Nvzb# s j>==W%~9sd}Dn+ǗϤ//]~TGt^U*rfrؗ^kl]V~Z]7+q0sݓF'?[Z`/{(L]C[Jbx|G"t/:-;P꒏>){7U6t~f5|T e*5/BQ~fۛNA[٢.O-8O#4n 5U!Zkz~cfߗF!g0Uec1m$FB( (Jo^XjҐUة_|,)VK5w+:*cn @77'2f+W37=Ik/<7zh/ZHGJQ(K j׿pgP];U/]hc!GToTXDnƫ^?Z@BR,DXhR%DWwToQp/ [N_l7lj/i%_Ur ѴH1=22c})]_@vY 9 H>%>q2@QR`zEãW߆2pÛ8~5@ @tr 6xY/~紿Vb}4]l:k٦)|E?|"]eLf ! ̓X6=hnNU[*}K x)n ^|\4|uQ).F&%. h/*.I +]6l鿤SR c+1eeӜ˦KK$Y $S><t- @ς}tD}+ ]hmP-KBVM+EE+S6+5{!Ϻiׯn7uz5kMe%#WKu i2 J ٌ?e{;͵Z?sjy[[lA:-' h/+z]2?QυWb/~I+|V\^ [Mm5 5ֺ{$+@#3}x|ud;G%|pךK541~@b 8@Uѽ@_wL|5.ղ:𱇏 w5{ @'T  eʂU$S&=Lt H/Hvw6;RݚK$1cGj[rPQTh".=AIx9ZYDÎ۶mpgm|Ҁؤ5`Y:ì{_;zbO:ׂdSk@T2A' K⏔ +@+j/Ӏ5 kER/:{WWԁjH-_VWVQTSHU@i_ʕO{N+/]6)'gݽyg t v/ Gyz޿Q!A4$ס@-PzZօ_e˨H|(iPXiK`3}ǹ+W8~FbN§N*؂*̽#PCy @_u&<gy, y>"ylZ:DTjlZyYiq'X +5@@O`&Z{W,Ey$L@ʨ%;YXKfYyH!мj!KcGOWt؛BZ *,Ϻ09/@Vf$2kt=*\<Ծ0! n<<* }뉿bNUh)~ﯪx9e}/R\9鿿^Op Opߩ鿶jaV]˟l^kI4On{RpRԀ B,;Js5*Ź7۽wO XEw=PJ|/6M:_Ԁ@Sl,oͼYucEHI7'?|p,ns@FxNMչ(Ap^w~㧵ҀKS`XUE7g:߻tή˨ G+*|ྃ=h :mg#qa$N2d"@j _R;V: m8h%QM5եgmb3) % 7یKthaz_x,! ' ӿEqFw0[m&EoVq$PN%pV~\ XvP`jo%&'uR1NH2[I/,) Ю?Veҏd/-?K@J ?Xv÷ḽX'},E/;dtӞzW}\3a3΄czRSSf_&PbPZ4r_6]R_o S܂,"9E 0oEZ@wYxAkej94]{|xR?Œ2\xyr.^Zk؁sV?~dN j~u)W,J*_W|}]l.+ѿؔ~ @욾W0wmh@Gș'&Uw;xѴm z@_ H\uI \F ZZD*_jsW;n?LJX_Zȟa=IA@]o6bsV_uU4 Ϫg'M*B qp2zi+tqQn{2nA@C^޳x$Hņp[;ȧ1/Z]5:=k}S$3QUSR *+v{ ٛ3-UvyZkh-?{嗯{|wjKx7:Oe@V7SβRb/JAٯ;n75- bg {D1G*̕Ԁ r>A@_άuɣC|^[rIԺigһzd^*K+J L k0oj 4/ᇙIg߹ |2@@V*e%E Է@[WZj'pY )ہѝfsBivc%Cu%({l)3ؔU k:'W0:s.] +yl?'߮~YQ# R_ۚJ k(ׯv5Le: Ƽ oMGbBz4W b"`~]T~?YI0iL#=;A_d>{,'yϨwb0Co6>Ë%Ei;{}f։DŽ0W\\7z{X+5J9}qGVmPtv$/_TZ~r敛ћ wR,2i _QTˬ׾{_Y߂0kII97直 !نeo K$-Qufȸ&~zskrMGu4aD$~ @4`ָH\;9y|Z}S;8`р;,&֚׍!+-> __ÔFD6=P_LZб)U :~  'ߑ;=8~VzS|i䋭ؗJ IC)j1ȝ~j{22zmO|莛~~=_k𢺉%0x:Z$| a;~ղZIcڕ͐DC9 F@r/x|mKU⊆P~vC^ﶼ-GctϾqS'̼qTчKb-@75}zaj8D`{  GvV}gyġN7 N4vtH 5@M5.*yhnE1U 6ܛ4L`MVMHT69uC=z]ssO1K]in@4@XA+N_!17'm|qO5Em"/ӽ]K=~_ +j_So=sE9YK !2 ~_ 3( AvMcE䣖$d9O,DfU0^޿XhO,ϗNzhto%j Eb@<ſzߪb&9!WGgGӍV(0CfWgŝŜp_kX5W[lZ %=2 {ׇ̀bxsf"N]֭^ bxm ]Ucuzx Th@g7c)T=WE?9"S_K=?/Ae7EXN޽zhU ͋uXv">KYXk<~w7? ][{cvɭm\=l66h nkA{%TX k_EԛoYKa_8$+Bâ7>oiޛ|BKp̝Ӎ ߾QO`oʹguV:{LL7\*#/n4L9o>珫Y;ۉZ1X|p gxZ$̋ ƀ\H:c/PXqR>+/f&*u^tpZ޿&TQKoYz2j9W|gOmf7LDگ R9\s9~að2\꯾nms:eަ]_rxHyiW&*/Nk_Z W@lbn8甁T؇Y58>aop/4/Vwo #g |DWm7*SwOu::_lCZҎDe3b])e^ 66[< Y ح4sFHЙO~~_oojjDf j_}[R4р~zTuG_ ;->k-s_*b`-utjS}+jƝw*;kaBcmc,h1 dZޟNk 0k@ǂ} %^j~xU %(#-ej޿V$ -2m(݄.,_|Ք_zj2wxmxHb?!=e `KVMLʢ f{9/( `hC +.+-|P<@qxjz^t޿+04@Ig/$;t?+2csӺTܽiyupgVf(s/@ް!z y?h!*<ׯ! g T@sVV=7dׇ⼋tzRp_k? "Sр͝δ 4=q"y ;\j*neFoGWќr瞺U?\z0}AǶZUs/}&i[=t:}To~ׯ \0BI Ti!/'7<[_0vCU7DPy_-goPiKo~o=O~ A.tbl:m j/Z N':_w'&>; TN;̺I;(%zg\Ž(/4V()O,DɇN (zg`y@ߍ ZNQAp7L$Pk!:"9XimMV(Pw_l9E_C7w8mn|t s `Ckrq&m{n˫K*Oiq_&\qK@qHzHq&< @}Wç{ǐmq2K@ŲfQipȩ?㚫@xX 6"!AB(Qr'#, Ӟ4%@yIph/b'"rZ#p;VB P?.{n"~\4R>fxpV&Db Pԋ>]H$4 dClL D P;S|5t\?Ki4@ON)hNPO>wh@2{{",~{js9u[VeAI yD wڸ8KmPJD]aj#D:}= x"8vԊ~fCG? K-(ANCM xg80@ߕ oR e@>C?z]+J u0,~m?j`T2 SU$DbpuclN?8Q}CGy3zὒ4?DT mx!w%޷ TL|K!`8|ƾ@-\@ d་za:m bij:\^@ /z2"m@"I;%V.*A^u}"kz%WΡ5M5?^]!Pk#B 랋S&9m% ԇP;3rbgkPP4`UjA)6 mPJ:m@q{RL{2h)tHa{i0?lMˡӽ%vzq3P^^wr|P`߽ zF +i=ß[w%rmG1DL $AeJ@Gi)AuL(@&ʂ%㫑I(A;L8`B`i%=TJf@~m +A]#L--(j\ Vjk%زYbh 7/]q݆Z?}sĶ '"L4DZ4 ^yW}d+NS>8˜h@Ϯ)L_79ې@ ", Xq@Yvztl0ڨF ϔh;,K?xY^ ,Fc 5m` ȤAzvțje']kYMq5Qt&Ϙ#U(P?Dt Q HGx4kD2)3qX|xdF31C؀dsO1gY\|KJC- Hl@2g<%.W_,޿K#F_s+Gy 0]C D Lhj(Ht@G-P2՝5 '@{ P`!onnnzD=7gM@?F 2 yh+*y6{>7|Sq/Ȅn۶:ESG&ܻdOi6޿ ;Fۈ_M)55?= $zGݐqE`=v0 X@{?=$p貟R0 }?uQuG9@ Ijԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1Y6aIDATjԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ  A@1jԁ Jj`n IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example008-expected.png0000644000175000017500000002167011664233734026774 0ustar chrysnchrysnPNG  IHDR{C IDATx=,uK'Nȡ P&8Qj /%0 1Ȁ2e2!^5ٞS3]]n}ۯ_|KbV@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0M @`[6s I oL* &-e @@8 0?Ln˞U_?ݟ% ׃-r$Ǎ~+`*f DL@.Ϟ τޯ6fvџ' F6 xw|7#W@ĭ]ԙkQ+g Jǂ"v8̢h<14ki K\f}GI@T'n ::_ͦҬTZQϾx>Ã=sML@ jT?Q/Si5Jq@-ٲd2CeA'_lXt6Fz}" L=TE~\nPrH`Ԏ4hmvן3oz:^@H]dqn(4}?ROs7GJeBRJ`>A>hOz3 %75}l1yYpsd`p}pZ>Ue^UXƷߟ b^.N_Ei©2aԨYF2\`(TvskdQQ+r!k$zwG75cRWTX53ܱDqЗ>͏{]To$Kܮu3co)}c,"aoERUp0}8>3|sECfIdE8ؒO%_oX@`3颛 }E|a3sa?ޙX` WJN ]ȃRxMS<NNHC 2\DoyPx]@=~|y -7E;y0++ lvyq8 Kl=[wz '>Hwsx_~'5Wx&)֛;=yojO?QB\XLk 5/> hXy(/`v8D,@N"A ;~r_R#}- b`2y:`/ >\# vXc-cʃUCE߂ݚt\4^q0)?DM<\s[^LQڋ5zs,{U_A:<ȱsT@<%A<ħoq6y -k)0a˓q|%p#y_].`a^:uA=ӡ(tCwأ?cq`}R@%XIP ָk-j K0߬us6/q螒8e1ڛlE`?D@?g7:Z_@߯o`WI% ;DUM*o!џ@<;;-i  !g8! &-Z8&ppJ^P4iJ-F%ג=t\p([@>/k^~AB } և@~u:+Pz{P &ЫkeK<> ͯ70|D^G{1Ǹw{s n˴ib&6S{ba Gr[Pk:'51<0hc~QMe#Qs^F=08-FV85>OU|yLo|sKi X;V)|ANsHwX# $eĕ&Wcժ4/ @`j?n@ڙ9## {[ ӧAϟ@I`u+ _ p_@ӿorMߌ@cp#I@TsA`t} >o)g&L"O4g_DkwWr?(M%.ǩf _@ߏ_+ A X*j @~elZiqkk6(OwW o ~7_khGUL6zJ8  "RȆp !vAݗg y@~2a%”D 3/r@} 4rOp00A-1=@Xs"p UPUƒ' v<\j s\@"67_@l7LAHku@WUcS wqo)W33&@@P ' ̌  PD@a4 x53cE Bx ^̘E@F @ W33&@@1} \@/ @`+w~?_ȿ PaG8ςWEPdiE\C - @ f̚ ) bͬ  - @ f̚@gMʌ 7xM w޴{ӧAywgM?$F_ nK36s^r$r H[b%`CĆ@0M6I9F]_7H?_7%9 .u3Wͨ@lR}p8iP4@.|o53JqXIiP4@vQڴ$X{(@`CZK,@?I H @!xJo,X |C#D?lkI?C?E.`HU?t7ԙe7?>_CE@1ʿ=F#@AƧ8-5JL1O@ Ļ pp^l৭=ه.v )PȲ4~P7O[ 8^"[`^W3"-0|w}|;(h {b XOϞ]/LlE@$ [Pp;; , 6!}Л/)@/9`ZEm${ˡ-Z3n;y6cKYOeݿT6cF~O~o~=?+Fp)޼#S;9 ڤgv1Էc1y[vmjϧ+\ ^1F]Wu}KRvoj>”ۥ@Rx?u7πםeOOV> U[fo$. g_6>b-̓ 8PofZܚ{ n̜5Ș+ <X@`"^.ɳ7ki"}V@sm% b)/E"<#Ti6/[g hެe@Kyp+-VBlֿݚu?UmpָYOD( 0'?YZ)?5Ptnn:;~/o+?frg-r'_~h+37Zlʛ0â>% =Lh,.N㱃~?O.?Iв'1ݿF_#g_Z9ˡFʙ,.7#"htO1Pzԣ%_为ƁqPc] 2@ZE܁Պ)@֟f%P@)zW@%kx?oʝP)NWh( ƮZť@+َӸ'^sL4,:cJ V' 8@)NW}L,1)پ̒]Teզ ;S?] YNP]SOz}?=iKe5K!?_ދQ]%vs3Uʛ7x;B/a=[_iYAW1+ w)px'rRc?]ߞW'zλ>_1; K-]lwJuOe˝_2޾zvE`OE_aP=:|8?>7ks{/}ZiiDs1G#_1wsfC@߁6. l.RIX^@Ww |&ӧH?lQhtf3 ~o).kez*D`ֿm]3!v wPxSpffLR@&WE@1ˬ]R I@e&˔Ou e*4 P$S$ppo8.:.qqNMDy#S+u 1x@H CMP,78探 x&u-I dn=_/\qZqlύJn4:WlE_O_@˯W6y@%ݿa Xo5.*]므j=`\ȀrY[@o_B%\ySy=MFk,WY|R`{ufh$ 8q)Zj*# qnݯ+ Q1M%e;BjR\zJ9 @z:`;BZgp 薊vL|;Hqإ޾y8m/=M S@d* `1n }GHq3o?nwvP@tXbJ|Z%X(Ё:!uG6楀9ؕ@e`_ zW@,p hȲS =Gݿ]WeMK[)mY@D^w2nm}Q}`1\ĨhQ Muji4Q)COd,m)(qDۂFjl*j`BfZSmLϟ}_Åg~ߟ[>gy@?^2FK @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P F>% /m@ @P ~-P +@ :r$@ (Ti!l $+WnB`v,6O*]B,ڤMF24յXLtLMv6Z9@PFo`P(_ӛ²DDԤFXvڢhЖ^E:T:W_ :%:6O.Đmȝ R|R$# Ph!/#?CUsdd"8kg $[ yx- 0No@ _HE@*ꩍM _><3z n0n=qd`ډ\o @Wx--_!pg]"4+}7gd,#(NE`|aV `%\D`_TKDRd $hm4U_hZgIXh.hSb CsO"`M 0MF|ۿ*Zp:кE@VR.ڟo3bŻPJ 2 B榷Mvr@[@[z5Aܸ d֑go8?E@ $ 0%j0Igʭ^X-J[K[,}R@0MF""% .Fh-6' ֋a#(MjA 0&)LR$1̋!O}npC`0K*&S-Nq~RGƍv;CG;XM*卷3 @n2pe-mh0j `5:(u7D _HU57N@?3t dK" sFJM;lбScwtUs' `KCzBjp.O0 /8o,WAU3V 0biGs3&` dvV@7ɱ]Mt@:!k2,E@f}7wLɎ~ ~p_oFN@fMdGcGnf ٚPg@gK'?=LL3_[] }W`+.RߗBKɯ"Va _(?<+] +\XH,޽GwjK, ` TUUL] zA05"S?w, t ir_dOyjo>PO~SIP" U0:_e_- ??q7-ە.ФE /`G8y=7>ž".E@&{Z2g퇿CZZ@f[@ۿ+ Y H쥩9 sA̻@,&@` ^"`g\Y"[; 7ESS|_OI0d  ` Yߗ&Ν /O`Ȅ>oߜ@ r$FH@>Pi] Zya,L.A.mp!g'f !=9l@l*Lu+P] lZ7hH¡_SX뚷`WpQOCUa BQj ɳr@l@6Ե7t?Oσ[]A g6<"ο 46C I3nб.ifp M4I4)[ڠm.xmEv,S3SdK`7v?dx0RT2_$ } x:\I 0 "@o>Ó΄"B}2}?8s ] KxvYt)kcI0~%9c cqvf? (~ '&8Lo~31xk5]=m@@ѯO9ۗP}N\_>Nӥv,r+]q{ bqrG6e?biypcE> W"w} ^ XL ( dHaK*EPVA]C|yjjC4Y Pd'Mm֒s0 ?k7!6no}y]Wa͙w b@rW8@i=0=3 e@RC9&է= %kQ_O:@;wG8FG;z~uwWGA|3.O|rVG\WR 8Q,NZDS|qzJcvZoB+Jq^*hq0XO3Ode q^ZL I8[&b߅3v N>5S@5QL Zw`uE I_ \4]>Ʊn;h2_mom J2O$%R{Im1􏵯<ְVC?4_̃-Fi60t)ݤ6Gj<`,xA70Y/?O<55lt6[ZP\ǸWxPvX VKwƪƃ}KA0Z:e7Ƕ;L:8:J G635w}{Ͼtd<Qq,Jxݶ>e%=|ov3en,hS>.x\<8t׿8< g>sEg `C/}௝j1y6r&@ț7Qp1LЈ$wC`{u:njq"Fk<` `36`WxoW(ʂ >p~7q?tEV{tg_+o:N@ҡxt_Z X4w`МdwanX,Z ǿWԼ7el:zke.K~loLN @(${~h:5vSO2?>:Odzx@ZjcP'kۊ/[;?.R!ڂr+ @7K`נڷKGغ[R 1Cͳ[LFa3E8ZhPƇ<״kb;h?@q~n4<`L ; vآ-0-]apA#(p>@] [WB?b_~뾺,t6G}0>tEK{\=/ U^=U3+-CZ*"e{!vNp}xr80@ʾ3\W[߷ }'B+X Rn7GU v960 kE0w#D]&ˇ~ςFMje`R6P:b{SUi$ /4(IW\.za6к_=nQ 0 EI{R_3V}X(0W-O@v78:#3Xš= z0 0 hVfŕg#d^D? 0ʫF'33gGd IJ='(%vzTOgC 0RK]Ѝy n2D 3Eз{8>ef6,G`\D `S| scs(5q hB&A" 0LՈ4A4! ]c1cT87(X֗r MTOjZ ЁR@`k)t@t B3 0N#`)<<`*#.@`c `cG ςnNjМdF`i8hhN2#i04Ղ@~ '@OjX@,R:&0,X?H &&XUPk04(o'H &&XUOԯ@M0MnZ'BoW!h-S@ p gAV(_ @1 z #e 0=} GlOlX  @@4úSyn>s{ vl/v^CG oWCbq `12@>0>t X~6Eă@+@+J \{ 0o@JԪ@ 0oS'BoU"b-[@`$F@`%ς^ t1PZ#0B5&J+}@Pf@@i" ,],edM'xk0Xj"@2 2A"r޲? %]u#-ЭC`xhUO08^\F@`d؎J/q,4KJP& PP=Փr需? p8Ey@s s"Nq!0< GaT n}DlFlV,!p\Z?x@4iVhhZ{{"=@`0SWYԪLn]fкGV`+W IDATS"}۶h! !@E~'gEe B @@޸q.Ar0H BaS 95\XϮ/ W0-0oY+3+8@.hK>o{B\ м4ǩ@3R %exp5hA1\@H SySmKk1d1%&`UЫ7nW2?Rb]B,ܵ<9* _ aVWNf27#@Zr  UMFj07[GcfχW! unsI Ͽ4VύK^ a 0K`{@ ,Vz#@t z?%J/qNDG@X% 0=@ +@ :`a8D'#@X G@ K^ a 0K`{@ ,Vz#@t z?%J/qNDG@X% 0=@ +@ :`a8D'#@X G@ K^ a 0K`{@ ,Vz#@t z?%J/qNDG@X% 0=@ +@ :`a8D'#@X G@ K^ a 0K`{@ ,Vz#@t z?%J/qNDG@X% 0=@ +@ :`a8D'#@X G@ K^ a 0K`{@ ,Vz#@t z?%J/qNDG@X% 0=@ +@ :`a8D'#@XIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/transform-nan-inf-tests-expected.png0000644000175000017500000001035512040570422031571 0ustar chrysnchrysnPNG  IHDR{CIDATxݱnkvVE¥+U&fM10/0HXUH//խ)f "łM vödr^^^Ғ9{ݮ3972 $JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (Jo~䯮o\|v6W+clJZ4@S|IDߏ @\2 q5uSSN -_mo% 5K'o_)FFk{7=gxζua<=hk~hdvw_߬M rR9!#MsJcMBUF'.^9?#0|7TUFOtsC@A)W h߾rz<:rq'N8C]o9HDZ92d BS@j (k<+@D?)!$H:7%0p7>F9rQ4unL)WhH@l+C:&в3VN !##o~}W׿77-gN 9SH7)~o?~rtnd'3HB Y/9#N^~d#JyӺ ~,o'VNn?~2;/Թ!;}rOx!r|ΙBp!~^sCxrzu9߁]ƀ\߬ KԹ!\9NOvr=7?^|{lf9xswSe!7cM?a})OpbR%c??f9xspwSe);nצi]W߾p/uP>}o?~r'nSi~;A~90;nצ_Zvw}͝`g~%I /EiM~@t~{qv6j߹K :޿ŋ7wnMZZ+M7_}}Q.=72Sz7C :,~۳Ͼ+W:?Os_9< pc͝9ʲ1~o%hq#k<_RX818/ʅr|.c'UMN7=r|W޿Ҁ~y,c'5Pe٤1%Hv]ҹs#RSY6f96Uo!l뛵ifw_,džHUS熰# `E0f!Xel_4un{,dž3 ?Asf!P @Թ!`Ϊ_ 7?꩷4]ɊO7^߬v!UYH΍WOYGhgO)ʅ!CY agUK7M;+ !978*EI/h:wWOYggo/@DD @S`꩷6˱ʠkFpJ7a_W Cph?FԹc>|e->Es#x6˱!JCS7 R,?$?$/32Z1>e/ 6M'yo1oZێU_W_ 9?asGK$ߞ6>FF@fՇ!˩@6˱!2|e!^T\tn6_c}dhv߀Sl?_u3=ـTY@F4`_ 8*&?CЀ}dCjFq?3@F1.sd2p_ Ԍ\ bgť@_g BNrv @e}p8 `d] ^u |(%Ҁ8t6~Q.|@r`T3zddeb­) *&/?,@_K3}Ex2%za~4!{5`H#h}@_ wܫl{@9 詳vm MZ?߆mQ.2'΍o*#B/܀ 5\Gv }W/3$ *#WQ. zGKŊrpGvaC 3Zk@Q^&x^e(ʅ! X; (K"(gЀ8r2? Eyi@"``_ (/ ^yQ.? tЀ *#zMIQ. G?YtK:k@"G^VT\8`ZVBKR/Т eS &;$0o@Q." ;e(/mv@:ll]IL.҇FFp*I:҇ζ۵)֓ vm'32>?NNYwmkS]Sշ 8KRh@vX,}%ζ۵) 􁶌 ɷoX1mkSb@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D  ("@O@<JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (E~!`tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-mesh-expected.png0000644000175000017500000001206211642654340027521 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-self-intersect-expected.png0000644000175000017500000001206211642654340031514 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/color-tests-expected.png0000644000175000017500000002025011676112354027355 0ustar chrysnchrysnPNG  IHDR{C IDATxݿHV ,b\<<`Lx L b17b]<<\pqƝXw]UWK*2&6bR*d_W @ JV1| W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^ W6=@ iM` @ Hxe @@H* 6^+ÿ?t@ύ_#Д_6a&v@;p% W/}<xݓ.Peo)6pf.mG4rh\Fщ=a'5Cy&)ޞ[UGwx{#7`8/ZC7/n>mAZlL/Ge64P#2oDd/Cgwv87Nq.<9EnbyFٽk _Z4 / lOnzhe'bߒ`Gy Q~/7?~ɗ8-,/s ]T5;fT(c409}-:|Zsj5y7׶ڧ'zo45=>Fzuy{}#6p~:6RÝTMn3o67ᄇ'W KuM_3c;ά CQu̙8a2|gkCU`;l6E`'U+Eck,,>pgٴV/5|} o3d@6xٮT?F*I mj; m mXy|{ ~q;S.5.so=3hyd~ 쿝 ;|V!#nO— O$σmSI9nSgIxhOm>|!@kP܎OH3ejOoC84^r~xzp- Wo'YrϜß'\olSS;]#z=w>oC{_NǗ ų|H}0O=!Si/7/_/pgс⎴SQK;_Ktf?aO*C"zq& Bj>Y}ܾt/>յ>>hi0p1g޾Atg>+/by?>x\yprW</[|tS_|8ub; o.zvQL 'rr<͇;~`^K [}~=m{z@7C?b o2 ?m0׸vu]+5_w 7y & ?ɪ̣uÙO/^ہ;d pMg95_3w ?o4 7=<<ПkL_//10LI0R/J~xS H(~p pϿ0qS;@G_C_FͿRXȓ\M+Y]xm.j絠Y~0>ƇwNI~]=h%*p~ܜ>$Ոk?}9`%5a{Osx}#^O*j1¿ 8<'ڏ?sb2Ounw0=gr6_C)b% Nt=zOivWٗنw}u;oQb TO//ΏiLOW19@XpOn;=`l Hub)v]Ϸp 7//?OY Vo,uys#bs$ꛞ< CjusP*v1l蛸?͐YVGJX nIKXJ*`*}5I0p]FJIyYl/URKtomdՆ˿k?1tQR R1 mUd'!͟M;=9&k+ %dl] @,No}~w.8c7Iu?~'@ $ىiw(K_ E {Q;B O8 vB`N`耗aME&]dy{ [e}-Ƌ2pWaOu8n‹y 4ϡ tx==p txtF]sB2ĀARwB# V!X0C[!AFΪ@U#t~w|sM1ꇫiX t'b? }4sU Zx|1 ί.ts0MnB[H `=d,!к@?[t$WU@}׳ @]no\.:9z3~O* @;]\0)0q, 4S˗^TMCqP؂!nn3s7^ 03w YBapb`I_RqFƈ~FW OPU1`CAP =Ksq |??Qj/BQw xpAǃ#d_WXg%ǀpn ;B3x^@҃~^ lOB pcs}" nDc1`߾V{G3@Cbs@t{^/n!C2TATzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  R1  D@i2 P* JŬ'@@ @@(A@F*TzAcIDAT  R1  D@i2 P* JŬ'@@ @@(A@F*TzA  ?$= IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example002-expected.png0000644000175000017500000002401711664232315026756 0ustar chrysnchrysnPNG  IHDR{C IDATxom];ILU#h('D*FLVB TD|J TT,E| jJ"mO(`3XIbЙȴCpc$!Μ{}{z >k?k=w[AKY _"@S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 @S S᥍0sTxi# @:%:^ 0@N 0N6 h۪?1uwuW "i3:8E@aj}Ї)kwqqv$ `V.B h0Sdka?ίqY(Q[s09A֢B#^77k?!304u䢟c?a85V1c$p8!LKU0% `oL A{}ë=I ^Z7^$16G Ë@AE?О.P8g|/!DlI͔ۿ.e{}u =x+,wy8 kc~P*XTQ@EA  |> E% %Ċ)88 Q_4@a#"S!_[u*14&SQ! 07? p{EՒ#m)qe< P|JXT@ ɍ6&tI HV 0\&(lBƫ`WWW}`,z_*\p=0 &h4Yu˙:2@gsaV `&"p݆* 0 @e=<@,TH9t08BE+ҠeWh+>V4m vDeHQ ǀ/RM@ F;a lC y O`]qu 0~/^E3eu}3s (t;@+t*QGH:::{2_ IHK7PP@Aas&Cѭ>C`Ḫ0x56>,=#0 p+S, #Z]cZ~黏W1 o5]{@|(b}X~hNf9Ha_EWimKp+vg`k`֒8_21ϸh]y_* /$0ԁy¾5ohIL Ӹ$0< O0V?;߷ ï]z 0]ҒBqqm+!?;{> (E|/%`>4/6xꙫ:YwpXO\L_VhE q?=: cׯ0@rA!uE//i242ի;3~bج+xn _ 4Iœ EզcN[=\v(+~ $F:|O#w+ILF{x^m5fm^?8%GZgj4.V' c|k=:(YZ+rӃ@P6x0 PA|,GHDh@4Eă@8"'1+4&|@D i7eřlT~{h%ХFnb*E}˛C-3( p7x(/05740Tv a 0 oԁn 1T#(de8 `%wU3%/)\eȋ@HYft@x"ȂU x x>+-HKA婷uwpǗCp~3_EYXJLeewzD/MP[@ w\UnO8ht@:m/ﶗhhK/n>tѬ< Шpc `D{p(>@[zq;}nIk 0k ƹ^8DxK2-L.*Hu)PeKBB˳<:.~eFWeM _h2A#@ ׅu_q^ 0(![H Ђh12i.#E*,¥55\7(/K*g"Nq> ϝɎ<'<Ж^/Giok7Asnn$QЌi fhV'P)]@boEqseR.,Uqur- Zf_9ׁdz ԁ糍Ӓ\$L{/VĶ CUاeeH\6j'PB+P!sxjj'H`I0VucK28@"h @4E&/ oOhSu*ƼX~]}ny;^wT6)2u3GXDg?9ѿx]IW2P] K?`х;(J`柇>.;.Ѡ P{A71m@8ƱHP*Ʒ <n==?>v&ࠥu 0~?F& \Ov; pN@-=_fF 60R&YɗS7@ 9N|?sL A ^F `? b`7?e'Gq@u o{}܅44xuOؾ>m'홏kW 4X 7b"Q< P~?U èlET||s1@ [$ j?Xw7p1^ ^2Pr̷$u6$èOWR$EƸqnuOF[7ja خ6}j u'_x_O?Ye'{#)g~~p TE(QPܻ| f ( 7dJ^}H_s/oݧI?AaW1G~p}b|A`1 /@@NK@.PsfDSD<,&8+'3=Bwٸ 7n< pJ F\Y7< R4<>hX 7zJ@DѢQT9hqʠ0SdG\e\pJv,M@I1?zsj  @ 't7;>]O}v"h_ 5djM@:zBP:'7?$u2`fx <:n(jtۏl_cn&?+Ԛ ]`3wmT8Mf` wl&*jȑ(l2@270Tf[z %0}i&! 0MLsqnvjOI-9\ݱSmϣ3Ϙp7ڵ2@ya@iCr%@"NqZn%UfU|KJrf]ɒAu:n+Jp^@9(ʼ;nΰE2 D!(8^]|ig0I@`^Cep>]L@~ˀBl;$w5@kiVƵWQ@nao8'@E}p}*n"`鯮-ܷ!N>[#L6wT1EVxux@'P-MwQ?KpX۽p0 SϼXdEE88'kqd{-&q0;`A Uo3֭]Iɷ?)q ('Bږ Hrwm]A e (Ģ]*`o/4]  b=+`d)3 0HKuؾ "e,P~YGhvGh 74&Cu0nkZ#؆@ɵgs-Ms:G 7'vvՂHX-5e-:VKhy u_~G]Aů _V D1%mT -ϨOG4hP>z#YXsI_w!eT[|IyKJk{eIDATo,%%驱O} s~]~EnlM8lJ?0;B_|Ƕ).̣)R#06P#cFV=x*S>.;B_z1NXUoҟps3$pUȟ^jXkxl[@ũӍnOrk=ؚ))~+0s(C)V_3DbqoKXɸmmJΌɔn2fGV>tN;{­@x-% GѰU"l>VsG.RQKi#LXKZr 'aW Cѓf̱c^ l]YR:wgp0fD($u#/ $[cLX'ET? 3.m>zG(KMujoJfԌTjG(`D u3AbGhr-k,:BDrv#/gl-F55!EU 6(jܔ@܌Ft7/#4?EŹiKn6 d韞$'36)KlTa􇕯lu"t4CFfMX H. llҟJa0 F%\1$?`ݤ!` ( G$#pbGh'fGVŊ('C{ "ϮfWRuy( AP.H @( A`X EC0 @9 k#!0Pr(Gcm$@ J 0r"B!@P@P@(9#ʱ6 %`@r@9FBB`  P(H @( A`X EC0 @9 k#!0Pr(Gcm$@ J 0r"B!@P@P@(9#ʱ6 %`@r@9FBB`  P(H @( A`X EC0 @9 k#!0Pr(Gcm$@ J 0r"B!@P@P@(9#ʱ6 %`@r@9FBB`  P(H @( A`X EC0 @9 k#!0Pr(Gcm$@ J 0r"B!@P@P@(9#ʱ6 %`@r@9FBB`  P(H @( A`X EC0 @9 k#!0Pr(Gcm$@ J 0r"B!@P@P@(9#ʱ6 %`@r@9FBB`  P(H @( A`X EC0 @9 k#!0Pr(Gcm$@ J 0r"B!@P@P@(9#ʱ6 %`@r@9FBB{XD{/IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example019-expected.png0000644000175000017500000003153111664234717026775 0ustar chrysnchrysnPNG  IHDR{C IDATxݳy,@ڭ`rMl8# '{ľ$&p.Iֆݪ\$K@,z ll *ًP A,G?ϼk x.&@o<}3[6b@&ys#޷u %F~TO@&o (A'wtDRn-=~9^`e9Mu̇A뻶ŔA`0! Tё #<F#`ޒJd@2*2B`a;(==y^6|~?^+#*B@M}&BdH>z/WPIpy_|k^FTzT8܆@I2%`~cPX*:F* 6D@fSfٲǛ_m6Ӽ 0w;O ?! XPe~7k; +4 ˏiJ gB|ӎh]8zC,QvR M l_И~}^U+2  0-4]A!d{n! VA'*„k$е˻>]PDKw l'` +C暟|J+i޾\X0z*n~ KXF5  4\"(}ŧ5 `QM̽BS'f:U9Oˊެ;oreodDț~B;VIӷ)7eU U ]%!#`س󘯠&_͎#<7~J/+&`vN>AeHu, ܌?Ɋ ?@V^ GOm^~ԗg };U3Ni)rP O 7G&Hɫv{?m|:FJA O(Bn_' j<:4/~)FݢyOuAbpCAJ<,We:WK 0T sG''sƥw&5y9ʡFuΎ<4{3pwH9z<>4p'D(;=2}u>5m*)ـ!$ǍRu8{6Xص,ٝPΗ7UaY!VTd<(SruBvt8qn;hO_Z%@_ciݐֲ{d'q+ӷ|x15,} ސuv !},ةt2//sN}_Ow=9ܹ^3dҌ 7+[J@ < ],7I"9uܑkS=lEϿ|Gna\])Oݛh-/̰:OOcsЫ2J.GO'8s?џfݴϿeIx>U/؃_j?޴G'b>Se~7q|uLQ9%MS/]`~vbz)S$ÅG9%-O {g-S\`M, vǁnr53NuŽ{z'P@hZ>vO٧XB}}*}YY/#cc=jdj2p?e~ɳB/\ό,?F3xɔWSCx-zsk*_}wA9׵俪O7u7. /3f2 lު=t>UӤ[Y]d&un}D@VaMt&fqܵ=?K⟌)NYB*A7s{XZf? /Y"Aud` zx'{%1a!"3ɏ%8n&% L'5GmxӯS*CJes?oz-@uBVa󽅫Yo9ޱ9G(F(eCu쳰'ʝ z޷dȷ\B<}, @ ¬ԍ\Lim]#7.[*}C7,V׾dkm)asp LI]qP5 VG'B6CE{G{F<Ӣ;ٽD@"ɝ/|,wK6zJ {;^vTf2'MyJ.Pc&z9@-B s%,}[e_HyoGzA LA}oYe|B,P2LRR$#0#Oa1dֵ/nRFGm`xmqw{ϰ$6XxηeU3`l"jSSK'I)4ƛaB=4͔ѧ)c3pg׌ܨ<7NE^Ȕ)Óy%kC'_lEY @XjM>z|fK[-!m\9Jיx>XDPzxf9HVl6oHh CZ4Oz]nP`VplokBV; }wz؈MjNK e冷8å)ʃ'?jo!hK:J CUY]};/g't>HzX&|謌xoȒ&5Zf?3T4",:H֝}.'q^H*CCky]5(tE>%bD@"%ft˺קBmuفw+7[Cb`@FŻ֨Va;}qCF*Sg}ct'!$43kF#:={ÑQTzF&w9nD{g; & sŊbwWN=FyB/džҽFB'Cf˦?ij}A`UqknO7R ,)z#UK}~nO6u>V})۫YEj|yc| Pe|WTQ/*L-b0IϻoDg z `AVgN9WŦKE>*0sdK}VHH6_ xzl<g =^?b$•wNuJ _]O!=橢baRuo#,w@&GU _- M>*[{f_U!:zY \] \Bfl~o>ǺfzC[>HKߐڛs:>mHā B//)7兯Yuj^cA|\;=+o_#Cu[=cy# R{)5CZ;UX?ş=ߜ;h<2#e8xP"rɟ?}U@#d# k?} d_{\>Q&*Ԕ'0G{^R]@g>\]Sե<[ﵳoW|#G_>>{gO^Czz:Pz^{K-{gWP8^.~y"Թ3Vd:7cԻU{xV "&ڴ ^zHY:|٬G|Sk (F;luIwa"Yݩr;!yzrL yAg HS y .;(VD~,j";''JYd=7-O"(]-w#Cnf3˴㔶X=)m,SU)Eɛ*8{@l~k`'d !45##FOĭzsk!4U^;3w!=z3=4e8MbGS{:P zKGe2j ;s3S.J)jZz_V1dukmQ=nj.uOܱE8Tt)ϖw;C~^fv{IxC:%=]"F:OedўFg$ȡ^^}I&N/B@]enj~0@MîcBO{U!I_7>G-G՞7/6#+A#B,sLȥҏK_b-TJGbʣ{'ϭekސz-ֻC,{-?^2$F7xÓP mF^v"cPe d>;͍ Jn:qA8)C}. p ZΑl Od6T*|Si[]ˬ ujޟ<]sߗ[+Ar[$AUZ)eINyK:PGxkӤOkտ~Ra?VZ+@N"zkYԲNnqM@4tp{ɟl|亹HwlfzKAjMj!oUay%ugLϊ @w:=b;Vc! O BtwuH@2H4jOuO_$pAʄ;tnzghPzh5:yb L֏Nˡ c|E:}F{BIEZ^ꐎ,c^g GyLá*=CL?5lϥlMG͠)Y~F;0Aƴ}[F@RcvxƐUix!ξo9.DYr 楤 gW H2g\vN |DO6`ի~d޺fOԲ׾hX<q%Ak^sJEj޼E}APF⩔ An}v5p<#Wz6VgMβ O-)"p(:6R=lnSOgE  .>tv5Coy2ӵ!n<45J[>ٖā`=&xxsv!:` y@=4pbwߕ}2%~0-6 PЃkvLX2YS q=xc5$RCLg\g3>>cC@@ m.GX9NÁپP*;diΚNF{.^~a !1cwf֓y=vyD^(8S9n4>KlZŝTWHS)b;o-xXQz/aj@abx3,N\wFebjgJ HBSĝ2k *C|>XY_;9P@.ҟ/ YlyfU[zѻUJ OZy7pSX!X&}(_'GmHxA`MhF.>f<9CS* b_(EFn-;"pݢY3G<=^n WV- \4Z PEJPUzws!s!Ȑ&@G4ݭS3 ՆPR͡GwlR [T3%$)tsr+Sj/Oʌk^nK;UAI>žR@r".JYbs7JtrLKWmJzm! +'d8!g޾s0t;oP]h/ԡA~Vr{sB 6 H{Mqx<,-"e׫ߜx`G:zoa.$Nkgߖ$d@x 'Ȳ&}Jf<;md%)}i<$oaC0vY= YcDxe+A'{ Ġxsv=xKc3BD:,1;NKg3ڣYq/;1ǩx 3dwM;Y};MGMb,%39/]֋W Ϯ= WB6:_tRH۱0ڣ l#maWv-,%0\ip!@Dbcf95G%)V?xўP@"34]zzYo7r3x; r\g"YR%} b^IMNJ$d%v::'j=Bȧ'zSVLzP.)MJDp t)9vwYԽ_5A( ^{julꇬV f%3Ӌt|~B +$]n~7XW,5 29,L@>bynsٔ~kwO_^Ő{Y>҉ (H s/ kCMzYڔ) r_ 44g2uA@`hЕ xn'v@g,[P^yMsʠa [LA/]|+ =="%S+%򮖕3'orq @ œTUg!N(=!2C`b M <垟ca%{f)C'\.)z$==o!@om+.qT>{Lݷ/\{g#~WKCdȻ`3v}0"b(GqP5B2ww0ws$:k8t; 98= ]?k{p%/M7 G{>=]|`g?JC`x L][|f %./N* 0O'FNM牬wR2̖m^,$B`Mb,2Z̛xϾ=E!:0#N. ;溇hVH{td?-絳;A0.vfAPM'RyuQ X 3)niK"H,딮C  `A9uF{z"3Z *Gy{g@o@odcq'7nHt?~T@C@WB~p>^ǏF{#3%_Ufy̦w !2tÐ:\{#yT9Et?&!& ?Vi(&;@BdM#|`[2oA' ЇЇLyGY#@LqZ@= G!Pʄ)'~H@,P\Ƀw7   PLV~3+z@zU=qmSy`/dC ݯf_yAk5\ӫqGŋ`@o{7Xߋ!2 »H~o ` l.ƳJ#ydW.|qL&!LysÑMW#5A`('ThWzrhROcݱM?:b* Y،Bb}F E Wrݿ>[4g@`L_& ߐ`OF@`Yro}X> jzgguԟ}/* PP& TD9J@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ PP& TD(X @$$MlAPQp@I@I؂ P`* 4@"@EU@% %ib @EJ@J   W!$-@@* B(I(I[*"T,\ P??M$IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-concave-simple-expected.png0000644000175000017500000001543611642654340031502 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxavǵQS2ɣɀ<DEB/}'4E'߿?NL{@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ Qzn&p6/n׿7  / |⁾oB ~~?m}ߗP uG_+ >.sO,l#u'ۿۿes{ޮ [ p ^oG}~ Qцa3; e]x^J@^=|%x2p)A1u=LpU zh|]8x*{*Auo#gu2K}#8e9fwJps@Е dPۦ <϶ve: j~3UG,~x%ܳ E@¯pW%M+%r$ .1 Xe`ylQ%kMק_җJpin?l7k|\z ,Gp2^ . \uε*_c\ ~{U?P[ʯs[-ǭ>\qI  X^3v?(#q؁wK כ'Z> 9x%ČZjeJ5bM?rr J/%A;2O3J4{fͯPU.W3%=Jp|bo 4/.%U.3n(_wu}%q;J/t̛ UX@Jn*˙ g3*Aа*C.#rw:}&hJ4eVV%Anظ lzݏ Y *_ҰuLp2V 1r8:w. \F,gH~lJp Iaguw@^>rxlHU za j:K`_2^ ?Bxw). G 3Oo~o-{2QN). c?p_6~̴~.+!~~%eJ0$[|H`%>wx{@lU|w)|S߼J0p_S)IU $g@Wޗ\yζxi DK$ 3|/ ><ߓE*clX xom>O`]ϼFk^/`^+A<_; 4x,:֩_/B:άwxtUW#" \(* Tf{Ww./ {ջ;s}\@$ ߷ : @@QPt۷}ۓjp?Luq 8$ 1ʹzG{8+T$R1cN~EE@ PT@mw|ԖԚC@1G]7\N d @`9VbĎ͈5I@(缀;y3GxEMC.4W@䝝?M+ ήzsg朥,H@,w66?GxEɏOz4% rKn K@WjWƬ:oy lyDQ'O?@hs4wLv:άuJ_/Sw̹*>sSS0I O@ě x~: Π(& M\C@ x:em$ 6FDGmK@+3 e @@@p(K] ,0Ky (_ǯy* ׻'p#Q`j.?W.󬝉@q-u|XgoII~SO_E@istY6Xfg?ՠ`: @ 1Ux|.9vMQm4R쫀p% @(:m{j^^+a~w:}M8"i  Z@@{X.6pdzYq7nmP;{ &@@!Phk[ |M|_ݿB +.K:2gh\fM& ,]Mw)*l%ƼIOī䝗pDoԼ @`zsz.0d-Gw tO@ܓ96x~{;#kn p}}46 @`%]<{ Y[ ƹw@>k@p(J"@ 0Cysx~R@l9֩M&sOA@A(l!wj(5ͺ?E NM`~s{M=>]@ Wcu/' NG( $6ѰJx7P}홐5J`2I6ӴJx&7w7+wE1`` @ :`uy 6 : Z!zDof E@ 0B`vs[Ôn((" \(* ^vJ=]<* r;8P  OfuaHh7R cS4@au].i'@@Vur&@@hx].S ԅ"-EϱH, Oh-zu ev0Z䲀L@z\h` E kn"@@z~ @5pQ/v\v0Z䂀VKi; 7<p|\.s tO V$@@ bL$@@ߴڊvL.PF}f].'? t[@  T@$  * Z*`˕` E P~Fn P~\.s tO>V!@@:nd &@@*v\ v0Z䩀xJS@9W] @ੀxJk@w`|S@Դ DR*z z J ԅ"_ @`gt;{-GRߓ2[@]-rO@ܓ96X{' U.Po En ,>$@`7M .PF|M|BĘ5I೉Oz i E> J*ʤI .PF5@ak{ %`].S@I% j[S@Icu ԅ"@M'`].]@  PT@  \Su ԅ"5pF3[B Q qV-`O PA@T  pC@@h@]ua<} PZ@ , *OevXvPv'@~7n ua9w] @kUT|u].e Ӷ]. ԅ"K?KE@j.PqXjPjܚY0Ւ 2L@vuM!kg~}"o& `&n.P)=97Ux&៧i2#g+mvB cQ #HwX@l<ܔ:86쁀x+, vvd'%&;s@8nJ@l5Nl/lPvvJЀPs x([-ƨg]v dS|͝q,' DAy4FANe M@dzNyovhcN$@@wН҂_mo?~:}M"]@u+0Ւ<'gVz~*%j* Z<]SQ B9 x:u CX-J T_.V- bGu& Z8TRl*.!@@>of*+񿯧 DRjg@  Ô8L0Z ' D#TI H`5  @@$  0B@P&CR"F$@@`HJ$@0B՚H  I! FVZJۏ RM6mb%@@' 2& ML$ :AZ@@'H @ 61 @id&^t -Cl KNe M@dz  I@t  lS/: N!@@6mb%@@' 2& ML$ :AZ@@'H @ 61 @id&ޯ}I~ܾG O `E`  T@ 0Z@> QF '@@Pt0"@h0Z[s_lmg,ɧv:jگ7*0r#u+ U`[TK~"#U?K+" )UYӭ<]W97R~w]I;`~~QE8*p_uG  @ ;; @I@49y@٩M+ NhM|&@@^wv*'@@hs0 S9@  W@䝝  $ L TN&`ygr4 &> @ ;; @I@49y@٩M+ NhM|&@@^wv*'@@hs0 S9@  W@䝝  $ L TN&`ygr4 &> @ ;; @I@49y@٩M+ NhM|&@@^wv*'@@hs0 S9@  W@䝝  $ L TN&`?qVɩoIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/scale2D-tests-expected.png0000644000175000017500000001605711745120722027521 0ustar chrysnchrysnPNG  IHDR{CIDATxa۸POl! jY,haAɦ$X@gj8ny|7GQNL?{@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*P (;6;@ hM @(c @@(*'_6/zap F J~|8o_wS_^[Hφ*g2^o@SVY (7@@ve|=Su0uw@@A0@TZ@OBAA(@UϜN@dT8Ks(LQ?-ewI) :gE+WbO2xrkOO`M " Na1lAQ);}"̡kZ~𖨟χY `cq; ) (zG;) 'n;mri=I 0v%Ўeg].ev=isDa]\:G lNFdlaM@$mة6vV:1{ƺ9NS z+Ƴa4U6s3t{Y;탚ߦjϛ{v:Uw`[ɽW('0^_xOc|I2]+n:NX0unP4ۙ,u.ɲrOmtCK(IXw9㟰11β%ϱìN7_ ^U'M>vx"ƘChW1_7?{~ܡ|~@;+9U$}9M~vϭ| 8#iaCADs?J: ``1M]_g|dhE|;y/ݏ&F]'(qjvk5"F㥿8]@N󁻩,l7hgJ@n;靀Hv|{^6bx{iSdcɦ} qۉlġyyY>Z򮰟ȫ@wq߉sv Iq_@&#4\9G۳G:>+Ok ҈oo3~q'qfNx<1xȌ <[6ﮜV[l2^+%_ݫPQoںjvq%jQK|_#&PC|:8e[5pU (>nֲF[Gۖ48 <PT{m;gdS+9M0>%xlHZa0wz+-{`Sg(~Cs`+e3(k`نyL,Ϗ? yrQi|پr8vK>Fly)% 1?C=>PێUȰȾ7_?Uý~&]ۡD Ircmkjtb@zkd~ս~A-G`'P}w_RFpK#0{澿짹{_ #f,_4_j5?#;L`0g&Ybun~{Ɩ65|&xѷ`2iA U~[cKgvܯyq@ܝH`wc=va`6HҩdW(n;ѿ,k[iNA `ſE>>:HkNj@Gs٪'FVf50u;vܼr[?_=g0%b? \k8j`Kj􏟡 )0~@(,[R`XQ#\v/{[*%[? $7d;+5@5"Ұ_z[ Q+؏XoxM`X)kWw' z `Au@[e!>Q ("NS7? w HV? g (󂏭<@QpjXs<@i!5e~!:$PJ@tV(Ў~s[bL5`w _[,+v/# *@;dCV?0c_ "[ lVW O.+X`/`}B@a/bMB@?bdPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E@dI> ,-G, KA` n9dPY (`p @ Ȓ} @ X@[Y@$ r"$aP#@@% @@(,I@0 E[_e_IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example006-expected.png0000644000175000017500000005222711664233721026770 0ustar chrysnchrysnPNG  IHDR{C IDATx $I}{{;s;]`INB '8ɖDC|rPX"86Ձ IH" ;{}fvfvnY]U]z|YYfr d@>{EfIH4$@$QV+(]΋!NH#S K5ȳ1=V(JloUgVs0gŐ#@j^^M[WFO?s>==|A}bn'FԯP-oC|iߋo(AeD33:?Tϖ "#xKsEst9oq6]FSU],y1xKԹ0DM8S_G吆>4Nm* G:~ЧV Cj$x~(v-FœWXDV~lߏ{ᙿ D}P"S +~@CU+u tx gݼ`19G 6X>f0Ft"zd2\?CƉ\ OꟽX M ٣;qKțA] ɪww~ʛnf\[PЛr&=XKೳSޔ+E$?>b x 20.{oBb5$X P_ idwY aP[@ЗǠ0jc(RHΛZu(5{B /S7>X`cm,#/k~hʒY_yCuYXX^XEq' |2c/tzg7S;xݽ?IqA d;0; 5,?!Xm=|oV,|t>p}pZߨUEridSx ٷI^=~57րHa&bm .!ӗW#W-2ܗlxv;q5v_OeWF{&q2o= Wy$+?`<epȃpҴ|NI?qu~wRHnUDĊx2mO,o2 *As.op>BzN3 3?gpKYo[A/ :_ X؞.*3NTso {@k)m,~4=}[W+r}5-J`e-?w4Wfmp.뻋|]%.p6ȘCeW}pWX(4~|l5ʄ>$o*5Ěr*}(mUX޾vl4Hŷ2ş*<-5G4} k'A]Fŀq'/0]]2•u{FX'bk񭴩V&V #@mۆVNJ/N)+Cm= >s>CjM,{v^wK`Fh^/_M⌟n1@ !Mꁨ~[ #^Z(1~C}|G~[?35Y3[YhPth3DOOK'(d,$?ea63ÿe: @;08: $QP V?FS]? ""jh?0ahk逌y|w6G:/{i H@& ' @ pń\[.@*Yy`9xVF_ B0k@ PMh򩏼bl o_t^ z0]BƷ1~\ !)! Y G#em|Ċy3ߙXe >Gʿo9l҇8 l`!`wOqz/:*EznnZǫdhzDЩa[[aj|X  brEZq^ a][Bٴ=Wu#.]jKRKh{+ս ՗1Vc.~zO p հiSJG,_ʭ"0r1&!7Et[|Pu9Ӗ?maܬ=nc|v! S_p>lh))z`Jkee&"6.@ RbQbjYa{CKa !#iZ%C[5׈`O XN=xFV &b"\=`;Sr;[#5 > UEo#yZ|:'vN|VlpPz62M0\ k2яG=^.+TV7{zw=9N@>w:D t(b9@# }z@O*w^/}> y* ^["C PoT J=Wwv -}}ҌK'SuS`~-b&a;Ȟ"?خ{'ΓG 1GbGޢ0*o:ZX(E.7} [im8i3ehi`=azW)o=zzrbqZ GjQ}\CkOqP$ ('\83 t=QZ?rښ;pP->r8߲(V,Is@9!!#pG`bC,B:-NjTӏ0B[ux,4QLӘZ_n+% $,P i"s1@BnZ3k߹WhDlƳcQ6󑫀F_Ԧ40B)* O 9{Q{D(Ɔ>#X)ltX k vnr~Bo#}(* LƉ(\&BAC)B]H/3S jsb޽dR(H'Ė;`IGl.=d0b|ֿ\oom!KBu}nq7}Q>$z >W>g֊aA TTG5E,tÁ@ DžTn4`}Z&# }ԦZ)tGD=lzFW%PRќN 5!84`.XI)ܪ w&Xh1m ND3 #8׈A0&Y Q43 ?ng493?S{sJjMyh2v9mφSQX|\1f>LwX "`^9g|>Sݏ=.Ύ`ѧgiEߐobS _ 5 )F?Dh]oj~* J#)uW:& 漨 )̬A;& pX|*#F_ԩ4C@E I)BVՙds9`V& >ch P5D&jĈ$0-}Y5t!@pC) a2/n햆 v]\6ZKyƶP=Xy'"2o!ҼgiCD<P3_nZ_ϕ~ eʜώU_~Fm=’.Rz뭣&vG"'^w&T H4gůA9\>`xPجI/‰~E }"o H'? @Pm}[&0@$ NgMMMGKϼ?#$aaۿ6y{! (؍Yޞƒ@E#=ӢϝpSȯv3Y|\;Jqd!skO4 Dbe#a"4W &~O-S#Cq~;RzKMhOvH_5Nh{ M'b.C{DbU&TOaṲWBu@k/y{ ܐXŎ2@XHt|"T ۣ("?Zط&H :LQjz\BX80o:OTku%?K6=Pi๠bc/I-_r@e.b ,cMbϕ b @N@ !%тz))=UB '57@}X<ebo}iy .ڴ;6M! A}VpbE2w@e>s?Un7NONOyʮBh6fv/L⇮d==zaZܦNbŷ;?c^Y! L@G~ Qt:Ld 3S="rC8h/,݁E% וi~xuN +iN}]1#@Y!h-o}o<>:.W̱8sѺQ0$ }}o_2Fߎ cE:67yZ(+W!LHR B#@kB LoX\jj#!e/aFY=S&9/ 7W<$5$}\#< w~/:<) i"?Ue7Mh ID֠rXr#c& @0F*;}}P31\/WjerኻU"|#p~ToM 2 @rcoH`O$8'{Ǜr!4@/Bd_E0O3' ts3}v}`lKQ"ԢDp,,6=W6AQz8~#pw{se6wAzsG}ꖾ 4@ve~S?|O/6Od~1`uq#@S#֋OZg@ #X WzdXSS OL G i\™88l/"HH ~(H:B`A|ظ}Ăn :v59;2Mg}o?i[) +CcI:-qRZ`V U 9mH KkmC.L?$W7_dcߚ*Aj": A}?1Sd%#W7~aC$E"_ZX{q_+!(h 23$F?צDKK>Rpx-5+1'H p(_wsW}I6WOdO_\s>rV;h/[oV0!.i5х=s+veꏵI|WsUT}zM=˵孑qc?/\͓'t t@jWrЋùW.j>5͍qGZG,F!'ϓ=32d<0Ɣ3qt-~CH B@mQ"r©%WH!@ P`I] @pnctDmvY>xY=jԀT pڜ(Wg֤;ζaI+b_bx|j@"˲tpH;a,1FǮkA` yg/?ۺa7`cu[f뷄 S#pIT`'OzT2x:DCj@T& %fM `Lk X3O 0Ơ[[o?23Wpj}E߯|qx_w8Ͻ6=6כ|#rD @ P©Qi}DZ(d KM/ӶO)i,~ی]^5/AM2^ lb5s'ԙLs@wkP]ŃPgCɤH= @{FnB<kε8%}"ؾ]LgM>֟Sʄ>$a /9Ñf' 2K@r* :C 2ҷm%v sErB}$2l}R? @t(b5G .J 0]FZ|ǔ?R'V5 T?'ruʫ!&pgnMs*<+ @3j/N:7#HM}q 1. p'{*&mM^~~TceX{oaki֞FpO:X)N||h*-̘G?J>t #ޘɃAfH @ *E4WWKmS[ShhSL)P/u #@, p ՒL%a85ҧ -5r$y'$κ ׍lWU!. ]8NLYsr x"vnؚ8LCD6bE}Q|Og _(.=}GZHs">O  ,/l"a7 lkV~g܆?5xVdIv/S@H 3,] Y?_; sk8'}v@5mla#?20K'3wi a6ՙZpoCunӷhy%YLQMLJ/NԪ5quamE/\ޜJ_б{koÁ>tYl73zOȘ] zQCF$n'W{Lq x POw-߄?Ow!dlL;?ش˘Ly71Oa&}7|b \v+&]C{Rp|qcACqKe,!Wzoh:Kⶑ ) \agm92W#7B H;)HJM5}qzj;d>"@D+(]R_ABhB@^C@^(z kMK+o?ht {>q ! 뿱frF7c% y9=\.A{,*.0X* ߮F3B. d[\%y[aw?#bҖ8`U߶..womc1@ \[Lò&xOX;6pS$@g O@W @z}^3 gd)N@*}qq28z4b+oeQ[zA`W98UTYt//4)=S՚۽e\*LH|5bYa϶#o=B &~~ i;4L#ַibKjDq,䟢t-C s֗]BAI8n a>_KKTBr˒N@Z] I @*+¬H3Ort@,4S \ٕ3벬Xqtb2:RLkq`Ǥ@) hq8lU [/rYj~Wg6;r'OO'o^s0gsEǭLgW4oSRQ:Ri O/]kP@JK$B @Hmp}2bns2+C80/J/:^~ᯞqCƍV##㟩?сW:oSc.n tUFN&F[]/+~EʍJD2e)-$WܴgrTԼV'pWsg̊.0%! oU E`]{xJO ,a8ġ&Zo xB2%D_ۘjZ+EJ8ut $ZҳHC@ lC@:@g/廛"7H~1#r'DAZ - @{5:Vz.Ykꢶsꙫ,>µ7j ċßlX|6>wiwk/{eAbzu=\䮽Q &hot#Wwj 88GXDLXCZ zj&r%y7p_C{%7πOذg@X-VD]B-O?yt*GB)slDLhO|iva%ÞK9t)1Atǧj՚8)NH5@ ᡦ-/憖o.7'Pzq ;8~&OqEW4DvspЀ|&Li?kzSĵ+b $ AaP< ( n`حT{Y-NnsT,/.W`4sg*bq@~T{TU_AM,>C^&p+O AcO Cp rAB'ЎPhLeb=qO2c|CS2$! ʚ X5@O]!kvkЀwrk,BtzIL "0h}1ZݹD<.W?Ƴ@*FG.mg׎L-V(AlqyD8}hs~ݣ X#zC̍!Å =s .`4ɫN95dޓb 'X3Xk(\o锖suЗ1RN{4%dlpLc?sM0! PPBh$q5JHm -OL5Ƶ\Q_@* p9ܰnV57M>/\ޭo$ZQ^x!?䷐G!u |T7r5QMH H (]pN@b$@$L#/Xi0  @'(gHlB$'= tqn2(?XwEKýD9ҡH l! }ظǿ6`MwaF4(|lkX2# iM)& : 7v?eH iـqn88I ntu+C}NyH @%=lk12^jIH Tcb3v^cwg&c.cn'$@$"iNGtGp`>@Xjjؗuۇ C8!Sn:HH n(ݬimPQLHB$`5(? w7]59+8& 馃HB'@mժ> o ~R  =B GmLB'`hOF9 OT.~KA)7 ׁ~P1\5X{ kO [2m}$@\=@j>ӭGO1wZ Ns#m :@'@W׾hs%}#R2yv؀2]QS!. @h߷i'1p$f8п8-=?sחFa=8?ar @4k9ɗЀ fIh[ޯES_7{CAc 3Q5uOU_?ߴI7 %R6SvOMHtv~&>H?c0Ӷ`eXǎտ:xw"! ':nMmm8㈐k##3B@.ࡹoBZrZZ 3h?戚$ lC4\S 9gD.~-'ЀTw/.m /4sQqP>zs\pDYT @xtYpt ߗo %&1H\drFIDAT~iíb @<{ivB4>5@Ȭù?$.( ;شu/E^ [8L?Oq!5 @ 2*THGĽ[wRGZʮ d ]ni#CɄIG)ѱ!y눐+`(oؤm5Ț:ˆgꊓsFW`y0rg"&W MV/?L?@ T{  vpq7+XZ3gt_;Z~l4:tr^ۨ 7 3 eG:qF֟+uM8M/ZŠЪ'59="1p 1(|:_3F^3"|Ud f8~ "':9O&[Cs03Ob 8[~5IsZce}O.$cK#lǤ(1lr^*~꿷6)_xT*-@');)9xMĦ:L#1^@baFg[gWdb)?ypP#AjQNƧN)$M?nq~caCy̲-D"'lqy6#_$/lFJ08©%EӝJ'{YIJ^:9>yh?;+ΦYe?Ve $6>>Ç_y +WV܄TmuTOcBj1?cR_v٠ؑ2'\w {ܴdE ]7HVo5Hֿ ĠfAvb)ٽwm@F96YOwb^8~dc>]lr FOp^(=8'G"_X1'.55&. o0%}|s\;v[ X^o& hbV#}aKpԩLj \Le~P0dooSddGF2Gۚ~1`3tEnǴdj75icRY{eW1ѝ,XM?~N$$:qzscg- Ѐ]vX"Llfr@#q?9@<#{ʠjß4^=4je]\](Ql# lGYiN=4nes ހhGJlɀ(hx=H#Bj![>(C-pKnI rmAC9p2 !w:69|(689leLg`+1w$@u`6O HlRvWTtNJ{fNp_OĝB;bZ1NZA'C-0&ˍyL ,.W4etKӏ01` >uXx 6&Z/dI؟G9eܖ֟ ħ.V*O=sh9"]`(Zk4>"n v qnlVGf)6x:q0kv }^> Kf 0 j)U6M@3YHV}1  Khbþc8'H`% ĮͭUNn/p&$@O6 3$`!7]j1J5Wm H}m )_~|̜&+pyF^[SoI%`n$w !,_-ףt ? Z-_8uqg_Am &@o"#e74/E?Xh~M5j{U%抏k0jxI Hn1f7?̉\4E?@ '+ oQݳۘ h~iE*GG ~ "@NL/t  @Wx  &G`ՏxLU7k@zG~R@C@)Dd@Vk ?or 7~gF8J  Mɲ"p6c8ƺaZwU#"Y W^xm, xW4l?WI1 $ u /| 6F" $Y E # @ P_, "@HH (ɯCH|H$@$|!K@$@P|ac$ H> @%  _(1 $ u /_HO:d HH /lD$@'@H~$@$6F" $Y E # @ P_, "@HH (ɯCH|H$@$|!K@$@P|ac$ H> @%  _(1 $ u /_HO:d HH /lD$@'@H~$@$6F" $Y E # @ P_, "@HH (ɯCH|H$@$|!K@$@P|ac$ H> @%  _(1 $ u /_HO:d HH /lD$@'@H~$@$6F" $Y E # @ P_, "@HH (ɯCH|H$@$|!K@$@P|ac$ H> @%  _(1 $ u /_HO:d HH /lD$@'@H~$@$6F" $Y E # @ ;]IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example011-expected.png0000644000175000017500000001545111664234125026761 0ustar chrysnchrysnPNG  IHDR{CIDATxAJPa !` ܔmuWu)22.ՕRčDOo߿ @구c! Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k&; e@Wov_OT _e@m ug_}k ?uf7ϚË:"쏂=wA&>X@L<\}Xwa`p/Yoˀ'Wk/_OB?`j/N^5<{~b ^ܬJ$  Kޯ/_"HY<o:z]26 *LbW=:˜`̹I`}g}ۇ2`-i4ț 8ӡ Boj.;ƫR:<=.ǻX@\<?P`}?Cɀ T!ˡOd=7ft?B-}@gg9QRۇ2ĉ:t/Kyp_  QW;7.;u@P~00@YKl/& {w}/Q;ѱXOG!7eW\>Y@<=xxɀN* Z)տÇۯd@\: r_4g 3u PK]VcJrlՊ꿌@Tۊ+&|uU!πj ”?]?ҍHȠ3?!@dڂejeFW$M<.SR@\kWJy/3Axi{7I[YOC2`-UλC jKW # qu[n7,=d֤ I-WtdN[v7?~ʀF@[@qW˖7e@|Y&  T/02 A,$ :A;ͻƫ9ȠjS 5HW߾m|X/3> l꿴1<Ig6^+ɀ߻o^ۯ/p (+W;=ˀ(>:A@v]_n":E@dZϗ G0s3CD{nK&~^g IM![C!P@]|\KY}k@? vCGxp߻d^1?V@hH# ҌjB! f! \/~B@_~Ȁ{I{|d@Tκ&W|q_=Yh7| bCɀ>" (gW"GY;,_%@L`ivyγu{pog2Zmn?܎/6"" 섭[' `K-Wz<t{:wv*o{UCt2 `^p(8t- @^tگ=FoVx&LɀKA}e@gIwzW{Ȑn5ȀC1AcmmտU2PN% ~YihPsC$p*?!V 8|.(OP  ܔ@g q?xhTSf\Pp@t)CC1' Yp0p { S'](Nhw?p>Lв V鿹yl`Wx  c$Olzw<Opծ?SuKuxx'$k!Z1.ƜeU_Fe ,V?1*2zPdЛt)<d M?-M}0pZgС@'wH0H.)%WCUW6 @}iqt.<o.PS >ٜ\ٖ 8X@\<'@U*}1 | <J &=[ 8t6j!@@?Ϻ󙞿qy#C@#Ϯ6h9 kޔk?Lٲn`m#oIx Ԭ;Qg u|ccj< Vr8u'S1J4 V?oCA 4SKq?wˀ'o7${ dP;;~]RKT7}FWSOL1M@~Oy[t#{^xnӏ<\g @`40Dܿq״of`i~?D3 z$ÍDA# 8~O.^f`Qja.  pJ?RֱVoV0tֺn$s~~xo2E_ @`V0dO2 m?d(V3gRU8@g*OGngb<ח /i?ˤ&SL0Px$,{ z ={>Ax^$,ˀԓYOMW@yG*MW#Vr xYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TOYH TO9ge pt IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/root-modifier-if-expected.png0000644000175000017500000001565012076022157030256 0ustar chrysnchrysnPNG  IHDR{CoIDATx=,IjEVflGc7*&QITfGx{F{d߾ @ b0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 TǤu+;o \8`?|SC!P^ bB@ &8vQٰ&|S9e7  T.,k_<+p-kh7 VN3dÀMb" }݉=60zʏ' ]S }_0ѢMM|nssWlp}q=:`8**~{d^'j-R#p`edôIB?> 3r߿߿Xwꕣ_ԏ7`3Wॻ</8~$^ ?l_=*o>˃SشgϣywI<<.+t+iﶊS&y+t `UCl&ssP@ުJP<R  1 5` qS+TT/_8@S)q?Ƀ't\t2FV3T۟-_n= v+~?p/ǘzC/Gc<0F<|J3%PR/P29ZCNJog |0uioy_ ׾l? {tax<8 Z=#wVyaS(`zX90;dſC}wf&;#E]1+Q5Q&snKyg gOzȃk+~{W* &>+&.7 F@o/^V?^) Wy`~O@go,  ]@D `&@@t#@Xq@ `aDH }@?Xp@ `aD;>,  ]@D `&@@t#@Xq@ _X,@<+p @$ J: @ \ @$ J: @ \ @$ J: @ \ @$ J: @ \ @$ Ih V*@% M@Dz P) *\Fh ZGCJP 2D:T J( @ Q @R@|B2-k '% r[x '% r[x '% r[x '% r[x '% r[x 'LJ1@HbV0@f+S0@f+S0@f+S0@f+S0f2W?$k// ~$@@$@x#,V'^   E@d:  " ^@H, KIGdY:Ni7w (M!@@ ͊$@x7q)@6+)ڬH wG B@h"  . M!@@ 0fi9+k, @ c @`V@̲8H ~UHY0  =V!f,/ X, @ X//8L`8_^jXq@+K`Iq<, %  \@o $ d'@@p#@Xq@+K`I_Xq(DS" U " U " U " U " bw}$| Pqa@*ePqa@*ePqa@*ePqa@*ePqa@*eP_q@jg*  S@쫪 * V\@ f_UEUJ1* U" @ WU @`U@1@E_+\B+_iQr  MUj@k P@l P#cEKt._7`k !`ߤn3l6v;>c`׭n"@p>R;}n`+}0}@3M>>]vOʹnKnvS^P[ lo*\lPxV`# lo+_oP~V`;Xk6]cb[:'WWBmLl^ TSI~tCFhe٧@lք'"`9G;`k+FY,P]x X/ v{ VepgCrw{gbpg ~o&Ѓ.܈6%|B{]Vj@>{oX1xuvO \N X//sY[ɽK5Λ"6q]uJ{._~풻Ff/9U*oOVd`?OQO8J gXP=v@[s\=pK=<l+pG(`?G\|+l,GI^;+{q.`o7 vR[#=Qxv7Vv Xwur@'h@[ Xv@o;[r*`*vݶflcWߣ#J%@ Ԭ TSF_45`ĮՍY 9 `/8W@X,o;m^cK6%,W@zN=<;q# [.;d-u:>[c#`n5V[a `u1t[`>ț42l.׷_Nv1zCUW[;=B[-'{@^9Vs\S? u*VPYK ͠fB( PIǹFh/jj\_V`#w sf[:28#jlR" o+s@V98l&. \e_l>>_^o,/s \ooVI v7{@$`p D Xg]vw{@Э) E@1`_w vn,ž:م@m0ѶV:݇@}0UAN;~za$}o-tIGv5P Xz:kT W6e `+` {+ƴAྭC\ڥ@m1Mo,nmmj+`+`ool[K掸o;ct; Xw- t %pVҿn@@ $C)nDia!nr7"`0JA`V`֑Fꖱ6 mMnJ`vl@q+`oupvõ̀VfVO`OSo~sFMM~f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0fZ tc0IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/circle-advanced-expected.png0000644000175000017500000002457311642654340030116 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx݋丑[ź5gA2blH&مS\ܰ2_șϟ @@{j/e @` @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mh-  XhT@h&@`  @Q K5@F4F /mhѼݎ_翥ozGhQN;vr"FY@%'tƿ͟m>;0)}ℭOcQfO4\ Qr|܋vnw5*sݣ  0~y^==߯e+_eH|o|ىz;vrc,ػGK8ļ{ݢ{u]:~ޡn}w}:Dh:F5;5SAXR|YoD4 hF:>)+Ыxp5se+ʹHVr~ ^`9vta=_g/Lkd!9r_@^Dx"Iy ZFqΎ4Ƥ;i-yfG_N} |ѩaP@hB8&/g?8rmfӍt]P[Żqrl̕]N lʓ[eEV w|\ISBk۾hw{~mr߽^tmZ<+}Qe+ӕ2D4wЁ{h+{Qu _]O|m޺s),eJ`OhSܽw)YzYE TrX/r_&>K9'_M#M; j9Eyr`VN/I,K h<׍"]Da_sQ '89˝4h |ǦuHƟ\Y;ӁaNDˣt t;,s!"xpWHig2f pYj~G@Ĩ6R."ZݟxwDNm}wn3NJRzSU3Î\ ܀zb~4ްyoȭ1Oy*q>%cF~%-] ,Øz +>5\d2ll-BnI poƼxv&9Cg;_'VvzqK?3M[jOb5ɰc.v㺀pwl~]w6w=,}ln u6Wq›Y[SD+0f္~.4 C#}7(IL_{,oSEPV0foW-^LYWa37 ë1p|n":T| ` "|?llkouLaT! `=V̕pQ,S}&~ukoqJ0g ?k}  &<.Ϙ.vp.svJɒG~CQr->$,.JAE^}')bۙa'qK.zy8,ݡyKqũLC}E8XzjH;f !}CɌWy!>c2pϦ=t|r{龸9[ 5?,اXvQu<ӿc}~v'Kb9]w Z_-k?uӆ6M;=AvhTi쳨jΛ)nɃ%KSO|;j7] ̀ 5PSV|CirFVO(|ދ%2GOT^tvp|'H}ޜ~w/r<[RJ>Y@P?XQ>P?y.ጛwt}oeVB~}G ":A}/ sI R tU`vA4\̦yӣN"w ) U`l ۉl 'q UuY+wI;'6Uj_,}ػ,|!_vN˗Rη˗'?;e}q`ָ 57GW{.6!U=.1./[@`9 ;'մ%iw[(~e K'a(Ϯ[gV eMfIvW[q&Sl~s׃4$iwEQ0WLYp>eaI\ųRx?ھ:,w?柦;󹔭﬒&ie/[iK x)] |wf1 'ݭwǛ?W([Wg홅[6єN0N'ɭSx[UKX.[B-;c3 _7-s;$}4>琗 Oqk'xa!݈[W߿v5ikёw3s'N:}'^ ob?-_0#YH-c?Π}uz7;w?EU!W {Ƈ|Ƶk [R>m^&LKv0p_O_RƈOT`|Nc'`qxM, ~֋ ,/&A^0Gvbl|]xEƋ J`QYFn(z NΓv>0(]_i<<_w=|Y>*Pˋ>x[ηpB^w vJ;2?>SB!1< 4;F魧 lQTx=]ITÌ[qn[ = EʏlC}V׾zo3gDE.O-ct>/)4; }d8mvq'T)pձnFla숟(j}\(?%9UY&9%~c1ʃɟTw10лId0 9vGLH.v4]p #C0D O噑')[H=5ZK$BK %m/| [ *pttw-$;_9gxaN \OCB|LM ?pQ (pG | ݫ @xrE)7(P>}g櫢5%1-+e~/5:a{8SfC%-$ܯlmld#7vF#,G/'_2 scO3Vᰔqzum,v~fzEq^ k@Ǹ5_k5Wo+M~< /o%X`tkП~ďGq+cѐY?#tk\ިxԻjc叻>[ m"ώ`ez]ŒqJh Gw+#&dY9V?'sS [rk'X|B B@P4FJ ' cL@`%@@%iT&TV0 @ J@4**+p  %DI hL$C4 &\D hQ!@@e@e.4(I @2 Q@q PPYK( J8L@`%@@%iT&TV0 @ J@4**+p  %DI hL$C4 &\D hQ!@@e@e.4(I @2 Q@q PPYK( J8L@`%@@%iT&TV0 @ J@4**+p  %DI hL$C4 &\D hQ!@@e@e.4(I @2 W׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݍ6P;+-TR-(EP@8H){ </!@zd+&@` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo l{E@[6=@h- @@QPM` @(x&@ PT@me @@(* 6޲  Eo ex't] |VU/t:1a0B?~$ ySx77.$ >/`$Z0ؒq( w lCY;o^1Wo/9hl+8V, @ieʅSe5_ R!F4=/OU0Pj}^|oYy a]`ײ4Nۡ+kJ4R-%~OkoG|'Sj(AknfY;:T?@q3tc Á y{6N2Go'W7jTo A?xޙ8,'Xݛ;mÀD?+ۤw-ԗ]xxz){gP^>>daCywGON: 5z]Ck 83s׶D^O7=׫2aST G Es;ΆJ?0D(`Sk|=n?-rQWE?Ow)cNG C9S 8ε=rz3ؙ}9lX\&wF:qqo<@Wx)iࢀŷ>xN@pzxkŻZ[V%|- |r =uͰS_ϊim k./ lCaqk%FmG8[[˙_]cׯ4~eQyGx}[FMnv0Q?^y$hfu8z-t_}si{S}uꍳ ΢ŻۡEbǝuK \|hconp s$~iiY8[ ˃ӤZ: X|ӧ͉v_vAݛzA?'\rE&MVVq~74>][?ҹ^yNV7LtíY;MgnjqVFVI3$P>U^y3|:g~ /wM/Z{;Ѣcc4bڦ"]Dd~`@*~ٝꔽ-ԧW_gX{ׇۤxbV3۽]5pC+ k>HL6`z^oaczo!ވCWk9v!8Нw0u~xvq,aO̾5t(3=Pm[':fOr/3|ٹޯbu3}]-U]s[\u1⹼vHawA{/ݻ ؅,?V}`ƙKV: Zeo`sq?:v=W+GսbG߸ص<[Q͟WjSf{_]2Lwf_Ttb<pcxV}K<;C;ഭf>x&k%gMa^imϬ϶xթa@zFXTm]_d8Cq{]{bլ~u:5*c([_=<Cc4l8Y^UƩ#Zi֩Y)m6!K'hX!; 6LWj_óA-k,죺&λ:npǞ@=Ư$q;:{F8]jBP:-& 6j6-{s?_O7 4;d|}r;Δ2|Xl,*q emfǬwg5<h68z1Q8q3` V HzD 4d&@ lqA7opmGwɻ{vb߿I`UNqy3|MB[iܻ[&n2ywn+S e&X϶ܯ6ME^HS_\8Z|L1e/3ՒiPhkƵ5 Tӷ 4͸fvЌ8nuގ^3B\@ =}:I0L _L0g Xl D`~ SFchZ_h*? ẖe3OU9 4T5;)?!lhY&Z 2 HѠj$x`ykCm8hhBnRϤrJ3U<sdhθr,%dbdv! @B{7;Y~5/8-3vw .>D9NJ_p? ~G~GPp1]`~&X@8_ xZYU@ ̏a=/8%_ͺ^i̖oӬ6 4'8 q9,K4[t!2uC-"tu1T/e~8]ohq/8UL95~Vq59szRG 48k:N>d^Sթ2n"j&PL9mǕ'ASk<+fH_#W(9gįw\lbGJ.{\&@`)$p/{_' ) Y+,Z % %& $psOlɸOG%w)V$n p@$p_mJ $K?O'm|CNG]wqy^3{J8| @`$p?20 G 4蠸E@I?AF pCIz I ^$p[8o8Ԁ<*GA'7HѝO Lgǧ6@+ Z $pG6 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + FejbIDAT'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^7*#@@58 QB@(  W@ * By N ooTFPkpy{2 P^ @  @ T@y@ި + Fe'@@^c_?IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example005-expected.png0000644000175000017500000003177611664232365027000 0ustar chrysnchrysnPNG  IHDR{C IDATx}&WykfvBӺEie$~) lDV? Dd6&"QZIC$TIvUl+Ř38]3_ϙ3gf9z=9gg3g@=ae< Q6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQ6 kQo'o#( `1<%ppC:sO, 7KYq,c_pߺ _33o},I f܍z.9t}ξ^{́k_sw|->tp2{1?}}.;_|}O?fJ8lM;x"_y~_&':W|Wt\F*DĞ wʁբJ4=O|3U>lgI5,ÊS+ՁbXX*Qk_RA+ Z mHWK[ |5Y >@uʮ_ 4鯿ձ ]#X>99E_}ĢhZˣF \<'9g\`  "P }}PTFh\^- h:T@A 8Zbh?WR;O*0 %@mh0̉߾+n/*tu9bXeZ=/HWw 442gx 5!SkPWwVbu$CMVI@r!rAGԿP.hh5 b1`UA" ŨY6/ಱW1Pr"H]CL  )Fͮ́X5ס.СI/ IPZцKb]?:TתkkwT DʴՁ@U:WwPr"h繊'-=b:v!qU׿v/P }- Zmo ]| 32cݶtPu__? @ezf6*F*Pobi۪{ kI@Z@*Pט 9E$5t_T-hg- ОjVzѵ%aqXF Xk/.Ձn'EY] ЉykeIUIAcGݐZԣvi}jP%PZ=yJK > $(E_Gh@ (ص6괏zVR#{6w֒U. hT-%&@05ao'}}6 -]f mW}mÂg~9P.jkOsU}­+?HT9M X\\Ve >3@fnt~QsUu j>@fC͉v3oU>Hv i{µ<`,g~-e/. NhῪtM P$`}.hޒV5@_I hj´q3I{az@PL ~+<^4J  ;hi%_ku ukGz2wgdpxց@{P=u%jpPP xGC  %FʁOb @mӺ\rTkYX eU߀¤޿~O﯊w?ڈsZlX3 h΀´T_\}Tk_z:?/ x$ռ/hsP)M* | tS=??]%P2ж.="X~&4ϭj| @$:ڵ:}v  ;%2)hk/כ휢ey<- hO-О?u s di]{6f_7U @~ C; Pu<@Yءxa3_DV}U?gO(z~ #{ѯku5 heNdLW̏*U"TA2552 P =*\;H_IPdC.3ց{ɱOw@*ŐdIiy#R=?*U {W mUz fJ˽@tb3ꒀ Bg#2L ǴjmUfN. g2ʌOHzP'ک@Y+qH\=4PREITW:GFOugWGCՔ쿊bJ$*6uS<@ŸAH hbzgmty rkIT c@ X댿oWuۓ9Py@k*PPm9]]d9D3_D&<P\U {jT*2K|pS ᠟A$`UmYPfA* ]S jşA vʇXPS"4_=׹ٙ!}J.d+kZZUw GZ|a\*OUbF*=d keꠁʧ?.E`UXV-}fHteU_e:_2"YJQ֡I tV%)V8ڟ 2<0(|sVV_=i6O༷gT`PdOM"GYe3S?=X=^l5V{)z?(޽ Z6V ~h@$DvW Ǯ_%U㶟{HUZd4~^|X/5_t&,]4+HbഏLe4g kjD_|52)Uů^vE1M8_33IDd ը!Qg]M3z]l\PЀT.Z H٩?DW_JKY0|k\wd`x(殁M|ܻ~hy#[T? yЀ 4hdRx4^4&D%;Ci Y1I8̩.AKjN=ޫ1¦5@[5!H"L+#Gmc6G ǯx_ Px*Z}#꺽KrJEU21o5^7c|?|? $GҩH?te&Pz49/Y c4 KY:Pzam-tUR;#'lsAdb 2@_06UA4`Ȓ5?~H4p+K:{dx@vk=_E:lv qw27ȯ)4\X#3.wȯP?j* @jg|Fj]xfA2 J0bˤ@>Ftk$[e _  e_kpK[Jx{ͯ@T58gd[$@k~qI5k~'gחP3?:y_!CQ"M<h<P'MBn- ؍|D @Ά5Uc-%[H6tA oۺr}ٯY@ƙvqbPN9ܗ]:qU ?^k(fj0A<^w{ŗf fCx9{ss/@v|guΞ{?΢G=ؕG_Ry]PnkKU]Ih)b_D @hv_{m򭷾7#\籵 4s襶q˦};=jj|n?כ"? G@FjuŝEՅw)S,`ߠYw̕v* 6'#ժ-*hYn??_y?u4|o} wtT C CY,Cn`?m/nRRֺQKfŀ* V4n@L yGCϱ7\:C'OwmΑ @5P2fOďq{Mu[~V%_:_aY2= r."bўo6y @EK<\l$[I39@rb0ػ4cSk֦jG 2=̈?Ķ|3=hZin-3f֠8 ryիcٙshߣE=rMbH@PanȭMgJ/GwE 8(PwqݱMA@YeZ/_1܂6@60b&1;m@ISWu3@o|ːaPq)y?|ȰE]5Nfٽ,?ѳ9a6 o zo-E n@ck@=U0ˀeJh0;:w@t0hQS>9pN"z?H K˓&#E_T",>NV1鰭ׁ@L[}'c!07`n@$HjzN KGCyW5* \ N:PX܀'@vI@6ʥ/R!iNN{zu?Q*@@ B[׋PB1<;5kol斛vYq@QAy+ Ϟh*f fC_q|ď*X /ܭ_aL@A^O0,%F0C; ``:8X&X>C ?]e -X&X>C ?elr8A}˓V"l.Y8G=wj a/9 GZl?.uD+gl>ɷLJAuqƃ-gg\(Aj4Nt 3Շq,uu>h ywZ~csWFf[0w~01Lz& &'KX6cS}~'܊/fXQQx/U:wxrK-z[3fݤbX@X €•*'8Ν{Cq/=t&;~=gmGǏڱ@Tȸ-,̆)p$a_\y]m$lDDvؼ_/{!0=`zƜ@(ÒQ9;m?RԜ@-eD`>]?ˈ@|Qi82k!Ù@^RIDAT, e طU}~7{t^]wlŃ~pI Dazck=zraoLas-Oa=mB `̜𩀮WVS -4+ Ș]p&DjՃ҆iO攎 |yζ-WC*}{|yh<{F&Ʉ=|o`}>.@\Xʚ{>y}l.olyG[@M4 $¥! c*j[k_-0vጜGP6;@їnF7m"ȯ}A?⺠L@'p~mS::zTwYDmm3Z!gUuj xj~g]7\߭7xe/!8zoP]/b#gcd3e< "Ǩ $ 'Op/d N;JE,}598 qa!+ a=Ϩ.Ð}@Qu7۸/yܓ~EoK[-AfD_gL\.+^۽ww hbaW*㾻sHQ>"{7ķKb] .r+B艞J3{Iywr+EC*; rG2}MǷcx’~ q7qW_-Yj= `[$,I?s֝-(۷o^>T?)y;侧\ѣ%݋պZE)8^U@}OWBK<zo*w~E_ŒyنX8˓/7SOžx ,];Pon4땷HxFw(``'yW9?ڬj˗>`%F.jշr.pzN2:ew=y1tMw}<Ǣɉ=` 47 -7Md>uw.O/ـFFDY>¹LZ{@w[ {5kȝ{#g1K! (wM*})XW=XW/m~v" \ #/'?d}W qk|i _<p̫_'>]A?VzvC\}A܌1H ND'?Ԟ GOJ+zs@Vq"WxקFtŽYn` =imuolf0~f?Ə~U-RHz=?sA UQO_c}wz!ژBeI2NNԀvy4W\}i+.;ݴT! ;"$L}W6͕ yh \`d 4)VƿG"vMKo׀#>3z>! |C6G[ @ Zhk,CB;{{/jutYCfIЀC@z4Sn H9zٮౠHuc偏}yk4[}M& <$IЈ3M@aWee_nl'1D!W\#_'>pzrARfl?~3 N4nk= 9507b0Ӝ赫gA/r4j2dB=Ůk; 3-J%zquɏV_5郍: ?6hU&z-0f͌Lj 'q2L$fD(7~+n)9 p$`'Ц#&twd`(NN,Ddئ4nm_57U.6h@tI-G&śrh@ѫN_vP:4`GSl6#NDd jzdC7f:I4oOk5׃4U<.]:xUyC6b* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B o* -a @@8 P(M @@6s B oE@@o|~c7(A]tn@ G]dCW1=R@`e`Gv.>N JXV]wG?evY ,kA bO[| BwK_[m3r!hȆ6<QO׬ޮڢR! ^I; ˣsazz}}/?z9BiCh Ѩ54³js_׉AS!4*[?_~Ap5gW/W[ Znyk=VoꡦdAL®Aٿ>5r~-;-  sVJf M[Z97o&,#9h*u32CbXo:q^ ,+ F -<ܷ_"ٰ<3Z 6ehckKrL>׷N,T;W>Ob꛿q@ 4M[>@J?u9|M= ¬3?7{dA .5_/|+ K+Ϻ=@uh z: .A=W=RH UE@X3U4_:V@UT&Q[nx %D|m}GPp5W+ lf@zwfxk旞yKd j %? 4C 3BȀ@͛5|iy@̰MΜ-͌_o3Jo eYw󈄐 U3[ZzȀo8zͣ= *{pBX=Hs=[Ϲw5^+ݮ3I$sۜδPX9fr_O'o{W|?U-ov2_}= L +E™q |V|NIpX{|k~Us==PK.ɃczI'<} t_ hWW50),l#0y}q@8Eí|+^v%X &0hjX'0U{F%qn:~2jfgX%6@T-ȃ9zX~ hWڟ+)( 7gj <*PKxwß}WYz,\Z%<0),ڃZ oz!6QZY>HxVԹ{-ooMsw{m}Z= ŜC5»3{_tF͠^j֢Ӳ+N\7n^|P__Ի } f3>m!:( :eC^:C}_ye7Z-?kүԜ|񖝴ٲ@pwA,EGl%Lv lT$?bM#K}t6 yڲ`,n<ٹp#w!f៿0ۜ15 : DJڌ$K5]7;px葝Az~c[@҅nA訋A݌Uȷu=s9U`~ߞV o(r=A{vI\@$^VkAA6~x|ٍpG{&r^ͷz6`g'w{oS~60(joao:rxPx/@sҏuLi  n,|.A+nm7ԡG+. o 7j*Gke~޻t80l_yT1P?%^|e?_{z ;?fηe #o#cүOJ > l,Im5`Z[K.G| J:o!8]kӊIT3{d<-՚<8@YsXV_zClyP/5Z۩08/H@7{{zsNh>3_ߵ3g{_m~«vS_c@~p 5f %'4C-P}#|cHn "C(Z`֛oU|kkd: x oG7/8  @`:p @PPhΏ5q3z[ L|@sl% 3N  8s7  P(І9kw;zYaȧå*{=S^ .nuF@VY,Y ʥ&u` `l\rWP  S@rWP  S@4 a4_\Zx@E7d *P|Zx&E/NZϞ9^:D@dR($@@l[4]ʮ:L@Q Ȯd:L8 ̏rjw4<E "nAs ENh_pQ[a$OM"@`h0(才;O$֣u ɀ8Bh>hmͻ!047!%0 @t6ǶپE o, J P(O@;}_ nK$V 0Kp1˳{AyZ " :r9VM  A@D@t( rZ>^آ ǻ[Q,XC@ ;ԣ˦m  0#0b .Z%Pe0*zs{م8`[9+AHB@!ug= K@bl8wqÃ*\@~> rkop#%q=lJH n lI 5q750V 0(70,!plnep Y ^@f- f]^#@zަGr^o,ŽO {_} @ss @`Xc5 \H@47F@`J x+nWz  I@l8wybB@S@45,o8a Ȭ`KX  @ 3Yt@sx/m0G&H@GPK@=h@,6? nK @`0&$*':$" hٖ33*C9;B# @`0V.pMNu`wGـk0M&@@E^zF6!(p]'W@J j KnDmF@K@U/%@@4r4A  n" qB@r%ѡJ{r #d* 2-\>{xE oY ˺:H :q' Xp#ek@DL"/ΩZU u`#&jSӱ ȨXJ c @ #Qtn:q*A_Wt @"/Tq"q _JK)V#ϵ^jQ7whrg\o% +?y8At+|{{puoNaz_C!T.N/<񯶾W/eOD,`vwҞb c6{5Yx,S57XA@[Opӽ07vb l[jl75FX# k@y-'`?8KƳ}5QW$^ ݛ@3M0o~;K@Sk@s@y?@wp7]9uw+l{:y8b Kȳnz1</0x.3ek4_@D/6;qA[R^eN^[|"aaޯv X S&>&fXԤtX@ԸRMUH~|57 a-w,ko}ঃv{?~1$ʫx!<H{wE v|I@B@7l ް  (T@Zx&@p @Pбn~ 0 02 fT#@@""V U*T[S(B@~5cDQ j" 0:#+ZE нQ}O{HI@T }!@`;lwL( &4ۑ;}#@,I!@@fo\- !+ J OIDAT7 _@@@ C=s|!@`2^ijt$FQ] Dt0! . ^> 5s\% ?R^jۥO@oЛ3h=V X.ƒ-@K$[ǥ@k* 0we S@hA L" &a?hԥߠhf`ꂺ'PH^ MO/# KAX9qjGl3 @@ !] l 8>]>V=Bf1KG;2ڤ'xgЙl4*V` m*6f5A# q*1FlmK !W 许8h-rk,+آCϥood@Y۹^̺r^ʶ^tf)Ե9+d8Po?"F#Ah/ 8mO<:Kgא^fa\5 Dt" 8{x1x0G^}&  BcC'.p0$|)0&C앣+֢!\pjnbojX.A@̷^j][Sk*J@̪+R`*S rwfѨ5+42@\ 4PM j_]ݝs3B4gT,]ZK@C w|^ngNY Ⱥ|};_A, \McMM2z '/%K4hrsp{L/L[00*`oUq@ d@_G 8ڨ-0um CqfǨϋ]9o?ON^Uƙd/4"pidf0S)3jx/O$!ȴpv쵗@ -f. f^Û.1X[ T16߲,6#C@@e!/N2#th'g0? op׳죽Cj"k L! ` um @ N@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  B@LM$ (. @` 06  H@)$@@ "Sk  Bߙo}IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/hull2-tests-expected.png0000644000175000017500000001572111667564602027303 0ustar chrysnchrysnPNG  IHDR{CIDATxyرhq@D# >DԪ$徿~Gy敬bG@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W63@Pxe @@8W6~OW ' ֳjgM{/!nr5g[8T\{ȃLnN<:@`1mkgS ޿OympŭWs<{K@Rq[|v_E\yGT`u'I [>ѿh% d+pEC|׫!_;G?mg]CMr( F ud[`j@ @% Q@t= xz0p*础ǝi MKlY)#@;a(L@8\9@1OruUZz{ț{V@56FuVonߵu{l%/' nG՚:Nk@<: k[j{LaaZ![}& !@F`#h/{ hg!1]wRzY^&[@Nׯ(nB..䦮WstK~uҪ%Oku@w_7~v{v= pfg~?@;s7`ӿx{{n{0X;V nߓqKw<`a> vjii# :ݱ:qUE\=M?'0n7&t10w=! @Z!Ä>~8l >΅?ȅ vx2 ZѶxO ١=;uMk\^qV?{_kwGPZpzi}_pnrF{Bn,>)npDՏ#M~񲟳ތEwOWKҸ=o[/zon) 7ok {}- ~0on[d9~ڶû}^8>Xkи, ٞ} 07ۆJ6Ùw᙮ 66}مb᏷ݵ?Ny{?3|SI0y7Mfo|=\.a0ݪ0Z] `v}ӏ3;$t`` T?4jzTS;j1ҦOxKk=ot}w:FtKUhVjq2A9v^`,Qo Jy?`,@ |SxP'j?a9%(q ̇qwooE8M? _>֝Yɟ#LƩpu;#xA4MYf[\&&?ޗJ3mgf9j?E?4 '`Zo ;f>`I0w_uGI@ylX^=ExEEN0У/{˻smޟs^2.plck1:$ uЫ~c7s1Ղ0:5h8 Ǥ5jNfwǛ>(O+}=hsAj{-[is[?]ш:-; gjy 4?U\ub\-qCqT7b6N 95>Vo wY{^=tΧl$8,L^Λo],^˹vz~'8w fD>'JGo?l̝8ҤN0-Gyi?~^?`|ҞlO>-~msBIpB0R@ x_N8'yiz9o|$Ɔ`LQh;$BO?]o.p!y#`kY*D Hg&@Z__q˟j^mZs0FaYGS{||A cKgQ 8_\`|)/ rwH >N_c#/3CpVA%w8@O@g۽~]_-}+=_=TW'4=翗i܇ҳz^?>7oAQ0@`!馜? ,G?ص+.M@\udȀ(/MV/ؓ(syPbe?֙FF~6'ܛµpUn阷쫪! VV7>+V oZp77mKIV߭cL@4kX㿹ߩY@tޞo﹥v<p3;>p6o}=pF[gK9 N h$K&1\ܿXN`;:S~~iPqo ovLBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *AalBh( 6͖  P! *Aal虿g"IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-concave-hole-expected.png0000644000175000017500000002361011642654340031131 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxQ㸑.|ނ̚/ȋ̪,@% qp;S)'zV?G7^:&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ڷ  ϟ}E 3j&AׅA.[ [WsI ?3_?x0 /+~ñoiáfTA&OJ[[QI_k2^vq¡F) d~]pE㡿F, d~-pyEvC^x}~0V86a&9sZQ 5# EJj~_ҫ _0Xz<k~/O~g;@Op$Jg~gQG^p70hw^޽*_a'7 H޲&_9uapjK uɎ084@ȱ%k/{78$o& n6жvnw'/_u\IF7Vj_ Ͼ_ iMmO- It+gܳ7gJ@jYoxlY ґMm+..p/vfOyf`署֥'}ӣѢïW;RQ6~dM{fÍթӇFM\dPu>cE^ЮtE4S!xqp:qsbXN՗kl9 z1LoZZ+מKcwTkKRn/7zvzo*le`.l9a'yb7q/-0}}7}Ys䥗Jo}d./'n}dD:蕣qRb2ɥ<'T$0z>{uޣUs9u:_ຕ2:f*뼍 #T;LSSt#t:vxG׏T_~r;{XL=ۻԽ@qNtԀV:S/RO}_JRg+=mpδ4ϥSU;79y9}<<R?֙کzӻc'cIK&ʝZVxzӀ[jj^jڏ)C.RWMo:uǞ8bȵ)]4fk~,5SroG u5Qjԩ{\clJ׺I:٫n;?Ww;m\?utSmOkg7#hx{ rNRR{6ܥs/^f{U MrjYZ=Y[\({GOns6tqN-ĘE<Z[xkZe4K/ $5qG9}A/?[.\Ld/Aٖ`[p-ل|YZϼta+՜renk pb!^:|}a(WYó+n~N_jp8V ~tno#|d_+dԖ>~OxJ(mȡ(?!]~~[%Y+l҇[xf:VN7|`G\*LԖ;ntؕZ[ ~lse[{k!^/OqC{nqqrעNjRcci~P364#:^vfŚߋ1z>C 4OVlԨe"Vskeo|ewX͆/ǟVZDz7l˯bځt>-Qzݹa]衶>[p8keol σWz}8@ܧF},r>^ԥj-6rl eٶʷP/֟lykB>0Loжtk0y}QP{RVn\ȑj,Uh縮ȜvSfoK@'g e?VſYϰ>3?W_ OܫH/ևQR>?@Mw(;Z7|QyHt޲4Xc?L+8]k BT+_o|UQyŗ5/5WKOz/w3?CgoxϮ*H? d@V^* |R7<5yq*eG=}rb;YmҷkT #]y4TfdgU[~sO"ߍ=uV^޳|O󏕭"T-֎1T"c**OXe>[xkq9?R{}>D'ҥ`3[OW9ew6Т=+{Jy~z/JEi1\=C{o)`,=g;a4"׆[_{e6V)j>ޔxyK, _s/?D4!Q䛅.?on֏|ll٫3νg þ,`hN̊LU_)~V/!W\㭳^y_1+U~t掽,.xh"MvԹ{һ?,\$UrjV<%BS'o)(5ݱŌs[O)rF5<rku|B`ʶvCiY}E˥Fe)F4T M`YlƟՙ WjPt\AĐY<J!aL]~\ 0ہ޷V*;~tߩmޟ/w۷'->bȉS:Gh<, f>]*@,r~kjW훹/J8 "', k EyHVcNCQ[/}1d8lbCfѣ="XtS7RϮcӼIY1EQ/&r|TŇ^'d,3,(V'].Хo(;Zym1I1l-Olߩxfu2Iޣ.RQX#6Sm|ck\ 'qlƛ}cϔdޠ Q1c7fs1w4Ɓ˵ƞ)%@F3>^ khok 3=-UE}Nc+n{atAp4G9#t>-]niRi= ż&5oy}<Ӗ6ۧR@-~dDcqyϸB1:)$;ҍwţ.4i9&1c̳iG {ul{s_MA''.`jUk#1`=bŊ d5/}T#EcT@I4ܧ#>eS΋܇*+r!k)tΑRi8!^ #;]ML3h98~>2I{: Ӎy_;Vj;GOzؖSi߯-q+ǜuף2%v`do[eo[bfIA\9OSSU,_g_v^5u N:,>}}nIКL@l#8@v/|16" 6L>V@y߫1.% <}pcQ6?>X@ rby̒ hh&t&:Cv@" oż&w5o_ߊyhL@ d-_Ijٷ-b }ڟ'pȟ}xㇻn~韾m>& d~@~7ѿE{0'1I(ѿ[Gj1_\_W џa-~ǀ߳0\@ ABƀ?OԽhqK K>e`ʱ,1菹ԓw-&PnxK|eF[Ā?^[p)1菳T\z|1T 8c,M7ۘ>_u(n7{74e 8t7NxmmpwBt&BMG=*XW nʁOWo"u$"MƽO@ߴ, @q%M'f[ A1DOD߀;;/~ yW/cE׫x56Ā;N& Z?6'ﺓ@E[ 7[!'cD Ɯu*5J0 ֯v  @ * ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   !5zIIDAT6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@ M` T@   6 @@Pt&@* ^vA@k @ :xm @@Am;@NRB$6xnUIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/root-modifier-expected.png0000644000175000017500000001641111640436733027663 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx1oeIV6jH6 $go!+mdqF+#Ek-GM33;3g֭s~߽u;f_ VuL/ H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$Im 6wI@k;@ M @@Rt&@ @ H:xm @@x TIO~y#Ǐ/ zfm.m.t|/oZyGQQ8 ll%E?K~fzEaÎZ~wӿ~QTu9Qc/^\c>!P$__|zkӿ7܂/^ҟ{ |3~{+ϼ_z.A_05 @hH z @@4@w$z=LA h ;={;!cS4 v @`ȱ)|C; @`H0M` 0rl͊5nV x* L$ ɠIੈH" Ֆ 0vt ?< H@t4 'pzvUos;*   0W@<N l`%./KQ GLH3j @ీx4( > @ H3j @ీx4( > @ H3j)p~q7f@@ 0$% @jO   PC@P' I! jړD5T#y}s = ]@l}27@OϮ4EI6}HҨ6 ;l[i @@l{#@V ;l[i @@l{#@V   W &@@KRh( ;-@K}g @h{.@R* J%@@ @%X @wGJm  л}B#@@%P ֶ]@>]7<rNK%! 8y<X@ xN=5<' qo[n 0dP$@`iQ @`0Ƞ9wG+Y@k_ o v<㣃xM騪ks+  PU@T9Fe* ڜ ~g2TUymN~@Q 6'@@٨U@U^ @_lTF*_߃" %qNϮ-^+A@S [뽰i`/y~z ڂ# f, @F#NoCLE$I@d^O.g F#{}s?rj'@kU(8<,~'  ]?  CMmA`U B0  E@D> P( ,'@@e @@(Q@IrDQ& B0 T8 lP\"@@az$@%dGlP\"@@az$@ť^tc$ 6F HM`kH  Y$ 6KK'@wrVuzvq]3=NQS7f '@`ɩ3L@?}x٧Ԏ)@ʱk^ o 6wI@k;@ M @@Rt&@ @ H:xm @@x T@$  H* ^$I/z+I=@j%@` sCO.#5^OgW>@sPV;}> . V'w`\mNg@j]T`~)`)@T[.zoV~8>:@`)}~#p_]Gq' ڙ@uġǫ9lmyQG?}qm@AkOSPj_2F j],%i uF` _B` ?,h+ '֚%:$@FI~VqYxBPVߋ[Ly𼏻z$@hO?QJ*|dm էg K(c2`6oل6xN@<\? ?ϣ; ;,%)@-k `' (3o,+ z@ %!G@Kje2}OWH\.' G(??536Q+^ V+b;bW?!C)t?KC5'ƛY؊IO a_0j߄I?/cq3 |}#Cu&B3r3$/a>~<\S!}E/~=a?Gt"'Nr/&??4/ل6Q@859~:k#0ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a@QjejaF 2/  F@F P& ʼ&@@f!@@(a`: sIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/circle-double-expected.png0000644000175000017500000001772011642654340027617 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxgcr4AӌM IXP*{v ^d @0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@[~ǎeZQ'AI08( 4YP?O]) & I~eʓzYVX~w\=6c 4ZȦ0XxUC6%\a$@w-zoЅǻ]Er_j0Xii[Sº$ d<~*pvTR. ނz_j0X[[ثiM`I èME $Kۛ:l/ 0xKc eM'v^B@@}_dz p? -u<I6[cz}7vo‡I|3J\.j}]6uN'Y% N҈.CtԬC.զo" q~Ua'o/Oom+\K+ٗ}ʦkg6nbT7mnu*IE%hPص9Ur9bQX0CǾ8{w˵/AOm-؆lXl!>sօfqY2<ֳБRtYmU;~=eqWKqW衟 {GN1W2:;tR[\x@? [C0b B߇WzM=%g 7;# 0n$J E |{ywP>'ܛ4]9yD|-]C1n{=1swwvM;}d|{yԜ onzEǫyj<Ͱu4f36bwO8^=V>8Oo6F`+$ah,}& 8  ^M0 '~i10^D. &egw;jrIs%ƆƵm5~:? 7wNm IH3 Y GpC2>'4X?ni;#6xcpͣ95^\>YL_@|?-5U;UfŵopI}L~,=o[2P{ӟk7蓀E{HLߟƃHg?Ӎ@  AW\3t`(<>oakALm;'='q6y _gp~ +f[psfRI޾wW@\ݗfanbfpo \;g#xn/+-){1NPY0祍/  9 8~9(6gܱ t'?ž;k.@=?=xbb]x710<ׅI\$d}_q- jb7.8@=ZX׌v^5{?϶o>48l6peG6H&)m%p_dS;)6j8&@?v"}S"\Y:W~'7m`dcE 7ǟgj_-wzK~/R&-B2`ý1P8d@{ /ߕY٭pT$>@Wj?MJ:LpoﷅƠ쏗/4CEom0m;;2c?/~[e}HL Q7E7_acQ \lw.7dXTVDtdv P5+梧%   =*V׸f[htw=ooe ؃ӀTpR޼Ơ~ f{ jp@lZ`UPKiyLpUX>5)E͖Nʽ_`(WSh '^^{obI0M{gg럺xVuݘ&K݊_Np;[?ҌY{#77[ xw_ܟ`vgN&nщbfU0s59۵]:O}{;$?>LѴ8 %&MC݁L \$f֤;OwLGr;="6|pƮ<(>=>F?.kح&o=N4ozȚ"Aߧ֞@ۜf/pO;ztk.yXWP8CO/m {̶K?̬R<%q]sV1Fp~Oߟ˯/x1"&`?O9z!WW'N.@%b`7Z'~K.dxw\ֿ9'bnz*1)/`?< *v&7Nn3Fۈ [A۽35Ibl 4!z b *fnh88By:Z[Z'nΚKkTֿ);O&ީ{(葀N tb`I/ _&< 5Z-gm)bp)^$zVZ@ >lE@h(Jo%y@m"aOܥL@ƾR_+n߳/K:[FQD@fFKGR))J D'hV%$;?輁k.ֿFP?+~y[3g^s`g=7svpu$ool { wbͲE@p)c?e[:(ANwb4-]^mh16ʟ@F 1p8po(Ҷ!ܶC (Kw-}bP/6eod30fbeJ[˄N/ lOyQX@ɼ , VWSY)V L9lpro8 [4( ވ?ŀܟG@"߿<3 S-$ 4e| d[>8mkj_X~m>מsV/W)m Mp6վȮb_{X;^tְ{n+ݶ慟2l51A ApT TU[c_kؒV+6NYǀpToq[a*T(SBP4lxu-} Z } o GiVǀ? (잀ⱔc֟z, x6M XAkZ)R 41U?UJU,"L`'krV T멊"G[Ky@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!Ⲙy@^!ⲘyHh!SIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png0000644000175000017500000004746111640436733031313 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx eWYosRS**S%́(Ct!E/҂жVlEAYq)(* KlZRC*IHR*5{{{>w}w=z>O}gYO ]"Sb@@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ@%T)6 g@E x @ PQ@E+bC@x TPъ%'^wjyE +~;?Bf>#c"w^=>^TO̽t'OgßҺ]uI߀0s PX.#Gej@/`h{*zt #PTvj6KYO23!=:;sM*Ԁ߳7= @+\;st]/ gϊ.o?mBL! A%@[/~6GVpHshdXp(z g5@?%p:a!sJՀ8tdk^`Xk9jId"jM>:g0%7OoO!PN@9etr}㝯x-ě?SH(Qr8v| C n{q@lȨ'O}QN[i<_sKL(7ҀPn>~fC߯o!6W7; -0[:@d2QM3 p=md k;h֬ힱg?Q78n9e7RԷpC Wgey=x u! _X]{Zw*jWȫ/moo?td>wXva<^~/@D_mŘ4cGNٱjb~Vbi9W 쥫 T&G_t^]ki7~v* ~~# P?@֟f=?I߸P>{~:o 3Y=w{m"t%p|!tC#ܡNy@p&Ǐ鯙o3 q4fncY '2G ~Pޯ}s}mpcs:aˈꃃ͝(c[.53ELPԏ2~QxY#- ?,3rg11HsOYy=r i"@`mFl.P gL1Ɗ97̳Rh{5ҀA}c  L;a9)V97ft'x[P@>WW|.W66ʍj2a$k7.~^93G҄Ǵ|* *G{M>KOů-+.jJ+~F_ eO8; c ͛];vo_6ʛ@aN !G,#n%K}CsߋD\U{x>]:јZS^}i?w7w  BD@"ЕMGg; >\nërG_WEW;Nv^r]*w1mPSd5#;[brP7hg.w6WţgQ . iYEiZ㧟{ycZֲKwTI ) uzwR8ͽe<6֪[Hܶ;w[BZ%EN'.#!?;5?u\`Vhm;Pw9y*aY<{O}W$ BVf)iK|Y׀?'~*ͰXn<:[NhOEk-m?oo~/L.}{t4߅W?W["ZW^!7mh涻8F1rhR7ѥHlm@~ϣw6 M,E?}K:<%u&pI#ކm/1_vfU/Z=3p%o^WE hHs# ~ l^ކX.VnaYQNi޾6o}ﰋbEcᕼOQN͍LwFꟼȦZ-]C'}eL|eуaN_xeO?߽;G:dS781wo^| +Ϝ~c8cٜѩZ|vwBxWnmʈٳERwsQ) AA ԀyEQ.X4wy+=CG}unR ܟsjڶao=\;u~[{aH d򡻚}W㷻coЋh3-[m`ih}UixK%8kέO|O6C`*~CC6mX(Ai7ek +鏮}[${ ƬmK&$U ^ŝ빗.7ÚxZ('nAv%m)fm+>|4o`_K k>wY֭rug ih33/Y<{Ϊ@@o:S,Y>cc-x\ fi]wK-|Vl-@ٻe٘Ce5 W֬ۈꌩ~+ޥ/T~uȘ\g"!qvULy<}Mgw,~xEu*}gGƗxtu=y3euH ⺳;as=7hPlH |h*G4cv) o[t^ܚfelkWk[_hpۣa?v]7u#0JE&DD(^;?z }V}XgMZmӖ6];ߧ\RC3w֜s#Lij[YIڝ;mzh=sМ{qNW}CkZXu[T5 eV%ڶy V{ϟwκyoe3`QHMss:ljimܼy m9K.1sc2`KG_l~է=@xNkC',@ص>@,"[kgyGz= d@i"+B{#7׍@Qo/ Xd*Xi0W-<<㐉Bsj@Q_g%u5Zصg,W‡Woi!ϭ :2~EcɿC3d5+Xc'_.̍d+A=I+ֵ,x{\X?4ZH ϣO._`1h@k;vE 濥;#}D ɢQIsyS/Pc6=9AJAs[۟|lPә!kXjJVjͶ\Wo=tj;xVQT@YvuS]dlrP8N Ҁh ݲnMp\јs<9C@mP(@9me6GR(qkWՍhc#nLy/K{6l⢵*-Xv Ŋ=l?S7ݺTA4鞧9PxjՆŦ6-u n(Z+noY0Щ^/4WHMjVVY#h(N?~"Ҁ?8ſA7ܪ L;^֭LlU*=LZK_8B҃קZkWؠ ~Ol{sjrDx? :Dh {.g()ǽCkN_ݧ/oiZ=BB%QZkO=+)X t=p_<ҋf9(Z8 3(-6<DfIj].`4X=Pr_Y{x^ LKD#/[y P C Y"PZnjʆ++B'M~ 'Z-'(\XxEk!m"ehD;d¿ /_Ე:>ZX|a`_7[Ug8;ڨ (-6$ c`C9)}{!0 нU~+L!pkCi/Ro).TEqЂe{PB1?A eEʬqh;>0ga7Vh~.;Y믨3SD2PM @&"?%/5ڊ{{O{rY NbȮRiUKrZ @h,+A`"ϟ_r#aߒ @W)|J"`7u _9H_U43x1Y _^uHE_MˀRhb_, FLJ"vĖKdq;J.Z3.*o8   D wjϝu'wWto \LԻ`}$f/P7F`].I&ʉC@kW ݼ`SiTK[/m|ݥ-`OF__v+rL|'Ji:}f1y߯?j@8刖yK Ubw5ݮױ mG.G$&Z65o5_ ;|R[.E mZS'g e ]^U{`T ?ڥDѐmW"hbNvk{PgyS;[cp_R6rn4 v1Rͱk/:p9y+?Zb%beMH/Ўz/]J<8|Jlb-RiOTRv)ZFd3 gv$ϲak^jY;;h-kv}a7TbK׀fGF'*}Lhq݉n/hKkE!5'WDtzr_عd6t6Äjov)\6*L[_ +1O ;~Z6j}SG!#_f"<&~lZLhӛ#7O_\;QG:=QʠcELWioHV. K5.Q&\bŊJzITaLr7*;5E( zKnE hI2hҀ3ιگʵ[.X=. 'vH_,Ug2* .Sz#S+H7Oajf@2í{?@,kgmT`NFgxx*Sqh;.ۼPG;\é}SJFF܎v=v{|A&ۯ2}ͶHr׭*aa~6)dC7Mot`ZSVa[Y .}o{<>bc2PZDg_1o ͟AYoUpFi}iZ-]EooNznӀL: e~4[Ǽ5VG' >@CU5$~'yw7qgדP,i]i:vFiy9}?np-,*QMw? LzopdޙǤL4@nx s{E}C311󇏌-ؠ7&n`$nܥ. v/2;$ TqdLnvm-f@p弮~c~K=9~!sX4`ᬛ7w΄^Hd==(lFxs W9%R_*s.4y/т68 4`Y~|g{i)(g#J\6m)ys9|!7Ķ=MG?,%$];l(@N-XEC: 6 W( =r3H t[,MyՀͳ{lI ia=h Jva˫{ k"O5L0Z5mɀ* Mï(UWdi)8G! ' N@Ҭz B00E׮% ʀ4 m?C2{ߘe-x +/iw< :C8z>A^?{Tj@,ҀҠܗPڡP2~X|*~-V)q{ǛIhQILfd4 4sm [MJ6msNO>sR[;m{9t,Q dڷQxge26]Usfz'H$%&KӨ%y[o~>U_kj))U͐=#5^r78݇^77Bn<hHH _4LͭyFssJ-dzɀ^薳YqaIJfOѽ$Yi7noMnߦ?+|+UV/L-+g%"Ԁ7|`k}jZYfnq^x#Cg1@FAo4}.ʕ#̟d)I$g(~aʑKn߾vOϽ_>?/n%ijW*3PܻC'кkqb Vn o=᠝wŐo퇟q^ְ[PJ.չFnwO@tc e@!s;>:&ҡ`~ >8+nSe&YվSQ#y6Ri9 }>sȚ~iUs2#'=f$)e(%ti}'Sn+V JPWE bp^ :FvnT35a};?N'{StZd{?Aʿ70p=(PxйD+eA! _v?|Iy]ox%i@(vKb&-t{YӽxOHg.d0eC" p# 1 6  nn|F^&h E#ieW\0ny>Z1N5.Zޥe~J&hFixzt.k4 ^s:# Ț~ NZ0th (pw_y믒"^#P?[*Y ׶&z)[E+ɝo`+/,DўEmk%;ep?̘ ~lPdvG@1 pWOE6;.W. ? J n"ی!pߢ,j țܦ? Iug1P&ڷ(ڬC@G41)Z9|:nûMBx}pL`?>p>w$]33p |OF75wɋ*Zpm᠐՗6z_/ #s/mO?:wVҙ)ys ȵwgn%4Z?5 egM7[ 3מiiI.tTs(Xss׆+r`yVǂãqD'=Ư}rN@d/Y?=nI Z{1ȩ@޲P' RnZtU]PGֿ!fE!ֿ{l٫K4Gfͮ=b ]?7lZ0DZ6 dvm4 6n==y:4RDԲi\|~O{:k8;>8G?"CQM̤d Ԁܨ++An+_Eba>{?mhP9Z;U)̐ԛY!%6l3 h ɾ/ hҀl? &bux?{, 1;FoI n @ 6ނk|} aO6#Țf+sz+Xڳna!L[ۻ-]) .!Ү==^ܺg "o_tWdg/O~7l #?(8Eٷ9wzMt3Lgi]ٵ'>Lȏ'ЀQ5UۃФOG_j h@ Q(">z}LQ]FG9dLbPn_Fu'$0}cAX3=HÁ Lu.Yo@@=^˨8ig>I9֬?>l;ӆ~8 3|Ѡ4R,N=b( .A>ƅ^wD?+ }4=vh5T*ڧK'Gy'! <8o1"ӎxfX8v:{%Z8I'lg'+ b1s#g5쾴%qEo4 ?^˲rj8bq@(Xڣ/dŜھx>xYeJzTl ]|jr5{c[yZ7gCOӯݯ92S `^~W'ff4@`%"&CɊ=/9j]udo o>vWe~ͼ{nv1z]>:>u] ῤN`i@K2E+A@9w Ⱦ{$xN_;NU%GrO2*zw /VA۲\h Kk'S-Ϊ[=JSMnlY.IzQf*f|tNir#%wQ C14Yߥ`v 3ۣ;+D4-MDQ-qtoԿ0K0X99JPk$.QØ}pC`PA,k<tzC4\J(,i b$f#u$|(=>`}Ŝk֟d@/< fwh@Tf*AJtz99s=ge!Hoiv_3Y5 Td5:6jPW_ϙ_@P(9& t1Xrl٧OFY>Jvvʊ) A[z$jiYҀ.Iv<ՍTQ}1"ܾE-?"4@ l]ї75@CCET R^ךyeZ}&+B79@mb4`^Cp뚗PJLGdgAыWrY/OF~XDՅ(^4@EElJKvCf)7xWʽ<k&P.huwSo3-{ʥgb&!PW'XG׻/_V ڨV&`&L7RoE{X\ 鳲~,%3ՇWf-*{c'O@rb2 ШYu\(,rv-~G_n)p:&\},F3&k|8%awkU׻t)? &L7roN~E2Kr'-5Ci_'DV+ ֟mÝX&OrrHwt@Ku -lw{:WwVۻˇ]ҲM,ݭ%`neuS &:\[T((w '(n{ɪ} y߶64{AGi%L+ޡ\pt# IDAT h- ѥ(Rӝ& ]K2V{i; 3KY%K}pa]jMq_K44`A&pJų'ey93O_A*]9@NjogL|N\W$ eY Sr}[B1?%:{rW=0F2Bء$ e@C=8|g(t ?ȇS6`wJwΗ㽓|ukw0a*BHESL@1.3 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &&NzJB(IE @  @JRd@j@j@$Tـ 8A( $A6 &3YiIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/projection-tests-expected.png0000644000175000017500000001331411775004604030414 0ustar chrysnchrysnPNG  IHDR{CwIDATxoyR] }T%q T !K}A/؆. X p E/\(^u" P hkb؉bِ 4vJ6%;gWkryGj3;MJ@<K@$A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A @PUKfO7XQ#C&{'- P8b@(g)?>s=Fj !lwyՏ7nf 0BVt%u22V=nEP,y"aIzVDDӚ3y}ӓ967tl|?˼?GMYZj?-)-ݬ5_ jRߙ>r1O *`4jZ^zyDڋO<̙r_czߩcSƏ~M~xťr螁ӣS|)`tWl"s]X:|pjYIkſtKç!H`~a8ۿyO3iRN}]_o5X\IvN>eI[3g'K׾gZ0*(?-X(=cwg<7=i@>@ne(%_iuxVU)M.|%3GMS+oIW\ˑ'Զ,Z[\IvNÐjIVB@henՆ\Ы^Cۺ|mێWS\r|ܿ"ؽg2yCݖko UT >`[eO ?yR`tpFد͹ KN5_{Ǟ9(T1t2s.%hUC]mf>%Rs;S=a!GpG }*}wmٶRP לe}tVKj BXm`؟{h%aqx@? Ii{dYkda/hj lbV8{7;eH,$;'V? J&IRp 7CS842P~'//*=Ct~ϐF]dZLi?r`ۛnS`MeW O`gK&ӵY{^//l 7:s~q~in9iW(*^5!vE;&2%QIՌѐ>KD,ge]?½러T*r/ L~xָqM2W1lxo |Տ?uAƹ*e6N} }7S|;WaPU]pǑe`[y\g0 <Wy dמ.™ܿ]XescF)h/ >͝cS yg&Y7$jy#yfۗ7-F?j 5(- f܇"h~TqNۡ?Jd(tc_(?n40.ˮXo#߃?{;u)Aʥ 6%24l9CM@; @COoZロo(:X~r#FzrMRu9 %@CQO~+ PJI~hģ'0_efP&|u>;u)m)}2f p9w (!e`(_WƄ30>F\;@A 0;gAG(0Ѐ /5s9fK%0 30>[~߻:П{Oi) ; 0J20aqXDN6k@诿snfh}s #>PywXsstnf76XoҮ\ȋpGr :ZѤn;C:wEȋ)d} @ÚQɺ{"j h|th"4gz>NsW?;x拏xfk$9Z}hژI;}:[e;eWhf+_/?hs잛;f3'_O`3 ;[?[Gy fmwoA%YIƍ4PwxܽSce%~-.ijC~k@tߘX3<~RcH 0(Ggy( _hjvZ4i<6RY?[eXo%`o>;gT\v}w9;u- /k4 [|k~`;;^&`~ b `z%Hn71Mj `#dO>n@Zl8F?$~2`SdCɀO %^52@Z؂Fŧ4ˮX*@D@D@D@D@D@D@D@D@D@D@D@D@D@D@(=J (;JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (/2ctEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/text-search-test-expected.png0000644000175000017500000000704711745120722030307 0ustar chrysnchrysnPNG  IHDR{C IDATxu@Q)t@194A?PV 5-Q5_'zk@D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D @D p׫_OW.ɯ`\FO{'o,mԟ# o_VN_:B;;{t>;u1LvDIS=yH_I>F|8 fEyMnV9ǰk&ǚ ܃=M?cs:[~p `fb.xrr|^} e c|@_'܏W}\Ø{3OVn0GH`xewDwTH'8{DÂA|qk4<^|72dyqGws#ed'`38*esAk18? X(W8wT?+=Y v]>;X 7|hߋI\pLؖOIzYmp ꆋiYx7 owNql Z@=O\ ̹axչk.^zUz~˭ޗ[wܸX+:Αζχy;}~v>;yd~{'.^q?op1 ۅ}{!0O7˖mMm1~Kr_-}Q}|f g X?kwzտY=qDZX3?Wj敟[{aBy7ZYڬ^Wt_7V;ڙξ`xW>wN˷zks~l~'b~vvocVY; VjXSzx9`ީ5?{13euˑzy:g;'ih#_hv?j׮f0s69=]8+ʢ0Lpжk}F3q @ޮW:M'`i~}(Y+#齆Nw=\]o߾dym Q<72y$ܖ>~S0]n1k$~o>nڡ+QM?7 'ǶY-߇ټ73  ߚՙ_o&<3vs~N0c>}~>ZN};&N]yysQ?} ~`~4ȟu3_|gc~_ cW5~O?(3yνAN1>O ,ޙ}NR_Y[O&8=N=>|$Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q?䩽?IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example001-expected.png0000644000175000017500000003651711664232313026763 0ustar chrysnchrysnPNG  IHDR{C IDATx &Gy߿ZW:䈅G@,bPpNCr8+NlB6E!pD VhVnZ՞yoog{{nOO_}=λС@8< \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P15@P@l@ B :! \ %x̆ p @(P1@`;+N;G[N=XNYo-o'yXuyі@%g>D)=pkfΕgyH)`Je/{}O)yXzԚUV{i xi|A&wp9A?juk}&TnY/|iu1(H@QkA>%4`=G@^r)7/S9 4⌅`B/߷擙d _d1 7MI`D:<CAܷc}~=ؕT(m)(so7I'KS9Duل[|qu *= ',NmF}D:Il/~پ]d;h?5]D=d rP53_߷Η t 4\d S^3͸3U*_/ @+(V7E/5)S  gYWw{*2`jAb":}dm]3Kի-?{-FV$ 짭,)i4þfRi/ KukR;x߾TY3s[@י6V. Uk4vP~9@9^4<ԓz~d: ugl/jv{Q@Q^4iGN13Wzi"@',eZ㖀[&by˦uR)<1ZCV:L( S>缭-ͺܣuߎ~w4]5qsdo1 _uoH!ynu54wN9–~k_Qvc։SS m~yE>ye8bL_uN#E[ZXp_k~$ЭO?2',z6y,Ѐi 5m6U70.5@oWʵ{l:5%OGgX]14̓A,fBfFԣ,Cs}w~_?lMAi@/@.Ƕ;4@AM_䔧~S?rܣS 1wc ƽ1wdT`>Ծ ߜx3=d8˰7~U9 L3loOЯij$5 k- #'d_͔YF%Հ'R^11j `#Ēow뻥;F;[1sZsi{߻Lz{!NגD2f f>uLyYK/yW̅+\/@E$-|Mm.AvM`eԵVDIML4g5@H=!_ƯTq~M܏=ް|0 }֎o&Mݰ#9 \%u3@n */AjH~xUwiuHViaE p0*F`@sschzOK_ThY}e ]D8<Vϑe[cO"h!o(RN ){gilˠGa0w$e\te`J-\&4@~Yo^#UMG hQSM)2 oe\ߓ?2P?WP9?vG4nj@f)?&`LڽotF}xGQ>1EXw ]\VG>XǡDKv259j9; `^p^ͦF&=ZFo;N`ν{ƷBFD7pj|-1 E@K߻-TT@TW?Lg&w J *E$=:z'H4q'{gF9BX=EZi@@ ڬLO=e4')l'/bދ =::#qUrOo^[mkkLYXqMLNGOa?LJO%ݏO({igwa] t30w'e"^k7~חE@$iB/pٟhsCz&\X٪Ϭ 'L 7Yyq7/yze1!##d`NYԙ^e^wn <`wPGP! ;_NulZs h"@8/,Ț0>ճ-OK -qj}w,Y+cr鿵?^z13?82]e$=Lk+2$5#O+pE@mݿWa[Yý>#!^-Ӧ#TbQjkZ~ wnW'mX|Yʲo-|'žuaV'dv"Mg?&9xRola]*C1Y kRr8#7"9zįpQ4E@d@BdnE[D}m7UY9{/hWk E2F;@ Nm0wGB>â L0xgiŪˎrX.wF Fgs1ۿ C* ZEV "`?uqZ+jUhye- J91;z{ru[$T?(;͉Bܱ- r{h8iE@~*?n!kŘ_ZB4Of5OfC#8c?|' 2" Q8`l?vOw01' @+!wn4^l>x4 }BB]"]>Nq8Xfݧ-3')R4,PS46?RϽRQ?dF5Wלq9o[|6N~i~hYew\Oq^__ J`/D:Nz$Wt*po%ہi@]fy'ě!M=y*=|۞+Y$PLnmKןΞjR2 J&H@B_1JoP)#_z&3 [>ʭnbĘL՟z{ SE:z0$F y C"~T4$vNwz -:H/"m` /`ݣ %^?;zC} />F^):^aV!xa]8t;Q6,qml10GmF4qu?ZЗay||$! &%`{iup1,tG$b@b^l߼ f?/ø#_^ܑ?䊜#gw>诬M$I@.~# C6*yuG s  뚦&29[-L2hIc6?p`E4D jc}cvN}pKWeh@;ڐL$#oj$14@("@%bDvJ:Ntm63zkÃ~_ۀh$ܣ,嗁5̺nhP@<Ֆ}=诫ȗ{W6  П1 b0f$z  C,d0^u2W-#q@7ǽZ;WM"bm#f"ay6ִ;7 ? eb#DG\`7׃OJf"OMb0Qŀ&i j2$W18) fkCD!nL|!OJ-@EL mNP 0U/n;DJ7^Jߡ,vKuګf;&nZ;{վ(.!& /C=hĆ|AkX^iФ A5SA" "]O,πvCMM Й:!уnRC('l]wwD -8NC<|1}&?۲h3o8%O 6W<S b<\Zo_ d){&XR >g{m[҂uV)x\߿RPP$÷$ o={Iу,ڱJ\&hU\, w`C}=3" ` gǰ> `#`^, lc1j$[g[˂1(@ 48&h˂G `t讽3AGdp.>Pj8e#){qw+T@4(A4> #>\K,V UE@?44ս p%O<@ Zx(QfXJ\&>,Ȩ|y\{β,= jQ\j1p)L?7Z7o;k(>= f= v<1s=}KvrSa h 8y1a[DH'q >7IzXLD&SOiذ&h"i>0&M`-]F2_+i IDATASO B- co4L Ȁ#6DV?z7Lu']0:,ܽ_,r7 %h"l>[@ɺ&V ZT{o}p5U*޻c_%M. #_Α ;#l\s &P^vѭ7w'}MkMB~jG=`5W‹uZ xu0Z ,b`E4mCv}zܯ@A pZj}_u;M'Ovy#h@_B+wvٛq43kzGgt-5U$g߾CI2e)0c^+8+ngtnl[^}Pޅr)Qf96n4&I{Nәkctp.w=bgCr.y@n LM5d,0NM8p}/t݉ !IzR+R`ݏʧT, $I۳/Ciz7M5e@)~jo^z5%(w^˳}:OJj_a_/_~U:Z6my,I:w@r!6{k@oHڏfu%o64fFRqq4W^|[~`~[~|cᢊ5 J%(f@&vqߴEtE$'M\~ tN+-єi^d{4M$mQzܯ C*@z~隵Ud^S:uuIVx/,1*-qu8˟wL۶2J vP-g}iVB f/tp@p ;L 8 %@) g:qZGL`8[@g>AqPE)2 Qoش{~Q(AHʇ|,e~ v,2LһC<$<HwZ5Z7m%P3%x?@Ft-^ /dbNwp jH$Ҁ>5IBk_3SV  ~-KU{A)Ljo洤Ք__ Ι*S ~+/ KUQ-zZz5_GJmMWL7N# o_ssw%<2[ -zzܗCrjJ o8e睠>U\6J<;dGu-I;dtT(|T;Ip?qy(׾Ӿ PeZJ݇~? ݮ]eϓ~{Yg2,dCuk 1j6*Y ( Հdˀu_h7wnmnąϺ)Z4P;z@yVgZ}>寛'O8yBD mkױXǹ>K+A{?tE=mg]:Ψ2+$\ kM .[+ʂ@Yt'ROݦ)Me+%5Opu6t"X Ǹ_!2pm՗uk5RCG +%9|,FEKCޣ'˕+*%FXib~%1"`/x*O?ɱ9?x>{TG{zNO5ӧe3 h=7bzxVqg;5@q&q_Xx=%@-PBF8A_FT꩏q`36ٻs.h?CZ:K7 0+ u]Y$5寏{Z.:9N9:j,MqV86Ë})B2 TAeD,wrw](D]~NXPj*i:UW%b`L 3t|a %7P'h@ ϴ5SJd@/ t- -p&?.`/ӄ@i@}!ր{DįVV;h!" dns:3޷d=TomN9@_3aA }l ٶ]D4bT5@:Pq_ 7 fJ ̜iЧ?Gh0, ,XiS&[LEyAOToj|yEI@]~snE?r@{v~L#! ȄW: 7B/~s ΧN7zG&{z o7Eo=ꜭof=``V O64 Я.ITd`UC*r'I" ]<=5kH+t}42SYJr׫+^'3 ՀDn/R*/wt' -I/>~8G j5 {(kICr`d#_xSўvTCd%A0wlMnۺW&BJXA}!,闎Q]j|ۍtv?CGh{#@E ;׼sm{) YX]gl۲z13j@h/הJXyPhem}nAWuaκ`| ׋j@}ꧼsd_H}t D"㖆}\oj;C}iЯMz}2 iӔa]?rkl Mj_Խu啃密hiC ,pg!M7 gʀ0Di4P[95qe;Hm~=Z>4Ǟ~$3.%oѿ/˳wzF_ A_#Mo [@³i~e/D:@[9Ë=z~G޻=#E~]Z?iF}$ѿ `˺|d z-K%ŚKƯ̆NP߹[L]H|_ꤞ_ ?u2{£^V 9#9//Ŝlɛ[ڷ4Meџ?A \Э;A>mR_* /9XH^P)ي ]}W%PVf?ѿٓyA_Wj$K%8ʿډ!/+^!0?,25`ڕ3K7m_yCe H@ 78jd^ٺ ~nkFa$D@8[Ku* iEZu.-J@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^/lT ? b /6*Aȟ  O߇X@J'C, EF%@@!@"xa  x@Q @} ^ب@ @>@^?`C^{~wXIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/for-nested-tests-expected.png0000644000175000017500000005637011640436733030322 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx{'Guċm &#HdK,!feEDZK"F ( H!b#"a@*hLJ63swՏ߯WWwNT9]>tԏvC$@$<*$@$@+t|HH`6   Xhó$@$@gHJ` j  X(:6:>Hy߯I\u_ӜY\]^@t}1/ "ିyt UTH!$Ў/͗%y_[/|@f@I BKt ltVyb=GL Ar-V(8XtcϒIZ(qHfM6.7dGAbl+:mmY(AF컹(lD:K'< }J]+S3ƒ@!(&lj̢jS}wsQN+W41܍)CN`8p+KfaP͘-i-W]`u9Ml1NCu4@JrT2|5"p+>tskS2:%Z˅ATˇ.}G%DI ~Χt)&H O!$|#MXD(܊mĨ302%#H`h_X}鑝ː8nEʷљB;r2n>P2 v__6vT0RleIeX("@`)vJjErZU1b'<k~}oa 3ʒib3ZٻVC߽pbP ̧-6LяWXNDgUCu}:|8ps&6KSG|'bt rt`B 25 8#(1)l(1^:ȨX'0{$*ᯅpX) A.F*!%U\ң< )t)2P ,38~4tq ۻNyG:jK)pQ[iԯh "h &pZ[VCP=ioXja9?mdjVm08toWD*l8q K-e˷Ңa&}I/ {7 [U!Ҝ0K& ~EOe*Yꮗ LE=oXּ jOW?}퍎4ZyN-ػ7B%m6U-Gd+S&xs?3a)QN "h :p6?6&M`5MwMgy%?59kX'PD/qԢm "3ʈZ;]EE+(ZJJ~(2pPI}ӿVSeJC@3߰4CVV)pA@F623XdgS2B-IJ+(A3f?Somnñ;1B".VI6i?A VzDGwh٤:%ÉeP \K 8]P|L>;Μm73C&3V)5.!I,4u'B?m/ZAid(-̣9_E-pZhן&+_UF.;G/.6T?oIgՖMʭ?孞vӪ6FJlTr ZMX--DְFM?T UgH14Q2U,94H[PEGdh{7 [Vcщ1@Rn=Qm!!M}@W ݬ(䒺CO?sQ,'7м锂i3 XNoŭ*8 ˞?#r)BSI3TAa@PZ4#:7i p2O,G{:\?Bv;U)C{͛(4ܺM0@B(YdjU^ !}F{52晈&j%}e* ki1t5 cQLoht^m7 '`2S[`3דm4o!Qb"jdm(MmN#}E -幝/`WqyV^ jz-@hȬ `J&ZF&ZL[B)%*YۢLSϡ\Th5͐.)Xǵu@#%J U PLUɒZhKR*>JSҽ@^2>$!I; Ԯv3%6*M1 +HzV)Ё7mkMVS!.(_%k XpP"VepMlA/ԔJ *QI*ъ@E sB߹ k2Pc =.e{hL&W)nnYJ+eXk8FUyg{b=E1dCD4oFc(/;+ i5,:$sFhDdSC VZ`06:a\ a@J`p˸.76":Yɤ dJzPf*-P?>1҈>n/[]ZO|gxLticb9ϝ ݚ~dϘ:G~!RM bU@2R _ŞJC@x Tq}-ft~zwy/}lmYZJ{O%czц pfLaq.<݊Xmkò5>«px9s * 4߬|b6iKP$7Y>n|hK/y)#j>ku2:չEPJ!5X$OwS?ݸ}I {ZsXhGSz >@&4X -_ ri/`ZT:{h,:0ZYQcOӬ[ uRʥadItH@]]dgVraXζ[ՏtM{ cZ|haL}WYe7{歳&gq!Ks8U;k 'M0y`&JIUF&48 ;t꟏vû ӄixnWp?3} Oȶ1ǠYh ~c*]ej-17RvhNu:i(Pf-|N럲px_q@ql͒OvmsYx9&:xBf &~Xιr8T_r-N6Jk'Kl#in͚p?hK3f7z{^Z灏^ bBh[/(ĶE0}t lL N@N.MpMT)ppoxϩ{/1[F2k3ykrjb}nvM%d0N@TixIű-W?&:|ZحW|[1tm[v Vhf 60nC~[ oRWye /tr XsZ4Gm!7}qqgVǘm-tS O9=kL)3Bt`$fηt8HJ7"GMwP4ֿtzPhD{~Wtv3b-PA+vkiմֆ_!--WrŠ@{u>LshWinZ`/)A,_Gb nsgNj?1_r.:Q tSkVc3!̅oxk;b}Qwbd/P\YyAsm1 foByn9Z݋=q-W_?_dYNUx*h( =M#'+ 8>Gpqo(.$` wg4RSy /XsɅ{ͩL[2-Tk;iH_LYYH2(L\2=s+,Qc0*͢c3 u4(!@P+wT: T:TbaM{v 8 j #@PM}y%]xz>ҪN7+5Bv0(1ײBsh@-r5DtU[ uE%ZbQ ;Ǡ=,}eWM:/.$4$< >xjوरxٛc׊%閾4> Ͱ+И?/i6l_cL%Vk@系|w@~P4-Zc{5b+*ΦvU@ Bx D-ZM{؉01$P{H& 2W`{ r}YѬ/wk:=e4K ]fV )G|iS& |]v+಩͗}๳\t޹^+{b8tԏ" g݈Y3=&|ùVO[L_4JРn1gBjE $ @ 4:Z$cl+#4a..׎Kd 4nLCp)Q|tPKHO&VG6#恇~>Ͼb0+U[B%ff}&YO)#sZt_Z DgQJP$hLY7f8ڴ&ǂ: 10t}Da@k'@+ᆃ\B%~gw>y%3 JrmQ2~wv}C'X컿.M>ZL윊ɞJ+AC@؎#BA$V*; Z!q:'h R3 ˆAgdPR* 㷏6MׇveFk@75;>І{o}e{\g{[yQoBL'pr5CG?cH9|=zڶ1j2VkP>S#46 }tGd(9t2yjBOEte1AtU0nC؟p eP5ׯveYڊyo=FjfZ "S>\uˮ30OtluKGdkM̿0A#B9[G[묲q~۲RLUAgdxP܅\Onqh?wXw5:A]n2_ckKZKTt45̧-$6"D8(_/$ʾJ{;Xވ䖅@h"OEz/W_-+%lP`M3b-}szwo~nhi. v_YOOpwbeVrTRltm[wN1^ZD0iu1 M.ٝoT/Q~/'"УK0ۦT&VBr5VA}.udm `ee:?Sh)2M?D!>ZBz3 (6 TZ~(Pn TRZ̥;{۟Tk4 {T:[ZTVN6Zb 5 VV,Q.d} N_@)Zw`EX']|e8_$V%sRQzRTOH= W@\cV6GXCDyй+A|ZsQ?{^{#gq߼uN arkljqdpT?6CLRyM?,I4cS| IDAT$𘴷,2ЧĔ,׵1P/ob._b&2*v$N'~=_\bK'3L]Zd삥њZ?'~F2fBt߆MV+a2J?Pl)1<&j!?jC7*եțw*)?IJ$ (Լtb&ͤ!6R ̻bL KAPRt4й?SJ8:0^|񙗾LMrj49Ȓ-ņ7K''M uؽ_}h/Hono9zKS"ƕ["Ď&|5T,@<;p ]p씫{ލ Ȳ"W|}]bt4^`i$ B:tfl_X#RB}y8HuUTO@4s`ZTލFJL"Z!ܿ+H赿G "eL[/jXQ>}Zskr#4>8u*atpnVqqQf]i b[pof%sK$]9sMbaqgЭ"4TDg4q*0=)]W?U8&I౉obyvGک3H<@@ aFG6?D"z5gX\_,hi[Y-[ӆ94-EݔJU Vh2Fl,@{MŒDŽ>R[ъ=Od)-&@ō۷ja*FJ5SS%!Kqj2ռ#bg*}Gn`wcv>Շ=ptH_RS$]9 LuT7\JY0Y!FWЄc/7 dYcqߝ{v]  ϴ Ed0Xy_B$S/)%c}@P%F@I[)[KN(Ҙnݗ\L0&.̬}LVIo} | ?Ȍ`tzeQm)FOe0 L 0; 3dR1}Pm5dꩃv_j(:m}n߻O56AcݑQPKKk_u:pit)I.GTO|%84|B.YKg^nۖkǂ$Do۶h'M$![ k+?bw;1w!+M#ζ;i{:=FRF,:.0 pѫOW8Wc>F=92xS_0F [h_b )]iERoeQ#* ~쾘xpK@kt! ɭJ =CjI.'փKu~&l/ϓ |IWIfeH%K ̳Q7|[)+ 83jxj-V'aK82&b<$ym6(_}Hʭ?iwXYN*E[ TJCIEse4}ye1;{YX&CJ?uX{=GaWL?~Ϸ~Gft՚ӧAQ {ߖOoYJ-''b2I7REdPlWAOu9*mc$]۠fv27(/'K}>NuW/0 \}UF8iz}_Niؕrp~14$6_Tk3Rl])ۙ~Zd+jb݀rҵW:R#|4JɒrSo`a\b&@m֙H(@`++GeG2Y^D]"3.As}jֳ//V bDhor;\f?Ćٖ6E\]vɋ"@0j{U*yXޅQ Me%{i wupDlD3]]}߈SN:af*8Lz@/>fWXfa0>zߔw(-k"@6$0:yܣ?R8 _._|MY;FlA#t] k@ rZ‰͔b-.uxg]Y/ m@ZE볷V Ѝ9薐`}_^CUQ63>w]Bᛒ+J`$@ tmźP(V:br L A@%|>X`WJMi|>0w? ݞMQ*?2%T_Gtoj5לM/CmP'*yȣ}]#ӿ:R>:}]h@Ձ@@T8Q8JC^@q+l'V֚v7Ԟo}H`4t^^% ӭ#c:) \ 딠J߫CɺecAW ?}wbߑvvnﰝݓ4}.-/Z7\BRGGieD33\voj< 7XML10&C2pnk!F! C믵+P-0/bh(Vh]$rH|ϳn[f]hD@#?jCR@~ui43-Ha& X%DrbW]'@a7?ѥJIYcOa'/ݍ.Fw:\>_S)VcYcvBe+tgxCL+եQQ{L?~"z$PBRS0FvcS 'ReP/>\1ɫя~wE5@>;L+<%-!IJ-҄>psS2z$՝e*LkA`?:QuM9Z3WɌ} pa$'@:Vvx8dMRhVNJCo}@O+Z2 X;]9F|!&l&0 C`$:vZ3t֪#oyQ! /d$58P)ǂCaQ|GpOYGqA6}7iUÃ\`,w|n*ƥ~*䔑P'o{egJ$ RxcXV U'upg5]Lx~ {b^'gR !p*QhUoUVTRg޴J7q%"VAIx; H":#hR4Xk.8˫M6ѲN@~(͢@ ;fN:1 l'̫]uy;|c輔 Fi+pt 7:Jv`TӥTJI1݌ 0@u Ɗuۘ<Q7W1<~Wlf?2< =L;FaU{S+n z %? FGޑ޼5b>LMǻ\5\qpl)y ЗwN-ۍ?RM3!}L;CC=JF'z* ^J<,vS=,i tcQwn`6y'~Ѥ3a}u3i.h9̯4f$ l&nJbsMtu;Zj?QT.e׭RiosVVNT U\waee l8:и= 1}@þ۶5m s1ԍr[k ɢS5pE2:ڧ;"nmq6[V=5l0i X t<> /}~7J3UdR @tU0,D|*?@dV"H``t%> {D tiR.IJH 1 I_Y8?iGkN@.`Q攡|ƻhD$04: ז/X, 7֒H64RDE ( FMny5n(԰Qi I`t`U*[G #tǔm@gz=:3Qr0 LBs`9L$0Ơ2,La"@0ŞIh'ILhAYU%̲YFPJ"}]~^q%YE3L*g̥+盛 LL`x ҃%bG |i }ȇ1$0NP7Ez֐j@H :4lɻ.яֿӐ|̧-I}|S[RHH፽o4/ l: hU4O?q3xhO=e8oW~cX{tЊ t :@c tЊ t @ 6؆VdHH:ИH6"@$@t,$@$ Y @4f! m @ : @t1 l~rZu87)؉-Ɠ@]< .OJ#okuNCFDLП3("ӏ_$3euyc2& >c^(% |YxϳE[xn#8Ԟs@Kֳ\{={#Eo{gkmdZ("@PH5+/*:r7pަ *^CH 7(4}pGUP#' #}<H Izv'@@qkO-@!<㟇 {th?ϟ[meL`)10ַCč#+(j\}qejSF`aGC@/I~&"oi|@S!$@ew EW d(з| 1 [6ן)=X:>$PX/9|^ɇ4,]W9]^RpKK?Ph L \a>pZAyox-;}@7ZaXlӳJ xoy"v-)g2u`QN/WY?Lt2tlwz<vC_Q䊚~7S"L}YQ =>u_̛zjMٍ'r}0mS_ԅnCYyMS)윰KY|lE=Vx `L[ƺn;\_.p7Yl?@QF*L@L}#WN)[9ﶩo.+GD7 m6yg%>M7֟cw \h.@8@^qQӏnN!ٸ05n&Iis'\dRpsG@8#dSqfOYt_1$XD,d ؆ؠ0'7jgv3v;Γ/LW?xndV&0y"➲ 929uN5r/ZI;. gEk7Df5]%H|@>:0AETIQдߎޮH+ivNsG?!8 "2?,.^#2DȐˎKG)Dfal ̶iXkQEnI ggd}QDQPET C&b :!jˇ O|7꿝- Se_2b8 &B"0ĦY}Ʌ?gs%QeEO=}$$Թ8&:1i1X߮n|PC4DM&F?=7Y4|ߝO87@;@ԓ P(10?ֺO6lS0O/N!t<)XR[ |>e+Z9D80x;0X72mˌ{x)n~pЯH D\^t& JygP:7 R3_vC|~-L,%t,|~8v.:tocViGwi J@ L )!RN#̟8xg(#Vv($[46]_,v_~S $ޞ-aGsuQi6#Z`-NXD3sh D'h/>v䌹+ŮH+>⻎S a^ZOwî@*e:} ~U+nv~ȆLj4ti *R@ >yϔ=W[y\)effi(GJy+IJZ7r|g!uwlU7*7{L7dtJ9?0mIDATc&{eВ2m?KΖX,iG1J4'@06 a{ͻ)QW6u8m_3I 2-/t? ddxlPcWUX1(7 P TnIM[ӏR,m>@ԚM`h80,HL?&&S3^ qdBl]2&t@M@1%x $~74 Η|f暩釞6uB͂Z7K1aө i /GL@ٖ.|[oRϖm`]kf$?nplDH=F͘qX5΄7;VLj9í>@`)K=5q$%M{!2C/N܀=V(bD 3US_̿fao۾J˻lڛ:5.7M?$:p+J:v{os.Gn_(Z$ޒQ+W͈"1 Y. [Ԅ(SX]_ha1 ̈c#T?LXh:0oh~fOE>^M0#BnuJN&D0M,Xyh4h=oEC/.\$捁  xG_`[ٯ5VYC_Qw5sm3Zl&[4Yt|8ʧ@뿧=kNϾ Dq*jC 3`%%3L~fVan9OxB=q h3>{ӷh v-&,L#M)-F-eē;tDM.9z X6"`#i^J!X" vc7>⌄|qg }VȬЕ+WUSC&4!$MyFyϜs.mkPx` A&|#]a L@tg Cr|ٛG\ͅDPB#oˍ#@qM6C 57|PBzxY!m>ؘTXBR7+U vtqn OEfhV $9Xtt*qy,?f(p!7un v-5pkg'U/  X G ^@d l8: o/qVYDJPZ; X4I@q9 UgijrψdQ}2p2ڹ_-Zne? IŘH=0'uҶz7$pHYLLyåD"H&׉B5I*ɤ-t|!_r64>2wn_WL4VCዿHCeQXޝ)K :4|8m~wfIeR/?r>D%H&BϫkDeJٲR)߸ib}-ץ=|,xchLLtbV*h^w$NͨND:n=> \w[hYt9 $}=٩<#W!kh:H9aĂKŇbH7j ;;%R6i{ljh @Rd&.@Qh[&5ߖ6Y0Ι5w`h!_F i8`9EWb#EW|!6C@k~zQhR]>оh#W=Vf @PG ˑ6\.U<ēמ,4X}mFB&ňG G:w=ghO ;` ^l#Ӛ~#ֿL*<'R֎2ߨHOī71H8hjuqd4UɞHu b4gce!q 3L@hn;Bmj9go1'@w$SAص.*l5*@UԖ5q๚9] dC-{x.YHľb>[۰` PΪ~ʔwc8{>@ꪲ4/VLK *wOri+ Q`M lHH;:T=D @I f"b8O|v*4U`km|>WWy{Y|=6FA~h (D?dxfMD럁[!:ɨ1%vQTiu@H[C³8)\$H ?S[j8='4UV!X[=#[^ @RuJת]dѕ _N)ONFryJTCbe nG<b 2ŧvV̀ I5:gH٩>ih)۲]JST[Yh ;D+=7/!vw0@SWS֙75' $ьy#e ]F-9b ۉF7FZHܝ'wz|0hBb } &2vkx:Zԩ2S+L9Xp XtŖ*nƹ;-l- ˙B猦Gң r \ΪBp'o2EFA ׾1)q%}/I%Ɖ6hU1XRJ.^]ꔡv%25 ``(Z yyKU{*Nrpʠ'P)߿ݾa,?c-'HF^G/ʕY`Q) O|']iwV $c{lo}J :VCqP%䇕J0 ln@OF'M G`R'V@ ̩oI`Fi U֭@YZUNQDHʝ*nd.|J5QHt5\ ˨!@0b[v^TR}Pr v?60N2T:Kp'~x? Gة[:{~vGX=_dNG`Q=Vl0_㲬8 `cJrC=)œfTnz@Jڷ~~}Yr9lEqUئ>\tS^ZO#,X G )垞 oS;ŠH~a&t,S0_6KX4$&jwUեn^ZO`''[`aP :;7!lC! %e5\ڤ4 Wڔ%j%%w2~`@;35}v}0eq'dŘM$t !Uu_$fpit ,7PP0ԁ*w}JIni`Can$ՀN ZǴGںw@,s%@0iˠ;4Z4rRDf|Joj?MTgKBPL&mQX k(HXI5 )L?Fg҇_/C%_ P*e%`CYs"@0/ tѓ/ ҶHc^@J!5;(L'DoFlS[jo BTt-ߨ|@t]PcƎ .:~1M  n':YzݣC{eg:8]di͒yg5:n=B1*_X:Y~=_3E m}Q>~#i r p`#~ԢR @9:rVsJy-|=f*X8ܡc7>V vyI$NC@<6*zeysK$0(;pv O ˳ p&Lg' H.:<'U&n(j$3 @q"!$ֶ!UU7s_~Ձ LER3QL S?/I`PtW8|~Z p{8 @tU0LH R;BrVLI#>[ڸO퉳ΜK}8X ,!H~[摫bHT1J,@`.oK`=:@Tb/x fˇ``[[^XBUũk&/tgMєE$P@=ώVQkG+ 8t"/w;@DM?M$'pԩS"(le;p`8:jEo> 'GC=bIX0x phh%?yѡ>?P٭"!jξ@(PT}|<?)n' phh%A~Fᦲ$01:`?-:iϯl2uKK $h SuU]FtY 8*I?[J&VZZLb#=_Ċn:h o Fd$%@Û . @I.jOrݱW~cuv$@;t|HH`` j  X(:6ZޞX;R>Q{͝G>L\@O_7Ǒ?}+3RyM?r{+4,b twH e$q2=!40 Em#pLPͮC͆- -ij_=mC >׿&^w_{a|w*Ql+l 1kcz>AO}#{ۀ8D Ge,=K'~ ie6xڼlk>B"#x%Ь7X8O8@-dƃMAX\׌2?%?}!c)(ҭ: ' 4ntx"%k#x $q??o6SjN  Wyտiidt~To~BGA@:Kz `f˴JT6gB~ zpRPv ` pڋ~}b&3~> %GY'tOwKA^ c)_-&ʔ`Wi n? ԿWo0A (9pYO ekh'}2?Ho,aTd @E/(&,ws1hhդV6@hr_qMC6[b5+AFWXepc_;ڄWo?AmJY(6'3p= TO< %B1sWŋAV?/?L p5SB 'd< 4 @(p~EiJW`(Wp}(I B KM pOǿ}۳?O;?.t4%%}52p|%~h}=clI08D|78GFxAJ;??_ _Om/4pAN to~m] 2ƛ?l.ҏ;Įi@Dqphǽ&/~SW.ճ AC?qտ=d}uP ٺ#~Zp#lHp\vJ1ANG?G~ڤ_G ZWNu8 8g/dۥ5}?h|%Xpя# Yp}hEgliZѾOM.결_jOIDOԀw'>LS0ÿ2"PE+^0w 3>lwyG8o휽-jxzj_J`g5;-e􊋔 YEܦ浟WLY J? #(.Ykl;v^/c!.lWN?<=@g'4$;N1p_w3n^4AOYA dxp> ofះg yAMgb'f&|k:;vp$@mw? aA~ð?3lOGn  8 ?Wм.tV|_|=u p|uFH:@?1*jCi?ΤOyY m6^f:,%_ Ʒ`OK݉AR jgU`U7Uo΁nVa?m_cGQmǼ&ˊL)??S)~,PLj`Nn/~]x Fq IGDp37ۙs1slMy)?9i@Ѯ ؒOg 1 Թ~(`"(l۫}1qFP(@)mylIǿ}>HpnIT r^jژ:wcg`kl[0фVlt,PpA@ P~-51{\z4ʷ@[,P$bvȌͯ>-/XdR;o0?^{=i(9i_Ƿs=oNةZNY>X;w:Oj `pqøF"heo.Yvl)g RT `Ol|-Aq1 4sAoOk|"ŧ`#O{nqZ|orϾFEL־C&|oa,P{5 fZ0a9ZH#1- 6cf5ܿo ޙvh@ {qsq`q j':-uʧ:q jbi?Էk{o;x;YFy)p__;^h~˶ş풮S,h@ EE01m;g?)?*@gDxģ55irwlj$ KnoϮb.ξ,=:Cr|?!y( -Հ)"eN_uJ쥘s$+zpg_6"IM L{#rn0\/1ӱhˏ-igX] ,Pq'eւ@5ǯ)HfUwƃ>vv&x0A˜?H_- ÿRHF^?SlyRV}#\֣ SeYQh *Nw?Ǥ9[nNM;PR@fڪL&@&˨|`h jN.?{W/kU7AL&i1άx \oe AbΘ|?9d]\z_p^ˋ%͊AXw߷?YADPA \iO '@3BjJk~m)Q-YߤNµI$$UJ&z֢6 b׍ gNbytgoC,ɹ[q^ $Y6T"WЀϠ`ZՖ~5 0[C+F/zA`,g 1|_Q??3r~/eG`.fﴲ11Xkxrq◇587 ",a_|?u^G#? շ,~Me~5nBE0ڝ*mE)_ nP4W v$@H[9!6B(e!P0ݧͨeHhU k]CBLSieMRp* $HF~On~$qIíЩ @"h[`Kܱ0dYSJ t S\Tg3x·8, b4寃.#L<3ٴ>q08)Y-SǿGp`,Pn `߃^ąn"y?jvymA@V( Tw <_h'B;Z? ǿpQT7fb ֺ#q{i߂ë꿗 @S&2o?] ?@}77YnZw>H?"Ńc0SAk_lK-noKmOsg@aHk|3IP 1-LX@?O: h@,8}'8 Gy'rNJKd}W! 73zS1=4of닍dwu<"|ĥdS΁S@I,$=NG$hӘq~ ~Td`o'.eϠPt 譶-[zZp5+m{=9A@Kmo%hmt}] 0G-H*ribԂ |賷1 1s?6bZBc ׁtiṕ˺ ĺߦq M0@ Y'Ej5 #̝_|}Sv)85g~fOe /=gpٟA@۞n徫+Ov^[T<|%F ,sT(k@ ۜ`V{/Ԫv۟li8&fO`2A@u#oxGzvaN]3m ,蝎tIDAT?vr}T/o=B [{X74٢?v+Պͬ >w.yE5o `J: O}),<^?n Ph`w'>x@'F}yC.oF@pߔ^􇥂9̡E WܷJk1,R @1@+`_A wFqX埥wZw7ཇ!@V}Ec]:6X؝傳 [jgADgB_YAρ~{gAPB  mkNC 7/OYWqDC 0BhSYM}+y'q/W,DmX"E0, Qp RR&@;s@ % t~[g(@'fm?g?ěU'@-.O#[@_ZYM!p@`1qy̓9YR =$N?Kn(b`L_pe|gz& `-V Tty+:\cǕ$fb_X#;L@e lD<;}nczwC_AƎ@0 kOa w)Y3@L) `a} / &dXjpmnb!piǎi3'p[V$j P>_6: ͚wn_]{{^O]d iYSS^v ahp%t(׀ӗ5 -/p7h):(r9^[r~%@?g`LhZFMi\v5hu4븟~]߳{_8[FJ%@|?>X&ZumگXmXߺI/HmYᬗ u@h*Nj/L`eO99bpu4OXX@Q (m:$_J:I Kn}"00eQ vnՓ+A` Bm:_IRSo&s@X+#x!s =U^OfZq8p8,8?=2AGV Qld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @@~d Md#S((Ï@ ld* e e @6L@  ?&@AGV @62@22 @ F PPYd T@ @#+@l   @?(T{IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polygon-holes-touch-expected.png0000644000175000017500000002003611642654340031017 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxرPc0 j&/hџnT=GXOF OZ߅Ak9~ײdasܻX3E`je(ul 5j>)w_6)ݷp0GI;L=gw@=)Awp71S&9sm* 6dm8a N9;`-O!\SPuQxw ù/3x[ yw-g- afK]u>7#Z.ۍ{93{@WZ}3-rGw҅eCD~zNN?=KCtG'mpGv;~p;om|Oca5yK ]z&{)l˻7U7ۧ=r#wqn^&p? o2oBF{Oוncz׻z7] M9>u纻77G+Yb~S|MŢUK]knm}=Koۭ$dy]/p,2oUyx碳a0\.y?9dӿeC!n3q`I3Zrcvme.7|b7Ȏ~K=_Eμ.a0.4/ 0?Y[wwoM!yx=Ic`fΦ^/Fc:FW41/G6t Ƶg"0盯{KπkVx_X}X6.0nz>@&^\w#{|`~Gem't`h6+fZȲ3 Ehno%n/=_;t5 cGf7f'Hz8Ʈp׏迮&2:S#WA++=E>6i򝙝ױT4SBLNvo'RK 4\+};)ioos/JsT{h>Z÷ߟװ9qםs7│.3}|_z'ӗ<ݪaw/:i'2H; Mݓ =-7slZ:Q\q=c]_e+i[X:sJc^"5Wѧ:wM$܁SzsiFa^luYOkGó0ꭴuh@BvF_~yX?n_( `jmϬ~j<&/?-DŽm _҂Fawspeo2 0_E))[Js:dI`zY5'uIJ\lWl ^^ye>96rwb`K'@`1Uk2췁L8 fG l&i-'w)s~>a`>s?m;.w-溗_^t>i?!.L xo럝?'.%ŭ=_Ͽ?ݚRߺRxӧD lgKo?}k }{ >A27? Z#sӆ׭h) g5߸N ܪ@~qj˱SEn3pcLP)w=j' 8{Gefhouocn>z`t2Z r4O9 j5~tp9c}3׻:v|NnOj1ꀺlL%F^xWǏ-$ \ܧٟ ֈo ݽO[&a@Q & 9$DF xJ 7(s l'hd `՛bC>U!da@XqߺXL5w~e;l[˭揼fpi[vb`;Kg:RlIk ; ulvqfO>κ+ɮ#lS׹ ׹S`]@%Y&]Nby7C^C]"P~_Ńx 9 1pr%l_ZX*qb`{Sg,˭9R xV[`ӿY&FAC8kKkCU&~2b C+lPqS]X?Th"MR߱v~ǺZ lFl]=trb^mreo:H@0x)hn=?^* JuhM}ՉK^cqzz<~؅ГC{Sg\& 95~5@ߞxݮ(vĶIpXG@)p1oJ5p.ko!n痀8[~_[ y_!x]* Ju8]jXo'm [ -59غUeNo[ ;`N)h E{CWkQ~_2[xwۮh731 J{=u{Sж)- ߎw/~}xw9>Z@-c٬f81% VЀL#QڸՓƀr Csk TɛM0zE[^g>W5+ۀqp@_jn;4aj8lķd>B Zz1`ߵN~p&6\'b7< nW?*lfNB`([/:p1`?v*pvvS1`nUjgkm C];1`Jy9z/1Pc޽Y ߭W[z=w>?%^}.N`J_b?%=Md[NI`,k9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)(9V)DTFIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/ellipse-expected.png0000644000175000017500000001545711642654340026550 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxy#DZХ>cR4 hAJA tO?rԹrz_CylbxPB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P   (M @ T@ol(w 4xc @@P  @@ PB@h&@p *B76;@P?C66/9g_ - 0^xeį&ǣx`>1}wۿ|fp[mg'^^<K󞇽\|gKa{,)Ž_;Taە `݋=Ǣ's4AqI0ߛO%Piy"ܸc `w.Pv)iІ|MGZve=x5לCƟ#/MBsS(,X5.(B96?_&77696a&K \_~گk __ԭ$peXmuKXBk,+pe_VzqXû/x] (pe6(?{wK?/sO+уY4J'?d|xg? w|kKcf*&\-f G#jM໽ov$vjOG XJ8xk0w~3w`} >~D̆$OQ?R@?dÔ8~kMn@!{aF"pkGd!_;lժ'_/MF}F_}5u33zXt ~]lsѿVXEȚxn/gIs؟_foOl3ا+9sTVu3?a(GRG?8Yvw<Ƭ `du0>\tx<0qFVx>15\@  ؑLaY3Yc~'OO\|&U'C>{ElE9{1;Y"~?<8C3joP|G;wɣ+U?W[ |;b_}J'/k`pu>$տ!`P_=j߿׿Bs7[o `kT/տX^lSSqo2cXc M1F>] я~cDϗN">Dc(GmG| {4V xpG?=P%fs3|gHeϠ./H|b?OX';!G6K?WyPz!|h[~IME`Oa~Asx[+ή2E1@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<( ("c&%j@1tP5  (nEPr@DC(B9Fn [!@@Q@#@@7-Q @(P @薨y PPE( M@tK<(  (54XIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/transform-tests-expected.png0000644000175000017500000003677311642654340030272 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx %WuG@#4腀Ay۱c qbSvˉ1Ia*.$SqŸB2\eJB$@c #xh4&u{͞ݏݧc}ngw{k? x&c1  @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! @:! ۗվ @߇Yp?< CK&,|SOq;&Bx{y50#!m=q ;>ͮ> B}ǯ菄 z6T61\Gۆ/y)hʯ~?hWY  *ܿrD_9,f5x۟qyN"E%@\OUbқ<[~~,#6J,Xaؔgs{Ǐ%+ })+HXS<}ge{ `鏄s5e;Xa}0Mm@Y 5 @S ) R@Kvz ܱDPs t$OВ2BYGqߺ]uW}N'E: @LLx~9MCɾe.D{O+זTTpWf)J5@钀vVTzϳuc|1*T:Iѿnj λn .+ ^V)%{A˿-6g R4zxA*kU`쌐e{|חy۸Afz !4\^njO?+n>6O?nAЯ}㸇 M V8@0{@H?#sg|f}۫-z&t炊6H$خ"UB>HxR_})8wAeqMƥUk=f说O]GIdpR& #z4Hqwfe8Dy{e`HR48PBrhg*= 3u<լ&c'*5tP/GBX E}Y +-k@ @44wӉ[H6mIؠjpu+w@8]6ଂ: RՁ4 s3 B6>۹iGg~Ɇ~)_Hq^%"RϦm?ZV< d} VC"F\TPʦfF sG m4Y zr%-  =NLrW[XcOj>4rAz)+ p xFVw)#:<48T# @-/:=z(۫߬uIUg- YiR eaO*`wfs1NA}-wd7##%Nܳ=l.W4@P~ OӼ$(٨ ١*07}w񋕳@kT>dd5@$<7z[ }WT% xe?:&k'| J7A@S6%`t˿lk psd`e4O9I=傺B?_ى`u$?Sn @d2` (`g ڷ_F@Fw `{Oīc8ޗx[VPk跚}S.:^oK_;L)̉md˭o>eY $νk 62_W={4,ٳ\i3ٹ @gUԀ>ORNȞVORp)W^|pԡ_;ګ.yNoo: PH*va5CO}R|7z }y`Dר\Ѕވ[}w f+р:hZu ޓq+~޸~;3tRT͖@m >y+o{eN/ ԀŀAI_74[ yPa`t6̶ve(}o`|2uw8- ^^Pr.TiGt0O:kxz#5T㥵# 2ZiʵE~y[yVe&3fP`\-5W ti{7m<Iz7Ӳ`+d6\&ȍ11!y8 CO~C }:ݐ |jM|Ыowi5v5}g~ԂOeP>-۶IF lZ*iϾHBZe %5:wX&&;_7[#Sjq<z7eR&SFqOiK+5kc ?nѿ?3a 5RTsn:#ϋ- dzpRCFق7R5% 8Vr]um6}iF:7O@ê@]:(Jb}ܴ |3t]X m+#xgN IFE&G,.i@>nY'.4517[n7gꂀY';f4 ǓʾAs5`DPɲ <;L$KvE]kn `ğ=;%6 ejwPP[n;J 2'ӦL կ #{ DCi@ `񡿁@a-c%4P zA,&B'q^+@dAC^0dsmhVz%^‹ڛ4ПM iS@0wae(P>;pdf%Itޞ>'fAnZz B.\M?s[oӱ j6[c }ie4e,ԠiVY.JR^/0hfY ` `_9mߎoN;ʝB@e(. v1M+4dGr;z?S~#Ess]N7F_}z%?vjڟAs?uWi̕%Bei. ()io˖rd Sgk-7#}Hh=#QO_R8ۻAd.H{L'uA&]t:p@OOz6=iY(k8 fKe-߽3Ї{5@- yhP8͚Q~|!ίwFe@`2`1Bo_[IKarIDAT'ܧ?G] Y?ye"迿g_K_r[>x˹psˀ@2Px9(/ ؉i.haJ07 TZ"W:3ZN(qߞk.=ǐ};}%1>*}M JFz\L\ g%y!d #@O͝lw.A@N㾝Oڮ?Z8qR*f_ ˅~J&/T'w, :i@mxe422Pw"kuJm?,_,}vuM FZ HU./H x%: HQny!1<2}'9rW]+O˿YP)E;v Uyح&3koҋSgit9'Ξ]|w?Zݽ{"/yxٻ/hϾSvt;\U @֙lU {.HXXo[*Aj)22Y2Aې'ʲi0ԯ6g/8hX4dA @92+<N]# R+UF:ç?6Y%REFO_[G^aPZHAnw AA~B*U+\tJy.hhI@A )L/rK. }.9s*!@Y ,8k_nӏۀHsAExëtJPO%62@w8=:b@^yAǛ pGϷH-b  s]@q 6ODY߭\W0W;oɟ>(=h"±VFTZAb|U@2` ʦO>Xpl')$ ԉAP;McnvΊն `,K~wsj~|yyR R1ÂeB{4Hmj1`wM sŠA n}3s${u}3ыaү<O 0~eV F/aHR Ja{Nh(pp۶4H,2P"=aJnɕ K|( ;>n:ȴܵ\*gA@ӧ0bgz)ArP5`vF6~@aH@N3EJ [? Q;uf:Q}+?-W},3ȺҼWR=HŠR Je4hP.. X?EBC9X;1KK ^0mS,]`e%=wKn-:/}o{`ER1x@6~?ŏH0 Ud`p"!Z/']+fwXiY N"pCn$A[(>*pp5; C*ނ@E_eر. 9I/?goO} 'oMM=cu:=TCG9JUG/끔@2Tzm0Ld@-Oŧ+`@JyO|lVOXw}ԸeD+zekߖ-Ӽe @Yvfw>*ho/\hS|ķU`O-RF_RE ^b*߳fý^ߦ]9~Q>Ò zC<_ᱟ X]?g_7iЖTzY'URzpWWTsnWu5*7:AS~e`7!`*qQ@i'~ sjA*G|iڠ-#;MU~*}S~`-{,}7SA[VfjW@_ݎ6Ϳm}d_RXMJ۰mɀ-?iG=6E}^7tʯ]~AX`Ndwe1`e]izS/I / ~o*zo"`?w^/a/1W-nL`-w|q_ʦ:?"8 o 6 i=nu>[#@{?FĖ,Ou=լ_߫ :H`f&ڕstѿ*qpu)*0g{.Љ.0?\|u=ۣ2C?GY :e%r}5kpx0@V_N Li}wnS2c'2op kwr`GoX0p9\91Yt 0wP @/Oac  4 鸯Xm u+"Q{_9OXI+t-3J8 ~`7,`]<vUͳ~f"lz p7C AqۘIN=?9^Yxlױe`>6 46_5 vE6X>7Ć e%OlI?όjwmMQv4g~o&a u}gû\ѿ uCaArOA6ۿSXw'\*k֯w{h.؁; \,JpO &]7 8_Я_; *p@@߶ѿOWƸ`O8rh6co'oͧ~-d)}ޭ;2#@ h'V?^jժoUuu3y<E`G#8}x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#8=x4NSz=G`J#0O#x5xÅt^nOLUfnD` SNYrNSx)k|rs\ls["#(?rF<1zߖcɶ9IsY^~U%;%{'{KzT=kue+8"DLO7|D (!?wcR R3BeI "fS ;+D1"0F1Y& zF$B|=B|Em'^Y;z v+-v-37w +.|Rf>ѹ4Yaͺ3NU]u7)MW3˄@?zFMO2B|=6|}f}G~pfR׶>ؿmWKP F[g=d@YBfD +/Vp2P\MjN?uֻ6!:gQg;!>شzȟg-lewG_ߴS%$~>pX 7&o^L -vEτ@Y ?g Z f !/p|ij3w:Q^IhpC tt =|~oɹ5v&ѸN 79Gn;HK=zh"&z x<ò4/ 臯[uD`i~U~u92Y2G} b 9,a,GIf;?#6MaЌlc=6ww}y4sX|/d݂}y-G/ `-I%>OqY{,%u.nߘǙҞHM]Ly6Y@2RGfԋk^r :-;Ne,WgAa%a{vlr.C q@w~Yyj\$oٖQC̄(ۺ5ekwEFĠ,)ClZ3ή?0߫``d]Mp؏Hп0?(/5OC/KzxprA|QيY=o/GWܑAtH9# &Y 1t/ Gb *bHi`@-RF~gq#5 8rE?oZe_,fCurmRV,Xz2WɔJa =yajUhڝ{H2&,v_Xڴyo?x-w400DKiΔ#c`08}gh?aY0lpoqޅdA{R ձ:h?4?=8Tcx"@Fʔ&?#LyӲ 2M41FZ'}I@f7]p~)Vʒ0>>+_oٽ'R]E=ԉ4K,<,R:9e{SJ`@zK |kWxnj~iFz4h߃'X=>V~޹ z뻾=F ^w)?mK܆;[&ۜY_ۊQa쾭Y#;ҒJW]3gDĐ+ :F0 F Od' {Я!Ybʭ Zc'U{lܷoޢ h6iշYO9uߣ"98a&̢EiM"e():$4ָS iY lT>- ~g=VρXGvvfv`ipLQ{XsoVa8p÷9OoCڲvKU+c2+_|5mpqf 5c?xչ53pUR%4Y6^f@E Y>g"d`ii@Qo'^%~h߶1os/?}b=`m|:1S kN?-m(v]̪@;=.ϡZͫ+EnC26[Й ,gXbHY {i֮TAyTHW#BQܖ `AX'_ vsǡ2_z }~\ A[+*#E Y /|E"Qjwk @62D0D)A  %pK~\L%^>zvOG`߂4{' y;~>[uwS5ȫ[0qظ`z+]wCW{",c}e+"%B2+OeLaUvezy0DR7/RȏB%([2 @)2zh,@ Q8 nK9L*C m~Q  )qoAUھ\m#"~!^8@}x񈟬? }$d>.ab}m͗HX23nK{<\!vCުѲBrf >ڛˣYd^zANN&w?tI@};ȓ>#ܷu},зp[G?/#Xˢlv eyI+W`&ڿ _LNkJgg6,1>#B =9^c0"@ &h7!Y: t:&{"WS9<{ǻ7߶+~bYЇAhk\_1ӿE|uS>CJeza|2^S2yY1?]ŌuRն"6$ @<^b>y`c,2Չ 24@'zőn8AV3z']I NG04ϖ B6GM"g/^ϪD|LV9B|y@/f6ƏzX@~ͻy]Jv<[}1D2Q Xͷ1M`&@ne(Wx?I%KZ/O4NhKw9?}mLĔmm~3[1p_eq٭wH@Q_peLzO,vR=1S:"W.sI ILj,C|+/o>޷>,XJ__|LOKCC~kVǟWRxwޯDbss[IAhc$<ؘi#*Gp Ad&+}Æ*eo }Y$ȀLpQ%b|akVw&}4crSCo7+ 3ȓhnOm%v%[F!*h[FfK?8*kW︬x1o:J̌zёKi*5ke8d?Kijb@gvms) ɠzrn _,gt0Fo a8`~ǭb?BP+Z`'^Kp hū92RsK݈zG"4Xgbe`^tn&7V[ͰjKv9O_Sa괇f'+?j%Z$xemd"O\/87|A/~O~_xBA}$gj}U^h﫱O69QR3'UQ[E|zgml7[Wژ bhYjz԰P IdcHLCA';6m)q5ipA(`DHKaDH4𥯖_i#87*nc<$&'~J.]0vxËm_$v  }d>.ȫ;w.Dkwz͘û?WVuLB~߿ߍI)D\}?O|/Jq`WVCC||Jf8i 'KxOD3P4a Lns' ew0 OZw,K*m{6kXO6By/[E>\oH͠01!xq @˶n_UXP½_-`)W``"d)2HY@`O-O7rT+r^3 TE08s0 IlP @쇽T]je|m؁z,zܣD6/SgW?,AB8`tvUw:OY3mGc :} I_{K_zz;Od-׆ ?\iY| hҀ FɄ6`zvAc_;;v,^G_?T">}« ܄c7Ze_}^=whWݤ,T>L ܇ŊB9&6lT!1`Y ]osRf:KνhB2ۻZ[Na7#Wpw&-^dW#V?z9k:#TBᐍbf/I+z 9 w3 86-ǃO'C=R;p?(gOzLhMk 0JWם}v{FZYbS*$fx/0+ll IDAT?gu[N}jv'Cֱ) G#QSV 2")@Xufh1FT&J/ܰlWC <э{`r04:p2#}Fү[<_0_&1tt"`.7c?Be@v~aơǜ">,j88 ЇΙٰλ^ + zB(_)Nz@ 4o@~`x[zr=/K~Rnh3&g1z98pw۳w~LA51@3^Tcr, l.2!ccY\8@qP% s[HN8@ЏG A?cc61%֙ǿ<aTlS9<-p640,X3vsq.#xLQ\rzWֳ`&U#^Ytk4*!z;8j=b(;jx[pXlic}qahJ0;aAo8D !U(A}s-UA;(XП`iV{NahO-אwkK_e0/ d\3 `丣V>|Bmg$<r,n󾿸/-ˎJ ں?+9!>m`m$-eɑ2@~F;"c#;oћ]  >WMUfQw$9ș>$rѯ 41.ք"qb&pϞ!ڑSł9=f/ڡh Ȣ?-pdꛅ/-@40/o`8*\LEҤ!MrF Q.SE &`j9r' ;bR렁&P! |2^?ցG$ D pY'qsD'V0_# | /+T{2B܇k6-?eժY>S03^=˿qk_uS濸/=u$\ykcпt7XC<}WU[VCV+lxrײED ) /)!KzǡLpgqIV#o+%lq3l<%@3uPA?+%}B3'ƪǽ@ 0r~4AUB}G/ @|dC+Gc: wnۻ X_F;^w=D4]i`S ZdrFJ `,JȒ}GgiZht3h4${Ȇ?5à?-N}E 'rN̿eaP$m4 +ga!xӿg-)G0ހ-r ϥO~|IZ;??2:DiN `&;A)&J(k]s+ }$a0jH./ӿգ7&mD>2K3-(=9@#A?=c~58|'-bǶƛ2mnO|AZ]*5QXd؇teK4Ї>U.9ꥑ1)!nكqk <4z @P@ %@4x262{#asA,&ć %@͞ߊ)C?N`[y~*ykkOeU^-AUp% YGpOJ%{CVS9;WKa!faa@  z<+@ Yc; }IZzX`^ NJȀIe2DX K(^e\m.m6BB`6G^'p{'ǰ+-\Pձ'd~5/_UrHuЏ~%=_GTN9__|𐳈o~aPlGPVEcewE4ED^Rz pf$; R:|g ՜(L7gܑ+>f@ DD (o8bp꺡C?n3u =Į X< P[Et6$@g-. Ko;8c?@PʉM8yk@؃zWJdlRF N"∐{%X>+R-ozl&XH{q(BbdxD~:9j߱jZG|"A>B򧯻8~oN|ҳ~%6.DA7a݄m>6,WpOK^vera]t49ib-b>TG4ǨE ZD25ÊԀ }jỞBT:)X.L<H&RGOp+lSPX'N~rL@m?͐,2wN"C;we-dS#Q#>p|ͱXWǟ=hжuIyO>EgB'fʙ?8;X,yV=7BV?rVTGRǙ??TLOCrazeb}xS@pzvK,sҳX& |ˎ0;u&oX9?`=Nހ@XMl?6$K4l8ESnRw C vɹ.C)~Eo|}K|+Vu;_X Æz4[DX[GD`f?*^@6PLCޝL-G>B|(@Uj~-.ԆXmj?c4{' ƙ.ϐAWJlطهA``/7غ)9Zr%@¦XP@ [XƓzK5$N=Ko=6&%mTB%m jiKd03;-&_ߡ"C~> R*m_xwi =_x8AkZmU`k%@ضՃ5%s wƊ]n9K_P£|vWC?~7^w`@/B%IqFM F>LnTE䷠q9pv-0tEkLv'[6պjk˕6-`O;q{_?˩S&9ZqڇR.ߢ4~R |Rr%+g`},(B0p>.- 0N?<8`"ًKc'lχ5FW?TOs:SDgr Aeס|P@]: U 4sh>`{ZS_EC#|OOmTėB 4 K}e /~U D 06D8orxނ-꺸eŀAZ]J"|S(!:ݗ]?kʧ* PQ79}ĺjpy\- Q؈/?F(%?LcPn]F E)AOO;HT>dP>PL)2 Z3J[b/4XQ!慼xltƖ~؇58xUQv1+_iJ ,y.7,5IEsȀɢ2SBp9[& aI}K/ o%Po#ӯoHܪd^YޛIzG|0u"^Yu)!q~0qCQ;4sG(8Ƈ+m99[YjKu*Y,,edPein2]/4YVvJ~BKIjm VͭC֪tp8=-J!p*KoŊo&[/Kp u 4-[GBB04P:4d % ]d d@WފBl:>cKA7m)z ;CvdaP뭜-B<X]Ji`O%4RB#ꩯBt775Npm @ ˢ9*!zI6}uʖEe*nIDUx{YcelC"~#Q;Wh )wk, UYTz?73b$ / $hN@yA綐uhhKLA4ȀJuh!͞% K}dX@yeDywl06BvLFr)LzihGN A!`xVXc4BrR -Pf,WyqȆ D(Eu.ZX'P=5@}0B1n:nI[6P^ ]P?/2RjX^,J%ea EUׅE6RŎ_> P@P|P4K /v@6Џ%WŋOA/uFn3Ba, }3ܠBwiU&,u)J5N 虽*=!4@jM5i4PIQПY)އzPP*(AN YvC,Ҏ Ct3 3lMʵ_i7jۼ <" Dy @#Q>;}ilZmU:֌- < ii!\XzWq=ܳ="I@]PUWٷm_xmwsm!;.;&('p΁VRW?6@i*(l#."谑Ef6Q̓ձ}r6A#fX,{OH9^}) E `uZ(j"U0d،%1ho9`U^·@z8;K0| eQ,7d1D[ٚt(a?F{P;QIH]3L@p@i{P,p=#x6ajҶ18( 7@v2Jgp*3ࡒdL=p[O Qv--% #n>ﶌYPp/ݻ=.!r}xЯ8[7aU@ᔳLb \7v.OɠDyK H2zv@O{BmDxS)8PO"7@tBQh!q_5_jƶ8j.5Jz=m]fԐ$q!CrVz!"oUÅ1"=168ˋV Q'.5) @u `(3rO>4DN@9@$Eֳ- In :poebmn6ocY|z 岤 ( } _UkPg9)ܸA*x 2eҀ}[4@Y2@*WdT) 6`!5-z<\<g<ʒ7ZvP>4A k:) M23v@l“ PahTΙ@*> |% C[q% R4=,9pvjM,ȸ̀0Y܇%\qێyu܈,c& @AQg=-m%f}Mm DvKz0`d@{MRWO:Q}+o 5,j WEYnK(N3 .Dk/ f{ m()cƏ-'y *Af&2G"C܇] ivoS~4 cF{cnlwтx%z6` z]=2 [(Wbns 'g@m| P-nLf0=Ӿy+; p/ff ops5WFT[YlՍɠ܇jCq3릊X @ݜg> :8) tp= Rm!Us " 6nYz\tPa{-LnY`m<"#(Uyw RPN١ܰcW-xGNǁ aYM#B!/J{,'YF/rAeSo6-:KT?cF_椈--S55k]SGPZ@gA5=,[/i1b;tP/WlU۟IjKPzz fU @z ޷Kg綮Xc#߂C'Q9Z>%?m}E8PΈnf IDAT!_Uيуv7j&!2b\Jc{>#мGpa=XϤHJP w5zׯ =n'<:,cm^n ?hcmmOpWxd> EeH G"t ])۳Ptġam#)?~C|iTU>Kޯ,teO,[eT VJ>kƝsvA;{n-G:6-.I}+}Y*j=u)n.z{(8(tu}5WejpY F/ǜ.0-OSgI~8L2x9zD|[nC&Lص8:X4WB$F˾X -+UW*j.6o]᳤u(K@R)2(/;,zk ^c9 gW%G~d:诡 0U .{D9ž29+KgJk%[O8C T (}'E,<54ʃc֛=BwTthac=V:lL1~h}+ QLdd+ $!|~SWay]1WW'=˵i#硌!PDQeM#?cd?ឍzLǞX=[cfe3'( &,Yʻn]9r+)Q{9 Fd=W`?p'O19,,bg[#1֤QȀ݂'VLW_v>Z" WgfW&)%QsZaؐ!>QE>6*̸w!2 x'kCe B΢#ɚgGZ X½z(KoNw]{Wrf|!qnOqIYg'}Gw7؋Ƈz cs2h֡mG:GU*i.v^i?$E =*3岨= .8~02!}bcj~E ݱG hM7m AB[Lw4+9W7v#+ s/j9&=t;och[Ͷ? p6Q J!IqgՂ)O? }@l:v`'!HUy7y3yrGC@!:+cayD@ X/YpqGNO\\x-e0 "_ +u?Q=t7تnn!9CoӬyTl@#K8L Ǭ\L23iܾW-sϽ%YЁ2p&[ xѡ[Ab6 ^|d0[/i?l4eaY5x YeWYe<j@AuͤL@wn  }X-#PId,6UfB4 `Q >KTm':uoC:s6Eoa?]h*N >2 q믊z 3F{h!4a{GyB[yYU9B{կԫN2JnP,D}pD Z6Fekf {lVe@S~l[G4I 7m@p2 (X>ط1Xo?XWe! b}YS=`_ZLBvDTϺ@:Ww-'(B){pl!9">h#YN LKQ܀A$E id ЯWcSC}r'|tb,k;d-DO=e"t3-V&!6 ,l{6>zxXЃcVՕ[TGu*$ V/@UXHXcݫKq- :z 5 z_թ08L$7;(2(I9̐GI$ K2qc'47Dy}z]y16< Y\7Ufk ~M~ ĺϹ4x-u/608[rb{0;φՓb=E<706Uz1RQ1d{-s pi飒AAuif]˽@|no 򐈏RW5neA?izM{V:(c U 5fUs|O~l-wC?w&߆49`N XX, ?f»ܳ34"= 6^6ua,3{?W|_铗n@@Tq@_-A,[2P6 fa"?TVPϪ0ߝ,"bhf,at`ܤa)>y#Yrt Dn߹ ֑=jSڨo_R!_8_aōU;^"= pO ax:Zx+a<K:+!;ҋ $ J>y0BYYZ΀0ܰ={.aya=-b0fQ4)@/J>NWx[2*E ` FONv' T_ Խq?<X&@^AH l-ªэи XUևEYG^eu+~iЏS4> OF!ĵX` q t꧇h8%ɩǪimpyh'4@r(,B8;4B|.>W :poZ3N((*S m@ zAdSXo[ܑq-fYKX6+T b=^XF=4p%rU&L&W,C=/1Zր/w008ԍ&+\|C;Q1A寤 k-Yao0I{17,ڶ.c4 \R} MC*zD RFX"yLɠX}wD?$e؍`B:"iBռO% ܃'>J>%F碲:qCj3$[ iKZ:/N0m;u+3% 5w 롷Y9B|vGv 8L?@! ڜ&Ye' i߲6`r[,?y7,kMwl[> ܑ~ Yճ{ovp-r*z)vgD6t"a#J˕ ~it, N@3cj=rOCY= ZM eWx /= | Tx (z,a`L2E5AuV)GTё=ETS6GEsE5#Y(МY3ȧ{(Y3UfJ@k h6QDMzrx8vxysN\FzPƙi@vKQBWdc)HubY2IuЃ Re?y@79"0)3ZPȢYn-GXOljm/ϞA\\{{G_9a{{z f+M %v]PfixMuh' qqȠo G⻥QBJ48p4-ܧ6ȏ j/VUQfg׮n`g]>=f~7yoNDniJb`ީa dP=1{9`΂֮K2g*:",UgS,(i4 c#PPcej,"5`^>QDǷ- O 0BIa>6}D{}DqєPS<x0pr?z7PrXf . A BE>:m2rfLS&,7XQ`zT]HLxH&J% #pnyEmue?֘c=x+xx{[6!?XvdJ3'?)}wcgo!Te 葔$xȇj9:пit;ۚ@^|計!ǭ ӑԑ c=d"}ZE_ @- uy%WgDK'~ SbV֖, i? /V]V y_ p X2hO~+Q&?? `؍sO. \еT;T3>ijb$?u97m{ @zf2`vAyX۠P/p^k2xi矌߻,X^= ]@s2x4̖ 8s$uwwm~&@gȖ "W2-+iO]yS,7d(Ȏ\ S%!R2w66~TLGaC4Fذ !Bi490;L" -AHOe ̤Lԗf/G~Т@ !W6z` #/;JY] \n m$C_&;VxEP.S C3<˹grb[{#jy Hr ЗȀ}(b* dOBڞSB=_#zPR.C"ڌR0F}!>2 д!>ݙC2 6HցX;z[ף^3]|$"06|r*d&72V:lcKNz!2d 6z'FbYwv2 n[r[2AѐU>E|4a6>VZ&k7D:a)Pqfh`2! `BbuՂN9(8E]DJD #1yuDH!j[%,O 6 fIȏx ç݈kSq2s1[WA|GXJ ``П)|Л<ʠ~l`/FWrHJ ht}1FȀe\,} %mUMLp{Ϡ[pkgNo<exo|+!D4 0¾t.o,>i[\ Fr |86=@0j=G57C}jݰ"F*,5o3 *}ljo.  /4! K@om9OoMEM&Iԋx5PF~x"b cN>%l1pv[TYEKIVM۩Y}vCl=t1Ɏw)o$B,^דEC۠d`|'/+6;~g_UӅF `}8r Ҷ afU$HB$sK+u Q5$Bu3zsho6'Bފ54#~ǭOoݕ X/}߸6uahMEjDB梣i}]kC@zX"MB?Gw!g-[.}vh_d’dLwwX , B@5 ]Fmd`>" "IVN< m1@? NH?H 8^,ÛSpvRBj)CmeP꼬.nt%/hv2aN@Ih&gp΂h%HN?"FuJs&# ƃnmU_:a/]:$[x[KL;7wo  |vl{pQ# 90<XXoO];t#YOi~ ~HЂҽBxBm ؝mtuIЈPз|aNHEڹ0d IDAT,XV |`հ5AR97xpSoůtyx}o^wo`g솋_|pJ? %To OHe(zJc|Qpoe(L>Fn9['L.s`+nq,G mk)#|s ƏX`s=&U儿X0ReK ᣨ Û³g<','}x]Ma# {bR(hKu84Pp̊)jK. <3gg}D}b݀`!SZtv`ǯN͸~KX䴰㯔4`_du d JJl+L/!d~ȏȏ@ _c@Y?o{ny}7<-|c`ݾv6,r!> b9L BB{<܇ C`n =47SWOt"lI#BL*4UÐ~rCQ\.@A[@mIeL>E|Z6OyA|~Z:} ር?>y¤7'IGx pN$01n|U8d@&A I|1AU<^XOU`=zG(t)gឹ@ߢ6,;@VU_z0/ H?8O9 cdKCv`<^H/-B(W[VY2 UD/)KxpYJȴF|dA> 3'/r5YhЏDj[;D70\V!#*O+>}'/B#>F0}"pi"uH2ЉՠÙȨwRЏ #էyzu~ܳ*YЏT>h!0>=aD[;3aC 6A >-_`wJX&bbH g=iy1Q7~#9}!>dnK|>A_E=BC'~孻4,]XTj0d`c {/\衍*&D B4mf}A@|eߖ}P Mgjm^e6Q(ÿ 8LngmMule #W0R0ɝAh o{a NГ aC ܷ̀gn( -#}1re!I+Zn[,%UDf `lVV.FtAܧ}erR'#IAQjULE5j~$2Bi!KP~P]n9E*1Bs, iiiJX2ŷh+e9+v1O(^y05x1eSK#PCv`ƍJrCT r)[26g(856xhЏ'y-y`xjBN l[Nwh9Aw| *=Aq3|u?͘cJ24 HS`<2y^M% %D8LY!L=ui:+I`=:4D z+#.XI, JR2uW r-\GB?=OȎD[$[[Z8/,Xk߈ D"@0m/9+V_KAGu"jB2 :#>=Y(o#jo!nc2q86Yba؝"X\Y?[5 %DV?O&5S?q3"9:lxYM -U4C#6|Z`BJ@xY[uu| [8f&M i!fnnf'"[rG) F\@I0Dަ߱k~M!PY,9mW6S?]=C:!;.~e1CvX5 CsQH]s<1_o8 QNЛn4$F͆>HQ5ͥTOC1}Z᧭zzY u$dǡ1}(O@Oy!W(tRP%~"W3hc8H>Yukp2_?R2'P{pW%QUw.9XVeh[w!>RLć悍~!t4ZFAr]|UƕF xz##q~RU0fG4`0Ո  mYtu\& 0eطIv+Wd/}*XW vU)ć :J| a)RB\8ܹs~rRTv?eG{v6 &ڹ*NJ5*4%E40$0{@doFd &q TIDT@m a/ ccz[@*|fo; ⥏4mY:B?Y աYti\&qdtoK =Eqq܎DȀCC Dx`1"֊>b4/FP<nGniA6G3.=xCZ26L~7uFpX8X@ #>@f 16!bl ;w<} r.!bē~(7RoA_{ܖl()#)EdGx LeпB4RsO,§T'(~04  QrC~f!|pxָ6ijàcwᤃlʞun-S#N󦚁f4>wS Av̯]?^HB?"oP\5B?RYpD"ЖT8Kx7(Ҹ]!!)ALW 7u 1P6S-[H.!"(=,^M͆;p B`Y<ōW#iTG5~$Y@? `KP~cX s.1xucLU$Ubb,~!)+'z{>wYXb A kHH`KA赠Ȁd剈e@H)6+jLj^? R>">u}=/zQJfI^I5rSp0rK# ^$#\RhC|0240l_J tg`~D1ɳ)NlЦw@ TENX(-@2(nr[àĆãc|_/xL1\ ~djyW>",\!= q4m ,G:xG?6vRGro+^E qz^8}L[k]r*VN  NKS^Q*ǭ}5?t=Ha`L8[YLfwV;Y6)Џ_p,H,F[2e!>R:Gq^C'vw'hL[ԫ{DZOLE *+% iTPz o 8}r/r;-{J UxF!Rz`*!|JH1 ^4҉p\f!>u\YėQJcA?ā,% ^/wP(^pX6 C=$)p[+`37l@Lۈ R&60,m,1KsU _N\zŶ'fOx> QiҀ+òm>60?{F|: JFm ! I <QIGyNKl'5Y85+ѣZ-%, zg{#bR|n{b=*c[0O!qEksADN >4;Mpx}lܮ@h(Ƞ dЍ&ZA ,1V=|33zwaxgƁ/ć}e«m~lA?jأ"__GR^>dv`E!ʘ;*~gL|7O@K`$_4z۪Y0lA_֎ؑ">v0 @ߎ ա?} :"h͆e!p)|!lgn{#A_O&@Nh4&c{G35 &}|Se/{Wʅ+"ϏT|;2(GSN5eeSć6 4h3V==HtDu铼1:(NX_i-v%E\~W4@3K*v d@ 3 "C[KbMfAE.ϦVdrC)Ma/q+ ;웫@ov 4@܀wKbXJ1@mLI2G)ĐBhim!>Do#(5x5 $  |JN ~"о"Ȣ#M@ő }+epخ'*UODX"2 Dv1Ldp|kaQi_bS, #0}TOq_8OIV ns_x`_E;؟ 8̌At nhiI݂"w~Eɕv aH K8 dp?E|R*æf>G}TmE}:6w7H>hs=8B*a] >P:}'.݂:k[8mFlؓ *>2H¶j%xLq^7Gv1\ yV E1 訆#v{G ~7NkgaA a/'H~Ҙ~ˋ'-Od+hij5xn2hRoɠNH$C ICmhgឮ؏QK_x-{KiWw,Vksӽ@k]]4ʮ@EiW_qpCz Fp5~a!T0`' IBih*PŐ=f&#նjUA!fџ!A?} Qꨆ? ;V:(:=}|N@V#uxCP9\$m挠 %W}aɀa\RF{ ʢlAmz*͒nU65YV Oពj[gm+efO2AT>R}pb;Hi`@|lX;Oi+W#?P+moJ/;Oc>QǎY@O4TL n@Ӂxw.Uܛ{XYXXXX N^PBDbiJ+;_DI=g<3soy<Sܛ6}T5_}ooG1ancNo|! $\PQ7RIـvP_(As(E|M7s6xfqq4q?\{Qz:GȥI[[s{>zЦspRbX Ix.kl@FNWD ddgY { ѪcfU\)D0ih/|9kĽ߬E_םEW9VJL䶏wm r t = ^3, !ҨoܕO5({'O˽}U| ֣S^/yf Z_֐~O)E2=@R3>&I G$O9,D )BM_;vx8:^+\>ҿO;Ez5E_Fko<Ze<ꯨHPlj 8Yl;B[=@N`\W,U>U^t3`mYoX&qo/ ?Ý}o/SbN)P{R.WQH'=;] 'gwd9,d8j ЇOCZ qiJM^>šh4)DlF=}]kD_w{T@e._ _,{1,l@t3c @n=Bn IDATc ʍE_lȱ*}h)\3ӏ_dxXehW[_רI_ i5&g@wubA ?JcLeEk]V9G8ڶ#nZt>ӛô?mĦKL1Yz%M~#2 #F2uHY T)ޏ 6)a~pMedIvX0 yfGLkxTGՋ}/~W>%k/QdM ow&?8c3fP <9?P'x~"&G4Y0gQ{͉kǩ +w}wZŗ?}i #}b2h^p \crMZߜ@ڵq胋 NgonrOÔZ7zkI;Y)k o4ŽMaQxg?]z/ӽKË[B?pJ^1)W4[n N ü^,À`h4O }?Xjo?NQW؃P&Dhn w5]97E_vu&i\}KS0S@6 3(``>}k uD1DiBV<Z0qo YkjȮ:SЏxwCrosK$i+iӵ61++p:ͥ%8%9c-AwA=xo]; @'v+nS?ނ[:6/2l7#mş~_Xؚ@eA&EJ~ sA=H{fi[4]oir ѮZQu{ut_V9ؾRpZ H>'fM'Q8TƗ]qk47cCş|tcZ)2&2rN?ҿ5- ඔ0bY`&XN0y[_3ޗ<X$nپWf>)^uVS&։ܶ@N J1Wco4_ޑhYM^[ub%\}{'2/ lM '8:= wqt}\-^;d)}}م#ų0+.Sk:73N j@xS;k V*dz09'2}مm~ lM ]1.Fmj}/9Q8Sk:U3(/˂5AJXfy2e1fc3G-|IaŕF@=I}@{ @v9w6,ƙpܿvx\s:f'#رtA"fP ՝ߜY[5 #|ztCLO_?sOo _xD= ڗ@*CO4:XUR^$~ I̺M #}>EU/ILbh @ hĀ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !)B%$ 404"Q@0XD T$ @ ˓hҔD!by @@R( X@,OAHCHS* KI4@i`iJEb `<@  MH@, ' !U4={IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/ellipse-arc-expected.png0000644000175000017500000001426111642654340027303 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx~IDATxmPH )(դ&W\#M\%w盓_BQ~ @{WvcC@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]  @`T@Pv `4x&@P6 @ ޵  FhM` 0*Fwm(;@Q0k @@ (]B@@W{'Z4X(}8Hz x8.p;5c|OGTLC//>}|)}^.*^/1'"pCYjn \{ٟgGTµY(k|DUT»,^){eSN^d@EL%CzKט^{I>(GϞ7~~?A. xqg%z> >{t_^Ⱦz`%_s_ԑ1+>N yB=ǼϚL\ )[g[m|ď_8_on?m4L+/{1a{[_Pdz~ (n|q/#_W/@I +޾cc?^ύnWVAx9͏st^@<4ˏ`Wq0?no xxG@r_ꕿFg $n{}~+_xG^ %n£?zoX G BT B'}{߄\/G+qV w WRG+};; <@C{b A ׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExoIDATx=,IjEVflGc7*&QITfGx{F{d߾ @ b0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 TǤu+;o \8`?|SC!P^ bB@ &8vQٰ&|S9e7  T.,k_<+p-kh7 VN3dÀMb" }݉=60zʏ' ]S }_0ѢMM|nssWlp}q=:`8**~{d^'j-R#p`edôIB?> 3r߿߿Xwꕣ_ԏ7`3Wॻ</8~$^ ?l_=*o>˃SشgϣywI<<.+t+iﶊS&y+t `UCl&ssP@ުJP<R  1 5` qS+TT/_8@S)q?Ƀ't\t2FV3T۟-_n= v+~?p/ǘzC/Gc<0F<|J3%PR/P29ZCNJog |0uioy_ ׾l? {tax<8 Z=#wVyaS(`zX90;dſC}wf&;#E]1+Q5Q&snKyg gOzȃk+~{W* &>+&.7 F@o/^V?^) Wy`~O@go,  ]@D `&@@t#@Xq@ `aDH }@?Xp@ `aD;>,  ]@D `&@@t#@Xq@ _X,@<+p @$ J: @ \ @$ J: @ \ @$ J: @ \ @$ J: @ \ @$ Ih V*@% M@Dz P) *\Fh ZGCJP 2D:T J( @ Q @R@|B2-k '% r[x '% r[x '% r[x '% r[x '% r[x 'LJ1@HbV0@f+S0@f+S0@f+S0@f+S0f2W?$k// ~$@@$@x#,V'^   E@d:  " ^@H, KIGdY:Ni7w (M!@@ ͊$@x7q)@6+)ڬH wG B@h"  . M!@@ 0fi9+k, @ c @`V@̲8H ~UHY0  =V!f,/ X, @ X//8L`8_^jXq@+K`Iq<, %  \@o $ d'@@p#@Xq@+K`I_Xq(DS" U " U " U " U " bw}$| Pqa@*ePqa@*ePqa@*ePqa@*ePqa@*eP_q@jg*  S@쫪 * V\@ f_UEUJ1* U" @ WU @`U@1@E_+\B+_iQr  MUj@k P@l P#cEKt._7`k !`ߤn3l6v;>c`׭n"@p>R;}n`+}0}@3M>>]vOʹnKnvS^P[ lo*\lPxV`# lo+_oP~V`;Xk6]cb[:'WWBmLl^ TSI~tCFhe٧@lք'"`9G;`k+FY,P]x X/ v{ VepgCrw{gbpg ~o&Ѓ.܈6%|B{]Vj@>{oX1xuvO \N X//sY[ɽK5Λ"6q]uJ{._~풻Ff/9U*oOVd`?OQO8J gXP=v@[s\=pK=<l+pG(`?G\|+l,GI^;+{q.`o7 vR[#=Qxv7Vv Xwur@'h@[ Xv@o;[r*`*vݶflcWߣ#J%@ Ԭ TSF_45`ĮՍY 9 `/8W@X,o;m^cK6%,W@zN=<;q# [.;d-u:>[c#`n5V[a `u1t[`>ț42l.׷_Nv1zCUW[;=B[-'{@^9Vs\S? u*VPYK ͠fB( PIǹFh/jj\_V`#w sf[:28#jlR" o+s@V98l&. \e_l>>_^o,/s \ooVI v7{@$`p D Xg]vw{@Э) E@1`_w vn,ž:م@m0ѶV:݇@}0UAN;~za$}o-tIGv5P Xz:kT W6e `+` {+ƴAྭC\ڥ@m1Mo,nmmj+`+`ool[K掸o;ct; Xw- t %pVҿn@@ $C)nDia!nr7"`0JA`V`֑Fꖱ6 mMnJ`vl@q+`oupvõ̀VfVO`OSo~sFMM~f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0wFN&f+ 흑 @I@4 q{ghM|n&@`9@  0fZ tc0IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/multiple-layers-expected.png0000644000175000017500000002074311642654340030235 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݍqFЕB.ȠlZk  lP@!mlHb7|Y97qǿ!@z+Y K@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=бg F6uU OGG߱N7rwx} >.*KI(> ~0ǡ#Oxۮ) ٷ>uxͧ d n4r 4PW)|\pGs?ϥ9H\}<ߦ O DCMxӮ=bl]& e;Vp +vg>{3y>ʉ-xٗzTxÇvܼT3E skNw~{^ă)bB34sA 2,M;^?@~S܃g7ORvo4tv1x]MQGzw_ەc+Q@Ht7PȯǿӞs 7ͥ`<6J΅dԈkT!cj_b*?H@D*]fP^sa>KG@dzFe7g7}k}x|#cy47eM_w^W=/e{~w^qTݝs;<-OQEM=aT?Ց̾,#F3|sCpf5]M@$:wtzϬ;g֎ߒ|.`w$:/_R-!v<ˎ?b%i*c[P%< Ȁ7VK \2k:xy><8߸}E*ϝI_}Vof4Ԇu̞)`DHg?܂zkǢ`J](Z4k,MPMW{E'g }ܑu|czq_hz7|9=}?x.;+}{yͫ }=>?35Wz歳wsZ_ 6?#)6O*'RFٹS YJ~-48g]FC$<7빖Kʿmp%`y5Lإޥ 680:?3//% 7~D4k!vvG ϓtyvSuM>?y]x[/h5GyL xOǧQ/;@~?ϳ~4-%Va0Vx{OC^oG<hX>nnw1ԙ^ϳuYsV[Z=|u7͟Z<סq't6gGz:{LoͺǢYƇPh Ivjv{~p m2`eHu:^?^n=?.>[O#M}8b`:fYojW^ϼݿݷh_gxc0]jb` ju6W |SZٗ3j:T`fsϩ_Z叾W N`'LDŽ_dj_&_ש>.~!8,ߠU`t}OQ̀e_{۹?\eƧ<\>|ݿoݷ- Ƴ'<tcuw |(->iNiI#uө)G>D7/Go47>#' |ۏ'>ɯ?dXnҙ[uҖSa= ^\I Anuboy~ᓻu@o>UΠu/7_:w(\\6[ m܇Ւh?} 7- FR1ڎ۽^n}hOx\#FZI'W Β>,7Ps7sOxX~Wk^dOS }_ѯ5)nI0K`7i ZPx,Xx,o10~M_Lw1f_7~c'$kQ5}ЯE1ߞ-P|LdJٓ`5K[N T?fohníåPmx'Ηe>|mT߃grfdBl ᜺YX^gisBH '$MIg~|1`zk^҂ji{BT <*$8eQV:Ϗj&M'})?&ٙ/ fq+%?>tWT:D<{π#3A!Eݜ+|{!:gLmB̩/DǐN[惝8'X^suT |(ͩ)/Q85"cor_ۗctG_v6]SՖ`,uuR&b%7VP_vF=Њ7>|O RwήdśvWMy)'[ůt?u=[iqCVYyst _LůN渚|.PrmW۳)lxS6kvqЌ:;Q8՞o.o٫Վʷsa08_.t4.Ӝޱ9iJjYֵwSgkm_[hO&l^]}Mb>ɒ<'(aݹOM-yÌwK|qY_NYqj gu[8߫28; ~蛏}Q__j:MT`f@3^L(\_jمwj}>~; }+_e3Vapٌ03⛽޹юrڪzη;fBĠhU hi_zZq7hꢓff71j^^ڗ/47~4VeCraWx=RM/~ p~Ck~fji+ C~o?׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx %YU{oYYY5fE ("‶m{ݴm?}-S̢6-C+-*((PP TUEse9ߜG|qΎ8'oUpu2;ޱqo4@J %@J %$AJ %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %@J %z@J %"EXT+7>?!y^WﻞfKGsdub~ş2%0;?i!??kS>?3}vT|Af/O ?A o_ *s}33fg[΋^'x̾H$H:o<{}~?8@$ٙ|+` <3O9q2ի*rb G.@6=G_Jj`䀁H$SPGE]hO[X|i'p߉O>a23mh|oX᥯3_p G|v 3_mP,d}LJ 2%;mZ ?(jղ}|[Y]_~ڑ7oݷ.H'G_~]Ulo9)srd^ VV@͡l۾[*g~|%{m /_>s)a"p#W rٲ+/Y{7\qgʝ-XlcN{Lzaswo^XHX}4 5O8Vzq&A{yk<80]cycb5s5 >p+~nCLLvƊupUk<xϸgn4CtqѹQc$Jt}e%X2?h2_9Rߎk16"S1 ơDoS%LWCOh<{xg3>wNsWLE^Z<HX<}15yɋ.u^nJ#/tppT|jhA@]f66|mCe֑Szi%1ͰyjC {l:/3\`Orbh" "aVkiK`ˌ]/ñU)}Sz" 7t9@6G٧dڕYytxm/:T\xB|{38%8eJjOKai'p@+19ߋTp|j"G;#r@40M^ A ^ @xJ$#K@ŷ9#`PfW@d(v&gLC@ի=5oXkԓVryjԨ#SZrY#u0IQ3;g}]mo)Px&4:as!w!lݟpS h暾hg$_j55HGPOd鋩Ey@JI< 5EGޛ*5]oF u+r#ocFЪC#gӞ,pпB8U"JsA(d) t{>G9Px&,Θ\~36\C_W mj8G~=90ARj:B/,M% 1TC矵 (h"jLFo{KN,xb`jAW^ʾ1Stڨ# mP74د %0#{wNE"$ESW4RFo \й9=Pl`!j28޲m_)neQ).j ^s֣WʿB_6D>檍&̆V uOuX<HX<}1 5yя]xq+6 NpLc9)c f}w߿[끇jaNּVXR /grgDN?B5w7MЭ@ƅ㎻+ Gf`H `tĔTsBJAq7@=ڳ 3t`NS #ɆvfW]C}v/ ׮]qZI-?A:986VC'6ǮyBc \|k\4x F $FOۭqa7@GOJdS_N[;F@|B#7^'?{r#nGy @ld@A?W;B1l47L[`J#Z$$EKĊ_^+g7mt_6h㇍5>Ȑ 0{=?1qDM{xQ0 7o N〣\.GD@?M(>qWCi@yԅa|Oꩂe t @J)'9U'Jqs@ĉ@w޻O.8sVkiF) 3"%yݺ q?|4Gl|j4$EH:biW㵿tΟ^8T1ZAoC/\p_6=4xLDm=O5*@lT Y=?:'nGv Q?dZ9O >Il|',XCo+7@~fc̉RF#@1'fv@ap-H^sQw__PU|G eOMJisoc^EpN-gHo\hϴG._8R-^bq:`/Pb~{y/fu6  _bʹ3xa8޿`"Um\8H8Ÿ[W2Њd1 :rzơs:L mhQ^ gw;v׮wL'#`OQ\laϰӿPѿ]m_j;vsG]pg3/"/%d0J``*L㭿gѬSO>qJگ}˥gvY#ݟ rAl8q彛*?Ѐ|{W0 C:h$:TAzO|bF{S04η+=.IT=O^IJӀG <2ÇEiH:Tha7$^M `Y )пfh8NW^4_G߳?7Ӊ;OnǶ~ ;xKgXv97Tb}G`ClQZLFI~YvehߞRjto uXG!-a'O:aEyx~oJ'gS#w?{~98,6/4׌Vd@%rD{NOW|ݵ☣i)b_3c+dƈeZKD@:d2;n/zkU~hp Iy11mSw߷[:?Sȅ r:.pD)e76O-LTiF1"c!h0[yǘvG"AGП~8X _6t}|+K>iHB;-e[5]<RRQ;[8-;Tr12Hs퀷j_rNqk3N"9G Gs亡ccWW!? SO^p==ݨyƑ+.^UUP.J 4Fe6,#kuGTu_vњ;4A<=OJ}^o.&zϐ,ӠFWephC') @sy+J7h= 5PpS$4-[p-)? QԦN<ǯv l $_I- zOA\:j}tVS7+vb=y9g:ʏ6v{FC.|Prspp$mFq\= @ +/Yaޅ.aph8vw@ 3dj5Zp ?ELSM4oC ~ ; @<ԏ8_ߎџkA}Q+̳tkji}FTs7u59 >VNL cCpx.(nz]5-Y?p#@ "Eԉ  O Off> }lH]sN;D|#^ E^.  &oZYx1%veFg-@ɬϙ硵N_[]lEs<9^ TnDWRU>)RJ `x~붡k38Pu8݉Ri`eO: s菇*  ^ 5qm^(Oѩh`38{I5$|ėS&̪qX_%W4gZK\KE x؜3Dw8zQGTu@As (P$>-|Ӡۍ}g+Emi'Lz$ݻ?}~a}H/׽@T $kT9L~LO`;KDR; {%!ӨsC 8'n|GmX#=ҸgɌ /W"l`d1;@ D*׿NY_MŜaPpKG6B+!tus]Z1`o";9hPo) `+~scQ$/8o+/9w OEwB(@VK7 [;#mS)8`w2i|zGfJ`أܥ[ratpO?F*B8@)}PE5;_ܜK'O\8@EDng=ow>$@8'])! $tj?C8ȲSzȎL \,Go > ߎ )}suW(OhW1QͮKivdZ|:qKt;FBy!is@Q]4vLLҡ*G0P S(r㖹1)I_fs& 0)T*$RWoٸ3?[A;1GF >10Hi#KOӹ jG\@/#gJ;6}&KԟXYHVD] _yf‹@k]ٛpi@e-86 n2`Q@PÓ t=M'.QuQ ^nw=Ώ?ȵӧ_~&n_JS$WCx q&9/Hi# ,C{l#H?z]3`k,U)5J x0a*#[ dz} >;m\AՖYW9ل/; 'ןa6~kgUhc3`B V(|>_i*YyaT/9\'Zz'+.KtM%l1qI5$Ө¤WmVmX1KXO1ճH٘qޙ SxG>_J7>8H]OV[gK&3#` vl<-J0:|Q[t8B?y˾zqoܾni(V۟K C7-$YY*) @|RH/L$ rB+ U'D=t/֌)0Ԇ P@ \ɗ]ݤ_s~;1#.TоПHZ9I&<MWODb kRA$s$. @&\\80p 8=e"pdNjk_FA]zA˯qC+pבuΆ*SDji]:%FTD)K=m"Svrde'A5 h0LX7*82(&KDdKUӏ@JO?g y]%1Ri&bs |ܠR3@LUr LRԟ|md<*!(JU04 X^A!H'Vw#I\ \>^'_F? _r\T 6J*Yhy*>h'գ&d=_WjsGeb_8Uh*_Z}hfvxb0qIiEum sk-*\!贺ENџ(69"F y"E, &`~5o)aꠤA\40i*@3Np7xt>D v]q sՙMu,uxd]w*L{65p џ\Qٔgʊ +RVZc$C qlWޏXdp_8@ɥg]Y>fݢ.O jGvs- => ܱ[@^{ceT40?+ociNg.ނY@*wBt,rWp3\;<|>F ǥQiǛ2Q$ }&%0=blη~q;`( Pqs BQ~S/ q:8?C~g.?Я |4#338&џp #cహ[Yi X=2{o ˬ&KJ>Mdw^5EE}f -8US͝Fey$f އ^츣+||͚U \d1("tw0@a d^)XDvnw`lBqEe_|nj!sJt{W_ 1ZM $A>*zمkE̺W=Y{d%}oLTՌw1x jp'F2ԟ U'%DM  S*S[طX䏪+RQ ]CEMxʗd3DwOGE=&.B&` P 0 C?a>M?"d=?uki&r&NH& 맥e+T&@N@ DwVrToT r>EQ"Hp,@[hQ-"p;H@[ LO ‒Mu35%pnI TByUa$i0poP Ӊ4JSK 7?G" ` E=5q@koK~?}u\A<#8=掔\KT~N@PoiOWg?0`}z`?,P9bz"Wgʣ+4%Nq+k>~J8N!^q$=P{d/u>[Dg~dI0#S_2WD0qC A8`pC_I `K1>WVT߾05?SE!-O9q)UAZ?'x^?_KVq@Vh0֑g<~ݾ.ā^NhҀ4<_ndZh8V29'0"xGИ FS>ozVu:/6_\u8WH5Dܑ1nϥVQ_zhQW2λ*a_i28 <1W?}Pdw8@|+aKE=:I!~0 LAcpVy 8 gRS y};{u@iL26Ȅ0=S@xWH܎h_q?.#US`e&h+D40d:Q'.pE'A.& oCh
;} hvQ2tLҪ>﯃QCtUksU_5!Ȉ\F]mΥ4`Y|:,p dQ'UI i'q +uh7WAB 6_SK F@A(d0V"DR?*as@Fc=o49ķPuH /@_W5 nb0x'eS&_, %R beۚ5FFF,ܑ2 J6T80Py;g/QAF/:?}c3 Qbd Uߣ"q04wbp+"㶠EhK cΉՏN*໓;#UZQ'8~+H7)8Fjx 9@|ѩ ^gpyП,e KUZARGx IDAT] %8˭ѸJKpj8C   eleq_y6o9p.E/& 0*c?Zo}t˙or۝k_}%FWep,00pѿ`z9ui8?E*AR^,~UH]*>>[ ]Q~mCSE/niaps-T6 8# _&F/|& ż)q[T_ZdSm!dwPBSנ4 &{:2: RepGD9ݱqF@u7P_tUt{8e>8 @4b@ᣛpQkh@qNqCXK~lgC`}%EթeLzGǔ3[p;^}N;f?Sq>E%`.8?1G1 l tL_[ӌN-H`{s,I UZN(Rx]*bEHv-R70,FaP?Psh׿_YyDŽ*h/-Ƴi$CKwd['BARgم 1Qx>NrrHVkP# 9 d8VGL6P=KPpcltAw (&P2# 8@q-8@'.6/{}BYo桝xλn.E(i$!gbGwz:mG`/_CDJi H%AsPҁGߤ莟|ߧ>V㭍T#+9?Q,=it=mE NH"8^ b&@(G;)?4kd+M ̼AbI2Wp@Emu/Op}_,RkK v#T["YSGCW–k+; v&5]yAAgKe/ʉ߈Ϝ%} EM!8@4Ё מ[[5%h`4yuFHb jj־eb#@o 9x=N0:-zg:RE(*V菅^#oA!:5NAUwbw51VBVvN!JNk G}灉CtwjX] ^qGs"vLy|Lwi2AHF&V>Hmw9{u.U^?{5xj9qWD}DUy)tN)x?Wz، ,}X|d@@؁|ݻS){ \ cb6dt羼 BHr|vO&w8P:jw weoZ݅ ٳHPP pZal9^`Ak %I/47Gqވpt9KD:_]MwlAYʋY)P^yd~}ǰFJ# _[2Dw1 H*t4' DJYڳE}IEvX40 }.ad>S+0%(e1l 0H9wr>fN&=BQ箾 1M0/z/f0wdWQ'JpL35ogiI`m{ျ#8=!;_[ D,I p ޸iN!BI$$360͐|v D#]TaC8( FGżZ0SI8:9{14Fo;[t ߞ:LؕIN3i~[d`QI`)V2h8N ͚cNIa#lG\ ۵!W}GT#c5>끋V“@F@hD RAݽk߬cEإ#°пp.L'Пl8 _8~<|dO<=,lqí+͐8ʌu#9@|To&Qg Wz gBJA$d@ɢ1() %p3Fp~椷Y(>r*g܉F.Eb>wO?? {WS1-r#2.H}Rzsk9(BqJ:(~Q^?~n>p9S{iSUDEw/Zژ^ u;ЖɁPsaB `V怨~ C#Fv;UprlG)3Dt8!cTC(}:tI߂y$`c&}0?zt ^OVp@LPl$s+~1OUbe{kҼ歛@K[(% BB'A, qL cdiǙ4$p{UV7{Spdw֮j0_\?k5诫'.Ԇ}iO*q$E}Օc!0-p!9Џ@:+%tΛ (Vq ټe8AC_{pkwY#? W#h?~ҢA\m-r?66m /v];bD Ww^[ܫG-FÏJѓ7&#v#\7)X=Za0]!@;9İ S8eCp[{6QyrCH$ OGG20ȯequ~݊8s X[5m ,bF,ajTmök&Lަ3O]/1Yx֭i, F[%:p7%AM-Ff;6Iv/Ѝ|CCou3xDЋo/*ާ ~/wME  8d8Qw]* `E @b`,sr ,K)0acq@]sTa)2pݹM쀸;@[j+!k;8v2՛tUW73X6 s_}*)C@}cW ŀҵ$5 ̓9pɓG[A4Z1`/G|W*fMSX5S8@ZsH h,A{emWi@]ӑ90AbӉ\5VJ͗DN/Nٲ+^<3.]p+.Yd5"143OӉwG?V)3:*i uwBkDz5/F j?s$$5- @r((rpOe\sW\j:Yg@cH\pd d8FQ,䯹}`W]ߧZwqDvg4Qm ?ЄJ8ԝ&#ʽӪq<1~qjPYDLF(wa6,Dgh ,{j]Chs)cTN(}%U)R`#N;)T]ւߟv-w4Eɴ_%pC?&SأQgSÒCCݿ['_d鞎hCbPр l5 j@2v?/W}[[r#ij ! aDxu]aiT\ &erc0=&8ӆ~{zf~ _u°v `Bi~2N.3DhL(׮0Y0t8w. a@yP6 f$%E68]]jˊ9)w4 %:3Kj-؄Gxd><ω8);YTP ?$X Zn?U&cT~@H8<)ЁyvXh(zRqJ#Hn顽Es9#)Xb_u@@g Np|Vus%:[C$c8@ IDAT,Yk$ T3bq+ʐ Ս{D%1r Uui;.hj ({x=H@JFpqmց4їlۻ~]ԺܑXW%VN&@qڻ"f$|ݿNݿSurU9ƩݗGȹ@~*HP!CH;~xvz*1uf ?H.t>zR7Fh[^nv^*:pG/ew&DG,)cL1m} R]P|+Jk+ 0:,t!gxK F@\60prр )$!};w/ܵH)b _kũL:-r9MQtވY(8@pidY_phF.`OzZ>BJQtT>? SDNFesǪq KFZW FdŃ_}@ 5Kpo,(K.o]ж?u咑$YrC;'bǁ׵% h\rwK:sb%DiBݲ!L29 GEĴ=[hN`P'p@Sp|XbL1GU }m`ܐ̔os@8 (=FsU8+nf}?]D>0x@S.Kz^=ؿ:&c4ck_"R 8*i:ѿo-0nK㽊K>eWs\~)ϣB p@{=A?yy5bFع}ll`nnN6Vy~L_Vqp ". MI0EaZb#SWxrGW'[i >i.?n,OMC@ooRX|ًp"c_AN,$Yf.*?p8 +tQoiuGkwWꎷ\ԭ}#0\CR=r:vw\vW5Uv 6:tXs@[0sbb& 3HWЀAYq3S !2]@0Βp#hNc(O Hګ̢ɾTG(^KO0<8Z0ob?J8@wB@DoaUP|y|"ơF~wRwxU] i{S "Hb'k1I Jx?˹ګ {ZD~Ki mU޾q_r.}(yTlwGCы_?PѺ4B@5rfO,pD8 S]=glh}"f,&.5eq%ZHXQ\TxY{e1BNV҄ݻ( ^bo|e1OH| K&Dr8"0~_4 Ѐ8@p1cK~׸bݲ˱E8ٴ_=^gp$_kj{PLJ ttҴqۋp@odt]H~Z? 5Pl5qB-۫8?yԠ?- O$AF_^Ͽ\X8-ر1mrqRи$ C)  ǡ,M`v?̓W{+?|w46\ ߶e#*g FC_#éMH#9m/pIG3`a1/KT#OkxQ ^ݺl LӨ@vvzP=3)P8@v)qn_G'':ٔX{fNj&K(pfr b~=Բb S:Mc(?3X.L5ULaޜ0 “9xrdd_ٴvh O y9YWLS8 ` G5?i㠟C7[4V:QD!Iٱ9*ņRz vm#K yi*zsf\&(Nuwп & $,,cNJF^>CxS#_B-ܱ['9•iOeګ-}bFm(9;%p2]SM1&S)$Eݭu坅,Iʸ;3vHT~qWH"5uѝϕ #" t%0Ɛ (h C퀆v?6p'it%4:75kp/_Wxxlg8ttȿ2+Jk,)@j 0ds3 7'8/*4iIO!)>`Fv:)&:Silz'@bJ֘L#|G# &P#[wBT%Kc Աж[ߩ ciwcM˅`"* 8rq_$vQSR <2D?W ~ On'8;Za-EJ"Us8-UUkVp` ٌ+r#WŘkה%w8;cYd1($OF¥U~6VqL>:%ކ 1P.@& pX5H-p9+ަ@J8_ω?M1} LF9Rܘȥf8 i@}ne\译Zei@!C.-H6T~QD @5yD??w`O!aX&fLc2*@R Yn-]B@3 A"Q|L[RQX>-#40҇MGo1fvM8`zi ͥϨ:&+S~N77Dt/Ld^;DWx@Ϣȳ,F輳s- \x  i4>BGNǥdl:ګ0oW!"JEFw=6ЇYWas_bUFC w:A'ER85)oRwwLLeY/ɀ7A` ;XZUPqZ#v|@W5J4s@-@)$5m.bdF?ۄ?MF =9p>&zxT|-bRFFoVW H7Gw4p@[1si`VE_o Wbm/.9byXmOO!)~t @MF(ӈ+H`DDNb/egFc8[vz ؑk+;[hWJEe *S9ptz+ o `;U僾.p8x.98o ipx#[tEvH̑N\H ~*n$ѷ>諸˟G@ S [O秐g{mRL{8#@ Aw=?T{zzOR9tAT~/t{2 27sk^`cLx%l%`qX|s o?ct%z);, $~x3-kA v}8M}<ӈ_!V,K) ;庪E \}I&Kl i_ՙM*[iAѿ-.lzp wb }eTܷđ8hnwF1Âr4P(IcJuTr8@?کFG@>F@B :Wh %1t;=/ȥ98|sOp_L`tnl^)ް,]x88ljShNp!q G*q1ݽ_'O,qH3?^O{־ʅ/,8 ʣ1r\8rf&?drtP~=3SпqJ7uO,a82NR6'6SVqc8 F)#Vr}zmWϖm#wOM8UvõLL&X"m.uvR{቉:>;\]%@q] V9|S@N"G^IWfmm)J" S$. @DBH AX!YL׻^/gvjgtW~,>֩ 犇_Y_Fg 9+{9xw +Ϯa1ѶnBdn/pz,{FoP -16np/UgHL Ew?=Qaڔ'|_OS-lG{-vye_hkZfL.X Km"@zY8^u~DKlSnђ<`G!9?:Z5?Jz@sVNZrBb+Oxy?5$kW^\_n'R?اlr/G3CT,0؟3#GLAuqh?fgxA_?RAg"5꿳S`g*ny[`ukl`"_TjzT^كK:sX WT/YB{+E)`ꎁ|R S7*ߵ+HSYvՀ,D/+߽w_vvO?HLa mHB:N,n]6|mϯ/xgvⰽ[^# wdy叭RgõUrBXc@$RHTw-wfB#9{Wׯ?s^G% 81ws}r\yJP'*+$-׽߲wt?}R3_b'n ""Wp zYv U?l@Υ0#TB2NͽЗ厷Dt1gg_>S@_4 ]\;]oS ̏9d `ŝrrcQ"*-`a)_Cr@YPGq+dK'o߸d(ʻWDkC6H2kwE%Ӯ>ysxmu:@l@.5~nCG"_X?$N $x]ۿ勀 }{A XK9ԇWw$7` ҟВt@}V +vf-/a_֋OyS@n)C)PB>* XV/?:DyP4##A Qo~ IDATM E~+ʆ=i'r7R <A2Yra/QDžɟA]Hll$0G!k {?闿+D;GW/Vв`S?WwE+bwP)_ߩ8/T~Es)2.f{*=\}a -~TzClR`SKƣ-Jʍc7l~~%{ c 2GZ %*3BE~W~n pc||,.0d1kA0L,{P;Jo}u|kq{tC:F>_vns@GO=PCp•_w7<1Y=ݡeYK `-"# (NKWA{3o쬀8Sg~R/sf ~G@5PfR&Y>^ٽA?G}Ϟ-W==rl<_#2:݌aHB\Sv3xL:տ.dw P~&P2ۆR`]W..F |[*?s<T"GEP2g^@^8N t 98~6N@x8#>Gc]` h FW^^9 r>#ῨwzqrKƌP S@>^"\W /{D_pyBo&6HSAba @p⎿ H;'w>念`Oys~XKI9}nW<@? >;NH;{Uc??n"ad|~E]"^}<ǐ8*s@Nppp8ө ]@ONt9HfPvK{]*@<&k([p~XVљw7?$8D I4FfUS@*|̌иR+ @g(Ƕ!JQdE: /#.6`6Hԥ )t !kCelxnoFrITabYL@ƩB3NN1ib҃QHR!R d?T "M?(1)1dqc`FhCP>ƖaR !w?! y63ng׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx븑PMm4q@bWjPDYf?VS:mس @?땬b# El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  u+_z^3@~⿘? ^X]@dp/*ҏ/@~L*z֖+?*?>O y4z / PSOL__@\*W&$OQ> ([U>'5u1:A@ ?Ԓ$miTe^,.^N@\e]ww1nʵկK6݉?U/\M@\cg^[?rOfPrp>\w'-#C;`'~0r_:eeeZuBksmoq;?!ޡc?oӧN_C6{nx;;˟}6Mmn3ӵ  5k=)O{u#צhoʋіuW/m~K>*>nA?|=F?WOt?[~Y6K+ןq\0Wg{Dn1 <ܣbko'zY3 WAdZ8t6ˋ>>s$xۃzg4ƫM:cl#6k{ȿ? t:k?7]×9 p3]pXv҇7ϗ{k%V+$~9 _o?U]vM=$0^/ `F'p3?O9N{\şJ(M~|[KztX u\7iGqq 0v~_ף_ϼ4.u޷y~exS `K=yڟ2I`~zwsY a|l baFOwŤ/SqS).7ogOIK[LTKu|} ~]eOlo/:O{{B=f\?; Kb'x[ñ?םC'I;o{/__;.w5K֍S<"J Ky?~sty >-`?յzwTs|ژyjܿOyf&pZ?jFxuɿ ~aǵ?)}>ʶ/)|S[Ϧ-~5_o=G}8p}{VD{,O;~UnHkk7]ṗzU>{ɸy\ZSxoyN[m֧hIQ.ܩ~3hcMgnbVCw,:=ˮz~Z;~~~+:/jhVGu/ &l?*mv+`ngso:ggZ?F۽hpce|-fi =ijnt'g_|p{p#<4S홉7mġ^&XgA_Gږ=/HҧpAݏ2`@DS+|63I Fֿ@Ĵ۔HNYMoCeë)oh <;{4q+Y P>}]cn&@گV#6 `.n ~*O!ix?S|8MC^s;_\xeNֽv<~< -֋{#^T:vS,nŸ]Ҳ;ƺ@lYP߲ט)hsޅgY=D@TlW@D{:;磋y 2Qw sb8 jxE@\-džɌWk8c2usn. 6'^wд~s?qs,! {%Xwb`687vakN,k9I~( _{j10AtA#WW5ˀSxXyU#]:gdX*x2`A?龴s sc\'+L.eһ d Pξ1 K@f sw=vk110w_~(("2)D5@>Wb+~3$eDc}N(~gWПMg LQ" @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ ,CIDAT d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ GU @ , d @ "DB:oIENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/lwpolyline2-expected.png0000644000175000017500000001641711642654340027370 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx rGP-̂f5& "4ESjuݕU8^P tKzo߿? '{&&@` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B7!,GF<-΃01`f<;>Pa{??8C7 7'o2A__t/> hMz $N4o ty:0] ӡx8 P6އ2E@,>'p_#L)u>G p: (d=C /MBS@؄zHN.[z/W_(|@઀j_{P0yCߏ;!fP'|eVBw)0¡Z9 /vCP (%J1J`O搏5ѡ!7EP;>D_(|@A Դ_v迆4{mK{~e_Wb P$Q7^ k G@XE #|7ь ﭅{)u4@iP:7i4[/ J,'̚`\0 .O^ ڸW^DW (38AZ4jeq< `ozp0x.&h ql 3@P$M0WI@̔fYfo [Pw\t6 ` 4AkS̓P7i|<&Pg'M8{<I+(n&?`yd>A7XOL{. @[@!14&. x߳?,5T A(_VF@….FO05ApFE@A h|\0nvB@\ O/P@ x0Cf)5M MX M03AFl]syi>0S1>C;Dl\W7EksQP4K~~ ~Ja0Q] e.-5@\js23MpiR T3ѹ&4qKP!kܿU\Y|3w( |84ί "9 =is}nP-h 7'ߞ]zwoct:)PeV<4 TOYl_~}]˺2M?GPѿ7@lUL<@^eу/]S@̥Umv' 꺞POq~Vdnɸ}0BJ<ǭ|eP&:R,k$j^Ȯ}7GD>c*ҷ'W{B׈'ֳfvDϝ}(=؞S;ןP߮c oe(ɱ?= @KCA\OSbt4o>k˳ ;oWo_u{)zZGL{S6Z+xA =P)OR~^0QN9”90!輸3g%;nv\$t:\zgM\ w>]l6ڹMOpKϸoQwKx>[6}x1SN~ɶ՟6cpOM~V,-L:xU9]~/폋G<&=I6kpC*qz]W>uksŭ7M?A TTzp8 hyo60HXoMQ J}hO[q%Ùs)Wom_{1]rOd `%}DPP8hxVA}Q(bVCѣזkn{ pkKͫXu6_@_ss^کQ:.N9].dy`5^ƭm||8ζ#IRGݰ$'WxRdi:~=M:5KB:hڴ Vԍ튟g? /vsg9gP1MEcH ʼ=c]v?UFTIXIΣ0Blxk/u<*l=N `'ȡf!bٮ׫3x0}:J[m50aY"vaA aMJUGgQpr%e'J]sǗSաD}I@tiWYStk_Tm^78dn%= ;{jsҵ;<܀x$T_s8Kz9{AlQ^]POS#} a##qQW^Gؾ`+6ˌLomW+gԃϯC6c{o >ŸhFwP;A>{: lsPgyV5ޗLTsD (S`u~?: pnԥ#t S?/7s[uo Oӽ-&_VWL&؜*k`yW! pK ٧uA)n>&Ym G>{!pj`0- WM +Po+j5!#>$0B Az4}ј `ܦj50MP@ |Ypϼf&mV55psP}|vFU l7|60hB_>u 8cٔK 6q  @ P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@?Qx(+IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/child-tests-expected.png0000644000175000017500000003135211640436733027330 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx&Uy_`Y`a%b%*WQha5ۚHF64mQk nA)?*dk+,,y{g~w9ͽ3gs!@`L@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( @@)@iq@ 4 @@PJPx܆  (%( yxHU 3*n94,g%l̸'x݇@)l lu\@76U䵑{ODF?L;%8q{ID_=@z3#!{,N"\%))tTwRi,aU`ǏxbΊx0F2M`%|A{0ƻr;h1@ygO3M p[-W M򅵶b`Q^>#S!ȀI Z\1#[,En!cЖAu(.$Nٔk7.#5WiՋ5_u_>(B8\F.;[wEȆK~1<}/z\ }ۃб~8XWvWJn8o뷾ԯ/f>ݗ3d1scf7`˧OnRsym5#=?=;Ls ͸*$GՃt/ 3%9}Ϧ{yߋ#|u#;̝{s}UYԥ;N^%~: "0tԲCkG4K5~#F @I[VIMe{t/,tj6': =Wp#w.wR meZQ2r+׼_&e7SRe~7n;O@Obi3:=zGG?@}k#䶦3wgkY6* x;4/<hX3%, !AojzȀ9dblv^tQՈ2SInjw?_Oz'.ޕv[7.q}E-b@hp3r}eO}'_~?OdkD֝zd&TDv uݼ/l1la2cO;}8goo#`Dd`m4b ÂGt~sy&O`tZUCqy_*/|nҫ-֜ٱTR(Jڱ[%Vr#%9vL7צ~Y_ojV4@ ءBȥY6%@:f2H Zx//noR #2 v@`}G=( VS~TV _N~7KOw,PL yL{&ȏWm(uPJ;!B Mp;6ȏg%ﻩ_y_J߻PՁJ5@*Wɀl2J` Nu5łG@^ 뫱5YsW4dHrȎC)_{zZPЀ"J2&W_LbM(ɀdPM@Jf/[e7<5 ̌~;V<{\f8%25$Ql߰n}%fރW/>(??+u5 [!KRh lǖ:8IYp5&jT4}mwoA} E>"ᖨsoh>zB?[#Ҙ22`soQ䱠Fo+N_\Ï30?:xqp 21eb:3`RA,HjQX1xa߼ENړx{񽍕k* =8R(WG RH< "¯翬|l_m(ݽ~-0-WfSv9_^GzmDM7 {Xs 5_l<ۺw6Y/? nHB4`kBs9D5:Zd.d^l_\Ĕ\>Ma?v|di_4Y4;5u`5&cX[>}rVyaz[;}˯e;S yt&0 }]_Y\4EIRfsZEcM }ꝳ /ң2(Cfh~l@\E I =E xLHߡ )v4΍?[\ Alg-[ @ :o.ׁ-Ġh~/'.0q,O8vVA=?sT;:*j2 BWO%2S?pSwnm"^ ܡWˡz j@6j~oGV!@ QO[] A@co;p{Z @1m:XxN>ҝZݸ4|r(Z a[Pf,HV_qlV!@nPW$Z%hWt:B1w>]~qYd]8ֹ1!;%6!m2# +ͷBx}yF˯(}φ "4OPD %4R/u.("z>pʛZjL,P `E1W+[2 {d$ᓗ6,[vW}Ev  t`JJzkJ_uKX&o9k+ /UG 1K +(E](Ma `YQ9Ǝgo~opYbgݩk80g@6};j, "L2SE'Yi64K$e kS9 _5xL mG93ۦ>\oy!f$oӴ)ٻ[_⒉}ozrcȀ)Y5sD"O #~1JgBl%{IXܰ=9xp/ˢۓ)q@V߬Ud@ @=L l ն>'ۋo*ȉ[sxf#JkK9iI[v>8WĄ;0mJK9 ;T< .j*OwުRMB P_*:y߸5 &_IRMP/`Fn,GEϿUf2 .^څT< iw,?R^C)!(vbs+4.˹Uų~cCjh@+;nky|Uxk^` ekC=I;[ӿ$ǒ}%<$kR1;/~Ȧ!; @  "~%m~uLXfYτIٕH~{8c-,h@ {a &CS}?PNeǾ @Q!Y J>PH ~`_:We/NUet7hTلY!K$nw}6~Qwsdz@_*dn?59\H;#dN|D 8.Z(/M$ЀIz\Sy_vٰnyt1(&[ _VjЀR>"HDN9{M,G #6nXS/>(?RG?{h@) Sl P) &}Y J E q`S13 =5 09JC Q&\p3~_ڼorٿ@m bj@1e/ <(v<+o5ه^WfQu fd+pA1Ž sћM5/.0f.;ǯ.~~~^xD7&;͒_&_~l;bcAP{Ї]]2x;_l5`1ylcXp "#f٨Lmx%O6|YgO w?abh+h@q/J 75uL]pފGt{OF 7tX(-b;ܽ ߼q &޸yV85A@)[ 3&P/?'sIٿLc3~}^ww+/O @|{%'UٿOjte$рj C 3 @f3,x_53Y[݋DPCRC&@_rn)W/Zd_e8ӈh(Dc;ߛz~Dc/x䃀}naWnNyk0q }Lю!?pGO\ hk.0ZF Y 077z˙*!īANs;H4`4/?LW~eI4T@6 ˪+}fL/~tVp?v`Oݭ,Oɹ$6ZNE9%\˿ {ԴAfȥy9 S3|/< bIٿvq>oK @>L̇;<{?7zfdO/?߹i]%٧~@<p##ODbϙoXܨ oe*S;D #)<6j&}YSS54ksXm3FroQM|sLyOAKMV^yߔzD_vWhl;dieGC[ŵ p!b5f=0Af1c+ ^)Nxxvǫ_5Z<׊q:Bnj~<_$p39ǤVKU-xٿX-15r,Pqm |w.`ZX5>8r3ke/MlWMwWly/|jš S W]feK6יVA(A1{,/ WC _ @<T6Ӓ ?>Y%V ?Slg_IhX $^I"WEJTywx6f'OV ݁o_ m񩏞xS2Z4c_OX2(u㋜~kfҋ*!Ļ~lͱ&4eiɣ05 j@`h@A //ߋ?"Av܈Awh%m4iw^D1)0؏{@RH3f۰{OgDʎN/RY6JoB6q@m!`͹_G@9I`L@Pe#ChQ~COoogK(g:&OH`M㿻.Ncw\jY~࢕%i851y˜&&yշ5׉IDAT|\%h9 u`me{ p_ϧdkd% 0o_[h|Dv-\t=n{~u:ʂV!ҷ{ʂ `@CFc=Gwݿ'$ﻧ!!A]+@ NDo1J0bR^v(P0~:}ڂ"!OO_QAv56J@s`=0)۾wIlpY/Ee@&0, FIyass;#P侹`^p mY;akVֶ9oX~ʺ-b]l\hEj4HF7h 7RAySҎ Snl&P1;%)Q7@4t#زU̐ $WL*fAs8JB` )@NV ٞdCޯ: !@JVڄ89iu߿}w{?ٱ0 Ìۄ60=aǯCBP Dz9D3mG d߅:OI_ÍM VՀ m[_GmhC)6ktPqFm0}#A'0o4P3T8N@igΧ[@WN8 (%@ 0hD 5 |`N&Ta˄h PNFST` -1XjAHhDCa@ikiLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHv|h hhh1 @ m@u@0 iLJAF&Z@  Z CHms<IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/intersection-tests-expected.png0000644000175000017500000001643711701151225030746 0ustar chrysnchrysnPNG  IHDR{CIDATx]eY3i.2QjQcV-RoM~ȅJo]F(R*DH0xӪ^UTmIM{aQ~u|gg>g7 a}ֻ7}Ι}՗O!@z?Td @5` @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ h&@`G?'~䏿c! zOa8=CC@w+G p2ֿZdMg B;NГ `fo@ltOur$sh5#ɉg_̊y]?Z@3 5B\&PT`Y t\#Tx_{$[9$<@ljxL@@`n ͻ~9]Wz_& $@TolG>!"Z%@/>蟼uŧ@` X%@;4u&}޹";WwG ݭI`0.1xyǧ F@8 & FBsox`hiοm$A?=ؗX?6(/@S-[v*v]@j @@/@ݷ,:N{k)E`=yY'W}}a`m}elm?l~L]zC=IЛn),S]9dk>Б_?fp;;}Y%;u|.tھ؟Gi8rq`q-;u;`}TIp榿a{ 65|<ܾyip+_|1?uȃЎu!qKˀML@nF`xhϷ~ӯl=Pߜ H7Ӵȅ<៸kG>5bI`I2"o 3|&ݜG 9w^};[?,L!0} O@gJv wxr#]_HWrco_Vu~Í*.Pڼ::q_ߜɞǾ g mi/R`k5$hm&.ۤg {+SM?88*pxok~c~ξTL̷7fF`S`oWx,*ty15^tO 4?m9Z0a?/ws_;~Gƒ_F8!`ỶbZeھWn^|~cWG˿vO鿾oIV}(g+ fۚk腋 Yֿ:|8 mlK~nH8dn<Տ#Dw^zes%s/\ooj}m7L3$Uw% wNzov淾}#ڇ?/޶b`U h 2Mi+lğ?XY3Xm[~>\ucڭ@V gf{?=yIO/$ qog_ hGnf@p+3>h؏9OM7~g/v_ Y}K`a{b`'4>wi!;8ٜ';mM0Wzimמ]}jk?ngW@ n˿ғɖGV|(4qF%|o>},} 0X=[3ŗO;fص^x{OM3or ]S>i_wbZA`i3ߠ*:~:w ȱoRl?qM=^Xb9,pw]~۹ˑE"VV k>eo|΀[8 swwZFYP 'pMׁ}& ʮP psds'a =}W5(۫8A[`3{GG' l[cb&я{a0XWko 6֥\g{޽G,.:S-@ F&%=0غ n0l!rp2 ;wX@$n[H^)QOs0~}hV` X%<zv،a~FH!VMa $͇ M+2'x}/o+q`-Swv1w}?/7'$65<iZ'ym u@gv &.M`J+].?/u91p~-`|0S{_!z;<%tR)|̲lcjZ`]0_~L^/me Iؗt 1ϖ8ٓ+h7!/Z& mۛ'm3$XmmAO*fߢgRC|$(Y mk 6 !b/?ER@7'G%p.>jC,Hֿy&lj,/[7?r?&pGԧ_pHg=, il /Uw𥡡o[/K- h,Sl# gMt`}豗V"p5`Tsy߾`ٱ9貭W</Lε/z Ϡ`Ze@<lS-}jho ׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExEIDATxɱPR\x$kd{^X*k{g@7  @ீ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   (M` @ T@ol({ 4xc @@P  @@ PB@h&@ *B76=@P   3t]~?  .?r|侚xA:},:ɛeZ@LlgdԷ_z{9w.gJ,倘e}]Lܿ Ǽ/y;6ef (];;}u~ h{9 oz9>M8>zWKm^`3}ofo}k>pN5 0ո9wsmlW޼OkG4_{9^=㒣q*]hkןC'9_ư7{ p;wtod縍)=d?~׹yayn.]U_ Ew6JyK.~UR~jP-9o qeP\?b>,aV} ϶݋F=w}E`>,?ThM0/y|X*Rlu϶݋lxhFe23O\O?}J?oENcx 08ѥNoCf8ֳ?#-sv@7w|f%6%pvŽ7g}E ͝0O(|{ۮ!Z~ qKN}._<7?jsw4ð(˾0Kؒ~>[}O)vM pS/\cS6S+%o_b$ CA{>]}|}.gH=gWAJ.FP0wŽ2|9{?+ Xy~SW$'271>La\@H'@ V@,zow%a0G8 +SZ#r#ƸP]@$ @_ߏZįw v[\YuOQ WD~=Ln߸=п_+9!}9K?w/7| WGs^N%|_#/V `U~/ĉip篫 |XWywu~e 5dO8Y'p4<&6Cư&_SGH `V:Ppĉ]ߕ|+};/2ƿ}q^j\ ̿CjvbJPsI^^l*~^%` GכW~۾[0,K ɮ'<5rm/ (x ~:NtLuΙE (V  0Ss?{M}xK@o21Y@lh)Zj(,~6P-c5~P?y vb @!F&_?߁|DݠQ{!Pa#w6۷ۄP12Q7 ap B{zo\_Frw[鿻ֽaV_!瀭3u_N)ߟPS2Kh8wvn7z۹!w9\ᮾ:N i'M~:dF)t{j`3i87žoD;w~]&^s~X)GJm_Vv`j`8NG{`|xϓ?v@`FV^;gvO`''pV_W>6X aRd۹_X$Mhq}ּ?`0?4Ýǹ'e zk4'FOar~fW!&JpC}Au6Hው (v?U_)~7Ns _oX@l8v.d?u.=\_ Eǣv\Cҳ "P{AA.Wo&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 H o&#@@)J+fk2 HS.!IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/example014-expected.png0000644000175000017500000001660011664234142026760 0ustar chrysnchrysnPNG  IHDR{CGIDATxݽ$IZap .qh5 A`U`"UVY!5V졺tMUeO|_sNVedN:|x{ @l I@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@ hM` @(e @@(*oP ([6=@+n~*/IǑc-.G @ H@:lۻF (>^MuN?al0v V7UySql40ZY㑌@81<8^@7kDwy}󿿺o}M`?&x `ht?o (/(fOɱл;~'4 P=7sxsd󭼓 `]Ŵf.ogF@ 妅_` t%uW5pS b.@_{kOu޹<&} -(`jKKc XnLl0? h0>/s2 H. y@٧wdLāU`)ښ`X-jH kE\)&d\ xH]O;;Ѽ> `gWJ (l?M0~V؉: ji\#Ϛd=w fPy6>~k`BXk`S 4$pjstI!PI@\|HgfW@n4 o lP;}O9jE\Lx$xL1cjNMp.'y# |x{7 `&X'm4ZCO 1r_` H՗C; xؠ \U6 `#NP N6P<4'5`O 65o{ xS{d-@0kM @|N'Q$oFp<'LN<L\8P`M{t5N\ȧg=pșQkM2pk0ɔ. p`&_.5~r=5p tw}57<F¯@P4):(w`9pșŬepa$MpM2 pk0)=(ӛtT 7F¯Al7+O~;ٵ}&WFf!`PcFժ4PM9WWSGP}FKc]d$  ^@7M5Tq T U!!%п?+3@92Ϳ4]8B(, P mf(HE * vw.2&$`7  8a>Y'8^"PG@j:7J (^}Mp͆W({H9h%ZI (d+@!:t@hL@fpMT&JhgH:Mb C@cUxhh(LA+@뀩#FP&~]:`3 t%kꀽ] H}&@ @ԗ:ē7%vj Vgp!@X BLM!0&J !@2̫= ݒ("AoZdY@dK$ t4P  u]@ @`X W45sQFKD `w/ |PF9 (+@ L\!]LQ\`r%ZK ȘJ/s$e (,s@>/fzK| |+lPG?įy8z>5 `s:`j y@=MO'P6{a5(ZxTP8|KL@4SG$P CaJ:`+30"a/qQ%bȞ@饟H P?'7:ķ(+0x׉$ᦩ_c $HV@]_:5 x(xa; G ; 耝]D@LH]@N> (E@-C@Ḑ=e\hy` 0zn.!9Pc[nu:\A@lsjJD 6؍B(Gt@[O*FMֺ B@r: δP{j֮: Gw=tʮѭ6:'@6o٧_?PbfJk:. rZ (Vky7}m󜼫HNM+LMfȑW+LM @C*[:Q|5m/T[T@LM;Ҷn1ӑzz[CB;`?yI@v)@V)(R~xLU tю[@d7aLzn<&j pS+L_;ȩ~ç>ȟѺzXY]<̔>+<1m Z@竑:FzZ wn V>;`jSsx>!{k>4POb_R$x(P qnpEgnnZAEup`yZÿ?cGWs ?T0Pcxoc_*o|qo7{ `_.B$胉 (#\sU%vK6HU]f&8 ^xޞE@dIy( \i}ҩ (]2ؖ}?vAg+>r:l`3ex8i c)_i0}Y&'+A!A`  m>^?Wou졜 ANAMPk<Y`OW, P FJx!*q^Wd9JT½wp/1)1sgU*s{v|^DzBO ([>hJ ְ pw|5pp.%0t%Հڐ)U)c1*!@K;H _ m;?~庂ȕ,g%p `wrKJh } ` dm5meP-qHS ;?fgU:8VԀxX+<KvE59!ZB0C&69@cJxY q : 4 4j/P3w\`m+<X9}ir ,p厳Q;b=Ve(=cIu-*!)0PV19?@,r@pL_Gnl+fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By N o6fFPkpPy13 (P^ @ ț @ T@y@ľ +fcfP'@@^73#@@58 (٘B@(  W@ *By NAd!@7IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/triangle-with-duplicate-vertex-expected.png0000644000175000017500000001441311642654340033143 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxavfhvVh2AIQƲDvpފ}~lbG@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp @t&@D xc @@]  nQ.7@Dol @@T@76  @ *  Mp ӹwo"@~X[ @`{5׷u"@ߏ7.` $X{zv,{uzAp~_i^.pGIP8ex{?eO 8w߾ &ZpB?&08"[0~:=O(d#iR[ ? X2A`l p20%07t#Z?$^xGiq~TMD`Iԣ y\XkC ?-.20Ə)<+}8.z?O  +o=ϳwN`s 23 x ee`&O'GcnJ 7& xOi0k'$B`Gt)sŦ} LsY>gE( ܁a x R_G<߁KXe?5Y#_d7:~Uzox!o%?)CX4M \=+WL8^ xpfߑ}m<`v$YN xo=| B6@-_ O2W_QE^Z\d`%X/G:º^qaA9Xx  bz<`Se ,U_u/!;9v5<&dq;_Gp2NxG2//?l_!^ϼ7'| XT8ή&SӦ xOs:g !|_;doo3Px }yc%}_r1/`~< |x7@z{(? ~G3`OT~ãs }@a73zߐD? _-W#£ΟM曍20f?zNd`z(z!bCq!`Eÿ v]ݦo\6>7CͣPz/0^v*ݯhwoPv]!zeIXRk}! w<W@@.P;hɀGGLksȗf̣M%7Eކ[z}?.4=gɎ&:E գ߿z8ͱѧ^(J}>_?l 33?!V@nM|dD qfL@>{ ɀGh64FX\q? 8=/3/س)oH1| & P[AI^v:3gϙ}z׻oZ{z˺ erdy3fm;jyI$AI@XX$S/_$R/SZ\ 4G*>@jaPE8@A,2a@fs7!Д /RS9e HX13ѿJ=2 @#Jz DRrJ’Q|QbT=]JKΒ$~nna}A`0=8D7i&@*?jjap= ;&66ao0|f|5s,اC`bM=4TH'Wpeb9t! vKv'Я#]}:CW4TvjJy_s:1 Zt5P.|z`gAR/~%e(%_Ļh@Δ Sf}[̡>uW[~.q)q=藌wрK_ot4DoJ,MɛK"ŞD>u{ʞ%%i"wT-݀xiб6:WQ4.y[+w$ۧ-/G%ha5ʭ"Wh_5W%E%^ :ܣ-Tȴe@Pm[N "Oh`ڸ_Np^%_1! 83Im`BP>s\AJX"z}W|iw7ES%BŐXnOXd : t]>u$1;X$%0b^$G[?$-o>FIw\mǮjO>ru^q.WB8UtӀcץF43D2"8_//˖{n9E7T\FjG4E/ AahMM_ X;isG}mӼ&v/ [8VDP䬲E?\DJ20@/5CH^t/Ko-fg9%W^iH7b%= A4>cʕWl ?QjnW `*P5:&25 ڃ40Hm?|R$E1?p+X&fm77Msq7)rG1voLÍ&o 8F_y赓oq &H DF6c*ܥG >tKʉk}_ Yd ɺfnXGW^^:GaP:DY pwduo!du?%"pWj)8j0dѿeţ.㈯'`v G3դFezw_TMf7?:SseWkJHx h$𝪍8Tf&RH)ޛS2S!-U;Cwk*-A sZznviyFby@h@n;ewlk/$y2I@"_Vt #ܐo_cꚞW7i /6@@UwJ/. P /4`VRG8ӀC|Ni*\fcއq3bhE=O_u5vx5mw& 32^zQ;U4)\q~*$eU wDCTh@ |fEP{ σJ߹F2MpGb:re~nM>mZ@>JwV+= d[ u2\R-?ⓠzQrjWR,-pƺE>޽gl *93?ΨHe $!\[@oh .]ZF!K =AⓀ{5ǁfe0 _+}x4)Ej 1SV:;)R6YZ;[Ol |Mac 7dw5=JXZB AR NFQ"I A|L[C>f)q`ń`玕 \' 8|[7Ryf!N`X=?wchAܽӒ[܇i> Zz:baPFw* Z1f'2 8)Z <$/1p/6e4`G?e[̛.n AMO )%}'<嘅0&d.6 h.x|Ҵ3'%17mí! 0u;j H}U"m].& ^zŤ6i^߷$H**wa,R"Z|tJ GO͏?ybȆNBQ0F)1B!*P(S kܓv] B)M/+eo hB:U'-_Ҏ4R @Oe CN;C xAW?~ D@1Or0Џ_bQ( P{_oֽu)KOѕ;f@R=RtO X ?{vϋ/ I@rǂ1,Xv2$ÕȓQ ?<jt!P-Mg +UozYF $Ynx46П~@Rh3Vyxψ~]g{蟌+ AsoyȀGU(?d'3 uD %h) ,P %[82Ɉf*ܴ`䐳;L[`ڝW&tf|VX26@Bod2@uAU jٚqw5y9H#@#u@K=JSn3){Wd4/dZ` ` !O@`d/? c`Jk9笍zپX%9E%.+.Ϋ@3.c} 擨fpP=M 6JHM@[`mpCD>u6&/&=x2J;ֱ֥փsJ_iP2YV~f'+Z҄*"~,WPEi-cx!_'ˤ,tZNc#(ISlR[X<"3~F|d?>xĝQWұvnƇ?u q9==̗Ofo9B!VW7& <$v$a F@7 {Cۥ`  GwAdS4`|`A=@ -%+O̟DbQD?% G@D8WKնc#8Alk$ 蟲sAI{l/Pw)u@H 6} ROBLn (qyi.ɔYp:E~,d WS!?Oفq$UuZVpudD_=lϖ6g*0|k{{;ƼgƤZw1H$CH HO@[BXHmd@fbpR]HY)2|zQ}B@]! +qn*Pd4%::OD.L@4vpw n ʹta H[_, I:"ŜWm?f#@s!9?sPNm?g 9wvlPJ;Ҏ.9Y{Nj8^{ #SDv$a~a*wYM7<ն;gԲ`ȖwYu@\(%F:p=H&b{)`?|/UP?]+moV/S2]uŮ:Z>doX^Hw~cv]#\-z&;O4G )vZC$;z[ivK=W۱x qd0;B#(d޿џe}DH0'Aw8_N&!־+6rx|X_ \&̌ PD{VgG4`IDATP`,&wD2 pciȝ'GG:X`cWdv;4Y$2pӔ cA?pD&pCG#7|+XYoMD K[# ObMĜhh()lT߾ܒz 12Iqv` PK(lD_riLd C)/*tzCOKLԝ2P粊ϸ=Zv^jKuVWb}SKu+\@E%̀"#2[l1dGZr`_\RHPZeCobCv`ߗ[4ɪgfp:L|W.Ҥ ]- ѿ[F5\lh@C/7 ؚ6>]?DلK-hwϊo6MY4H҆ ǎT Yl e_(ejo6\dPtj*P~IFvg_[lFZ਽e;}N8Ȑ g>qc0ߠ0WZ 0Vr!P" _>EMc2d\ؐMB"!j ء0&p P Q)QÛG@C=FEB&Rϳ~-nS:;@SEՅ c%0K_b@/)01VӤ ݔ *PŴd/d=0?M lեGԹf1  `;61[1M_J ,=0a5-ks؅p/xvgoqhSuj}dCc ^bzJ@oD_bJ{ Yf@$FńX%s\=0T Sl]62KCV[ H]M_ & ߠ@ <j7. 0\v25(;K%9o3_13`>.Kl%`f@Ⱦ3qeO18zhvk׾e$`>:5`A|[F}.~/SJד" h Ⱥ4 tsNJy1& Dή@Ffpb&_i*е|0بgpUbyI XwS̀Z|6YfmqVɵG?۫Y +w74Vf9QJltWԥp46cOluWo`d`i=&Ee.9]jU V>>r!FKϟ~K;Lƕ )DP!'1}LqB034 }3J )ߋq3}֎$ ۜ -|9rj3m\\ ԘSߍK"K.}\喆%<^Y Z[Ԁ_pW|%~Nc* G;l ̧U%I@+t22| MD>PT'TȀSɏ ThBЄ855e~r W U&\Y$PLZXYSvm`   A掙 ȺP V NyhL3Lrz6ẠOdxMbOχn3뮯v*P4œ[[Oy7 x책#E .JY$ 2 A⻲"=bP*-S3;/[t{b*pk8 ^*Mj5_B'SkҞh1hBꋉ 1[I u_UJjSm12;FBo!}PeS`anlN5_ 5pe}*,f~@{PI"()k?Qџ_#ؙ3@(>iTn%w蒫=\ ! 0Ebń Llء_éOarUUGO_ Rh h6wO\$^^a9 ۂr@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@a0~ u@ Ə@Ժ!@ZZa8 0@?rCPKP:  FGn@j j] a @@-@0@ !%uC##7 p@aW0t_IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/include-tests-expected.png0000644000175000017500000002553511713230315027663 0ustar chrysnchrysnPNG  IHDR{C IDATx{.Wy}|Àc ı%.@ 06"ADJ,JUM[+-(TA mԨmNbrinj.2c9]{9gϼknkgk뜙5s#n P>h! F @ͧ@kpx'A˼_3;NOxDac&fLhIU"jӊA*Nf/Owpa&%iO3f1 h]>HRVWaX$ R! PcʱM)(=z^G#|#dv+v<:"~Gb͐sSY%Y{(gG;(-CxߑL"9k޶"@¥!h[)An Z-O/;ywUs5׿ۥOK`u+!R|@Hy?_[Ҵk9dm0&!:֍+7٭BPw潷 IݡO}5PB vp|M>/`S66I@ᛝӮ &9C5j`; 7\|޷}M_ܡ"EuzFSSЧElƹ< οǹ[;>ǟ_̣߿7¿w~Z_E'tr %sޙʡo|7K̿;U,gr3l;=ߑ@t9/X*_WV[+nd/)Y26F"G0<8Pr^3A͞ J=H:IgivLm/==wv]tL֒OXLЇ 1+ks}vӊX(*:.cU+wL?}Eᩛ{{׿Ue.">WW ?坧rк .mS7i}ÚW r'WL-O~Ʃ[լ]`ROݰ{+4y4h@()e l}BKca{cKeIO+G}tQ3洄ռ_t=׆.5 7e XR )=/x9*Uk~༅kgiB=xKL[5Yظ˫@"  -a*a7^?ۋΆkr)8vP/zJH쿌#.ʗO_pJj?eş*R dO &s@͚I~Um_+wsrw`aT2_ojZ[Ӏ$\uu}j@kzbnpʣ*5C Cuՙc oş杀`0Ͽ~~["ᒻԳ:2ײ-гu@;׼i᷽GB/n{"`!]NFN]ZO4mWO#dJh?Oaƫ@e_J?_s h)b{r_1ƪ9\ KU&OPd)!]g|YOEkQt/p8W+*ZtZOZ_0Fø?r͑O Ec8y^ϳfIT+ş_xÛ?U+w;\mū fW/{ѩW=W@Mp[=t/i;\߾ۏGV5y98JcI-V?K./ﭗv*$~^ժ/m :E9,RLo:_(A yJJ,&fouUs0h7y?zunyyHInJ%X`ʘ0P96\o#O?|o͒rrFJ}Y,Ь‘1 m6X>_gD嗾+Ԏ#F E@ps]y0 _BsvFG:ȫoZ/Fu7fKoL164~`9:d|'θ҈~rhZkcÍn &nhIo{Ǘ_}"l] wωK5IxgS4=FHg'> 딠|xW? hȍ'eyQ*A('58q8O9ʋ.?)i.y6ԥۿ7P]ڶvc+B~m]o]κr6(i:U&4R`Ueyl[ۨpbCү],ݘģM8ޑ.ϯ\X@UJ 1#-k~xEs'>hqcg@/N0hYXxlձID\~$>t_9hϕ<2 JcIsֿqR Pl?sO}e Ԍ_tETvʏhgм:(AzjJ: AO<*q)jy\h=W-W{I`Ȑ5&Jx88V KJXXFސG>p`8??H/focF2T2O˘<)J4.`D/ٿjgAW{ރO<:“Za1۽ `$,.65.R5й/F^@ϼeO5ʙG/59:[ٿjA9c본7p3Cy(b d/MwҀZo:3y/M*e`y"(}ľ$8O~mrl"4AMv^2, {_|hteP,KHD;կ`p^G34҃20嗝}nV|V#j3֚uW `y>]BƿZ(A6jZ 6VĿ6~!pW8n;R;W#mE$ @1sL=c{N7Ww=K2H FKU_(Sp]}fHЀ_Cذ@3I3$+'(`>ڒ/ɚڠ$Ǘ[&AH@y  IDATo gC`B^%R CL^2^oa(!0@0#%ko 01r.7"O0Xd7"[0g^|5-b XJ$79Yn _~ԒFv>]􇁻$. #]Hֆ;O`qΪ>t֯ycšCwgAAv#P:W`֮E@l]ͫJfo'@,LVdSmZuB\iL~p` >ki5]lh 1N/1;!0)kv"UP~]b6~߂OmY7nܑe`?Þ sH P0Żɀ_n{>|b%S,~ t!p_mwV‘1c@奔_kwaPR6]moY[^sMVM&J"0s[Y Yyl'e`_e_f; H%hN20_ݲ k&D$4M&5UkpHMͧoVoOjL?CoV}_ U!l#fҜd9yޭ>'{eԿx ? DJK@7q8~Z#0)RN!$ ~&G Ps4}R1`^` + H+($@"jay{fM@ux7 `%Fuv>مA3cOƤm,Hmt.ؒԿ%0!@v# M^^0 H[#Ӡoo94}|)XR =m{$@zDb1ǤmFD*,2 /tH;~%0 H1~0`0:N02 '44w^"П H*00hbq2 O>oClCK|l/R>c1ń#&Ru90ecM` HiG6{}!LS JpS%pR "iL=#@&Pvz-"}rʶMJ< #Ӭ"( !8\5(ZW|ҥvgrC(PBg㡛Ə}h7 苔3#Pf 3/{yFT0{FC@^S߳0W  l뮼1{3O{B`0&iP1P$'& &m!pϼħYmf ?O.x«X2Q``!Q'J6`=*;_m^o: `'*M ZD>[7]zѩ˖o ߃gXs ۟]/Y]۩OFzCy~iݸy^񣟵bg0RĔ~3l@Q+N`Jyhr&NP ?)@]v7ͧiH[P=M$'ߏL&0h֟%m_woǦQU $w2ofdϮ?ڧ{V6z 'j3MgpʻӸgtBT@n 7nSobW~uiZt./{"He\x@K̗@LNcYeTZ]p)hMTMSv>bHc}ݸ N,[띦 <-MWGEz @7>̕_N"29m?CG<@W/i֙7;6MyRxic5}/a-pYt6|k#Ery+ /]N>W*/7?-2꿖O[;,N#˅kOgpDi#&+͉abO۳\g;|fu'N,qƖ[^w>]oŞ*\ gsZ$"W][?'8|ݕC_"!wbMӒ[/Y{x@S"տRGS _{w0yt۲ <WsU.N#yr\q R<@$jVNT_f]q~Bp`4XX  ,i zt_Z7^c9?UIm'W~r}E~NDy@X<{z?yklvvjo`gJO]_}z۝I7?Uf^y#H&X%p{}+ wg[tDMG~rsmݺڽ{/?|=bd@@6Àw-kd=@I AAsm6T75rcK&O~Cؕ +vb{B5ߜ0wZ?i={*UsYFSNMf kWN8"[! P PS'Ф]Go7m;^ h:q&1=moŧRن)MP/v0dTCږ;f6JPg[ 8@A ^! ߈MG8FNeӷ!& \M> |+?~F-]O,}㖱wiwnxbEk>7H@tlzS?|!Z=[)rU|&gc=ĉYY`!'O.VW&8˗^C'^x)oKcD0ot ]|u7`ܰ-/] uVy~i/?J+=/?moq}?3b}ۿzڰf Ӎ<0_AlMq=/Zj۫KRwo{k%ªe# Y3׉!\1ޙ~ՏUCRk%D20-GởXf^?޺&s'̺NڿRA \AU_ y|}_kA_6,/?(__/V^""9~FtvU݇Kp>NyH3,H& NGt_3z/?mCO{3Gis0 FG__E2L线u_{ ?軃lD? A`ͱ7  `u:S{SMDǿ.y3kۯ8 ]`.F>MtOZ'-1جU4h`~:S{-TgXZq)ݯ=M0&2-AƷ x0P^¬Xٓ=@^9M@E`, '~ꬮ eǦM?Z}G.&6.?Mm;8@?[s48 <&{vm 8Y,O VKKml_9ϲS/[_PVSjgS`MWW@@M+(}Ů_^6P?R~>2WV~ZM? ` LEBaǮ-W;os/-&Q=ӖP2,WP9RoW6N{\4E+)}ڪXWO,x=0.F5.6&Mx@x_A PٳYs֛z!k1W'hp@pA;~Ε<8T-yҩۮڿD cƠ:>~L q;<o#,?]fF7bqӭO\]h l۴h63HO,P'_ےO4DUϭ+vW/ `Fi>nL[6-vnZ4/ M[,nٻ^K KjGK˙- >r <XWl.8޵߿-uo:BA@@;*1NP-f/?}W7/'&@8&S.޾1ڵWɨڄ[_wa>>/xov=\ʼn҃`Kڄk45Y{c`Y_6?󦳚HH|{G `ʪzB/j-_KL\37^{n9_{hQ ;?73h[alrGo׿qwt>r:M)S[0pnw0=!&}oJLGԿ>;-ߪufxT`s<7s{!:q{=7R@Sta?Ս[PgiIDAT2=M?3=ՍakQOsgJ@~C H3zWg43XN]mW_FnZs~念rv6" \ wI0?wcf ;^)Z PzꯘuuKϻ6݊`㱍ճS3`|30bOBCuǺo/gEˡT@R@5=ʏmG:q\Iףp, `NG+ݳCy08q_c[)} \6x`u{SC1'f B>[]@/ߥ'Sp\71rN/Eտ!!Sa9!B{@Pw~aX7eto-O~;X!(A= IU' t^QS:sGTV~FdzZ$5 t@ S^ nAGZO0kZˬ=Կ}\R6c4?Lbn`1ik+BCk]s h0h3EԮpĞӷ?n zgˆʏDAաvWXuafO FPvc]X;b}_qTmFY){eirF7OD@ _li_վϿ:ϼ厥kzeٛ4h@4OE寿:r]_r]KRMH4 <\/~#L 7?Ia_GSCe6o/ Q8J4A,O{EbOutGP? 4y~0T*}y|O2ibG7Jwx/Pɼj d,0`v]Z W}TUþ>%v=d=xm^jZ> 5,Q ͳF }+A{%zy< 6UepϲOeۇZAg`f$$l,]Gk}G7-??5h_~ h亐izo*R)Q I sQ*ȝ?4?ctif}K'P jo~R]oH[݉xT?8 ":ܽڿA!wd$׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx܋uȱ;r4iĸ%\R Xj{yٔnv? @@=?땬b W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ W63@hM  @(xe @@8(* 6^ +'?/ `X.pz-WP+R?)uӀO4K\[/0g CHt Q{e Oؽ8ajF@x<>gyև'>?_xu1sN >o<эAmGhч̀~ +oСnF`{m׋<ڱ,r%Opp&Wy@F+9'<>'(E u$7z z=D0yLHLF$11Ò~vymFsyE: jx)77y~g8W \w.pK֌n~>0IxAlpv$0mLh ~9~n'Yx8P@V&c]8|0g&ݞ=˒[0v~m{WH@liovɆӏ meozAlpv2[K&mnm, g`D[Mcz41\sËbTv{NЦ8|+ᓾqw$ ~5dA)8]@ނFhw Hd%>Yya0 .MQnd]Iж:~X䪭e`V U|/}/k>E|5k L~[e/{rу$hW '\R@$r`%A͒NH`2r|{у0mŢ @oVڍ$ARuͼ^d G~gqȀwJ]gjKw^D|mnMkY c=? ֊7 o_s(i[{~a$`~ׯ[Gk)Jǣ6l/|>,쁹e w\Z`bx C f& xO|{X hja ~&0W&' r`0g~+\clG@|r/ ݜ" t28Ӌoc}6Ma` /p@w} Ah {6}?L!2 kr2>㑑o 59\Lqvf>כ WZڽg9ɶݰ/[;r !P2&?loMS`yk[ ^Ttwaweoܞpg T Ÿg}0zܼq/%CO!q̝.$P&z?F}YBV=B=(2OީTxu[@O`Ojz1K_~'I(wկO+ ~λw?k@ӓ|(@_ߘi]Y6:Z1? d(/ڛka3y_WL澡@{G x|A3d跾 X2Qli3  M li+ogk6'B o+&K1vڄv`2i$"j8D EL~39?oDR|rmo"55'ଵ$j 5s?@G$h>G0眮O*J77mu7I%OG3yˀ~ Gk X) V2}wӀ?Tܟx;~[ P@,z[ oi IbW+繷n47[>L@0cw @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ E5 @ h @ C&)($IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/import_dxf-tests-expected.png0000644000175000017500000001027611776112755030427 0ustar chrysnchrysnPNG  IHDR{CIDATxuHђפ:t@B YxťPꇱF%".qp% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(ww{]>_8Wŭ}z{#Ѓ_w/t E 8f2P#ĸcJm@?[<[J9/}zM1huY/VFҢsk_ (<y |iܷ4ɿ tр΍_A7`",pa-wlC}XDlw®!U^F`s}աfKD4`1 ?.=2͏wY6{7C.uo<; MH&sq,:r)%8TNA1#&Wa?XE0/ d hR@G?:${rG̠_e#03?U[uy=FB%yM=ZQOm^AysbͿ繲wߛƅh?MZϚem?s%)=vmѪ6o[VF|ܑ҄]Ϳ;>q!Wʍyvjojd1Xiko# ^ {:rض 2;d[~s7ϙw/yy?b.?8t2 u8|)c,},7t4 b(IpjfZ|GˎI=y6c,S 48m #pdy_Z̸J<7zJ{}08$Op<F??e`EvawFMlq$|26zU6]6`%OyJs.~n_#Pms/lntx 4; ҹkعmug[g%?WO_OLJ&ޏJݰds,LO<=読?Oz߭]1I`Xlo\//:M~RaK p5^AoٓJ4oݸzdkyfз5t:mwx}~桟{=}UOiSFȃA >^Y򒟺`(]~lW5ҵ66 #~ ?ܔyRlu'u}f 02P B%=H̢ g~xc\F@3Jp0.3P]n ̫ ,c/Ff9?x" 'Moƻ P Lu'3'D:&c-\Y}ƪ'`20RW~#x;2vz4_"& Re`楞ne ^e`ww_`#p{_y`,K>`k_vK ^)ݜ$tNxcV><~Yr3ߧzѧg]zJgŬp~;A@9-k@L(3Pzww&3PZ?Hd`wkM~"aNwriBV{d8t\ܔ` F?Cp;3` ;c B> Lr*Ko:\ʫO'ShԳTi30Ulē@mfv"_a s0G|Vb803q X'̨eF.qOW ˝Zej`v;y1ߑ0@hz~d XKc$=sz+i2=G;\H&i/ssF~xN=@5.w  2:G8PJ9tܨP?! PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% ?Rvu5IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/render-2d-tests-expected.png0000644000175000017500000001556511676112354030036 0ustar chrysnchrysnPNG  IHDR{Cߍ, ۛMLl¼ׇX{ɟs ) O~Kp-9 3oMC{?o<`sN}Jao;uS'/g?6leZ Gnُz|jśhx/'$6E|>7AlG,ٻ~u3Қ'/F{wSਃ0Y*[lyH5tm]+ϑ}Q͂]H[jzݔ3.w#}`jhơhJ{^62x_ ;ȅ]U=Szl$^>;3_%|. >7?BoO\Q+VۢW uzyEVgb:%nEgP\!WzˮY7n׌da_| rFGz(Ǡ~y|] ?]LumZ71p:Uwt߸^ƾkm컇WApΚ;2.\M W{^jiHTi~dV K>ydW!PI/ tK;7 nNJ:_o/ c; C{/Cz.p2 K@x+Pn0XgJy鸀o6yBWo3;l) /xG֛߭K@I 5Kb'Zm͇4  V[I=Y1: t*S C W[Q|Хk.{ߡzm_;qЧ^0ͣw͸`r{Ƹc7-q{6g|XOq-&L1ͩW:q"+r]_W_BZb>1_#Y6|:~)OdqVɕM67䃳@KuwɵJ(&=G.CLg+.B_' :oVG9"n H/).Kb)Ի {O݂bיR7iVI3L5Buq ϻ皻;bgUAzLťrs]/Jy0E&#)J1ݽ]w6w{WzQ1vbFo`A fQ\.T峽˻|bbϽ}l<{7GnyXKpAܻx6ENCmioӜ{U;l A^ľ⥲|3 `~?A>jg/:z0Jb`aPM߾`[">ߜ7(1Q,`|k $m`NMzߏ>L8#q;X;11V{ҧ IL۽H lg671` ?ߺo:VZ,gґJտ*G.P1#.,`/  ~XӡH`Se>L ,( X w,>np6b};|Sxog$@V|CC=NN V TWT LiV4SJmOZ 6V ?-''8mzFTbh^_Vh1cO8*#*lpIb`ţ_VI@^+~?T~_T(MVJ6 ψ.?h?> B+[ 8jc fC ﺬfqMj&k_]K+H,FYՁ@hEqOh1pZmݦ'.6>凉S?Uv>YsNbߢÝ8\K}Bbٖ8Awb0-ӊS8eqb`6XWFV؜ߜնv&V&A"zb`5b5 R| ~s _' H<ϻ' IL^@ La~?O!wr7K@ L' yɒ`IMz! F+ u1PX[ }E >~`d@d XC{*11`!+lKIUVPjp^u1` i*iU։VVОZp¦icSW*Nݾ?U XCYIF_cPTҺ :d Xu] [oi!LD"wΡ J5rh[}MTRE ׺~ XOli ^$RzߏNfY WP XJz} }jk ]U*03ZA]#5 Lƫ陀xFb꯭& 9yUME '|z/w%@}V壀h0U.\Q @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ *<IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/arc-expected.png0000644000175000017500000001517611642654340025656 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExKIDATxQ- WRM r m293C\Qo߿ @@O&&@= @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76 @@T@D76~C@`4oYkޗ;;Գ\hކtW3ۤ*lBn;Y<<󲹯"$zW߾ۤ\Xhsk^p2eJBCl.v˲7p_6mmD(/x׎xQ^mpܪg={*aq~uo +<6w'ΝLP gY]n2s#7S+"p#/7㲋 Lm7R3|I8/V@+$Zh%~Qwovxp ˥^v;_ ҴVP Ϯ,7wODO Lj0MW8rw"@9anI]{-;?Y].~ ܔ. L y)pk?ς(C/حѿ}T H/ث3A rm~G}( ?tܲ(~L`=Ϙ,ˍ}~sH-ʇ͜#0f @?c 2**:!e 28}XO x1cpZ Q$=!% 28սXV ~1pNKFy7{9O7￯m|j`p6W&WMni|E7G"T@R |1p?LQm|SR?SR?}pOCLRӜ<s150Gs l&ZwSͼJW`zjY9#uFxϫ fy:Ϲ{'3q50+LpO40k“$O!0]?j3\iWӜ<GEa&j <p?Y `) ~Vzs5p> 8?X[j 7 ׿( \J +Fp~xk.\Lp 5wW} /l51m+{$힤vAϿo+.}㗮^[j`]_ᄁEZ,g;`:u\WyW o7 8] ^A ,魖p/g;)MXѻ, _}og^5]Z"oB oPo}p~G+ѽL 8K.ci5o.ΧV;w{ՀćX&֍QpZp:|pwГ*C׸CՀL r1v_p p=.k? <8qGM 8]d Cc.Ul* |qj4͹*MJi<5x})l~K4ps-K4s}j?S yj?bU`f 8G]s}PM<2p (G:7py (iN5U ܌s~D p>kȗ ٔM<56q  @"                                                                                                                                                                                                                                    ͌7(@IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/polyhedron-tests-expected.png0000644000175000017500000002177011641217140030421 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݿU JDTTDH4|k_ L?ᳯ#k_}S}Nˬt('W k@̃ `p*pks~>dW?ajYYK`lsM+EemuܜUHm+d1Yr ~kcf=La !CafŅ 48H ooeAeer3gt 3yOAsF;F(tkyGv q @?0;݉!Ѥz^^]Z}]N7Z,jyY>5xz̘|A%:K]wNwdd2wA@x O+МrYWO9!ଽ)/+ 7nx2̀lѐGqZ`O4{UuMF+ mv[nxO! ٮ!`A0$|m92A4d]}#0N+`#xnx+pb`#ӯ,O)e@,{h2`1@# %-ݿ89g#rͬ߅? !`?۷# D ЯƇֿkʀv8Kuصm\yC@'ӷ-zν@&=ڻ15pU_H&-ТXʀw88mTXo;XKq!eը9wQHov-G,xd+FlCV"av d|!Q 0z 4u\p'pQC?L?{UIKݿ-!B]kkt!`hKD;G-l| /t2}>`' s! jc<z_("/p~bp+O~Ԩx&s4Oܾnw@2G#)u6./_MEк=+DO?"hr}4v[ֽ9n"('`s ^Z]_7u9k^@,:!sH'mVa&-PȬċp[Nz΀˟ ˀ;_j-|LTˀm&<; ~v5)s`c9$cl=@\U'=ǒw\8>t^[(mx"0opz 22mh#L:eee@T@is:7̹Y?Ķk5)5a} u\sOi'o2QCW wd޾z FRr?]mwg:'8oݖ1W4V|Sdv[0{QjxNo{L ":婀xeqU[o2Lf\{ roZ16VG<7v[0h|~Wl us>,?F=g=OK.aL0. ZJ3HyXMw[W&X<3]43SGܐ@t`wmӷ(19!0Z^L%Nfzϻval?+wC eWg!mU2o7=FR u~^mwK1.adV#Gc銖fznzsX{@jr;v` >>],CcuhV>)ZSdo mwiv{̥3ieqQ];jW+ŖՅ|K_mW0Kz}\ > 'nW0nc0{H yoZCڃXM;taZ kܮ4T,U;6%vɊSՊy7)q?m$Ogpx9`iZz[̑%sX7-w?\>4%qAP@RCg:v-3LId-~ujiG~/^j'ߒooKm?xUj2KK/] Im˟E2xP,Zw8qou,zݵͭq Y2۞Ğn\}޾O*Rc?Z3@ۚk:5_߾3k_Xa\5 I_#Z};ls[ ωZ\9˟*Yn>;LYSo]ՆO=tE1 u8ԮmW9g\F~5uϣ&udNn'"\JU[mƘ }9~eo׶Km=·#/] xK~qK_ }Wd~J#>o).{m_0]lَky-e˟n잯t\ezӔj˟X=._Nog'/cn2{wo_i#K@^=s;[~ ;~?\uŀuT3fnߞ{cl XQ=cXSPws|3;[Ţ:ʀE\cuh+㔩@p?n?s2`E5C0H8+Wr}*^mWˀW23oOm[.p{vȀƖA(uL|?dzd7> K+.~)Kg-|Ֆs/k?gݜ?ӻor'=7&i#uuѲVܪҲoqh]@*pt&ǧ[q?>{ /=Ue P%szW^ZOiKmEtmpZ^Xa{-Z|%+oYkgs(2 A:ֲwݍO+ {[쯃tokO HeI@SOо<UNfQ@dF.^6Kh W\ICy 6X9PsynL,Og'no d] x,Mdh*帛Z}H P@ fNl'^Di-'z5ZP C[OZHȎ|!8@j|'O|UNtygxt容 rł:#T3@OL>HQ4?MM4?\ҸCƌt' \cBtklH! EMr]_wV>3&Ї'>pY4> hV֯'~kstcaU9F -Rt- \rr㣀ZT"XJH"5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "54IDATED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5ED QL RXH$ T  ) "5EDNE7IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalpngtest/cube-tests-expected.png0000644000175000017500000001751011640436733027163 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݱq`OTNbH? KC*>3gNT S5CN?ܹ8׍kv]}/_^*&@s@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xeMqn2ן>3 |k:Y@ < |?/ky𥇯vXN%pmȃzO $Dݎ~`ݧw@P~C6DºO RVls>7 %nbHsȃu}Wܬ9Cf 0)o$Na>Ml+`Z0jyofμ%ty;~ xQH[*0f0^C;Rp z}W(_?3]!JaI#})]%Hm` ߀qH $p\ou,-c?9ݝp{qH $ Ax/ڑey*d`heyDu>pֻ3`8+w-ƝTLxm bRڇstml<5 4>)[9sIr|l+`çoo+`#^t;;^ p~>:श>Oꍷ!PU@cj?w-tG>s~G*]8_ـ-M{YI}׻]_zGI$hos?zZ";5 WtJbSM@Sޏ/>&Fcΰwp8'`_OU&a&0_} ZP~ xXlh{Sƀ}׬Z10~3m%7@QvN\=Hծo..59 J@@k[SŒ ėk"wsꗻW}$}<y D[Κ}>r6 |Qs:-r~ lm>׉$`^%0lvM -0f6¾? H,?x1@"IY0N!pIIJ[C, ū׆GzISŷǴ O3Ss 2^5 8`|xlnQSynwb$0O+@6yHlny2Ջ2s07Jði5̞Ā'aO_˟A(}|isg ϺX@yQ=o@$0zEy> x蟥Lcs_O|/i=W!g?gHxO,ǽxʧ\\)*pgm? w6mFsxYI`oxpsY܉ 45x Y(}~0oӻG Ep Km㾇չ û+'s0{(G`xuW4s/csnf Iqh`Д # `׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݽFvPIpd &Μ95pi&t`XΜ9N N˹uxn^f׮O~7 |d @o> @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I@+ @@R&@ T@$m  $Il{I.i&p_7ӿlOfga<̾gu 5,Y9.酕X3L\v\^`{V|/apFI/?k_@N|Z֦ {d \<)-Xtt\t,KmB iHw@w-~a_op?T  g Tq5hEؒF8{0<ދn׭wV|6O )qm$09l1EF_XoPd㈣2XN5955@~[m婷gWwgdx!z,PxЇ@z팼FdZ`y!A@ ;Zndzӗ[\N'w'-E"3<{*Nw2\ l-3٣m9=/\fY/-8_`q/^M4>?_UWʋ/_I|Iޮo tg]6SS;_6: pxn7q["McH4lYٚK@%}ۙRe o;seŵ9؂h tK4>PEixȜ͑nݐ6e5ik9=eVn=<|n8eC~6qCjxml+Qa{tQ[jpmNbX-8؅M-_G=8Z4 PTq=LG[ W*]U7jŖ O^~;q;Οyd} ÍWqwHTq5wree$(zpFyfq &A7]s-^tR? I?.XQ<X (=X`.9!G!o.'.}7;_LO\?v^d%վjqJncc`00~wN}CfZݞa$O.YK;K|PܼO#\=2?OxTR{M>.y1Ǎ??FKeO321.U#O_S0cڷ͌8295s[],$fs1G\ %V~l\ϩ5C1 .[m/V8[ rls-10J͑o.7/~C0}e\r͇~!.?s`c!U98- 5Ur/R[?eMq|}s?; u!?{=_㴐׏/e^w3<0rpП7/#eq50|n^b%iMo#Y>玗7I F zX^p,+|큇Waks& }s-(#uq? k$]tw8EC;ivqZ|¨ 3x!xp'*^7~W'wO;|oޖ,>uy{:8$uF鿎n~0~|6 ۻ^r؟z{OhG/{Cpٛ`$N݈޳Y1õ~?K4#Q1T#׬n5snG ˄z$A蟨8OKmvBu=ш<lB}H)F`4j$ϣFnh:5Fho֍)pw hZ󯉁'-|z(F0݈@w@IIT3H1p3 Lg.YwMC%EM#%x6wi?,#F¦,kfӆtڰڇ.W-%l[VC?mWq J7ϱ]_7ׯx`+g1p *cze'6624`%F]NHe k`7D 1p$s?a)?}H ӋQLxξы߸[_P49ZgaY Xyz7$7՗-f̀uv["'h ޮʐml]_-g\737a[MI`V(V5?dXGD3iHeMt-"~v:JU <4$0TƘ?: {kMࣟ!GyGAǟZՄ`A@m~"<-'L(_q |,#s?WU{@'0x+ph?L`'z+pm#:z am̩8kE*DeStv25u˫ l6z9uω_؜_vr w `2 qN-o`-T{)\UE=~ӿy@.aHV\҃Ɣ݇lEw D qJݭ/Y F P实Pssw7$c yh/2\p2G8S h dd$8?9PgMMz  ЈhAD|r䀇, 7Wix% ^x@*+ @ \ @xssU0[x^#O>#B_BFr; pmfg9`i2lOB0ta~{+`?ogd"wm<`]"T@n|Wo}u"Ϳ0+;ty@}|+`7+d[w@31`om. ["dkW. v {&O8F`vFf:/$@`.d [[ut\[sAˇ\& 0w)GǷ?E ``N'@@u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:Pl):IDATaZ :/g @ J @N@y9a@V*u# ´R!u^&@@ !@@r60T@  F@iB P' 꼜M0 L+B:PlaZ :/g @ J @N@y9a@V*u#S֮+k㹸IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/0000755000175000017500000000000012110740367022611 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example021-expected.png0000644000175000017500000004737411701151225027005 0ustar chrysnchrysnPNG  IHDR{C IDATx E}O@ ^•XrʻXH{>EVE{(i "^m X&@ !9s9{sfwg3ݳgZ| @yF7ɴ0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %4i6  k@C ` x @ P@C;fC 4Ў0@ %WCM!P+~[/ Un2eg̘`6!3]w̙3=_x7%"/ Q}5uJ ob h~_},/\s/|Nh&Qwkfi5zN[۬F `5W~l!j hwiM ʤ!{4ifV(VEuNSW. &zw>7#Ԯ˨p JI7ψYoϨQ|?\l ԴvDĉfX/D&.9| Y /'N6m5Ib p`;K`|U?o&=sJ}@߼`JDl@6ɠ1AY/,jYQ53L~礹9餓M3 ?s_E. lr^A'c6, Ol#a/#mi,5MpG{L IZcϸ+V^䉽+o^}w,X }W@=Z`PnE I}͖%E=ogHD_2:h9 H1!7= o#$闺fK~'I ;2T/JI@L0NJ}M Kr|?ڿ<޹/b4U\yʘB=? @~T_ 2??U%J~3n>ÚωK%X>=&3"/ kYί騽83D0( ,aG2i\qLɭR^1K֕_57իꯢ9W?M_w%>d22*CMA}MR-G}JduGlW=#=aG)!19oAkV{ܛ2zy~{߻Iɧif=_Jѷ~zʔ)3fL?9M[tۀZQYoJ+`%5#w.E}`GG',fi0~E'g5PrRu7ʏAJ@LW419SML#3 I"Il@xfΜ.eܹ0 RTGu R>Gu_$׈7YRnr ~ݦkB'F{R<:;V|ύ Hr+7 Ǝ_2woxIS?6NzUc~),SXiݟQF_y^+r)a `ayWogl@ U96̙c#w>?G_j/O?*oSiASo1}]j?K~C+)'PrzpRO|ɣ%{G$b/Pv?~N~R, CfosJ Jf)]oӟWnfك_VUQV L4@317i/} $S)m SGOg/f?NJO*R*i_rA(j7f&s,OrPV\i>hMT@ cV#s,Qef/"$+'6>7ciJĊDG=Y=@\2KtV9{rXW8_]1-өp[ǔR5(u߼PVa]:/aQI@`9_jI.<@N$O?t݃}͔~De[L|.WǿJO!xJ\d˪ۙԩ@6 ~vZoFXo_Q͊$ ktp+G{Y$*#Ao/egU0%H 7U-Ub1ZÏtvʜHK+;aE)ZGZb3 l8M|18OP%s/9s{&S]JIV$_)<+Nfg~$Rd-CyP/e'0+~UT ȹ=8p[ՙ[%_-^xm=Xbŏ}TuȽb8<v@N|]" Az5 Pj6I}_V&ߘ^c|:c+gRA  Gh޳Gby֕{scX; >`S30 eIs<@(5F_rD _w 8T ߴiHԩ?$UUҿs=)xS_9B%_˚*rG }{ =qx(CCIF?Kx:SJ:+7e(i/T|%pM'R  _BQP"=߿ŝ-rG[Olj,zNN}1х %cېB9? 4W0 дKJ`1`JcgBy4+TDDO,9K!֯OJ> It@Qt`6ISs%h.ĶxI ?(w|Z2JYej|]\ Pݬ@4w~.FK-_esr=wxM63=jn#}`]$ct%~9ŭ:/1Eg@u)؁ zg"o37.0BU? Uj4B H_?CUQ~*BkEU *GM{,s/*|̫eqb K?vI u9&I;I'֭"&-&Ed:igMn/67d+@Y D8SCo))/2 W~>pKȖDD Տ.[u3:oQ_}GjiU/i3]? {ڀz-)?𖷼IuD`Чyyr>zSnbʽù}sr˴DNm~Ç#/vk%ϼpd+ZVto@˼!z= 4d_p/|/1b|N/h]؅ 9Kـz/?W_׷SP+Xj_2;m WJo2 nPe<dTرcV_l`ɒ__xv ;ff+$MVkS$ B7UbVeS%?c`>g~<[r]v*/(J4~Ǐ>%K[_*Sn>'dͳukD'~篈͖; / Y=#]hRXLoGS#k/YOzw~ç$64%taN,'-Rᖄ܏z[?GU%J!k`}W2oxY1u k~ k/sQ]L|k2rx@y?H `I 5l~SUYY#N4ʯ_&w2;$p+s׾_ñ@s5 @!_ *O&@OZhCS?v GBO?j奟Ks$mgy$ )}ѢUe:wYjnQTE?V1OBd4LU*Z5EK?F㳧 /}Jԡ*/ͬTבnW.Te3+%;DMIjʴZw,]&M:g˖ss,7XGN| AH eg+?JId>h$u{@TY?N"wQo;Эh_2o-]\uNR4'gVч 9ұw">T(~ (g@8K?|tN7TZMWqѳS@ +cǚf A?f¦-I DzOV^K~)E%rHc?I1H:a}c&|fhZ=Ϟb95Tt28< 貏[.yćJ}wY_'k=]=TR%gaLՖDgL婿&@Xj>rOjg; >"nTdvP/?sL]>X":KW1c0zWUiƌ۶[Vl,ђA後U 9 [[CM?Y?$@/МK̯(S_;0_[g5' %QGʑM-X/rPV0P$Eh?(Z=s^$g?k=v ZӏJHgUL<=O֍.B7lV`ʔv}s8Գa dH1 8G'[sJR̛oG?y(_shgAJUfK;~̖2[|N_|I7*|kғDI@O$[&Qʑ3ӡLҟ)Yv29~Mt%tyITo~3wN_Nt[c'V 7ȯ>ITB=yqٌT'?K&n%Q#l(M}'pBlQQ[ͲW#R efc wz7}=["A6|JUBxGH(闄RI`NJS=_?k֬> Z*͞}-7h^HR+ޣl@6̜y>V<&=wǪe/U_ܷ6ۊm kUGuPF33>T7u_GV ]Cb"w;~s k闣eީ6dZnűKU:jIJWsRi +j[RnV5r\,R9-KMòfUڜgW( $\Jz0 *j8g $.K;Yѕwjue+Z,/0տ߭\?;'b%R|Y=,%tBh ] K+0vvФ:Sߢտ?߼S~>jL` qS$Nbkbz! S_ۀޯj/Q;V?~ {ުN){_J~It^#O?>s#txB>!@??t{j{'V2ۧrSsbkΜ0crg"&n. 8|%쳎ցiX4 \JzQ2}{v6bTv4Qw 6`Ms?RHG׵VG/~zR^{ˈviP3@˻"{Jܴ>/ $U+?(uH*hp2:K邲_]$<- <4_}/^wW--fRy!h*؂ 閼s*AD"T9"FFm${+tp'^pDAEZg o4rsPKF@TIzSКZz,N#?j oxbݲyݛ?yg~%i-7 JTR}U8aȫ3W2 08B3w3Du'O{%em{9ƪ:tq-߾J2;K@{5@-FhOt  }\ɦ1?ГPo.[0rw7)7`$MQ*Y2mAc9 JOGf-@yYC'MsƇ/S{_KV5k^Rk^<`o)]]^&%O3U+CTW&dz?h+ͼcǎq81 @j#0e}XEjSό-5?W뮹u3gFR/9}_4j_{6ֽӼ+`-BPd_,PsU)I6 7^ugȧ蛏G%XtAKRgz5OKydǼGS{p٩S?]G~yEY8l`']^#+xKͱ߰ᕓ^,9_KM|}7b& /%Sƞzctex@tqƌqp:t?}%ڇܶmdGENZQG?U~{Gk/&R6$4NDLuKjϴ dшQH!iG'MN>%[n.)sޮҢ.e/ɪ-:aϬ/_?Kd@? ~H(锤>{u_z)&nݶ5s/ybտJWew=M36']'%']`,2 PqF1ǫ~,7b$<@h⒓^տۼtfдk}b)gR#M@k\HN IzՏ'EV/G?*OT"W)&Ǟ@] SşhةU=>SG[!2 E(u7K+~@N{>0{Ǻmi}#R ||p o]_?C&\FWـt&h޴iNv@9V,uxh qڽ3\ҨAl䅺?[G˗/am w=uKI$ mq/hrH<`h =/IHɠ~8:t}4Kdu Qq~?Q;U&jH{@&UՊ/E/6Eb1GSnZ*7nq*m36M5o洏~ I?cλ/}JT3Qiӆ~_8ڡ-9plvNߠ䋿|y{P&o*.GufIښVo :TL5SܹӊwX>Md^Y^Crɿn;U5 ҟzW\RȐx) LLBx< g֯Xz;*)v_i6@좿:!*{/G}HW3E@ 5WeZu36|%6CN{EfnWM7y]{?_r#qqvgť1.jg>K*]ߓ=uz萺J-WA~roOoO6SNxoSxx>QU՛53z[~䇅܊~6I zo~ZTsVfKX=E ǷLK#f%]e}KgG'dt OL<ЌY`kPuXOH~ V]bjBdHOv\)2X==Uf$*[s~O"tuJp?s~Wo|_Qcȯt?ͳcu&(*1WsWFۿVo$h~9=7a'Gܟd_-5$0Pwz*?*31ܱS闓5C~Y Kt`?&5hP$ ~ubP9~|r{LBM+CMS%`U~]BR5u0{.XXwﴞYQn7O(_K¿/8s%5A1̷k> ?iI%jlet~%&\fc~5/ Ɲϴ_ !1N OhWu|k޾ysf96#8ҦK6kn?OKp @nI@=$-*5yܜ3x!/eoeV6:wۯr X96rՒJo~}_d'^eȡJuU3]Stou '7])άl@oH ȹ2'PN8侣 -~"uU/|fG 0;b.?L|SL;%QPiж g\wB 뿽QroDە|K2^ߺZ7T{ηd]@-/vji)Ο$:N vm%0&nMkuv͛7>9244P_3X*U͎`Hg<3RLХN$rJTh \voI/x1oJذ[S_ϝ6yAe PAf)_X zNg SEĎ_YLk>,KA^o87V,kqAWpGYI2~RCVvL'w6ѝiԯf ́ΓnQTP4wU/N@>K@A??{{ּ6q\޿>927(GXrP/媻j/_N@> j/Fwo=9._zN`@7T6b=@W> t<  D=J~Dq3]WB0z/ ;n>ty3g:D@E"VsQHEu݇D']0л$P1u_!:D Y[R髜ȓwu߽^cuʄ 6X{|駟.%Ugs6`́>% @/+'TBf[/~U9n /?T*΀3=@Ӭ 0ݑFu (p <`[ܬ ;erߨ үd]:gKB>6o {e 욊 @cb @EXvkkˍ`k/k8 +R |j௥_NA}s4M|'պka|l'2/yihݷI^> !W IoQF'$K` ^mgaB} ֮tcFuAN$~S\-T}w~D}^yjo[lJ n=Qo {~,yVozk} TLoKЎ6 :}S߾|г\Ջ@͊{>&?=<Z_˲VQ=CT/4 f _oZ3a~y! o@hHi460Ps1j۫ӯu 4LoIdsȯ oH}}&DU t}o}uq{;OB'moƲ5hs嗄_$7CDO1տ}bgGށGa5iOX[-xOT{u7o/Yv }{%i=M${?n;{M4seItK/uDsvgI  _pHI_ K-eyuq6 X|m8Z/V*}"J䁀&08ȧV({]W|ǿGoհ6}/HIDATwD_/is|LH@!0Dݝ~l4*P_$}VY(x!,i%ui\{ۅ&9Yi .EH 0 FMxINo87#[5kX{b7wxbϤ 2eJ,K:q#/ՇV^=sf=/XpaϫA c2 x׻uwVQ&% hm$7?)6?/i16tZjM#_qyw MR| r)#\6N^?Sדy @.*Ug͜zrf-YOx h@-l6td=@J6`^Riu4oZ9<@E(>/1ͦ@.kt|2}=.{Usy:T6kzூILL4ɼN;֎rCer_s#75iv`IԡOT >N5k/VN P$*=QV]t~W "I@l@}̝*mEQ("@@dF达܉dRQ4/ ϛ,6j8ztw@,yWR ZP:(7 K4C=I/E9j0 ꤂ A׭['t t!dկY t I^a̺9m4따TgogBA ү- ,jܹ*D- lB@hԵ V{42j-ȊrU&M6PC~DSsg@f$!O x PMh&H+&YnĖ'uX7[7s3xں,orPl~4,bd'4&T9H <9A{Y=` <`Z &8ڰl2QA4w dVJ,>AJa'F "=fL򆸜?A& ?PŝQaJ${'@ QB"'C  6㤀`DmVoVھ!„ r; ߖ'B p jԩ}9TA0r;`?ڈ0w܇ײۨt3`s'I_Et #} ,#@՝ \\8 'NDg C  ˼N7j)`%(zDb-'IW ~?^ A *8 @>x\}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ W@P@P P@}BJ`CO_QS@A `Aq @}`+j @ ( (NA >}EM!%I0@!ԧ) 08 @>05 ' ԇP$ 3rbIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/import_stl-tests-expected.png0000644000175000017500000001407711776112755030476 0ustar chrysnchrysnPNG  IHDR{CIDATx=]}cGP H!C)hI&C :CA,Fx`C!$h0 (:4x*B ɒff$S%pry}^,\yν<{ <%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A]y7~4~=|^l?Ne?=V\kOjKX$NX0?U,%{Ezqom?t{ ,BqMC0C-5ԗԀ zO~ u(pw<[ pRӿew WX "#L>Ro  h Mulm4,[@&G^P?+kӿԗ8 ! { EK|>o kdұ4?%CG~w2ĪGԜ0Lh4Qaoi95 @; Y @K'AՌW,g2р @Su4-؆,U3M&w h&Ts쓩 Tmwf9?~ݯW~Ed@+xPsl Sϕu7`wBnpv?z/ 2P* 7_⩃'Ǡ4~ @ &絛w30{AQh6`N=7R-xCu#Ӧ5b7߸yfy%ym33OUM oY`k"صT Rp StCsT(o\`3'e!"hk hd G`מHmzYTlS4tBaOQwei@l &/; F:gߞЀw5 HC`?hrdg~=mhqOhw&L[4K37Z b^ȸ>˞Yޚ6 f3ӿUTZ/r%-?|o=_|mWBkծkSkjyC@s6sUqH8Te6yNn+ k. 8/~ IU _5Ymڥ){ HoW4N5sNh]W4VvZڥ P۱9a<;m|E}>^?KG WqUeǷ}: rPY9i@X%~DS {A꓊okSFi^⽠2 ;!+,-A/}ޏ~:=4GYp?#q<Wl%(@ex!o'|]y~@(`퇗n]kkg`$ qqxwy:{{A7Swk<`"uVު{AUp;-͹ZxJ~}sTC u9!AMuC v;(3κ:ƪhBXKq[@GqVq?o]3wwvػJ{,[@(&pyݼf{^Wʙ=?=fGU1[o R /􍛟7D>cùiM)wvenF-`E2P|xx+m f_vZn/87M @kKik~J h-v9^x][ŐW\=-sVxٮ&|vi`|5肇܂¶og^,uJse_V?'CfQÿhȎPO&~QZun`?j'Jڕ{T$zk=g@."PW?/[jP!6ulԹ|ߌj2PoZxQHW{<ɶOoJ38˹_º6سMiI]r3`@%l~ihOg˲J& ¼xA sZ©RM^I0d$YPȻ5a6"`U_~*NZpoQ߱(;K(k92!ߜ3| ďp@]^@u1Xד$q`ࣿcP˂?S#!3w_w~%aݽ?y?s彿x b\ӿ{ۀG| d) \=2 !6.codT:`G26%7"]7n_C'IvolbV(mW Iw2qvV6Xd潞˲`UXQMӿvilc(8nt6`ieA;y"kٲȗdWf:z@6t X6n4_ :4W>bm3j`(M-,[e`YrWVCfҀ5 P6`ã3m~}9Q|槻_ʅa%#R&!v=# `ץ5nGH Z&>]ӷU$W,Zí ̉qw" +XzۜFVMf`a_hkM`)xEMݡ2Ot-e ٖN&4Y7 ~ ]쒁*=}_ 8\ ?D_teڂ w^|~Qe VO,w >NJ ?o}sŃikgɄ>shU,gJ5߳t=FM?YL$c']>Ro,2g*!*N/7~K<@Z&|(1QB**%F5jAs(u~c/L_tMS0uQwF 2%xk366@4 {al,h-ENrne/AJ.UM;K>AMߵ>~E`E@?5oc]Ζ` Gr%0+*ko|B"8?Nt znyK/g9 Lܚ/GiVڞOO^02X~nQϬ(VT(0aqO Z:e{/2(6,lO@J;cM*9 *<*<rFvX47mφUiWTir`m+RK@UӎTUV pvv4s+?]?~x$dۀU&":)@bB?/]l5PwߟZ 4_ 㪟SvGh{^e5P@kܧ_43wF^ӷ??@ n]WF?C @khHwt.~1sQ"uScNQ_qv): X03@_2F _?&k&~&{r=f`|?Y(Jp?L~fxD{FY k9.f0Y@K0sY= D&, }`gΩG-.0Y76 ۀf>B<>)cN忏h~29ͣ@>XV麥@ŗ]{io~ ɭz3bC`Sjb?PHoE@̥@"m*!>NXwI[5UO|NrI蜺?l2g)o  Ի@f wOLڥ} 9p? hn=w-KCX]E%% @PPoÝ )(}i@ @ʔz)>0$%#@ 4XTRXTDaZP>0D#5jչzo2@r>Y|W|5l#2،Kߘ0c5Yx㕋^~臁g;B~Q`#?[F?L VR`o0l^M>fs8 H|xo}X@-he`o){ Z -&0a^j跌~H fڎвC1!95tG܇v_ Iv)&0}ՙ?܇b *U9UC#LtP5jwzP J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J v㨊XVIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example013-expected.png0000644000175000017500000002352011664235354027007 0ustar chrysnchrysnPNG  IHDR{C IDATx_n]3ѡıT5J;NxM8ūBM"Po bBEQ"AM)HJ]V 5щv MXkΚ~?뷟 k}~Y=y{+G %[1- \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \hT@4Zx&@p  @Qh-5@F@l޲  \u &d6+_9`W~lKhvGX3M[fmxt(((`PP8# FC=1+xq?qw 鼱hOCO@>(S4,Pů{/4=A7}ߟ{A} v?@*eއ-&^Ztk]FI9p ė"\7׼=u}SJ/}9|/ nE7dX$ڋZN (} |0)'JIkpzg_i qPy+~c} nH-?Mg@. ;F@#2d@7a:~ID\4]G΁hwZ 覵" n}?/HOCN50 >WSr^on!$;R?lɀy:?4iNW:cG30΀~7]ӭ?wj@XMβmO`4 F}?Ox.ݿ8,g{p{ǿ&27 e@7~3?w׉i0sg5aP:4R)u7.%+ LS;@* X6 ? xB@L]3`"R Je@.$ؿ׫0e`ˀH+y ~V8|D@zwʀX<zq?]8ܡK, >lW^OBъw~tV^~]xi{LL,3f@L?Mc羟/|#Y-p |5-}͹_As[@eZ>ybLǯ}G|٠_0ݠ%gt |䧾Zt;ZiU7]4/3@m|r_ҲWK7Pg;;oݒ;Y@4}% ~c wqPξOnK>aOo7}|i3Ap+|'^yu) #x#vN.>3k:[=jGvEgNrm̉yٙb-яvouf@73Dӿa5 b2 ?7LF2f߳_:&PD@a< $'Lt}x mՏl.\$x]7FG.`m["2 16f.fi9v|IǏBF_!~x/~`}#o;c`+!}`f|@Eߺ!H,K}@U=hxc[}eo/) 0xĵ/'|TJLʀEާYvspp9& x?>/_pjX9T(PE9ꔺ qkh{AuR (]kL $;Ay'>< 7ybo*&@e&FqkzLyR)PJ8WnPS<ýĹ|\x5!hb9tsNuݲ"&&pyk> I囀<ɥ[ S M<"\wxvkim*՜8e@h TPB@TQ'cKh$]4~|1N}gT}󗷆F_Cpu+?3xvkʾ/j:o# (yMO!8& kȀUḬ(y3Iシ{P\vmi" ,ӗgWAh޲^`^x s)S7ɹk?9ؑkXgkݪW:& Cm z;)Zv Xoe~C-"[Cue׹]]?3[z$Hw^W*dM5Utsٿ s{Z ŋG|IB7/@Z߹iKDK߾>c//z7(``/\6~f@&;W:xgC?8n0ZմVßytCmzSl"}@LN28I!7.#e8P'ʀt8},0$8b t_z/ӟ k85Ў337Poqgk8_d))|?8S5 %o-Owgt>p\ 7;B lEEu.@R4~,X}Cwxя/C?g'{1:b9 "߲sq\1tO?w4g~럯[ k X U.7~p~,?`=)5g}@ϸC;F ra|k7xǹ|f{Q'W_U Go21|΀[0o)Z5/nIS[[@21^[<Ҙ=-BsW4W ޥY%>?&K`:"d&n׷W8"oI4FO>كPo, Ԏh+ogпH6}I0~41p} ''-ed/mH'̀D \@W~p`u>ד) t]=ڹ $HK+r!}?9 S}fz X'1wZz=ͭar|R;vݲwwu!?pyƼ'x󕉭'v.'D~Yoo &/ ?C?!@z[@PdƝC[@G]ٕՓ V+׭6]r7y2dӢS?H_c{Fl- ]?Hǿ+e@vg˫+ [?TXn1 .}yJpʲ^_ԑ1OG@_@5N}Z)WB6 VvQsҷ&&tCJ&g2fr&?vj]K;k?W>sŋ]I}sasvL ԑ KYn " .aO7xF`-੐ ֟;o.ZWZ#5y Ph0} (q]s[@y2wvI{ZO^sO@[0 mA?-SK:hw]0tz‹߼ tAwwawqƟ1t.+K~X]Q{g@jr \,hDA7w@vrʃY }(G|+(` LlUMSI1pHÍԿ ޼ Ld־j"zF3HmoX='n6oa}>βXn<ѭ@~I M@]@9PH~`8x4|G|_M獫j:o &[( G@,+jɀ4+(>>mM \ ɀ -PI!Lp-#}e06 W̓;B[2Ȍ B`X* )ƀO5;;; 7yc10sL(/ A-/π;`1t0#v; ;Eӟ3}cf_pr3︟@z!Mo+p379 p.Nz#o|%e|xd~sg*#~?\ܓ_5s` ,{gRt9l^[@; ;w2<[@wޭF-ZUz?@;@\C <rZ_1v7^n[$3}J IDATX@T\S#@@klT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cj&@@"@  P8FHklT, *. @ R@D cjcIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-tests-expected.png0000644000175000017500000002104011664172106027745 0ustar chrysnchrysnPNG  IHDR{C IDATxA,Yy7\$K]@$7"q9Yp BR$Qp/`.3Kd#! Add!KzuW }NyG#@z7d#&@'< @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o@fA%- @#Q1ůY+_@`eK4pAkr3 @@2.ybSّ`tM @ P>>jT i(D@\e~_LeG 5LmZ'@f`33cC#_@䯑 @hZ~ӯ\}cߗW (hi@`G`GU) t,H@XٻO இulE 5uo2aMd:z1pjRj(Un\`ɢJ0)N[@2:Vb\ol{]tSM1pjkeCv)ؖB8lݔ2@6Z|q{euy^%BO<8>iG;) A FzӇ[9?"ՇWy"1+[ӝ_O?wY@`U<{XsNY.zE))KiQa`oQF`@4 6SdݏmEv< v^eC 3iXش!Д X% V\_p) P~ (&pip L`hbg~#T}7cmgc?ys%N:gz]^Rg`Z0u5޳MOਐWO/mIs^c_nvc:CL1$׻im5}l:'s_ifrqL᩵[68̀3Gg^ cy?zI&08c˙ h^_O2 REQCΧG^ӗL.`70q Se vz}E=9 {!<8⫓vI0q{d)$ה2Rk˽ʀiVyoO#Ӻ[tsܖ9`9 ĆmiШa@g~+Y3=>a2`ځPܞq+ύ @9G6ɀi]+ ʧ֏6~*Y]wn?}"Xu3 4Va z2U#_G\k`XQC,|!;= crOK²aw{b/=ݭ-q&bl|_=z~忥Lg^\ ,fg*nCY] flSuL`cKI07NF;+(-j-Q>t1 %Ae.ٶI L^cVgVehUkNc [. =pG΀u'Ts:>7A$4ޔV \L=;=yշ2O>FgE6mru 9|l-0n6kAβZg_yӝSav?-;% nve#?2֟?*rIqV}_߮~ۀleȀf% ҟF .#`XH`^8nIE,sPS},_x Xv˸ʟ# @yJŹ\ПkKimT`_ԑ kA?CAEη/]ϲxto=vs?d ?{,ޙA>bjDzW*kc2uࢷ5Tj22E}=^=왣M'rS@%?xK?Q#Ճuv`%`@i?1ˀ#L:Sv[@;#W[G0Rl ?k" fYV(V|PV <=KȀ>׺?0No'xn< |《/?ƫ= tOsx<&c;jRd-].Di`<@ohe=3v"FYg҆lolLҿd~ˀ%JKaPѬƙ)LvTKPZ(2FLKyV8do˫_{ LO3]ЮxT`/~㗾]Yͷ<ַ[&y~YoսHxhv8Z`Ӻ?2n#:V|,ڭ˦ڐ}IΘO^VG{&@{[2 x?ӯn8;Z}!I0haP* .Z[ x/oH` ^_1KI-$XvAp$xpoKtO_,XsK/6_[לY5&ru?k5W` kk_e0oXoYa$y?_xÇTc cltYߥGʗ.Z,NU>ufC1 VI@ٷR_{oP7&A?{ӟAO8ɹ%Qo,7m/MU ^=]{n=&0D/]`5$~k}Z(0 7F[J[2꟱*oCdJ`?|D#p*pgAږY fg_ c o k\g#2] xw [UE^ǹ \nx3p;2 }\d@m(- J T\egɀv# o3GA{v}ЪݩUsǁ B8Sh}_[.6蘙.ԝ{!Qt}As}.l&Cؤk5:|^ZGs=^O=\`a\~Wχ.P/_?V=Ar,̇eu j}}&&"`)េMdzH1 6s롇|S{GCΰpzAp#1x3|bj6g 2*izڏNލ׾wsC|sOߖ}. ,_oR#@@gNP@;am}&@ X@kY@J(j$:+ @`X*e?t& :+ @`X*u~OH, GMۀ >|][ [7N@h![?#s -쾥!\;~`qtv`;Z0 [w\<]'@@"\Ul^DSbG;*> 44p a]Oxgm Ͼ;/)Y|',,__zd~X!%]$K]s? s:?En -K,Tj\O$@%7^t[/C],[ӕd/qA`q> |z0|_yu_yN/,  p}]Xך`-38goꟼXlץugi5/,suUp_XKs5=\XW+Ɂ }V@zz` 2]X&@ 4P` K? V|F^CE?^{ I0vr׼5j7~n^>f@Ǘ^ěӽ xf%;`@ +~ot<$X?0<Mړ?[7/+KVt%Iޡ/,IJ*bnXe!*HUXk6s?t r,+:V%f#p  B;SA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / %tIDATH Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' / ͵H Et \H! RA' /05E VIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/linear_extrude-tests-expected.png0000644000175000017500000003076111652254623031304 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx}gGYRv%4"+P /j _DA&!MTDcD(%PЗvens;s9gf|sy~3s=w8O_D @{0 0'l@cR6  1@@) @i  4 @` @PJPx† 0 (%(Mc(3%?2GTInjaoo1}A>@ 9 9R )Dk^z٥^TuyMy&֍ 8ܾO@Q|_ d%h#'$]JrsJC7 `` d!gJI '&?6iAwIL`g[| *J96T>G3I64/O>4ܜ_93eW'#\+I@-?#2&%D´&?( `>֧(M `Uů>Etp3(z&?Og 0HIJSfAg2 8W@ϱ(ROo^vc7Gp`p!pxNkS{cxq{چ<fCϱ^_UY~ݾ C&;t~!y03ID'Fs"wpX 5C}@eUPT?8No?ANW*6'z_n7?>\9~١oAJ "g~`.R7>d֥[q:AP s"?(ɛO=O}|?0 (]lH[P8l+XmAIX(I0˨goWr4ƘP&viX1πv`nlno`Ftf.{ _gP4% `K, =ns56¶{^ ~F(+!NO gjw@k jw*E?ͯAU BPaRwqf_ݽ(@ |ԠSyϜ @rR yŧ-{܋C88^`8YPwɛգ1? SGvяEb0bި7a_x+OtC8&+E?OtsiZ_:9@I@IڅUۘM|{3Oz9(<>yӢ5!:u`Y{ n#7[՝DK  P$JgUX _{z5{9 6ړ3Mk)4(O?GQ=SXC]{/#}&@ĝ$}~H^1`'p^;Ax޳ EX 10J h]ƺ }JȊ7oMEaN&!P1 LvmCי?~ %qo ~(C@'~ {I,(k8>|r LP8U."`NOtո202eCDeiqcV3!P `q}SSJdp>s8թ~۴/2qΠj h7jX+o{oxHK\A3I3/^57_{Hvvb\c_L3CA-@jH;43v;sswP#_v'7,}o8n@}5UGڀ;,-!Yݷf C  wiNO'eidCtC: ۵-77NMa:4BQ4}x?)`rV U6c?.wrġD 3πcT8ݏ3u SW7:8Ͻ3!Pgνc)Hu|+Fd'r0*`;Ѯhl /ܢwTɎwүlE؊|:RHu?\tt_3PCbH:}e5ǪZ a0$c7m.zh>4A8M2BS}tb< 9T?P> ל9+WOg =Co B=`P}'8+ )>l6d R`;wg FϨ W} wo.P1XRi Vjz) %vA@NN辏iD1HP)5t0] t>! [GO<S(j?fMYn9լd-}e<,cAD)+(T@VO9zR`z@I48c $}C g<_c@nݿdrοW[4&ʊ `ïC;CR wޅٹoMBV>"CT\:Bì1Ix;YbpX#TOB'vz!{;I+"c|V]Ec%\ ,SZsG,q+Sؐ"?N]*\pWyWʥ@ {Ȭ;OQpJ_Pd o{g]ut%] U8w" ޴S fek_j"X{߾/q]$dwg=|D+~o0&9}즮D-Eo(bVM @\`*{@g -zogzoMe"!2 {# # Fc  lwFRMu/yJ?p tZ6p 'ט:G|EXllC5zgo y0?eU?3 &?C{.,+R|&/ Tyzᆛz;8[맬̭h!"y/嵾SRǿIlVDۮ7yPGAƔԿd25'N6a+߉bHdo>ؗ~ܽ'K⪗_*$|v1?D-,׿du"\_yo{r|?}|*] - RY  /0 ^ 6dxg ~\U*@=鶺; @>0[8 ro6ك* lcz7l /}C冟L<X7_o$OGe=`S\]HU5Y+IIc?/Հ5U$!P,KA+ ch'}!FV&IB U$1*lUA160Ffܶ,0]uo,K\觖!LQ5ٟFj#;G`R}[V͜<Ӄᘓ=3fDE VWי e^4[y 8L pDMڀ BuϝVܳ_ [+ݤc}t͟{}\s1a7Q; m{`a?3r? iolnHi{Xuv_8c~?s`_ ОtrI;w)|`@u ' >B\͘B*72sDZ:.:ѿgP,4o+㕨#cmw`; ̥}ز/~}p6^;;W 6dB<6y)mwAP]|^MS?oӘ$d4C!hQcRPNB뻾wZ8O8cl3<\IDATi.WnHGx޷W?Ikwam6/F?y57_H`Z5`=YSmçH0M?'ר?? =6oZU~AМˎw}h˭!(!An- &u el9wI1%`[_ wclОLǓj?3cd~9s͗O=`U/xcڞU,PIS~mzZmiOg2!:øoZ[:+ ׻ZjXH<%xe[FeLc>~s'pf웑~?H I@LgM1T4@~9Mt=6V@y :}S>%yg3?T?v59aU}ϱYvşY^UBJOF mrй|3 涝?{+b/ M0`JALw XL`l 6Ь_ #z=g}6?@L|L0O|dB+ǣԎaQA9`g ,jv >zVB LS\N[@+ʪtov@4q`#SUqG}Jz r?\mJ٥@BGi>@m<>G@X EIݏԂaԊ@WïW?p @`5` kݟ%@ +e`Y&Z~aM@ `Y Gc(s&,u`MI`Ӹ辰 &pP~H ƛ?ti雿?P@0X ?ҿ匣W_>TR(@_!C f$xz;BA@$gn<ՀF+RXI8 "pEC() i=m;oK@`J' 0@i@+0V2E?!$&$Jsh_htXCBhp: 505, ` 'C 7 &7m!lF =7 - `[f0sc@!lF }Fd(iKou'@&D" Y0Y$@0hTT  +D@ h`u(ǚ;A`%ozhe |> A"d*}cdddj!pt~@, , '!TB CD@ `JHb`1@@  @DRJi- $) B #*Qy `y: j `զAKz11!7$GZy@y9hl xVH,\T.O(<Y dӼoDJ w؀u*U]9zwU -:3A/#T6c_vly7 `K%͎P ;G? %Q"㥖`d"o?X d'RAd26 TX NkL_ٯCBf@y( l sos{>XapQHPªa;Bqk~E;>QBP^,zH'Fsn'@-cjSh@\TNwМ#tDKJNw¡!0 %R7H͍CGp((=w=:ҫ?\׫/?znp~\`PTR+cc'ƛru|w')@`.~Z] o v6f+^͎?=* 5Ⓘ#'(4$ ɴĥ_zqHxm}T%x] FXKZ>үk$ ` #& `"HLQ0[6gܠe@٫U!Q3~ 7v5PGQ:@/j' Կ HKnM:oe_"d"† em7ˆ8  GZ G)D!p4**. `<|6?D`R! B;B;) @A qR'D  @L* dRo'1@c ݸ/$݄Q+~ h藱CCT8XI[Kv% 3 Yҟ- B`@R @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@I >܏Z?IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example023-expected.png0000644000175000017500000001635211745120722027005 0ustar chrysnchrysnPNG  IHDR{CIDATx?z a6WJgnF@R&*E BrU9ݤr*BM$ K+o!"sΜo<\G{YoϼoaoA @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (Jڶ=ػzʗNj^ym֑ԕk'pგsUO,b/?#;`l=mO 9+z>>)˲[߾N4Ν=4gP0OR~vM)~KޙcZT>s61b\Kuy. tȖ2pKէYT+W_I/ H&vyqi$:`v@,?fF[4)2  _&X[VEd+F1%ރ?5klZߢS<~_~O RZSGWXƽ+\rDQNGӫNzA%NrhivN Z tqV J໯?8w>{hiOg>{i1,Pw`&GeWH#d+3颠XE@~z~TӶcoWuvnj,.]x'q{AӢ{AK|e0ZiVAzmv70sy dIpT(Y Y @-_{˟>qrmĿc)+ݾuge1GM-t ̆~}ɛ?d?t?՞~G 6R2.mmZ]:C-mr=aڦ7"I:;5AiEib6xMt໯??>PMU=EG^4M/?rW&%vbkh ێRk4%6}ˢӄk?!kM_K%Zs՞Oޠ[H y5VobvePt:3E((=1xBqVEYu]/TzFϑXtϧyβ`,.P>ﰹُt-<:nyMN4Az~|Fg%"un:f][upesYQkAŢeuP[N޹៚~I'Z7S<tGdYe\Ȳo=+TB|97OuЗŒҺ FS eYg@-O ekh-Im*z:uY.S?˲ུveWW PwXtM=_.. JAS].24-1ab餝ަ{;L,witj|vKȀՁź-)bFRp׾*tNvɦ%+]}e'@ӴMzBiYiU \CQJ˥_>J_.mҾoC5 m:wa`Jzѥ}U7 -\X> ˅/R;Vyk,Z#kه_AK9YO˗XYV3 eo]U+__8:f6?s,kX;?NTCp5G}_0?|&F#vJhڝuƶg޺կ k*Łғp돲˿e5K}J5~-: (mG0&V]qŰҩqlR^l{>\Zz֝N^;.lMV>z+y>JIR?zW.\ 4~ڵEoA2[zN ~H_{XY➸B9=磭%bs[ ?&CUU_xGFl~-Uê4`<'4c1XcKD_gk[NJNՍ_c%SC05DX%w)Y/(Х%`Sý;߃Fo[I˽Fao`JV41W::ku/~a9 dO޻zW_YB~EWzou~d`N2_TNoܯMΑnWhYڶJ߮.~:Խ> Mkq_{kjk&.w= mx/|^1&8\;Q!{ַ]4)5~dC`8(P۹jIKvhګjdN猍n{kuz_A8L` /QNȋVH߽O}{bQ b?wh꧲Şo85WdI]Q-MO#MU}1_|_^}$S7hJ8Ѹ7j]FЃ{?Uyˇ}7ctKD.[^Z勽Id1eٹG/}SC[Ut 9ֺ&%ף/W-ftsua#ŘIZ?O"|d`֓3%XϪ7*;{8X(/U8-=vA᪇Qȑ>Xk:ޑڴa/~_>GY{m~LB#!_z#/͖6`}Ȑ:݀@&9w;MHT?͉lu\Fi~zyVZ0,[=>nA:`=:fcEL~z6j%3W/k~ʠ~`~jkβCV4U7TYu&w"`-UJTgMSkxMRϏnv bpˉ$:wq(AOuDf.:?aRm[N@w -?I@7Xojw ՞O=;HeP>ߤ6(0bڷvv,4Mv9AzԵD"X͠+I6)s1&%d-wِN7ZϡA5΢.ꦋoy҃5c'[i:/ wlMs5ҢF8ۃ|JDix:trPHn/= ֝SS;.gnVq9ࡏ^k %)r-òn%X:!|}`\n%ئ.g<}A6Lg PzDDw]n0T ʗiz,9"b.?u$],dsѺ'#o1дYl:4L0L4P 55_E~4KS?>g%]j ``V:ofϵLη£P;U X|/}ar1v_n Z (17l B~OztT-'6!زC~V5'o7R靳`p3NبߩpL;b?=Sʢ :Lo8~31Pƍ, #- &'#NV_׾m䆧+FR-Iؿ.G5:CI+~m%jj3}E"N05:A Z` ^綎"WUH|ɛh (Mp_:2Pۥ Ho~Mi_zT=ۤۓ-^1^?d'7JۃOwd  >gK` (5rزv]PY`(?{ymhXlB W0 ~<\aSpSa&# n[<A }KA 3pϧfg#0Q2ug?5޹`Cp/Ok81'IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/use-tests-expected.png0000644000175000017500000002757411713230315027064 0ustar chrysnchrysnPNG  IHDR{C IDATx %Ey.ES> ]$[~vcR=J%F$c3tgs=7P ߞN-7˹o9Pß~.[XѲ `je%hYY nz`ಢ+ QcYuMqkNT`ÃqDo9y ,@q!.fTTsA`e0z@M)[6ھZ>__Y\GJw pXA6K<@fBm3D] uMyDMm=玮{^mX5.贼``5pjz/[x#XHBL9Y&j'9Ӓyr".8:EN \z I_G>kz 돮u{yi(耗Sj 5p$#D>"ž}vI4h"%en$@C*@sٽޗߚ8;~=OFO_ ȡ>kU!eBOExݩ .Ƽ/f~knG8|Ӝ'D6J# {?qgOCնO 0s)db^AW˶'>7=!?gTp&b[_HR_eU᧷?Vr+` H%JPvz_$4ĄQJNE IiW70 +9 ilwB5WɉV7L1Qӽ#<9XD@{ũs9o8iPXH7PY 4.d5w)C葁@JJ㍇%>eMTbR,3X"Ÿwo t5Ax$e9~/_KelV^Hey  |c_{v_zʻWn(2`l/Y~ߎ'λv!/ώS=X m5K&64tX󟽟3.J̛ w{=n ?M2`V2 Sk=،//rw_y90W\ nB1_U-W]WEdZz5@yeQ6tٰM\١&n:ooՃi3@(sJJ0D6/nȵuh@Mꗖ/k4@nYXw:kjTaKCn?nv/6[2D0Cg}vS!h9CͺOn6+BޗUKi>E2?5`˕E++ZOnIğ}>ǭq-cLh7u>{1ؿ7JPSo>j@^PUv9}=Bf+k qܒA%6vo?_R*P*@kfyrzPRSvK/;"k@ykz~1U;66](yѝ]OB*}o *|ҕ+}E ylK{>|L}ݍTv3D3 >'L` o>[M/u)7[~fs^PUwiwly" ĄG.߄~YܶTquaBF dYH(/(D/_K5/}x|z .=~k?ZHp7VyxPHM(j4.A`1A=|>րsR UXD8U[be;PB] n` n޷̉}!»~[k/_R/"L?t<)T oW lu)'dX [c 7k F"25-On6^Kj7]^< =zKW~6}1GAIFK@C!>0 -]EXЀG[|z*߄ 2]c^T=;Pa+_|`A^GЖa[ }`YqozC'cNls WR.dc"٥h[Ε`'/ roFq5 nԋE6йfx*pj<1$ۜފIZ CE@ٲT@QQ>MS7Xxb9t_J![Ez=)sXTV~Gl+5qw 9+ WrcDR_R'hS.a/ʃr".眾)&b1L뎫)cJ׮Ysk}Xy^9l^Ÿ\oH>ĥy@rƭZH/6"`f,̀_R 2jl$˿E~IR ?e^h; |\xS`W4EmwM8)7]ٿ`U 0U4ko~.q{_pId(A^Kf7.PZ}X!,I4_H1_3^U9E-Dd)`~_엱4^N1pU RR'?=H3@[6ja}~@yo6: #P`)j+: )gjR]8 >r/ fdnC/ܒ]cPI̚XTDɏr)_W=ޖnx IwC1m]K?3[;`]Ƨ %Ne!鴺 nC`}뮁,/?sAuA P w]3Fr9wqͪ2vo.he[y} ^>No}JЍ[ 0' N!"|@ٿy-2ԀX?~e _xad[PFbiRQ׌}?Nb'NZu5\׼[[ g=%2y͟5' v[_ R^WXF/4pw-ҧQ6,>@9LkeEqwO3m~oCZGF;&D`o!*]L÷=˙ 2j&A^gp Te/l'@Q7Eş7yå~)j 5ٿAQjW*np6pO7l,'O 09G~/A~CL^C}mokڗ>od gmOal7 i*J` 6N _ OfSc}?wi, "0ѣssJ_\Ůl u8ʒ UO6zRɦԼ7?ZRBQu`E@Uz>*W .POa땠ŨpS$.S `QpVвsӧQzԯIX ړGwuϾvlh|f);Ї.8XπGz> Z{ǑP|'uE@[t@[bSmo>t (Ivl O f*'#co}Ijez>v ֳ(DZÛ~ߘI!}|筸m2ǵ<LM #$W?l"K䭧 y_r_+"0zp,5=9/x/6${3u1]d^8m+sy5UFj(#0 _C ^:}oo^yUsI{ӜQX3t/Z@- O6 q-hy[u- f$N,BPJo=>vP#5};nAo,L],bpԶ˚ųoM+Zc=wBoE,PEfq>%;,$?s1+[ ȃF?

    4V"D}/X~v @to}P޷6SR{K>͗HP Ud&_/W^}K,7 XImbhSAO evAX&7"_m_" n;tFpbʏrGwA@BD/\O"(F"Zk& ,.ɕ'oK^~ׯq @ _O /{GրETl+5ǽ7=7\R\z:s-%ϲȋ%IрoocECXXw;{'M$/!/VC!x]qiԗz>hϽfxzGw.i{,(JPHB +/R'IA75ȥ [B0SB*8wwrdU_$WyҬa?7Em2o"bИC/g>qRlqe &QAV&\]z]1PapItAJ\c@ꊢLu*X#H JgK~_Auթ$t/՛4z?Q+aXV7L a7IDATA$hyƞ _ʖaiE_-:o,GS ]F4XJ0/p33!0I/k697sܽ~I2JzXNE 5 4 >?0],`/ J0mpl/F%fGfϠ_o]]p!šg@ ܭM)(Mep97-톏tQ,t> X[}Ou.ME_TfnlD ]ydV#Y;{g|9WS?ϧ o(? äȏȀn h 1瘚^W84KHo¯!XPIE`e)0[T׏3:OID&&+Y|8n/ 3J=GyxW{Rf0!)0Ȯf̿d(q7vS] ~/y /˩_OT gFJ  [ũݥᔠ0}I(=ȏ` b[ FL9S0J}ABwi*#1Av/ȵ*$\AoL_ @Wd ks5X"l>*AHhb5&tB2 4nAuj@cEb0qRbjCԆ#`5fZn_*UOMqZ!pgTMRf!RyC! D(b>2 jJ``z\dW v#D5WҀ7.M$5!jB! X%SE v/H6noRRU@Tc&C`Ӆw(5nߋEa%0(|MUVUc* STܲ!Sd6#ygçCp`RA)i( fh$3 )%>6frO4&T@&,LMG s.xm7ק #E"D9n\~H-W80D٥l N׹zfkvڦ,LJA x8< SfEJ|;_ΞOu1N"ŤVmڼ/&jfP # ?F[u?Yݻ3_~:7b/@&fO_#@$v&LR:M EjO#Rʎ k{B{z6@ øXZՄDLJ@_^&&>@_o` bQ `ڠ d nwXH.|@?GRK? ]5@4DaR64y~  8R @I fƐ20Jw`d@j `)k#hȤ-> R&/@ej&my2@/ZLͰN2<1RK~|MBf3療W֙ltS8茞@3ru`tlkf(@[@_Wo !=쿐& +߽CLp u_P5VݸqD?h%H ?9) L)Z ppVٶD =/,R†6c@lc?ɑI !P @/e m _ol[ԇ!PM_͆#X43 + LB&2 Ν? KzHή{  56#cY gGLJߕ@BI| }uBXۋL>8Ђ|Mqo1zuSR5 H.]k$G?zr69@H?-#Z"#IH#Ě!}"PHY,"cI ,$Qdvx@;^^p"F I΢` %-xR̊EXĨSd%t2(`Pt>}e?K0 ɑ3t TQr {'e "' f׮m* @HKh@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %h@ԄC %hCsMycIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example010-expected.png0000644000175000017500000007145011701151225026773 0ustar chrysnchrysnPNG  IHDR{C IDATx%Y[U]m۞Vc42 @BbE+{[X,!B4 4ui3Ow{Luv'uc#`@y,(ʮ0FTX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P(B6FX|#` EPhûF #`@X mxW#`=`( @ j#`,0"`(]m#`0FP,6m0FІw0FB0F{#P( m@w~~l7=dHJC`|zz]iuv}5-(v~r{,W+A1vE@Ł=mWX@x{Y=8R-z..!j޿J&'t>hgL뿷 T-zׯ8䉈 ^UHB]܈tCm#f0-{/T Z<.oVh'6Bv޲m϶c{~N𑄀]@GRkL]/YTQx] ǰGzG#UPx~(]4c;"3T9FO=j鱓OXK>pHj˧Ű.( ?# 'Wt"؟- ,h`g.6o`\Ӏ?&&EdG\Գ[<~pb|l#VNZ\~mk5 ү{z1 EO=;8ŁQA0*-5b).ڭ'&dB '-ߵoܥxŋwq-\bY ?N'@ɶlæIbํAu: H#`3^yd0MĸbTvPDXWpk!<w+Øq`ֺS"v9|bu{NSeLyx0c}A4;y;QĜxb']Me_쯏4@a4ISbXP!Q,#pR7_.>~bqA.qŋJRfMO)[6oϩ¡Xf Ht]e!|kg^Midr s]82l(=~7(dϼ,?`q0-}'R^shuNVE,jRVhIlȘId4K 9a'MvtACPؚUh64FLh=i23 |~+Ѐ ꎋLM mbrQB0DJF`nYNdxE;1',Ba Xx7VSs*yDπǻ~;޿e˞m;msyŠ7%uud+. Uăc7*}_\7A_Ƀ5=(WhW_V𭝱j}sosN;y[8eckk^B$d.imXy9v6lޭxgXA]RL['̻{^W_vƅLޏoΟ~Vl~8qeccV%b1h[^/Y\+PƵ1̜(Mb6w>W͖G̩'N' _p~R?ߟa3f?7maW")xk?fa}ktˢo$u]q[:x$d>6r1\=o\,^ty 룽%wu?0K |_Z&mM<=Q[H"CW O'L1iݰņ~;A6,?j?jsVO'J[{"QETr%OYCМfUjZLԏ4ksx 06 )mϫ\3{O02 ]Wn+}KW{ٕK~7MWph{1JsbJ2uE@]1PB<=.J)OJNw hY>vUY,#t_p>/`T͵@&җ_u;h Ky_Og g)'ha@d4Z^SP~dzZŨ-G4"fmW( 9F.PJ?E5*!:qt_dPCh@N$RUFEjU/xK?߸1-.p s]Er1c*?b*;,1}yS>ȓ_U,C}ǽ۟ūO\g1g} 374wl$4w`'l'1AFVrd_׎9z!q"0y A_͜Ѕ{YU?@ GCT! *o+hw 2g!DjH<_+CzT`a;0D ʉ ǔYdzX[K' F#d VGnUf"Ո #mцۏbgƒ?/`iЍȈݣUD%É$x"yÉO?5i 56\WҢL]q38H H [j1)3ΜOshn|t24WUW[X#~0ج':IJf48^P?. 8d(ܲD1$LD"Y%-V2~:."i#@{EwمK`K9|{2 DHSobd!0|\GfY6J *2o.š"_sE5vod>[ k(,8֠؛诣DD3JѭܩOu H%': aC'&?,L?2D"ADF@O7ݰ_twnAN$\}Zc^Ȑ@-GBy|xN8>tЛGрL̤ I7\|n5PyPXm|߶Z1:"*Y@  YB@q?=*dzqcR3>Eru4L^5b0Yj(*i#Ԅ3eY s7gUvYW'5i SB9H\ErC"oPg@uIO\MsGP)Kzl'A[dNG5wC6 Յf;.ɉ,09OOlpqCЀP䧮DJ:O\SNtU%43:zؿsA4m.i NiC[Lbi_7c aW` v10IoD$ ^iWnN8K#6fl'X ٳSpTnȳ;Z3)<yz?~eCyPy\1[6׉AyNhpŰj_]bxpAӇЀ݉/ zA҆AŹ*$*X/e6wŦ9*]ߩ@z`" qpqَ+A̝U?Lc:Ww=DLcO٨345Pu^%9GFPI؟<كϒCb9Dd'0 Ku2glbq6ʯNf/_A%tgaIzB?j.W N6v+QF<>J9%4KnK̩eDi'6O Z!JҰ@PM `ӳ{щ! +E1t*;Q"`Fp@>ESCuf6 ӿ: 1T+c8/CO>LЄP巯x P*8R#M$1.$O|_ct)z&qo=<2 |^S! kSGAFȗk_U?UbfUV¸gMoZ(WU4R֋`5:fU%g k_Cy̤1pz"~@I&`WjX _ny9? jKT30U_6KZ y ZƴN"yEx"F'XN]u2)P@e (ka8;@ _0G 3A ivl 1KJSr $9@ 8^0Nv)jW2-;[oվczMl5~d)`s$ߙ /Rɫkl ٿك%1sX =λ2Z- `< Ʋt n1-[T  #^k+#Η&,xxr Y=,k1Dʸ-߼V)ҩKƴ0'yl\mR5Hjqd *_'.Jx$Pb+"Wz# GDnIw>wbEV$JfCozQozms%ZZUl9,do5{-w4DG 7LGW]P+W,S&BLA(?4@MT1䋽Ɵ7 mJ|rWwݦޔb_v=Y N4=z6=ȁNwT `P6x'@d tveLOxrKk7(Ol]gUb Q]xI*dPdN'Шr ;0XF ܻ{ẁ4wA YT D8`&GЌ `fjˇL3_; gbiAwR!yh@lq9:ﮜc„SR [ &'ڶ` boxrwb^ Eg7 `cH؟O!t2k$RY?8I4~F+0%_>5߽^CU s]eg /BOxYO,cr 㩗&1̮2DEb|`je:9LJ9lm\ 2ou+1 &/ (U?K&`oj!.w8kN >W,RM99[/ `D&gZ\4Ea@dDRɦ' 4$X&_Vy>etOΟ3քYkfO'"89Qy~H ]%yҟO(.z|EDQ]ҀZ4s~zlzD+?  O={I`AdX0(hQnGH7a`8 pO_μrqؼF4wWO9aNnhE DK`ijNbLG"/77=Jl ഉ2( kV5e`菗jW+/-<5zSHvN@h:|h}r/]ljj@fv"f.l\]?^#WNjA`bB(G%ӕ͂cc]D2`U B`zD.Tbr{,K{@f&LѕlÏ@{ I]+D$\nh@`jj)X{v!p+F s~SsT$4 \Ch@a:>b:-Ɂ)c"_&9˓>QTETH³ E*RU/X5W,UǂoW嬮R*$(  W4?+lI/XQ?")F8P׬-d.:g*n=$r&p >! [ !xB---L=AJ):4 6΄qg= _Y{DVԷ9G? `r٫'m٫km2F6}n%x6llEm蛷.CқlhAo׿ DҀ%&Q33|}A<^YFN#~SNX<.6.<{d 'N'4 o\vyTJ"YAơ΍w u.\ +B`E.D  ~IM ;'^o}W ȃ Piņꭹ2~ ZoH Sέ%޺GAʙ V9[uvRR@x xU}2.ċ HI~zo:>Ҟvg\AQH:NNt'$&Ci(Ri38m]N k2杔NfPpѥG༗4(\(k̛~LIɦ:1x=VپcP!'e 0>i{!b:%[Nl,ǹ/[^%^Gp9%IxTJȼ(g ׍bֶ@@$c-w_Mo{K?k2eC@blާxX_pv5Iԯ)۟Wl 1uAUC̘Ҁ;nփy:ͪ ƥxyZ =XiR0I^3-dԑٝ?c +*A(O.;j>Zu1ҵHl|?3YWg>yu((:4zth/% XZKݱ Rߛ4n1vGZ?Wu*iu"YL4zU'§eC1k{,vnV$0@mh3- ֏/^Lzw -y&*汯0}Bؿߟytl1=.G9 ];B2LQ -+gDL\ x)   mFX\k{nas <8197?5r1@xD$@bNQ}ƌ{fD; ^~5 u/|x( e[g'>u"R/ ӄv Aߊlؿ6f׵'YtQ?1:5:?:=Oz8HoWg9b+fTqT+7' 0ajCz`E+ ߋΝbCaƺ:%?bQZ\%[/GuB!J:;aN@g::0_/80TX90t􄕍NyRH/ÜlbM0293wܻz72G8: ˁ4 sMu"F#!0EZMyilx{)}O A CԓOΆH'ܹgȀ:LuB8W~|fNE6AtULr`xq O\}G@T! G0 t _4oJ8?LĔ\: pW̆yLCkƖ,v3ZXF _L T: }W >ےݽ6܎N@!p3<\W-H_g$e=΂;3O\ʫA=MbX"c֝-{V- WObq P=-ş%&yr64T84+0Esرs2gEO^рOFF.??? DJL]' i[^ Nl+?X705:T1l06 |x2['2R?& )=h-cHSVˋ|:ИN|KLwR=,R󜫗UPEB. Q&vKלV-73NWuop~200ܼ'=hh@aﰿ]N? 8lw XjʹTUM# 6rֶu{apzh@Cd@S+!ԏn쟝r=^0 vjzftIZM* t"QYEfU ֆؐȐ=D#?D3 ֖G44ʋg^gw17Q9z%:Y?tgŤ-Q0mJR P04@ĭ`﬘S|H*;NjUMwU3m03Sa؟G2x@pnd0ꈑhЀ%*͊Ades&DJZ/:Q1;=׀ﰿ.Us9@Q'`ue %Z{ gH+u;ZqÀ@2̆8.!"9?K@ $F9a? #GF?2\d.l6b J+Ҹ;dH%'Hk61Ng;yϥ=zQ&6hQ9SOqlXG=.æ͘֍2s gڕDdY7 sE-CJ_ٿ@TN8).A`aAAJKSL8[!E KՄuۿp9m2oG&h^`<i9JIx}|Zp;0X]TtM+A0&4`Ųh@rG2؆b*2k=bz9&mjZ'/sU~*: @PI ĵal2J8 б|yI$p X-b:U#s] Q2k0A#i?oS ЀX"S>spS`-KO@avd z)yr(|JhMadxA9e1੣P6pX?ix-׭4l9?tOOKP&Tڤ곍#Q/ US(B hR(4N4~Է؀Ca]enW]::DV7KdmƤE X ߴT+@ 6MP `h;rxk)KvR]];wL4EDO I"W2T[$Pwe:0O5QN'VϬNO?X-GUjU51f_y L|k:GriΊ[ dp֬yaGفp (A'`i1ȝ0t:]jKctԇ (D *v;Y  5<d63( K@б2{*12 \DL+bx_d! )3qD4 Md25h-D'cu`z-aXS# /j6K&~ X'~Jm P8))’jyVH ' ;wW ~'HB2-_|6@G =ɿ_4L2>,U:џA0" oŌNf5 4@_aћ;'pa3l6t'2(ʳ= ltbkpӡafiƨ 3ʃX z/e~ h/bJgF#­Cb /2x"mnls;Bg\T tBMh-236roXzB4}q;hsȿSf1KyY y0 t œG;/Ļ;Jwm)ltuqm)"gF7Q10y 0\]|( ='"g"49рª@y n e+Iib߮:2)YO' =1q܈ t;xx8KU W 79`&cn^{ €L@jG ^Xc1IL"OgqERFhGa{C}שckwѶ3*XyW뮯&klDyы.{Kq) 1|xƊ Ůc/ F@,ΠBzBȝee"BbLsV1/:[a9 Pz ="%\:5*]m t AHXZlZGiy:vISw3ٍ~f#^ cYe ⺐[<F+kQ-I' CeDqEvǡrJ7mͻeĢN,4?X[YuĪpt.} vJwhrÅp!p.#W^+R̟(ANGccNdr2e MZ~\0\̇GOK\qm^0uمK"1]ФO{ae.A: = 9$(0}| ¹qhʌTG.RAߊ >br W d gSD4njc,C<ϧp+^L_#{254j&YVu2#ܠkY"8@]Fk?Wf^$2`W-^рx]HZXo~JdOGpq(GрpE&7f ;ml? 4Pzn57X)Ta^̦=q- dG=?o(#4 JyIi~X ,JrqW%`~X^Hf^yqKϟbνmY\x?[Miâ}7(9QN\H7['@YDurԓJ3Xf1; kcNE 4@yrB@y69eY/VQR+55| q|>9zJV'j?/> Y5@ɠZ@zEG'*7tOa F:=kJ>hF@4ljd`g92C'@^'f=uVSOaC0l-rˣx΋4Cm */c{[2QHwܷ}~?@7pV4 @i:4 wQ򇲳DXT3s}g"z'Prgk :ha|^2uz1*1 ̲63\Cޟvh+#'N8r)+ v2{~ׯ&lg4?m =wM~D'ֵuLld B#: ?")!2ph̞0)2!ŀW73*[$'B~|t0yDE`=X ';,X .ZqbUCIK0h ȝ?{=7g1S?~6TL]^8b&8ZҴu4渣e >4 w-mHf88sU([$&р`&H6"6f7HTGk[Ob1޻S]2WYpCJZ,5^Xfݿfl?QI ࡪS`fIN$92k`HUjS? xrN=U#ޑSQ'>xp]^._eE:~ݿ\c4GVhhcMi`:̋H1z$8H^H8/tnMMd6eĂQb2=VU?LD z64ugn3boN!`9 A`枷;}OE28I`EE>D~Բ- W ;hY鎯?!0% B0R2S 6f{=Zg53XQ|ʸf?REueH|Phÿی婥 ~^ 1d !n t:Q;i@1434C:%Q&ZcI İ,-%2H~];0Xiud_ G;o?c9i1 r |Hay:pix 9Q[a^yGW!2G笞OXxB"+=5wEYmhC yMڲ%?ϐ0%4OW:ZAǺc'NN ؼmO$@B(o&HZfJwX+?_%TMQwrQ#$oɲ6¿Cg u]~͊|zO~Wg󖊦_ϕc#a^)c;lT0N@р_׎t&<͓e$<= qsb# `֒vۘgx 4(17dtfiXيO?.É{\eO6q>UOf oG .';be7р@N~mKĺlтgI[hJ>]"X˥r_'~Ljk Ɂ\&, ,2P6ϻiFv۳Nx^ ăĝ!71^k@C d3 yb 6x_y~væ=_{eroוAnz?]@Rrͭ;(CC)t6tQﲼ2p± 󒩅ےc á&3:h@8g+H9lO.#նpD>MuGٜf}l j?ߴ_9J,ѻB l_ (9"mҼFxi>ڄyZwf \/hoO,:,sP.kQ d^vnG0 ͛>O9q_XON@gA[ۈܠ#V ʌ:gIDAT=(pH.x.ԴU0CN' |APt{sC)jŲɼ-v 7@ϧ{cmW] {i%xc42I aN.K0 !0=HsF``=84N@^4;a <0mṲ7o+G`F6QM[ؙ>3^;mU8q ^HZo0RG.M@Fb=hB7GG#Ɋ2 gENL\CLw _>=О#oߜ?e[B7wnv= hȀrZMwꙧO01}@,ޤH\Oo?M|0<ƻ_Ѐ'x8Tt av;G _x obxJNvqV:ߦCA{Ñ=Bu4أ 4N ĸn鳳f/Z=+(@'_VH;h6'my'9)C}h/iC|imogbRPiSc܀؟8_y T + ]@aRv~|Տ)4[C}) F0\0 m?c3sa&zW콁@$MOq  ؑD3Bٱ}9>S W`:|`,;H Ub\Х8?1/]@j#tk<3OoS_~fºGt#P"1E x# he=e|70')'NZEW\}c8^eA/ڶ7Z!܍[4И?r<2юW OK4V) m9*8ojߜ5'#b?<]Ur~P~!=rx`KΛB$z25 YU".7wP;Ac@ۇ8:0Eg|y_3ٍ\tkXo3=_ ~9%Rɟt1qL0'"7oT|" =ݏZ~KIg,g7zKTV8&?{^9 B`d%n]Bٟ}_`4wF07>>: &`Za'diC_g3#}!7(M?^-ف웯Yщٗݽ _`tZLH#0+~vl4ozQ???յ  T?'<>X) 4?MsFW, gԟpx^ d&x<=SЧφg͆㍀0G8ݙjGxu]=#`hH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@E¿Fம0FE"_#`@aX kpW#"`h0F0,5khH#P5FXZ$k(  @a #`Z,-5Fwu0- #` CPXF @0!`(]]#`@Tf =TYIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/minkowski2-tests-expected.png0000644000175000017500000001776111640436733030375 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݿ%u]EDؤƸN*U #./HoXT . 7H!YDpB wm6}g3s̙;gt}<ϟ? POz[cJ@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@QPM  @(x&@p PT@mm @@8(* 6޶  Eo mgE@63@hm @@Qݷm( p[wyM\,p'kOm>%] 5K,0%yp+ e]\C_-¦(q ,zQ!/kW\J`]P V`sT7)_ - N,X- ԜD)@5 @/c\#,^Z130%=8% .Fm@&pHs b''`,$)-FB?lb`?3HR A"%`܌bZ"M>%0VK] =8"p 8oK@lߍ~ Mo~ww]_iK `C 4IЅ [l@;G]Z"j;@Sᯏ7>=g[u=*d]ZjRy zpE"'؛'* po?X oT`/NOH]1~6Lpŋf>32m ]tagwW6`wS2^_w$3M][+XlY5r75<|Ih%[\l)`—MU2?Yy]x:k"3$A0doX\s a0! l?zzQ60̐ͺ ]#wً27$չe0MIksYEuG=C4n" f~8"'C+'ݗd鿜? >/,{{ O@j5 ' apE ߻W{\qO@m)-_. N|ѳ_{{߽=>|/6Q@(7#z/^>%0>Sѯ'!׎wR{e~8n~ȕH(:y-݌6gĜoM+nmMN ̓_h{7-XiJs[֜1pW_#h@/׬迦I2~vf=Wy+HѦ%4P1 /) ^齌6f?F|7fZF2+yL(KO'(n&EG:mGٮze3b\N&,(f&w_j[ h[-l &(2 S;& x?zGL寞6?J/4 pK\`/*z'tFǿ˸ 5/,Y|k+mOoY{_뽟&Qx%pj<իU0ZkW**ڰ"$kK[ξdʯd|52Wy7H/_/ { d*h-ĩֳFz i.̀n) :suFx0ުOI10+Gv&Ls] '@h>, /|ᬹO.sG8' _6g'H0eg%;7?Yݟ!_> kjNG嬳gq_@xV`d ܽ5sٺ[JOS0w\`.2'=s`6FnŽWzՕ/Y䰶z/ h[Qm_TSE7G kJ?< ^svoѣo$$#Ъ=5u| pt\qàl$.[pvw>v1on5$x߾F {JO,$ BG{o'uI<^vU0w<%`^`Uq _{nX\2["WUށ@zG[߿]Ob ZR(OXM`@H5tA Nwzb`6&fo OqJ|M$0s-Գ߃-\K <Lkjh>B @l(Nk \,F]뿟5ۻ/ w݈MhG%|loe(Z_]^ +m /ʀ=O~^@ )w REP4j3rnix@Rŀ y /}2F.#@`@ ).=P~s[R{#Ak@(Y ׮rא{eG@_,jZ6MiA6 ؂_  l1Z0N XL`!FD l=90 X^`C tg6|. @@^JK*'@@kZMR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$ DDUk @ H$% @ B@DZ @&) B՚H 4I$@@IJ$@@P&MR""@5  @@$h  ! "TI AHjM$pIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/control-hull-dimension-expected.png0000644000175000017500000001532412076022157031531 0ustar chrysnchrysnPNG  IHDR{CIDATxAƕВI{bjX=a@C-hxM5NW#2`D㉓Ifp\G)˯+Y 0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls &@0 * Bls?֭??_W8M@7}k7ANسXC ۷]w"g7ztsX8WiB@ Z'l%#u[ՏZOcѯ%ikp1g0A]u>& m=h-^~|(  qMCZKg3kSu$(ECZDhD< gv Xw~@암{}k} g@ė!$jַo8| IpAG=pl/$F[Zw>"wh=<]`>-˜h{W[`6ɨ :$ l Nk XWy?)h~D>>K1Xg5 '$8Z8a|k}B($h<=  R<6߯YwIy~iK?c/]l{" Pm9"؛,@`HλeAQg0m%魵֟ނ_/8` J{ ַvZd,IpyDۂ}74B'F4z% $qk%׌+ ݮ'q VcZXfsa ˝/ F^ӻ`'MQZgR%:Xk589I$oꍋ<+]?O32"np ,C7O& &k Kk pKrK/W9I@/  ,F BݏN1 Z@w?t" :i @׀/98]@@s9J >Y<s s [ p8]  p8sݕ [0|q3@k y * Vy$@Cw杈*#@PО  0*#@Xq y{2 U'  0*#@Xq y{2V9`Il-WJX0_OUDM` 0*"@&EO@S @`"'0lxlɨ" m܍ z"d ~X(| @@j  d ^Ț%@PpYV-P@,o @` /qcp3@PJkp3U PY`a8 f+Zg f+Zg f,-o^x PCN]  M`V @CN(@ @ E@tZ(@) $.5 nM|C)`sUT"* ͊$@5 "@DI[pkD6+7mV$nf 7|ρ&g WE9 @౑+ 0"@cR@LVE @ీxl L) l X@<6r( cgOqx%0Q x Td|O V {2'@`+= @`r0yG{  0\]ɧ)0WԔ1&7Xy2 SY@] @`E@8EUV SY`*Um.j3 63X PM`\2@ T$"@`NIY2`I*[.5u\JX￳ /J'@@F\7|O@@L4V u[  )/m&@Z 5.gٶy^Vn+Mh"@9;(nlnH|A୶ ;&j+p&MXq l@r  m-ۜ\E@`sqf* 0xgl roMxV4dE5w`|M`wlvS@ v[ @7.1ۏ36#]ۭ6\Ab`K?)@{[GB%`#)}g\~.> jX~ ꤯x{~nJ[x~(`ot[V3uq@[p[6u6 ݰC~M'uV$x=WqwP4<hV XwwpOݧu(uŶǸ)T6B4?v<*at 'zP܌"0S?Ns%}z"._??k$5TO' 7j \mocvu*"Bp2|R,S]/9ϔo3|.,[ 4Ql|~@+[}0gywv:&*`M8Ǹصy8|.apuؿMM~(m/S 8e"@`m?X"at/mk!J}󏯕{R1PQw(xPbo: Pa>hڥ!@-e՚n?٦~MFfu+`ny5M x?lM/Jd&7 lduh w}_]hY`8d5RRod?k\ͰI^ws3ASDu^ķޗ%P`f#=_e?Dֿ=;$dC8˲ޝy_mB2nC>mݍ| xS4|d@)Wntߦ ՉZ T0.[=t)|%@I`-47 @`c1#@@+N6{:"w4< D A3 4C pTн @X0Ni,+ t67ꝯu%@@Vh `:1FyVѮp guJ d o(PM`yg$@@QP&@ PT@m  Fx+H˞> b6& Z @`#!@@k {Z[DC@NzY0Q{"@?f p @ @3ٗ M|}"^z"Ly3p_m oȻ̜fr@3|&B o̜!3yZ oȻ̜-@B>S&@@^wfNL o̜!`O\v v@,- u>$h,`ºBuAe@08:  t-3a,#9l5,E[l,#^x+2u\h/L}D+0 r @ H@'@\0W8$h+dL@ p&w Z7=^RO.lXMX`'&@{EEJ5lfm@(k 4 _45Ws @ 4 @`5 /V[NL@Y$0. ]q2`F !@Tpw @ l"`F !@9l 5}U aZ  @@ppwϭg p@ g~oh MJ@πS4" R(/<\\^|=BuPX%?f}A^ $8D/g @!k[B @`SJs)>4s6Q$p+_ /k\8hܗ[8.8 υ~Ov{z?%#`Kj Szy_{?!@$P T>zR_ p@wuxӺw0@mq.t\w @(0X9/їLrJG~t }#^߀Pzzn $~2 =(L@RT(e? y-# `n/~:&>( @ _gy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@Vz%Lr2IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/render-tests-expected.png0000644000175000017500000002262611664172106027550 0ustar chrysnchrysnPNG  IHDR{C IDATx_%gyMQ؊XiSĪ)R)n ABEBeU()i0*i"&c0&jjvhlwgϟ93̼|1sΙ3~5.G?z\N$ (l$Pc;" ӡ 4@:~35tfC$ (l.!>" ~Q?_m6O/O_qdk*4͇~{gmL\ǟs`;~ 7>K&6lGMZ`@h6@War{̔sǭ=𡻻77i݁ j!@S 5\7PAM;&=@ۥ{-ydtyGO,NЭKBv5nkjUaA&@A y/@Q*;߿G/ ^'/m} CPKoJxo&APOOuo @Υ+DJ`0:wl]nsf+ zy {p}= r=ah N]n?8д$h^xYpйN?PL #!uG/ +8|x>ۡG_}$+V~vl7?oyzF?=ݪyȴoLdžAwq6NÛ0H(Y+YXcaӛ+s_;Y9⋀647=;% $AL6_>.}n/X{WƗ~׿?/(6@YcߘjjG$A)8wt H@Yt}3vng߷ݧtiVn?p +nR};oߟ{v muRvgw: nWͿsݧt9396wSnwظƝn% Ǟ`Y8願d~SI6D੭?`)C ?B{[EOK^'.tgmv>+*=7Ig]v_pi= ~\y܇oEn[>?=+C=N'n+ r:>qӋgY}-ϻj>t_<H+jڹҦ.%(7~*;wv.}{vn'MjYuj>~ x)Z(㧿ҽ̿2ξ놴azzҐJ ~<=kܚUMױ"ξs_杢ngup9yCw?1=' U %twv_y{o MbLjݞ1PwC͗ƾ$wUqg=>]0M}Xϻ@y?~n3semߩRY6rUrːIهPTO4M ,=AGmH5@(ċ]/*$hn U;G=/G=Jnm%nxS+]U)@q'@tZ_w? <;S4:Z ZiOHa ,or`b{=vo}3O ~O7Az͙/]3?) !zctA\_l?[ZN8l ^/ѣ\ hx+fmtUԬ1~/o9(.;h ֮u_WQF=N v(!/v&Lwiߝt}_ˁyioagә<\/n|_ϟz3 ?޳eh?D>F !71^wwx}|= ܭs m{Ŏf `pJ~5Ϟe*N^ԻB V$(MD R{IJQahr`;qgE@(߹Xb@O F7 l d VX62|!◆1?r ̟='}6o|=/nWxAYЎh_ ҳ7BwFnzgv ڍwF( tN?h2Ou@^iiGh"”\K_4=]լ-[X;0`1R{ p4o }ǣ LE:8kޡfMcZ/y뫛{6b@Pr.}ۘluSW摃1PwȚwxg? $.yڃ{ء@ t)G4PsB,t~F@L(Nh~ԟ?-,){ Ox=otYbt[ '7?藍x2 ru)|`ffC"5]"*7]Z>%Pd#|Swƀ?Ѯ! F!ŀ?=C!pmc`}+P3) HV|A`8^A"; PC?XߠXd'wB l\ @S1: @H/p䔂=M+ @ಀ,\x=˻o7e\ `YI>Q($p Wn-0Ql=*|}߸"Aa1ښw}ꡨS7o0Ϋ]{Qmkp5VVE H?%FqٙB# 3]4 z#F),%qAJ~ 8J@?ʓ [B T}A`*&at+(r`ZKMLP 4ukK̡V(q5l_o1 l@_X{ Zh0WARh_tԪ${֯ՙI`9e.;E>r`s\ F_no7wF q5_jA䝗3Z@,xw7x:d4[N5P@vW{7|W=Zt?QLNw,wK3(qE:e7;u7RG&@B cl*/(FFH2$m 't<]@m9wŝV%Mfɑ-Mታ@?ճ;vo=K4?Z5j?{uk:$LR(G@߯VG:D6@Zbb`e4+c<@@u%3RR*a cv=:׿Kq_qs_~[QOu7|ZpE]N[zke{Y`TfQ@l;5 \s£9sg)~P@ Aba l1@:%; C@ĨY @`K W4 $+J @@# &^ͷAL|D#@<`WG%@@ :*~հt&epm^ɫPv .7Zl|9}N]^ʀ-/_#M`hTZ)vZ1 KHˮѕ.t4>2ERbL  j[7 W_ߩW&뒐. 9w[ٓ@2^z;(Qظ,__ 4q+>_q UR3l@(5ʀTHZj@#GkY3e@[!/־RW !:P9uXZOJN(sO ,!E'x)P 믡Dhe@kO믶tN¾ br  "P+$@(xC/8]hj' ^Z14*fM4~;##U\+?Z|/XZu0 deϵ?M`Ey;hs`CJXW^ ZqZ.i!0+X"PJYZd*QWIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/circle-small-expected.png0000644000175000017500000002036611642654340027500 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx-] jFEAAT\+麸w) wvazUA KBiZ!Z!Ҫ6h4Ԙ^}NsѯΜ|y`ٝ#8Ao aKwx=,; 5wXI[o'V1XDcj{]o\@C1t 2b`h,r^,?nm#;~|&7|k?Z1vË' ''.lc.]Crf,r a|bv4*b3LǷk"N;w ]ߛ +} Y,\Ƃ@߻ڣo=wtbe߷1p,)pJhj~s6p~t<8Q2`ۻGdjTҋߚ\n{01Pm\^p ]Ml}\g ήyc Wޟ$/{3Z pS)`5ivYh( F_}NdɀSJJN?u3ͼ( Ni2`&.&UV3?iE\O { @1ξ_Ov__a>_yoگONF nQ/r?vM%& պDջ`??c޴W,YopW^Oql.=\Y(ؙ޴i3{n& nodgbg4'J PE/۵~?qw1ם ^٣h=#۩?6Q/Λ]/plRv7t㝑u7. pmԱY h(@[?Vֿ۞M}ԛ1d[~*q 4pk KvxT[5 tpKŗ8]g@ p|=Xm Ǐ}7Y֙3ovꪠ7VХ#qRH" ~d{"f+ڪr{d̈́fH{}+yO9ڰ?^|/Ouj=w> \~yO7RՖj>H?WD`k|G{P}%Q K\?o^vԣGު.\w>{j[@ߟC @ ]I̢<|w|'w>{C@Kd$+xwn}x @z,J++vXPC P΄A/t' ,.!'):t |U94:$ɓ؝4뽺HI'O P[<>j 8Թګt_m=_W~w-gm 8O'gQbufźC? ="IOx6#O M0QW_{E@Jnc:FNش@ozכdgzu."@ !OG=|Ձ&@C?@ פO`V l@oU| si9AݿS`ל&hY?oQ`ϛ > ܝ?QK+ s}8|81m> xI ZkoÑg{wNLt ?H'I vp*i"p@ twx 2ooaD&~D10YօZ n{`Rsb@8W`Bgq]<=>p'[^Z;F\vwˀ3$+$0E/"2d@+'IFֿkcx8W!!Wu.h{]sޑ'7!A#᠜ŭ/Ul 82`BgB0L7Ks 109Q$ACv}Y73LGp~4#JAvvorAh"` M bDަߞY:KIvghƕ - '߈-~ '=_}% ?F`zo2*@` =?|15.hƻ@Ph?@5 ͬ@oV8+ w1' 1˙fjԝ])1t4 ŭg9sp IhOK5k\6`t1J<֛oW3ˇ_fZUr OW )> #8x<#YYc`00i0s}w65 Og[蝾o-4'$+ߓ,~/ڀ`5A| )=}h~or5a `7 ]/ x[y[ M4_ 0(kPwW}[8XU |+g@7_ip%~@aD |y3͑[ۑ`wЇ{ς DvhڦX3P< 3F@o(p( =n ը>hL9 @¢]wϼ8|0H:Fjl ͵لzPZI`4^}_}@x [Ȁ@[?X[@-y[x_8',HQ&$@O/?  @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ P%s$@@@5$2 U2GTC @ $1kIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/circle-expected.png0000644000175000017500000001571311642654340026372 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxMlW>1:S "Nd Nx!CL3A* Ư@"Qc:9Uջw=20]{u^>y{o][ @C` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oPB@hM` @ T@oxzFpn|14g0 Tp 7?'xF*(l0CAHNQ??ϡ?bօ(,t\g 5;;g' hCqxK&hs_f3CVmRs*~ʠP瞔s2`Y|GE ['͎ h 6#(pOǸ9QsHGndn 0Ipׅ0/WVOA .{,Ip'_|-XOw'I4Pv@M,ES{g> N" U@ONuv>~dKRTe.%SO{e XX\D66MM XXhE !Pu?% HUlxIu @`C@lxIh=]k (- `]PAa[*+o@@_uւwV,Z@<>~+(o:rM H8 QSS&@@ R P ^ XوVx+nftM,Dnnx P-nx@wߚƢx ܻ|kaK*[O=_F33 ;?gzY?'8Q`u8‚oW6CRd>|_M,3p' 'Kɇ| 8&@H.!p&NA@Yŧ>oU :pw0ϬtNC Odu>{=%@` >Qhn"08ZrQ(67COG}9`u8ѭXт hLY) {? EXWG?ozLƸ .g,D඀ɉ(oMT <:t5(ļGk &pt]#(]2i~&p «|Oc>&&Q0>z&xD [[YFzS{kX5p|q^{&X%mf_ jhFlefCs<ep2pI1sVm|hnQ:|w ģվKݫ<XT V}hKq{_/o% (%9x-`0.t/,N2?Ww3.@HЃ<ٸσg"? MC4 kG*V%W:KQ pow  ۯ|u$ ʷ: (3 ( P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eT( Ec @h) @B@T( @L Bh(fP @@C04S&@@P4 (2*@1 P@4 ͔  P!*A ahL Ph 4P C3eTe +0GIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/union-tests-expected.png0000644000175000017500000002445311640436733027424 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݱ8zoMǩ65С}5s5;Μ9Lp֫*DH>S%Q${NI*~7!#x%@g:@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe#@AW6 @ (Txe# ?};|~O9ߋ@L+g^ P?ί?O>`K@|E;?0HLۓIGKHKod A +KK9}h͗#6T';U *uG@[QIA! МP⼁0XY]=i KiJ}#bO},^Y#0[} j߀3njO0x7M0H瑮%.{.lMa FwR SYK-Ji@.QƢ<`.е|&߯ˉ;X6w \/P 07vX>tͲMK@wS؆;k;D|f ̍x׋9ȃc1nB w@Mls#v }۫aˌS_м+}@&`tXǣ+`lF[ Wܗ됶 @_}Mlp! $=؍J WlYrŴşDKċE~ Vrc/!QhϩA*u'+`{ 7:s0hN10US֟N?4`xV*Gr,fWEX~}LB_Ჷ?(MI0c&}1SQU(cImF~ۗ+=̑3I,"q= Clq],g.> %7oۘ;Q{Nlq=9|8Unx?=?S͞% Л ]c}rghU?[ԁ 8"Ow*.& vvYaAix$k ۽g6͞+DbI$C$I̿?Ы `]3 rptÀvx#r d+rNW1,?]?%ߏvY l%A.uQӋ*a1߀vxэ+gQΩ]ܾ]{+ղX}{U/Q-yycQ.֟Q{t |)ZUi0yK/9AX0wuMIN7̵M<ܢ Ϟ^a:kEFh|A0֘0~ag?wͲߙym|ax}MXpJ16O1j}LhdS: @E 8ӂĪ|_Tzg'|٠NsxNT0S9M'RUBrggvbYsv,3n&~&9Cr5SIQ;-. %E&zx,K gE钶?+KY!_仑3%MؚYib&< ^}?7vU|?˚_DN2yqM (/=:K$"ǀ 5Mk3''̮b+orRX<{JNJUOݰ`chT4OǸ9[ YodG<嘣V(\baJdZۋ`pҋ~N 尣+·{^rkUKY~G _ʞn?{jM-C9fgwލAʹۻrϩaPڞ .@-bڃ@-79lg ߮9oٵsoE%|V^LQMu?lmZRJ{ٝpνVB-N8}7Fx 8Q,Vkk)w O';ڠ- %^@ҫ|sp~Щi?jYIֿ^9 Rà^½}6/Sv5, ʊ>c|[Kiv?0○)6zK-O2yrϝZגlp=E V1t 2J-ٵv!U-?߫86a }RvEok9HXjY4\-^'oK z=,^vwk.w]OOP0&/X1 x0@G~׋Ot_#%AEAN: _q?߿$Hb}?k|tI?%wq~,lB#sm ǯuKp@@*q:XQ2`D:V"To f |SAE6[:9 )!l&; ')? 9E10$IFRS]3Pޱ#pB-eۑkYQ ,SNAͅmׂ斊',p>`*,G,&{ׅ' n-(NҮS LIPz`;x :ӱlyb L]nj/Y' 31 Wc@1o $ߟ/T\Hp+vTG+|quL``禬@#BLcwޔ7%hJɌ@Λ&p,_tó6)$x "՛DzfOj|j<5.qJmүA1uَ\!^ekT06cH8DSߋ=@zla߿Aֆ`)=`{S{*{(5F4%G={P(mJ1pׄxkfgE'6 6u?NX}:w"4Պ?_Ϫq.ޙ`HOܿ>T|f4j`ìcO/a@.DdHi|!o1c9jK?@ςkg`鱏~_~3sR6S js( 3ATha?6$SaO+p&ІA  jMR"Z"P~{Ms76 wH񋹬niMf0 b`Jι Y ۷ ٚ(l&!PU|! C@Tz~s`ipH o&#00gYGO,@#' D:Ȩ d^4I7)ˀ )\pI][f8T2:|Y6[ZH 31F wS e#WW2``6𕎻_yxwU}  56, $K(?G@?+}YU׌WG:êAǧ5B6u2b 78C2`'MXmtq*V z! Jr*PB+`[PKvP@q7JܿQMk3u6{ lnה'n47ቀ8dQrw(Xj>`v[/6q3mOT3#Yo xlMĘp-c &8E 1iw}pPO/zLi>/"~E] ~n"ifK@aV( ;@ Fj"_ X\! z:r3 _L֢]">/]2'l\mJ{@iLgҜ.K[YzjPȀu_S)K`ӜdoYnief vP%FPoLJxR ~Oŷ,^YH&Sٱc)kP)[FeqqȄџjmt%gY5im}a\|?oڤK;">U[oݽf҇^:w>{i1`AxnX]ۜexZL|gv:6sjYt'1i1) P-p ZV0;}$^2}jf.iqh)mwxee=w:}>-ąK([n%͹ś8FrNF&tAѡJAj颚а O4 dc5WYn㊫7FK,np3~Vo4@W*_ƍS"$7h!n [A-Ǻ?~_{߆~~#ve=loP񽾊୐oّDVio?Ӿ K `PWB&G|=CHW3S4Λx|7Ho7)SNU7vj/s՛Euwd*yw%d=O>[r<WeE=67F?mYieX6 7 xPAvC)}ޛ1UigV:Ie} 1:xOwV<~qSs;maŸvf{e;S6E[nDžw)(ڥҾGv22&/l"fأF;šqo9w;"OkncoVYjm,Umo[u`(n Y}T*M3v hiH@B-3P诌%njmmϯ>yvtXOғ}I]bY62Ą5>X֕/?y_ק+^R$ ذB,ڻT}EvR .bEnt*MO܅W~'޽OџjנpʚɸdCjҨ:7>8_(_y=ǵgt ;H[KYZr㚪ߝ^3ցפNڶKeNJK%rKEqNt˖9Ɂ+oJA~7ꐶ1Z\ zyn 1Z,F)-*Z-+R6+*SbxRlHP:RnSDi,l>6Y ttGfxrٺ:M_ڥ_bP6]::ٵ/IÍì:(j\Mog _}}'yHuvKo+:unn:O@9ŗ\rS  Իa C{/O􂅋uY^{Íci7]L|S7?8tቈ>5b=Ҋj& VTtKW<|mPC,9zbHmw]5_&6d -I&6=7dH<ƉylW+:')d<̙3[lICI:7k0y'.%33%0z 9)%ݠ&ӹ 2%XpJ7=|U翆.T>HDOJ`gL (Weo74N?(g{?U~C;L_'{&i,.\ 6pˏvo咥'r _W]+ΧO+ {!|f}Xc] ~{B뮻rUJ(̸_3:W^wƊɬxކYֶKionuϛ*7w0 $2[0*No6oB׏2t `߷ȃ/t@;)_[2-C~C 6q?׎ՉοE,6xȈҳ? Cdfݫu ֎eg5gRM[F<fmڻtM~%|LMS9f)OԬgh8=u7[ab T<5~~f)Y!%K5Of:>@KOj0^~~#O=#His!f1^-RHW#dԤI1|٣򼢢k' :v"c<>֛E^;iF̢>VBUb=4xf|yyJs 󌏙,R n^c2&yCߗ zkR[( OQ(uE]zMg5ࣷ>RYFi7-=9~Zf`J"zh3Ɂ 9c =F򿧟׭J?dյH~PW3Eos%;JO k_hu}COz1bTٲTZdn@Uf퇖{Čŏ>!Ji.[&ڮARqv:u=ܖS/>xޟĒOqmsw^7Y&Ze₩79? j[6߾^O-UP,6]:`,oYN -| fMP7Y*4[-MM'rHZ"壎:^D4@|`6.//;3'|uɧ&@jݰɁ62'9|_X\}xa4Giiv:t҂M3YP1S.ב@4m3NhFGW TוџqӀƯ״!7 p>DИ_n K!w ̓/wSв?? +ӧ֭{G*|4i%e&:=<b &WJf)A Gu |w^?X=!uA>ץ>L--iEDҀ@=)\sc4L|X[n7I6Uls3IK o}4 IDAT?׬YҵA^e4W*xCEVk̉tZH:_AY.׀'gQv_ OvVF(37Q>|)qFYpk<㓙jmɱ)=xsܥ:0,W"b/:>V;Ip<ɳ|XȞ:xk6*7mhx#ʯX,`pgp" =\UrUZC-.<'^|| O+~_S:x7\ZDWģҁ,bZdz r!7{zְoz{m)5 ~ސsynC𴔸 L*Bv.} |PO>r;1J]Mr>fߣy!a'5ڝ|YXLwM9t_bpx|v?bOn*9[45Ki]gnG^ҚNJj[2zaʡCw.6qUooT9z#g$77(T e_KP C:ܢփ{\g>;nRn*1? J/SAsΪMT[N)WFk5ݏB9gt/>g1GLN)Tw%@19{kx씔xsu?[൓zuPZzn6Jz`v.܂-8C :SCاjk觗[]o~]=6v|mu\6H쐭c8sV Pȟ9is%;?PYNEJ~VcPnY"oRUAgK@|Г Թ%IS E W0qڽ{G6"We~I څI墶M]yz1U_НGfb{ǚD9)wǛ[,f֘OykYz̥[O|܌ԉ_lW]_ުN<.*固v://˷8Tn_Sϔ@XOˇ|ڝr2c=F+@RWD'.JJr"]+t#ȫ:4;/)Ak<mf UhnxV 6UtH_,ePEOJ@UIbc7uAZs%2,^TQB^1(_f0Ar E[@_j1]CFU]CUIe~MV6]ƏUf?Zub>M@~V$kSUs_^6y&`^V&?Ql0)ݾk[bv hE?I ieoeJ%77Re_,) ~r)WyZWJ;Js,M@5?i='SNmo:4Tbg$U֖џ5L>mʤ~/t:Tcsj!U>SbJ:,?ֲwZHT&>9MTB2'\h,\z ,ۇ~^>vi1a^ te8(atzKe<@m{ y}џDEiz`Y@OE֜Г*W &2@wR,f握GF FM꿠`0~]:l& d7s@e͝}֬,~cvy0暕nWvlltӀؠ wm .d5 {@+yX?9ӵxy;X&@_aXz9gi, ImڳC4+-HҀd0!]z'&EcbX9zE7},j[^e-}oYoߞH:7"V!n߱iGv܅ 7b& `}O=I! ?*M@1 5kfP75`j(s]4`r<] GM߀ 0-ŊHii7L(֋>LG-~<6M2j;5A. kV'`ӛpdE kpӆ wO2k{鳗xS4-Rn d1"xҤ= U!|C_'E|EsrnЊiqSzf/>6 t967vqvgƛ#[.8kG02'iفrZLX{:nm^dl[}э N-iCWVJgB}&ي-P跏G>vJJ5?Q7^l?@>g}2]L2s˞|?℉-AџíE~#>SC\~J- in qD=_9+uB:X2P& ȽDK4= `sA忹0hWigAO6hO?԰ -P>HMГCh^f! 0t=~ǃ_| ZZ5AS6V7 [5KbÐClɰ 0dkB߬k\s˜|ݼΛzk8z bO#w:| 2áD (^|}! e=A#'H?{\yRᩁ mz ΙbuJ,,!U{:C?W555g͛n]RҢ6΢/ڧti"YJÏ@:h_&˂bj@b7DL,P?@2&!!{n '6 Zs7>S,B~X=yIC9*~a6ң +L!`39&ͪK4'L+Bщd΋<6Ca$9'~-w` Ҁ;}K^v贷z}%܁%z i$Ǯ% )/i͢l -Aɉ,Ki"OܦάBz,\X@6z+ AO gSzlJbn7CƔ` >RC,v;5rIvOh)/Ύ*z|i_ɔb2iܤrO4^xHJ0-~M ݞmN& Ti\ z*?JSv+FJPע7˚$kA.>s)UZj|%PF:Uʀ}^I_7<,ПacJ6K twr_|5ˀwucQeߎ??]%oc_heӠ\E2=owwhWqʞ(=UةKja䛀ٔL.tJ[Iق%|`*0(тlkk&zB dj-ٕ3ּ)WF4VMԹ> Hoy3c.xr6ٖe3}XF^~4Aw(Df1P2ur%6_h/t "Q,F' C ,iϛ9%(;Djc;NhL󭀥vʵ!Z,әhgeي䖉8Dֺ&@&zИ% `%NHUeإ!mRP Xz_c_?[552ɱ&$&Zg֨}t5]֨8:kk\iCC(R8)KzI֜%O>oL7wՐ;?0TV-Ҁvi+1 k36H;'\&_zXN.̉,k߿s$cv`n\&솹勓_+}D ʌ/_x]O!n|贈硩=ˏ0=Y˾8"yu\޼ J+kLz/`phCd % P +d&SQ,?P '&аSM+ ͶkW{^{ ݺYTE'cC;޹ߔ>t6Of&fY\tWMn4'Nkj`mZRxE \efJr 7_miTwuFuzb!=Pj׀mFP't;$[/C,= { e=woW>SK;<$'PѾ8`  ʢ'џjW: џ*y9ʪ썏(9m`Y?uşUkV7F4@(5?E@dZ:Sk vSvEtH<0FG.{-!ߛv gaZD4d$c^K5Tà=`*36u"*n4 `Sj-/jx i@PY&o9[&㬍Λ``3ı8Wo:g (M@ `fI(m#v^q2awW'L\XڭѼPIin_?*y0`Jְ&í KMEod:t(5:ko͒CnzS{&= o#M mޝ`d"׀y_pmPҀ5-pӀ6um8M5nu9Yk8ϔXW̝=v2?s 0(ձ%g7׀qFs!hQa\~EOsx3-/OLkYE=n&<6/D zxu=޾BbPjs”U- I`*5h0i1 J0%d_F)ZKV@R)⋥*UP;/Ô@EOM&y<6SCӧivmz?/jC+I X)3BR Po_ .-_4[R (@s`N#=ߺfQDxq?g?KLL&;t7n!]Y*\?7^ҧ3g]ǜO >oYlM;}_ժ*wrl:#k?{kN&` JKg2QVxM`%V'^#& [@<71G@Tc(Z ,6{㈇9?o)De,SŦ)Gjw;WwB}fםq hz*oxxR `џk}x~[l|?6g{I k(Lui,OiU6}6UbпGeϮ5LK$:vޅOɧE%iݗmg߾@Wk?'Pg(wߦP:s *iu= Hz>M/h5F@J ХjBOE5;6?ժEiHe/,MzGp֧4 tj,Kϊё'C 8}Ȥh=ǼiOzw%C `a#Zm@?u,rz'Cka <}/u' z 1m`,)3 L>z&f7'Yqo|&`}.w~'| _={^%Mߍ ZSJ2s pDQ=Nj: ةd zJP?`ʬg[nMڏNW:bV$k:i@&@z)[i|+`P]ħM)./d4IDAT}[TF|\VO8,dq£˔,ވ_vsGO 367 bL-n$~ߦ~;Y bD/lI*ۼ?7v衉?ң,F:h/k@hpQanџ:P,v!gudpqDG‡*D|'k6#휂I/uD|IdX+fa2~/Uh>u ғ?^3@5aw]"Z y@FM> ByHߡ-kŻwf nD?뤞(7|5mcH[fE Ϗ^uOv( ,@mN?FkuN6\H߹W x9qI7v\^8Oow` ?iԣo2׀l:+ pa#aeџyٟЛx8Z*e֭ɃjQj $k0ʀc2(FվȠث}5WQȤL4Es>\ #.+ʩkJ,j$O՛B_ hOL_: 囖r?׀߶3WpQwszKs\3ZZ[l^$+忯1AMJx$lo/\|?cgשD~NiptMH+|&iIm&%#mo*?LVR1KXF^0G!\V|OY?S ?+ *p&hi-1aP1E(=q̳kd3G|O=|\u^ `jeO֢/H l?| @jYu.HFq/羐^&HȘM忷Nf;u]7&?ZZozWHEn/b>qف~y*Q=EG?)ZG 1}ϤCYz`Ka6>n¿$vWT=xT6Oљy7T3nyђy:_k߯Γ&<Cg= > Obq90_ M$!|&eFq7sSy:hFg2*nLy#N_+:˧w[ mfK2}6'bGWl.,[@6$b$z)D_<Ī cNR-^Ǻy p7qʍ.MhE|*l P6O( z[57*b1ܛR;I$.epA,E7SyEctdQ> оmѿ)te^x 4FYр̟[D6AA$H74wB?H~Fu8cl0 xY6gᢕOR~(!ĭ{L6U*l,f*k3 e_Zg7+oR ĈaSL t2#''>+^ZJJ՛cevWR~SHb(1x:eMħj ֛}qA:2р4nv'ʔ_)A_洸 tw7њ_ -,j 8^2GT]H1% ! rc!SX 9|]{1Ǜ[xGϞn>`Ѱϟ3/O̬b7*bC!SmN=P^ yjnZH V`oDD+FԂ (tRwӦmևi1]bY7]E,HzzXv7 m9gY*- Pr ADN@{ޫӀIDF&̣7&|5k2D@q&i@P G"F pЍYG֢T h$HO)C[&k@8g.Egʯb_zD{*&%cXuouJeeЩIj|z̉GZ!t9~YXK԰i7Y|'hyITlO}(=4:3 g:@2LSMt<d"xoQ՜ {AwkyD+fu أhO/aX VTQq)GjLjp ;τ4t}V4 e ?|+/$ELZʊ)N(e@ ޲n IA?S';gS w~t'!ude`Wo/30.uSA&_=(QZP 7sɟI忡`Jo xˀea6CW^X%_z>џ:BgCO]'}?5NUb Ogm5TUG H tu*&. k/5$ᑩnr d]&DOwrbwƇ& 'ͨ*;*m%'8@pf(!iRiq9G]D'O/M9dHXݙ }GJ&`e8k@79?A[Ky7-7btDdSn'uO|>7ɀMj ^*'>8 w=w(I};.9 bίMR跏bAo$X}5p PO @rA5lu pjy[y»!PF|Λ]5S»!PF|H.ҿŶ.k5]VbG}d@V0F^> `J-՛n:C2@q716i.~O\Ĺγs avCnȜa$jxY n[v-v;(Knm"v7;EMc[a  ï݀9h» 0\~v7t _#F@5/ Ѩ@v_(?l}'Xp( $(P7 [Csgni>+Ln`y'9I@ g.'M8&@E(lxw,bi h d3|oC@9em p[gn},hgJ,?pa+^;ܶaA y:d?cʱ!;?x'MCLtK+bM/B 'a OOVk,#S]i|ȇ]vGH;b=޾@"!H^)>rlJe3 X3ZDm4`͛3(|PG! `pX2 =0=?:=̣[@bk֬)f>Qc?k8wfV/?Z!݀O396? A>oџ(v;wEs&hT&ӼwվOx3_SU1 sEC࢞0eV="[)|#}~x{eR*҉ [s`QpoK:PVmܸQ P!{PsW=MF#[N '&!Ωe/'%[@| X `7IM@tzBv'hJ!>Aa힕 hDX-YNp̢9x&naH C䒒^z[P-v[)?"~\QYl/,@UC MxJ/b b/F>'Ln% }|elsv9ݸ`)|']Ѐ 'K&w̿;}؇e +_\0rX3L%$0gh76CQ]MMm(nE]{#HtPOJvf+e9o1ڟOr/R^=RP[hAFMRAwhoVpOMxM&}gWPjHAkB24< o"=0dy\I@#n@ x pD=џrUe@@Aџ@.$@裑!B ={#H@/ c,B9 đMxvOg(X:gt5P=>TW]Gܷ>77~7PdF!slŎB\]sIPZ:j >GvQ}u~@[%X: nxcTa@~  u2~B  83(RyрߏRwd'p c-0*TM?`4ѿhP^f@^6j6jA0bl 9ӀַmS:@:E@4-3عӀ(L&Ƙ @&Ph 5 6#$XL|E0\Q%4 rJk@x{e@@2_+)3%p}%O  8Ȋ kQ}/=X, @,A-42E}/+Xව ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@C@fch( a ,b  @ E@@  aE@@ 140a1p p"  0"  P@@Y@@@@088@CNjVIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-intersect-expected.png0000644000175000017500000001206211642654340030610 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/lwpolyline-expected.png0000644000175000017500000001604311642654340027324 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxAPٕW=dޑ+ =HiG^G+tM6@{R;E˗?> 7  @/ @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc.p ,͞&y (>^^C p8֍?# (ҲpD].!?FNvU@tMƾx߁cj2oЯ7bHHy=ͦPC5f=p@Tr䡟I (L%68 `Fީ `hOClcǫo&06mfP3pP.#"&CG`؀]/@<ލtH V@ : AkࡿF˵<Pt:!{ 0~Tt K]1 ̨=Է6xP}<ŭGpf{f#q|{&~B@+g{j ([jxOd@@K(EL."@`(p7.4^ @` *FW~C 'p-' ~̩6(&/EED LX' K/zvatA:P zܶ37G_\R.(<pw \S޻> ?(pП |>sL f:tfQҰjA ʢ)36} :W (bI`򫁙y(|pSw ^Cn٧(kjq^/֛y<550ᬘDT([tpV]\})nOp%TGi̵>SH sT漋3WS-(+Xv ҮRi@o}]~׋^|oMB 4|\F t W@L}G j##i_ dB >QSQq;D |۰ ( jSGl =5ʔ?SSj >o3+ `( M |$4 `l~X9 w.2Q@TkV M$êfmߡFcc Yd5\)VqL@̷E/kݐ|,e0z;#vJ Y|P nV `87SȖh+F z-An;8,&5p7V;bp o6z $>5P" 4oF@F .BlJP('xI[V|Q Ը XLpmm5p^ <{+/5pF ukvm]E/۽|hM /< 3 R@HnR%(f4PMmK 8[ (6KIF(BmQ 8-PDuۨ51+ & ]5Sn `'HR@ mj`sz `3 ,u5!C[PGx@ <x͛&PyC SsT `8oèũ*T.P@Lm$5 [% 6i]ats`2w|K3 ? \F ` dZ0m =?KP)ITW=.K@d}V |]|Dmf5 >F(c]> @D5>~'20q^ (K (#^?`R (;Pd$5v>6n7*^ LYE[ 񱳵|3,o˧|[J' p"K(pW0)nA7@й5 LQ `a.R@LkP׀(<+j'E2䆆0yNns,?fj@su 0FNrP-;O@gNo׀x(ϛq (󎅕Pg5R9Pqj@;P3qmj@x̴T.rݞk^o߽| ૄ"e~èOn& I8@K^FQ rPNn5չ!8χs2|8?;+>]|/(GP"yo15 #T;.z$w (G^]@̞W `b `! Q _vT'ꬭtP⦃(AրxչEn|hA /.~:ʏk,M=Sqĸ9 `#P-cn ["ҝPSjj_x)^jj`lMxPf (lݹ蚌} {#@@$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 EiIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example003-expected.png0000644000175000017500000002153211664235334027005 0ustar chrysnchrysnPNG  IHDR{C IDATxݿ$YwO&rH@\ -NI,wĒ -X8!8$&te涷ggy>`~tUW}~޼ @?۲ @u@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Sim5@N@m:޶  \T@tZx&@p  @Soto[|O ^՛7_~6اu_ ֹ_@į{ᶍwEAJ鿿+vʊa! ͝@.?~o:nY%e-ao/ 7฼B_f  FX<L^+do=cuiUp뤵a_6BDc*~h3Pop0B6r( F ^0ɏ~3>.|'@_v,g?&7>ᷯ[ 7S Uyb3Ug@W宿ي0,n6^_3cUPd_ t zk?Xk>L*)?s*^J:R "}dՕ<"&m&p é7H~;Q 4N-Bd@$%cuk}mȽ~C`*  z} GB/0E5`18‡}~ufd+hX) VF {+J8 ]@d @`X g ~+ #@@vO`%a. W  R@a'?Nt{w9&rUL! (`g;;o Pw+을y!:C˛'EL5=GU i˻._\ unQ`Qe`6yMx_{*ֹ]$g* 7ʃFUMӟ^`XMw>p0^+j@o(Mz `5]`a0x$4Ul@Ɨ0pypr/v|* *q``@{-Qn-04."K?Tcc|`0"t8]ӟHL5V?¬;()NRwxVG@q<,<+g` 'Kg.k<0\6M?ru®/& |RTbxoW\0C̲x97y=禿̸{VhwhwpU(  ' ~Oӿm㝚L`8̯ V:TfNt&0̓>@? =X<Y>3/Hg^`r1J>1جqrÍO\t'F>:t:0xU}PSsv/Ͼ񌒠oosN{NMdœː2]0hQWo|bN|sc H|ttsR 1Wtc`X$8UJa8UN6>'c}ytc"Fp2U')B=32#EPn8v:'*?\=geO@G0. F}u"Fp2Hb__d+`5`%~C!"Fp2CAf:G }xV'ˇ(ѻ[㌒`hI/0R?3ˀӼܷ[?^ zuMÖ}:.RJ(g'H̲~Q1i$H,y,F*@$`<$)J}(U'#Ŋ1@߿UJpKf`Qi)Yb`Xm ,}(bo\}xH)$HATtXnH"Lnj}9 N84>}?n`Y@\v?%Aׇ<&0յ5-pK meﯸTm!+ C6)~Dժ0䖀%sME3Vm8E9kW3 '?񯿿Yw)Dm___KC8S_ +GtȀ$b`XSD/L  {ֿğ]1)b`1Q5sap'ȣoa߯d3pƱ˓P7u+8v)S(rA -DQ*m$VA?u$BsX:VV@ߏY:.oJYVl?r}@!]#S{+ {^Z DrCXUXqj~CjG]֟ o$EtCp"&ڃ֟X*z U4N4F@|PAn7i ]̕n1wêaథjcVһGFىlF}i)>y qjl'~3ڠ i,7lά]+ll^>x7#@S^?Xء̒mtY8H!m gO6 xV8hSJ4Rd羬md%pr%j@bY*j "@@"XJ H@$* @kkSVo{VH #U^ xˡ88R5O'J# fu@hMܕ/jWn- )YC &"w^, v. @`/|~ij?|C3`KA@Pe{$@Az=T  0# fPD@UGj/:j&T5-hkrqkceh* ޛ@a n MK@R/wA խ@?;9 _t^ĩW+2p9Q] hc<A 1YFu&ս|I h\Ĩ*ZuZu"bn%}g8VݐO@Ȳ\,*/.jntWH@-K.1}`cF']ْ<I 5]fOi*>ݿb7՛7_lv2',F;;cWho#?΅J<+iFS]^~U ;$68ހhƀ_T@:b[boZ;; 4Snjv>ǽY7hSÔB|tM@sb Ђ,%xw.O7 ._k1jly@J$[֟`#UlD(]v]+v'wgr+sr^QJ L#TjujB vX=)i2h yz\֦o%<"Ve5:ܙp%|A`s'rIZKLs(Sڮ'Bm}̮GDuP8Kp+ V7@=]&MXTS?}8.'B;_h38ZEkǭ@Mw@OuJ\,V ^vR̯JS n4^;CqMfԫNbw;~krnVµ=ࠅm-1ZxZb*^ R'|"VCu&LR7ڨ[F yxlbQ#jO#/>yc*XfM7iJKW$^(冓 5@MMs 35O5j,;T\'^^tr-pTq  RX,!q E@JXn'jH R5)1?U1G*b=O ZurxDXkzZ`_ OȀBŢVlr+!a@X*f1A|<R'BB[@XjJZ _@įĀ_nh娓U <_npwI eoBi DŲb1 HV0˭ pZUS$;E*o1W4IFWo|qL  '@@VrMBPh8 n B@  U@du @P@N k嬛pdY+g( @ Z9&@@(4Y@Y7 @!IDAT* Vκ  P(  '@@VrMBPh8 n B@  U@du @P@N k嬛pdY+g( @ Z9&@@(4Y@Y7 @!* Vκ  P(  '@@VrMBPh8 n B@  U@du @P@N k嬛pdY+g( @ Z9&@@(4Y@Y7 @!* Vκ  P(  '@@VrMBPh8 n B@  U@du @P@N k嬛pdY+g( @ Z9&@@(4Y@Y7 @!* Vκ  P(  '@@VrMBPh8 n B@  U@du @P@N k嬛pdY+g( @ Z9&@@(4Y@Y7 @!* Vκ  P(  '@@VrMBPh8 n B@  U@du @P@N k嬛Gy=1IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/ellipse-reverse-expected.png0000644000175000017500000001624311642654340030236 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExpIDATxݽ,U{Wdb$,ˡsXHBDF6"I$8DЊKƖW@]HE ;ٙv=s{ޮ󛞽k^ݽz @ OർUL s@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@PCV6mȿⲮ9˻WS<$O`B7o,0ъA$T+~W}o?ovT@l{)/~ "]~puv@vM]1O'OR?I6|L6>l-'4A`vaN!`5c ./rp`L@m!_% `xX4^7nh$PU~J, t{=Zޯ9r}򸷰M';y[Xcwv]~oL@\4)%>'N|{K}y?Ohu~$7?Y؅yX0ɶ~ǯ.>1 摏_ovy{3Zt"MЯ)WO//y<~^ njMof{&+m?no<W]C\ŷś-T]s43X5ãl)`o[(`mw֕_#}7~[ V?dNꂃ 6Hoq@ GAA%#XY/Gأ;V1ǞH|c?X,߄E'?{yO{ywjGi_u/j &k&pV,t_U pmkf +g_ VRLN8pB)dHoL4h9Mߣ>\G"& XM/@ra_}8Suw'Ox9B':OGzjARýkxb?/9xN C{k KVFYT'Z]_P/L$`OԬyy|r{?﷪y܊} T~߯: g ,h/wwnA6T:G & kǹѥ<n~`?kwJ& 轣&4M? ?=cO ]έXGY#wW~H/_8ppZ1~o|K (y}`x(2y1la[hs䉧= R 87~_sk1A?lkz/v#rT]GW~uj6Q/A 5ڷ?KOSv7^ʋ/IN]oOZs:B2^ S@k0/ò{xk?ן- [$ {.Mm^~GK@<_Pwշ\s׼{ T@߸w+W^Яv!`Fauȣ% zS5Xw&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<&T*<?7w4oIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/assign-tests-expected.png0000644000175000017500000002340611640436733027555 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݻD` 5θx;mr L f0=viuMT*ևþK>G7e3&@?u@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7m }䤯u> p񟚈D6( 6ڝmWEBaP! {tǰ౏w D6 p[}ǿ=UP`x\@<7@iiDS7';)Ƀ>*n{")щ7'.=H񟢈D@&2K@ǟTl$ =gLt "aa'G0 (gH$̦kCW=fm]DUUat#^x6>ϿNQ@l{_e #{G[x ]y`2Abh$?8H `+ JAӿ- x=R0œ[z5 0FɛM )қ>8%\͎^?ɿ0TM]pƧctӒ 9JGnuvW6WpC*_h0-zCr=xay1 $`ڑvuW>a`ZZ]nV^7~ I`9mx]gBݕ7;iXQU.0>o\ǯ #qXQu)z|Wޣt-|kxcE{Cn\Me<רCcGcbJ`4L?@v䉪Gӹ T #f ߦ>h, XzCg\%@@T6T)( ן ]A}я!8gSД I <~Yt^ #ֿ#nC U2FU& ,{{p/TjI@G:]Go(Z œCA_0?3T@-I!Zdz^}_'[/{n(gOx/ߟن " &2NS <&^)@1N4$Ӌl%M~pϩ}r2l_yMpj}EtZ8!֞[dϓ`g}Uu,a]BG3]{wrc?);.0R`!MNʥNm\8 O-8xɽx1pK$_m&]*^nڕm3%A"v/Jž?t4\߿&_o=\1pm+?\g[:<cL@zq HO渚NאVh] H'O_MTq`=f?}2 ̱L6p4h,Y-:+`q3qCpm敧2KZL{*4PߟLI L@v}ĭKbxRǸ}2110n[90 NVGUo:?7Wjvu[-?' GUny=\ۛ صON 1E@eS\5n sߢe`Mc›[@15q`߿$زB蕮؃_[H{U/awzKdEsG>lU|IFZa1 :RǕtn`=ޱ1z^_y{7 R[yKuV`p5ij=4sR>[.;Sk&O^'z[5K VO)j'fC\+~S5* bOok ?$PЏXkc@ߟnKmb۬J5U[ [*^~%G&}Uƺ ws{[\ŽO{-^]Q֥b77Y>8,-֏_ƀHj{#Y2<`U֛b^V5v45~W$(碲F !?H$s~W#f$Y]o&P;IƳ߇t[Iˉ!}cp XGym&8;K_qtC@Q' % B+`|57v_;3X"0c7_/m pкfS~%^1ۀ@Dj$3|φGEԱ}%$q9u|)m9̿B LX<+ n;QBO  <򠭿PqPp!}x]K A-Ii/ ڛg<)[YH1PjxE@DTq|T#9c;n/놠3+H y/iA- zCǞە~s]7`}_w~5ctpLӠQ&meEܟs+.zc\J~N^>FX@r*_vʉGZ8K6wCNB<6J Ly%1g/:3@<~* $K!|"$zCU<@_Vg =iK88D,I?@í2}0vsɋw'4~zzw2/g|ڨ^s ҽ@;XS}"4D\hNy' nqKZ 3l"nB8'B`X'}|.Or ݫ)j@_ZY$J@w4Eoы&pj[{]`^Y{tOqs^EM3ƽ?=,x047t0u~]4u<^Խ^ Xĉ7NPY˙.K[ӏcοI/Ǽq|$s$wQ<9;Dx0k˃}QO]G7=iu,u\jt3 80gĀ֟~ 10|"sp]޸0ӫυ, _=GnȀ{~ڨG. |8!D'j @n}ŋ |? \ G _]?ٲngž9qǵ3@oV:'"D@YէWّ_<~ۻ?8% >4uYR6"@`;Ul+vZ򉐾.,K6l!}] X, mֿ֭U,ͶVZw  b-/vЖ#ؗnaؕS SVϤ A@l+" 3vlS@~r]L]7޾z|= @@8/ 7k/;^^mL`@Pվ/?W L@<%@8k _M I1{qМ /*?9OJ99ԊsâZ9l@.{':*rx3[<3lL@|.2w~dZ<(JYJXqag/?wzl_e +|+[W^ {rmb`KXBe_M֗që[[ xOV#sD@w3!nf`  |~&@*6; @ _C3 @*N/  J@b 54D ~ ̀*6;?q @`X g7D+hX) Vٍ@ ?V pv$pZ{v3 {gj93 ί7@v ӗĀ߰Nurp0!gBٌL e%C\x[w p仼}euT+}"o \c5. `xǼn{I@氏[9 1pu+pZi1]]|~Q!c1P?:{@hYVrcZ1f~ u7'*_7ou;ω/X!@`o.1xCy@PwA WmnjDKw]eA}kyɭK UY+x^ (0!@@(we' Y:B P2X,@r, zDP T @=@GoooeK= m=WgҲuIDAT-ֿI@;ugnnePk. Wp/ݏ3T@tZúu+h+ z|V@PFoגtc f% jI: `3\$@.j ZC` X @-I!@@0`KZ @ V0%@@-PKq L@+ @%8& p  PK@Ԓt f% jI: `3\$@.j ZC` X @-I!@@0`KZ @ V0%@@-PKq L@+ @%8& p  PK@Ԓt f% jI: `3\$@.j ZC` X @-I!@@0`KZ @ V0%@@-PKq L@+ @%8& p  PK@Ԓt f% jI: `3\$@.j ZC` X @-I!@@0`KZ @ V0%@@-PKq L@+ @%8& p  PK@Ԓt f% jI: `3\$@.j ZC` X @-I!@@0`KZ @ V0%@@-PKq L@+ @%8&1âOIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/cylinder-tests-expected.png0000644000175000017500000002653411701151225030073 0ustar chrysnchrysnPNG  IHDR{C IDATxm-WycL1&\Rj %RP8 Ȋ] AQ% Ui:mJ)֎B:'AڠRVm> !H( E|/IIE-m u=Ι=3{޳33g]ٳgf[?3/9w̑ @94R@jo}\sե_X"0!2_< '>;x O` 8~#s{"w[. F'u) \ ˟u|SǟzS,^@,~ )p/iz!g 9Ѓ\Ȇ3إz{xL8F!LK@Lk>% 5zC Qk6yzC`d,Q@,qV$ @``jL  لKKUc"@0&XXH6!@g՘ 0@@ @ ( 8D`M DY5& lB% %Ϊ1 @`d,Q@,qVib-ztۭWm] ílIE EM @`neK,J@,j: p+[ @`Q`Qi0. [ْNiu{`ӧ^@logOZ@zt IY YO @`{=  0k0H򳛑]@n%puh%pt$(T@:Wŏ ( v;* :sMv'@\\gN  qSO=a ,[@,{~Fr:նW7hxj (z~Soqe*L^`juk$y$%|/V@;|.u1*S|I-/ ) ʜ-G=]5be~ Ir˨yU ( m },N#MZpO7}8ޜi# 1yR5W]:9֫&7[XTfSُ33t?b~c=?ȉ )tWe@}tl`OR" цohs@= +_ֵxn''+gltKI?p$r;`!`R\rlDp1|X37\YC>V?rof Gtm/߃MqJhuuzscs?y9{\LN`'>; @``sI@ggW@w|!~Ya!9aN. @` 0c؃wQEp/&:"XC MN`ǿZ1&KW l)-ۢxOR%E }{Y+^~;o-jlؙLU U]ܻOȀa! e T\R kXK_V˳߭FU 6ێl+7xUWNٮ_@}'?j&_?Ō@۹S܇thb㔷W~/~)~W"RLwѻhQ.V?7zM 7d@e0)os/x?h[= ^ 6G׿ 7}?PHUsC]Y=Jʀ.r KoUIh4e@O?o}@+K +gyub@4Loԍ& "6r[@S_Ǻp+ΗWZ>@W_w}5zgC 1˫Y󲅃 tU-:̏V7G)8]f* ;q/׮vU]O^/o=8~Kq~=yTӸF?Y80}@XS=9t_u}eZoҲ h%ZJi-Antam:r&@ YOti.q&G~8 w}OP5gC{gEv~qݝẁTW9ntcmP]dFnsXeOտvv:?9_7fC[И% Ɵ?9~G}K7B{ӓ 7*ozh%5^wFWƎ۽=2 }kX^S *ߊ"O( `ƖXXTeŬJտU\E:lUrZjrDžQ2`H#H~ƻ2ed=1߸g^xۗpui/_U*ϴpOz9w_rZ.֖_?B9yPY]&;y=Ggn2A /|77::jT.6iǵ?mڥcyMWmf@ sD$@]c_˧ɳ gRxqHs|ۿӳտh#Ua[?X-;Ʈ=i"*b>-V|' ?ż߱Ycq]̀|id@y)/ޖ O]~'nc`]VjeWTz^#;_`f ]3ilq5l._c̷G+Ch !V*ovπ4O} ^π\@qHQ1 {z {:CVlT; hmڱwc?U/y=7[BQ1p2(l-r.w:hn=ͼ2 -gA7V+[/[]CMgt3bOR ,ΦEs]^f@@^FW7غtM} ;`')P]V1yX,^v{[߾6Rl,8yn_x P~5 q㺻O5F3F4]itcu[e5Ͽ (ev<`C4F!^[v7idGF>rc^waz 6l/;/\5_a[5cÎ\/s7_6ƒ2Lw7aSoTn}ݽzݸv x]z^u7z.?v닺XN|]w+^ԟ?9Fڙ:6R4,UH,)' oXG^C2`ni}j1~׿|Q>Hpׯ~_m /.9 _5~u3L׺+S>k ?|hujv*_ 8-D&h8|z1ww,MW׽BO=7k'l/ƒK,e}q~%Z):pnx}%@*O,ënT7?V5yp)Wϟ_ Ó)}'~y]Lw ?GߪoS>9?<_3s2Càg?rȅ yօzϗ[v}nOl{zsX@,-gU#̏pCWyU  #^o7^ZkH /ă]{/$o ,ٹܹ3rgN~'yiÿ_+5&Y<|HT#-l{}v@c?*_u5gAiM oqG@ȝv> _{8XpO Xw\qVe?fzz1տ~72=2}㧟:7p%y'ԟ>=^?4:NB`"տAӃV32@ˍ߸xYz 7nt>=o5R4#+RݯҿꟜlޗ@U[w=JGyy);^Wn:? H TIIP:Au_o_W}V?kخw=omb75Uln pA&ZZ[y!ζ▫jǾɕU-W`f#^n@ՑeV{mpPUo:xZm7uShU3Yտ?OÀ41>`k;jڇF/*X5fտ<տQM].T-.[;Y|}C3^V֡Rp==coM{,[3g߳q>X_&._u꺭פ_^g@)YOeX^U]̀m5տ?mAF[;}H^KyiV_r?h76n}yZhҐ X1? 8dlT]VC^hĴVwo=`ZH]_X_<`.Day&`R k6 S㬹 H3(\_&^`m8ƒ=7 U?n<l]7~?W] K 䛀O(OUܓ,=߅7_ y+A}WȷB;u볔frƥth/M_`W~_D>^7ٯmsӟ_@W\\ju|еz_U'l;^7x 410Oҍ EX s H[WavW*֫vbDh\I=տ>n} ځ2`AYh])ZY\@u+0"ߴw=9prt6:}@?WFG]Z? ^}ybNR_\j@=_z=տ~-o\m8= Z>խ5_/}~7=_ ?v* 6 Vwǚ_5uGon-s/[*V8,/]X[eQag7k]=1]nFl*f]xUlcMzT}8nݷ_nߵտxao[g@u!\rܙ!fKկ^wʗC>vAgz{Votޱuan6nUwϿ~ hg~%FCX7:7#à; UL VW_6͑WHhؠ :2Wǝ!0 PWz 6.o藁7='0zV_b h{ʀ@* Vov&ڎ``SS LsvruS=p7GGþ3rx0?aF{ZOF eW魗_ %]ӳ* ;Ń/cK N y .jYD{=YOqP)|+Ot&}}:տ \#v}eu?J]3wZͽy@֟zez Oܹ3ں#N_xpTJT&`˯l]`?h lӱ: 9꿍TPH Q}+5wfԿx꾎~ɝy5ڄ|$NN@eJ5?)e@ 4iV^+@ J6uAXY  kuht==}*3سx+ ;7x2`EohK!J fE!]sե{;^n1-.&`}1S?uh%@` Ź7]7./ M\ )5J@joo#Miu(7 ?= SoߏN}F"+HTe{mJտtgX"~ϴ(<rQ$ВO>Y;g%?Rמ62Ţ?ʳX ?!J٦?dVy9l F9n+ρ}s{@W5>=; 6O(37xbUX9 8! NpLEo0 P..#w=w>TN?}%c}% fr&TΤA쉁g޳مAy]g" ]K te@[AN< V~ykBlZ37P'=u?wx5Tc_@xwyI0~@,!J@=6 c>֑k7Zy Wn{k]ߵ2Ed}_뒱~/稞#^s]%g߭R+yGP1=@_>ә];n^ߚ1Ob_/qV4&wLЇoߙ{~~c8@39 ؽYց/0$P6ͱ`c L5 gN^.PO_8dM$4 0XO~tG |ramI`Dw#b:^vǃ8wqZ&@@_ 8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@;3IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example018-expected.png0000644000175000017500000004524411664235362027022 0ustar chrysnchrysnPNG  IHDR{C IDATx eWYoC*U$$BB NlHaH4jҘ`@C-Q[Z;HE[l]J%t@TX*~{33{Ϲw]wϊ| @ >+23 @6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>0ym2/;C&-P]&ba.A;4̈>" ;{7b UpzkwAE{=2C-K j..r #C~ #& @Vfy4 ϾP-s dң |ahh@pPhsm:IS~wr?u@]HC^ؼi഑ŵ~|Oiͷ EUS=>Ws[ŵ/=cqB_藽m.w' wu?4}'݂6ր ֤>k=!084vu/ӟ \{Ý=B Fݗb \Jvw J"D;1R|1PAoŝ=v9E?%IC` dͨ-{#hvz 3P#ot>9w&cEv\-75|/{1ڦt']1׼S"\]|tW{pg (;_Q^ZTzHܬp卟 1[[ aNJAr`;6m׈nO ^饵sf0m^Ai]wAmѪ _yN m<JEfk^&u:#?]UwA7-H>4[hT[CPw. ,{\NI5'0@ ͯユ&kUWwߠ;9rh轓NA}b}4E龤 ]Ӏ ɁOi"m[ذZ5;Jwm~MGٰI@8M*k?ѣW@р&] u|Ϻws=BpO}=7OK~nz~iap=7(^tyՎޗoݮ睽AsZtw&k2e@Nm+H؜lE}%όչ{]X0zآ<Ů|px u[~'ٮQ8U/2mLpHOkYDPE5J@Jx`mi؟$V+a MgO=arloՃZI1H_!@ebX`z cs|/[xlIP MC@i&SׇtYoӡd`x#6lZl=w߳VmwEJ>}ȕ  v]D;~Mvyu.}DP)+~ )3aڇCTiD=FVz~SIyӀ+~b}cOtvH߿3DPjY:g:q|ϞlOUZQnemc߮+|s 0O\#K( B+ԜzQ]^qNRmTVidS.:U(uwvZz+n y/|`,wxdΠdtMe:eA+BZ8Wq7âV ڃXv $TĶhⶂu?lxJ NY_Ad9[FĦi7V MoJMwnF&Vauljqub1+N [G6olu"-gxU Ŭ-p=n"S W,?FoǝLVJ]a#!̍g =#]l-W!Q2js!(HdSQA.ɤ.FХёO;a:2Tw8ט(էPĠלjV]No漙3O[|fϓM79#j許Â@ElW6X N@:e@`z鱦' PQz5J* WlٴJohZ5+-{[!ZzƖ;_|ap۸$Epj'>p9uI@'~cϞ=vZ=Jl=j[ϯ9ӓO֭Yq+V >5\u=%!s?'oKpgߵW~By>u 9cA%v-zzsu]>rX}O/=WxQlzqו󢗞z30,<8XXXWnJ7_o +7jt(wLa󦕻>-:O9I%棏4*/_ʞիmmebV>~j}oN]~1b-U+r桫3WǶ*#X +M_jIlq׹î/E]<oO=i+~+ؑ'v\rcO$E_qag`Hv |c/9u ?t_sЉ~V} job}ړ{o=}ؼ݇d5WԹU_۟Ǯ5ǞĬk_y'=Jnv}o_j1֤|5&C=r@~ Z~{O`_?08m}v6':t9rv\V'^ȀQҋm^|ɇoZBܷʱ,bvIP:p̑ytQws-+MlMiby؃ٙaWa \ygZ/ FS_v޿U23"y3<|@qF.PKۋOoͯ?C1݅~UH|aIp믶ޕ:((G2`mkЁY2¶T#pNuw~s T[DՠSH̕éCr#}.駼Em<0! _Lm~)֣J>?I)pn_4`94nW$RvbA9a|W? ~a^w]\$*2oEnȺA?J<:=Id_yKҽ}[eW0䰿pH$w}iݑw؝՛a!}]s7kE-^Pw} z K>b-gbL,NzmQ@^/|uOuwuf6$܆.)qjt'a}y h']Zێ] h_g9_܀m+gG) ,)|O 6q=)n+m䕮bOޥzl>B m}Ш|{٠lvn L&mK~>Dgg[w֩01i4xUm:=(t.2y돸z SLnK5T?ԳKmxG\Xыpߝ$4ʷ0fzxî}x ׼p }jAG;%.Vڰ+'M^ᛇ?m]w!ѹ=pRxj`_(}i(m%SJ`?Xe"N_i3=0MGv9s?)]Zp_0ٴ]{%~y,pdr®9LWXτo>zPj'ɍߒq͖v mudaW9yŽ[q5zx@tӭ=m6;AfkN;g8pǫV~?6tN'Y|*Gք7fO[@"r[kHueM&aQ)msf&y- N O4  x$ǘL]+xonڞq[`9zWoKd_ r0p`'ާO=f&ցU+Oj;cy@z>ú-*%UD=Z0o7Zdno Ø^㻽#Û9LԶu=ߵ[;[|?!2Z^"/uj'[ nepp}fbݷ_}_I6u读W)H+nN@Wӟ_zͯ,XӳN\|##5魮qoӧZWb™F]ZNi^Q-ݹ'n|L7ȻWjs -u|>#9w5Ԗ=iBjܤWf%Aq}wto@G [ %dK]b}Qiar/ܔUnFxu0Q<:Ե062g-_(/9*ʃbowkxNaٙ6DKOPkT7)(8_&zbѧI8zjMrb5S"Ay2|^הi9C_|ךޮtHo1'km9| Ics~m|(Ȭa0&h|}Ʋ•^2TB]@7ߺW1 F*6!oo;2-إ˦w3Vw=/Qkdήt)(ĜX~Q@~9fS,dY\Zl,cH;*%s @S) 7/rJ9:+W^&_Į6K793GR lX IDATf ZZܚ*wL2_a jL|2to`/1־Sh IH.}cͿG~Lztƣ2uDЪY2M^u=ޤ1 V) qgVo&gnȋO=q6>~Ӻ7';٣Y.AU$EYT۔'XĤ; ǭ=|Q1nƑ}"7 e&dU,bm)$fH?_n *9v~0[XJWIg˕ۥ.\d%pZmv-]䪔$T~wۣ(?p~=?d*E)/>-{ AEiS| _u'!60Z~UJڣ~]?5mZ$V\}o]k'M Fvh \P/] ^`?o-ݸΟrNIϬ.%Wߢ+6N^7e&dg^!85N6>qlʼnr[XyPu0oMbîNg5Piefa?贆j6a<?e-/+#n%!B hZFAI5@}pZ'_oV hqkU:X I6=Ҿ~JoܰR sr%Vk/ 7 O#_iYaW)ٮֈpoTB~[] Y*Lf#EBڲ|ߢQm~SeLefJA4~w7O`F5~~?4sЉ [z{fJêh/F.|Ke[?ĜvVKbX2-XfÄS__M߇&Y?UۙfZVKMs^\<¥_C+7y_RT`e 44cPkKZɗ6QQ yAO,抉g+^Hҹl#%*}~elt[VxlH߇vwS|ԩP-NeNۘL뚞+ów%2+?,S&M.J7ZgIz%3# |z,Lr"}C5߼cC+ʸ@cmڍ,cÊmWj?Dx̣ L3e`Wנ^ho.2"Ѧ[E@Z9H}e0#M6>!L)Pf.x۝~}53]d8ANQ9yh̦kP)AR92d/vݶ@5y536i9k4:Fc#KfZf]SkH3+TX2H?kh@fM2$J4@;e"BəbKDQ|gvY%ejJ𗖿ݯgM>Of7i&mSkkLVB,|9E*?x]\M&f2L3:gE pP@~?.8-6ۤ. h:<\mO_cmۺ[ bxX/7X|Wqwoq#qKZpG&>%ͤfi26_Z_w/y9(śMuZV(gFr۾ h] dK$\ p?]x_gd^A_ŋ5QD|U׀{7Zp/$#c[?|y)Q jR-f}쥦Z<݂Z*0ׇ }>m~܅E ׍LG>mvZˀB!}?JvT&`|]roDPş Cj;8[l\M5TR7)`.΃)e,)A4.*o=g,ucW^vy{Z1̴V\18P-rZIq .GlNvSjuU"iMّP 4Uֱއ.Kk7+b‘׳6_6[k)~zi%{'SᭁJ D>^SAݲH \ժ ̪>=u?o}&z`;Tzh9 կɳ~:u]1lZ<bPSlEK'Zw8k猌&0kG+jp^~#'PfOhxǺN[J mIu܌v!JwB>n rfG^&"X,cW|g gNeuS^QViχПyj\zrGKhrÞ$W"?Se]@1KLc9nR G6$_D:||Sykn.qҖRic5ߢ wȧnv_EœuoM9ݽ=Mh8xahF2C@OwLSۛN52q_;: +- |,^O!sWlU~ytXfL7k9JH>rΛ# 5ԒT}P '雄wrÿ`.zi}V+TwrNd@c >>#E~9n1i9yZ7X̄%w67^ 9!(PݒAXT]UX#L=m*%R]^>L /_ w*pt4ɃWq.`;h2<5=.oGxo'_,oK'S2箝u;~̜,¸8cA&eߏzBFG3#( |}r߼>: Z\훦>ykBK(6_Y|q3wxuiYL+ȒyW_QF`"ogIXJK LdB}z)Zͩk򰗞˷K\b;…˕{Z`φ3ܽ|8;Frz/ZZ&d䯗^vGA( գ t_X9w߬H625U`Jsھ/$ΐwrVGAYі7VC} w|HU/ceNVp3(h+f ۫cq_e@lWx~ N ʄlW 96莞7n5yw̔U˲?GZʛɯ^{Pi$l:\†JY@ґ-譐.}śr_~D M1tyeR0%X.5 16fhM'Y㗻+2>P󧞐<|[~ӖRe[',x_O?ƿMpl53 ]_~@9ZeK!eI-W5mfo\Ϯ-J& 2A@ixΜC@m"-_[X:j֫/zs٠i@~䢟D8vZo86ݕI&o0zClỌA~Kso1}ִ\}4j=$z=9qfwF]9LFǫ,?[x r=쇏d aV_ns\ U s~I~_7;QЖA6g{I-ZYҳ^ye.$<h0EӞmŏ^k$qL?r^ `Bzܽ1\;)A)ZPTR.ΉMpWZc|~sbKD+D/~GQfOG q_inq@`֯I(AZz, ZQGq?h~IAڜ9u-<0 xdQ_՛K֚Vtj}配f|o?koH{2ig d@qS d8%X:I@-9в+p2dN)')y5O;`0:kOu@uf]D. ű] 9ߢij:pp/{%gCc( { CkKq??;N踁^H;NVb)ݑhC2Fbyf+s'w{G#` Lĩ9/y$ &CO/yeW[/ygE̊|;&O?@V SIDATO[!/ymذd 6e; L{K3&~{hYS/b$zA腙dMMdO=c JN@f>;"Ts}Ÿ sg^fwS6͜0s0iH6n@aF1uN.쎩L .%xfsl^c=6^ 90@`YPDz%@U Uhul囁SkSyd@` 1P#}1׹EN> YTȃ \w7 ~i( vW(qʉDžpguՔDλNr#XX(%*!<Шͺ1e]rt<5wuQ;{/}૕Q!Y}DLA&0F̟]_%6i2%Au`4m9A̠YPKJ?>>7?i$'1h8u <>;x{cLycxUmAkt$ 7-'dt{>Jiԅ1rh ̀0t @ .X1@`@ ]c 0 % .@`@`@K@] t   3N@ @f=.7- W3߯  Q @ !3 PP  2@ Q @ !3 PP  2@ Q @ !3 PP  2@ Q @ !3 PP  ex@9Njڠ $4`%%Vg>_`&o@2Ae 3|i@E~2 D,L s8 O2@cE:v R{B)s8b}Nf= -@ P5gO`;#hFhƏ] 0u w쌡99CZf@H+]!01 wČ=@{,i;ZBw H%U@.p2lDDfit< )y@M(i^AA M!T 92@o/'{e.'KH?.+k DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%oKIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-overlap-expected.png0000644000175000017500000001206211642654340030260 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootopenscad-2013.01+dfsg.orig/tests/regression/opencsgtest/highlight-and-background-modifier-expected.pngopenscad-2013.01+dfsg.orig/tests/regression/opencsgtest/highlight-and-background-modifier-expected.p0000644000175000017500000005325412076022157033223 0ustar chrysnchrysnPNG  IHDR{C@IDATx} %IY}{{ッ t7HGdia`phpQ9tf33nzPqk6ɐ @e'\|<_YYa_D*X!k?x,\C@!@j}uy~NA10`ŧ4W]a]ԥ-"5@@aavaaoCG~le9>_eAl0! v ??ѿ҃b. ]8!ngѦӱ=o+3_{Lȏw=FFn|+??%[ x6;nP?%0i/Yo0B0>S~s4Q?w||sߡGF4λkK#H6T8:E󖕐oo_~W^۰ڡ:@Ty%(;te~n>2@WX翾W6@}v|٥V_ 9f2?49UGM@0,U7u,rV0,t&hHk*AJmطFLhhUɩVLdo%8P PX(D)[RA՞=%"ZF'%ڣZ&j@V Y~qvN6hG"ƌ=]S쇐3<B hϷRvT<ƀG)>Q1k/L#G`UR[ ΟLYo?@0~"hp~@@ @ @xPM{{|"4^ VMYj *8!(:@в=Fy@4@C@!HCHFoIƦg 5h$pyp@Ԩ*@'hW/j/ `r*u`s}s5}Jlwa1ť~O#>RX^9LBIRE !WVh(_~蚍<'UGހ.0t \DP]Os痦W&W(?g@<$)@t)+e1=HR  H!mP-qο@l:zg~25YȚX 8G/&8-bYNIiHh(31>BJ20|DvG<Ƚtb?G/\Īf2Νp$G XC:-CPzS$Og ?p?(rCn%`} k28\L~*rI.R+񩒠R'52s! ހ`_.ҋ0W(2 ' K.O ߥ"S?۶$GIXYxY|-?s^N0t)V|4@RK*:?P-.GOœ:\,Mcc{/\-*N)xZ_#9%m\h0X580JX5<F!'/{B~O>9{ƺeZ@J .9O)E( 3ʇ#W1&!@ZuIGN<,y ~ > Μ;>D Ȃv(@"/K.vmDa6 Yrb4{Y^?R?͏81Kk(NX Pb ;MFiJTĄS`]_#;t-y@]AU2&#s"Z>̦Dz G;Ąމ#WlvBY5Kv^[\|n .gd P( @bFœwlr4`s1 ;p@ſg;xpnzHlđ%O\fVbpB'UF#Ny~p&k IȎV62u:}Ih@& 8= Ʃ5"zr#q^kgv;S=r=oV<*z'vYdtOf ,Lxa!esU(B=;;<  0je"8ln~nj2zݙM##eсOv>lWtңGٓpY @f*pnvri@})A*!~ ӲС,t r_^|z83M^o^{On p(zy$Tq QS*oSr\q! ?=L!QcJϏXKR+2>ў .>< LCg*?`{M\KߟrcCii~QⷤSgy(]*yFK|V{)C34`ǖ a0]:$?LSUc6YFW0?K@o⍾" rd4-=͍VoUK8/R_N'<EX $r-{p- (Fp,}I@J;?-|(i(e@V$Y(C-.,4 승O=$nr*u.S_Ac˧&"Q!I @, 5'B ~A_? Ő+,tmPYn8J@sGb:Ŏxw4'4+dEZ# ;Pkj/'gҧs!#w>-/Xd-Ro4x6ѥ2ԿgƗZ!4hK QW˞&+"|l)($&}HtTN+Œ\='^w~+JO@Bm )%SJXyِ`Zw5N)2 $ qҏǐG:JUdjGR0U $}+ Թ!db F5p %,MDCD2 )#Y2׏Iby.[|iWĕH P|}_T*@"OƟ=pڹ}FA^BA`PEx_aާB5DDI.; wҔB֮hUV>hfEr? <#DH#<S4q!k UT4.Ҭu% HP1$ =Bhk'FO+CRq/tl-\q3BPUX9=LʢCERGڼar)3Bq>(%CY ?~\$ 4Q\342_]@)ׁB`%7* ~*D'>&VX[`J_HT4HUz%}ϝoH%}_+}ݫ㙾)yjA%d-EٿUg'3\4*_R?/ C;aFtJw3 ~ صovCFQ2(^m8(& bnzsdw7'1p̙sb;MRx/S k@A%9L_y.Hd, q6V}E[XKI>yMe~{7)wmR*i œڳd-n$?VʰFɇD-PQ\|iW O|kHǂ" C=8O~s7=R?k`'SHI,%zNtJ+b 4R$ 8lݝOr%z6A\86i*P) 'Q_ -9䧖_v|J{N V/6:Pl`A7Ex@ЕAm[P6{cIc}ID T;%Y@~%A2w:>>1܁RMIph4PYm)yjnCkWIǦ$d7kU>\-㷑(qibݴbO=<H 'u)xN0.֔RDAѽJ_^dX YW"Gd*ly`}&ZLM A*p0@fWf؟)zB"wJ:dc9ħ{7IKsۋV)`W. EAIB_0,\Mxsb)=O_6DJ#6o;q槤. (8SOs~鹜}¤lPaT,'S-`SNAJZ-W]E_uc)- ȌOaqp"ɀRPS5 i5`lBa߲q|~.zv#*!{p@1thOsrնA=!FnM(Al4 _s<2Zc@98"_%A+zUK/yGE&zg=您րW(b( ;@<;67O/R?%Hm` r Caq<8_#=7ޡr"Ob,4&iMsuٖ4t׫|p>{lX N*1?2 (dv]7}zN~J~_C"toZ9)J!S6/YzL]iՍ[jwG+M#Rk>vp LkR,:*:[ k q . ؟ +Y =THWhYqxsy1rqDqx<D)Ar+qp>MhxYJcMoc-kTrgl;dxV>,% @`Edba8@~ -4C_%'i}/qh?H%wiHދh5`r<ڍ/2&YӋI 4@{#IHrPAŴ,ESg*Se"" .;&}-_9YC4@߰ @["Q?c{:h*4'{z&zl\,? H -g"w[ VuZe5Ka]JZvX&k~]=ϔf) xE=G)=VE[`* +oQ"@t*# }<H͆l&kq (T%K رUA+k@St4PtͶ/?kr? }e0a+aXOgmX2>D/t4nׄm-ec"o" yl]nȃZ }|!9dGӲR?R_QKܡN))P&) @ ׅWsdү"޲| ˉ8? ) 2YD^I@@X 0_B<3e`NɬC}Xd5o{kwl#W_…&m4L,M ,H7_ IeNC}` m1P>y+}ݫ}9> ޗȣ2JfЀPzhCOH'\ȅfUN3p w1$]2d0$OeZg7 @ 〒s/eI{Fhe<H0/Vd D_mܽ?}*%l dK-ΏXoVJ峷 (&8+/8 /:h"}iAhc2}A);x\haŇ"(&l V3?I%L3f33,odwŬq|Blj L06:b3Z- 7yhzK)ٟRv*f @!4H_| )Afla"Aih H yU`N;cH/N %pqXU ]K4 ~Z_2J}Ƒ",@S@!X76>dJNm2uכ4ic@řm&-@uu}j>˅_2l_kVWlxx%3ե8 A۾3ϵN<b٩ułt,I}J<#a/"@\#Oo;f7s\8`̀U /{Q˅8o|'ɐ ;w S["Nx_yeʄ@x-"h jy =cy$ccv4#g3Lɒ…v 0pK[fngIZ Ŧc:Mf X:b Ud\Qft3Cݨ63u< 1BD١ [\xDL3 u@ UZ7% Bf쯤G lfjm(<ڷ>PpH=tZD@6T=v36/W%7oN A׿kx2mmUU] ؿeLg-a?kLo{Drȃ\fx$br"l7\;l%t㾅6ʓ72n8?(m#ibާL#q@\PݺwX4q;}iIA@& ꏳLoZ nXeN3B쟹0d( et%@Vf3d!{.t#捽Rp@-hO,ZJ@' lǘCTaoXt-@ʖ /95% /-x螡wH*%v2>=ɲY`.e#-\qI=K @4|+bn -G,}D_hϳ%Tkug0(!&TsvMO™s<Vn@鍝#+aDZoi%`5.OB;)9?Jhp%nj$"`",q|Uhhfut>ZHW<:0?c1x\fT-v:yk|0Q1VI),|BMshiC_3)ElE ^`kT?8hqCS@n!HD~)8nBr@JuC}%F9v~ouY:#N,\sԓjzg?%wz]v5֐|n{2U^^ HbLNV+Wt?pOQN0 \;D&i&(,@QA%z`}\ MJTQJ@ F'GVVϴ2G, <SF@kܡ_ξg=ʛS ⊋s❃gd҃9ޜh.RkoIh'NkV:+wn.b`G@@8__6b@YgFD.l4J8S ,  n5d94#ܧl]~A@R&Ϟ)ʑr! !@F# ?9ct-@*5Iq76Y9>]7b P `ѽO{؀pp\C\@9 c?ٖ@؟]{EP2s  H?owv*mHO6?Uл"@ @~WfBI9K5b/j3[Tv~dPmY ڷgmuNF8=Ե7\3@q qLlc[?i|VN5K^&ޯR/ښ~\NR85Ya[ԟxTqE!z{vRhmYdni#feUoҷ-0~`g8MWaGpT8oxm^Y@9LA29K%d@a_T$^,7y %s#RbX W > g.<;wƭV,.DELĥP8 9fbK [İ ೘l % Š:A:TAzx_`ail[BIJSA2/saЃBA/J֥.ƅR?4_bbzJ@:F)I ҃{+@|0IRoZϧcǩR0WS\68WXV$eg5yT_oʔ+SeӥܻUB ("# %߾iY}MX?!,s=8{n,O3el2%B KY|6#cRk.OyC]>E7z)x `SȮ_l0`nprـ2 Hg eDvɎ-*Y.ZVJ/P( Q ;%(];޼M<7PH`[^t!@ @o-b'X#-d0'7Vp>?`(f`|(,uB#l @j٪]U>wC&}L ʅX. e3Kal= U %@VhzBw\ uyT]] P;/l/ҙ>~$}E<tWBvZ:ˎ#/Lzjӆ1 ޷,l -@'\¥ @ ,1IE` J4^59ˊۀ*i儹4؎?q}%W`ml޲Q6@(meCg1!HCuƁ'm,E'Y |od߰?χJ %0,CV `B" K/Y뜾bߣ3ӣ7_$sl^G~ ռ \ FԞNV?\/~n3G)A*Sve@2 h(0 Qchؚ43I5od%(M5S%Ct2ewehz~Cy++C Y@p p2b e*Ajv.F ާHop`qI,&n)pWB1+Ah[rUݙnvT\Ir+-@<_гo'_Cg Cpx<0+ǂ`4iuwyieGK)\hJX~Pй3LyΖH[UIlMPbpqie:[]h%K& +stJjyހ`)ơNP/OU ~}coy;gx|N~/PUp=!1pkN_Ny~2}`#o|;l%QM4T f|voH>m{F=G:O>*B  1(h/j?ok1 ȊX}~χ Mn_on׌5'*`~Ü}|it Y08GUzYS3Sr "җAɇ@` ฝp VD]^73xdU(U725^+u`{ EѣӦHP29!]C愲#kGIDYl^]4RJzL"2@Կ~?9&I !_!`ghE[.3-Z@OR9J_ht-9RV]_5 W)r50 HBYֆnI]X]=+}|Q%?'ұ61)Nζ43QHta_5UܛlI^2{~0#祺R?hsKR$#?>?4$ \Z'#&1c==7CsB׶Or_~ޕw?T$ΉL]$h@}ݷq>+f*4+kc?Y2h #/#\2ާ^uLpх#JP ؟zrYD+@8MHn @jؙ2Of:NaJ=/ í@B;_ڀ Ccl3?/@j y@`( єM׭2WAongYFO^T$n1y$wfnx@T.L7CM\b S\.2!Y95$aC=.^ B2ˆ頌5/À@~$sQ?N;/Q|0 ;"V3111C V:#7gI=i`:؟jT`^ ZZ!o#5{ť5:e}'5K~aȽ<=:6sTx+_Qs&蕙#ګF:6M~_IgEÀ@^~+,u?HOݸ&kv|O b/IϯAݓ * :swē ,;-B 2I+PL[6Eas#e` 6+~GG=Se@BYrG{b 4P>suHO1 oXO}MѨEk D>$[Z(o%ٟN!)Wndԕg<y<# &Z'16TykߺC  r:OO6~d *FZ|43e5~88mY Z2}c|OJw t9?߄cMAjPf_ FƢ +xa7;#cJTaOB(ut MPSc3 #TCK!?塰DRKݜr>ֿ`jͣ?M<ؿ*2N}v I$ TXAay1oc[qh (~=| BڎKMIUjO+՗ēP5Sَ,~4ts`/Mu$@yOSgE/S9/. ~ROtV+`Ѳb@@,$v'2kL) )OS3? 8doĤ@vK$Pq8R?s} X9f kG1j9o[I& uNʮqS7;3ZRh)63ævidžh3nn=-gIDAT^ڦrEI2Q?U͎[g,l`^A6\nciA@u`20@~{r9y؊ћa2|)ui "imn: B.Ѯ0y?nB ~:m L YU; 4Rwv]}{z)Yy,&QO~Ĝ&>GI)!Zsy3$ hf,I~A$7_RK~ڪ@N3E Y'O^ٲ_8+vv>bZf  -zXu&} BKTV=mLtn@VO,PwE o7o|;|{aI+?Iԯ_W6Syۥ":[H H] ND 92@c#PJL[0rAꭼc+YU [oݰ39tQ{p.EU>AHq J0ˀ.v1YD Žp|n#]޿Ԝ8*:< i2H,-sCQ;\ܑoEhvDIqVEa uN .kYK} ?|OEYy˞xđE&?!}N:wp<> Fq\HJ@ ✕y_}ʀl@ |f5ؼ`.b`Y-+%he >29͇}ƦOg!(XfbW^:9mZaQVYC@a۶6c=3dO:2τ \4X[r ftb0=Ϗ y525x?k{@pkC.VF|bWTDI|;br?q:7ޓd`-!A$48+9DO;sɉ( ||3OΤyi9sP0JкGRd.c27jB$ #)$w-grWbrcnnsE$yk~&|i2E %sAd4΃<4!/ix(P*mnQW pR3S_?vĩaRq&F `@`2|Wg"d'ec(3!ubY:xԏ5nuKP} jX4FHʂRtۗj8Dm0" f*(*)3 f+}|riiPrD7eH(0V3G3g?o7C_=ӄZߕA6MekdS@hg~yڋD,&U~(B vd?x*xX:id FiVҀk~ӑ| #y}gG?q ڂF5k'_ %Ϊ7-JzH{+"pE|s3S^xwvY"16U(y"H0KGGjpB0ڤR"1~}^>$tnV9{~0z}r$E /ՐmBBn*};zsLMNyj wE*\pöZ5)"/\HyΏHY'_ }f>lظs&b<В]b'\X,Dwmt7wZ>Hb2/3$o[Ӂݳ:b|gtV7''t=MNd(AVTAYkRz@Zs]oTKo TSAڲz-ILgzҙz1 0oF g!mhe:ֱoPsœ HB]Z\7]A~VU-GP @P~"thy?o{`@5JtP&6ڗ*x4kZ 6Ne-+ӕLCP6@/@XrUuY R@x?SF[i  # @KڗEvpB!)(i>ӐʔX P` &qv4CL3Cд6X(($k0j`b:ܨ~3>80hf[c:(]I @RZÖ#)_7BGYY9j@Ity32ʹ<):w=u!{>_r! h:FC{-tik3t˸oe]: a_]ɍTPuJ+}/W@;]u6!@v 1kt +l-:F+n#h@-),'J\*<@򠇼EB>5"(o< .#@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r7J@ #@r]S,UZIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example015-expected.png0000644000175000017500000002053611701151225026777 0ustar chrysnchrysnPNG  IHDR{C IDATxklgY [ZARh0 "0?011! L!5, RåқJ[z;h]>kff3{^y;5yϾ#w @/d @H@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @@X(T@xe @DX{] #w$+I9IgT{޹g?[~{s\@neS_sC?@c41~G^wՁ$hk8! rQ[CTwq\5ns{o9zEoʀAGUL SxǩNq-/8I9P>bw:Xzf3nzQ5`m?0Wo_GvӷV&jNl.ydO ꒋX澨 EIl]ynl8s~O[-?)}ܻJJmϵM`qmSZչk`R3T={[$s`.k?я?)'s\_~EϘ)ͷ~%:[7[Gs|Sj=Cs  O ;[r|̼gޗ͞Չǭm 䈑1;;);l˿ӟ:SzS.3gչb}N*x\8Ugn& krʝV~;~jOxn{f,qV\J+*l͜>t霯<2p?f Y;?|)p//uӯ oU fp".ҿ~õ'mԲ7> o.CUڭ{UKjhiu|z~sK>ySs/ݼ4LrVc' 9~?3J@vvsm+ hN/# ڛ~D+g$91жqqFlw/ŞmITcIl\֋sbpARlAW0}3% p"h[`QYo5[.Ьzf1 b10ę/I.;K@* t[ϴWַ1p?74 nڝa?I6g{<]+7X3zvƞQg=QW]{d [^_{3vE^Qհ98>w D^q3N{fxm1Oy{?@/^Ui2{uEU][^xѶ=H| qio}ߗ_y]]/ .9[p;^;|? *228f `=uU@e" cχmp^˧V [:)kw&>yg~g\V|So^ @?^_13iÌ+i..{3=OQ-]U|iEu9_N/frK1!w =blK<O۫睷~𥗯t?4f\'r|g7;&-iqG9pvx\LDms򥪟i[Gc"ZgLC_{΍Wws8`8?vK>~co`5G-kޓ:SLq6[E[N8_z/ ;VFN?9xp7~Gv ?:+;n7+h_nUw$ggj[ҮquW#*_m̶izouw͝w77N9Jdu@! ц9&qځo|qgnVF@>Wظ|:օߡ>vsU/qK??Yԯ|rWs"0sebO׹Տ̝̞~[Lf f _Z>fxǴE]Tk?6.OG_O.{3?]qϚ}B͙%01FA9^U: XxšOlʇo1'`EE{Afmk '&nո?IP [H2"vPPZ2`}ݡЕ_ͫ3}o9IFguONK)JzD13a"[رn~E%ݪΤ?Ŷ~c1ɀfbԗ72 'V0e@uvb xn4$XxD 7[uldž4zv=ǤNE@Rgmpcz7ֺp{\gkWO{wM7Au73˿`B>*.Prg^ecͮ 'nLƟkf?J@Xw͕c߳~:U3?31 ~㬿9L_BǴOv]zC{c`ęNa~5an;%c c`EF>zH};b;~Uݭ5pA(& TI AuyVmom*ms  "Pk;wK`F߮wڦ_y{'1zk[iok8޽ؽ+LhFLTC8YgD"'" "* g@"g^6KKuـ/1X?{~yɏnۛ-3s{+ ߳nyqdĭF?)aS` | P@ )4\q3N;PO}ާ־fkGNvi+mSrP]rݿo}n'3i#ˀz̰cv:5 .e潷w7櫽I-i}٧W;wϘ؏`?v͜g\ֺ@%Y=OՁu4uT.B``ʞcXȳ/ ؙoͣ"p>f oNٛ y_@oCO8~_mt$Wu_Ï;_M|% 2xu쫭~xv`z@@a2X{'9G_U`oXkgY'ڃoRWskǯuoj?1.0z!R 8YNhvQu.+ 3ۭpj2w^ԡ|e3͑| (cWD_ B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWDĈIDAT B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWD B cWDLVIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygons-expected.png0000644000175000017500000001732611642654340027005 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݱr$q%^E!|@oCtɓKr*f0]U Fܠ02'o~? 6d @0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  @ퟗ֯x |?;B ~>_-iZw[.Bl0G@Koy [2·õ8g鿻 ar<0^G|! 6^+ M?ob`.}͟c Xd'ޣ' s]~Q;b,K_6gz}?>?jznpdX P]_\~pnՏ½jMQW3?ۏO d ]3?eܪ/|oA)kQwwnS.KCB״F½`g)Q~ j+abprz#a:D>@.29 ҿ3[{0KXc>! KO{_l}Y`0ON?P?Kc,~ ^{6~`[O[O !B32t}e3Uwx. \пfzKg։k'n(me>o/dA,ֶ·hzגGI4LI0_O;տ 4%-jx=$g;1[õzտ듊>IpbkWq`}^1v]_k`(Qʎ&S k |>PG} G_k 8F߇Ϟ/3$}cn#Z8 Hz2_1pE[,V#Z̾k)pM,Vcig]kS 25'L?suf 21 H;[Wy`O 9ޖ$ nu;gZ5γ$[VZxFa{˒`y|hUA_`L[&Ç D%A_(/ֺ@- ̝V:V/S*h-0YXہEdr#5U$Xˏm]O0xf-f. ['62b`%/L>g^߂M՗tY@@I?uۆ_R@5D ܀qLޒ-ݮ ]C1*$ ?i[bU_ <*pqX@B!C ĴB&{_#՟[ [2SeqVD!o!+S }fGM~10]Kw wY@/^%?_OH%9um|+bW@do3*g(y10d~Xc횧׸q׽ Xo&gvW~/>S 3<}:}@ic{,1]K^-<U]< /awӊD ܼ] \FrcRn.jňS_nfN>  n^hNr減7)X 4a}ߌօCp8r(GO ^~w1yba懾) w1꿛QM1pV'dLVdS9k9`^װ1`>yY/=XCŀ?ty~;hCп@1`?DpW?8OOx[&<- &t.c#e VéTn7;^o+v :hGx^Y X7ݶƃ=.ph X7O & kZF)mTDV X`*o\@`J ZaWkyh7b.տp2MVr ӟ_oGs ƀW {%D2Jߖ ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ ?LIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/for-tests-expected.png0000644000175000017500000002650011640436733027055 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxq5Y}Aݾ"IHuC1vMc$?C$L@(R&hYӿRĔ[זn *HllRhi6m4!y};;sgΙ{>{gΜ|{s'xC6b 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsA@69@ h  @@PM` @ Zx&@0 T@-a @@* ް  A o 7lsADqvnw#_= lLE/Ɔd8A&-SMT18ǪsEUɸW0DOJ]8m,mh1ְ} ˷W':{`xe@W-P:[sߎ@ ؆|RMi  zHoSC1ya0O~xi3H;!POP}h2Gc,kI;z`=hgNi_X'u?ڼ 5^UR֏J^k/Z_ݾ_ʹsBsr.i:`me7n\{=m_ߺo;yy OAf{?-f9pM5sݛ_{v;}pkO8ڇޖi0MtpCt@\P bnucxc؋#Uv㻏??kHouR ȀVv/ [_DNt}WwW[O|.O\޻ݹϝb`dClXD@,[;Z.}Ǐ?]z?7wyМn?)kJ{YB鯀B6<#/x Ot`_{-М:ۏyE‚gє82U&nܸǝ.ov/>]3?};t/\S3 woy/E7Əh74^N@=}?}Ov3_w;tn BL m//:yRUuf@@ CiO@jzI@t@?u SY(So'Z;'8s~g K{3|J\{ډƁq&$ uZ3Ǩvu<䴑2` {!wzQc8ZzoFW|?x5ʔK+~gtC J _.\V{9Q8pO8p7>gny艾GVUolճ<<Iʀ]}6BsiT%B:6 }ڋ_n76Ywv̽ i׾i Bj?IOߍRKyS!ᯀq^,Z9Gt.<'@hC-տ#DB[cm8is?n ~`jS,[Z5P,>YgkA{^}}THh>Xg$A{&N}`ʀ2`(:Kwc`_wI.>|*-\ҟlHȤ`Νayҁ헀,}\[*Lrjm5~ĶYy+B9ʃ1?>g]ֆ*;cz9xl{;`o FLSg9>\ 7;7rGgOȖL0=~-H-l`vMm@&kOTSۤoۥ dc1n'4Cߣ Wإw?hϣq#ph^U_NO?Ql1?{h-}>9ɣCJ{ S7In`oHn7u!Sz hTAn0nS^}NҿȐҹ};~ h_{ߵzi6P&IģߴO8τ>-O\;-s 8PPkiR̩DJ܁iw1w?2]"<}/zb)SYoz2 ] kc編K@x`~o/8}}Փhɉ{yىWNIy`~^+Qz 0@,ݙt@W(? +=o?=LKӏ#ZnsHOʀ;=I G ѫkύ̀qݽkS!<ڽo6c{wύuo> `動5vfgzn qYvgugb]+y'_05`"U n*u^W.2@jd|YFn]݃F,='R#6 {[?hsػ/5J~RZ땦Զ M.; >x3ͽC O@cAԾ]ش=#\Fd $vW#:%seJo$k^Vk^;9:G)َj{w~\H; <'8p9/@tm|E;/=:!sNQGr{땦;hCHfZ{גn?yjr`Ah2p*[GFdv|ԹYb@Zۣ&[k7ZAV^$԰+7'c,Ӎկvdϱ@wk }Bivj8v ?LRu|Sຟy7z[I| h`o? :1ڹ9y0oG~e8OuVz i}فcy02Ư.c+qxEO4zn=H{Z=7Yyҁ:u*p$K^Xw xɓh uh{ wxp\y85O%Kޣwܨ%1*z}cA9=wPi>IOy臐hoWoRk@iۭٞ]]:woi mo&&LH=H]+U^gNz?3H5g@w2χ֑9}23vHZ.+>W#b'>w}S@Ӈub E݌nSԙ%|1pȢ3 ܳr*]X;bB6'M'5s9V:nGvbG\tr1PhͯnczpWз7Mͣ'? 3!Z>6JDw3s)F:ڗ,.b}j@S߫@սpM-*=+g{v{}ӷ9c_<:{^hB䗀s Ożۂymt w\5E7 4ʫ//U[9 _ojbҞP߀n G} ZWk]1J鈃Xd3{ roFgy43VFƺw)w&~_U ,??f8>d#n?،w]QAgozW?搚^:fu;7o[g4wvr3 -2y@$ oN1!Oݯ-\8 ?&y}v`w5Og%(xOFߜr8 vkV{~VJt<7Y#jn{cy˒ܜN:=2 sPEVC[썁NM֡٥ޕ'<~=~Gq 7f<ڜf`ƺƾe "MO@E>T ;;GzR5SB:*J|;0O&uf'YSOrǝ+\.n^A/'d?G=vx3n#ͥF@ϗwG #;<.4}ഠ&0ಫk=cϴ,,@z=zew# i<)o[U2 Ommh{ \~GЮE[`*/hA0do[\{?jKէ^U۵`/aJnK]ߖ~_ڇq}6_b3ݕ5oܯ&`gU]{y'{^NoPqQR&t:=}:%?$gpgh*ƍM$Y]V)[]op!K_Xq';SŻ/Z/}t4;Kk3rWmW}agQCX@HnIb LіvN^DwK|ic^ۙәc{>1miuV /[)a?PajVAf{,;w|PW&mliٺ|a 1к+<ߊ[@ڡg)8)b?U0H=o1ʚ:FYCs [OkagZ|Z6 \ wGg}K׎Omz'*>Y~/ȁmyZ% 8r]-j4 ?^p1{iN(+WM 58qXv?Ů2{9 e-_ Ϗَh_iӮ7А8E@H xh`%_(2a;8Yb9;Qxt/jWZb?͚,k8L H@h x(f`hf-xv`koY{dg||gPg YlG Օ3|m/UZߩgt+@G$]3s` hy* Z@j`7. 0~/x. @_@۔x$}J]44~XdowB5lܶ|T^,1K9.`ӎ-5CNYtz#1㾏r| IDATC P-RaO0PU;N9w(SuN;fg$@i0bj*X!c*,' <ۖw/X?8^fDZ{_qVy+=*@Z>OLJ<"<7G%`\hV=esc@΀6g߃)LѲ/fh?!q@qc_H1N%u6.ģ߿o߻; #F@J1gY ,%7tb oFAr_<V3_YN /mKɀ} `+ #Z@sC`@ Lz lSǴ°Ivto?!8x>A";%(&p/g^á@<N@hO@dN@hO@dN@hO@dN@hO@dN@h ] {_?0["V –~#^ۃm L3 u@1PVÅ5}or3VlΠd)l2{N=W +jG <⾗]  p%ހbZѲ`YOL'?zMs @`!f pn*XH@,8/ AjfeG3#zr&<>ܑw;x@LoFSDa(@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J@5CEX5J?^kցIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/disable-modifier-expected.png0000644000175000017500000001642011640436733030326 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݽndy)Fa20Й;] W``1 M%ЙUCaV@`.J l#@vUPa5 (> @ mޜE,:P11.n罟.pu}o0[.G (P%J @  P"J!@@@0T# @D@(YC `F"@@(Q@PDPd  (% DPC5J@5(j$.y=H   @ H  <H*ol(~#|'@d6&@'Q 0Ðv@Oi8I9LA   ^@w1 $P B6" (u*^#@@ d# @`X5$P B6" (u*^#@@ d# @`X5$P B6" (u*^#@@ d# @`X5$P B6"X\ R@5 (Da/K _ @ HQ(#}˭\u).n^v x#@&I.l<lPdN x#@&I&P66 (M2^'@@p<` @`$u ={8'G@ @hi3#j tXG%V@dPٟ V@dPٟ V@6m(@@TDPdIgo:8E#\]G<5 F+ڋx3BPe (h 2DP5 @!e&%j (B( M@DK<(PP)-SmhY@IW o  E@dIڜx%^Y@IW o  E@dIڜx%^Y@F!,98 @h hnL`6lr@a9*W-׀ `~v#@`0JRI 1 0%yz2ډ@:.r @GI @@R4xc @@x T@$ s }~۹BPe (h *cM   V@e" (kZ/ @   V@e" (kZ/ @   V@eI ,O^]įk&<6qZ (V!@` `@+I @`00X`KV }!ps0m#ȑ)  "VH@ GΦ$@X!r(9+ ` )s:H ,2ovR ( |,Zd5 Џ' '!@ `Vn7#@@? , (Y݌(~p*fv3#'=n~hEw-q=H!  *VMB ĔL+(6v!@p `m@G @`80\dL6 ]&o<=]C `b` @Wk2E'@@ d (mO^@8}r (\yO %rmZ< (' _ @ ȕi  $(|A\ Wަ%@xNn:=c .  W 0rp .f'wC!)L 7OjK*\ܶӎ!) 0  Ї#'p3(y P( ,#@@4-Q @P@BYFh Z!@@(@DCBPe (h 2DP5 @!e+Ǖ@H ` @CL[8=ٵuPYmn j"@eDPQ<ٛ5N +Flf[و@Oi8 7w/%   0"&$@@{ԎB@ C @hojG !!  ^@7#PCh/ڛڑC(!brHPMH!19$ (v$@ `@{S; @`0DLI i5*p \"@@(s@Oh (~q2{ \]^o#d}[ T@tc @`j0  Щ4"@ `ja @Si0ER}GݘPwwM@ލ l{r%M@F @`<0^fNL& M|!/ .@8PP]PV+o @I@{6'#@`+?[)1΢) lX\ouvWWB C ÝA YPځ {{0lt=Z( @ `:9¿#!OCc'cgwt|'~hFt#?#xPxO0ԹG};+yj`}œ& Ks̩&V?1p@ȧ؏6+O8?O}' |q0u;A6k/v0 (m:5XQ #@Q2曻f#/Q}>Հ%ٵuM@F :?]T(c 6.(pß>,} }>:ޞ?&ygѿ nU Y48Ͷ Dow ] VߞGPGw]7]~d;ܞ@1n_}ؾ \%Љ: 1:g}YlVu*: Ʊv|۳/߿ZW} (~qw;߸$|Գ A P' jPa4@#Di (:/  F@ Pu^V @ A P'꼬&@@&J @N@yYM0 L!@@a@( B:Pe5(0Qu jPa4@#Di (:/  F@ Pu^V @ A P'꼬&@@&J @N@yYM0 L!@@a@( B:Pe5(0Qu jPa4@#Di (:/  FN/I IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example016-expected.png0000644000175000017500000002502711664235356027020 0ustar chrysnchrysnPNG  IHDR{C IDATx?}y0qc P!iVU Ni@pn@ SHI*A%H,8!iĐJۤ q0c!\lFsϟsfy-4ܙg>3sߏ} @<@~HX @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ o.]t3>n aM3Mo52\< BSBWHtkHlp<|vL8_ r%! % p v.]..w_R 8$+z5!pܯqnȬ|ݥ~W~T/բе*?_߼5_0XB[rG$RgL|H05." iYX*~`JCUZ(/K +Ѭ3/xRK ϞT EF`@T7 dqe*J=H_Ij) m~H`r2weŋ W<h/rME:ЎH HzV^8RE?C=Yxr$ao/S TRyHnSO&S#POb=H:5MY#FVD" E`v3E [N.) (m7 #gRLih_LHſ9R냩=>}(IhOD4O%P?0`Jxz`џ&LihW$P'o_:LF#Rz93ir v1͡EO3^.8( Qx)FΉ>Qz[vԁzUc:k^z,S`JC{74~d$ 9(SOU,d=ދ,~Jr?z ~ 2Y;.+4;1@S~6++5 m .Y.Z%SqWܬр,id _^ +A խr?0daY YvR6'Ӻ㹣c 5wir.=}QGрb]DFO=>E4VNQ.0gNj Fiakcjdj||x! Zş]ʕsM?\yJ -/5"r㠻gwc7޽w{I qKF*+ow<@Zʖ\w>7O뛿ӗO<"Rb038+HE_BL*(?+ܧ#P2iaGtֆ4-e}—oK!vh@"V8hZtvz<1'ܖ,+B^ pJ=-ώ;9$To3=zu-~SjXdB$ d|L]iھ3b+wPr&/K{:(Yz=Rw)M?>4Ewk3cTn%xlsMhJ/; ~N]4RſU  OF ri5yH%تi[)Ԯ$\y饺zqf{{ƿj1ϧ@b)[_= pzk]-.ek^G?wxIR=$;d x).a؛ՀbP;7{/)\3`}O^ Я˟e;%YV4rT;OB'4hgo"] YKa4 J 2U洚&mPLiO34}Y~x_U 8J~}LcI{}G@S#j/l}ːO0FOv@?>fYM NnweU.9ϳο>L?ݦwo1_V k%ȇ*v縎4a3f[яޣ>C2tz4+u9#l-?b3 (gҞΕ/w8Un^v!H!JknӁSkyi(볐T} px>]r]#%#sKE&=F RDv45Jp㎱hfc)XC!-\sidkkPgvq@:)g'boKI[ԹRڽݨ<]/7P7y$2 J 8%XȤƕ3oihi@8J2 w`#S48pEs3!!`Xr΅{e^v̳5pE 8 GK 2FhJ/ o!0%Х(AFЈOeq s1ody6/ ׷>8s^sU%pX|t_lRF窽쨩$T]\٬(r]N`xD )9 "5:WFg9nsE7/ _NKep0҆Qѹjf3OQ)EO|/6=!=%(WE?;}NW>*߸{$Kr r޴'ȣ2 CM1`z!Ui *!HqL r2Ӧ9 zx%Ps6x1JP'w+!-} ÇOH?EfiHnUWۅqρHӝ/ Ц U7LqeS}2&< ^o/y^px`3 xy,h1.%,yHJL-~L:=Rˤ:fԙ*B0W,.6{՚<X} 0Eњ(rK饔,G~Z%P'̞xP6,ϧN{H?7Wn{9!POb '$(dn>~ls`?w*$5hH_U<*%ρKk Z9IkpaCs@9'=)n7>/{_ݟ#HÜ}<Ļ}܌MZ0f7n'GuH@,m+jgɅU0_"/鰇9ŀ]# zx=:}S2p0  E'sw91yro;~>v\"} 8Nr5^8^}+ca6hh1+t.'VOLx6?O=zdJmZBe_~Y^׋>F MEቍ**.2@Q(N@r,- I _Pn1TZ̭?[XsO|uzp&"'@6 w:K/o-ӥ19#Ozt:@}Jy@!`4W9rZo}f5ñ"HGgI_ԧYu6ETmP-˯ r=`1 p(#M`l'7dT'=yU&V>z@REv6*izm !p=CYλO' L0&`8B!] ۅpL< qa8hrХWvfopg(׀S5GCKxO %mЉ g*@/B 6#v !]ȍ/[--Kzsπ _:w)/WGi۩^:|`kTFֳs6j"p.p.o"p&/G`p`_^˛?.٩fԾXM|vƵ&@=PAjp)cG!&`@`? F]3;) n)z@\ <*z~Du$%pz<t(i5M^Un ʼ?x[BjO_ ;QS?-,D,$@# K6N$f2QRջ~)W5W6bs=[Mmf=\l@Mhpdp7nOQ3ts88yJꟓfQh +>e8+8#7YbgxR" B@_HoJ&TMTU,?O?}&2v+A]-"ӟ8sInJ{fv}M$p|2 gRw$,U1䭷Z 8ٗ`wF#0ܛ , M7B7G!zƞMͽOq,&0 1{.4L;kG]"tC4;d 4yC`0R}O<:+v0C ɕ"ofqgeOK㈖7mFpeL|4*oP+m *5K_즁E:+E0.!|oݔ4PO[s4&L ݰTf%dkUUu"X6?+ɷ?=۳jWg׾HjfC V l̉j.=e%`ZM󟭫jO8ٚUS# 6@8j?G<| o*t4?(n Wq(l-BLSJy'-goMO;!p0(@5cP/ ;7L9(v%4M]stU4@OTw\_s(p.>P<pS{u( W@U'd`qv{!5`͆`A}PPj@9C?S7JjLikү{e;.ۆ,ku,PaQ)f IQWӉqSg0y1{Ftw?j_SO^6'Ow"h[&!ȸ:&@/-,ffSñUUVwRW#!acP ^/SLZZdKOF@鯆þ Gz_|n9~?H¼HWP/ܴK G@ǶGzD19|"gY'޻_իJ/p}{p/BϾձ{& B<80|*PC|ykq f-c k+p6]|FF!v7oY ~ *P\NNjG>8SJuy~f_C IDAT} 3To*=:Cz[$>- x g9e N<#pfWe}>nF!oNRIޗOT-K`4 A'z4Hp)~#0G@韣Zy~ S_گNA*fMihL@9{ޤܰ'H`8lJ(pMitW?ߡG]vsghxpC8謥`g™dFTV3ïd=(4#7%N[7gצWW|]2[B:cob:; (L@ߌ̀V ),Z]XCAu 1Q <2qտWV$й$t4Oo8[+Sү ~%Д) rr,Yj@;LV  p_s !vf3 ]fP' G민popp#L[i;ƿ MindK_liS/n6+m@ѥKzj+JNFLop/>ML~ِ +7u;}p#; ^v 6J_)sh+p&`am9G 1ɞ ?2r4`@ߒd}q4M)jvNTjIf{v|t)r POɳI:&RnrTyݦ3<5?E & @@&K`S/)-ҋ﮿t&@xVRWKPdXӀHJrՍ|A+JJP! [$Y,."0,0G%_S3 &@q0WUgO2 EvxyS?Y[@[| l!! 0C AX}W:Q?Jx^pP~qPFQW< [ BkG_4CMlDw{$q07 @v%V`AJ,8O| m܍o% p!;g(emDo;di:J:Nz!pP4 X/& {$0R韣M)i@iS;MhARce$ HA,)V(Og?*o '`P9E1ˈy Uat \{@WYn+t̃@->ZV`.<x@RBAJ8g gh>(]i*1-u |p/e{tN\VJ+T'S@xÿ́uc? m&@ZAJKK/AAyWhҿ!A"0^2O<RK?8>_V7#S@ _*GP9+}o!p*p*x2o (䘛MM||ۏD [m_. S@@?:m+܊w@G~Ģ֓ $ 3pdq$1.j@-,@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍kJM@` A 6 @@ (4F5%@&^ @@   xa#@ A/l@X @P h⅍?=2]IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/intersection_for-tests-expected.png0000644000175000017500000001476211640436733031652 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx=kZ&~$j` boL'TP41DL4DP LP`&"")Kjj[u:]}^>缹3 @  = @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ  e~xQPr==x/?!743[HgoGOc 7;Vg4>>Y$[@EaYO?>w}*_ .x3[-i[z[@"PUW?]H<5 (Fc/?/N)NH_%<~O=>Ed dX`w# P@E %){~_շO&-72+~? pY@\hΏUdfїP/O x+@Hͻ/.M pY/xtMPң{p?ӷY@U\MěE^>CT TqXP+C\'Ə?ד'Ml FN͏~oW4 { <4W~N$5ЄG gpzS@\_婞?t ڡPQ{耛!6rvcKz{OP/To~n>&pfpt?c}vx Y@9},_J!tloKPR$M'C `7_>&pY@\hwwiV7VWcPk] 0./@?Mc xV@<'<(|@Y,OJt(۸J (Gd ϟ~ 5_Gv L8L@F^R:o'^riM  @ +-io[GD DaX:w (l{M;_k (T88Sv9Do9'!PGSt@W^gw=r=POH|T?w<=pF8Tˇ>'#/G|@W$p&ߺs #~k.~o(/gϜ. ܿ-xWE_dd!N%|[\/#^ݳ'5K3E@Ӱ"+qx/ܪ(w@v^Ê)PYh'p_ <_N@,M"@@Ze  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T /SӔ:IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/square-tests-expected.png0000644000175000017500000002005511640436733027566 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݱ$ǕPXKK%@s55 5֣+r&YӡȈGx=;=Ç_??"d @ @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W67k_n>p?|5@ 8QQV O,cWu\`5T9C T[ j` ; LNwݵ́h|/˃?$)ҿ{q?xo(P,FD],.x˫ iON_YSt' k7*`7Ǻ/ [S~Vχ `W@v:-0ҟ7}{(z,O'~ѠE|Ϡ~_Y4~=>V~K<&po/!a۷7K\~ 樴hG'|bs- 65A5:z,:jhGqߣ`~ଽ_j~u Kax/}t FG@G'.{d`[/c4KP@կ>N_OAK^ktXtԬҿGIK/A{" E_@_jc,'0% :Z FG@Gj6v'3'bݧ?ֽW Z@`W] \Y\#=xˋ 톩p"! bw3e<# 8x0V5 e]@Np$TwLu@` \<ƒ:W#' ߼3e0<# 8x=HBy𠎀.x˛(aH͏L@n$8w/4c ?`@hy%N]<܅[M@owM(;&qv޿XDIEZ=d07}" ݡìyҿ l^ߣO8J7`,z{՟NIEZ=p0sqn[om}&`O .! C){-œ 69d@;{ϏSԒ`' @'{_7J\L@oh !m_O\xA`Sz=ݹ) .'ˮqTh??cVU[ƒ@C_$F/[w,GQ:8vwxz__zP =iY@TΎ{չ;7u&jPSe;W ȗKը] ?|ۚKuˁ!زUAD>z!w~9b9L$(^oݲבx`jyr6c`?+G׊x/º|i꿞"ό$fw{^`m`7нZ~Iԅut B`_g.'WewЫ l2don7[@e GLy VmoE10/ Y7XL|QjBSk4di d@hRr7ۧ^0+kb`Z.&/_(͟J?4.Ex6G-P]2鳗o l2઱b',$0@h\).z@t\hbc_wG 4=c ĀO`/1`i8X Ǒb޿`O)`{ ]ǀ`^5r{o"bhgS% nd$A7V3`10a4^f /!;c`V󖇍ĀII[G'zyY1|w:?۞$hKC~fPxbѽ|DWBu2e@{7_Y[?# ^Y`Nm}.U4dҫD٠-1`ى:OK`^? H{OpTǧXb(}KC~$G層y+`VGnJMi2IpR.1pN:v+V}`OMEEO4dأ$NwY?W5-Eӧs88L@F  жh?NGa'' 8K@%8Y ,ʏƜ8_ ,w" Zs @ rhE@ @@eP ЊhA2 @J'ςmw|= y>jQP5sxUʹA뭼C ک_o啋W~v|?W|ɶtz˟OgW 1QK# lT@4ژVQYUŀ֬0m%_~bXx@d~qc~ϓVS XQw|bUشm=APw͋@wI@>k$>˩h8zcJu@]oW[h,vhxbqZ@VNpR`Z.~ cߡ_ޢ+Ilߌe ̾YwV}K=b2WjU@ZV2jz7_Նy).IpWONRD;ޏS[w8Vɮ`WNovOlK/ >"V#j^*/"`^FJ A 8.6a?^4uCW`u+xo 8.K Hi5<&05ԭ axH`Lp[j&:x ?v9ob?M #`]+G۫DG Xtk Dᭀ`@xӝ XOu'Hv[{٦<Y`[gƭտހ@ة X;_Pw㏿#* haVr]@G~oz&*ol&. T?1@ ]@TGn*-q>[b3\Pyn r\1 /VIGj *Eh&@@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu / G &@ ^@ďR@jM@ Ϋx?HW7 ~ * R;n@ @ U@v^ @@H #Tyu /*Uc>IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/background-modifier-expected.png0000644000175000017500000004260512076022157031041 0ustar chrysnchrysnPNG  IHDR{C@IDATxkubXb)˧H˖L9BDZHNcˉW*ʗT;v*bTd[;N*J0ǶbI7  A ,v7n;333uk1}/ο3ln 5&b@@@(`O! |  0Ў>Jhl@@% i6  @4g@ x @3@`v<͆  0P@;fC@ @(`O! |  0Ў>Jhl@@% i6  @4g@ x @3@`v<͆  0P@;fC@ @(`O! |  0Ў>Jhl@@% i6  @4g@ hiv_O;w.=yvv~9uaa9oAe.۷L)mllU}ҥKOŕ!<=v͏>O#vT@ N@ҦWmVO@SHTÇbr_ v pV@@Z  @u@]!ÝZ!Nh s9s (/v{"`N! @4g"8l@6@ a Pb@ /  e wa@# "PMTS@O;f̴W95C% %`@ }MOGC@@jQ@@nx G!V ;wC$ ]ڼ<@w ;< PP !!W 49*xlaa8 Pb@ /  % EG`\wŻ~;bF䈜O?)N^^l~ʷ>{v,-ufsXSSŎWnl`UݸX~hϞ˛ӻwS^փ]#a.vڶb#PGl8#k;nʊ˱*˱*]vj][y,[>ў/rf+NX%z big~G@$a\" D `x?3@zir\M}]??/߱cmښN4$%[VKֱ.?o*UUYWS)? ۻOgbQHa'Ś B;&dE«֩Jl H($j ȩ,..JN^0 & ~17j$j@VS`qL) dA0 Lݗ6L'Es?#kj_Ֆ% *9*HZ2/ ֤;sa,<>rb-ܤR9rOhD-VXBaр<]ί[y3L΂k*˩T8qq<=+W+`wY٩%5,\$:´B2$؊,\9Vr?7 r ! A$O{y# VoU0KxJDd[cpqKHαh@4PV,wy> 74L0=>WJ:o=V3b<ѹfc? kr(EuPj?d.7^MoN~T`-!#]$`_$' O wg[wrJ\K[sqI?^IJ%u/8@nw[6szH+ʴd>fCN4{.o휣.A_ מnD޶l~)iX9?_=?8sz).z@Y+ ̀doLͿܐGm ݚY@z֡SQc ,ggCCQb &ȥ*` fu5@ DL=;Fz֡诒RJ(V8 H *j5߼WB4 X:t92:/Z镟uKO~?#'t孧TWm9__[+ml^8~wO4>rt3v2OG7ic_[c=XO}H7Wu$o@~3)3u֐UPiPB$қc7]9i5z zUu`m8Ug?8ꓺi7]K9fɦ.h诊n=Ϗ)_ڇw?B{ik}K.3RefM>ͯ~vq@p[-k>Zq3G#,2:$ 'E%kq)ȚNb )c221Yg 'wԀ7Ϯ 5o(엮dhz.ҿN-4S@]=;u5k̽_R=)dm{kzD6Cl{-SG @;'Ax/Pe@j4 a9 ȁӛK@I?VofJB_|V⵵$ "3tݝpO\zOHw98** X8 2ڭVuTeCйDs]p_qU7S9PQG*p{Խ:in)Y:`IDv(MuU?)p|WXslGoS?Q{N&<;toK)3.Z'~U#7~% sp+ɐuIkF33{n|_^ā$@deٹSs]fҌPKb#K@w>.>~Z;|J-dEjm9} ':~j_/UE:?mo^ɬgjN̚OX}kQcq⏟~Tr쥩 B#-h@hu62Q R4'RgVj!=B@RoC >dv^/.˟GzA4L7?=TMk8U,D'R橹ds3 ޙ=w$%şFr@}cYk@XvA*_PN0)?YLlIwр an@݄Cד_VeQ7?'LgcۊdA*;$.ѿ_vX[yimSE@]cwLO엷RF #4NE#9Ϗ㥴q$Z$ߩ;lj,zSt7c`҈S&.% /:']'$?N|NtӶ27Mk@;q:44b;Fb둉?YIԀߴ1?`7jkt[ِSٿMI;r"m/]ob{/yJ 57r(;ڠA/0 p|6yN5 MC|=gW!I@!*әt"D7 E;4R5= 2 pp6aNՕ_5?9,u+Aφa*$o^pYa;L@dbsqo+K~A~UwTVEV;LB h3愠gtcR]K ':MteU鶉|=”P6 Qה!.AV$ ƀFv^3OE |0MGKo_U%L(F 0p%aABtPm]{nVCU3 (KDMMЀH>Z>:J51fk*Lk#ҰTg%NTz>:f_&Yr!CnPvGn PvVg+fBԭBMk`X13 hO<*o* mZgu2bŲLZoV4Z;|_KBϔ>EUjlֺ#l N@= H4b?ge̠;'w{v>{싗*ڬ{{ofj,pP3,&鯟17pj6.b^ `3R<p惟('s3/1x/P -c?{})Yku}{=kRVK2dz8y豓@;A ^bp } >1guج裂*7 5 PO|ӿ[V$TX0W*Y ]D7&|H:WKR}Wm$@Go[u-l)#ǶmvD~0r ,ޫ@YI *Ԁ}eackl/FZV pY1j5TL1GFY86Pͬ_HmHci,h uЃ?;q Zsi tܺ4i-@[^( xxk?{ {k 3 [07,wD<;eM$'GW*P:f pʻTyKJgɷ3Fj x?>|P}lCZV!S>ǿNt{ rPR߿wEZ/sǺl T7Iۻ@5og( ΞXtP ɚbfr?X6@YjMėZx(JP(N'61ku 6~y7@l9!`BJU 3ӽM@j*f_/WEjx_ ޞn{m{;?gcWn uxJ]lT,3<#&J9|(Zd"xC?W?n1ڻg&--Je p{zϧO D͚6۠@ k7.N`@clnV2_ǝnHD} Ӻ L)ݕa?ZJ77 p!P PbNw_-e JB("B]u@ͷ7?@ <)S}ѿ#&aNk@[kB@B?ѿ PeP$+P` /ov tK_\}ψuq흼]:u- a08l xe?@t" D+8Tj*E])^Hʍ@8B-f@Z?Eջ@BE [R5_JB)X[DW4/WV:YOqh>|8x_AJ5Ih#|A9ʭ\4@ *VǼy ] Ճ@]uG kǶC7^s@wYo-?s<=3YʩK$q$#l2S~GtĜ;9xIx깋u7_7#C}9-%%0r\+~x6^GO{'bp P>)YYd8]3q?኷ JSh׽kЯiV~ڛ*2 P4HRTJ_c%T SbߵwfʕPNI"8GƝL?p돟}7?T^='^x ,/\ؿE>ZJTCHN`Aȁ;A[pW4Hή]_؈tA6c/@H:=Lni+'j%]E&QPI |aЀ+2(Š9_Nz&wZX >Pgf@9Ilf aoȊ1oCM+l#Ӻ`D啨hSwz; 9w{< /WgZ+Ʀ~@[ܕ(kk8 $BJ=/[նFwSHRS85Ƽpa)IH8"-k@vkM=@ 9qş^7Ajj2:}hI@G~>$֒ɀhh3g~Q's*MC49Fj\ ;SuN=B5u~aLA FJ~LO Oh h & *pԩQ,kNf9-]4)2pqsod`yAqDƑ;U8a i[\,["&OMr:|a|Ly P⬖r$O]WD맆 uyǕlZJI/0eL@B5`> Ċ&>˿,S"D/F Ve晲Myĸk?q?KA}kw|`0 zu}5a؅RyZzϑSwmr󛎹|;Y\MG돭}MD%Xc9N;}bu;[ 7ϼ !m dFQ69@hf@k몘9A]dn#`-~۪6vDRJ #k?   U}Ņҝ>YDÅL;3G 4 \b[ʔhwh68KCyt&ws 1ov Pj%x'l o@\7~'PmSfOhhz^ܗEb~]l p yCM@jdu]~\k$@0VbP7GGc˯5 O|~U{x( כ xRUjȮSFT.TFX@c}7_'HJ+rt) ,"G]y=E+Bik!R>ٟۄdͷ)!H}{@/_d< 8=K]j*Tϴ+gG"LO &H½Rc a b:TnGi\I% mMҞVL6XC5"֋o_{up@@4A;qR(nL?҆& 廫8` yˡ\;m2hN)Hm0lj%6ڗ?^^!yGDroW2PG;s`6{)r6F`Aݦ $ *Ҁ>xi2oyo)@fG?kSgES4zMP?# yT = P>NTZe  `HG. 5?Zq9dٛê~==+= r\}+'ĐB2`vPdy3;J`V3"z:K@庠EO|bvbi(Ӏ$3i L"IA|:B|J 0-8 ٕ iy)|a0C0ZܷV٣4`ܷ( !1?CK6zo^yD13J=Њ4ٙKJMt﵌ZJov=}qXKz@Vpqe'&{7v,~Fѡ Xg xh$lR2 E Lo@. d߅ hF1؃*?6@> ,Z;^aB*y_^9Aܣu  )Z8[~B0ҥ*[Vr;_Z̉ ? 4=!#rNT~ ?AE4)"Ue0#Ut+m~SScT;T BP[J/M_!\uoW>9@=UUZ>m`xzGm=Q>.q?HD 14y20edb WA Rj#x Dck1ԂŨ Td}Yzpk#S%{˸wUC^%.'=.Пݍ{)rO`a~V%WޞJ/]` JFOLY8 3,@hMH*?ѿh&d*Jˀ[9S5Udb$pKAZYi xZ  >SֽL$j* U߸l-V쮩MڴAD=`lקys7a4ʺ%Ԗ7|BL ߙ.pR~M;j@G;_fgF9wWY*5 .VO\+˻ة#O῎:6`h5#^}T,YhL%+BꝨ݅39 SvkkD|@q@;;P^_ހ9!^*P:(Em~-}t4\i((_w͎/kp뻌wPkd ֨Ϗ~_Nէd0Wf[H}R\3>Dύ/5Ӣ%8B:}mЯQpBpDѣPx?dhc{~J Hr;ODtWyf#بA`<Hk<*`~O)1Ȩ7ɡ⾀"pChxo 3"P"!~_[H@fYdH$`_Rt!=3U7奥K9ie@j$ߦǟ4 l<@m MJ I*?'lGQ-i$d  dig)R>ȏ*;Ys"E չ9uI# JvҶuW=  ~?nWQJY$?~bͣΜ/ E E"C6wJ$x{p-HU:W.GtpSRV G/VЀ=fFpR17r@KreїQe{~ftm?u_\XW/C$T(@`aaam-ojGyttB2O&ɦepgFe_ j#ԆE>翠|ޟL *h@QM\w_Z\&d@peÇ}ZainZae뎍/]wI0K},񥢓+^w؇'#[h[ }ɳiw^ '˯_V__s߃׍i @ @<}'Vo+Ux3zwc98Q1G4p n@Ox q-r%P'NK-׫'^w|]?] WH@\ެMS߱&^y3Yu|P~~gBXdh@Va `O_{řtb}WϹsUP5@jYOu~OSJ THLGDq za>>{%H3!@+ةtLߡ_+f V@x1n'oosvdg j!ԂY g(O_77=g(A۶A`% P+oC8 G6R?Dk ȑ*:M%Nw_h OA-`(@?tЉn꒓D.0z@KKKa i@ )I)9&?q{t333q 0 :G, GFmD> .}׾w}[N K%G9@'ts{a a8 h=N{{Ie(@bFH`):Jh6 VzΥi yt ?Sty@vC+h=N{{O}i|CXb#%R8@fB  A@4@fBJ %rSo   ¦*@1@bꍈ}9|R@IDATP CF@= i 5ʴNZH @|Q@ =D)|N l,--W950! @ =@-󆶪^@@T v֊tpI@ԩu@"W5`ffpmvwv@@꓀k ܿ*i-BLP3`Cf kf[@o1 0!P7n"ƚ1_6"&ͱΨ3 b@1#r@r}_7Gzŵ7puu: EBBBi@idHIM7]HVDZ4J@4ĉjB fa?D >0@M5Y`Ƚ_WрdbP | j!T V@2 l80v0%WGB (HpEJ(_=">XrC?7s  R5`W ? 5@jL"f] ci1KO ʏoFwJ@>"vʀ\J m@3$X CDw@:ih.O C w@Wzj~@ Cv3-:Ǚ3gZ?5LA&jZD8' m3F0SIS}vɯ*ޏ-%D58VH$X_}D7@6aS  1@h l  @ @MUb"@A@ @Lz_ 4Hh6UASo   ¦*@1@b | AT@ &@L/$4 D7@aS  1@h l  @ @MUb"@A@ @Lz_ 4Hh6UASo   ¦*@1@b | AT@ &@L/$4 D7@aS  1@h l  @ @MUb"@A;&ߴIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/lwpolyline-closed-expected.png0000644000175000017500000001604311642654340030573 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxAPٕW=dޑ+ =HiG^G+tM6@{R;E˗?> 7  @/ @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc.p ,͞&y (>^^C p8֍?# (ҲpD].!?FNvU@tMƾx߁cj2oЯ7bHHy=ͦPC5f=p@Tr䡟I (L%68 `Fީ `hOClcǫo&06mfP3pP.#"&CG`؀]/@<ލtH V@ : AkࡿF˵<Pt:!{ 0~Tt K]1 ̨=Է6xP}<ŭGpf{f#q|{&~B@+g{j ([jxOd@@K(EL."@`(p7.4^ @` *FW~C 'p-' ~̩6(&/EED LX' K/zvatA:P zܶ37G_\R.(<pw \S޻> ?(pП |>sL f:tfQҰjA ʢ)36} :W (bI`򫁙y(|pSw ^Cn٧(kjq^/֛y<550ᬘDT([tpV]\})nOp%TGi̵>SH sT漋3WS-(+Xv ҮRi@o}]~׋^|oMB 4|\F t W@L}G j##i_ dB >QSQq;D |۰ ( jSGl =5ʔ?SSj >o3+ `( M |$4 `l~X9 w.2Q@TkV M$êfmߡFcc Yd5\)VqL@̷E/kݐ|,e0z;#vJ Y|P nV `87SȖh+F z-An;8,&5p7V;bp o6z $>5P" 4oF@F .BlJP('xI[V|Q Ը XLpmm5p^ <{+/5pF ukvm]E/۽|hM /< 3 R@HnR%(f4PMmK 8[ (6KIF(BmQ 8-PDuۨ51+ & ]5Sn `'HR@ mj`sz `3 ,u5!C[PGx@ <x͛&PyC SsT `8oèũ*T.P@Lm$5 [% 6i]ats`2w|K3 ? \F ` dZ0m =?KP)ITW=.K@d}V |]|Dmf5 >F(c]> @D5>~'20q^ (K (#^?`R (;Pd$5v>6n7*^ LYE[ 񱳵|3,o˧|[J' p"K(pW0)nA7@й5 LQ `a.R@LkP׀(<+j'E2䆆0yNns,?fj@su 0FNrP-;O@gNo׀x(ϛq (󎅕Pg5R9Pqj@;P3qmj@x̴T.rݞk^o߽| ૄ"e~èOn& I8@K^FQ rPNn5չ!8χs2|8?;+>]|/(GP"yo15 #T;.z$w (G^]@̞W `b `! Q _vT'ꬭtP⦃(AրxչEn|hA /.~:ʏk,M=Sqĸ9 `#P-cn ["ҝPSjj_x)^jj`lMxPf (lݹ蚌} {#@@$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 E@tI> P,-G. KAbP n9tP] (bp @蒄} @X@[]@$ r"$a(P#@@% @@((.I@1 EiIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/minkowski3-tests-expected.png0000644000175000017500000002116411640436733030366 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExAIDATxݽey; Q(6BE]DE)-TDUq8Tp*\0F B.LxRfyϙ:c}{X.{W @@>'bx $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 Tɤu+@[_U.?3)pn#3* LTnUS /ru%N/FE@U!>|T)PO/a(?|TY)"K8*O><+qv_Oȃ8=%ufg2gh|hA`E0c;Exc/DNC฀EM3"0u:3gg<-x@uTnpG0ʞ X-,(ه  wi*`*~bpL ?M`mv\!P3S"RY tp>\h_!%{ Y~s7}᳟/p[6޾/$d6dTGwO=qE-#?(X2 } v[7'CC`ba0-hO{&oq`~%?] P'v& O.pvpMGx'#?n \_&vu.C> su=ʼn pS+ ⟨? $Ƀ~$zVy?Ʊ `{0A߳Ć8㩅".hEG1[quw=ʼn pS3 cz[` xB~_)Nl8X âlg=6㵅~M7G&ȼ@\9 n<ڭ-ǟw>|4yW0D>#,#V광Я;; k})֒oڹD Ðr~ӏ?u߹Ǟ;ox X} O)}ne% tkC@Dž/25orbPL@~ 9 j12PQ܇׈jnS mZh'$2i@[{ hVvg>hP?!`@Ms ?z?%m{-M;`$b'`~%VUIIPE? b?~nP@4IJ0N{J( @~,Q$ 2*YWEgv> $ܭ-0 J$Aڀc XQ4̈yw6vI0I I$@ 0Y'[_{oNt7nPx"BiS@׳UWw_>[7VYv{ j? yg_/<3 ]^e݃+鲫a{`BL:/p_N|<A6rU[«4!J!@@*C% L@ id4( l~?nY :@V^Fe` ЈH0VhD@4i'(Lsfg9$ܡr"{fʹR!' yٛ%#PC|r֮D~x8;V p=`M?V3gV,h=%=*ܓ?vց8y3o~Z.D, rL&`鿐R\,p`C"`韤Q`F'!@` `ZOg#@`K`U$@`2Kd{'{$ G OǩHGi{BLgL*xg+EC_7`0F˾ ,hKnqú? g?F-T`?lݿw R9'0Ga[םD`]W'03o]{eNyJKr#P@߷ PC}_?g - F [σ7xJF,2u{H|t1D*>y0Qt hf@2T tagyKgvtU׫Cr֮4JſԨLX0VhD@4He @`+f4" idY,dY;n SF`Ck ]+ XK@%XY@܀/`MJ"Ф \x-Lgv==\>U΀}I@`\Ǟws10 BIk} xglO`iDn|ݗwt*֘'ϷG0_=N <_3`:w>b S]k1 vУ}yί x=d1 уnIΔ7 uo <5o>O^k闖R9=QٺD {e碾%0o~wxL`_ i]wW1 =փˉ WЄF(岑m1 r^}ҿz @3gznvҺsƋ4yi;c tWrC=Hb1o~fj `?61jWۚ&8gd5 uC~3 ~9QS_{cC%{y9RP5[[qw_捁~l{:޶vU@uqyc釿DX/ /v:@=J`^ ӱ1`e袿ݕ~H݃j{ ,"p":yNӽp:_ڌvA Ǟ~?}셵v_w!u8 4'rTwDlթ_[j[F)G8*ZTg3۹X>`6 ծ}f c@}Amu+`sHm1 V а?T?DQ ,U]/_Ouw~~?wK4)PԶorvX~8 hX`~Uk1P@`o?uX( L1`m P?q/1)&PFB`&u+&Xۈ6iN(x@3FW6$X9:Ѝ@uA AQXtuO +@/PKl%z7N@Oa@B'yU )`up#7`XֲnC_xH.G@ 1l*Y/%pɺ%v#Ф@uw[%zlb`FZMHyɃKK@@sar+`/"@`F;,L_'!@vSr%s 4:nsOe'@`@HV􏝔'@`1F)|e-CCZ9zE^6Y Yt Kso,;˗/5l \g pP qlӧ~/,j@  O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 .@O_ҝ\p{?ɏ ^{N}a?ܹc#`wwwoo|˦&gw7333۷?ק~~^:/+W 6GwyԋEqEV%0;;+$ ?"VIА| aK$ɚHoW"K@QHb=C I_U,HKpv2r.WgttTE 4W& dhLDE N8!aQ'OǿxH\mJ@;vȀf0 $^#ſK)MBǏ_b|`=I @0ȁ29 u>#D5$͉ H?CY؄wmGrg!>rW|\# k@U!x_RMkY E!އ*f!` 97D4s 7+<&Yŀ\#rرc|rN*"@3 L@4{ ޑKz~l@.9 嘣~-Dd@'0esσ\jhpK@ڎ k:ц5—lcJ -ݐ% =`P -W 0pr;H#w= 7eK@~k bXUAvɜd9zNj@X2fYmC@Ve^~$,E)Ś5k~$|ԁ{q#!2MJ@OۚO>ӄ%  ]u= ]yPD0{0<66j*0b!(Qe۶=%W,orQ' 4^e17CFțE_#7lUz 80 sXI@2k0]7$'QNHX"E$#8g2\9HD*_9]s䔯\o1.+/ (gBs 96mX?Y .2w.sUhy2b "f.Z6C{=.=Zx=kk|@"sbY/щ׊m`J  .Z6W +fWCY ~d&Sൡ Ibd)sИ$ \}eZ9x Z+엗% q2d/L Xrv ĉ[<|KYN" -jb 뚏$E2t3v-QnA_B@\|L &LD5,f5 kNM5@rȀ|ѽ\2!r_}} $ fQUg}AO;4)LK@s{B:}sx({`E_ko@¡t.@@ uGGϔI8zud@95uR9?2=۟w$}זI \$h5& ~_e_wuz/1r/%# ӗBHȵkתȷV7%k;Z^ o8zYٔ.숗dzm577_PX)c$U ɄȉdԒ%eJļ_($8h4H_/'u+5#|]7 w˷ `޽攀~I)kAF4 $A9s&m ߧDtFܱxj}KoI)%,\HЀR.inf# ;z-o8ApL4rxs){uzmqsduSW$ME 00 $h-J)b+mW-W充ܹb2_|tYۑ͊3M&ŪgMETĸ~7a HR4y2;ۈ܋D_b;ֽ`\ƛ4sU#yM^Md4@~y-oR @2kLxs0_?avU_o]8(r%H#dB*LR`X\fZי@  &-oܴ=7s.-Wd}])2Ѐ-gMЪ"_Cŋ߱cFݱyZ:idUX|-̷dƄY= +̌4 0dMЪ^y w|Oٱ,޾> ~z{{_f /_@4@\AL l(\Nj6珪; HRy~[zR@ 2MQ[>}^>^expFr/:_Xjzz t9ì 1EH2{4/n CFEd螂tm㚒od+}`.v󬞐v-M*6!Xy"^(?ss+V ՀC,Ą@ giwfg_Ku_ͺ͑#GXW2"aJ^)sQ3rh\>7 /il\h7D6i@FB@L[JnۺtUŎC4|LGh 䍲$BP.{yeI6u~ a}G|CbHYcr7K} ,[nk[< ›\V7:>aЊ;mwL@GǏY)lJ$I#.wT)2i1Gnj/+AMP tNho3r牓˧(9U0vI.z:e ϏO\rE羗:$رYK1KZ4]sdg?{yyb "Y@z_k5',~%4K`cD.XW۫$\)Dʟ8KncCI@po0l{0bXSVHN^?GoHC [h,$. 뗿۸jI\a wghHdxg0oafkYpA~[>yR V864&W}΃bP )G.0+^3urwtqSs?^D($f 0hf."4۝ @z20l?ZyihK t{pl" o[:qRN!?zo+74yAŒ@aRTT S yL(wl$ookFrfLZڕW,eyS*>Zu G^Ѐ9:0o4i|—/4$g6ML$}?I ;PiWcݗ{?RWȋLLQdHE$޼L 7Or֧w|6y~a;ƎgMi ``YoM7ߦc~`A7F]-(s:;ZPW-]&0"{ڬkSx4tPv؜@k6 Js[? 0|_'a9:== t n+>5uV\ZSCe?ZrA[RsqMcj?hHH4@jd95r޿ p|nu0SBb`|OY%gtcMg)UD Î-Ȁũ@_uןH<|1n`Z@^ S/^ ~,.͸r&D$""Ye?}UomRM\mooR' }fFL7*/MZJGȟM E%nnG9}<o J A@0s[T{P6)A3~t& r@9b'ԃ ;{_  oBū*ʮ򤳅zn|68txj ԩejx dE` 4H@BP4Z]?]cz\O|C[ڕZXrRi9?k|@oLե'[r[K]| *XEm_1 @</ oL|¶6s WJ|] ?og5]?Q)"~S{#,+-^y_%-E_۶Xmh]FpW6]6O@ H'W!a%|\4}- JP_V1>gk᭙|   [~Wb vRy ~-d'D>igbp4%G;f@'aؓ=z9" Vwb =˛ﯣ7O Y$uZ?샡:^ꪗxJ;>Vuv:ͣU@|}vw;6JwÇK@AyDc{A8i(YܿɖiJ{؟K=zLpng>mʏ FpCoo\~Vwww1ug<& ΛK(8(+\J஻l*_jUI ) |C~%@rhT@  %@! FK@P"  @rhT@  %Ҵ՗ K$g Nw}%p}:JHԉ4L ĀF@y @ @ hd @HO`u`o&-- C0(@- C0($Iફ^I8ʂR "Z1kuS1#4Ǐ%8k:@9@s @Y tzz:I S5 lVNh-wo:'''M&,cǏfWgg0~||\6;:ڃcGWcC+%mƽrx6ٹJ&@%,X6][sC&Mjg 3gNF%Yz|mõ7d14A])5 @2c6ct{{*;p6 IDATYY&d: MhyMߒj2O-/7N*to֭K!'KT]8bD EșSiS5]J g|1sMA|UrHȡQC]Pl H8)ͅӋ333#WYđ[ ky *Ad`tsxEqON.`/nvvu/N<)#Ithhv"D;;:Jni[XмNbe, 3&Нɹ9W7'J"g$hk;Xx3#0pfB&6mܺ)67KCE@Kn6ܘؑroz%d@[̆Mk͠B 9b .[OnT$YCJ.Xav4F{FDzwQc -E*@q"lmJ3chygTX~#XW o=k_:G-g\IMBWIjqhSms^3Vcu-1$6T&\%\nfd PL{-5{_\OX|b]y1!pj.,!Ԫ. "l=@Sb_ޗxrV2}s#u/\~x3Jfe2e!uO<&s5() {M ּӅ{|[9Fc, )IPRm)2I-h`Rz9O#}v'F&&^|5G" o/[0 16_W>RH @~WtbԚHqQ=9|'p wϚ5kL8͟X-r]*P48rˣwɇ?\|vCQ@Kog'48vtVj]HE] ^z[n9T6D"`l\b^jnH~ӏ~عsn`kZ, VO|ƺ)I zq7w*dn1=-m:1hYcٹaiDqS3IDEukC"j2$;ݵ2 iZd&Y $V\W2cmmSN:zfgO> H~Jh@ >BW5o6 \Hׅn}B...o*ZuK"T^xkc2PR@ huXkWw>;9WTr 7ygko޿/X9T2&b&UjWjK1΢*# Kvl[O.cДq9i _^XR@ŠJĢN֬:;>f{k>Xs3PпhE?&4 BKOДԪ4 5][6 [?Q׿wMbqe 4Ùf*Y쌼y's)L>NJw_iD2!}47 L6]Q,p[)E#6N  0}t+ˇ~hSj<ޙP39Y|k|h(e'(^vkEv#[gPնT@52u3ro6Щŧl1L{n߻ɂ+/l8thsfH2|C~ Zf-Vk^xڕ۷/mlpС OHT$q54ji{5 (k 0qtl}}IҀk9*H=7]/276UTJ:ІqS X&5k^()344n@ol2M&7oI㏟iv gd>B|>}O o<n]y`ײTpvA%Fz ;*׾-]1ƎAn-#3-_`i>R|` q'V7' #?"(uQ(e< We@Q'|=B,ݡڛx|ڛAOCb@k$@dlh,KLJdx-"5MiӵRH4^XSP\U@[oOl~&<2rfn,{ꚯbT)RC͍ Vnc W0eF=)%:؛nVE ϋ0TԆPzC@blf|,1:E!P`i Hsfs앻Sj0b2G/_1 qh8vQmĒ@婷i%g_S`_9*Opn2hbI@6o (+jiy"K@+$Ykي T!R4d@A%=Gx4@74YuJo.9I4RXm1H6H?Uno%Ht|7%ikw]rRR @K7u?PPJZQxzV..Œq)xGD!2}<~dT$I@c#[Bodo!%@ 6fё19)*$W}*%SJ`(N ޔTCIM6+n@GǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {?ӕ0IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/highlight-modifier-expected.png0000644000175000017500000003353412076022157030672 0ustar chrysnchrysnPNG  IHDR{C7#IDATx y%/_IJ"dTRTyFn  i&6Bԍ" 5PH-`rQnԍˢ$ѲhS(ʤxsΙ;;;;;;;}3g@H\c@@8 $JH4 @ ( 6 s@D@@  }PO Rщoܝʕ > }PK/~, x j'Z6@`qƇBNKzzF egIw'%0fFE @Zѧπ;B%?c:w|-{[}da4gt\mo7q)F'O`'I"'wxN x̦oiGxRe3yyaWN$brH7~20 1 jHdA#`gWNnF젌 ƨv?}Ё/^~b vD)~ؒe}~] x ]QFמхCW ` MM d_-4`\煏У_LD0H$nf7zxϞdSFO X'p퐾awxȱKOHlT_|iKg~8s~pDW]puYЀ#j$ O\Oߙh/*|flyO 3{y(߿~``~ܻ{AXX"/]@$ 7.N|Tk@H_}߮8ʡܴN'fC2 e3N{`׮=RnⅿZa˧'?axn,qPu>\>Ѐvjk9BI,/OQTdKBD7ǫ@$;;;#ܻ렗mt5 N!{ڕdSd5[pxAƱlXTգB]v sk!4 YJ*cg:o+>ܟ'.EȡS=-kAe#.gqp5iwk2HN)ʮ571h'~Sv>NyiGo2(R@ Q^Qű{ gy- m~^{yIWBVw3 MXZ ԟurEUr=1fwʵ?uV+jagZQw_X~'DޗN @< 0 ~>+ _K! HX ? D~B]q~+Yɱ%keKрsWH޶s#  J%  xg%6yy~QH^s_b[+'5!mЀ n=y_ Pi$S@>[uDߵ!幍F?6#Ǯ ٿlXq3@ " fwAsٮ:'h.g#:4 IQj'(kAQ@!UR{O>mK@b@- I__+2Kpqфro5~rT|Zv䣜ڤy 4@X 03⏊i=%mUB^ ,' Z (덅Y_ _L۬ _4ҕoM;Ѳv?mkmiVtSk@4) (򌬄%ڻ;07j C[n'K>Ӈ]o>3xe_] kwϜ]}OxGž#3jv]k`B!9kZ_7 @Ӷ_yrfR\V͗f&YW-:a!kAڈGPDĉ B /~/4ȲabcռD-idz:U(B z|8M"O.۶"j_ q3T am %8kM^/b>|e>U g0-Q0C&/)*4]=p_8x$HU*q( @@2_RXۿ>JNee(L4OLU/_rj?\ܮ E&Vd52.A‹i_gP1H7rQnԛ$@$}':eV1 h*^ޘ{ՐBͼ/)֍qWߤ:Γ$om?% .O׽U_7FdQ;6?>N5u ?tN)3"o;߄Ȇ Xs>7.sVDQ/KG23PJ=_25tymI\ D@?;ʮ4'bjrr4N1f|z,H 5GQ1p:Y] UN\v2`׆I@5"Ģʒ^/ۿU÷:f nNDϵ?w2|vLO@LTn#A·vr~hoo+v$=oy? ύ< s X2~Os-mrGbm5 o3 |ȷדy'm[voy|ZE;`pMu :>_ѳC}谧9e6IrQ ! %_v/{v|+X+nm6$߭pw4='ntUuiޮk/z=wvЪo@߄^c Fp]OToұvO 羺781: .Xl q6ܴ-wŸv@&_j 6#x2ny+;ڴĆ63p64 6d2 `Ȩϓ&M0;@|hf.Qze0\U 8BArm|N^o@L@\/iZvvV'"2(#I9$m4xtoc%m%Pu:*ϘxβEswk+JX$?wB wA4[RTW_ .U8S+tEܼ'AhnT |p-Wk"X+|vluKΐ AOCkGO#ѭ9}$#r(VD6@w}Aգ>36EcE@EnPS"s`и5@# Ѐu fDp-( 3! :OMojklPd{(U WOߣ>U°+&P}X~GH4 Pm(?#p ddrX7o nf[wyoj7I!@HQ[{lfn&!ZxpSiIPFmc6˩@wXw~Pr!w_vW7vX2ZvΒC"]{b}j_(A2`BAM@~_]ffzSVDs TwQ  &0djjЀ*DmKxH7BRqG\GQgL4@񯚜uhwwް#Sp{~~;nBKWM v e@t{b%P1]M_'@&6C|Jp"JW^?h?sC|Jn xxV p7AY/ND?R 6 DEї\9r@ aBo ڊ])}RBσ"Oϙz*K˧x|H6I?й0hL鿿KylI+2 ,ݲI(Zox=23Hed(@r@Lwӟԥz9I@9=D$? ETUs?ONgXTCkVg^޴dO# / O +%2[N @T3]x{{ so%FQC/K?+$FĹ>Fg%Ą@F r|o>I˲O:q/ .@tmPd@82h._[? e_{PX`e6$D >SiAu?GL  .%ȳ>~<Hlmܠ,O]lpLx%.遨$QP҈;_FT6}׍5"@A.c!Zϵ3ڭb]׆ gڧAJ# >EBP/ 832kCP$g,Q}G'DPP'j,]3f|XyAٟG'g\V9 8fp\IRUѪ|>d~+۶ywUSyA" FX~-g*yߤwM( [yej0Lp/_0&Q.1y&u hSw !gnmD5!mw8>CH3x쩗 ( Gk   7rm a;#@"˝!#m8XH` x#@\w!-rC<#* %"6m| K{r8jAh&|4 #0H =#`  VxAFnQΜSrw>mx/~?e(atzzX{5r .20 V@C{,2j)*!!b< |RS1M9Dƹ\!@ M͔̆H"Gϝ"Jy3/hm0I&uBz??(Xazh΂ON]o0[5_[<qW@4/_ N/쭾kvwMn N$h7v@g@jlDe>@1\ {!C챤' ?Oz2yKTW: iH~h\U[ J⿙. _狖p_dD [ұcYw<(9 Pϐ'ze݋ԯf=98 'g@ռߢ[A09 \1J]W.j>e<@  y_E i20i5!P+z`Ac$d اE'6(°c_S^R  p*@0gc] ~D0 qt"_٧V\St|ROgIc[rIqo&@|hx-/.;$}. (F^5Ʃ_~M`׭ڼpߦPOqYʭ LUE pxc=&~IKt(a@BW2Pgfƫ@bK~ pA=@Uod*s׬b#3C|/_#u7m#wQ@~+82C./!@?\{T?uFkbg*IL ֯-\^~auäy2u\{ye;`cDy_~./7$ QpU+^ke@&cOVz+ Ukc͛Ԯ{ޯFh(:R:D G[ce@WZ_w\\jssioG κ=3ǭwJ4 3H]WM-{ԤmVG0oR[D/O}Hڥp-ݶ^2-WYF3©i.5튩^?i\I~uvxKmѥЀLX>, p~k<@jpXh@4皳[db[ P(k X]ľ)M+^&DH&E X4XqMM5藯_73 > kP5uE/L/A`f8YL &lB [^ Ĺ@3^..i\*@:'MFR+KM~LiKQ&օ$P76m\}HՋjڍ%t;S Ȝ,}6yߤ߄RuA2k"km(̲?e|/ן1ѻfFx?WnzH^#V_Wd 3m +րLob qp \4@}c!k [W)[vXqOKYST@WkLE32wn݌R@7$F5C!ث 8z*Z1hk܍t׺XGh@-_nuhz;OhW,{]ۄ p ,4@|[uG,U(9*~)eo/`%7..>Tw]Ҡ,K[ ؗz-Y\*p@dP+~G1ٿf:b*pꓣkj= /+9KgrL[.߯UKR- tlͳU Ze`CIMz5KKK@liKS*\ԏ@ {#"!FͭBiob@,^YD18 ٙ_2沊X_Kw ?ܱfk=& n  uK7σ.9~=Z|}]iX' M~]((` HυR=l9H^ՂڰvZ>]Ju#׶||י~_k5_i?-$=$i;Z} ˣFww?;~}LfRBϸ`煕;>Q~#1~_6?dh#㩀V< AIّÆ,gVO6LDā]/yiʩnWe>TEA7 AQXz>Q!_Y 1?+-}6/N,48MnrY):OE?Փ_~&ػ^5 $RЀLbϚO񌠤;;Czd@Xho eP,%ZaPUa[ G"_s7}0AA> L&58ʴ*\peXPn}B6z"f ҟDLւt=-vyykYRk4lFhƋ]X;;hcj Aj-į izf[n}"oOmBGהm5G[؃y,߲S]*j>ēG9")m (/i4FeC@)c%lf\Z/Zw/Slsb!%hDhʽJ FZ!~.] ч8`31ضiNpTO6K>'e>$>{D(RAGգ Vڶ™W ]o{gF$2m! 5Y&0s,yet*"O gv<򹜅N,ɹ~3*~~{Mwe#{N\ں'{`b$PH^Sv-ŭenwտ$-f; l#4# 4kamRA % (Eic 1PYCf;0.f_t, 5+T@Į6gn^-Lf$fueɄ] kYhb΄ٶo%~$7Ѕ`~yT$[}j0e`U;C( |_ko/-@[C1{"a^}M4_F;W%P]:m 4Ǖ xʓ}l]~qhRBĀk}YitL w{BH85[~m7o]?PMxb^?0#p6]uMuѝw?@B>_= JzNgd5_R,).-^J/"@5wnNsk#;SQR*Nk 6 [ U>wi@qKfjv_{~0,xݙ>sMA#e2T8虲YYOŽ~ ;j `8ukݸߍs)o%F ٿ\xmj{?A6y].4`)6U~ThgA{}Saab#?MfqàX%pr%[*tb`UT;1 VWAԹL*ivv亂Fϩn@t젃n4o hb=p6{b-lW/ f~)(ew+]q }Kr.*})򛯹m--3 gկ}+fI1ߵK$ i :;<ƩS `o ?vףQ~ P=o^ 5ԙ75>g~T Ip&9e[wy/Xeoߖl>(wk5Ut(Щ-W wC@V 5ީINēLEb]h^ m~=R@ݿ2 d cmX]Gݲo j,AВ0v ّ`} G߯3V;1Q9v2:\$_l, Mt%oyw2v%^j+/K;W?c=o?ތ2}EsoU\@79)9c;>;N\<>VTSHnnj׍,~n5[uhwHzSN┄l[>l:gq`.`~=UQ/-9y 1pAM:?#UO ,q,_f{q_o2 e3ApgipW 9a^{ ,}xaഇf$E@fJS0qT'?`'j~-p>/_Y $ݗÛ*_{Z_USr2_ G iJe_RKũm>o^R`ߵ.K׺N1 K]ibݿtl'N~{^/fE8~=--U?A3v_rk.^~@a`ӿ܎G+8']ywxvֿzڍ]7oj1 W5JWǹE* J1Վ 6Uo㛻b&S"k.^c* wƶ_%z[=_>F0^P"_"x}0z:p Tٱ |/6dr dׅ[:(kZKvn3ox0SL!O^}Seg'A YMr# pi37b"A60g<0Ex'@Yq/>y2?pyW1 k|ݷ} @$Yѿ?|Mq'DBo('J;z#cI@>fk_ hO( o4]΍%vxsLbeb} TDŊ^vq@x2)B@QB $E 9o҉uza#+EGU$)#"&"؉^.'Ӄ 8FCO7g݉~qM `o ˕2IN &Vq߀"}}_5zq<]^s١=ۧsle#RJ`׀~&3 ZTN.s~2puؿ# r;xsw F|He!B bPJWL<45xpUXtBL+ưЃ~,(- ܈o0_"%@\5 [5,1b].żj"0_V*}. IBQ> ?n  Bp)FL4#Ek-UԀ`P'p;_HV5@g@!EoA'2 2+yDH'j^^xi0~ =F?{?nNpgEMO$ccd`!4;Jצ$GR@Rq$ԪD)u pW jo2r l0@"m^Y,݂QV$D|xX'a@2= M`̗ek"|i޴t/)/kBX~zSTYG7fC h$" NWyω@`L,K4j%iA@11qP5ucL.42>{o}5fm!XnxaxIEgnu5$f<_7u|W9&PwV#50N;]d ='?WB80/\jEv.߈Y Cd5Q' GC}t&w& (#1[`_s#2gVj} 8|5 > d@b jȀBA!@ c} 0*pBp]g0V=d`-aWh ! PR@`>D4@Ay@{>2]ԀR@,pU>oqq IJT Ro4p<܀'Xr\Tp!@`T_.NrMџ$c )I"[lhI[߿d[N=AJi6 2@wb\ @rrH[ V.d: O4b^nua4ׇ4.W;7qI/k 3Nѿؙ3$@3gb9x^cޭ ҭHlm=~=L0B  (ډ Hz_u/I ˱AL<ʆ9k4`GW FYJHt8 YҝkJh@s|4@ݡPĎMc6 4e i@$\ Hs;OIvXP@ymq\XO] ꫉Ӵ#" H[.1d$2yL"Z?"f֢p'V!@.E0, 8$.ĝ|H I{ DAM:ݱ]6  I7緈ΨD90N'`T@|x 4'9 ,k] ckW?DyhS$ ʝ;,(#cIKP(cPns j@hZ[Q(H"d F35ڸ(_#@mxQqzVf3?{W xFH@k )~dI(W ⯲ $n~]qxЀ'Ϙ@@xfn3-]+Dt$`&kL`E2\io6$Ga'TEYt h!PB}ߧ} ȁUk*isGU)I@/c4u PYڵ OMyeux p,QQp׀ "rLbEy7[ mEa'@_1"sc=$뱧gTЀM,7y$_JS z ,LX0͏ 8Oy8@vXP % j֒Nv?$JH5EOzEm Ev A+@Ud4ҬuKC $ д$K$ 7@$#` "?ǗHJ$Њln& `\=]&P4~\xJ< `#PSW\ƳB45Bff@F@[NX8#k6ٻ `#@5@jnctR'dv#ASw s@Kq~tSٕYB3 FX<0@j@j@  K^q_1L] Uݿѿxgʴ=- +.@& Z4- @-q@ h?1 b3%J j@sOt!90ܚ%o=NtK7ؔ4$z_z~4UEACI x.P(:@ c@}ǜF@/ݩu[ffuUA@ sS> \ 4$A/p 0 :} @z@P6@S`!  ;`hg3 3!кC^= Wfh@(bx$:lXdJ(0L ?8 0K 8J,*7 `CEVAtFC v,Y.\K?\M.G9@Mл_{WnfjfAG9"@"K`ƴR-;uGk 9'yQ$@(`?] @);[,jY#Z΁S"ED}A :KDhQSRHʚW Zs: ߓ=sA[4x,U:(%N*Gɏ}r+-{/eH8ý~Aw{/ȼ5a}쑧4TQ+ $O$חGur]c콳cSG w4*Fʲ- $ rG* Wf~xϾc) 8F& E2$֯ zkxaR?#C`ps,.-򟍠st` @: 9@1tse8FHw`pM[]P>,U K(1/̈́CXFm~a$`ʒZ$KΦ?A 򟍠~h]W$ iP^@0;0 +oW4=ǟx7-c23@~s\c-{ F7{kU.؉u$f[=3;Jv ŗf0Y}v L^;T>ѯx1Fh.WX-I{_i,z-T} Ÿx+$YCۀ=.7wOѻ^#-ޭ]:jq''8ޏ${[닢@s=?&z!?t vѬ_qF4`.2oiqЀ\V.v%ˣ"6 G~&08\o8";ꪉ fE6۩L~ ;_&{OЀ>?4/? dR C$QC>>v4h@`? 9FӞn@}&ݝv, v6#Ÿ] Ѭh2` 8drh2 @ mE|K.*\.X߂G#7{ջo~L]Pp t}-Yn?''~c.l^a*ѡ-ne] =w`uu)2)Sq[dYuwȸGNN҇~ k|}t3  {dx2y8 ъS_Qmp^k6wQ}16.>ƭ߽Z_*9= ]IDATPAOjWctDl~@i%_UM*jPfu`􃁱U˒_Uﻔ@ p fѿ{ToN׃?}+ M\Vc1 `?[.v}\_So顇[" ɀK$Vݻͮwd@V ,lp^ ||H=،0=sǖƐːsCNsSK$Uk~Mp0FZd`kyy|rNѣ= `g.р~o I@  `VWt `B p4Z[$@o=}B0+RNFoG-eWXE B1Xu(yU[gdyݑ Lݶ5 /[F. `8/8saǪW;y"HNv,e.[ڔGxoO]o[t}WQOoxl)dmȹߌ{zskg^2І\ /]<ѣKCG.!0Ky`^üUA]"!_ ySϩA*\sJw;Ӄoq[@8ƖՏ75XƴZ5½7Ny;;ߙΏT\ t[~%~ѿeE ##NO>՛'+?FI , 4+z5Vyb%2+ q?x" x+ِu'5ƍ*D 3/i`owh$lsW`L .J_:wd4cof ,0>$~7^$ ?grXl0:(5ԅ^ >(nwHu! @gP/Xc(,s :z#vyhlFΠ<5 /fFytPӷSȝ~o(Rv4S]<`/#l2rg#( q=t+lCC;/%飿XFiGR<_1voˤhF+ԒÀ~];r^٨) Sw$/=m(C)%_`Oȟ`&~-6D!?S|vkL M+j2KB왑 se dرG>Z'߲qu!l qq>jY|(Օb#]*0)We_a?)dpT l9D<`b.߉ 275ם{`@M$`;gkhs+!xB%4*A`LB;fWKlҀYIF7֢|$ y1zwOm>@ҀsIY?qj'Akf[M{|ņdl?Bin`.* *>0r'*K , ;og-'~hI&Xܷ@|"?_y>Fc%x; Ak@-`]?Gw jϞͻ-=KGKВOҍzFtákJ|⸎Vvl-=K?I= V&555;{{>IwyoSd_O\>Y|p@Lē`tLT7 :1 H;c: p[Fۨo$.h&ױq@B0?zi~:JLrSHg?( wØk;Kh@ WU[K]ۥN<{]=9{Kl4-0qkc1^1y#ml+ϝj@H S&$}Bg;H 蟼M\C A HYsvK@\;^j=t_HKP{A~@}t"ё6('{A.褋@xGfѢ`/mulx|^'icx4-_d־,}fTlֻ4'g/YVFsoO *eA`V,Vџ\,vYX6? ʗ\:&_R=ns$;Q@ŗ(G<فK Hr ` tL\q^4 )] Яv~sB#w}^CnmkZE x5.(Omk| lU&ѿmR.9-G л |̍o5&7VG@O<$^| C H(Ks}dd*:J6SF FAݰt7IQ4u?OFcIyrռTsyd*SGM@f_M<$Ҁ2pJ$G6ye/?l!Wl*]-T4@G"Yf&•2 9vPtoʲl}>D@ױW dj_w/öϠA,g5`Stݻ]^ydl܎L ]=xY6k͇lqgѵ? @|M SЀ)d$p_^Ƌ.YD\(- i?]i-y;=_yCaHpZHKE㶏Ԕ?{d@w,S;B4ı_7^rղJ;y ,: `.R^X6)4jqA߅R:d^Kt@*p Γҝ.N gQ/ &Ts)$oS20SÀDR~Cd]~+,Mw_*D_`w|DZ-j*`Ĉ~*`+h0 !0tI0nT <ZF# R'ڟĉGfMh@E6Daepm7]vm=E#ДԈ: $o:5h@QTM?X6iX* Ibp-$jG.??\i@A,؍忱~bEfD_Kd;hpGYźY 1/;=clLTdH#O=$θ`h _o~3D52 ؏bb 4ګ2 x[^yMI# Iv"i^?KtQwD"ɀR ,rMIBџޅp01U WuY8~m6g{" @$H \4zX+E #_}Á( "]J9р]{H_!#K}$ 3go"^'D;3xnPj"᷼N5 yz??|&d@&DU*pŕ{J$'}_FDBQG ??G.<@VR*nX+@3GuvP#Fd2MЈq_OfE!BowEe VX q~gB*@#M5,ah5(uY<5X i i8/ˢA[*6Ȃ@ #.*{X(KXpɢ$3&jDPƻDECXb2Bn@2FeNp ~܊~ hO*Kz>.Χާh@;2\bg WAU2\b'Υ";@u3:*c(@-oS2=5XR)BE?'%'Xjm AXI>oKZp.R2[MiP6 .7 <ʺ"ֲyi=T^BN[d2%@9n#㫕-%X%uO*ٻ(/G֐ $.2|}eПC1 Weg(@.!"@t[.Fk{迶-lBJ *w6RiyW@M=0R$ I0 @+N4NR%Abd-z}1 ,пTE$X@3ޘM-xAΨJ @*0?E1 ĤI[HFGp{Ad ¥Qh545?_jJ-Uӹ .Vw(' yZ XXJ TJA ?`;\S 2Lsd 8 2@ר2-s 纋 #3x#;@v. i5#ɏ[@$"9$@_ʗ+)2LYH͌ dL !/ ws&@w-@p*@soN wa_(TJ'd" '0_i!l#,Ay;7mA ?aeS?gZ)@!XFRB,S2lDxdi$9pIb+ D"@ $@(Pǰ@$@$4@4@i^@ @   y {!D"DI3J#1  $@(Pǰ@$@$4@4@i^@ @   y {!D"DI3J#1  $@(Pǰ@$]`\>IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-riser-expected.png0000644000175000017500000001564611642654340027747 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExsIDATxݽ$a:%#tuEp X\n 0JddH 9h%===VVLwW^ @ OͼML s@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@Bol3@P]  B t&@8  @ T@^'9,ƫW/|; /w8XI@V??;'GT#o p܀6ۧ#3>X f[&Xh7v~E}?GM`#w?W?xm}0̸QM`_0>_˗_p|7 ǘ&@ࡀ<ꭿޗ;0LSmؙ̼лK0)`%T6,xC_Xv7hO|wc%ӣؐ,%X  PP+]/ V: ϧfYXzP%' 0V@JqJ$$ [Xv%hj~T \K:t7D`d=;oAJE&`kz&o*_;:G e\طbŐf~ ̯ { % Ev1(*4M@6~2xY1`!'6'E &0:׺E?'XKF@v9mr1s{2A # oY2C|M3E$J͚+C@2(AB:*ϙZ@6d=̂A \*Y@1M%8XRw.?I_SLb0I(A'mj3>m"m70{MJ0z>ixG\ 7#8f,mJpj8PإrH|[&|[{}0&xmꢀ\+Kp[Vpb_ 8%8ޡwrZ3ns+?1noL7;P-3p\gPP=0Poz\|K4S?'`Myk0"pF@ ΠxWDK˂RNMԽtE?h5A;|4`zS8J@F1 K(ʞ㵀pE%e;m%z{}CKKCCࢀ\W U\>@7J*{#ݹsj";XV>@ h7o[^6>L#8F<Dِު|ً>{wβLNуX|ݯ?{~/7/\(HnsY6(Y {s(\xXxؖsj=K`3&Q-{[|] (y0p%sKp=;= +Oy7_W dGtȧGK#o pNয =P/ 8Pmi] (&Dlm1N2mv9Qr+6,pRgb%  (=n= y%@^%Wpى=t%@q_'-mGLD{%cE@ 4Pb+_@?vF&ЙX  p*&sG&pR}|kat!x,P9`N]MT-AZxzP`:KDJpMXQ$^v6ˬO&@`:=o~3:~$86K ګ[l4{l 6{|_s2=+ ,`CXY,?,BV>+]V8{.N2j? @M z%Xտ s З%X`!@ Kës. @SKK-:E@_SW+}1wC@'%Cast*0}7Uh-!pv5A/l㌹Kz8){?23}"?JKpx>Wx3jZ @@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-J@ kߦ%@@ @Q @@d۴(( }% EYo @(\ @ K@mZ d @־MKpA,ڷi  PP. % Y6-JJ IBwIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/difference-tests-expected.png0000644000175000017500000002717412076024650030364 0ustar chrysnchrysnPNG  IHDR{C.CIDATx}WY͡sNJ ۠BĔHJESDIfPDRX)톤FXf,)z+j>5~>su\<|:u@>s!@4< 4 @  (%( # l:rv01=Kpiv?<$y-zCx h Gx^69zg-b~{_3@s/3]X>M<"] C@4>_=4SRp/r@rP \{͏L|5LJ.m׿N('(OKH¥GlUUxHn^t^83 ; uPx/^y[ylyx!C7}q>X{s2@2<[`]8L8̈3  I28@00#΀ 0$`Ȱ Ì8!ÊS~ WU@.@ = V F d&dLZ% 0Chjd @f@ft@U@.@ = V F 0#߃!aG !K7vXͿ߀}-A` ׿1< @7nB>CCs! D(@Cs! D(@Cs! D(@Cs! D(@Cs! D(@Cs! D(@Cs! D(@Cs! D(@Cs! D( o}N,  @Ȱ?k-sܺ;)/D"Bku~rJqH}[oJ՞~&\l2?GUTىTe<KnƝ4'  hJ`2W :0D1eIDv=p'kB, 6B'jH/AmܡACCڇKCAi&eNX5du.s>{& `܄>wɵ/aX .~p/9ksc`BB"Rw|"u`Ea#Vglp_=ݾ9'ΟC觀CL̓w"\teH@tUOqΚ 7gεk~?ԩ]Z'N`>Z8}oe 8/xO>u?9Gwwwj"_So\kHbv^5^IG0Gp;t'_0Et5$ N*~ɀ_}f&/g:vllp=w=@dfHlXR@|w#ud/I@&k#5k mw]Q%2`a6TsB۠?Loj!'*!IHbvW=uy.?jom6$ s5lm!=aD~sPIzw 9lgf 162U D0lg*Ͻ AXδE_$gS{g]O2<-_,ɚ62hzVߴimT5mN5kڟv]km3{&Oj,%92/k ~_ˬY1|ɷ?umֺKcq;k ̳oa2p[ߢRlB.)$c!.I*\f^}ڡ_|م̍?a+8MRײ(a IE;'Y䎈4RnUyвw2\dέbgkDkpͥ)d2*8y\>&|D <5o"dHMkG L_8}ID*B6d# rXUL K{Lx| һ-H1S~>ؓ'>׋=4 s7b| #$2tO dwmX#?KG]رyk;p{X9'`ҚhpIH#&I_N#Iɷl \,f>#'M5cJ Y(bIos &"GlM!klL VA[^Yh7#b*tU݁c'r֋vH#F l=Jj4Rm7Xŵ/EV| ŧ?5c歵!rIdSuc#曾kdԊIRȺK%rѦ0*m6=l[u4UTɗ}dȵecc;$.T_|wsMo۝mNԬE?UOx pcco @֊o/NK);6؉Z] }d1Q6r9f:i9|lOo(S-2E1Huvd%g?񴗏17|LXfP2~d$|)p2OݶQ܊u\mo1 0fHKm>#~Y.6-GF~+#!5zA%y\ h@Ŕa8<:'Ul~_w^3c>-YGΖ"C E1/>p>^yǮO9Jw*I 8r+}H.VKbww<.*G*mfY1HWp~{G6Χ iH;J ???CJ[ 6xnFI5`e[)zpA`}?1)诵|6Ӕ[`͵uʊA}1;_ {#&E̐2o-Z%gs[k@ V4DDȫ<̓^v0d +ݖ/{ lo >P#g/P.bŠ 1P P.;x @g,z:ܯ;t4:aw]*Ui{E_/!D90~ˀ`T|qEdԊ󽤋܈`Lїn # PZ1Nzh|AVȊ/`Fʺ&;J D,C6Ok%aξu}_^|@]oضPN?ǖg&9!af°9^}yk%3sMEfy#d[}Vv nC%XQ_dۯ,cv 82ݮmNNcXL)A|,I.&X锼-m 솗V[ /mݝ}c{X&8Tbf4.R]!; dTzLO׉m>IvpmJϢV]vF(W;ΏNP1u)ZJP~ }%QK&KBy%$0/"w<.gpOMcsI+B%qE J4@v0/UGL3_ѷFV X%>ݯ +d"WL50(P =J@ob%(PoIB> \sSJ.Ŋ0|G'g}t#JNbvZ֊DB2XpuwoM[O l<Ͽ! hZQ] XM~P'Ḭb$I'΍"w/%")TܑUۿ(Wr6%8@@ᝧh+V Okw< k#Z KVBPuHj"ϸmU?"`;8J''Ї|1x'.AEI.u?I*?InHѷk :&e~emUEzRdl-0 J[+M#W}ɺkՀׅ>#r~66K,ve`$ 4W ߢ?q)X&$I՟$ͷ&BC'`@d"u uK?uX7pO `ݹSw2 |E·q kSɀy& 1U/e``ǏBgվ ٧BQ5@ $Sifg_wSa_% *oJn|3?w3 g}AN@Uyޤ.$=%𕁹IIUM~ƼbL)2K LSuITq1 ^OT2 H[ u?>EaH#0I~]hL}񝺿섀%-5_X[H yz;90}]sgBD(D N)dz&UL~?!p@z88$'xHx]k\d[yĠaCo?x?W\W>{ٙ1S~A2N~H-^[S~u\ t#{ם{`B֘B!`OW6  4AEFz<sopS@WRW \ R|Bdm>%B|tOUmSv[Fw \*@?!x˿zOv*ؾ P%.7Ek|}SӠ PC+eu5-E^[`=T\ZQX dyK)/dcb`6 œiѳ83u!Av$v ?uZ@>s37y2ѫҭȀ]7@J??.΄@S4~8>olF߀!B`d6@L.^ -Z#Q ? d]Ifd'KW Kp} ub14 ('F/1Hw WFK1#i7 R` X2}8u79W%?q,ZN@ ߸߷غ/(& 08]r\uO8@B YW`׷~y,U*4u)S8RG= |&5qG`o%э#l}A-:f4~t =#J>@q~éh@LJɀB`%|onc$K cX 4G@m7('i#< HLo=ytɾ[Q$@`@1SMD~W;|z  &$.W}L2p='HF?GYZR]z٫/;iKL`epgsK@kF-p8M ]AB({V=fq 0L@`'JNP 7_x%GTВ< M 2" +`[7L2 % HDMHN Fh%COj3m]x`?'أ=x'@02mʟ0L5WE}~?{tg#ElXZP7ylz`{uTV4#pfAp5AyV+Wy_'=S'@@`N ٱ'A;`{Sh 4!sG/T[I͇!%Є';P;@hEoPMQ܂rhHE_ 7gW.m,'M|r)h@pweBG`7f龔7^Y CCa90n [1S4 H|#@ ?n2 1$DlǎQʂR?a4": ~b'wލz=c- @`7T8Xd`_ $uk KmT'!X4d:@?"11 W >B W5hўK7m|8 _r! 1_dO`rt' y'|vZ:JQ$ ɞKɰ6 ?b4 Wϥ@1@ $@?h.VA`xCܒ,N(WC?@+=MN4O+~q0"RcĻI0hԀ1&@F`.<'fHHҟf#]-H`JQ% hW\ 55WSJ?տr r߉4Җ3K.it\pEe6+RMw ̶# G4u PA _aq(-FM}^rє.{{' {cy`f)`Q}8 ~V+K;,տe2xeR`K(KTKLEx@HoJ2J2{R4/~HMˈ+EF3J~ՠ7F ZYpEì\(Ȏ&A4iGEW*Z; e)`QQ@T׍mw{\.I48 PLNRg枻g_ŹQzOߤUVL3- !`'uF>*Bg1S|R&'=r`h8Ky@{~yi5G` kYHsLLh_bәB{ iV8óKY"O+e ꅷvMAFBcK%ǦWo@@=@} Jy@R>ԚFZ l PP:CBhB@@ @ s'|Cǣ]xҳ  '@<ݺD@4;\@ f@"#uC)C ]XY c{O#~ u+h_Qrk d~cH\Jn(] #9t{X cfO6U; NP@hkտ`Nv;@ZS[@¸2~:Ÿ\S-(Mc" =vb% HnTHo$9NL)"׽˻$J1ă-<E'1Y @a=?!%ڱ@ǧϙgH@a@A0&P  k 0:ҟ,6Lh)8,jD_:c6AMFC.T\dKag@wҟ+Gh;f,Ƈҟ'uO!,DFH@: *K@QCn|<U ter]cu3zX4y,fHwP.6wcE_g!hQgH-8$J&p{1H4|r>HGiJ5ʥ?W:ѯ@q6nҤW$(^8E,=})@9;-@[Hc͠KJ%%1Z PKO׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExyIDATx]egYmlj(Bm5xac 7r"p1ic@LAAJMքB ҏi;̞>gM{<ϙs̙^W  @଀0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@PKBVveL})p `S`ԧW߳M.kL@4QF >8mHsZ6^?t{\ǥ?h{n[W-uS-h5ktNT.$--Y]"|K 5V  IIM#2t5m @``N ͍6q qͮ  X  0N0ξ5k) 7&@`mB7XE~U.oKG{[}LWW!.pI:w._}_;۝_koVW+a7-[eƪ[O*xh̯|na3o+XCɧ_AAHwQ\ɏ ӏs[x{ x5* MIe1N|̾@$̚yDQrͶɀNCۃ`LX] _uw;7iFag5Kܟ5# X\tKmuwn@n\[OGG{1n'oqG_z`jK~?2s@}V1$8<=895`N=4,]|c`{Ϝzw?y/wЈ!E1 0`OKOK7݉_ܭXtw:m>s=RGu}\^?/֣+mX f4λf5]9 Z\>e>c6iП,JrgH6oUz"0 Ak3m6FQ\1aOgqwghf{Ts~.Ucyv>wų> #0]=8:H[ى91 c!T{ޱC7v6"0 C7wnMC/NwPu?4 gz|tk})wؒ^yɿ}֪W?۟NaÀ?b\ozꦛ? |b(~jc>\S;a~n~u}Ě\' O>7t?4|n>.-G^}}{oж7/{.x .n'_}p{#}ӏtcMIsQuUÚo}1| {eww?ӿ۶xg^]ђO#-Gq=ZI0nR8 Hzoݚ9'`#S&0  54Ǝ ָ/f0Xqs/x\¯xX$q{݆R>r7v{y voJ`Eyy VD\vԡ]!),(p!~WyapW>;6,?$^P5+|坻0 NRq>\L ?,_RX+pkt ;l5!&;w +_ll+L'_S'W/g_?¢8E2;3HW`z?oquw[0Xᣏ>O}\]J-}|q^_w LN^RHlrwr9[`+UEs?`Z=7`o/ܜշ_, GU+hC$vN7to2N ~${c׆gI0m|8nߖ1P0_ ?&E1V?V# G1|_|-?޵sFT+%8{{'<_ Si1_ N$~Cfϴan^0J4v*@_Y['k5R0- -~yWulH@lroq{V+`@3{UJNv_ 1#Н}3{``@jMV"=^o>8{[pmA`V@̚>{/aE8_U@*s7,U*.w}w+ C@-% R̩Dk??9+T/ͽY?Ńo]:>u;,綿y|S?%7yܷYrAϧ~_y@@[&<*kwӽ(q,zOF M@ #L੯]\x5_*$$ TT?jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[jX @ H@5[z[abkIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/rotate_extrude_dxf-tests-expected.png0000644000175000017500000001672311653243561032173 0ustar chrysnchrysnPNG  IHDR{CIDATx?dy])޵ ^D0Q!\K1tIHH*,)i\E8utiC\scd"'B!$K͹;wgΜ3"|~wޙ̣G_Gn+Y p) $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+" ~{/ ~'{y5\k#Pj>]t\C)$xxngOJlXI# P]`#O*0 rwfV.Rfp`rxeRaFuJ^~R0aZyp ,vne-V֐1/G, ȃH-wӢ_} k.@ܽ Pe,U-E :,iEVЋ aP,mqe$Ag6 Oi/T@q`-Mcza0q3NLmd?nwO7-߾qf{oWhA@pf3 º߂hݫXgq$83`Z߽[@wލ~5rw# `&mK.;fns#D®՘኿.@DMq q='~N!O-a &8qwy,gDng1ktXtQMڥpߒ q7O%Ls.>, `˞6 v =H7GW^ɞl9SQ ׳M|O[=de(G Q,/4I Y-Q| ;6S-gSnb`] 9jwGqv֬'P X [ $'f[ur{?g}#_]/s@'lSiZԳ W^8m?md $̀l_8mQO<gx 'ovl(e;1Qfd=V!ʀ qٖv!X@LPCۀ\FwQJot_}|]Sxh2ణ)r|S쁸"5> @`>>7|滔%Ix|f [^}SA +}E`W#a]_Uu.vZ0ouGյ[[%R\5ڳmoF#OBPMD0ixpIÉd,=Wם/X\ _O>@wni_aSVuI^ls_kj̪.WS4R~Юp$d@3,JFKY@eUü q61IۇƝk7޳)ߣ5^6rʺV"tn93 \ʽ|#<笻mI5wI* ]â;V=Baw3˺L~k@yѰΊnVxh_d{yq7髦#XqiO"PT mzsn4/}  Zp52഑-O'{"N]nd$e#+hށغu G@$@`%{![]ny@?/[Q]e g Xz0Snv#0| `AI w7]3l}/ص-|)؃qt]W_z%]6 ߞtw;.4$f'c:'$:h>KD=3kp(w$thjЏi #y hcLakqX3 P;^iۿ оEG@3{8sυ5F` >>Z/`_`1|OwXW?X 'ͅYp9g}&VL X/X\y ?&赁cw~8c< O aeO]$Zxm4! nwwsZ~+|_0ne˙}To8y lk|4PksArݛj YФGA}=[+4Q) |d ,@tU}[^~ 'P銿W@w[ꋇeHC X3t\( )|qaOe V Uno + v5.o~3"ߗ r%u ƫ u?nb>hbo7~]j_{k~P{\vKy׫]l3[F8?{OP3 A@>w|q(3`:; @nPw\= t |!@6*@3{ @ FE &mm*OO-"@@*0^}xD E o.1qG*q.i>:Q-|İ6 an"@@D 0ju.fډ .p^:md .='l@ f_UE oLE"«@(XV(տc@Gn4nN"@` k|DW)XT@Wuvj9%ّ WK@~mKV f>  AGF23 `,]\Ȁr#@`%FȀ3J`,(73~y̻ /&tܶ{ -7v3iWݭmh2࿿o[ 0H?e'ZP><`!F`4>Xk:n1n記F@@r^:#`3U>:Q ffD`f4:*QZ??mA@+6 ƀtVIg^\e|y8XB9,5_^kuOwXlX-?y7gsF+B#A:L-tJ .dJK-zM LXq?uVpJhqo X'`I~Sh_\?9'gN}I0-`[t d?$G :S^LgX[rW?''U_Tٶ$ﻸ?[Sqg3bO}O$_H?¢P3'<wCK裝آ=ݓ:W9>X3^]i,7o r$g\/''m׊8"߱Gn@ʃn@Ƀ{lѯV styPC/n.5.. oA v_BbPqVt`fXM}lS7^<2չBu"SWy;YB֟6A@̀Sm3y'?{i~Q@*%Ac W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEDIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/null-polygons-expected.png0000644000175000017500000001576011664172106027754 0ustar chrysnchrysnPNG  IHDR{CIDATxݿ,Yuh#3Kx#BxD9B")dB37S35}OwS]Z#q]ַٿ[̏!@z_+Y w` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @EZ_Mz/ ("oTdeo(3v! ]y7;5ȃw|`/K|.\}ǏAc4CVaśJ,$p8ܾ( ]p%K\>L_@>8+o W|Jag2ޗE`X3vR>' V9S[K\'0  &Sr#AݿWp%FNSH;B]m ܽVV`+IH`I0PWx~Փy:0ȕ<\[G`NkIL S7ղH`Niȧ P_c?}7;CM+ ?}Վ}- kG@~)@GK➶}7N$4>Z 7J@b= h+b'kIe+ݭ _|OC H3H>vX7A_oCߟ#X@,z!1@{! ^6:~60IxwRsɹhhҹ è?8¦?@ h 'ҩ%>ܳ6)`;71/_=xUl{``fF[dӿp]b/ے3źm‹ }2`O ڧNLE6?$IǍz vvӒ`a~}f"8;$A8.S@bP' V,?ro7<;gO <} 9$ѾK`_WMiq Ё5b99X@>fL|}bߏ7s@@8C.~~OuƮ\ ޠ'O m'7.lXLu v, <7ߖAsUpŮ1pyߍoȃ,.J\uo$?@{3<p]övvO?;l͡cR> Am~뙭 %J|F~E7~럭Kh"v[$Np}ݿAa@i[. 6']~B*'W%&p}708Vc'﷙! 18_*˒`E\to=0`.lyb`a\wӟf)y! 6o؜4 $A vXlҠ/79$+Iܖf߿-愖=mУWc ?o.Vaj=*VκWmm `!U7*gSX"@sK^z7N]yKPra0@yW%7sOO7CemySPa ꎻ?oeA:I  h 2NwsTku @``$`|jPL# )@V yxP–Z$@2+>xX[* pP绗8c}\*oݶ Jƿ1ƟwHJ O,l%pO.<nNOpK < E ?% u0!. I .<(n}s70*b;{`9U@+O\׼@\sn `)8L`0uͅ.#0g0$.\7ڟ Df W`9V a XpK!n5>^$7/ :>V_Et_oO + |@ˀOSX`boioW{S;~M`f3 [;ݿ}pDzo(1LnwvZҁ^̀0K‹o<` <X`$)X.p}+Kb./^iCC; `aI0Sxq/owl*@_w) f /!c` 4rwC g0. fR/oKoR}nc`[_7~*8;Tu[taMJl偫=h?$m;+$pl 4XI`zvW86 Zλno +l#pl {42pH]$ L@Nӹ3nxI1pW9}l3 H-~T 5?#p1ЊK#;<_k%0 g bఖwn>_7SV$ص坻[TصNNC$z|hNN.ͻF8<Z`wnS`F; $[]aTlq!p8yE:v?W'f /\J@׮ȭ ;"\hwoZԹ 7}%k b`spvwM$x&[wvuP8%ΈVtgoӄ ӿS=H1coc'sn|IfS 6" 2otpoG' 8Lno c{N I1\%A?? Hͭ@NJc ?̈́XMw$[!d0SxA?uZ|>"@@۵vvͰ'y?X'~OZ"@T*No'@]}o'wC`QOcL @`@Vk&/G׀mpo#!7 w D> ;* 3дUbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@* VkLIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon8-expected.png0000644000175000017500000001714311642654340026707 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx0IDATx?,U໋0ؑqH2G6!N~ @B,̲,"# C׵;R9Usk%]U9=>G>W  @+` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ W6=@hM` @(xe @@(* 6^ WC_ݷz tx5m(y<]_:&@@$hxgR8$ 2uS-[ \j8$ 2uS- <4Od_k8$ 2uS-vD>Y)zZk @-ء"z_))Zk @&|')`L l_[xpR@lk J HJ;<_k8* vv+AnV7_p[@@ՍCx<w4x {:|ˬeq}??4xOJ'yv?ڍ..jџkhuI]gn0w2_Mw}/`g\o~5^@7oze/[~YXo $+LT)м8P-& `T>@s4a-5_?o{߻}0&8v/ 3c8|?x!!&fyOf zyS|wu[~=[xT@<*sӿga^E xe/~a=]s ={rs͕ͦ@@f0zwM;L+ n?t{ 4;#B@ FƸ-4G{"N a׀MtD`P029YEģNa%<l[Z1[(W ߡޕ {o; PR@tn߹.O gYk 05F|- lӿ)0V=G@Z7Vjo+om59>~k>ŏ~ۮ` uU2KW<U:!  瀡b`˭Z'm0lj%:{=jӾGmhjViV rm?hk~"`Q Яb+/_˝5w1лolݒ]/^B=\mu mNV]b`$h^BF.?ZxTz1ЄE"Q؁-btY;{T](#NM|b?qs,My.INFk{Wr&I:}@{(LF x6x蟷wܹO% ӔC=Sݜ][nZIl5FD͚Vmz&f#;ޛw\ l@|?x=0uݼ4*oW$ ޶;FPH|3 qs(M 3F]sN?T |u/oE R)V ܐ4~o rZyk~" >$h&. ب 1pZˍhxأV=b6r:1ǴgO gɦ:N73\IlѿɪsxmF63%ܐUF@@LФoQ |`EmyHdGud)F;% R:'ll* r׺X0km M[b0n"W?I@7s&H/yz9G%:Uϱq3x^`0o3" fT,LM t|1`hk' I;FE@ ƻKgƀ[QC@UFm$ Nub`9?S;м%HD^%0, u6ǀz/\`r0y1` H@ ݇4SI(~iR喯nv7WģRawSҦuS,DPgu ^{+^Z |*iܾ{/n+ra{iI sfvʪo֌!-ʶ' 3_dDBm;9`?._>w^?UjGy,Vv_%f?C[pO^ɘ2f)nm%}s">|9{[~M_xs%Þ?7_3X_cQ9ز9]Aé~C؞|܊zUIeKF򗌦zLjcL F?YѮ_N/˗UA}2>H)r\ LҀ~\UKM@~G{H`+ϿSa ..daȫ+]c#ҀQ1CSW/X}V𽛞zN\vY khKk2nrﯮչj T%뗲ŁDD 4@bT@Ȁ@B6\QHk/1EȢ"'#%/8l^b["s}ޫWzT PB\T7ۦ#"x7ڢȢHdHf A_/ }ktH_,//%T@ AR?z߱_qB _2;@QT`ѪO݅рpzGuN񭪢 Yjxն5@ʲ"dunb@b:6G:s/e Ie0JZ\~ G?pvwBdG:b;P_*)KKj_5L$թFwgai/_p֞R=?_@w?]MDy{WG&[O_k{$_$8œr稾yT~8oǜ o߼IΕ3Cq[ HSB6 {{,tS_ Ԯ'Z(~W\ݮ qN SUD8kt-j{& PS&b!66(z;3ofĿn \F&{=yghYw% ϶?g':@xme[@x3f}{zk᭾rkPoRjY]ȹ o>g@?܀ynw|xU?}(﯆Adz u]R8Zi;hD&~oY޿rHǣI !{ꙢZWc m\rDh 5@W$ð;^ƳvO (_"]S?tϒc@Q6 X2Q_cKx `y|98}݌M,~URXjA/]h|d*k"  +ЙM%Ȯ K*] Mڶ g s_ yW|fNT}}Y4;x{c}IҮ_[vM>;WUE$d'E/WGί~bkF?0&E~Z $~ׯ..( ZIjLW^Clx]O t-= bEL5tӗә~_뗰x>SO֬^ _ᚒ)"*rt5,^1*4@b,}_V4@@*45/u.Rg$@h _"C@ygJwoy 8z\x' x˹/XeE/[~_bL/CH e@"M%di(}0e_L#~ ! TOXT + {#½dHlxk%F> 0*wՊ]˘ܙiaafFK$#!0,$@c?k:hJ/<_R @UhBk$C H}_Loqҝ_-/1H5 Hdq* 1/29}ÈDʴD~ӰYR*}2_\}e8WTs ꩀ5!} 3}:3u׾i?6TkX>K1p33;W/}̂̕?*gH8$Iw  .I)MzAjo|/肋Ojrj?NE#y^:$%^_yLDy)UO_i:rՀ((zb E(1cB4_* P\J (izɣ?e_D wjkxpxϾ <@""7~K|j -jZ85@e KCiրp/B] }% 4o/2/ ^\h2lIėiæHd)oGdT*:$[&@z_r dH&0/mnW²Iz_@Y-uP /:O8~\0_PmIQ3<~+)nc'Y3dȶ.n X޿ w;5HΥf`S7jֽe=8\&V69?pNQ8Sɠ~~nxy^V4,sԭAۿega|H0ʐ;o Rg,wjKYo,Rx;~}XcƿuEnUfn  %aрG7/J҇?P̎okx&ryd.Ntka!_ٵAW1eIp*`y2/pp_f$UyLg; ~ 51`Mih@Q*CZLĜ@ 贽ϑC,şv9nVjz&RhgP6݆ ǩje볳]mU}[*e@NCk-O?||?Y֪! /3~ 0O_æv'1 s8ev3t54 8G:~[DB_ul ec50Yo 5@y+m)$OnLq6&?]TfS?m|ˊ4yS_!߽ߵkVkz3 ;xٹV>l|X)H25@{aM;_:ƿ#]e`HgI/Ӥڬ4cB60)7Vs_z䜷SԀ#gH1|Ooa貃῕_d@\vU]sVY9leXml<#GGV2X+^3p ZP[^B}sa&xf#녝bUjf`-f8}'P~&Ø|Np\_Ju4};\)g+ 7j%يw q®b8j_,>O]ͳ Vgړ䉴LA Oc=IUNJ;RZ9*\i%MN#ڪ6td3Y i_V(前o~= zR$@n4\ 6@x#eysNqCmtYI)UǮDZr#PR"}KYrz23dֈŗ/z J;-4ף4k7M3hPYMXп ԮήzorVʷzU!Sp6*~?YIhh>s#pdR{w° ENӢ"CpKP·:H9Jb3JJ)3lmcjMVU#D"3YfOq2j`Ja>^~-:;QNK~T(V+uUZDeK9OOp6nW%0n.y([׷m biK/g^lkbQwݷAM,o?>L}ќr(1u@Y}n淲 c*$COgbKpjW)5UX|+zwf rV>M:uy&u-N|}`#6ۤE?e݇̕P 7u(Ս,1 *Ćep=D0"qRɫ'/7s hwKm~F͵T箹]iY,l2(p8 ͭWP =N\$@4`u))"qy,WPe O~Y{JK25=0L!n DH\E=?p@h /}o&ncpi|㧝j5K̛|cI[$ 4a5ھ Oj ;>'hfK|3C:h  T"}ojk qrUxdwԢcH^1BoI#E7I=O\|WrcDDGMz dN[뷜2T;ǔ^+(%f4 zGWKv'B_u]fv[5c]hv;[^ xT@Ѯ?G3|h gýT=ZiԄ@EbKv]?Ik{c{8_eJ*PeG5/ ߊчN tvĺ XX:'y̜~)-8},25@&B%dZ`_!B?׬7_nz-ϔ=+ 0vv EyO|T@-eNi6S/kw'qZzboͻ0r.Kr2;Om[ƭwaiD , $ H9!P5 =u?aC' 2YorۈUmlfn%YxcN/_8I:p*5@ɀ$:%рW̙gX&s2R\P, h?<Z?e3ι]W*Oqԯk{U<\$ S>[kI;A@+ LЃM?SCZ7~bUX`N;wΝ׭Qб{j2Nie_;Y=Q~YVd0S9j@ւfsş;mg`ŝ+4 C-qOUX[&$'㎔w~Yڼc9>o=ee?d4L&nJkˀ(k^ր >Hw$VCFR?ir&N~Q=J DJ4 \޴,yqyQ8DK2?YM#HjsL֬^=%"5ik*DZj)!Ovٺe,ln͹ik@N|G\t@;o-\v! ne޿˹DUKF_g Bo?]Ȁ|mN7<4,/)zwutVNa&р2fU]4@\h@`G> j' ޿:ij3q~PY=jG~9@^wʻn)}MX-zU;ZnYXux=S'G?Tb&gvG:2 \h@@/GLgq9qVkO** Iqw7rf_' 2pޫW;uxOU~Weleр22 ;pi\@ɷ[t/ V:>Bp>㷣j̥ss@jgGrVnZv({/0Jދޱ1 " כZŨ ]ig$_Od@Ϋzu}dhO@5/xP#I^ $7H%?{;PSEI0an\{JoVg# mJY6@dֲo$`6K>sāSCJI~"UJݶ<,o~9cbSb@,ԀޝU^"4ῇd{8[BUi? ԁ*(Xsl2O1B4x*k=tRyn-C d3Lhz)$!#L=oka][]Cg?hl'k&ၮ7[R; < .OV97O>mK2p;/E%t +Uhg_uˢݬ'}4<| , ؞KLDῸd`OHE AQ x_3wEF2P\~iFi@_xLYdoz 4>&عg5`*?'t54@N)?Q7+ըmE.nBSRe)*F46gۻf'ZUo\k߅!)C* dp ⶠ[ Mo8m5ST](D CyGźv3!2iB_1Fyl·OҟG<5eN_bVwO!@ fM+<20TL*9g7CKWow?z@Q6=S$=(ULǷ["ܯqEmا++8 5&j*0oGDOp?ao,D$.~N |7]$ʧ< T_l[Ҁ_xǷ.qj6 U5@®_zNƿ\0?޿E- M6R8&jF(o8sO(4?62pYmv 1Z #nɫfNx'[)&RʷF$3޿ zezUS* @3C gQeQEeI@T~2CH@ 1#0ighGg,77ed:G:śc?h1x;.*)CUYU'zTn;CҨ>#| # e_J @lm>zʐS[$ĹkV睾: ҒϰO]52? @q聇+y'ӇTl{MͰgOL *L?˓3%s#3a7 ZiϛO@V1߇D d>0X? s@O:f@ @POO%0d?M D9o4F %?T &$u>3;v)IZdh+kq!;pzf$D@wi@S"7YEmu\$@L 3IEd AS1iޟT (!x4L׏oȐaS~ hӷ{@wJ%U~Q]Gk~ ȕJ}QK@xHK@i۞[FA`0nj# 4鹡{t"YL h6Gsv_:z)7堨cG 33!NmN>xD%zBӏ$<P{?VSnUiQ!mzBoyCCp/D51!RK2dbT5O?/jJHH@) &ݿSNt&N37l@,AȊUwwiv^ 3Mk. @Ͷ5K˧3Ϊ uy/lT9bq;{@W@'bծ\l"hHh@K\-v9j߸&*BT#z  h7??(RPMY D"k(sʠ&`xd#"w}[_`|bE Lih$P')Z^q=" Xl?n,xf~("!M@4> $@#IU<9% @Ùx(@6.,p$;Q /2Ӝ?vW'guxC<㛈x;<(?047E@7jq`v5ƽ R<l85F{/{tGh0yh_zՖІ?xn -_jpnyX-Vm@%DҀЫj?޿WCczO6X2ЧͰ-xd35\4@=%z2DHB*l#O =Q3:(-\KTQPPN_DЄЄe7U[ oh? 38v@xuc-Br<\2X/zg@hV?xP^1`'# PR)_z i/̂.;wnP^h^޵gB~-gw2~;fM{ T@};!P}oW-1YPz{?'5"uCkzH@;&-Sň~nX}XFAgЪIz*0=5fIDAT[Y,{οp~ГU)(C  &H);otW3/EB/ 'Pp熧r? Ȟ@zA4KTZPC,&{h\-+L&?.nѳ )G?~?%K@5"p!CfG퐪`0.a4KHH3t x (/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@?e^IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example008-expected.png0000644000175000017500000002247011664235350027012 0ustar chrysnchrysnPNG  IHDR{C IDATxݽ$y񥠄R+1e 0tB8Et&@edЉRk9朞 3Uo:3sfׯ| @<ߋ7e3FxC@X @P kJ@޴@` A ›6 @ (TxF5% o @@PM *i#@A7m@@X @P kJ@޴@` A ›6 @ (TxF5% o @@PM *i#@A7m@@X @P kJ@޴@` A ›6 @ (TxF5% o @@PM *i#@A7m@@X @P kJ@޴@` A ›6 @ (TxF5% o @@PM *i#@A7m@@X @P kJ@޴@` A ›6 @ (TxF5% o @@PM *i#@A7m@@X @P kJ@޴@` A ›6 @ (TxF5% o @@PM *i#@A7m@@X @P kJ@޴@C@('oS FׯlJc?G< EQ,OxlhQ5itnJcJ@I0ݔ+e߁`i{/=t iaZOڏ?q}5X z] B4uIн/s3gxO?Տf,V 0OouLmA-iҵp"gmߦB?S?-/$ΑhVPv? t;#G"x$\/G[۷$>"!m$$r6Q5;cpyp1DǏք[uTry ׫Yþºk:~b WXo#!l\8ړ#+r:WDp.yE )P\X*3 ?#w8k<6sD$p@F,R|@-ԗk`ieV;.爄og!nwS|1p0xcuzw HOʀkǛ"aSSF5n\cpdvA$<v?xt`eH0@̀,=%xP?iiUE$2qd vg9[G;2"FpXѓC'+߻v,|lua~L K3E>qٓ*I 'wG1IpKOr8pIakIm'[}ݔ 7Vc0(_RxPe@Q߯"Ta*bh~]c@]FG+L FG ߠAQ8~Z Q]('It@w gUcp#0K)DS|8pڋtEw%bsFZ uQ5/G 6}mξ& MP0PfLIU<_x# F(]4-QPzSCJ(S /ùQ@P]o_}# FX֔7* qLv"(\sh ҜWj@-+ w!S;E Z$3 \z!~6w,8 0 /8@a b_KIێh.Y")~<< :\ E婷 `%d!0%A]CqszEI: vv2O 3hhA5  @@W8i* ` -m@ a`@!, xK>U@pC @ ! @q@@DP@;(!E}"'@``MN ޿6 _Oo#i738"@Wǝ!:rxwsq?E0;w}Ȇ /k#?пW3`W0<|A_W>͟gGHrywPA ,Jz;rB-/}[@KTUE޸T&+ @Y,vGjszeיp:Վ:UTPQIפaq1|> < :CTӎai@XSXOWaҨ_}# S: vѹpVo k5yL@<,`ImA t>U_N*H?&@ *G1GtP1XGN`'8!V¿> --1x-`p}MX$ 8M@ׇ֒:! :J DtB@t"IeuH 00 v@s  00 ^jtuI|h# FP P(Mx @#@#B((M@l 7' H @ W"K@@ ^@ %RK<[)E# #?I0W>J`ʀ~^ys@o~J3 Ş b ͞0rs?$T&xg.I O6Ez_<iuU[Xk9 ToqkƉ0u8g@%  @# ^I}O>nCo:5eC̀lz*JꃷOTY}`dS_6 p@) z|AxBA*zYh%>WXJChULO]," YT P,=p hq_Ɖ ̾_mY@C-C T?ѯ~;}o č3 @kt?Q>= /M 08Y8Z>IIgXu^¤V|+ۗZY$'9}.R8P1?TrDJP6JSa'ΨA~]WP{/>)n~yS+OM=W6?sE}6֟498b.~gd3 #=#k.?Kt@p%^ _"3qfo`+c3|"i kф#:mX0֟UJ<2 g>pݟ:nX0l+?+&&V@41}뿭8[bS {MUz1).wZ/t[}G.к?Y?omA=%Pl+p{d鯊,Z Ao%Ri]VTIX# /1m2r.D[ FB[ը4Do¥-;[& |];B~Dv& vke@(b*-2ߎvPE;7{sF?tY@q ξ4s{vcwt:L@epvO,q |v%n:o͔t{wer\{5#=) 33&+rֿR Dܸuo__OeW\wpc[0kYoYX3"f@>ew8vW϶u#ǩy{o^Ocg:/>?ǰCp8~{hRYeZ749[EU#oc`ІU\-A`?ֿ@W Xb$2^{\6L7,N6u [5E2cj]rUZ@V:G  +=MrTdj'}rNP@D _s~Xy,otE} ߒMbд<'gp2cIvAvm:VQi-;`K&`DY@ @ = /mntzw*\;eEJR9߹MoЄ @`=ֿ <3Y>}hv ,fX gm6HѪJzRK @1MdФ,SQBAv9XQ_A@4v 5kIDAT-I[RcZ\`Kޫ]3 8>XA.A`/npUUUq|s"%@`L)l J 6vwD?d+sF[ T礫 y 5F|׍ǟYve8w;ΓRO9G oڇ(fv1u>k[.Wp\@v `+QKֿ &x$8iU@Mm+P9 hHJ'GűF 4*Le AoboI>֍TMZ# {M8MVMp )9z.&;ì7up* SΪp aN0!?ҍ71;x[_fP u. t:k:R@-Toqh份 T" *6loXs fVWZ@{2ee7$ߤ,E Y>"V?˹A AmZ}@$_,*D-L`u@ANZI`L]{UAE<@zD ֿI&6"oB drnXf9\0:0=wX@ I[ֿ+@ w,;A+fc1uj[nUlenUk oXX ~TTiC@Cb(e U4BpcvпpƅR^yKT @AU @@")A@䠪O@ rP' ЁHJDr9耀@$%"9Tt@@t @@D: :I @ U}"D@ >@DR" AU @@")A@䠪O@ rP' ЁHJDr9耀@$%"9Tt@@t @@D: :I @ U}"D@ >@DR" AU @k`IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example007-expected.png0000644000175000017500000002403211664235347027013 0ustar chrysnchrysnPNG  IHDR{C IDATxom};wfҩ TE-4)PLi-CTH> 4>P4 RP'jESA0RBXZr`BfR'әsgs{ s{?>k}>ܹ5!#p=^2F"@ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`A6 @ (Txi# @@`AvGoo@X% 0= lE@> q A 0O8Xaga8D'_ib>ldb E[WDvP(g]EsS`zV⬸5V<PD!\i2~J2]  vn@p֖I|~}w"`Њ@#}xZ,:$rNwZWM ` lkL eP 0XiSE> `q ӆ;H!2HjV{V!VNHE@BPd% `%F|q?Eلׇ'T`U3 |?;8[kt5&Kc^{" \sC6-~%L" b`TYBb8E 0;yZᬕ38N P" GWFv ;r BڷWY"7N4.p>0`?+.;+1J@§?MV` XgMW$pmHh pSM}.5],T8C5Z҃5xVY0.q『]@0E<~J$Nq"@2o~ʣrv.0ѿ?g7E@ӱQx  LU#=|!j"`&`;F`0?vɬcG?9q/X p p /s&@Gsb 0b/UY| N@} @Ebz1?9Y Ι"`TΑVM8r0rh!~x2MOP'3o÷{߮r'`%e;4k 0ap!_o}Ud-p ZO9<}v,)y]&P.Dao QxE"` }!`Yj0 @ P=n,1` TW[sw'q$6n􉜻@E頜Ap 5drI@Kje$ n"`qj ԤVin2/o]Þ`pđED.8:^,VzB5L]#uS 9 0[hk?Hk e-) &&}y?Ϲ3_xő2|~m.?룏~1xV<мQ%]Qzy2%(ƨc-hl-ZgI42wVmXsە3],SPB,B>"#0I^l?U<@8E0y |;OO Rr?ϫ@= /ć3 ڲ(pw Db~ ` E 0\pE`{E@(ABc(a_Q YS)2#p8T*SJ\ %Jok.a< dM  pSWLyvDhpS @8BG"`'W]c:9NK9f<]Ah @‹O KX2q8d]Dۿ-\0 :?ϋl dpQ,0}8:Z"F֠U@>tqg_?\>2#l0@-M .И>skZ%ZUvB^gjqi w7jZk`kmޜ?nY-eZ1_I3Ző4,\`I:=Ssgzԉ%싉%..PX:'UFT&Xp=rσ;!G@@я|3CIK=/o8"4wy 7D~"?p0) _x|Ow~|>Ox]_W=I_ Pib<0©enLm]Oޖ!n[)?1 0_e=Awxy;J < w<*av >{oViJ? )ӣJ85r = BKsߕJz5G]Z]1PDJTe;Xoes2?=Ăg [@m{7;9eo lӥy k1.PcXZ:h %5 G':·CKWhy.XgA-5iz(PC ̂Zv-Y{[@]~gvHo^kLnR mS Z{:(\óhJ KEfi_ _t]0wY (xaЀwS_O>#xw߽;No4_|/??_x-/,e֠Nmm8w.4@c `=aDLUێ=ol/\~07p>ׇ/& _Qx1gMUśX[#=M?ūv͏W_>k)H}9/zFö~^r|Vkt$BF+.ܛz5ء.y O}39/)355_Saz̀UWOǶ͚1=WcWu;5wCѿ+Ͷ3(Ym6rW60}o%ϋdSwЄaevˑ8dR ̾O>zĿKhc GנOӯcҜcR9:9?󁧺}UpRrBehq9 ҦS:b_6\^ 9 05x5<8:E%چQ'đ 0Fִl~ʖГfINK\m#h.·}c0e`3O{g.x@ZF=*^NP3.|;8i-·ԝݍ_迹gmJ8U1??qW!PPՅƤ-qhPvB/Jr`9iW[ ~#;8LUNGǶ ?/ѿ ZϚ$t՝ܾ=lṳQO)QRcb*Sd\/tƥ%|.qdvFRF tp1Xmi]+*r52[0 Y 䏽vVE EU/ć.gO^0.X[?:}/v%=У(EQVlNc/AJc` WJp1}g/^_'&&-mKc$&WՇS wr]?&c SWX;0ˣZC~@nH+ `*?ŵSz lנN+:@ɋ_}7wam}<(|߁5YT)y}qw6s*--nb/x`Yue-Q<er4/X'A~tv@? Hh>yJ-ZZ,N;Blnl.ӖMʚA?[@:dR5TߐJXD5l`KnO 'r= UhL= t 22 A-]31 FHAf ReJ()"^">5gN0ضz[ۆ 05*(BNP} ~c Rz`%]jПb?" @Qj dVkA?s@d'A~'kp2{(9KƂ ֗P$ rqi@i4J@+E@.aOǨ2 02ud}s_|ar# |3 lُh%,O㠗g^+=zՌ%`%#6*#Yu KeSHLr@ %L$&s9 Њh"ρh$r`9(k1fdH)s`=Ե@ @-0-/fDs5u ?@4p3 @@J8MfSrTd =@i iy%@F2M1e8N2#po]i^&t@ (Txi# @@`A6 @x%]JRC, @F #lM!%`%1= O^a 9jOԮ@D \&L:m0mi'BJYNdGAZ$Q5jTM UHԨ@0 Q51# ` @T P#PjbFS"IDAT  ",zgj'rr8crr,Մ<7y~^Wo<}k~%jBT/tAO~Dw;I , p«r\r `U*U&h # dp&H[pAztT*@\#` 'l@`.0 @@ K%< P)PpF`s *@d] j`D ?О =Me@V1EqnTYA? "@"Z @f fĎ fSY=#5wV`V `m 7aIJNӷ6ZT !&r_@˶6hhBFI  0 +aP @ٶ*hQ szDڐ~֦YqӘ?u((^% m?f1@1RKZkZ TT+wk0EvzWjuYbf p3  0}kXr%HVvP>C -D@L')8B TaxF E2̨+7aVPSqvHࡌmi*/yZ>6^&`tGUri?j-@-JR)go0% ))j+jS,!^hbbHFE0VQ B%|u.Oߚ>Êj`D<` aoUSy1Sd=n)Юs23ϡWiYPpö -9>Ϫ+; H@jH̄T~_vB)E!`Ќ3){)0#1EO0D\w :S'jb[@m;1 L,++CV WG_uCk!$D`.Ԗʆ\2$ͦbi_u3`UiiJ͂ux359Ao.\8SH%}u7Oq1$ ~)`_ ӟ(#QTFT&XYZlqS-4ZPq@v ّ hS bC78V ޫgG]VaΝ(M ̡qa۟8$8~+aW[]@r`ye,jbxryIs[n??9~?jk$d4;KphGQm nȑX4[yW 8}9Lo?u5d *'w/4mأ\^%ƿ~ֈ|鋞]$DU߀WoNoݫnU~O6 wo_~KШӟnJpy?L_%hpӵ x]Š~?9Y4FvAX]Y@ۗM[(U_ 0}tIݫ7nbй7>smwWu[n3ʮt7CGx,&u?+3Eڮ&s7Qb *ww/޾hCe n/06nlW!-%:=86C[]WIۗ4mѻ`{u?+cg/DUvҀWo~]ӏtbϠPW}|~qǔ'KQ̲iJp{Z6̝U8iXjbDö?bV3-H*wO2_v51Fiw!&koFHbi@Ƕ!2ۿMrlZZTfo@)U4_jbJ`V, A`J#߉PWk|)q<WR 2 hTi(j3;/֎]Y4xʝ\lv5ɠQFF)lΥۑaAi@ʰw>+_rgvT:U`xjb<)rւbh@J#)'.63+r՚blWƔn4PWj|~{A4͊PWs|`omWChNiӚrԡbm+˫!|kߚKC^r'ԹbѶx?{od@l$7u;/ֆкҲ]M i6`V,^zʝM ?!##%cc*w0=4_ (I/bV,DNvM.jy=_=}ш|>1cl0J`ӯUHznX{%cQ*wI/޾4ܔ70~1uU02_v51zx\4_ 62@]!Q@ rgbme*w0_ dtƳrbmиjba/ֆWoN[ J bmQw@WFrWdXc ɀhn_~PW۾jAywo__O_4 QWoNL拵!g@K?$a n7>̲cO?+ I ۀs4Ao|@Ҁ |͍?+'rOh mHx ڤrl| i ̲SϾ3O}bЯdC@6>qjd $g{ 3NjHh0N߀OƟ 3IotPfodۤ|F~ʝ zdlYt4՛Wx8qLoV,3 ec#>6Ʒax2˦ }?<(r# KC ^n8|6Nf`FFpYqf8Y4o̊3O f4*-Fý0+<(bi )}wc̊ط̀|Jg pQ{l,#2+' *t3maFa̊3O 0##{f`B?׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-self-intersect-expected.png0000644000175000017500000001206211642654340031537 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx ASDoz]=s#@E hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋM 0&@ hb @D @x  ` Z0~Q-^l?@/6  @@TD @ *`ŋMC, IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/color-tests-expected.png0000644000175000017500000002422511701151225027373 0ustar chrysnchrysnPNG  IHDR{C IDATxeG].*i Xm+Hc!-IUbZm11F֐Y"(DKLXIن%!$E uޝ}g=s̜33s=?|=#?+!@`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%Dl@9@@ !  Q@4xʆ D )`@%D~) !zNV ?Vo.JԱM``BVC DMua ` rP圕X`px($穉@>ã y82ua`$Fb4pxhCa>< 3O|A;Dc< v{5Y~`?#XݯN;>hF|;]wngcx +qQO OkAUPu|5 ~?@dkX~O>V@]y4;0}.&f@ _ET o}4o~_Ek >JKT(ϖ9+K6}B,`*@{8y>xI~ߙ@0Z|Y~,ϼ+ux`R5}UYVMof2+MsoA$*As>r-7J﹓~u°v/{r¥$y>"8M7<͡PT ?eL|ubW~lo`L{+zc<oepTQLGoCtoźw~ľwƘe:)!N,lu~N._n9X#$Ma?ﻳ AĨ`5_,>愅 U%Z+0[&YWe}Ϋ4'_ :F˛ G2w;5W<-/n4t|jĘ3 b:N_e_q |AD7+}\.YW 7}> >\:Ik}gz߿k{% l\AZ+6}u,>#'NjvaS>@}^`\4}?u.w ߧCqMߜy|1udX߉#˝q#Okw+VOp\}Ņ}GQ}\x'Ve:~]Hg[.Z|xw i>15g?Z>GW箜39O 9y=M?1GR9IZ~w } o6}? ^gs2\Ꞿ?fy _fFKTy9gh rt{ٍ' A2(|ٝ7on^96qg\մt|=A}Ѡ\vE&\p'1A|74]{zΝ:,ic#}dPK[k}3)nط~K~߉~Oܹo;?[klow"e`v(u}J2׽ծ6`JڷkcaŦ?2Hz!\}R4;{;w蟰oDA20{/$y(W7h7Blto};mǞvNߟA߂Piw(L\3Y+ M@ *j/sH4-5X1/3xŘߗH= ɧȠo? .@Z2hﻀHw|Bsay N<ؼk$j6Fm~Vvvw]k?~L`#onu˩|k}9#L*\nN,F'd%H :~d ?;/g3|<ʏ N"8g ?);3Mdws/?=!P-tЦp>rо6BرߚO 9w'43һ%MW6/'wfG/*#  Lo`̔禜}" '@|J&ҿq?G P.Xʬ2 Q'l?߂ǜݍ㷔oێ?~k|EIl|!pL'K@ @!0(r7}G,+`:8M0L>ya H7x;o}m#&Stм7h{whwsa@Ms:;->;Dߟ0صa`U›6zsoƏه>~WrGnB%j5`c՛WꁛDkx !Ue~I/ 1/`[HxC`Y &gn:J@M3ܸ;a[4M7gL 6`fMd@M”l7}R Kf `[.]aRn P [5[8XG`Ɲz^V$'lfHY3k$/ڇ_'ko[[8ZY]`VYpͻ!H`t#ZHj}?$, 2F4YO8( oEC"(Z] Byt&l6}G־ᵞpT +ortމd?y~cjEMU#߅є=Қ`ʕw<4}g>;x@D ZkT8Yjy;s_tC\̀J>^ZɠU ݎhݮ^tgu{% +z|=y8?}/RBe3 # % D95&&O؜{<տ~DWhM64P~s((@d2 %j}1\|pz?h *3 AIo7^c7^{$I g6o({5<wO0'L߷Y P@ 1;~;{j[ L&e–4% !8/OL};LLDaK9o0)>Օz[&#p@־c bql 0ޒC簬}?K1Aׁ%/KD_@#nFM[ & ڝel@ :~>[ J^Խr8سOq&0C76P=DrL13,WȂ:w2XyJT*[f:U}'k`~~6?xyB߅ .ZU {5@8Ӏfc79Og}-&Lz(VfmŘͳ? KۚLj`V95GuݱvUr]-]`koy1+@ >CXX4*0*kh VZf0p}  8̯|#6`~;#u _-~OdwMa#r(`#]ԕ4vQԀ  ۫e~;ZM WL(c@Jnv mO SOاW蛪Zb7A߆֠vg#[&`~W)2&Iu Q~T"\MwrCRPeLPW뷱$nlY hhɹݸ!pnnv6C5v'$+7GM;5'MPii YkOnA<7u BZ n6;M <ՓG䆠̆eM0m ~ b,od~@[&.>L5V,x(@ [@hD1AcߒN'twV%]/o[0V5AN' UWy3 @]7 Ug5-65]_L~31})X}? V }?kA-[ՀL l9R}7nhMے EӦ*{]펻ܥcnchR:uM7}78UZHPcw3N<yU~4𚓿c=߉IO >4&gM-}flߏ@˭?Ԑ5hL-{llޗ@w6}r7 Y?h $}G7ՎNuC٤&`4t &fTGH/(oҍ3A %)OVҹDM߷TW0&p2*@ڧY~埙sH3 Cb&@ɀr  X9p#8,H -5(g ~Pԝw>lAؿ@`V`V~04Jϊ= 'MEnx/b}?h 2JC)d TJ {C>eZ.A ,'ڞ/I>W_vw%GλX //|BCloϊtEj-KS> V ,uI , ~{fOdh1c# !W:|iM<4^V !˲] thF ]&l!,㆞*7̙Ӿ< uUZVR@}?pI4`Y`bL`B}f5zv>;ȻB c@w.Jnf}W]X ],@'PJ}U U߿+~?5@fcI .4Z S1OHXl)4`r)_5@#v$$PkSL X@ w*CK )ZqwE CO)X ? \K Xxzw#[ fP|PIDAT H~@r( o>3܄9??ɤy40A`-5uN|@ <90]}؞?XN $$`I$3fIh#AV$ Fo!-;,@|Bw. n 09!(Kh[et~& ˭@ X@@Z640u"cI\̅gNP^D Kyq+pkhV'Bi  @wL 6A97RM {'@9`O:L@sH۾F (~(sxݏϞ 6p0!fnhRgWKLζW4M̉[Z9@._r$ ؐ|F+C@HrQr h@r^V,HN eԫ SFȹ DO{1 Ӈ!DJ;3B\q^@O~+@Ϙ=$9q˼?\<\ zX.IJP%M~̫E#b&VS&V=#D_-. m?C N )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j )P&ӧv@@!e@9}j ?RnFRqIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example002-expected.png0000644000175000017500000002105511664235333027003 0ustar chrysnchrysnPNG  IHDR{C IDATxo-y]nZmAYXjQi HzP!DDS|EP$A#EwW,cY+6Ν{|̙kY3>7=gULO 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^* m  (T@xe @@8 P(&@p @PPhM @@+9@B@W6s Bl 6^x;~Ff[pFfb XR`߽e~M8SQa&XD@Lh't?\[x֧fJЪmp ^q~ƣhluᴩ zXC1\?Zߪ>4Zwry*HVXs E`T& ݎ1p*idV[z^gLhx˛{=xL`0} W7\K$ܿ^׾j$0֞[R}sCیїro`ImǺ&=, S]75<^R@,X7b< N s\/|m@5 @P9[nykQՏ'y?fjyX=Wf};︵91Yv~C<7_=rH3O=O/$0[;ΜuGWKϬ.og曮}^tBy(8a Oq#~?c]}O}+ɮg;^8)#мd`W ;^rjt0G1TWvvza&_$Z@n;)=o[+>l vy"7@l~WgD 0A@8yD~ Ǯt`02WXZ5D@Q)r`- 4tOM#` @?'[] `+K{~yM s@ ].#XC^*@u`Lv{M7@ ٯE@C-9@B@_+:;:nً^8k}2Y:* f-}?ZT[TM) Դ/H@YIں5 QSx0 ZX vG|uGh I$v"`*M '!! ѧr~[)t{@9c3MCd&j6M0i &MV8Ѕ|/A +wVl]2; ud CWۅiu]b;;j-`Mq¯2?^. .7v`FyQ_Wvg?ghT@)PWYYX9_ vd&&aZ@%`ew.ڦhjx<^x;$X >a]ó׀L|?[# (ن[K -Xo- A\6n|` %XC=1_HG8 w`ٴS@txrFz T6 N_'?s73ziڨSIzyѦW\}ti!0J~ |4IU*}>2j;n/$p΄O~h2ݯjs:@'' T -u6x[m1ٯw̹j7uW ClЫ /^Ճ ~.nr5 u{,u`a~/}CWyg~})Y 6g|6W|BZ2b){)ۺPQot/4 g=W{)] ]m#&ӧÏ/l\mzn9f?d?;i~{K>%K5/ٴ@z7P`ӧ)yg=d/[~'NN-NSl+S}g5INa+ϭg߶2kNYa`u`wΞ<6h,pv% vծLfZa" v^Y , ڑeHYpgY3G_ PX}upuh lyMS@Ta`Z8!1KdZ;W^~WpϬfv4$ί9iyajˬ$k'ymW:bu4 M+*d;׀;&)m'V~!hu|tll~`c t|t1;0·^O'0ֳYnZ> S@ !6 >c`},-l @`B0!f]YH`' +>V֒wA`W7\.}TF"Pb[wfAlqJs"pϫ lLXC6=ldr KNl 3l=Z1HU@A>0[_ [B?-t:@ Tq=0^x}\Y,e;_U@.P-DN.wTx䉿!O3 oh-(^^wl}\TIP=2H P*n0褦Y,ivڼs_$ Y /e IPyi>Rی[꺟`hxęT$ 0OG S]OIPU|6 m*_o}\W9 0Aw! vѦu&q_mGzR 𻀺t51p uޓ KimQ7||q},' tjCO! j%_W[#/|m@gWs$ A71;^덫 {@5>JmSi9W1pYCW[Чǽ|=yenŸ|~ЅҬܢuo_{ZqM@[.L}qoȀS]Ih}|uu 5= ]~oJFx~M Ti%0nkIxׂ>ӟ|nqBxX|F ӥ!2#bUn&x?. rz`@9w\"<@Bqݟ@@0 }.ӛ@_bs ȚM%_gV\g;{xwɼ`Fo\gA= =v͜ t&a?u, v*Ng=n\!M\E9O՜ SH#@MB~ mk.!po2Z@n"F GH P+7%@ {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> RIDAT1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ad;> 1L {G@@0  ]@d 0 V&@@v#@@ . wX}@c@`  @ a @ ado]=8s5gܹwv GTFc@%9 )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ p  l +V ?H`Ι-6C;j߻;o o=~bP4MÕR!!՛B`vV0{pL?oWnm#E34cJ@eWH*_h[:@+ (3c|_]T>-B@tl1=gn:.% YӢRح_ލ.OoFjIVlR5 Hm๥cWxȯ35X6@`>f?yNk5`vW~}3Zﱳ$3Wg-$ ?x&Ck5" `CƢ&`|tfyK_s3@G XQKIa!?q91fN5Zw\8S#"`ºwk?~@ T-RFT9[!,φ 09 v.Lm?r/' I6F!% q܌Dx= `9"/~tap\i8IRhtgr߽SD@z-H&}]J]g _W{w͟z/gurf`^LIXN„EڤfCME[% /Wc֑MtSg_JUIQpљ=c Xhbv J\E:ԇFo\}_B@km+;m?=e X1xՕ[)0poKNɾ}AkpڐaІb,k"~+eٟOe \3) 0*?<60l{}%2XMhQ[bu#B 0 00ip39ozZqiTU@E0WR*/ڳۜ8JS'w ّs.… 9H!B5J4E_9pGPp DpP[<ȏj❷Ly[!?+BCS&@o7_q2pL~_o3cY?MGUQL #yvG8{1ظ93yg `T$쫣ͦc/k _ѩs_}NY23)ǟ>ۊ*$0!r:o Yϙ 'wqxg^k*⦘w|f0[$ `VIco$.ّ֠S3?RE`wqked k?kL)S`05a_K qD6H_*&A$73՚ x~ٚyWN>qW.$Jk{yl4?3F ۨZ_t=O??}Nrّ>wr2z9`$<#';&% `R>F'r}?׃L \N<1͢UF <~g^737NٞRjL'HgղtfϫTu_oJ얼eEPF*7ާkb\@3Z]꯵W&oPS/e Hݷņ#Y[UYkRQ`Kp-Y3CH}<_7>{iO߶{K->Zرr%ԋZr+JD.nkָk93_v~ qz U`[ڋEj߻;êMw/ջGxKꓻVǡ0VFe򥭔1O>gwȢSO]6z c"& hfN/:kK[;̉ӿxô~n1/d!8q[*ޕͦW %%$ڲDߪmDYCC56DkkHxWzUtw|*ksdF!)K #fPQ\B*8}o9Y9(V`fV';)eǎɶ[>z]#9'_|sΦ{satRf0X !UO卒mHG"0wR32CAf8Q9el`Q:1:plm(gѫ⌃Λn-K,}>޵_h];0\^JqG^?} L\@ x]1R 85XaTto}2WXoq/B7]RNԛT q88ߍ ̬sE[x,w8AAQd@ @ V#r[vONg+ktdobWJb'YEUSf 'r`NKnn2]S&s(s&3'U7i,G&O|}RQx!@!EVw&y*e,o#~m.(R`0%p̳ktWzu$'uW9tCdw_a+qD{m3OGu__W]k-lu/ z٘/Ľ[ [Rgd5\8ɺR>ݬ.'\FOK@ 뻺 +3(ȍBܗ%]:zo^%?P#VO?zl#,8%%iOr;?(f;F@ga3KpW hkT41@nG?4,G[2=1okU=H7^Z/r׋eP)\r,Z.ݞv>|/)_& rg_D93!n쏟8ك @,o_CƅK@?xc6Y֋jߘuq f7ehLUۊظ]7}zGe)dta$xJpt/7+]@vq)Iʘs#+6ml^֞x2:25zfm73Z JE*rrX`){jq] |^IV ҊSTW4|eT&c=B9lFgmƷ ]vGU)1=f3XChr4fHV#xT%}rC姧GB[V!O^nk  ^bo=|Х\):yC)iJ^yVn60en|q@79S-}WzHh>^~'lm}2HȾ8 UCIP7D:I.NZ]wjjY.'#AlYoHlב<ΙxD(O8Iord5TnYk*c51jV[hղՋmLY5jdzmCdžUqhDbnk8o3+'CsfST HΛ'<Ҭ1.Xւgd_u+2H_5` ʔ΅7zj|.s̅sE:ebL܅U $@ʍF)gw[퍗 >\kjZncw8t5Z4"X"b\8\b,NԦ0F{ё #T[n۫L.5(ʊ'F[>_V`R˪F'ȶ́ Q@CSbG`n9$Kꫀ}/׭-@SsZr*ݷ7z/2|ۿR`J+2GP?3ξw ?z<хr_OUk\?U+Xq?^RyE{o*qd"%WoJ I!`"#_J^d$H-|rjzJ|.Q"^( R6PK_$@^/ĨR.O\-SR3O&#)[}BGL z!$/ 3\WOkyU]񎡖k it ?zq9urh="叹 ,^>j@XcȲ)Loh}˖+rIKeW1}gh[֞P*cPYo33M 0/,]87mvw[c`U'v׾NSjQ>YLop!Dvy,csoQw Z+-~=A7#[oz2Iڼx̲ /ȟ:ͷޓttOuPD@Jؚ1Zo/?xhZ|q9V: 5W1GeE 0j#Ph813 +X+k"ou&.t} ӹ-W<*4_ދTܘ4ua~b؋=ooD~II,o{yu ֠mZ~&P?[km֕x V`s ̰0:Yuɐ5,b7tonQڐ_ixsu(yٹCqwCZ(6ObD##W$`e1]%Ԝ1^j*EfWy[gO[Bm='/%GeЊ7#{-#NnRR{-d\C4?¸v<*xgCLEw{ju4)G©" G eէ`Tk_!!Ў(޹q#xhBA5ƏLjV2"Ϝ7n0R?Rx[f;+;(a?$% tvׁ^3!껃%98^6v;ДWpu/M.ePԕRHzR&\-;/HYv鸝5|SxVNG/8I'· ̽݉KN_p5N1:PlI꟦?ytȢJOL:N-O¶mK)'dY-Dl)nƐRx#x9[RKLDj'h|#x2#J\p` ўS&Ў>zNwXS̕r.$*7eeԳ 3W=Y욯޳ftضvBfl=THDzxpP{|ZmJ ݚiP f+A}tZ:rl)ݮ {)d.Y{3ZˋwU5Jȱ[ޢBuj7M9r ,>+:ke{i :OOw[leofoOuX@ nt>4n|_\lV5oh&ȇ!"(Ė%Б䳗,Ni7@o9k@ECkH B`%uu7RWe0ז=q8VDo(&U2_ui:< ;~Q::>LOL)S^lH@PQ%)}Z3;*p.&ǔW8\(n&w[%9M'JΕmO\G^?8%@/ =th{bEb7*nj3nyϳ>4,@':QnENXqdUf.HݡyEg2@ [E8 a2S$a'WV#ўɾN :1S"EZ}Y|Ź9G`0'w8iwKɃ ӧ*C^Z?wW_#KI Zi5Ҷ[镚o$H_5A4|z)ٺ{xS ,ȝ8suF xɐwXZd^3̢jiQ+7۶kўuVMJe0똃ս3K`ݍ4c/qk]81Fwwh,[Z&tQq}8T`nh? h23x=GIh+JTPET_7@!@EăIeB;ACא$`]_pMj@+$3są1~ Wzj"[NM˟5:'Њ1ch#UF5^ݿ=x8kbNĞwL4BOjVJ!f=:=7$f{D?WMå%s/9F#62w KM0xiєzemD{XHIM5=K<UNnnؑ,nUl~nCG{]V@%иp.Kqg 3'5UMe%ϙ+xI995g  {~6 njuʕlPA'֟k\!t xrYz#NZrս /̎inƘBTh@`O}p#Р O ~H^b[g) N_(e,!V7NQ D: .k)N:~f$Ȏ)ٻ7ozt鸐@ իPW$R,1Rݧ4a~AjDJ z[\#dhݎJ lYbd-#[cyݙ9mfT!HV Fjx^=ۋtBkJzaJ5*~w[jԓ Q" 4`csI?2sPNR:k׭"3o %^vvfCU> _v BĵUb]x +WO=B2:}H1hǗ9[/]?!=}tDrZtS[+OyU\ ,;r%p>n'$лH ,Vz칫!@g@`~]8^lI;KHeʬC]XoWV"ЂLU}xp@\fxw- K/I@`~-82j))2YgdՕ.l孮<-ɶN @w e6EF5$;u.j']]y1UuKɟN  N9 )*_úJuVrT D`^]U Y=D4Mu=B+$вuМf37,c5%П I@`miR-sFNkZ5)(g?of47z ][} J _,X9V޾Z͓ʳU- 2-Gĵ[DmׅdwC$]ci7‡[:gnl2K",x+tFj@!p崸\'|8}(3Q `&NwM: hjrK*z:mA]06~Ci89wZ!Bj!h,huo ;ANx8k!RDY.=/22O u9S . ( ZP ;#葳tTf1;A9$5 47=k8 )| M!x4] IX^ |w{{N~O(h3j6Vu2w'վȻ`-Vp J4P| [@ ߧ/o')` `AOt^:ߣΙ*:,$~-1+N6~?^w! |&,$BS˫l,eBOfwg3A8й+UwϠ0BPdBƇԻ*TE?[xJ >XHUU_8E]@`<@QqE%ў6@wm:I @]<tS](ǩmqB܅&!"$X#e^#2܂ 0fϭb]K6zEr 1sRBV!:uIO@`A8K}|"t@s@k2x{%U/bq܅$лHA: _;O  ,h7l6[;fMG!f5W^YeA@[3wTJm-KO1@`%\f;y~4 . hkF`j/O R|"]@`+z w} C @$?BvOM(T)X f!X㵉h@ 3i`g_{+H'·@3Zq?(]35@) ֫lIÆ Vf(5ax53. > 9ӧh @s :$C$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$KHEEIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-concave-simple-expected.png0000644000175000017500000001544111642654340031521 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx=+WنaLA0Rdd"'<#π" a$DFl9VltzKm^k]諭 NLP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@JwP:x&@(;6 @@ޱ  JtMp P* wl;@R(c @@ @ @T@Jbo۟N_}A 0 놇~ c+z]8p8W`I3(6}z~ ]νg-39@,ZvmI.&E_6obp) Q'乼Пk5=8̴0\8VU9&Om4_W1{c^7=ȟ3#ou=b9XX$ +AxpS<b_ؕ BB@ 쿿;ۿk @`wbȂp> l4i%p 1Xq8p9\(@-=%s18oV $ K*_,,*<. wgCGz(˖B(_\蓝< >]bk ok' W%RwgTc}r%PQ&d`XOOk `(+g`h$]i1{%P6۸=8^é4RЮJ ?TS2pX |_92ϫ?X_9TqlW8}\) ]0=2ϽO'S%ufoUN x׿ * x8"]7>˫ ~M /  џ=+ ]@eK 뗁|X v=zݼ<+d`%Cȟf;\i1`3?X 5c׼R d`늧^,{\iU%؞+(Ah |@R d8Ț2;Hͻ7Ӟ݃289JؖJ aCv gZ3,ec%[d a60]A v5*g$o2]2x U 3(J09>ZK%w= '~hÏ ,eT%x 2`k/@ZoëVWo܀*K8=X Vm{ >qX`Ig (sn׿%&>L@6-| >txP-%%!/l& >X'"G &@@#ШKo(Z@\Q^@ U@t|;u[;,fؾo29&>!@@ Тmozo[\R1i@i˗m/_ <. !oA&/  PW@mlv^ݻn2?,0d2Hd%s#& < h* 6dv%۪y` ]ǎl\HZV?Vc޵>$ qIa#7I @@SдeʶO/Jq D! @ î؞w aZ)l_vzEM@x T@4m|S80MWw"aB @ ٷyuOSX :C[ϐ4&7I @@SдʶO2/ "Q 0V@44j;Q[ﶭWl0[B&sՏ  OQw6d^wgs9⏂ i&@@l?]ggݵ^* rmv 7I @@Sдa˶' 4qEYV,L(M O@IVwOѻGt oo@iCm7&G@uJygQ0`9 @ чyu!sV%|T& < X:qwW $@@'ЩajTKD EnO p8  p8KnKV3P C@s*kokW1)` A/ $A@D9 @pz[67)[^PWgY<f@  P]@TuwԇRj% qza&X* rY<ە*`N&/  PW@I8s`7h ZĠ"( rw2͒[JU@x T@4mزm=\$֑|x4M?lpn*Ѕseyx4Ml-(,p|Zr  ?R.=\\R@Ԯp/Y.  @hʶ_1qVV]1'NFk@U@Ϊw _X)h{ }@\A H4S&@0B 8gi;yz"l\D`Sڝ%:w_Ny@xE&H9`Q p tϯ7 ML.z~QS8"N@k  @`h '5@w|M +3%@P0` 8iKp)N@ M&I` p 4Pğmbr v̎4Z$ha.7 82a@֘ F'0D)F\ p ˥ x=1#,K݄a@ p) .EK)..% Bd N@v' pNv F̂r7|~?Ƕ3t Զ3 3Tۍ]\B@h" _@7  8:@vXSݚc17"@@z h(ag,f6)P+;H:'@1pϯ $$Ryz1NNo . [@v*SVQzL@ۯT UL8K#X.h9y R RS 0 m @(Z5p Ԥ33TC@ #3$@0ՠV 8Z]^R7c(V?̆"/(/ ʷX-h"hQ}p ? ZbBX# 8 N(`9 !. -@v+S ]-j+@W$> B@hI @`Xo& 8[nhP! r -&]@tO@[ж /+lkG&F@i4z7&@\w'0E)r r- \S1cLǀ@M@5:*0`=u`; @ ՎHy~4syD)#j~#:u;FNb,tе!GR<gG[(I @ H0%K]׻h@: S* v^ l4P @ ۻ3w 4Syk .jQ- v{a B)Ќ[gSl p_@7rDuT->@ݟ' γwglGOo N jЪ݊%@x/ylę ])лY?{M?嘨Y! PwOlYIky؂mUU;-$Cd YLæ)YqvG=76 T.$p])tZh QΘw}SwE#ШJ%`_g+2v͜  0@@ @4T@S* O Wvdݩ47Pekiu d/+L @`X& osr0(Z4>7I E?J'CiB  Y@|W`ڧ@Se[0}|K` eW$>,P+>5P#@w;X!`B=8@SU\@o" GN ]V#_(@S Y ]Vc8h]E?A~d&V@mH} d[( b" H0 DU&z!8E@Ml6>j jg̫տ\K$ҷsN:w_qC#/`rr7$@@ f@S Gws\_ @ +"`_ڬ@z G25hhe `?-=Z*(jg++`w}f.Z$ >q#@S R VV,"`? dX$꿨n3B@P,?Kb)gj̦Mlu&@S3@ĮSF]k>gP>}@WS S@n{LP I  CqS qy B`{Uff oSS6 & uT=lQ$0 ְ. wz dp_0 3I#`O*) nu@ުi)'(J @`b b UΥS{@Nof}9Q@L5t%nM@x 7h1_,D9="UHw&7m1& Xk_5&W*`~[@V#7 x4 5 2t l~6BoY:e# XG(#H*#}X%#<2QWAQ% WvVqFJ&~[).0BH( 6͔  0B@P4 M3e#A aL#Ec @ H4S&@0BH( 6͔  0B@P4 M3e#A aL#Ec @ H4S&@0BH( 6͔  0B@P4 M3e#A aL#Ec @ H4S&@0BH( 6͔  0BeU%IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/scale2D-tests-expected.png0000644000175000017500000001704411745120722027541 0ustar chrysnchrysnPNG  IHDR{CIDATxݿu٭ 9&fKC}o*Μ)R'n9c-!/Il). <˗_>ޒ E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6~@@@?w_]_%ݗ/\5q 8 4'Op<[:˃>eeKooO'zJ*Ŧ8?Yr;i?!ճtIGAZ'3R_rO]aq|_Fϫ+ f?Yj6ۂK| j / xTp*w% |hh^Z@m% +-G_sO_|I>?߳v+gn[@ۭO3yFotn0f=B0- \×m&A۩64tE$+F#izI[%ATC+ E ÿKW# p~'i[ TO/I%p? S3wқ$Ļ_׿cތÅ ̟۵3Ck._( >`wMY_0)$A5W`=.B@lR/{$}"Wh'%ijI6}?U lZ;o6XrO<>q*?՜M*_ケ/10@V=Cߏd_%^[䲅@o%A+yZ`n{, z  M&x$Xy0 h{͹!^Gd|D`g|lj^/; _ !je렕@$/E[*- zKjֿlF mzV>K|.V@ln+,ɗ# l쳑{oFk?,bo}z1pWI]3ߓ)]]H:՘zZk8(Ъ6P)mpZC%Y0 yWrN,p^=M)s!Ƙg} fgܒ 57q|+Rwӄd|g|G[wT&ۤso7gQ-n? [H]T2:(4f^熦IUmˌ۶ ^$h%z] fJ' l̐C,jk|b9ں=׬vnvϞM#j}?.aM䷖6jV;ŀK"}?CaZdIriJu.in  }sIpޖl'zC~$]ZrN#KK?>ܮ+''Kk]3ȹ]:"էAh7%, hK E^*T@߲ѝC@$7G.P8f>o[ܙ<(L?}qr h L@(S h 9$@q+4^z+T ^@<6 3Q 7|z; ; hBY`l hܝE`۷n p{4N'@tx緃^A@8V@?*u 7 hoz)qmխ  '⬍DTߧ @@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ nw4kIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example006-expected.png0000644000175000017500000005450511664235347027022 0ustar chrysnchrysnPNG  IHDR{C IDATx $Yf4ImY 8ք`!Xb XaZǂ8 &|ư! ˀ- l)0V}}T_|UU_w^3= GϾ"$@$@*~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)*K+& *~$@$`)KbJ_ EŒ_֦s?l2Lw{Ҳh6';);C'nb P$jFҫ>>I:*אk[?zy\A{ݨrqՁav!vtWA-j}G>i@7C@P T]Dmx_:zՇF9VG~HHY&efGvٳzH\Q'JP=t/·" pj0f#ic+| G'Ğ.~lTQ!?Vqh5X @㙎IhmS[??!dC_0[Y5Dӡiv }x=]tvVWrRdi9ڎ7l+$n*tL_|N}2$'BWNPQ=(m;j]E_lW]e3P(ܪUP.t۾+B9mnn}2FF ](鏐$|'ߕ_y7u,yx}\L~?ߺUpm\^ߔ_r8a6h+鏽 kqgo K[,@>n-;_RB >'' 0"oZO(Ǜ F~Z݆=zqM>u7Sڮ|0MMPT,$tȼ$vb{ׅP;`ɫUD)Qa!Viv(o@#6'4>zBjTcOIxfsP*njbFTqdZ~ߪb'*5İ}߮<0t(+,v`׍* r_M GBM0i !wށp Gft[Tb8> X9 ~ATB'7S{ٰlj{" ݟnh濯 @o@H}δC4x%o*?Ї#S/ϱ?+mpwWTB1$ @~u1ygmx|h=H J>$XA=2vP}yf"Іu_,$#} C/Ȟ eS cSk :H=HJI(N~㲯LZdL_4~+OP?kչ z~&2Eh@=$2w_So~ K>Y*^W+U(tO*abkNNK<3>=V(n L.b<`ݽ>ȋi q UCW`ӡ^;7іTz=`-U0>p+ at{dA_gg^X,+y U'J﷒}T ɥ%\JݵEcx[W3KJNZVQu*=۳xx<}<#U?&+]]'=nNLUU+M^WvaEnV ];\Z-dN܃MqSLڑkn/e_RPߗ繶\8 w236o-uålo)XRVzz wV3 G2GK8w|A.ߧi̦? _oZgoi4Pv{eck{}T?Y,9)90l79}-} @"v5TYwRM3WAwzlim M.;" >@ꆉС>DpWgӄL7ץ?v>ɓ]8/At߽@6=tGʹM#{[B$Sg/6G'3 ZhƜM0 ߴjo"ĆlQ6^uW6BL'.Q 3%YKoq111H *3*.4&@=q.B M=qtI=HHnCW +;FH yI[X}-E8=/w. }ծ 'Nq$Lѫ=U (L6`Q%郈2>@qr6>\럍(;P@f/5uժ" >brdҘbλ:h|nM7:l1d-_IQW1'amu>͚/*#)}i `hDHJ?s= DG i!k `Vn{ǦϜY >t}qEg D@$Jh`" p$גG< 39xyjeƺc d56TE ?,MJȌ=J|ŭƣZD0SϡTQ!#pytɒP]FFqۆ>FVJc-IPZ(Bst:<6>b'H>n##T9^y)U(B@q6w]#' ;`4[]hn">GsApCEO{*큄 'umǑt_( (ZyJz_uW&5GP6@* QxS ]I>@)Fqka7!o?Q(Q+#6>\빕oDZZO|Ujw-4 4:Y]:@5+>Bl^XC,]_oeE}Wܣ\Q  }V-o}SIBfJkV: ] p yQb6TBpaki_>!'"4[Ͽ>P4tI|d\ }'ckh?Lu?lSA20?\e`D(JEH.,ȹ0>: :qGio B|H2@c<@*1bJ#NN5JBA]< owNREBߏJ~v)eBEO"2ձ8[N#q(! D%lA0Z{fv EE|uò hPF#>@_@Vѯl(n AW샹ʲ֕+un.s:y%XߊgSxQH""#۬)p멻eAI :eb"SB)8wbqbvlD: 62Rm-@oC {bV|,WFx~: ?|Z#"~] tfeъ_H\/]_I|1~f>2>}/g6&4.y'Ouep˯ywԋ-=E(n6@ծ'­Z'"dpd(*50#חq(\ZmCP  sj㍣ )B-!QemX-ׂƺ2гeG wD=EF**#-6OJ)4Ϛ;GA @jR ;H%f>bNЗ*0.k E.ZolȻ tWO9=sEw( :TrpP4,S4N1Y P8QHW1q=Wn(i<2T&, _^ȋ[Q<-B_*ZfX:72"{ߍ{!gJYbFHzlWQmi*%W2! !K緼Pwh4tl5¥!JV }}wFkC$lyTT]1 w@WhEW6t}#+3 l#:`pxn;ЮDN$1&;Ejxey7ĿVI|pӅ~U@YV H$`z(Jt*D WĬP5;߫T``igu#gsdo'6зlKeʲȠ|1p*8(bWmn-m|2P&B`80VOv&#(~}LofSb@7 Q[b1. ̽ztxeWbǦ@/κ0]^lFQlWEGSM>ܦ3@  P،5}_=]Ydg ζ~p8*Rt?XOyΒGq773UQ/eHK<2{ԯJ _¸nҼk>O@蝹?H1]+bu'wV#a9qZRv?~B_Qʞ#ˀQM\R%p)@% 멫;R@jHyx^S%w/Hv U@9ٵTxr  /@I3k޿-6۳ % }[H"}KXA_ GI@+.B)12$XX%Q(Uɉ UWo?03λ&&2@!"]*t}2Uu$I̻pʵ6SV<&: c66?/|PlM7*7Ag===)*IVd(*ne'VuSáptQN2Vy7~!=nwZHC_6~-| Z"U-@4)WҔrq`HU^9oRFޕ$D ,:d8aTahS~SD .1U_f`S"r[N0p@Fa32ll xW2iGY Ri^<ե[L4;/R+)re; Xj!@K|omhO߼&K:@בMA c2Ǫ{_zx0^W* uԁ9j Za_bHŃز wT*l*V)כ>~k=O b+<:@ HW5"d鯮08n@zCtNQ%w|zLhׁeDh8z'`Л^dN.z=m@z}ݺ2@.N(jpu5 -`hj Z]1[I`s\'z=_9k}SX:JP>0txPҟB߀[ 8Eh*7$.Z]9[*`xkJUe4B( HnQas';{=8?$꯱98wzp{nȬ(V=ht< e4KyYDdžfAJ.CF&-HfO7HVSA[_Tn=]6:C@:ܱͣ;^Q[yu~ ]$q`1+ #j c9 @+2x`&=f胭 °Սz5tqvfUn]W ]> HE+- e Ԗ*+_a:`)01NpRͲ3 Vv_I@l BR ̔(H-%BՉ7vt"6ƐrS I~"%ȬЭ*A/PfA4V/g4HZZ(%o`T@+kr9QG#`F3W, @]@.Xr Zn(͛On=$@$|VXBW(vI@ذ p8缶|3B @@Ozv=\uGS>" @b&Y{6gچH#o.sC$@@AǘHr*vP1 YX /R[2R L,*0TP?DQszMI05_F2H_c_/H rީL {J Bm%аxq;ǯY~w*naK5 SW6Ƶ0[v>$@"@઎;{|-W%{g@u@@P F"@-VK`E5%`jFU=p|tu{p7%B `] Q0( @xPxLWj0iibYuuw1r T>P,EgIN)c 읻3`(@| $- UUf~vv;[(Eʊ@Xhz2pXdM}})==8(~i{- $mˀ:.ᙙ1}vI׹ʲƞgl @`C-P۠_P/O=x/AwYiV^*_e @ ~2p*+Lc@#xծ}4WW(H$d#<آb@$x}^8\܏M%"LdP$@$М@sFgGk5 `cƒ&V#zQyY0}tŲ~ `΢5oI X)C/=r@Ce|w=AD: tD"Nˍg^:, Ņ}%*/ߢ; q_[q506UE`PJ-@j;߻_o?J+?uwܟ[@߬VS+d: p ~Ri5]ن"Un/Dē~E'm;Z p9ɞt_s`Kmǘ xp\¤XѦ-$NbN+%y10`^PQwu @:|8/Cw ҿ^q}#?{􏙀u @Mb;jG|twWy&`hDoeEOOE{1Dˀ֓Y'8cZvh[ۉ+ᥦHb=4!\!VV'6گg/P(rtO>t&wbva|/VEGKSw-\ *)d.֖7Ddv.ꀀUUC5 qض Hg@'*? DA@ qJ: U@i O# <D %\ 4gHXFeK弳 (ѵ+hEo7> G@v}z6ӟҝRl,/qAI9q}']v^[ug#!`bTr#8/r1fB' /敡G[%`PX3|3Yk*u?~szfl^ V+?&FH$@)"AT⼫4nd=_7|zz{5'KssK淇Nˀ-\jKBMĐd.6 .7˭Z $ ͗; %iF:@ÊPaʼnx9@!%*4C,* BQuH]@ uba$P)iI uSmdɥ6+$:9hϷ ÇN tI@I) (_g8s8N]V`ĞAݟnhJ`v6sd~{ョvD϶fS]`H_6+{@eʇ CZKx%ۃxqjomXD x6866UTNದv%|0>*@B_?!Yb6H "2( F;66NI"o{89ٱv0R[Cf塉i@]@ tg0je{jy:GFʻsMgFwkf/r=(V'Zf)@R$*<Ó'ACO𞱩^,W^iܥ׼O}i<©K\}lq[,a5Np鯁I$`HdE$H"D#fIf/}^q-s@-.填= EB[䛧{ A#I-G* :9C/pG4d{zumQEWGW"2>q4'iR'$t%.٣*rkI`ˀQ5$v1Nn . {`mד>%`.?оO;|061?Og WCJ`%?_ޭJ|ѳj]6ӆΜY]rMƘT:BX1_ PۇC:wlWxToI=6f_H Qᓙ Y]SٿGKĵw1S7JO] '_Q{z}#ؽJq#ܻv׽iNOw8*rzbi+-Ug_,ϻQ ǞvF+;xӄ1WhL@qNp-ootKe"ZZ {6HI\6\XWh76"scO9HeZ:'}i_XL^OW濗L|V-UD~{k}zLºw@ߕN~77?}? 8w@cgxg1H4Q6VtTm /OwZGёp+#?krA7x傶S[:P)яFH~\y#%=  jx/T:j?)}1&ܳ&GѨWd`mEw62NVs/&|@&&םe_hR8fe9uȻ+OI XU BёC鉵F&BGi_J NVE 8 K!njkc~ϟpw9=C9;]O'`ZR0XFJ='́#v/jOFgߏ=ı,15B}o={Q2r0*v;^W?ζ*4؟jNcxApIBΖXOF@|D$@"@y8(3   E`9KR&Mk"2`h߭EWťP>td@ i|05yM]o|a§$@2`AJ O c 4D 0( $-5/oгǜ> nC DH B:};'ǓS!`P5y}74fegk~HH QW}qa73IarK|#' J]@N]ܗz_""   r?hJ#ܲ>>!-zCxC$;.6S@o~LS?w& `S ‰%}&"NUv4:g~VH#e5B#K@3+ CrLM~n^=HH 5cQ͍^F_\٣IDATn  p o5% DhZxh_ 4? @S"Hp󗜥n/+$tWF-w0 9Գ3gٹ` u7OTS?$@$=5Խ̴){9\ $-\N7t 78Ên_tiB' @PO n ?{r6\ܔ DK]@+7*E H@jyRM @G hKe.㗛$@$%v.oZ` Jӽ5b/%41k0$@1X_ek 3-#B;@DuF' ϷJ-t EOпj6_jM ZOiemuCm9ÿJ[k`sz;4RW6frm,y2S?Zσ^kΔPt/ÿc0 K;_M_S3&q+z7nHhӍ'$qfw{ۙΟ"oT;x{sdDɤī,ުdwk]7Tt@<_œzRaOe>EFz=;Q{h>PWB}A1 BߐC#??x(g,*FjPkD7U :]V􎏀!0|ɧ0%*J @_D?V|m`ؐ 6EcpS#g j_h=]4.7OI ^яHWۈ֒WU|@|G )O;{V6RrDu(?8<}_!FAФnoj)cM5|L%дO=4:[Q4yJ Xb +_07'$ Ju@A Csoֲ꒱@w#PtBFkFf ~T:nZM^̵8_^_7.,t@?D?zZ:neb)W쐝֭1j+6E?яoFhJ:ZS@5]Ҽe lV+j+_DQ7OgB4U#p{3V@}:1%D!1SD>@Bz>2GP)>\i=CE-NfGlVB@yS k U뜈\@6둉Ÿ 4PVMVu 2S]\V9afb iYdީKh,({C'O&̛ҏ=_Q ;1@cOQr |Џ/^+b-~fLH1R`ÿ-0g Xg->mh]J_d? G Zn )].pji5%݇n0x[9xn 5t%c/՚874 {?AΊ[E?p7 &i4p_~ hn6s6Ksз0 ^яrҟ?@̃ Cr@9 D.(r ,p.X@WCSǁaaL}̱G-$ДW @ f*i1toH{D|:^φ*@ת#ѯ:ң ]80~Cw xE?JÆҪ 55 B8367\b|yuj 2q&=E?xo(*@" pS0an}چH~ε Ǜi"Ƚ.)U.2/kbJw*&K (%B._k@ lo컁GŇ8ؼ  &ҥ볹t\ \`n?l7q^lOg?!U4uC6}#pS 3t~ U)|ېDOy](`KA 3ZwF=KT6LC2gN kW 6wfu/tέ+ ?Gqu%L4 TQPf1JeKTS}m ],mת9(Lݮl3i >?0<^{3_V<7A[1EWq$)#4ZeSr>HNDЇKp@iThd3g ̆5С)9+~M+0 J9@w]5t"J=84 o%m+{+5H6Şh$RBΒ@a ŁN^/Hc"!rS^Ew58Sm7-lotqwiY%q; (+3ΙID6#hiZy< /@PЗf>B Ř3ʮxLb N sιK]{!#o"X$7^*1IT1Fų~meՉ;I%=ߕPo3{_3G h*6:@1>T pAS4I8ӰҨu#߾^#K11S'^+JlĚ Z*C(.- f#l٨VKA*1%pH j)yЊbh t~KIShx!@S +(٣jN&i t{T)h%em8zJDUG3C 5Gi AYyhh t)?Ip_43m#E3B|>ZMU=lLii umݧs7E CS"bZ2P]n$-ZopS@hr*?9uaCNhPˑ@!ch-V1?\CL@@-@c &rCFA@TgkZ8A 'IZIl!RSO§")lg@aT *06E2Z :!)M# H2_m @=l#C]vn)]_yJK UՕc ៉6˅Mll0Onj) :&US $.Z{aȞ)㈉-@3a ߠ(h$^U@VB0a?I7 t-.g&6},/z&-DU3fb-ovbyz_iҪ:E%@ UcuZ2ri }ӤBdzaZ0k ~;>GףzhZG%@ UÌ9h"J.߇kkk0BFNi^@S׃C$Hr0o\t"_h7[ w'=xKk#T\>:Iw{{&9cH [ZpVly;tܯ%OJsqǡ@qiuh47w#ĉB@Zju K) @끥6u,t'-WC@7@NFeVho_/gWj} 㝵)F@c *g{Ӊ\^6`_ohJ]!P#Î\ޮ @ŒʤiF' 70./76]h[1 e``HGVzC *UM +k\ /L\sF `[7"`6Ryfvb <.%+ A˶ B8( ੾e9C[OomHW}1xM2 #@{$g3|?3G±T,bi`vfUL ǿB7 @ky'yg(tahk&c+!5SU@!7wfB)|ݿ`Ki'. _#.m@.  M Brƪk$ɍrF}77qxb-!7[5t-!K!_"^1 %%VdxmuKŘ0>߾I$nT?:k5*t=+3|T we~3Ky#:H KT,???9iltܲ2~>$=T٫S O/-ձb8n?Mc*l'KC$@ pP`T H$@"@diHH 0*HE [Ґ @`TQ1 d@ꓥ! b@ *l'KC$@ PFŀ$@$-T٪OHIH [U, &@ @Pd>Y L 0*$ lV}4$@$@`T H$@"@diHH 0*HE [Ґ @`TQ1 d@ꓥ! b@ *l'KC$@ PFŀ$@$-T٪OHIH [U, &@ @Pd>Y L 0*$ lV}4$@$@`T H$@"@diHH 0*HE [Ґ @`TQ1 d@ꓥ! b@ *l'KC$@ PFŀ$@$-g"nԎIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example011-expected.png0000644000175000017500000001613711664235353027012 0ustar chrysnchrysnPNG  IHDR{C&IDATxO+q'GZx>8)tmqbϡaBKB(~Gޔ͘~ 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65PW K*yu{_y_???zM(h%p/K"6/K𺂀es_nn/dRJ@jx]@PggIzn0wC`ȃ [l?6w)`uz]tF-C!ڤv`[4J{>w=_Z XaS7ڟۏ2oo, nҟˀgdL# i|B8tu` n^{',\nˀ%C ۧx|3@Z% @CLF F) zv/,S@7U!7C2Y; Q?Ȁ(iM]*I=q  ]> p`hϻ/F/P^@o^aZec4IJȰߋMb\0nUrϦ#Y+8~H?R!T: @ҭߧЪŮsݠ;9Ȁd YC(?c@(맀)Vv !I< O/T 0/Z<4AU̕D VfPS1ß!`1 yznr M)]޳C (SN^lKբMUCmʢwi0M+'3Lϲ뇀'e iOIXC!ڤHM]q|;Z>|ݠow1`柝ߣi+ܲ>=ܾ"ݼ& ¨ 0 x d QΖݿ,J;d@^Td?ße/nK4c@Q N@kUw!`U=O2`ZbP9qQUc~tYz!Ek>?9d'@.\fCss8K;,*0ßC[^! z懀K!$ u=.k/ruǗoMmq5ʮݿ:5w,=wn_K=&.rPڛ}7o{h_r>3}\K^u_Fd@n%[{wj> +b(L~!EpFw_2༡+|ח:'pϷ Zß/Mv+*pq pXy[@&]C5@F768ܮ)Kśkv+ip@ŮFceFa^7j B5 F>A)m2)]XC70n) ZjN|-|se@y@`B[( 0O9pWįuPxf?>o6 'vrw+9ܾ.ta֋Y;{ p2VR l:'oBNN{0mkL <ȀW9 ч\U\NMT>B@@-d54r: RXH$ 5cR?jR ȉh'єNr+ 1Jq/! aS$YMnBM2!u[R_On O@n7! P@4L})O) @ीxͯn$! R@L{NMa=<ꡚ aSҕ?]KNY;.Jܗhg'*tKMMH]Hݞk_dtЄq֋Y;1/&opy S7ŵ@6$,¦+![o ! Aev;js8V+BkOˀAZHh {djn AW6R ThV̱?n5 녎<ϳu |?M+'r,֯鷃 Alg~ دO+ m҉:d@`u Aa@C 8 ݾ ,t_ُSuxus&@M@L >q?UOf!SƩ!Rkqv\|o2/un[| yyz&NtaèGhW2)uo|s IIZzz2z @Zpq,jK@긇?}t3H@$jR ) ".3^t!'h`o C !ۦh –?nаco9x 4l{? wP8( 5t*a[ Vv*'>hOFkC# i[;rR@Ԍ?@v_ۻN`|\ ӪevM3! rE@  B@hC"7t!`IGtW+ u~IН) rHUnNC+`Ϯ05'}A[8n C4@J ]j2`v}[&/Wg{yo?C'^fCIȯ Hmc @ HԌ+^₝@'Ɨ}.G@ _Ft'4N.W!`X ʳ'U!$@,oV2<R\܀-ûߢ3Rbw2Y޷g:v Ȁ`|\\eH(mHۚ s={'N `x\% _ "p?x ] g_|@E#yWghǿ*u`]E%\hPĚ)`HPgs?SIH]E!`Qck>-`W<(O>*`\X?}dg `ZDWxvw(`Z5S 5Ul|) 04:c srT3Qs:v$ 8 DCt#Tb\ Kub1P~+'``ZKx."VSp#*nR*5: )[%:ȥ?7^bsvt/|֨Tϥ [=S@s KŎ>Ge@+Q*:O@E\Ns9'g8)`? UzTZTN$p `?<<\+p c[OQ@;h 9NીIotIP+Lw RC=/`|M!`PA܀2vvH?[lCր`ܠ{,ʡ%DU ǖ@0#F /`|Ddğu(`:C?{mvۨ>H7b{͏8qT+0B3{ { _ߩ}Y~:ou~: ;6 chѺ vkѻZ-Vֳt`[V+Z ٶgϻizw[nу ݦݿ9i /:eݿp~^P?UA+[+߼,隀$W&)ahʹR_ 8:P=@5 =Y0mi (s5[59Y \s,TsC srVkuTpZB0p>$.e!''V׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxO4Yyo0Q'-KxMD4텽 o!첈MHYّ ",Β K,;R"dDF#)`ax &n[U]3B|uy}}w О @0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM` @Qh  @@69@F@7ls F oް  4* -a @@hT@4Zx&@0 ШhM]>t!|3]NLwNYK,.p|N(*F ^V@\ֿ_:CȄrXK~'s29?d_ȩe4 H' y9z(Z~<_yg *h+́\rt?uSOUx=_(-AP1/o~zK^3y㟟?$ m fK0rp]w ںN*Pb#.Stw/ɩ uB[6Yl= O?9wPulip lxUԊ_ :!֗Zf ǦS{zS\Ƭu_/^gu:kP:h*ȃRv +57-C.,C]m±0HһәCpQȢ?eCuݲKhu^d]AEóP_蚳;ԅEZ@>8][y) <91w]3 x ~_y菿w)|}Rd[.%yW%kRx~9w6 L89knLiO:s6[Mrj'&}# "ϳsg sntzs_yϟ}&G.i-XKN=)e?/槄o^g@/5&#({2׭Cf|8SofRϏa_|W ZT BN0GkȮ~3e,q~PUpkq{ϵǟCæ H(ʹΙK:_9saY4sQO:o|Elڟ7fŀLPF7Vߌ6ݽ[v-ݠ4*E|wkwV$'f輱 _,6&Aٲ;cwϩt=orz6nQ5J}ٴtx9HWݧ>p8bLt],$ GoNt\dMM/NtR[ɇPpa:g5)[s@2+rHO.j$Ϲ9umҲee֏LG{F5] t4ù4 n s JZ~']5w\r^w$ءhs׬ځR&3YD{B̯{:3˻worN~[{/2WyϿUڲO?4~}ôqaaWfn/YP}>\On/˷(<+\3ྮVə.%p4ɼo?</o`~37ƾ?C~gh, fW/ݍcv=7b!;9\wro=lMK>7ٴXg軴K&:~\ *- ʛ/G{YI ~<]3ݼSe`ѷy3Э2Uw긎NzY `.@l]\@۩ػ@M>O2E1̻A$Ic'+NҬDAf9|`U@{鷟/oc{T=p~hdi]G;C/>;}O?Imue]y0iNWg ltt7ɗ>xexu^_;<~g2RIs|`pwyGMLR/vP(G ez+ZG "Ϥ4hjܳO_z݃wn3_LS'SCmzuZRźlmfZl pPMg%2 /]7?lruA)wud=}c1~J#PoS_kJAgR,nb H?u;Pt;t{|}{Mw~҇l`s=ఀ蔚>J(ڟJk{o /tHTtiVݓοMɺ/E U z`3sE@+Nz_MEu y$X`vMОTm:0B65_YUr\>)ƌu?<g=0Ү;:Ԛ;ʯҟ|SO͸0*Q#p zr[SXOvxbs~z/Oxn7]ef.o9GYJ,} XG';tfzjuڃmjjw?PLgq#@zb֏0.*M?:yJ1@Ohv_r3=0 j/RJiZ+#Nq/u}9 ^ phOϭ+g<8`+[K|.R1;Dٕf@H' Ѻ?m/XKêm[;]f+f`H=9 ',=ҟ>ꕳ_(8foyiG7MQK_~v_;c)6@۠c N JtjKQ}Y!x8R'I8 | XFJ2\!o/L:X^{4`Wmd\Vd :G?|en[ɶlfߺyyNZ.eMN 5o{u?Z<:Y4R׊t7(K];_;KXF)~Yw<kΕ}u?ҿ|99Xǵ?:z]=˃b{i^ʓ_xJ{~wN?sv`=3מi4 =aW|tt^xus=WKsB1@v zSy/=~[6"Z,,qJ@Yy:Ip蜆apgd.}o_ә-=E6E.N tgXw#oS_ɯ|9@|1TOXoPy_3 \2W iMi\v;ƢN>5/FȄH\GGK oۣv<UO  P.Z @@; )j5WO  ׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx[,YY30e1Gh"`/Q!/7yFA f D/J @AP&0u3rdpUƵO3kWW^};}O^'pJV1  Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk Jlk \[i>e˿owF<$@`5ɵ'9˛) U2 @ l鯚0X%c@.# p|NPg'TA7NIP@TK>faJx .Ol8*Y@Nmo~_^~]Se'% &ՎvBS6.P ᒠB d cn] mtp\, 4JT`r U2 , E? /ю߅# ʌwmXA=kt/vV7vkݓ>[yB~k+qe{=[s~nK\d nޥ98 -лcOL7gͦߝ8ۗ{}&wFg$3:G<ۭC'A0vVR@Rw>Ŧո۾w 3vAY l=Y6vwHr桿2hz B@l5SW7v&m}vsiE: $Iy!izgtljo.8fw5/r7r&O-/yo /I GOmkwۦ6W.u<'\_/>O9y0hg[>z ϯx]\<# `CN4n_)}SJ2Kȗۇq97m}=r|;#o蓤jV'ma -#n]&GC~|k~?~9.PvUˏlrix緛?Qo,>7yx~ap$(ɴSDWz6|{K\W66ݱX,M@v^|fMGݿ?5XǷӻo׿kvF+& =R@l6BNk69H}_ϮU0}nCkE>=*^-˳m~})fg l']*xǛo1Om|ޯxp?}>w|(lh+n_Qx?7|Y;˗_4 fI[)M(m՝|eѥcM|zc+hKۼ]#~ܜrweW3no8;7+nz ee6yv7r:3q8@uk>r] јK6F۾^^3 [lm0F7-p}?^alW_˳1r\*`|8ͱ{p<ΊSYfta!YiM9>d@/kfԲv. 3_u/ծ*meE12x׋[H_"+C{@SMO= ww9kVW̦ڝ~{|̮a;Gx!u[jglY?v/tJۢhs9Rtn+[67M@{ 0nvX%]{z?YS`ϻw~8]sQz( 9l6l'釕Dtntp).hX K_8}Oγo4>];4"0NLj+dRՕcrdBH^-" rlyÝ儁xs/|}G_@eA){Cz1m%_9SD=&oOafuqR3Zz=􏷚};&rԎ}mm x0Rp)&*| hq4O:aOؖ|n>݃1[Z7~jyyU/SƎ~M>¶l=ZU7ϋ` ]ڦ_zY8X\<͇};ZQ+5t_יL4S[l(eC |_nmq4OeI-=QO[ L,j{?J/Ⱥ}&C,.̱0&>o$bGisu0[<*jZKiv9񏢆' @~vyv`mZ\HZN'e/;_.jh{1m)&=Vw){}߳:ŵz% 5X>8h&؎ l~ 5LiE% $ߖ98h::[S=X\Qmc--aжB+^S @`iQ5yiΎr[|дn}/:h=Pm ㌗VEu)iR//iPǝjs5^d_6-nщmb/7M%t ,.9/r, 8.s5:c4\@hC}JvcIՍ.JЬ RXנ]lK;ntsmwhiMO@8-5{ʉn *< Deb3v:iն`7RpD')#&uio8b[K73vj =iMjo+ƅ*d{a8ʿNݶs@HHǻM[4T$80_Y Q$Q{d[#H\6`Ν_.+)Z jhxoֺ5$#UܓZI0'T7x0U K@KruFK>*>lmeN L@SK{Ip|$&~h\߬l0WID@lʷFEX $ئYVK$졭#z H! 8ȿh<!y?4_>/]`-/ lkXK*H[KVl42&e*r2)ֿ;y OClen_)'ށ*p|@' .PpA@O'Z`g].pL Is[SX$ ~U?* T ;E0Cl PMv ַSD o~ MֵsF Qdv ms J ߴQlLN'5lMNٓM`IK ~;(0CL`bIPUl}0L z=] '0FT7m-ww&@ 8JT7 \ a:O!S{= I`*BL[`$~g`#0F a%@D$hf d1H ̒׮= 8%~6FWQ_ HY  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@BgIDATY  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _@     =V!B$@@~*$@@( B/ X@b@Y  @ c @ !A{B d1H UHP@,  _zVA~{sIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example005-expected.png0000644000175000017500000003351311664235335027012 0ustar chrysnchrysnPNG  IHDR{C IDATx{'Ykgm8%ťBTYŐ -A6ܔ?Z*,D5*–JDAA(U" "E fLIc{c7nvo~3gf9s>#fy>s[, Ps!@`E8 P(6 c@B@@ uO$̸mqÍe)~q%}k/>k\w^~o@Gn3(2E:ieCky顋pl`(P`%s20@u_U^R R|@ c2.4OEM= {_x2tϓ#:W__+#m @u1`8|ّ\ 9E_v}b=k&Юzm pU< y/Vt⯿XkePThS KPa]_ y,Wz&F6U*xkg}%@ @뫟ۏV/ hV\X! XmiGe{;A@uI@ Me 0X?PW!詿멿yO5)@z2P1 qn^}/._Ś?9_Hs"H?7iWsh'Pu G}ɷB<זVזNFT] Tk vniM?lJ@Ȧ[]_n FRI}>6J_[TQKD /j:P"T8J7fr;unl Y5P#Uz(_!F`6ԯ*>8Pֽ@ڢ5ЖŀՖ *48@[ l,,JL5^4`(06`'#J3鯽{~f*>Pa^.N!(׀VWv AcAO]Uԯ-imq?WmF*~%@{lyRL eA u/ Ӳ*OT} ZC*Mt3[_8dgi]S}8@ K|@|J3M5AT  I/dt]@}ЄKo=H}ڧyW6MhwPfk @ׯ 66^L K@΅[_\du4m=5@]/ @#*k^OڴU22*nZm_7tYt Zz'"2_LQŞ*Z=8GTi~20i_ƞJOޞ]J( .P@Xb@bP.шcPP=A;SCA`NwyGZbJ f]>0׈ꧾ/@M9̡G_lB~W7Mhל*GQ P/-ʰL#4n+.ֲP͟Zetm:43L Y@hWt/.~Q2P;@*?PMk Y>V|M_?~O1=9Xmo|bL@Ł0›Rt~m<ﯺ*_M ^V-}­KUA`q!e6 M4/ݟp)F<][g|ݺu*kHy8[h_ "wb?FsU4@5 CvW=pfٙG#)A) ?18'9vx5/K;8 $zi1*(]P.<dAawI|=?~ wC4kŶ$F$LުjH8#߅oR?g~)oF6[f Z[[z{@pv## 8jS yD/#_F?cksRfACѣ687`?j3~gԠAZ d6 kX ﲛb Hxi_H3Uw( r/SmuM?c@޺Q_&1#;C@ , cԶS< /BY@ւ]k2Pf : ?"f]?kۦob,lD̄b! /ZN8 9Dޟ/P`x4e(ZFZLAyE;@qn뗟ܼ{gOr_v'*<Ľ@jֻ?O/K\#{ݾuΞצ܅{NPuH| 㷎=kx^Umyg~7-Jo:sz}G#(u_{]Fگ?u71~k@Ǜ G9E7tiپk<[f^^E/. jy6ڜՅKyißl/~?_bk"n}cV(nOpcN Iz8ؒ= rGAwuÎ9lslËֵNooܾ|S$]u]Y4C6TWS~ [@̆x`;#r H ,_(]ӱ܅'OhL,g{iFZ S?"kQpv ]aSA0k"Ń'}\zX/sët^Y9r˟]fWu2}M_ ͼ⥻ce65Yąף pW96Eر@ i}--3F0l@_f_a ɉ<Yv׬pL/;1Db2h9TQפ=Zƿ~CF8h9W@kjJGSaI {J@Atqv($AH"L^t{]ϡ>6}hmmxO'6$ ?!#K,@ft6(l9'p-?ޱ;޸`Ppq}of?L@Laq# R8wRw JDv0 # Ǡ@ }X@=O zx@)5l.@&+/Ub06tll*Y%@ٯB!``;>‡ZbnlOslu/8E iū k7U%"@"Nu穅h~Y)PTM8Mx"xYp3|\OvF[߸UGӣ"0<#v؈) !x~ޞ8 ̇@lC'}t= o %M&Z]C- M֙+Bug܃|,`06%śvnsciX/ l9^3؝_zUaa@A]w³Zӯ.Ö1zUܘ)< r$۸+:3qF4?c$̈II{龸SsX/9IDAT?L@L#1|,P1!+\s`K&瘴 `?F,NMO fW4 `z]yMQb,Aq˻w|xpM>]n!Q 4g}f t6'=A3+'~0gئoU(w;+J.Gg~;7@6vG}A\ F/߅.NP(b ńIn⊥[.`['@`%p\-O@qU~ ``0(M}Qa/@>`|${!  P.鈻,i%}C{ {y+0NEx7M@LÜ1.^qxœc5` *˦o1|~yZ }]}7Q_OK`& #2JF-[3kekEؐ9 qqu~Q_ ``-"Çf{[ZC6P=i@bØ%.F4f-Kӻz]ω_F~29ޛe/նxSt| U HLs_;=٧5N$`k;y I4$脷㐆j@|o5lӮOm08>%7;{3Y@ kSnבwﳴueITwlRkz)JN`JCE@w%lM4u疓ں}]׈}>-׍X5!&SZpolC=)7oh,q%!%FIG!0x"t$`I^Ko['R/;I?2 D) B辰sQ*ܝH.jc?Gh%(/%]bdIŬ[Z}?~X DAf\TAWݞ|걣q O 7k'Ĺ;v(Er ޻'ԱyrTgF׻KGpbj)'PR4ں>U*H{ A̢Qcf'Ƽ vC 3 E2x;@|v-OF8h:`򠗐@BhjU+*-cbOX|c^_SJ 4 t_ʵʕA(#w+#vt^3͍o>a}08rͬǎn|x!iXHD{־ i~}Nyh)-;~խ\ nS A`,=_f:to|zǏoz/+ ``-"cz{rW_pAjʳx{Mv pJ+Shri=.3z@yo; Pց+ P5| `{n-Tޯ Q7.~~>Q8̞pֽͼ_E΁A A8 kDro W Ψ(@ /@^tG>{L8zoG_{q)]  Pۏt[b{Ǧ؏Q '}Lp~y=;^v篜/zlث˰a;ݸ;@ Nպ_٦_xrjcSmɩ 2ٿZcvNN<箝j7E @@α{e=仿y"/|\0 7ͯ{R?7W/p=;L8,>C r᾿L{ rurtfv\ᗴ{ߴ:ҭJsͯ;\~NG uK xCN}/zc^ߤ:%;'˽ ?\/:uL!j0?ϛ y׀f$ph߽[6mƪU<$^?ʉa@y5hKN/6 o"v z( {vA6$# o5L/cjJ,|G9p/bTh o1eQ/d`w6z v.j8E1k@1n8]Զ4h0NlX<xJ3^# @R ڮv^ĴZgo~UG'a`1*l 2@vvT?ݹ33W@u+JrrGY}۞?ܶw_7m,{vE= ͡Mފ̮! n;OGHL91KwIk!$*  tؖAXX"XF[M)5? S`>(m, /CK,YKҧo&؎A`!/>j@Tt>L&fܦXL^4 X 9Oxh/0\Q0@x@1bBp$8J!O)Bʉܣçgx߇>3'DH(X>LE|P̵  !PY(/ ʋ9CЉ%h@cQ#㽸OסFy+REЀ\#;/ZEr8Ѐqr+M-#AF˯8_L<"qʹst]} 2)G$@˩vK.|NOB (o$ : oiCK( Mf'Xmc`>}/=S/y;^^Y~ ~o}@I@MQ<F+@|;1Њ?4 +O\C  q mJ45R3>=oV뗇_ΛWe0Xuoan\U>gWgXPhWayxFC[u{ǕL !Ъu_䠻5w-8E bvwxnO}I#qb9rfE Lׅzdˑ*~kAdv+Rѫ˃KԿN CEBlO+~=yy[_7(7'}VAkY(ƭE3k=tL] aNˌeDa`v2T ]|7wuƯ{^n^E`6+;NzB׌#CYUo˻?s_fޯ;Tx LM`k.ӿn恓˩s]9cn5 !4/ma}" (j!@ XSd \ iz? bn[WdGX8o  P(=ߐHpM]'@@k=ur  D :鰎U  ([ p1pǮ(>R#.ky}Cҭ#>ˮ`! (A @`Y@,XB"2 q$ dhE"lV t~" s/蕅`s4I`[ $ӃSG']OLywye5& r P 8x$DV @ yh-he klh+\ Zd  &W2hH?\ ZX  I 4BG;O=! }Ν=g3 %B~ذ$Z#@) ^Bb7A`$} S } _tQ Īe[Uj /a`Hm p 0h& b @`",-vC@VY@V1 t~"}tD@T嘩3>~--" J1 @E@XD@ѱ|9;j p5E1 [ pU p-Պq Ly+8"U.!. @ nw}v]kpE@56S xڃK ¨' ҫ @`L`!pEr=2 \e\N@ g%"h} $p1R{4y=G dVϐ  ϦHY@\=}''Ŷ 2ۛegYh^єPG! @|FJ@/| P@^Zr\#%@`g`g  O V[q%B&X4]&0^ $:Di4B@t%!Q xXT3`XO @ :J kf8$ $A@̀ne }2^]D[Ss`y@@EEݤ@E7d  Hy"|Wٗ  .{R  92=ʨ0ծr o1凂~XO ^om Qy5Nx@3* F8zX;x PV#@[Qj0 @ 2sC@$k"9t2 u'   @ vI@ U f@K9 x@N  ؉ > ي@r{bM @b1C is˩y h8Q1ں"T,#@@""^ =l# JpPj卛@J(&\ 6!~q*Uji`K@P XK$ Y:SŸ*D vA@U'L &@ ( b> @`0](QzмzHS!#=?=/}"}?)v|#mN nOqz : Y@ǩ?H7g/h@%6h^rz=77>v'pX`끎0>SfX%N`pBqiu Eo/|CG^3~S(c_cbe#Nx_p 2{ko?qof>[T^4q\ zl; }W;\ěs<9I E* F}s3["0,0l |Q.",.$0H ?o=kN?k9govM@-{j[sߜCsgi`s T1?2+=5OG~恧rF@uѫ, n$IP=}ZO>,B7, fuC_ߜÞ͚p-Xla뎼C;R]]Xc_zGٿک?E@kjx~򅏽k/ V|WN޿SMp8r;#0@* Poi]"GP.BNϽt@[4|G>;~SXeȗ {V ,|.w#y8W;o&+%U;{{uך Џ>?h/ ?GYg 곁:/sW h]m{k#h0~{?޺ iKo t8 ςػa'V1h7Oz`4@u=3>г#dO{?r7&}Raꯖ R)+`* oh[hj`FIDATЬ^*P'cZbOn{# 򩥑$O.vkY @U@XH@56B V x*A/tjT@ ʩ1#Ppk|*p .Pp4Kۦ! ʨQ @`I@,X@2@u6J, % j\x_+ 򭭑 @`XM Ԓf & LP0_- ʮ P@b}C'@hM (@@PdC$@@hS{mg#k9wyiZ z-Qji ꥷL@ F!%P|,Vo NRKHK@'.N[vW MHH@\- * (D@Rh$@h8 h`xI@p_/ ڊ\Hty*䩣m@ XQB2`-&@>Zm2T` HT@t( dJnN"@ !M le]"[Hl fuۗAۛق@ߢ8+g;";BWmz;z p8h7?[ 0ߩ @`b0 y@jx0L.`J8h8K- 0٩Т#@`$0 U . 'ҠqMUHjYYO<lLm~XI@EiuπgSAG8ھ01=F}l7z7fHM)3>{璷߭V\T` 81YZ&,0O[@yCL[f*?zu*04{pצّJP i@Ȁ'涜[?w쿧3po<``3OgmOC 8Zw{U8 8p`008hW)7Ol h|mmŦ]?( `DM8݈[GPO&Y? L* `RwW[ xS-! Ú^8h oG>]w?A<@Lb|(2d3 ;!;Xb5Sj qg4rN ~nsow̭g>jI\-`sM;j Ujb` 8ut Kt߂bQI>J>UC/6e% r8h2Ѳn2S4w@J) J'w?1M o^RP*O-QH, / S*a V8Ƞ+2`]c>, ܷ w>z43k% 8 qg8J1fEI@L/U{*`x ˲TA`GVo;K (Œح>2xh:wgWu|Y|do 8nݚ) ; hg3G_ DԿ[P,"K@bi<੟Lki 5Zoo~ӱF + ʭ}SK,"02fSNǔ) KZ oޏP(=ǹ=[鴙 'põyWOwY-s~V#@`p08i .r<2 :juyt xZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ]ť3IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/hull2-tests-expected.png0000644000175000017500000001736411667564602027333 0ustar chrysnchrysnPNG  IHDR{CIDATxͫ$u}9Ʋ`);&/"YC$< -vYf%&A$ n_M6&V6RA[F{`dyRW=SSTw:9=.߸% @@=;-ي  @\@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@w]e8{lӯm}|;k`GLY@o|?M@ 0+ 8$ hu?ϺZU4<2^R^'@so] ,O `nVQS@k l@Z~t+Q @ͺp^ϰ4jekovܵ ܅G>Zk Ed0j u( 1Pe,A ͍O`T7n3|?n8G{|,O__^G82K-$a@3-J_w'h@Kq4^c&":{<d؉+yic@WoẋB8 +@/X'^#@&y>{ h 2[O~S?/Zhiz/ovCY_{}w;/ WIw_>&|9/sa{ГZfyE@wn_{݅4vEYĩFRO [y&XI"S޳k/og|{؇ǮWNc 01&7NP1_j왷7_y+_7`OS.8cyNcw\# g`qɵvG?tosp̾;-' =Tk.LG9ť$Ŀw |mQrxpP/F){K5ť_[t~#6]' Ipz_VpK>?yt#?z˯{tM+t =kqu7f ]zRwY|^~<& WW 0sG=T6ң|x7X7A9'.{uW' .7ݽ\zK@%g]0 N>t\'l%#I2MחvmWݿ|e_m5~lСh-@Q`خWzVZZ]bCJP]v?f6UK؛w-~j$C` /{[WI7oCk->vWYٳod=_;5~k" '˿rk s+re+&zY֝lZ?={YVO^'Ͼ,QwB$E{YbO ?v'5us^<_[$hducLc'5cvG/J}:oRu@} zRR+d?hI W KYyQ֪I{O?m >rJ}J=Asy޷DKd"I1no&!%S9Z38LTHݿYiH$?r,&3#,D b6hP2:O vu & L-$jxko';P O171@O&>4SMTg׾p7<~Mv_C. [c/L"Sv u{cy 1eYUR~.' L\;d/ZgLJ qx;cw~ƪs@] ,f7wOM 3' ?|:ki@wO7g/u}N;ZV|jR̋//̇V)ܶ EKo<Ҭٷֿk)>d)^k{3 !.}γ39w[bn[=#LG`&]}2`Zm<k,)(@SݹPwC]ӼONp) XݻN!W{uyɿǽ3M~y񯴽WߜAm\Bo Zb ^^d ":Wm &6 SAڭ] fBut2B \W]حnjc ?L~ gAshkC׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݽXR62p1g0L"pptZ}4JI#J9/#@zYd @` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6+Oխ_O lo,d^k`M۴R!-[J]k`M ˵́,Gi@8؃@Υpa02ۛ'n<ճY pPޯ@sO| 3 /O'{d奿}a&z;֝,7`QQɧWb>x'bC+6ߴ* Vi|}K}>) |PjwPB7TKa;wS7b7arSaЅn^WX7??w;$wI U;8ƞ?WYR?u]k-?ee*ѪK^}̙s$Fޗ oo]:0~n\r毅LC0rnu.ʞ'.9u Y7[xv7mA$|Ʌ. smgӓ;ؿbo%aԕK5p@swnP|7;O~@ޢV?ږa7}+lc;~;|% 64_y/ :ho` /]II0 j  lǷ[;?mW*N>ve_t˗0C{wv ;tu6=ӓ8;L#aN[kv{/?g2L28[(έ/ߋw*<7 N/ P.,?J?DŨ/ ƯhނuD\}ѺK Bo#C`ʋ aph1i4w0pqMÃ0 ӓ`Zo=p֭`SkZ/͝% |YE3b6ª@=cm 0uؿh7蹺/>^U.ak8]{0 FE?Xu!JJ_ŷ~U`^G1~Ys/[fcG];=/ 9`:*^=᭯oP4AX_I6`0, [C=ڱpȖ#]Mؕdbi!0߼ۦ\6`ճ08ef|O|~\pȊ#QMѧU VX>vO;8<h|gaJBW{tCV5:,CBޞnk: du;XuԔ" CvK#U\kYҍ>}t}&}:h䩁gחY岱:>t(d@; ϋs]_y_N1Y:_!ec/L ҡ~vH߻ng$ M[s|Y~Ч rؗQ I0ʦ1Igo0&!͋kҋ>A7I~Nov!?)0uF@Z{MޚV0|H#~9#gfYd9|bؑ<,yfޠ[6FCVj9!gޞOmt8|#r^ӠgG&Kɉ :; `{5p퐕bi>؇RđW|ou6aI5?G,F}:\;d_[g>[ORyhvH:NN*T6qa{m~rj:%|}6ҠT2&'4uhP{{b LӧZ:LDjP*<33$LuQӧy|ws6cy^g[mk:Mppة=#}6 ±jTC9?LW;^g[mk:M|2tجStR aL4g߽9):?鯳~թl>Ygi8թ0t:8''ζuV8*:Sxpf'Eʧǝ>O6^[kىFH[vbGM㡚-Ӷ)4>|vhv8;'NֺvVO|YZۄKmk'+R yAO;_kgNaZ>4O7H8O'6R[k܉-Kg<>zSNp .v;_}i2镄mw',Rөw've`:0;1'oL̍^\g;w9 ظ/jZ%֎8sO>9Z]NGۻf1~MW|s5:pUlSݕ`10TJM1Bysm4:dZ$0:-F=l`8e(>y}񥴋,sۗs;xTw #c`xB$3wI⾘>i&l/b+> fC )4po-XM̌vT~ӛxxw 1pxô[,. ܭVlI"v&#ofbts-7ŤrH6%|zz*=F<1t< bdȰ/257 ʽU0*WӐW\"ۤET)FT1m>|PX_eA W&prg"+ emR"nUWsf10: bɰ)2MP9_fhYV`P0\nɗW\S6Er*fV`g0ZJ\zbs3uWUG|)Q/o0aGĀ,8~ V~{`+J} tyO=i ta ΰ[Y X{y@8ƀoZǜ_== U Xх; ;wWm(~RP@lzW~)0(?|ج+WkyтWb"տf(_+10GU,b&򾆀?gU @ e%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬ[(IDATHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@%ڬHDM\!@@ P͊$@@oDoBIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/root-modifier-expected.png0000644000175000017500000001642011640436733027706 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݽndy)Fa20Й;] W``1 M%ЙUCaV@`.J l#@vUPa5 (> @ mޜE,:P11.n罟.pu}o0[.G (P%J @  P"J!@@@0T# @D@(YC `F"@@(Q@PDPd  (% DPC5J@5(j$.y=H   @ H  <H*ol(~#|'@d6&@'Q 0Ðv@Oi8I9LA   ^@w1 $P B6" (u*^#@@ d# @`X5$P B6" (u*^#@@ d# @`X5$P B6" (u*^#@@ d# @`X5$P B6"X\ R@5 (Da/K _ @ HQ(#}˭\u).n^v x#@&I.l<lPdN x#@&I&P66 (M2^'@@p<` @`$u ={8'G@ @hi3#j tXG%V@dPٟ V@dPٟ V@6m(@@TDPdIgo:8E#\]G<5 F+ڋx3BPe (h 2DP5 @!e&%j (B( M@DK<(PP)-SmhY@IW o  E@dIڜx%^Y@IW o  E@dIڜx%^Y@F!,98 @h hnL`6lr@a9*W-׀ `~v#@`0JRI 1 0%yz2ډ@:.r @GI @@R4xc @@x T@$ s }~۹BPe (h *cM   V@e" (kZ/ @   V@e" (kZ/ @   V@eI ,O^]įk&<6qZ (V!@` `@+I @`00X`KV }!ps0m#ȑ)  "VH@ GΦ$@X!r(9+ ` )s:H ,2ovR ( |,Zd5 Џ' '!@ `Vn7#@@? , (Y݌(~p*fv3#'=n~hEw-q=H!  *VMB ĔL+(6v!@p `m@G @`80\dL6 ]&o<=]C `b` @Wk2E'@@ d (mO^@8}r (\yO %rmZ< (' _ @ ȕi  $(|A\ Wަ%@xNn:=c .  W 0rp .f'wC!)L 7OjK*\ܶӎ!) 0  Ї#'p3(y P( ,#@@4-Q @P@BYFh Z!@@(@DCBPe (h 2DP5 @!e+Ǖ@H ` @CL[8=ٵuPYmn j"@eDPQ<ٛ5N +Flf[و@Oi8 7w/%   0"&$@@{ԎB@ C @hojG !!  ^@7#PCh/ڛڑC(!brHPMH!19$ (v$@ `@{S; @`0DLI i5*p \"@@(s@Oh (~q2{ \]^o#d}[ T@tc @`j0  Щ4"@ `ja @Si0ER}GݘPwwM@ލ l{r%M@F @`<0^fNL& M|!/ .@8PP]PV+o @I@{6'#@`+?[)1΢) lX\ouvWWB C ÝA YPځ {{0lt=Z( @ `:9¿#!OCc'cgwt|'~hFt#?#xPxO0ԹG};+yj`}œ& Ks̩&V?1p@ȧ؏6+O8?O}' |q0u;A6k/v0 (m:5XQ #@Q2曻f#/Q}>Հ%ٵuM@F :?]T(c 6.(pß>,} }>:ޞ?&ygѿ nU Y48Ͷ Dow ] VߞGPGw]7]~d;ܞ@1n_}ؾ \%Љ: 1:g}YlVu*: Ʊv|۳/߿ZW} (~qw;߸$|Գ A P' jPa4@#Di (:/  F@ Pu^V @ A P'꼬&@@&J @N@yYM0 L!@@a@( B:Pe5(0Qu jPa4@#Di (:/  F@ Pu^V @ A P'꼬&@@&J @N@yYM0 L!@@a@( B:Pe5(0Qu jPa4@#Di (:/  FN/I IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/circle-double-expected.png0000644000175000017500000002074011642654340027636 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݽ%UpڄF4PD $P (D  E "D_@CJK)A7 X̬Ǟ3s<3;s~>}]o^~w^ POz% E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ PT@m  El{E@+ @@QP&@ <YN*ᅮ6u~@\2HVE=:ԄggA`C{_ ӷPk!aa0$YY:= 5#ypKŹC Cu] _S@/Pτ [^1_(0a8_@o{W 8، Ps@B0n' I~d5E=dP \$K v0d9/ sMpdnxnh?k`U|iK?Q,-y sw_q]ODU $a>G[*. Վ_F숿G`7{w`{ن.Pap6-`A>?nofਝYzve7`| lo, ֱc:ǿfw=z;9|l}_Y<8uWm?~ݤ>9HD>]S**A|cd8H#Fsʏ%>,W.jyxq&ٗ mS֡޷CDw<pج n'R^G~+}7짯Ot?: tדۡY$ +; qm=#~zCO~yӿy֓/,ERlo /O q#?7.  ynsJ9S׾ۋh\pe\4w/zϞ~;nSaJ<{O狄>yx~08@2Y4u Ke$ '>~DZ/pu0x1ʗMi #`^B4sqsσX0h .Ǐ@*/*Hz&)I4BwcW]st~'sHw*?O >~[o4`':5@[Jh;W|hRd7ޝ͚7{ř \'A/ں@[0hJ@Mw;}y}`_:%UeaP. v7d`w8UgG*-F0(e~=d${\! @ߞoޕxm,~weY Um;41b oLap0;6; z1@0$y<8_C=}kkęAbJ10(Ӆ9vf7`w>& 2 hx08n}-ke?L<S% Cwӿ98xP@<ؿPa1?'үɼ縋E|>t>`oIWMI\?"@sd#E4a@ .6cfan3z?~$:g 4@f ޸j,~/x{zB\n (>X< ~G{㳯5f))I g(ҲEַ,Cb*hƂ+}K~QϽ}qƗ 㒞0[A6O@* 5H#+r_IUNտj9+}߫}y͏kh~G@Ӿj>^ 1po{BimkkV)CL,1FV@hk% bN\em3[JV,ƒK:dwAh̀溿hEcIpr/ 6fZdxb`&6пmdiND m{=CFL{| b`|ʃҒK qMܧ*zJbȡ0xDo^Cdww"y<hOu3 110iypmh_L:cO ցҹ:`/G0@@O ^rx0WF l(T, ! ]:{Fɼ3`f91G Yb`0gӍ(Fp]\'LSYH`?kb0{oRsY/{A̕O \8C`?!7(N/`7ZzXZ}XSS {U)/FMߋ?~|Nͻv=_ |$ `Fm}CuD1W ,0[0`Hfb`+iѿOV[,V]]ا~*z1go#`oȧE}X607^RK?G ,-y ٮd*c[ďQBʫ/V]b`)IYT_s }'L憵d7؜aac=@!&0<̳aZ1ET1g q8GR ҸoQ@Dɚ:Bpb_0稝p q~TyQKb ic(_ChܗsgiP`H&y1Kb/%ySoˋ)Z;40UДo=s=2c \T#"JX5`1ʓ=H a3_ W6PCU!7+ 4 X W/<6ٷZFm̝2|K@RqN gT%z!1pfxSSkn'|#pʶb`i@qj+W>1_ߍ~H +xũ%5!ѿqOۿ@b`0o8+K? f7>Zd5o'l#;m |ohѿgD@Tʺ1Xd@qje2pNj)}7hYXRӳ^/p迁Ԇ`C%n迥`k'>j_@߃BoP;B[$ 4*k֋?TSR#Smr/+ʵXX;TX W o7[@̦s=y u}=}9ch7@@ ^Z<1`_wϙt{2qyw ݾ>quoCƀѿe=e]Āѿn=}[O{D`0i{) o5,y pĀ_wը\s*W?QW_@5S`0Ϲ 0G=Gx8#;) fŀѿ}|/|o BYv"''zWJ *Vc`F7'p ]?8w}Y1`߇1X,1cNV^woo(u)@6*".0F4 M+2EF8kS RS1 MตH% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 H% RS1 ?&x);^IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/rotate_extrude-tests-expected.png0000644000175000017500000005114511640436733031330 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx $Gy{g{CsI3b$͌х02g'5,z6Z8l//ڀoxeN9$tkt i$}iٯ꫈̬_zݑq"gDFF:sf@25 @M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC@ ԔPӆ@5%Դ6 k@M 5mx @ PS@MjC "*),-#=Y-G_q@B`֙3t|=ϓ"=q{m_>/7G!$0m7%;+u8z|,&;w7e3yaD?q2;ʩ)]yIg~{qE29n*z?l[m}4G79yQ' eUͷաb n @̟+ŽݟOӀvv =q~PXGG2f=Z}VaH]8:<1Ȅ@yje`{eI @ğ1wtՀ#GEVdܼ/[qc32}X3?PK(@ diΜB($._Ue@gN yth~ s6g~Q(+SsϞk!z9ŽG̻솯YxHZ̄?tVll钸x-OMb/yLs >@o+^`Md ~y2 N@@,y3wwsN/Ԟ9:o3a:qz$ )Œ*:|vbb 5>s޺#+霳=,ɮZ>];*bG婲ة< 8wm Fi'L{̨xݝW7/&ր]{[CCξȼ迕ڏ38`7`s:5RqIS5@7,_Fci, Yׇ 5[ZǙ+̷o\~Ѩ|ϧv߼B;~F[8p C2@eQp)Yx zmOfbw0|u_k}Nwhų{pH*H-8 =Ѐ ȘC]}!qsWuR75`ad[` F6ukWu\˖pc?0ޭ1V$Ug3+ ;\btENwN %T70OyG91SyGܻise M#dKR>rtWn{Vwiڕm퉭 QE 8b<~)ᮘ@]Iy]<{~뷠 0_/.pԾ>#F l2sY Gu,kD䑀@*i+/(Syd{sϭ;dGO"32ݖM_e f/_= Я5h]Qny0Te$a$~|m4/GKX!;x}9%RȍW7S#m$`ߧ6<jSDPf.t*2`֟NQ2dA`o}4#?[dBiұ1ǶOȞ# SM=}ms":8~׈7O0Y,eyoAׯz>T8Q3Q}m%Y!w;&h=W ?[?oW~ٿzf2)'v8o}/ ZHW@LuDy'N)2= 3j[_2~s k՟ٷl?/7Ws]2{U4@ƕՍEtľ\o.Z6odAS_ 5~b>)_}y|7Cώ7~@C#_,HC@H߳!A?^`G={jtрyMH ~)ώf5`/pnp}u_y 5q|c'NNg{* $ F߾ʁݍıoz be 2" EN{4͒8.><L!)tGOw,Vgll,w k]T )O<NaÔٲqdx[k[%#l04E`I OX;}fhB/|}Z/]^P+F'S`{WgG1i\?MU]Js ={ע TMUI7 r-N@p*e:lJ;/7 v%4v(i?;\\O9z<|&sǃMG֎+/ |wa]Nd{NMUpN,A^qu轟Rp682@/QC5[w= c@8Y"􊵍߹hdo.wCy/6$O񖼢i' 0r , YFTZ 2f8ge'84/߾hp6 "ER?{If'`IRTh]{|6?x-?SǞo:GFЭ xjgO:">/``79C W$Y@e(f*ILрL(=G+^g ЕZKYn֎RMWbpj73om Nm8sEktۧFo|]?v{wgo_4" Hj^, |!۷˙kttO I?e H /Y)w6j lv _^b ;&d%l]`ҏyF'bpX2\>p떜|MN$G헫?=Z6 n# fOx ׀E: x]|*?Pdn )9:FOuĦ?.Z]8JZj4 < 8zt,@➽S Y4E2%ʷ_iM̶y##'zCF~S~_#e8¥ g,>R;O|܁Czׁl H>G-kdg ݚrf X"2O{ƛٯ=5^[c՟2p# ZO _[Wlb?Y%MΏa˽ع5c)Y<}t XK$ygԊ= ρ/W.cwnoD% i@tج]fj:%RP/ׂ6wNSQ}ѹ5&ϢGeS|qYL!X$w4KYg?YXdv{kbXn a<13Z0#-SP׿ܡx2y*2KnW|' &f}T dSe&O(Ae!  *KDb2DxKlY H۴D605GJ ܽ/ӳ6i4XzVPy>*~g1/9Z1dwgK^Y3wX;e@Oހ6K` l8̘L"A? Nذe~~ul|8]Yf~MD:ş5[obi>>XWl]lY~L f2bY.;v Wli߫#c5wޗ! >y$L =xXeﯰƦo}}Me@`zWv5? Mgf07f,tUY H`H~v -/-zYɀ|5"릿7@/a1H0 lkop5&;D{YKWVj[hр+N*U ~@Z2&l{Df'k^ J ) ` ʽšu[c' j5׀`(N8J/Y}{,p>1GPW>k742F_\h[ "XR[O1~l(0[ċ闐_8@+RD7Z!osk# [dXkw0W%wOghCv!8ƵV#gH_;<4>;`eymy {ϽX5i?v碧R=QՀ#(,i$X3l!}Qfk;q>v֭i~YH :DsFX )I#+7(U5cO5' x3OhJK .؇D2){w}lnih7iuy `׮XO;M3w="`ɴȠ7>q' #6FOc_Ah3*15V, 4d(htNe_|jh3_)݇`ay4o zi,Y1׃΁(+lZ3Gw5M-6Cz/_Lߍo˦T]-[Z;|#Thgǂ9?m@er1;LSA*:WZ;uZo IDAT dPE{Qc<do^HLYy B pX 2챱sV͹=^:av#NkבoB/H o}/޿X ,d-S%~ʢcY /߹FV5/X#BZM n<zl0oum@M` SDz ?Ms[$G"4JH Xu[i%e-_ȳ֣ۋ6$ɛP䭏ʀ~M\W_|]ky5_`>&WFCì'NXs֠jya_BG| 7hbBߧgۏr35@~I H VnGUL %eك+O~᫷7Gk* GW/03 _ {) ~+ _Ro7HLSLkA&d}I vJS|JOi@[+7 FTRYQY@6+V2o˄v|[ @<㳓bJɵfԶ'Onc{+i< |^Ʉo73?S+,)/b+a4goa/9~f/:o*.X6'|lEb{QK"~~_~˯@"޸!|gXIEOw'D @/0ܗS7`˂b w' ھCC{LKT6ϱ"筟7pk9g3"b@Q6A;N!O@R  (A`-@QOu 2~eK01|, 9nlu߻<RR| Cg9϶$+#Woo>{ٺgN*WFϳrV;:]*4uk9ߘveF3q2M4ٜK <(j+l=f&#x.TFV ̢ōe$Xd; 4ht2?Bj Xa"MXSlU h 8`A5w]?ZUoc/ad9L(##?wJjBXILݱxzXfifx[޶`Be0Hu#LWw"qWdngn( /;?xEc+\5  ~\3W7y/孿 쇡s(c HFR wݏЬHd 0v4 ؜T 6F K>5*3cC@v_V$y} ĭprsm}{3֓C ToprWROokY=*S0! 7୿l8v",ރ0,b`j{[m KOiNW<{-um aTNzAqgne&uz,AlW0 ͧ-G4pȩL '! O!uOryDj@l-jrJ@ `9w*|`±I*dk0]$p Y户S$)5-s&? _BJ?Ը-KOL[eѷ`%e^W;t:xn={B.r)9ec(AD'&R8ĕ1 "o ,IA bɡȀY="/MXvv_Bz믳~-$" tn7n'I&3zoߒ^)xx Pe%_U>4@{7#7ٵXumGٺS|>~&୿FDqi[k. ;\oDLlhnrVvbGW+,2paoA.֢=ImI$忙5Wd~3d H}uLߧVG :zI'FjIF%bb{HN^_ `zܽ ړIK_4 ;~6?Z&l@h{?}I2߶e6%gE~ LauH+`zj :øA8,U_WWe=hrktt,hhm0_'oxB9QfB fښA' C=e̽l?=knfI럹҆oۃB @Jo-]"-~i A+) N!=iϬxC1ռ}mݬ4) Яx"18>wˮןٽi<`GLfx,qs7nξ3;=We;NW̨ZR2XaCM1-o>% [nǶ2-T|34YMwwLA`9 0г>xl2gc'saxê &7_6QA=T/_ &7쓹۸U/!> hHuE1uł,zb-Zdb_D#ض6/T${K/vkLd9seeˆwiS;m{2%|Dŧ$֠h! `GQ;2IW7m)a )k}˿㊻xVӉpz; "So#?`&C&+Yf_|.h4S$Y/fkšX KX`}v;т+jhL,,Y~0tY{xYju\CN7 ógK_UuףYS׮9VrWP}Bt4l:ǖNű ĻyUC Z@{ qEb [ٔ+:Ba܃o mm't]b~}9pmS&){CADɻSVP%ȳZ`GV%2fwӋNI:WǝK3H3dK]W/~~8NGܢ E|0LL&0(-Q8 ȝAW@L?ope󽿺M!\\~ᨍ|6Nm}-nD?_g}ʎx:.pݗ~d)~f5~h@X\cC[Ug)si x:?no^2MEyBF 2Be_u < К>SAC? `竫w~p[v's~re@]_BN@`tb _<38$dw?rovf_֮ge̽E/LAi;wek`o\׼4*$na=9h0㊙ ?Y,q1©T[4veܽKwnL?Ս3 X %7$l\TyZ~ 0Lҿ70?'/вfn]^[oLHnȆZ\8#NAy5qS~ <̪୿eWֿ8pRgc…,ߛXFz~kVms=4~-xɂCf./QR,)u2GN{nb+i$ 4k@l5i̶tPL ˿?3Z=U]@U [ëœ boS#OX=|ŦbY y?n@Bǿ:)3AG5~4?B"֠NZ \<"b{̝S;21_w~D.">KMU 6'̲_eLnxbW:0kλ"BbCT]]|9zր2~ŝ1Axd1d^m@,"7@KQZzWE4km^Iɻ );[{dadY:/Xp>vU;oJ g oVe;hC6ٞ 0!DŽ;?(@l(Pé C੸B0MXRh@>QȀ*A_Peπ0]u5{H;v=`nߛv?(Kdٳv?GzҊU*Jn *fJ n񟂼=e_)=P(P|g{ kQ._2vG_tAt I6sITh@|ˍ V{K*(z s+ݳCiooO]No;NLA/U`eT[2 !L5|>nвsvq(?ֹd&k5d+)Mj{: 4!.0V/bz_gSL'$A7  f@- iw%Ki{]{{ǵg̕U9'z1~M[=%O1aC@53H>4˓ &nn,0݂VzT#=h@,d9Y{?qP>Lr1_ĶJe H{Vz7B2+{q|/'-~\ aeċrK[5_ (A*'A}H`]x x htM7S V&S=HO0ewCCq`pbL P Nf8Am/],JjT_2Œ gN[7WJ^qOkFf|`j-⌴R;1> 4|x(uVppQ{suͿZs LfH&rg*R&ކZj7LϸV!RFg kY,Zx,y8ڒ q~X zq4Yj^ys3kAj-'iQ_Jo-9Z0@yf]gx^j5Gl2 L ],/"pEC={_sdügL650tg/@9ٛ (+A0Ϥj'Ygů=OO g}ętT~sAep(I&NR5!ONxf /.u['1s\k,%@`Ē /~|DrLoDv(${Հ2[)NGLphiD'n:޹O@:*NFg$?~vVI:}(6ɸ$J+A\Hjp| N#Yǻod&5OiFD4j0  6Tr&}WvcObCk\쮋ZD&oږA7v :MP$R5JPx#kIj¬>kx3,AddI..R?)eʀ84n2%S-VA:/-072Ga#?IDATXb%'@ᲊ- x@8VuLKjb="߸s  qK)g^?45MPe ʀ2Z~wd> #&螐ſ5_p}[[t1SJRi$. 37KU$(AY8X#T^V]B` V@rYСLjK4%836t\8B][{ u ?ֿ.MbDk)-64@>^ X?/# T`' p{HeMπWUH'h| =}Io=.SeLɄY`vF_*irBXi:c2Cabi|# 9 Z=5dv鷕h@ 9P鈐n25ATH dD4 EPI >~[?_+S}yьf~cc ?+ph1l/RrbyZi1L{W"=6Ԯfw293 3ӭ)eCzҀXx0#5J on#j=ay[燖Awudzz׸ &@`7V]E]{Nac@@ \jJ ɥ[jT@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf!@Jq t % P)Rd@ @:mAI TJ7AHN[P@@*Mf! F?ŐDOIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/projection-tests-expected.png0000644000175000017500000001460311775004604030441 0ustar chrysnchrysnPNG  IHDR{C.IDATxo}D{7,V@]ͶVho\һ  xWh */j`)ARMʖ ZZ6Z]TLi裣s<jۼϟGѩePq?zq_on#w,߮ד'94qiq͍8oo` Q?u?WM|KY߈2QNI@ P%_~ο4*$I},`WC]l`~J,-?`&8?6]ż|u7"'h4 }U~=c'_g|3|$:'ŵeV[يN5͟Z^I/qO_xyW?Zol_rw$ ˑõ~$%ؓ/?9ĽͿ^.ѧ~-?F2AppG,`FC~N|@~('Y$<>sZI(ŸBL/s%Ȣ,̥5{0q @ O6Aas@Ɛ8ZIȀR{]4q2)8(TFRoh޿;ߎq™l_SƤp0"zfMߺa5HL!=0l} PdO(ZAÏM['a_RstE 0,c}mqiqëO%b%W?~Uiyן2n s'vtX[;G+kV_>$TO 1ciD7?#lE,8TX82$>b`b\) o7ڝ;GGyvV+i3Me?v?C?4Y!lEZQN]\ﳗ8}/RD!*3}7oҝ~&}Qp? iKy@͍|#:}F&IR}eiőõoF@$%;ZU}n(LLa0wxhȲbZ:ݓYTD?tө*>eœ=lS5.M٧Uv'LBϦwY]<>cгVmqe/N4.-3 6Qt/o;~tߞp]bE%u򉙮9ubE{ڥ/&u@:0) V).MKeC0~O̴!6 #3{h:G+[tߜ_x˭^$}*r8 i{|/JzLi;.8.<oݟYVTb Jaf;UhW#(c#sB`e,w~!j(74ҽg$ik֍K,|b"q=EPx!`xVN~4UH5?|ggnViM4Sԡa,VJ wFs[ٗ[xCű/@_6ʝη8M ewiokPveCWE VD99\.~%C2yzTU!:27mmvYP* Ҙ=4]s٧ֽ:ߖl_2&3ebV=ui;TL7~fCgI8˾ܪ%:OYŵO/&& ~\>Pg(pVS#qem<ϣ:߅^fMߺvVLL.\j8Nywq-od8Í1}) _h%-?[}i#vdnu>ywVw}]c[K _v'q4{;yO%$._Y@gE Ŗ'xo{8fMd?պE7E'H}UG},J,@`F@% A{}v'@N>13~>g=ShLfM~eݟ(w㠘jeM|,"őiߒ,M>O ߏS?å=,)ygٗ[ݫp g;qTC>+[nҤNPI=ǏP{VCckPƦf iT37~V}|/o΢,}-Ӂ~%_$b`b\D_._Y;y|f(cp᚛@.-~qCFzfŏޏI+Y8ʻ'|um"~g~!܂o([^>GlP4zEq_DmRIx#sח7|Wڊ~o|eOnڶLPHIT|+[ H5K0Riw3;'ÑcI,Aќ:13}~na--#P"E7 `j;x+Φ!0| ¼lC$XيN|>V-6usVK/?@?OࣿYH `B $ZM+|}wd$%* &Y[;QyF &7~gMߺQm8dS3P 0q(f?ٮ^M;͍'p}{,w}t}ϻkʌF!ŷvTo|`j: x_+<#`o fUTK:}RNz?޳?sJNo;_|UZyOހl>p Vӂ7ڝ_?pW>FV곏:^){~oǏ lµg;t0jd`}7Uz e|N{߬ހbf ,U%XM;͍;=Wֻ;{gz…k0T_a c9!?wxF$βV![í]|}y)>;ȧǙ |Qa$ @n @30ҹ 0t\ @I ;30/0"P#@?2 0o99Ѐ} ]~<9+{ R@`jz@PR~wP>(ItΧ~@b1 Og5(8nXRVΌXR}µbޔo&#1 'eo7zgdho (>cw_}We"u&ҍPxPnDPѿ}`20R8Pع6]w"$Pѿ}-`{2@@ @FF*h(]7? Ȁz>sw@诿aXNz)Acb0ea1ӿzvO t8 L2}|ë)yidkf3kGڎmtΝTKzTi5pn|67{ Tu7uz὎$&Md 6zaX -o<`[=PuͺA)ϲVfyݥaG셅c;l`sW,-oXGnzyYv*gwN :&x߲Fv@Խbݼ1%fGM[<=8臱U h86t׺-/Jѿp;è =39= 0z%`O?' = 9;2ަ$m_o|K_ x{@ngd{4ml>>FN@7$Iq5s-fyv7p05K>t~ӟJhe#5o|V0(o .e>ě߹l@A,13%;5Kڎ~()2`S=m@KPʰ+j4}>JY<$iy>h<%%pn P)GΗd x`8f%~hO' -A-ߨV>w1doF?Xؙ<f35K-d+gy$ű~ g08NFH, %0)% VIǍ~ʭF{bJ,Uz?jrrHKrF?X\=y "ӟ}oUPb $@H P(B"@ J@ P D% $(!@ @@J%@H P(B"@ J@ P D% $(!@ @@J%@H P(B"@ J@ P D% $(!@ @@J%eob8 tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/text-search-test-expected.png0000644000175000017500000001156511745120722030332 0ustar chrysnchrysnPNG  IHDR{C c &oT>O`!:oj- Y S@ɦlŞ'AgɄgo-ңO<~`+\=8;hy]suJkY,!pJz#%Il܋ۮ0~ya+=F0Vl"Y3]wgt[]{"X2OzWOT5_iqIXzTVkg|nWw!tpD(rDܞHRVCa+e2M]AWe$,Rcl$'q0wklF1GTMLy@Y?F0n|؇g!- 4Oroʳp26`,|݇1b@sfLQ/`#8k747o?V?Oo8S .[%2jgٴ[*gRJ֏T~3w2peg gdqm JkZߜx~ʛtQJyNu_lŸO'C+˴E]9,}WI[-{ڔŶ>LES@iPgT];d+~ŋ䷿c&o>4o6kDͬ+M]_qچ6l2;|}d!ț>U{i /^01 :yzwb)) ں4e3Rv<~te&ZN{9*AJfw5##h7Pv?RUs׳OW =o^Ts*~&?Q{>2w44S:s2C'+C3?Wr}qu&ƹqꄠҙd`J1pOL}7"M\_&Ldwҝ&mF^[Gԙ\v9@<t1 Wl:޿x~A5Ygwʔt=N8745/~w{]O~CwۮzezRŋSz)w?4]0rƦͪo\Y:>~t֦ʔ{=UԿy Nޔ,{&}x,_O2~ܝoS7iZTZqb|J)={ݹab܇#z77Ǐζ~z>){=?&^305wcG'}%ҽ00v00n:xջW/V|G/zu Kk+e\qvʐjblCa:tMFw3ι8S.n2pu~3RF[_-;j4ڡW>k _}uw`kC .vm>! tڳS؛ۺ\gv1M>FVsBbݸ;l<&yceu5zJ;7wr=GgO~[90tP[ܴd^|w!o}=j3`N `m] xlm/;9pN"7gMgՌ@ *~ I̿9L ʑoYCܟu3'ޜn@`ɻȀq,]kW7)7gm;e ~`YUvZfU@r&l\Sy䋞vruOvtGVvN; `/ycy87\ۻߴ]\=CǟOԡWCvt u؀+ @e]zjp0@u!wV8йl@\S8ع i@sNYzqq`v:#[ X[$pHy(Щ}O*~m};g#G~&0" PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @#NIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example001-expected.png0000644000175000017500000003616711664235333027014 0ustar chrysnchrysnPNG  IHDR{C IDATx ^Gy_Y˶l" d.\C.i )ҙ$)tZ&ӤiJ2i74`H @LXF2\Ʋ$[,}}>=ssv߼cٳgws^V,,@8*? 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%dx̆ p@Ȕ1=@ S@l@ L :! 2%*S1{j7Z|mTS<֥Sֺ4;fjgyH%baah'!ƞّ@g=]4ny@ЍЍWTĀD ߹ݯГ&L}Lg 30/P(<x4ggD mͩV%^ۇ@zy]{Օ=eԬ_?<{?_ę0>Q%]/ܴ3hy@~f2@7n]%?#k0u#N߰T 4 VIӷ'`Q&|`X*EHv/DGm_K)yn}RsCFQM-Qc,>7fw-5 oSo|k1 р3O[R *yOr%Ȋ;>py Gju}%Tj =N_\W]xcz롓S?Jw8 (@F|_EcV\\ik6Pv=' i.~@:h}X(ȗ(gQ\-Ϊ UA&@7~t@֦\b~DPߖЖXnd 4 Z2OM,uxMHNLma/DJܽB}[@@_0< f)Xp  hg{dmQWNy\Ko s[_򰼽͟- р6~K-k kX%2S1*plUHiW־/m!Ko.Y]?#(|o 9ɜpߝO?uچf[ ]SЀ]d/|nX2VIY'I4Ap Grx$Ȉ.Pכуc wX:*/K~4#O'2SN s @m]U䒺 //OMbZ4GO,G |\SЀ2j:gZ_rs4vf9d~6 \q4@B9d}.MԀ慿4;lLeaH8wOpxno-%p>\b*L(Ӧ'Ҿ:4g~'OHŲ/DI,!${^! th/GF+GK ʫ_/vS9I*ԡ_F4$ @jnβ G݉{!1`W-]],{>mɏ=0~5뾴 mm`څVIhЀ-W1H4D:b˵nE%՛BFrTԀʸ}IP*hW% wcn} NS!LSyqޯTng-%BQ~zYY5 +é4eS0yokK+>+5joi}^{k> D~k@_z͡C$˪`ՃΛ?OW! pHyygP/Xvs|9kʕR󜳗рJDD&䬊VFia٬+0`MZdc܏JI%PG&z`{9<9ҿT_)C$O W @!W !2P]^\%09-M8ta&A͚rAz @/)C 8٫޳_ikYH?h seOqݢ+S;Dd1->;|gKΕW)=\zw|8Ԁ@۠ yΏL4 ."JԝҚ'`S)u^:PuυK uk  l'qLMsҢYBGP<㽏?UV[ҹH{.Ѐ2|j*> S[oei+w^W6lg Sp@pl#D|浿 jm=Mr׶]06H pmqzV-ks"utj@(ԏ0BNHG2JJ?Kℋ|˓5 #ɸW}^NwL%L,rL WFYOy1{gnnWl\Ɂ'4g$ 8b/ kue p |H`*}U!V^E tY wlh t[[͑$`SWg.*7&@p.30|-u U꥖m& hKlF䦘f 79mG4qV}e+Zq6WSIЇ^koȓ`J1ЕJ\wU} @.{$ $ֿzOOm~FuŌrѥT|% h/0 {{a6Q򇿚-16|Er S.jr*֧% 94`<.U(|Κ/3۷EZ!SrI8=XP2CVzf^~I[<9xk.zMѻ͙* XVneRGw_+}nҧ$= b8;AF!9p߼U ț>.@*Ý>UQ{?()Ҡm':J7}KKLY@_ggk=8m/ ͤL/ꐷE~q\-R\6 A߼P  @@/g 6]tpS fPy2@dÝwo/~Zew~-JPd]BoX귶b ׾R:ۏ|9Vȧ 0_io\xʳ_Iaѿ0b#2s_̗F4N߰NP*{ UzG G!vS Z@dਜ਼Fo:t{>pc%aJpjC/=ЯY]sOV|i(~ϼi_L?+uFЀOm}`!v|VBZnx˗P3 46Vnр#Աz}Smz/yKM$ _u6D\1@v_w[* qIs_a8jhTCf @://=tb!9?q lY{19-z U?2fr?BD;Dn.jN|F*k?>)3.e cQII{i,sR79 U7Z\|]hF}z>>\ǚ^tėOU{`G926 s10 Z7B%r}=heWgMW!;ATFe dBd@d1}IFز!I@yLzۻM忶 (Up~J>bPy- [rq |Dm-*Nx :;Ot  Gݿh~ʠ-AGf@3gB}@t@9q2K߷S B|>M^ 4<%e{* wߗc og@O<  to.0( (޹ηs:}?.sFs*HsfiOwd+G@zu70ꦑs=0%wkN^)m// nG&M1ЕB@B~PƳ*GKkVEMoc##K)<.+ PM[z9/A_$'LCx). -J_SNc?&8|H(M `Oe~Jџ$ Ν4l/HZP2C ˮS);4$Cf~ӵZ|w:腦C 67GGJzEN\>mV 4wp46:0%jS$u :2.a{}p̀6=Sj3>m{ o"Uqa/x]۞v}:3HĠRzyJ}ճL5Gt_W݂@ %P'eOzduoH9d&S _{S |8ez0 O% QR3(&c$)E+R9Q<q)!92vDM{R8K /땔m'SiOSYYoԏ@Teq0ol҂qidNhԙI@gt`B#Luϑ^.&3_y Ơ;Lk̏J0h8҈q `\3 B ( (gA٨uHdʕs- Khw1:1@ #+VV~ ~y6vJnqiN,))cSsa h&#@VD7ĭ?Ok088[UJs`{ ڸlEC4p4$ PO@kɧSߊ3S%s1>GMB&@2NEx0E6`T .uЏ/h't?G 3@{;(TF8l^tlb2IDATM%#3z)\go.}IW͞}>rymNp_['d ;4! Sn*e] E]H y=(7Bq{MV5W?w-+g@"FUbaa&d"o~oh ?0V;yU{}e'haV[}ڼoõFhM[̲_wR(DSO0&2[5lܗ%ݼu*6|< qW&[ߩ.K_%'Ebd;2 67}٦˟uesK'kW{yMRJ-Hˋ_9zs"'`#^%['S[o_\kЏE T7SP9߷6J s`(K/pwB 7E;PCy0iU4zkq9}/kH|`XÌN{Q (AH̩=8.5cOpy}޳tx~0 SWd˸PІ 䁇`? o}<֐Pu sۛjkHfU,],vX @&d썱1E] ĕe?XzUnհJ-fZ@-'%1/~%}/;oI CM*c_z!A8--r p3߂o$¸\pѸrӳSO1?>i> ?rzk'G@@u2Qb2AЭlJ"_-&ԡ+@i|~a,")*!zmC0[ ~eoyϜ6;?27&8r6#_r7Lk [D޶qߕK*'piI@F꠯fa'd#2ӂ+X7[@}fԟr&.j/VrU9䩉I &vcyLn_#Y[C,#:PdM8KFlXg&JB0 F;2Ѻf6[nI@-~ *_1ͤ;@AZ]" V7vo^n#&͉U As32\_2IkM A2Qj2ob_vHJ5Y\ep+Ws;mk&'>3m\iXG0%?Y o왒ug{{U].O%m|w0%[:S8_)%Jٿ(WYz@F)[OUq ᐊ> _P2N :l W{g`^ 䟛_죿d$Dwޒg` xY엧f;j=D-p>pz, 1$ܴ<ɞIǭ9.I_9~ m8I ~Bj2V+xV{x;h;d%l͊L~O6P. EF @[-0 {t>0 dpSqy@%qG/~ɩG5?ﵾ ѿy0j\%Lqh@!wqrmʏtxIbζ;zB='ǜ `$A&Ydl@Yo.үBn(Դ57ۂ3ZyWX+i PJJ"ɻx61Xi@Я"]MHGС_eo+"+oo7t.w8_Z8 Fg`YT}d@z('fWCox,"w4@5hV/]UG9)'/2P9UE }Yq{W}CCA <~=v i2 g]-f?L(2) 8zL j$2`nta}25?M^#}/R.ݽλk)!ٸ`h5z/GYnQY8̧m/Dc%:|!g$$V7vPUP:תg+涛\/lh7- 4G|ߤA$ZE3t*ԦVDU<ĸk#i/?{|rV]e|}hKr6U:-,y/]a+*K-k[v'f׷CӺ$Ja()~r^͕+m{%wXӖ/,M&ٖCl `&9% OT8 WtF7D:Jy֓<'+Wկ lJjzǎֵ|iTv?g@7@|dxkO4@:*FK@~>P_ 5#IO޼^) TD]DnaI0 dc\fBy#h"@pPi[z¿U'o1e\+gykjiweeD8 VA2)y#H40^FB?ѿLd& 5 DeR>5D 4ՕC5 .J ASf fj]ϓ СP帯 ;` w㯢W˾0#xİ A91AbmJR,/U>NpgE#* prf@Z8ݿL q sGH}z$PxMڟ3"6@pFR4@wCuR ?  ;)@vP~%c͵PqnInܸJgB*x<|9fKr.4DB[_о̇=ЀD @shNw z!potB/,5 uEdj燸_q`d}ʴ`$v~ -=;(]5˓Xx59!@`ӎD O:i%q J V}#Z_O W_͝C#cH IPdoF|5[@FTK`WםӪGh~ ϳhQ5h't\أP}"~85r0U 8FKvs5JgWH?^^ LT z Xe9i@Hc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JHԱ@F< D :  6B ( Qb F%$X̂ `#q@DYl!CHc1 `#y@@u,fA@l8@ Q@,@6!$JZPOxIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/for-nested-tests-expected.png0000644000175000017500000006223311640436733030340 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxmnGyO\|0C "VR,lAJ R71zMJ[KvR_i8zR %RҊH1 *yP6C}l~}?|Yfg=ϺΙ5kgYk:q!D!}˫2kL +(|  EІg >D"@XhóD "@B,Ym"@ D`P6 Dg"P( mxV"@3@X(6D"@XhóD "@B,Ym"@ D`P6 Dg"P( mxV"@3@X(6D"@XhóD "@B,Ym"@ D`P6 Dg"P( mxV"@3@X(6D"@XhóD "@B,Ym"@ D`P6 Dg"P( mxV"@3@X(6D"@XhóD "@B,Ym"@ D`P6 Dg"P( mxV"@3@X(6D"@XhóD "@BG 7Mf_\)8q{'D`J>|˛m ovN-@_9߹x88\8p`#>D`(ׂ pBZ$v.Ve&;床`po^Lv%# S!/";0o|Eg&Z^FzZ~kLo4M",3g5{g@ݕ@ k@0A/(bD@yџ>K| ST|z/.JѕM]!5[`wQQβ3k`öR/ȺX SDF2$GR2J4Cpew KYmq7"eBjVـ~݅ js0`2hj,g)I'>IGy8.DΈK[svGS^RC)(Je:^R^ 4G@CJ@@IIq_XPRVKAu^` fE6Ӌ$ P?;@9SNGC[D^@doZRFyR|"jvd^q—V/р;^΍&#1&m]%Raw3RB b HY!8'?`!JTqdpXRSWx["zH#XGQ/)θ%r_T8Ηuyqy8 \l 5B7^0m9Rg: KpZGFH ҹ{Ly @{NC_K^¼RNךB$hʰ`z #BrFbw[S;Kt8Rn5d,uKn&k$w/MpQEh<`Or^;1Wh^ǎ-E?U0k'ȕV2R,c)c6-ԖN QPGo ZTWԔ=,MVa'",~COw})UЋh5N1x{!\V?G i]jy6h45_4@^BβӀ}8smCUB/..^yθzW xm3J P.UZ^hKT!&a Q0-jMY*pOքĬȀzp& (^r5>^4d܍^3"UJvv41+"ɲs `K~B@ H)ZCieAc$ RV뮹u~KMNY| \#iK#?'T!}Ҕ\D[4J!A8{zQ (@8%_:,P .)H ?.KS⃏@+GC\@Ha+zg *qXHh m SUbo%ur^R}ٖ'/.%Q 䱭K. ҔeP*;B$զ84XHYVE,e?UE5VS\9% eܥ[YK@K4oa5 J\f ˨5 4do۹v U vɥrb!6])i=K@ie!7vTMqdw3\AŚ&uyܒm[TxK4ؿľ5+ gJUx!uɡadJ'y?w> ?@a?js@S@:?ΌI5ayEhZ _}IgE4?{ԜFh,Ao!$'1.EԀ)jnn3*! @9 E`6VG`*#*yP#zzWbr)ۋ2iptBOW]2rʋ~ߟ?۩Ӷ1MӶ[ԀS m%cٿ-FY :pj(J*i~_yb5۫4eGrj5غ (wwБ[SEvm]cg,U5d(. $]5z}Jh˯Bm,_TӇ&h{o83<ϹR:JppPXGꎧR U΃03E.2#,~$̀cYFЀfAW$YO1D^ڕ&u),ƈ,cLAbl7.DhԏJb15A*Pk5n꬚r^*QGV?6R*,2t:תpEL52@qͳ߫vF&=S\[WЀ頑:ٿgێ (,{)&v+{ErG2A|#{DeL]tKT8C)ECT[Kۉw͇U,0~Y%o>͏$%  *^j~>:ØG$Hqq4{uܣRW&:G*X+rbOhA3oŸ;"c֟Ag+DV,T|tnꊭ}&,~#ݡQWS"}ys-R>d,x>w%!SkmhUZ}+$3v(p*oU/OQvv`ġg1{7iRg~ˋ;ݯ z^)U]"pX%YfhBwKF/rr?$<3fny 0b D0%Ұ'b-@ #kb,;ekgHd Ԁ!8oFPQ|G~h (D>zb>Z~VaPoe&UPOJMI YŗeNpgvFlW&.KA8ׄȒGF2Q=&Swt磫T<3S{3Y!B.ޫٿc> 14|BP23'My9[Hs i)JCI߿GQ;nPflE8q`iER? x+%dY_#Qh̩pY0AfO} 4IlgHm]֍FP^_cZk}9Vc @Vz ][W)fOŋp?a^Ř&p^d)̟lѷfgz@+ ް5RѹY9ֹf 9oY/NzI?LFuV$Z D30rgxٗmtrp1cT̗ hQlz@yelʗI<ƭBm}?߯6}B`Y0Ye:az塝( Τ<,E ˶ 4x NLkn\NX; %+ȂE^Bo2 b[cO}^?8Cp@L}:rX4ݥ#>Ft܂Paȯdؿ}A[X zy{+:jG^\O^"\Ul`c|jr)1PV`( n;wm܎~Z+&T6j}S1%H% ]ll-JlgiWHaP๗#g7{Tx7#T2*1Y,P*8-ϿZUgs\o~`?qC;w lfxF@5ISN ;6oYF)AF%O=Fbtйq {Xd50Ufr(êM3dP>[iDi);(+w?WDs*yJ}5M`yLgֶ93Ҷ^c %\b@̺7NSY@ ɗ'U`f(01ʻYLJZrtP8@*9MvHA@#حcgf6[| @*`c}߫J8k".}W625}I=Ђ3XG-/lwO#=}|Bcd%Rv - jz6-վd`j W(28p?Jdtk+7(r[M&LMS*OD`k (n>I^:pgO=P K+;D`PM hA"Y[lHf[ؖh@T0ȘmIȋ5- 8Iajc6@NpdfWkO_Yٝ,,n:Nֱt9C@m71,,L{9 L9OTO)9ƟSl\kPEk:%j@a(:%VVbԯK-KK"0s85%dd2ftqqK(Ap x(-p%Ѽ #@HQZzh@,P-t)Nbg jXFVabUp8q욕cCJ7K-V,o$5Uw^.2 dʝ@PLЀ tj M3IfZ7:wY>Pъi@>3zخO?UQ˒׀x?;6o_4U&{j7qexbBGg)qX%"@2#+ȥʱ>/Ce/~y(d>g~hlmrd A Ao[7(q~ϗֱUbNq{6@^) 1j_xDt7f1v?W]Ƣ'\wE7}c6`K- ԠL g-zܭܻxCs獗o~)DR"p5t2umês϶ kPoy3R 2=ydT @Qh@BJ4F:2Cv;#}& XL"6BtPD,W|qxh) J@HI?jP'$p:sykˊ4w  UPQ4 lOʜ~lگ ю0W"H&@tUn՚Ae}JmiMOP Ue|{oю?E?.1r`:j{7&˄5*׎f(h?B&obW]hGb5)L4݂#Rt[N$8jpNi͸WUUs2~(_TWb 2O?)nM6h{KF w~ۈ } Se4?)ywșO>nMe I;?j<$ =mv5 %; aPaA ]Bc bʧ, ɟ!P yCBQ?74?k!<:ʳ${8̤;QN , }El7'dDB9%aҭ&@B=X]Lxi7斳? [m+`CL  @/v9q:0;xSW#mUVp,]7t缨eF Px{[ZrDBEqsL.3b[WeCa`B(ML2]L F.)"Eq*4`OIM??Jb6 Ə&fp `8˲йpL|K^NԩjN?j_ ڒ7"@8MoٌƻиK /GpvW~0"@޽2^B@mI\ 7p]bdO_X.~[NmFN 2dPQc#eMNG0;we% -vVt ;Bz/sJNrky/4  {y_wV~Y׽URuc_%/o .SIP bnm/pi'b-%ub%^ G)TSCW/5 i. RC?\LP?Y8Z,J(\>(f =/~K YTO _]i Gk2#8HY̳&`.H"o1e o}jfuq/2@6%c ]@cK63閎df%ۋ,aK|?|%P?aD̊ 8[5_ 0 cB4B16pŵL1'9:,+NyH=vc!lzN;%2h2м+o*,՘7k1PY{WJi }}dQwFԠjLҀ)&rx;NSےEog ` \ngw?!6Jؿ/Xսi8jPMY>&LCVˏYk~a|*5E81x?#@hi!'[^GHcf-R߃H?Q%NUJxz..'<\A)0\K>O1#kPʾ~מTΊ}`e] 1"rZ(ENi,7$es] r7lB.p= ,?xmTL(6HR?*;ZbV 8T< [W+a־$|_ox3BZ8.zJ־h&l3Ik,RLw~ U Rį_pmPeY W `(gbZ* ?t–f²l1J9m?Dg4k;~d 9-% e:q0E1㦞m&0g}Yc}4#QYvة["){08N%,\`U˯~ZW)[ hy |W_w@iZ/ͳNZq;+r42΃wӪGoAz0o ٿNg2LcCvw,v˿58a?թt`S C x]lp J6 @[ )OW4VLV`'#/wϟ#/9KZA}X4 =?qMsHdAGKE7#|?|d:R?{ppmGoBiB0+Kf«h xGOݍ1bzEÇ rFzu?2U:tQJT5"OU?F^M΃C{Ee/υL Hԏt^?,tX*;իg &M~bԖ Ֆv |Y:ڣȋ'Nd#ΜLDP`|R}W̞oc0 _Ȓx7I_]s*Vm-oiN(iRqM^秿A >2C$^8h :w(r`{qͦ V>@sl[pPs}e=9ǭL?f&8s./?\Fn1&^w4AGͯVl\bVP6v7n[9-\,4@^(y̪BF uيR^NWF&{ h&Y*ЀN.b[hKwY\~Yh%g`h+ؿzVi@Ifao|ǎN,%Hz9r~_Ϫ5 my m9%J=E hcQr rA [v>소V".E61U?vvjf~(׌Ʃ-{H [Nn(2qhՎhv⼣l-{tA 7,zޭ=t|ppM'CW~,{=̒IsMs@4Q؟S0~z(b}c1^Y540C0nr/ ~b#:P)2pÿIE4# pZ^9W D孳))7q̵H$!:'#ŕS%¢?/.l 4vI@]C[g%Gt"agn U$d_|}?#6)1(ָ{čaGC, ̇VꨟZspԾزb4^:$MiƨP`HWd_iF٫㡀jq*?gAc(Xr=غok:0V0od0.j(Mfy8̎%ޢl</ ; \`&/hbh 1h2<0g kGwVbG`x36A_h}s OIs2w@}oUhR?;}^fz ow0۟S*U~R^lՀ}{ Fɗr|i@IOɥr;6-w.Ԛ&hp-%ګTT+GD㍳f"EG,3x]*3NڲW)}hnb_L1ㅇWSZ?j?徺!@pA@"b2Lj@9ZKȀ 2rP{%UW$"mZh@9"x_~A ]-޲XG1O#@8hc4%pgK4?kH|ξ fz^h6S&}VdM7mD?V @Kz},Q\g[NKs:ù` [1w\c5BЅP}|$}A@EUZWUX,PeRr.#ʱbY!5DsKaVҶQs nhqO+]Ć}QKlzFP ]wFVb*EL27]3 Ƹ5hk&h N~ʨeءf6J ReYN!@ja@bwff·V"d@l"A`9MFfHij},Ȥ1FU͔)*x_~fV{2e-"ЉG>;d3Aɰ'Ay2tMz6mj@q3ٷ/e$m+Z:MY7׸Sc')o+uA~g~m=1(9l~5a56O  QsmE g5#d&2p\>@ŷu7c,qxٱ'L[f}Dkz=;wC.NQK˛ePYOa'PeFՀy'@̣X "GecEf0xӕx6rqӨ(@׀Ab7FY!EY5G`pY#,&"3@0F'`eX>^}\Aل%!ٿ0&!sA0Ȁhaԯ2@vJK(1yՅ9sԺ/>i/&;@xIv N4SBd]w؟ԟw̹u,[ %`ٟ?f6 (Ǧ 5?vdɈ@*,׿g-, H~8g4QD<oBV"PÍ ;`盐 D!@Í ;`盐 D!@Í ;`盐 D!@Í ;`盐 D!@Í ;`盐 D!/\D1g~Zk_^2L@g*mR٨!&iC!kDTg뮹膟3p /bLO"񷾪=y}aJ&#pPSÐe+~ܺ}GR@1 @hBjPGf_1oSoxj;v#MFP 3RR/X]+T @CAA`1"E>=۟{B/*pK@ И `}$Zpמp!nLED wWՀ6"pĴTXo"0.! ƏFmڷBYGrx?.3|gf@vQ/wB,Y LS#ܲ@~gY.e!^B6:<v _{L@ԯDf^w/%KHXjⶴ`i-N@c?{M 6A5v$x, SЬtQp VpI7"5(3 1/QNp2.+PKPʬ?m}'`Hw}BԀB/`ڔ5)K?/ NzYcEGAn۱[QюQW @Nkʀ"E`E `+/ZyƇt.?erɾW,Ȱہ4vCd;Z8`ANj_?H3Sw_qkV ÚK妃>v%f'y;=1ǩc Ap>4` 8 j@1 1^4wpPd-hu4O[$qd ( ^ſBO(OEW?{SS@Hig;?Su@O6 c(3lJpnTN 0n-gK AFp/ ,z e0ajHQ?lˌ/VpYsZU5.'3( O]vgD2x-@[<Ȱ?[ 2 8AuflJʔ8R\䒋3iؿӟHr IDAT 8ܙ0kH,׽"tÌMbJ?tV-Xpc8z($/;%_ڟ#d W9~ܧ~Ζ>kL q})pa'Љ;2 0O@!vc%>Xݥ)RTs3^/Cn! 2PFƧC1 ) {䧫XSg?5r'^1DIͳZ~Tv y \\{t.n"H#$np"yRp& W˱R;vcm2PH [:K6cy/󖤔)iR[`PCJDXZP.`*NQ@s"{]>| 14@ZgD|[  L4 Ga!9ww0%Phg(e5X֔ +\l7L.뻠{3_L'?|a}UqV0C玗[A/mv:m@8L@xBWxFj b~YfI:XB507ッMd^+ O7s@t q(wX_ſ.lz@yҫb>%ew_6Db jȲz3[7D~f$Јh _C`h@8'C0t8꯫ 9z髳V+Tjӊ"{*4?cֳ{\EV F '/>Z("í߼~p{t?=1\̵eXI@sC Hhzm_fo!45 ^߷ B (/-Vڙkqš,YB2Nڴɬ 6AܢL>{IꬷRSw_q#iʏa4ۧjD&(¿xO6if44TG Nͳ]vT2nbbbyu%̷m2_ ㈡3%`_g_7Ï `01Bgm ԏ+w(464@@ ˱!M.buNr;{B""\2=\h c0Cdg v Qꗢˬטp@K X a G z23 wԏ~ vnpA5@VF͋){0K 5q]`w&ȣN bh Ȣ̥5F #.jvDQ$KZb:fB'ճjƐ&u2Yp4p̀9m3U'' 6:!娆1gwm] IOE!v_-"STx37^bsn+lPmjT&oQ|g4.x?v~ګ!Ql'SְO1[DEwT/S8@i{Rt PQ`%o]_[oACm(3i÷9CRaqe8rw+/UZ1|%l_R٣7b,4`-_[V Q4Qa>lض+Ug-Ev$ hw >Jezdb8M= P9X(cQ ?Ql_Fv"jpѓplIJ˜ @x]aS_&Ϯ!u#8tOaDn͑%G` rĴG!&'!X Qs6NF #`[x?2A-1`_ZQ=BaPJ*%8L)P wjN@Kb;1 @/Rn'H g؆cX(  CO Y$Yw_}6\Kp_*v>AOw?aq7t{wE3B%p+&߱K} n(;Iv, ڀ~w̙dwWy z7DXo1@P,42Dmuȫ2Png#}'b5kP|<:7dtW^@͸ 5ԴOy?ڧ4 P07ly3aLJZuMMP})VjsQ*KJRE8Q䇉P|; w wC0:xb`-r;EU9/wi@gi@F8 1CK[s)rD>kRr V<|#-wZ4D/uB4JN/:~0}9 ps} v3 )mѮP#`S8h:AVϬ@1(S?.Ϊz_-? "pV%Ng_|1cL4dJ3WDV<*d Ê@=kr17ꩲc;)*h ;z54]Fk`$"q'¶jN[)P? 9RO-e%WX wYh&OO%~;Kb'w /)+ȷ|Sp4 / *q1{ (!j{M:$\SnF [iL_8:HO$._(XX| xQaCG#>c-;^mTbLի AU|4:./;1(0i~WN7{يwK4G_,` E0Zl $pP ʧ;^[f}RM@ J ?)ԯ{_`׀ 6C@Qb @'A?$ eI[D2!ܚO +qM4;b=d"M 8^//ZAFG HZ 8{9 t -؁[fࡰCm#`I[i) Z|ʓQ\ *Pn{U3 m QW`Ub I&@/mQqнB.=X-d'vA)w8^;dC>}Ÿ@/Ɂ`] 4 [q`hc #ezPOd%8weXOP#&pEb%MKJKz"7{V<:ɗ"/!0bAb1d5 Y6A3C:88}u&oJP d?.e2;w,߅/6g_cggTRK 4Х`5 @K;ٿY>QxwGGLbbXhp&[*a2BS@-+u?7z \ȥ= 2,1&~vx {=NzR#Az#3 Pv41pR'͕4\4iq0R0FPc:8|$@Z/߲?b€zZkFG}~D4M_i,~d (M4TF@|Ʊ?6´ @sH!Jƌ @~vmY;LD`P.G }F[ڈo6Ac|e/DLO @e_?YMp"tj@AIk 10LmU @i>?ʚbV)5 $iR 猎8{-kYx# pbG7H/~2ϙҀr }]:Hl\ j:j-CEQ& 8 w`[aUڜ A 1 jI e`\?OKvv W pLExRE/ LLVhʕf `[ ֘xʀP?8% P01xClm +hʘfd4e*јI,- `榳qkl)>jϾg~0lY ~kAਟ/w @z?Vsu0;kΝ# ?&oY}N?'/A6am"8`ܸsW}+)߲Ow>D!kc<򕱃OkJB+נ~+0ig&8v 8vL98:-{28.Vb>b@}UId/΋Kgl m\ɅL. -84z{iWPؗLr8Tš8\Fdr`, 0@. hV¼!{GM71P|c/jIRBQ}1)v\25`? #wvc\;1|SDs=b: Y [<(M5 da$Ġ|F4 uhoɨ m.Uژ" hҖ1!g&иMCcЀq~RqI5ܵWKVw2dp`7iz9LB/m@GcM&"exwl=E%^-hJ{$m HAvRHL3p h O߷Hkg3"5 Ee` )$ٿec rq֗@㱿ԸSF̀ Sc SS(1~wИm4Ե5'R_BjHLeg*f)?oLJww&in7ɳ/|!7ӠgpO - [lɣہ4Arn`[ߙAB;?>b 957 N;SUͰ? dw[['BS@sj7lfRs:%G0&+J&M7ּmUhj(Ѝ?}Kj@~L8 hEF06½ VsP^o?^陘p1܇A@Ms}xe K"0ɠGۛ&J`쭂%Qw]f!D`$(#;z4[(~W^"0xZ!VtRH>o~^Xͥoiƾw,D;|x_ fNmSn4*A`y% !:`lOg8&̸"0?(k-V8\:5(CRJܼPf4f!p Ǵč]8l+2'iA( ).)+! Dx(N̰vϰQX @}C뗭%~c2pO|#l\|i!E2J5kMxŤw"@v  NW%;ñp iT#)j趚wnZ܈sE@aŻ1o/>Cϔ|0)eDzXg%eObCD`pMhf+dD Gk113[<, X,,O=>oz$!b1`QXu`n?|3gy `g}Tr _I@:v0AT` %~vwa ~kZU(A?ODl V`ߒ E+O(e% ;hc#?j[@{(1'_v x^h&PSF 'dv" @[1utEH1  ϣʕPc(+&#s@ΡW.ǟ̯, pЍS{¤%>`*"@bpP "@`*"@bPb0"( hdV"CCqD @X@#D*#D, U$DPa D`PȬ" D    @Ff 1(1TGX42H!@8"@,YE"@@  @ "@@DIDAT`*"@bPb0"( hdV"CCqD @X@#D*#D, U$DPa D`PȬ" D    @Ff 1(1TGX42H!@8"@,YE"@@  @ "@`*"@bPb0"( hdV"CCqD @X@#D*#D, U$DPa D`/(Nu.IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/hull3-tests-expected.png0000644000175000017500000003026711664172106027320 0ustar chrysnchrysnPNG  IHDR{C IDATx]nGU{*~,+A %| J"HxAˆpa&^"h1 blH)];{ٳמ{fI;~ffy?k~ŋ߻@G1Lb@8!0 %u륿JTr)rlm8<i_ GZcAhQ+_{S|nWЀz|}$@vtd6/x/5a֙C1=ߺjw;)؏T'r.ʷJ"HIqPsʱֳ[# O>ogikia"Ebq\T'_GNsXZOHew,eA'A*U+$2` x%K: p O_4@ 驦W8bqK[u mHiH!8)xA> |>ї˿c]x ߤ~d|ĀU\o-~0xF|Ez%'?G[ʢtg^yWpחV4.siVKWd A%`W >~C7weHvWr/oVݘ:@o[ / ;}Aook\"/ m gd s E2e=1Z&WIo߿^8ܭݟsWt!tl/oC3&PWW^wӧ'm꿘 Sl9\r ݳ@Rx ǁ OЮy5U߯tv(ע'_p#9A+"Ý20fRʖ?JPb*ln|; }g޿ uN e?9Jʳ@C5RO KwL p(j+pGrmÝ<'sO>.DPAx??ȕ<|6X ~ cH'(ĝR@BU?-IU`dՔsY`H{a|*wR`J]|ak!G~, X'ր\WwG>_[Nܛ'<'J @qGX;@Բ?WM!pIP9R@ 8}m+\&-AV߶@2,nzvva?Zw!J 7`/mb"4,#h|1O,PԠSl#s)[~e*Q{h}A".PonI/e[, @l5ئPkpip꿘aHtӉGm #@Y EW@ | *."s,#F6o܃@~e4չ>920UÃG}5QAl lUa.ʫa:?Q%\3'0nOyӝ,ᶹ,Hv{"hHc.n#|gǷ1Wy. ?u?4\EXkA$QslĦYRFq>.]ܗ R%Pln@=A@)dUHr;n'EA0F gk. ,PpPxtwg 1 |;'09]Dr-};{ԯD\0+RM` xt˃@)AeQVnf,бA$wX48xgO,OķAW s@" PoMf0$p\a6oL*\]'Rh"\M$wϦH?B^Xhh. aF -mʳ{Yx=uGMs%d]_Ɠ?+0k3=sE?s,ʃGxc!Xuqъ dz@[L"h Ķ@"jwj@ [eE'̫A `*HQYꟂ4%\'dd(aWkdw**_ `rOv1҉:yƩn7XnmlWyT o(Xql3;{h l m=' JA(/WV^,]m  LWujGx<ؒz[~ymJ? sр;>r{IAAX j ;6~slwtEV)Y r`&HMJgl =%)o±BO5j.{zimni8 4QKQxRVx߼AW`+p'`_ ?MDh@?e4 cmv\C`?EL BDVm>M@$E տBJP]81U=ꏆy}*FdT٬x/c_kMU`x=3g|t. s0鏔 `e`=. d#cc{jdhe{ 2w/茆g7}1WiMlnΞr=[_p[ -axKs,ؽg0y A@pKRKxȡcw(,fmݫݤ'dS*KQM )sqw\}vЏd7=љŻpe @Bԓǿ][x-AgϽ!& 5`@^~?XʈZDC=R{ tVOR1R,][#A4`ZRC`c{Z)r;l'?qEdW}[0Z Џ Bn曯3t<\ E6qIhZ>n/VH>uiڒ<td0#>ʲې@[$fBPgdTF;p0Sݟ=n_v%hH;{Pn% .ߕ '̐rIDAT__{uEx+E{xP3yKg?sV$O/v^blo,OUu>aFT psb8&ɅuX pW{밴Ucm %&LbȺ?Ek @O9"'i_j ]/Y+ >tų_鶿zHGuVAV lKX @|_y7,l͒ []W\r],ğ)׃ƃa[Yv@ByA)Qo !Omπu9@2wRd0A2{% 4w@0 W:#Л,nǿo;I5? i@F16l'Лl'2C?vb(@ك<ّaU?Qo}?TjY ] @!jݶ4AB@GXWdґI'u@Xt.Sh`g@wxhpS+A7⼢%ЉowlA@1@<B:DQzo3=R `1 0oA? ?:J`t㧕 Ҫ! $zɋluYA@z `rs&ls9 A26l'Еlǡa9cw/_)M}Ս͵e\,Pʽ8HD #s[FllI& VluM<\6Ve X7h@'p p տKD6YQl7cKϕGA@UuLH̖,P `Uoo.&p3U^=dUȃ@_&_EtF+<l2'K26VJ@W0-Y,o,,s Z!Л &wj[πS4/$r9~ Ћ\Iʕ)@X;VEN+ESOn<ޘ72}XO u)Cu.1".*$Б#Z],}3A`G} @0F4`GFo1 ɟQ} wX}>Kmw|=u %`| PG9g@wu?}g?jnsJt'3\} 2{?>]ˉA@ K#4@0D^q{:.2$V- pQf^Ȍ7d:;;OLfiP@xOLռf?A"HXw$#@ 4s@x-(L@ˠYW2 ꇯ ;:7Lmo<н߹{6%pnI'u\ , 1$k#$U\xŻx0Y`E z2Mb [L-u_o?nKC!{ w LZCYB[`cGY H,Z<I"gwr( -NO?;EeXh_|핮>bPl/d\e0,=B XJ9&j#kJ=#'$ s1-OfXb>c`?Q*P:,Ȳ{=xKpݚ'y\%0)20t uL徜 ,ҳ)`s&Μ\i+Gwߡ 0 ꕗPW{e  d@rkZlK^}S|us֮^02D Q<[޼u/zh8oSP^xg!RJMw(H:z,= @@A164  8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@yԀCIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polygon-holes-touch-expected.png0000644000175000017500000002123111642654340031040 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExfIDATx%Y0(BĸPA\f0:aep3p m,\U6aʁ]]D̠(&$NuWW׽UoUqz>٤u<}}=#O| @@>W-ي  @ੀ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H*ju[6ۡo?qȓ'߭b"&AbOQLxNPg]|9Ml`LU a2' 4 1ϟ. N/ ,G[0)v7=YȦ?Ty0nQ@%MBx~?+/Pyc2V@lj mcp`LXc2_' ֹu@?-&p4G@QrN-X%'A,K{H[oUa%#.Y֐(<89-@b]pE'WrkPI!MCӯ ¢0%p[<maXS h4q^qjf`1c5רc Q8X)鯄 >L/ %^՟:nY0,OJ|9џy?;~߻cWGVS}ڽ6i|нɣx=~xUyTʃ ͋(6'=M/꿛|W~ >yG9$0UlxEʛ~3w˸Rt tgܤ7 nI[wJצ3|d\<_S03j2?o|olI3`.?6`X~O;qa/]F@LRLM]Lۃ'O'sL{oy@sNbu&'?GoԵOԪ̓hFˀ $ *6~M]/|c_K `;y00svM9p_{< +o)*;?`G6n9Mo5O@};~w9]n0yѮ~?qGB@sM@%@ܭu6n]o@t `e@̬çU 713KXZί/~wt bX\ʛ~=]}qfa4k ;Qgx0Z~FO:]%l(q%HLR.*j/AW *eh'? S|e39oܮci|Hդ0?ޙkr.gx[ogS1 Ͽ9r'HJ6/lvp'?lGMo's~VWk6`abA~%r j tn׶AKKkJ̯ḷGnt_t<-ίfu[+X۫cu?8|:pIͼaZ%̿ם\3P ;rt?r&ݽ}i`?:` w'|}.y0*  5<# ?53KK|[65ڿww_@GqAe4?>S6*6l?z7 &K_w<&zVذ5P]8W M̷ \CA|.ۅWr@:~ߋc~ًˠ7k@?(@;B z87;c5@52xu@6 'A9P nov M}Ry[K0xy|ܗ_ʬ{&zoW4uɨگ7}[ehUo@_?ʧּz͓LMt߮t}{ū h3m'b` l}`[ K1V`urVs}@ΟVV֍M;ڭ-k`gx70pCC/~^0}YxZ+P@_Lx_z..ΒV@s7wnr[]9u `P}cJ 6b`a (l{}ôE76M ȀBݿK[h1Z td:CݿuEd cv^X =S@ M[eho"b{r10Ot^ot8'Ȁ, LK-kru-ˋ͓ V럹Ҷgho"fnFm$92o6ZfĀm]@$bk~ vb`]*d$ͦK~2f329˻;!p$j|Kg@;510DNY D]5J vbz#pz$hcd=vgf.zZ"'d̢9@&j*gĀχL__WYnj hJncjTeKlw!PLٟVqEv hhU)M /o~7bz?\b 64Z^4R[Ҝ h*bvbER@Rk%u^ `Mx574,~^4'{[s hWUhaAm _֐5Z 1poOx@'w<mI%E,ͭkӆ bไ,wO0fUY)!ĵkwbu`G xJZb-`M Lx1v\3E@R)!΀rKLuxKJ$h9ZT5b`,$S*uMZ17Bk[/4RU[ ֿ9/((B5 BFERh#ty& :Qb`; h;&ءb`ThWh󆈁yNZ*/sy14Zmd=-q9y U|(&Lx}QynuK֎k岍U 3QG)+8Ͼ;ku³gW ]Ps}I4_fMaEf/$Kb@TSrˈ$+_qqrMMTYo1PeY'†`C̭/%=z+~3U?^y+ hVⳁʩV FbLKR%B̘T)Z U09`RM爁1?rPyF$|00Zu8Jz=T^S_@EX3%\߻5#cOaJ55Q10kZx8C}{`{{ %.@ E6x77y7wn^X lo25 ͜f@sSK K1 ;^Y@\/&^XLiS:^\I'$qq\V@\ /h/{xH@$*KK~҆ Xgk^ͨ|DOR⟖k.]\ V)S_G@ĩծ3] hn* ni_1}^A@\*1o1\rr%dA 3gU7.ryp,0` h64HW Z^@3*f F`  N TZdH,=>S `Nof@3hX ׼6/xDƹf YLN9)|(xv`s(A' hpD[RgW_o?7|VY̋~^|y ,ֿT:Q8A`w(K}j:JZ킶XDj%7z@̖/ ,PArNs >R@^7b@a]..LG9@ \g4 v&NE`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3q@ڙ9@+  P$ &@@\vfN"Pg0 3s ">  W@ĭ @H@L n̜E`qkg(E| @ [;3'@@(3qEύCRIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/ellipse-expected.png0000644000175000017500000001515711642654340026570 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExGwЏ_ ȋ8㷗p/J xPJ6KM,NzA~hY;[k'u77__4s C? FGt/Xt :T ;;O$@.;CYOW#вh9zܯgN? `qҞ.)g'%W%T[s<* s7q Њh%r/gu=~RFiwQ&6ڰ Ҹ t8QQEVEy]ܹ_ڝj lNVlk\ٹ_C=pWEyK]ܹ_Ju Q( ȋ¹ -|] z}?ZV 9yMfz r_KTըϺs,&_4>Ql7kjύ.0ӈ?y|sܾZ!(oѻqKNPݯU?='gN ƿ@ʼnݠ7#)A8 t~Tn H".ڹo[ P,aPE` `PQX~l `h Ġo9XpU:xh|؋g&l͠oO:w'还 b}E./؞%|pVR|Q=9lG+9?aO><8]v@k|Lb+t?v~ӗp] ੾tGo8^e mGto) mq=߾}=iW-GKV=nZS 57̽pQ'*G5r=3q~fG٥q~fW/q;}Ui/Mr6mS\NFc"_[N.%_J2:c?aw͸'{,Zm _muhuG>aWVkt-wO8tŇ|&uis,}S[`p9c0 +nQS_S;^#?v}ܹ?^-O}8[^/vsL(_@,)ܯ^}o; 8( .9sGBYZpgmnvѹ `8x_~I p;k$Chwr0iiW@'-Я-~@a`\ء?γ7 p ``uCB0_>^}=w}?i#OQV;ޠCzT~yyr=T (c]١?VYF h]*"5qt{>Gv_K?1Iw1l C4F:O_o60F) D, ]ȉPe8 `FN34A7c>uK/L~ݿvBsO<~#F/(0ll4-l+XaФsBnAP` U>g_筿<9qC' "PM`B47[K?؞'^WNV>E`-k-}sƗƱO}+-&xF& `n ?ủ^sOsp=ye4}V~'~S/~)LR@O~O }p/2_;ߧ~ é[\9u~^M`pJ!|/Ӹ6Pqri!@@  T@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 @@ Pv 4xc @@ (M` *B76 .^IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/transform-tests-expected.png0000644000175000017500000003602311676112355030303 0ustar chrysnchrysnPNG  IHDR{C IDATx %GuwW @ ZV BXPHHrEH 1( TR&]Ig`6BA616I+ZiWzfۿg{=z~ @>2= @JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @DC|Φm6 %oG};.{g:  %ykܱ}w p9.,D+z='IVINmG'}9+ ʍxO~v}:IO c#|# }ԉi]H>Ƀ!Xy=~Ż/Z/ޥW,%T6 ʍ#;^! KvُL?{lGMtX.萅w]{iGۿ$=dW92Iƃ<⌓d*H _B> oySg5 ,Ӊ}YRA@ `E՛ki+㗝쓷籧ҽ^y2o Ƕq[' r=K) k(/~ OܽF uc}k~?g:B`QEn\G˿6/p/ͥ M NO_()?|=eY'qZ X]hgis{8I8}W{V5@e JlWˆ~wfH(doAvbOO@OPxaoZY Wd58\ mX:Ќ=ozgs(\NӀ/_޿*@@J3yľ,|h/lZ}=+Z/OF -+и_f?鿣P`eҀAAB)NYk`( 딲@ .<Q72_iRиyֱF-xvy~ֳ\nFS~3բڭI)~AmJWoK5^VG -X(pU8@e<X,cS~_?X"Hդ_o}tPVwD˿@q,~3\}%Aڙ]Pa?1?Z%T5lwu ZogSB#l)X{]} NA2sA*+P.Ho4`b2BQGظ?1m⯝{J?(\NS(H"H% Xx ьҍAms,u5ح,:45P_ rE>'j8s>kߜpsh|)Xa@:=F`_d١۳j訆`*,&)),ZK*w]jmE=pi/}){}jTM,Bk7q^Z 4nvW z@,Pg*8ס_2@DT82<)O 5-ޚMDVནO ` |옲@~}c] b68@$r3ٿhL5 + ~ [*k=DJgI C`q}'KoYA@O4bN mz4 G]jӦ>k=˪𧏳ck– 'Dy:(Kyys Gm^ ^`_ aa"iyBT9Ԁq>0ۣfU!kO3Vզ%T4tP%@_= YO^7]ʏOWi >#qЯ_{ti*$(,֣G\빴=o E:0q鶍 䳀le 'ChS}1ɚ}TƷ6>ΗS?V_T>++= d{t]иq*Gf{>CjFDf??H{HCX5W}؞ M| e Xyb4_B"(5% D S~O'|̤\=a KH9:o Oڷ_ I=>' NtiqX s=wYw'be8/gZI j|ߩ+,P,剠(0~j`65zUPoy`O4BkΧ9f3鯝̏vFtOk[5@Ї*u@li͖,c-X( i:i^(bouh߯8ftb r@?0GBt,ɀ5/ |ܠѿ}M͒ bvFqHtPH %Ns^i75hi`ՉrA3~[c!l ]DPs%@vUnՀP 􅧿gokG:^(]tei IW]`wkٓFrt] sls4zs]9( Z5`sc55@;C f$-[]߅mS!hBzKTSU`ʕ@Ozجu( ںjA@h[Etg,݌? ` {3Dy[9׀0/'_j=|'}D66x$tSZ\^Ca_O!\ P8ACǧ]w-;iW S9T: mh5Nׁe `.:aUC]Ac\/WZ-,D:ԥY^^VҮHB\k\F2; $> O;s 'A[ " ?ѿu־{forA|@Ъ @5{j ZAM[GX־qqG>sF+yy\Я G7fw$ASsAҀ9uHOyx:~gvUX :Grzsj,1͜g,{y}F?iԎt4@Wi]" &$ìT\TX@'F -i=Zj}mCz֫nzL5`CAI^nM8 fõ_'*,AC[߳Qvk굇r=zTӦTп 334C=aui@"H?k5[ZL0֒3}0 A6`o? _L7Gj(0hI O+й5 c+^ :35[jp`ڤ,fvѣeaSS eue5ezPDE/ܿڅoZH4/fg'A>x$W><9QCvuӀ](8|rAO{? }'o?vXg{~~?1*(? [cWܬ_c;=IЛn{@YG jw .5a׆0+}w\=ӵO`_Y,Pstļ_ XJ2EE]ӫ]Kњpŀ.#kס+{mW]bu4?5VZ1N`0H-|'3lshkZпjAdyi}B%nFWa-BM3Z kbNa%@J^7DW_~/3M}zf~dO#czP jVVI3.h2Qk 6e`+}?f|f9gD_.ښjpq.swܽ_f#zЗ(Tkܵe[jpB+;wMY L{;/]wSsoNYZ;cz6D&W3A3JU D.ml|sS( 1eE/?ʠD;C=I WÏY?b72oRPHeai@(;l>|6 pQH baN &4GWfޮOZ8uI ka+ΞР ; vOy섹&z40P GO n20(  ׀0;%h>t-ad }?xh 0 Rpt=x?o}QhA@T}uhhMU؂[tɀ.M]dYAV20A7O?ͣY m8h5xb9Ŀ'y@C5 K4 t)AS~w5e}RpTYGOWo=sWL/fkp~w-#wx|8G.3S֌PsIuMdx1 '1]n._eq%HsDzg#N޹}m?Kl3,ПiAP*Q(H c5A$?~<:h`O)ajNfbP{ ҶO]{ri@t@eKB PyZt@x0^/;)M㾞1M995K 1jS38w}އ65׶qH}Bh@2]/JuiA0+ 0QKU_Lد 7)N>O.lћ5MIDAT2~>KMN{ضOr!Jol֟eJ0Ն L Z5@W̻p;#Vaj@`2?kU=Z)1I5uy'jH1 /*}E>MKWܥX5?}ܗ&f'ADP8[PMjsT|M1.& 4쉠Vc ngZʚY SiPM{lIk/'7ւY9fS ,P]Yh $ 囿D~j_FW@-$ р]h`4U8p?+u㫸~5-<^ %y6!-kVei]} i.0M [u1RD^HKr7HɧQgz+k{/|! 6d‚%,=VSYٞɂ^s?Qf0CCPkRd+Q.H j .LM%BzRH 6Bމs xg+YVw6(sڱT ߣ/{0CAҀ7и %0PtŦ HBhsg7r$[7gfZ L<,P2,Gq^ne ?98|ՊD0h?i]? &fZ(&jj; Ԁ?.ԕ }[CE`<֛w'r3 njN?u` 6A4ʾD }n C  7ed]uJ@JJ$1?x3?u 0-{'OmCq뵀<}4n^20PSl@E  qBpeXO]_Ot1R;blI!{dDX^rOW9A_1 Kx;;QIсlb+ЃJK ('D ׀:Z 6)2pK h/s[Gf?кbx"HGgYƇfIM慢 45 A3&P_˾ V¢lU2PB=h]Jd.p xUв+ 1hUd #B4{ڷ 2еl&cܷhPܢ, dJW-y@M[ P"%biu7ٷ ?''Lθva@ypJ`*,k dt]:2?)ړwGk9`հ( ZgwP\ B%.%ڀde?q5!P VYv"#1 _<)4?BekG+Q;ٜ!7⽗MBOǷtCs=OB19҃.%0 x/jexツ!SՊ>wp8e'd>roW265vǝA=*fT0z ;o}L)VWgTa̖p 2͇@6s~^N>*}!]sGѿkZfYA@sJɢ"IBHڄy@2/8]ͷw|FA鿺WNl_hO6Uh!Q;ҿRG+ 7.o'X"2.N[-nlO:F]o#$:I᯾Y}ݏ~^_ 8tԯ@ۜg0>s|p=?| ;}G~ip Q>2SwLV}ψM`N<2x'|,Pl}=oڡm b(F|c֭[* !Y,0ck RJ C|x^s6WY# {QA_lW?eȂq=Ϡeyh "uH|`B'FL4ۡpf!e #5lJOW]h#@#,sʨ!nvG|mnZ}z:諎*kʯ @^Ӛ}ݣ7Ggh0vkWpצv&尉(gnuV9zࡃc7D820h31Z_j67ÉXnL4 MV'i7\GkA_q_6?6pgr^n4?,GMe:Oev4kO8/kQ>*:\LX ®bЪl>Ϸ|E#3[#xXsK>砯.Fؔ_eȯuL@=Ժgtr ?ܫ戯0͗K?yq_D(((lq(?{'/>wf 4ܫ_Ǩ;U)6;-t7P]5Eܬ= 1]纭#N4_m_V6s3t/3zy{,oÚEZoѣ!D߿"\!K252T4w 0?ŷ51E,Ptt p GLcq__~G:`u|*DպS _ gi)'}N Kҗ/#@[i ka,|0hY n *{gѶi`ϢTF.=N4n: gTNd^+Ω5k_s0}A&_Н,L| Lu)1=sh›LL=@kwu?;W@q_3ײdH#[|x(A ?C鍮sWq_;-ѯ.XUJ_tّ1 _{ QF$~\D/WegZc"]2~ӋM^ Z9N`иS~U s# j],l) 3:e5OGV/KjafߴɞqS~]Bsْ @C;F?dFy}]W}`ܱ|cZ?5|[`8C~ݛ8 Q$o #,d?S㾚f?pB[?1#ߏSJ9#zL|\q_>ˬ'u\ї'?1σ꺶guJ0 8G7w&UY#U{pg, o`k8aQت8 ͫIFx1˽ P;p ;MUxo<3W'\Pp JE_cO1!^gA럝@]Ů1/+ C]r}1OE4K3ςs=]Mlu`t[ֽܶs0޵{\Q96//&X D;Tף>m04KӀKfis$@Pۻ;mA@/LT2 ˠ^5lj>_1:@u.+GKu;f\D xܲ2@8"$w3{$7bD"sȊ_~jhQ:n +SVZ \%H~=lB@ rBIE4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@B [RIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example020-expected.png0000644000175000017500000011520311664235365027007 0ustar chrysnchrysnPNG  IHDR{C IDATx 5GU.|721ʕ(CP! 8WEdL & *E.(z~q HD $@BHBs}׮9^UVUUKKx<5w~G#"G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#G#8x<N~x<^x?mG#C;F5 V^cV^%@W旖nJsG`#plJ5;UB8 ƈ1ԩb̀p#Xn8+Ljd˖Mk偛W(RûӐ _7nn.T'rl=<{V2N4Ά^k7 \93ѳM^ ]O,,)u1 @#APFS( &[8+\Y:pGozQp/|Vi͕jm*ť9C۔Lٻo1F)'A 4odj\e?tVX2yV nH:xhiµ,Rg7|6J^w~^#o3ܙ_XX|o]m}cfՊSu#8ܽ/!~Zzpqߺ-U!0\4|7iqSj@xgLk3|QJaX`xeq8֮H}VSWz&-#ڏzX;3 wxX~ڨfO|f|՛NVZs3cm<[C?ckGßtK ,e'UVȿ v9ݮ(=wZ`u{A ӄa=y#ćȑMo| uz>Ey$WtfO5}ێx<Vɰ0sVgu,{lB|<׮pGᅳ5qWL:<,~:Fdۨs0e__'U+y2};2#8͛궺" XO1?ߨJv 'آsP3v1mD RfIصgOV9zO>p2 NqVC>!}hzx+?xh x#62E'{xhKGMB{oF9}OlfRn kZSlFK ymuc!僉ѥ\C' A?+ 0*ǘٟcEPZumׄ6_-01{=z-e`DĐ2(+G u~On(; fN0a١]ަ;v.?lZа>SY:a{h$>Aߠs,3oq9 PΘސROe>Sj$ !,o.g9yK@N ~B8SE j3'iɻ츏2'?02ÀQ܇ZlNX6>EdL0MX{ sJmzbtcB!9#E,B @>DNazb8 DQ=Nv V QcL4{XG5Tdajt/8~ ;wVG+c$#}t8\_z=kܕZO>Fz/=#W-[!YJ8 6Rn}e4 Wa%p?ɂQˁQ-B Wpؼ=ṹ񻰛\_uY5ě{řS^\v.uF$E%gXz, rb ƣ8fS .2 Ns;xHIQ=W}@ Q"MGX})ďN9" ǣ\ѡE(~44delz>N QX .9-1d)a]ٝFF喂eh%q;NQFM{`WXO3!rQ#(a孁xv(ߢ5[?ĕ.c؈H"ȃ O!%1|ke>OaB)d%$~\ХXp/tcݠC\c x?ڴ~~7B kք}%GO[9 2xh Zr{YߛOg%mssGSJGg#Ӻ/eN;]4Mƛ:|k=ID+>z`)C >B<&@jD j@4}ʾd0֯inqGx ?z4pG0tmB/=sMqNΦT}>"Bᇾc{G<,{׾kͲ RI(wӚHRv!ړ7"d b%xa!l߲6"2,K"2d0?7P4Ow@D̮#V~*~iِ~#>fUy>|)ᴓG\:*%B}-GN%!5X.9z3C׺;nnF@!K _a,n@L 1 2(GQ0zf0G; `Pވ|5Ffmz~#ڭۉq?}oգ?id߾!~sa(YtHIP@pjnކÓǹ٤rKv(A#>$QO r ύ|`!@B` "2RE |mps=`Ӛjqi ^d'pWЏa/O];+hς>Xܗ?VY&i"V(:v9[Go/y~ɸLC_Wր 2ÛC%`W7Rmo I: DoNKoN 1@?d|]2p~,bqw.F=b=9gcѴw}Xe5 XKd`)YH Y>996uHnDbI|d.h@, 4fQt؜N0l857¢~ 4AUf#ЇpMօiHI ͕"5c{Y9-4%'6GcCDeBSJ@ 6h( x$0 @85KVczĮ Ɖ7'LVY}qw޵߽wW:Bqp?}XCcqO*cj["׉ǭ]Su/)PxOU(c C/to0*B-c)ۂC}0D͐QX& 8u{ٮFG av2؊_eo߳ˎtA:3 ;sHAJ>0Xo 拲 cC6 -# UcPx hּg֎te.|˩ T$@f,%İ!|Y$fzAP l;hFh6 p!@FR=Tm=sK:''.0N;ᒋ=uՌѤ*߻{|~Wj5,^Yo[q_e1 } A ~Px<8m۰0=f㶮}cW|2,7]UYw~6 5-+2ۂC!ҵ+.9$v #?Wn۲7+ U|7mU 2lh @v¨.F %  {?̏챠_uU Kgc6/ܧ,D[E|_!?7ŎXђzҁG_г^zwj3^^}:ZHY*"CE rg ;9<7wn5D ~G3tS~섈T[(]3^_rEwTjQiAj =jbbP )"%Zf ">h0 X&ɱv!iW5P@&^, a,K6>Ҕ czq F `aq."3Ltkb/q~+7t^t}8$!g7Ši (WDX%9MK]?_BK $!BYM}ªCuL, }5sLL Ƞb7~w7]1Ki ϻଓ6z@!퐳>,[͔i_hübUk ƾl>6jnk7U˾j죙/3֡ͅBկ9 k*N}j{v%7ޭjufu.o?%j>nڷf\QW~S#]5,ԡaJT;;cd&hcqn0ێ#jPsF89;ȸ4~ #B́{۷`sŕ(?09dpWz#=8D_tB!NM|PQßЯ PWc6-C^Rtۘ">5DsT ~ o Vmyͯ(inO-֌|O~3eɀmӏ|rbh~&_+F&O!eoZ]{98ch ̞@-_zրvп a(h߅,}Ӧ5֚[ć>8Դ%/<9eџ/}ٙ ߟO_$׊ , \wS3C^A߸. mXٻٺlw$ 4.W+$^_;#: PK}dbNJhC<M"xqqTzpe !@&J/|ZxaJЀ̻?8҆E{ÏV~)$'^v.{?w j~ nيl8k>{[ -9@Mf @FT͡+kHb*_.@GMa ]Py̼z#e?%?1z3Fܓ6dta8r򡱟:$L b1t> ,7'L.~ƹp`p@,C8+IDgc5Ph*HB>kͯ{mHsǭ%{ #F` s,`|f:p]۸g2MwF HJz[/zLx>CπLb0Lp|Tr8 ?E "xy"Y+`D0F?E?Wd^" -U3D{}a1Q 1@z[~CcȂOT=RCg^脹b_F@r:|H@fzOp[5ksmY$YD*[aoǑR3T I-SM/1DYʘRC4S([#dP-taM!G#Bx*ji.w݋q!aH=lߺeMXQ 8thc!9[d B'3_Ψ?><6fm!6"H 0k\R;2CcE[^I% p?p%As,SnvyKO])md!}gxCoEϨ2 OQPןfq~>' p[l<-G תHAX7@Um: vҪ[ +Q'@ ح@PT3O]A? O} ρ1#WM~IxPVc^jìk'O8 Bn9yx e9*Er*ii<ĺx |}7FF#xvPbzAu8\PxzA2}zɀ'( ؀v hK"ܽQ KБ Q.?xx>(v͐a{3D R7q:u\'~$qN|=&(s=z䅑?|xoxK~7lgSqZ7O8Yg7=)}5%c8od ` }Kz$[Ϋ^uC eƖ,-mXn GdѫAH(RC] ?d"2xfLbo}2zfXρѾםGvlYfNU:wNvdjL']Pۆ?5A15 7:@kFƇ,]SkK/E:eKД9ό50j"?$= h/ID){pV9JKw s7C,72%D)%X2`.K >RQO!igr݂2 #pkV(/=:ZҘr'@v@lm8|{Hs@|a3?:e+Dd`fåͲt8hm`Sm' h`n8l6$lßI5oџYk NQ@CtjX[ǫ;\,:&?v=J <7, O{Rss"@Ud<—2jm`m^zOc|fg>ɢX *p37M_I2=ЈOPofG)%eOJ"[n?=$@Fn "q/4߻k' -m> A9T2A=h5c5G.~:s{ kxkooXS[ĹpӡKџOA@P [=\QoU3E`Ү?s SJA*{`L ="c~wb^ @ L܏}z7*@7_qs~&6{S5"G]]\+8h`u~|k'}m+ @_2gTmOn@vRB֘[֨GڦL e.t 4mXa=6>#@xG$=1&@odW\|h%^YRG/(G:T1Cq,~s,묶%. A?&˿ycIrV>߶3 d0]OSCj7=Tnj4 򫧨F`d ];{E_D~eA~(޷mH}qűH8[ljK/ViqcZXj!_kIďɆ>qlBŋ~匠l0p,fVVCM5k{@l.z׳P|i|xv` j)1VO3d =DAzHC֑NXDK ) >вHd @}6$%7v !R1|CF^BNB?zG^{'A{aH OG:bNI$; $:O>fL=0 oWDz8!_:],/+6\, /* Xo'9dz!mD Ejڥ X2Y!)T 0Y&@` JS賸!OKfW%Hf(B' @ y-V|%+-f?֛ě銠OCqП69[0ǟپEm~r9՘ _>>l @og`y'@>G6ew^OZP&W_ f@XO(E  b*̥"x> D@[?cς>>>U1B|+g%.=`H I^{p'9rt{y{w-4(-=}J[_u֦kHϋ^RUh\–0qP׬Y}4rW`L$rJ2WF5]ҺF׊cU>5ܶ V{˼z ^vBE蚒 84DO xNjG-?r"AL?.}?4 N EN5ӱ߾{@?B|v׽7&tm50ytmj Rg- b¿.X/88u_㚵N,I8̈ ,k+D aۆho,Қ"xi~w&Vk}:mk 9sU 0:dÒW91փ=#9Rq#XO^}">WE8s涭}/(֭{>EV3׌XCr>0S18@跰yWfZSԓo$}ŲŧNzFZǝd[>@A_`f>n!>umQþ v:7T诂Nl4J2ȑs]_qoaYflX œ|BPgvП[ͷ #,/z΃626r`.WgW;e"@?94ڳo6@/1%R%X Nj6sϑ+o):[ZR  .[޾c\gQ]?$~zڧԳ_ǘI6κE.o|QjfX?khJq@[70y|q̋= ~ %4~~$T>qGܷi#X:Fr7p{/t˾ Hoi\} )rw@ ؗZ֑1!-2 i6mA_eINC@/xU2pF FSB@` tATmү%l{ҵ$r 8#o4O >}.,7-XY?F}jV)}JӇbu5GK -C i^bsWL(Kp?}dp_}E{qoGԡBQ,.h+ >;!ފ$X "QBuգE Hkia' h mw@sl?Z_^}Y39ڜFFj%'C|gAfO'~/ |GW'+8d2iLm0ށꑂp?w "fRB h OF2h@p׮]\pxl݇ y:/o.܇6=HJUY.>l\Fe'x$G\t?9FL>)K26  >k1x]5k_h-?Լ厝 m[{Lo%Bߣ8\.ėѵ }3)Rs 0{9R Ɉc#gʏG ? =.B huO >]+fOSeA|~Z녊>쭇^܇}eg}/\&iRQmkt@Yfx$_,vT|N=YfPAQMGYaI6]dp7KmjLjJ { @_o %Ԭ,O_N,Éx%Y%lȀ~퟽@{Q@F/:9d%)i!#]vSBNljW#kXeX6?r+f -\DPnp_ t᾵y6{$N@\a/X\&xvĭ,2ӞPrD氮:mՈe3xc9XS'!:.Ȧꣾ[* -ӌ(C#%2R)r٬ɮ4p0a +TZ/@I]Mr )d$ OHd g %˃A&hp:[u9 V3A F½ KH8.96IU"/Cp᧷\Uc Vbf;Oƺbi>S2 .(YL0?Y2#bPjK'03 P Fj6pe*2>*r ō n!r%2&}id x'}F1=g!j$x=Auao޺yͻ}7{[v(;eK6Beڈ jX ]z9'B]_Fe/Np_Fy@ye)ý̺a)IDv䓜qtJ(lrݗj"5=? X͘)E|2y\zȖqp;{v~ [We(\S½p_c !><~w^p!'lXEӜC@3 N,ki| O@It%Z +ЅFZ|}ke N (/-̵q'CȠ ;jJQ""@cG~pQDu -^[]|`?$W_ `1*%?C|apH Wf잠VܗQ^{^(f`]M{S2Ӳp$ܭ8;؀NYN@/0@P] МY"ķ|%z!ͫFy>,0=[Θޛحr (/O7홽`^ G%yGnټ п+,b56u0%TցJ>Zz½r-#܇s$컚bs̳6 =MlJJa v.pW ay9re XJ 2@^>B݋Xl,Nru,w:^W(WRn%5K{X@ɿҖM{/n.?lt!z'Ql'+@@ H۶O];g@y=f46.)"<wC]99WudHљ6i.Ⱦlf+`qpX>dp;}(?NRm{; ZaPNN@r_&R4DcB4Dyd\⃔ g< IDAT >(a֬ G QR+AI <ܧx͛sWRma\}dЏC8oEJ'w(MzSG"E7\R@H]{vڳ^*a $>@΁ K|tѽ/({.n"_ک[٤4KLYh_ X<2bP< 7rNCC RY 2Ш;x; Oy()>ʋ `d{8$kg^ZV=cy(UeҴeɪMQ;ubt6WjFWָ&-T&?(?@{FYG'93 JP ]2bJd'[4v/Kœ ]DX}dp/Y'lRj${O菼"T-}d'lXJt;Ե ~$Oxv䅏skn.2@>/x 9`*Lk%wCdedɀ{█;'BlȆ~8,=Z"#qGIuП5w`{'lXʶPxy87g*Cv߬.ڑ"Xr(ByAJ0=)[4,glH#VXCAyYlTz(_.B`C=kp#)md:hm'ءnOItd@L@ pY8ϟ$` J?D}H5Q 8#b=Յ$uMا-҅]Џ,͆y~9B618;e\6,Jy[MCݺ~D.jWҿ]6Ixf ]M]N~0z{ܶЁ Ja , QU9巺7 REaO|U!eQI=-,)u@ ?}]{a$nbzuMA%`ѿƵNg^ط;~|Iv`~*P Xd rJq {TU8\ Fo6#@\Y4M}ǝTFRvWefUkJ46,#D~4?LFB1T{|u6naN7RPWWF@-;{8j]&Xs|!a49E?Ajġ4ph"1 nΑ7j*`8|;)<'Eڷ?~޵]'{qkИ~踐+g#Wmѵb 媅AjRlz HR*,YGp︫J޶Ȟ} teIyv]Wߞ;nEU2?vư]"خN3Q sT4gIb % NQ)[w10q\f Qk >n:aGTQ_ZOR8bz-ɽ љd^$GXմpΘkް۱094s؟tZt>ӛJ #MW?B3+[M@a/ظ7̧.Q%.h %@ .!p_bgjtJPM0@r"|gryNS25[M囬h`=@'T `K^uvmɐ j~{(U☺?B)$db7h<a5zU^Ft*Qĥ7%ms@iD~q-%ȀL#u3~cԢ04!bƯ|ޗȠ RV(Ad &xöBxo5sE JړiD)8W@HBU\,CÔBC@֛kH}Դ/+gr>bA`;Lcd*qw/p@Q c:SSBQxe7?5,u >$E 'rՇҚ9 6ocIY>`.2HJ`[!@xԓ_uKa3pJ|<{z!#4CID+]p!:X$ ئ=}aq[5vSyɱE/% &?i]`۾ͯ }]AȽl0HTЏT٢^?r|Ƨ,;Ӧ^rѹհ8;78Y^0 mj/Mx9Dg ȀE ?,I7 çZC6F涬۽Kokko q`V=>xߍ2K?<ΓOnVCȮ\ 84JՅcD?2^S[sW{'C:GwjVKI>j'7 cӓA[Jr'mdk7ݫ>vߍ5ٻ[Q rpf?\ࣔ5%a (zr<<q+_j,̪pR46?'J}+iV9 E|?ruBOѿrj٥ ٭ߦNi Wv Q0ND1X%ZA}2-+f"#|eg$kd3vh'Ϡ4 hr"k,=JM.CߙGvQYn*Q OվDX[bO ' Hۂ $R9oi3JYg~قBr6>_ڰmN&N6@o ~fd;R\(˃{U3 ,Хwh L`W ӵ`Yf[6rNgokX姪v[pu~Wktƴcpday?sK&Ab`Ff4H䊏^lI"njH(ϼ]X/ϓ>/OYm. hDЏGb1Kv@3uUsR]h&ln )M d!T  G~CsC')]2#fkV?ݾ|ch ;p U ҼYՒF5Ke3"b Ot;޹33r}ofA-%>4(%~Gjt0 Ya| ;4NFe't{T:i |OYQEw[LC= ahΩ4&41dOEF>l#܇Ch%8 8= 7}+"T 9D=AWϠ2 X헗O0/ٍY@onxhO#2~5@.~ƹzNv|~a%{cb}+s:LW"Bgò{6C@?z ѬٴI>~1Ƈ=-wt(ǧN%NG`= ~~^@H.+!w0df5~ ,*ny8*Mau > b^N>R}M@} Ƃ~;ce:HF `Н0G=@ Q2hhu O Q' G .+D [F|2}i&tV{+Qei',.?آN’AِݘnyҬA6lW;AHl*SP;=ܰ~[хt1qԪc>#4cXϼCpckie)4á_qZ]|.ʒ5+%(hQX獕9;\@.Tyw4@Ve2@"-P`P}j$55G݈?')C H87L+F9Xܐ^)wa=KMֆXY/܇AgD|A?BRPU|hFUJ%0W߆ @Èi}#wA-C&n54X2 t(g$E \!%*7ibC@MKd & 2AH `o7 VOy8[LO iGQ3.EXi5ДE|2[ W~j,he*g4 Mr|_KM:(H.<$ҳ4à=3KP=S\EAzOUTJpXW 0q W2=Xo%kJ@S@ %dGPeɕ"X\~zt$=JZb-~(-ߘHOօn:P=]j~ <nLD4$ۢ}3 R32Z?gЇSuXg~QAs@XכByÉ5O PbܦBjKP6 q_/gJypI⫲1jF{Qu%!PWχqO3@?^8|gf'D&Y> ABJs ʲ9s!b/[kR 4C8o ] f wƔP.`L"~Bsl,CIު S Wߍ~>ʞEOUqط;ejM6C!@o(B2yz" , gJ,jP[YlrTacN&/vOV: C)2r 0K TA4 9!LJ⟔n6aX$dK}e{q)h DzBFs3amiciw?J_h۷QV[м[iϠ9 F#mYL'rh\*NPĉNy8dRc@5>dGpG:#Y@lR(>$GBȵTB̷@&wR#}!2h`ۖzE1l8EW~  9cDLB[2lSqh% zp|7 qkl YXMK+!B?d a_=:ĖKV5GNt'(F<4P h8]CV:>DģBFSKʌ{vz LyϾE{7)hb3?h'r|J])c4r^2=GJAe'\7TK_PZ֬KYxxWe)fM 2H`? |,]WN8nힽ ]3qyqmMG5 Ty״w{CT2YyĒ]4}Dه)/XXO{/ܮ_#:Q?~k)<ag@g Eaܟ*C]][+ȇ49o&Z:#pC+@{<}[^yxNS+|`ݦ20j[@?}tl8th ifѿG\.(P(.Wb#wA0kˊ8 #B4{a!a(r,O<>,Klhb5(]`t ܭUC4(o - lk%!R3I7m~4wBu\>=O_ܳ|(۷wPG%6A?k]40""@{m~Ν k3,DcDi6F=HIph./7,/'8D& ,STIJn:臏,7]GWp Q>!j wF~#urƥd2My8`~+>=FRJgiKVqWHf)8ۣ"OY~"|p٭ÌpGNQFGZcG'R]A#ǿ62@o2hCFP~ӵE40]4/~ݧ+FOq6m@>6B+ɛQ, IDAT@: Um b <˥% 5Xc$6K 2U S뺏5.\YO [S(Xcy\9[ָN}&$UlG6~aO?ĵ7|D|i}$-+ ?jLٯp `xj˪9@RC7ADqyRhbX|@2![vW6"Cj(Dd/?Vxbzކi؇, d3V)YGY|~;ɟ >+>@?W?Yhd@f h h9(k c9Y3IiB c1J-Ui$U itYi' nP=ʲKH+{ָ;Ձm2>2f/X>fՊ=Gd\ `lm'jl6G㴜2 % 0d KY~ZϮ,Y4A<1>>aZم{z36~0 RA򎫟 E+Um|0lGj7}>lkEV>&izOSnf쎙m͹VcF4 ۑ߲xGr{P6#kїalcߞ% %a!l\Po]ӡ{!$k_{H9g_v.tr(6saqt"B1ov? aJ/aȉ'CxCU Fo᫇"졍vXB7*:a~\һ00 =~/%&egr&]6-sPJK2OQ)ALkOnqBsL~u+>{nOX,#y-%o"Y$$f q і8+@:Wr 6~Ǫ ?=/9 U,ש>0M$86?-vi0 /Xh[)x=XlY2Pj7@Lk3\8mK2:a"8pێ#Q{?/Un]ux]FU@/a{֑Ah܂)X2)= ϼ/w!>)qk> жP}9R-} VV=o]ۿ؂x!#|U 5'(*%Z tE6xRx7>П ;6~Mu#@ }|kqda,{!UƑb֑=}˵Y=ťp:8n@,GaB AњwyM'f ׀ -RQS6NL*b3ì%-??g zpf! SkF!3?Ť=A/>r\~ʗ͒It& c]~(fɣV3?UCͫ?90^.~ƹD끝zAЪ=DQ ꚢ'ٞAQ J@>"ÔRVSN 6kyH8ts6\tٍP*/<6 mP|zΒ VM,GXϚ'2w`dz-n#G** FK!YBmYhNjX ˘x ^O*%tT4@?]d9<)X,Cd/ /H}6'O$lqgᜋ3kipg͆CƋ mj(Q7ÔNX@S5u~73 M|RhahcmCCG* Џ?'Q:٩ wY,7 }K&ć2諈X[t%#¦aP ts/r/zF5 0+>zF&>%1sAWH]iwjڰYɔ$[F>Ocg.j0 iJ1TL*f [g!g P>ĨZO m@@P{ KNC1t߁5xۂh+F`јd1  Upn2.ˡC퟼L,E뤰L鸮`_YD/@_NC? bP #w:&aCo7 G#$U UYBW/ϳA2>mڨۮz McWg΁@1cRO'T"7cQW1gu:@ f~Yl >{hfnU/|9SpX_siƤ_u,4#8.G .ȖLC,@#&,2%\6^j\yuaZk@U&ž3o i ir GUա A?eAJA?f `6Ӂ桂FEfa .ጦ^ַN$U_zQF2 '-[2PA#?,=Y&( n֤WΞfo2ߋ(4 ì @YOB|RKm W>@,8@x_Y{"oO2 ąݪ%)XHCKrB "9-PJ׹묗W,4.P}}鄮_zZ*ķc>cGyEO(/}`s`j00PJ@'@v] `u|w߫4] > Yd2R{@/6xzM c\bϻyPbdC ],[ćMg?th0WRį =,#5Bh@|PO) @ @4PDÔ H P-֑xٷ̣) ʣ%d^@Ȟ~}YZUA)5ρ~ wDހ6,e`a*F|kD4>KG@r3GI Ѱ>@ &-n:8&nhO-+G6l#H<6aّ] },}ḵ̂gq?J`S&ʳ[K`OJ. *c `Id z]@5F ǩ$jgA?d. -$LYM/1"jN0=%з T con,RO;j\͔VhaMsQh{M0uENycn`l ]cN1`i`})ٴXA,t ]dWA|ݯg椊>6ف/j;0/XЏƛG:/!>4z;Q䀏BBO jzK'MBVƾ"3TfKzig )4nn({41AS`pvezXbB + A)k~C~e-JFiRZzYV?p_Y{^kog,ʎԲ'INM.$[H>ѽn> N@[зO2v "u ty7O D <#,J*:ODYf)>? MR6Hʤv&9}vߢ?x? N456O,Ѐ4vdC|ϣX4[2{[b: G "f?tً.]Ā\YJ*UOEebuF:%/ K@szJk>o!!dL ǍBWo "9x ?45ЇDgt 7bDABڶe_;0\Z1"=EϠ1=V[EV¹Ŧq"+2U?W}*KD6qj5*}%ETNh[,`n# {3pȡ(u\R}&/Fb<4F]MFw2`?@dPw £ JA YeplQI!`s5DH\-6# #o Q@\0_rB? "Co+& >4Y\m߈mFJhGR6c8p] ֮cY7O42~XlÒSVd=0f;4?@ͅ${ 2J R6p %(`IT֙1}%QoS- 뻰b>{Ha0 )O#=᱊-i~qDPG O1[ 8!N%B^8@#Ay#=IX%q; Q)ӣv Li SGJpK;z>Rާ ><Iz} ~p@#g#~B:R1U pXXF=WA@(cL``&>@cLjp؞ qwlҸO xmW'7$}~qu_B?R,Ϣt &&5ಝXC(RGFiMH(QEL` [J -訄!$Qli`+2PfA>ҧmlK|@ yZ] H *c>DɎ Ă#D;|Qho(!KbE8:b,>D8&@Hb>٧3p'[R :I5eJ LAމ@ů*@yD `%k K߁!T]+, QAb[^tSIK-|g cqCSey8Ljw> >M]ejG2Õ?є{' HHqTr"4f]vW @0/<.P;]$ r+Xn ]S˂]8SWg ~:Q($A?DJy)N0?6,YMJ  JS38 d e>`h(x P K8DZǑEL-UDù!u57;|4ܕ|fd飥>ߺJѿ]B?B&Iu( :L:q[_* h7ڢ~]tL Kt1J ptS5 $q$!БM ·,#!udV$$ZJ3T N* 𑅥o:4<ӡj.0=~daj ^sx'v1xiX/Ia1WO$!Mms`}vO,&%AXEv |@B/.sVO =9X}&]fMd k8ÓbxqBulʑ1㰐TC*}( l}=+OaETR$d6<֖Y%A倨~8Y0YB>- a- p fI8ϣv7usPI d@2Et(JdžHf -؟ l>gÒ-WL ,:x_^p<zR +-,hTԐUҨd1Fd :| ,ʿݿ3MB6D"mfB*HDw p 0\ 8 E,*܉aB&Lݙwy{wouZTwn'^%bx>p/CH/~OWqn./*ђ7G1%GX9bݑ~1*f| uTrFټk'VkH "yzpR@͗wV4 bpV%4>SRm;K`Y*KZ tQ=281K`;) ű x"@biz(F݉ǓR u#Y .Jø,pX1)Y@g?BAdDpT67Woǻ{Iſ+I_9xt//>a7{9OSNoZ144~z*0Ar fU&'<כ&ȅGzǩ*ˣKhPa/GZp;~IDATg}7q/,d d@>aRNlX x;k8͖* ~+5SOY%01j@޽1[??oZ{vOL&d|% wI bV& rWOi[`6yg6XoVd>e\5 $ 8ULe*<<$BKe`G;1yTncR>:_Ƹ'}ĨK`[cw͇Y/A?LCc+|~!iJ2j)*|#|E BkY%l E'BM`=nh^.(sLJ~%+BW*]#|_#P(`p$"0m HVr2 _&b9>1ֲHX( Tb%8]_{s aBwÅ+}jEm>-ވ{4(zr_-4\R91@h `x"@&@̞fT_ h6* - u60N+1=\߾z{&aHja1Y'Y5:_ӓ|q.>|+MKxNZ }tY1p}卿E `x"@& [ h#/˂CP㏓L]atٚ@<WlӼBRqzpU@NN~m9AB9Ww| 1n)KQW=Mύ`EyWxg"̯ ɀdžR.`c `d]P h ㇆܆.7=n7DRN/ܤ;Gq2;oINf_v=Ab{4pb {6Xej}پ9x x"p5h}z7:@ROݞ›MbKDOz|g0U 0\Zg+ bBǏ2Հ̵CYN'x0T{}=-L$d|8f1>r?t-=p{|ImzP^Zn<4wGVC"`<׽yÆ9OI#V_q|/x|=np7,CtؓtԉJex6Hf(QCJ >jAef)kKbd.BIYb.$$0?Ƞ\)^8},w`gg)I:"aQ4GSfIޞ{rJΎCٷkk,1voykhsKIiA!2Ӏ#C>h]&}e`?Y(}/OZf'۷F§|Dn>Cv3!N. ;]<,{KBe샦]em%wDKatv=Ԇ>2t԰?>?j8#zq> w#O')!_@ŽF "[\S}2V`>4ҕWanh N$&Sګ$^RO/×]MՈ o-h72y+'+b7ܠp.M2 Q ^?^?nR)]gxB dv_zuIah"" nG{Rx8ˑ>q#}.SǤ,._%ScRVG M^.B}Pc%xτᔑ}J7U. @M5ڠ\Cߓ%>]Б$}$*jP|xgfyGsK /%>oZvbKyJN ^o5ܬP@߽H\]yvI{0&[S{0\6ܮMbZރĵGvQe`"e:ѭٓ/cIEUp{c({ H5rJ7)SDE _tsA[$a ^JI҇P%c}m{> ԏ^?@h~4y HI?NO>j g([mޘеK`Gizmq{7ǡoܛԃX ĂᲵGGQ҇E^?{,P`[IRXYK$e% .f;f=(gC%tHc6w{'freXI>*,I=̾lAIA_l!r9Ngk@ wcMϜ qy4wI_-\+lg9tJ go:]P~vF *|2NyFv  }Pzso >R F; =lm9~t銋?O~-f8~zdX(nU-$N, &h8GJq*Y )x<'2W6r x_m=/m!{P~Dk; yt. ŁdJ Nz``8*{hZ"%p &#Œv`yĉG nr6lvrMBxw~\Oᯫfv@ 2 Tj4)LGcz=b J͋Af2 pAJb-s^1O^; Ԝ4 I1U?7u}6?v0t?\uO_ŭ,Q &e@ǖ@ ??TƖ@kCҴچzZ"Q#$+ SypⰛ,>"e}_~5~%fcKT;=0R`^,d@sbPVql\A sMH*#K(HĞq8+5q%96#$nX>`MH?_bZ6וee S($Š&EP `_}!\gMK4~}> O**mIU7%p/9Drsۮf?gGbN+߮e)ӬL2h5Xb1ت+/o}{qaqO}Y?" 6z˽GHT̝BѰFcBcWy'/Ķ3$}+ӡS?;.pt\T9(Gk9@c_ Nt^i8I <6j:܋Bp{m$[NW0Q'|afOŒ#}y*HIrMW(.AʕNWe@=" Nd~Ty@ @,2P|rSt;lyz+AYPcUFQIҗܖnQqqq(d'%l@I8- \M^) 5zw+{O0XRvOC@#}ZˍCܵ;)Õl 2Aʤ1飗;5ְ:kP Vľ/,H*AR)J`1W;JI_%q$q4~ngchĘ2#C ChO㋮P~ޣV.".a sa2ϏRVa<\@p}~y&j#HhBP,y%?zd}7WEāPI*w M,oJcB&(,08V* ~Sx:Jn:{x"P&ǘв >8#Õu8G2F$NOwt"' @8<C`6MԉÅslCR|o M͹ԋ&mT$`Y~DAw+(]-)!P}P_zD0"q0wangA@D ),X3hP^fG8~mx"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a DsJ"@@PzX@h蜒"V9"@ @h:$DU`DP) = @a D}ّIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/ellipse-arc-expected.png0000644000175000017500000001437711642654340027336 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxW`łVfz޽yzeO//?yoe @{@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@p 0*F6;@Q0   (M @`T@om(w `4xk @@P[  @ PFh&@ pVO~zy|Ex֟$- S`YǴ5U"@~vVU|-7Y+A]F x[y\;{ x叛S'?k%(^?TC_q:G%(8_C~3Svg>V%࡯?v Li3.d _`p>8bjs\?tǾ߬rG-~O}SWo xF9O]< vzwyrNo瓿 x݄[SOuTq>ggS?'TEs/rĿTGLY3{%{؟?lt7 nb:7yϚʿL߬Δ]?DL+@̅NTq^X+o[@D2W!~ mƯzSyL'u(8@^taD]!*bf/7 /x%{<+N0~a!y?^6rB Ջ~+:f x{{/ (_/Aq^7y|pꗽW~?. (K2ߋ<%p Σӵo_uQ}n/]n] H@-o~啿& ^K4Ŀ࿗'TR^/~A`P`}l+E0{oV~-'p8٣?38jwy0)#}ԟ%8@{?^]z @c>^y`8@K4<^o G<^7n/ 0%.~_^~όe F Qx򧹂!@Uyu-K# G+pH@W0{# 0.pO\zkx >w |zy|}7r6 Tρ5|"p?;~ᕿG WQxl~7;L#@ρ3A 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ ! @@( HH(3 P( C1  (PDH(; 0# @ !_|ĸvIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/2d-3d-expected.png0000644000175000017500000002006611640436733025741 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx=HrОy <Ljx =ͮH3ԨQ%U*Qm ]htH <2x߿ ZoVL> @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM PT@-e @@E ozE@[6 @@QPM0TaX -~O_m?dɪ?[$x&q@?oJlx@)]w O^@\_3wgd{B|&y]e;qF",P:ݴ9$$ j{-0xn' yW" P@>x# $Vt#`+'m:&WN*Զo#`xf7_3 YB3lhǥX|3OR5Ok&Yךx2}ָحz>ky^ܬUܻ78@*ݹwnߵH׵x nNnUZ6h)zا?z@NэWMr_%%PqR,>x$KAy_f{Zypor#o<]1p~|.M`_k?;dZ??G.׳j6caWׇ2 IP88_}X`yy?T|̟!=H`樂ƛ`_c>­`/gw6 /9!m`$X(#/sx=l ZXQN yrbX+|_{~5WcazN yZb}eM,k`v`Onޤ#:l ˨লW<1pSj<_ O`_9S@oZ鵛o{)r\k>~؇[{xX\ۭ(՜~ E'[31֓׍kn?FT07ÓӬ9t kȅRLU;[#~@8žs,s[N-I0)_̽|;;pN:-P=oQ0`XZiPlT'Z@56u `OF `Ѩ u I}OcgD\ ݾXhULrvU@ RXH$ T  ) "5ED X(RX4 O@~ #(!~DX$ &AD-#(! J"  p/ M7  ) ,E @sW @`HfW"M@lTYl| @ALW& A #@@VfJPi0h~4O)Z@ANK&@@VfJPi0zk>%@`Zg T)R'Ae Pq$4@#X @w{̏@#X @w{̏h\!0嘭Y,w_r׌.0ŀYv `:jxٵt[.k:^Lr1py M-hR@`9 u%17!dۘNe;z[F}Jm&not_& uS8H)\0Km?%-1pzl@ H9+N[ Ƭ'0Ao;0[I5r=b[WO6~=)[CVb86pR]?@19ǀdOu\S#L`г\ ฝwXf8|7}Sut?w1CYAgց^A~o[y=UP<:?RATG5 % >RC![_@\`@ pWbI PE@y)`o\ C@huZ[' LSL<4=l6/ "^vw)``5Ao[A@o#@ NOY~M5[%@0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi ea"@@.^fK0Fi e&mIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/multiple-layers-expected.png0000644000175000017500000002053211642654340030254 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx'IDATxϫuU$q:8Ёl0ę_A w$ 8Y'fXV EA0*!JZZ~sdsw}YS眳gM|{ @sJV1<E@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE/Zx'_ĭn"@ *V^˞HT,ssjZǛw0Qͽr}젊v2,QͽZ-wk}/kX^ ͓?cͥb{% ֒,8V~pPWn_ŷ͝E6iUmY[֞T֑o%^{grd.W~'ăg&O?׾3q,MR!G@>PEK?qm;7_>psgr9Ͷf ka_ޚԕp_O}pɀt5 {ip7OM' ys` &Mvm,ƿa*[<dnh)\Ku?T:|Txã?zM1f_*pL?m'Xc^=MAO)Dt"۴*7s:_Ag.s*_UyY k, s(x.Ff\Ų-68r{\CUkyO=~izw,H4ԵV؜"/pbOwN^l:?#k+l\_O}?*R;. z`}-hkXʇ.WI%ԕaÊqy.Qۡ^fAW:jyrf8\s$?^S}ę.[};vyu[k2\v|18`m2O0>:y4+Vke#߈jPFzx}.WSk?ܔ^E<}c;Z-m|[|C` :mIG[_@> >ߚXmz!~_Vjի=@uo*6oh'%p ^kveG[[eХ*|p./_\L|kLMS > t4x Ьcݧn{u4GNu?uA5$.[ZG芣l~4zHE(;d4 G!y"~Sؿ6hkquzGWm{W6\ X{k>h";vt{`ȀijC g1*bN*&6vYm}.6%zl}~_Xswء/.vYrt/VC zm xnI{ۿ5w/^Y{3՚i[߮Ǘ ?ֵʀ-{~Q'wX] _{|r΀G%xK7SЃg8uK"I1?_~?ڍ\LS i[7 Q1Lǫ9N+_HoO~=} S';YᦟQmu]vKl';p@p~߷ֻG .@v/ǿ=wyտ+h~oͿ-OnwAw-}'q|OjO2G^T=})QnlWCMCc?bo ZАF_t *'Y{@0L pU[]v _J* Ӝ!Q LpT}tyDdm'n=(v|kziN'QۣvAMn۪̞OLT0(b`Ni=_,7^}sgP.>3-NУ$4xA;L~); '@';g s;hȓOVǍ(~@} _G> *Qs ?PhL5g~+fB8vȀ|w$x ]/Kt_\{ {|YxI0;%Z="-(x+-XL W_(jGI{_AڸX؇Ft2`ywG%xQ-g#/q zLP( K/ޅk`!]#W_<`q'~7ZnX΋*i/ވ;_P,k%1]@$sv|܋~/U,k110,Migً9eg2VQWLH w`[sXїU޵"YV$jwf /{]G%bO7jYXGw+7?U5 ?ȭZ?*Ip_@}j˜Zw'չ!g$hjy\>>LTu)A0neXE_lyz>yV }-tkoaTƭin_yWDނ^/bȃ=yS_\V5z[WlZ1/V8ֿg Me닲n@MidCY|iVb(z`/C*X YC+G6דኬ&۲E =p(XŮT&ٰX۸v敻x0 Dz_2`0ɩP$'{0\Pl7 /2tQ KK0XK}@ɶ+zB  Ã5 VDct[@6ija`O )%aVK@ܥg2Tq@+P?yy\J< ;J_$%+ z^OK=yF`MA` @ sY Q@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZ@iiZIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/surface-tests-expected.png0000644000175000017500000012024011640436733027713 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx eYUjzyqL&&1QAe0(hT0b tCsW]s}^zu>{s~gf/%H 'r8%H  $}H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H $=H z*$|v;%H N3V|wn~E^/1yo`vvvP-`ܒ8%!ۖDCR/x9f"9Ki}AԺYʍ>}կ]STJIj8yc~]DkWζ.fD` /Y\s·ЧSCO9q!pܪukطb7r^֯?W\r8_e)ٛRgnzREwI `ȲmϿ ׬Y!pF&p#@@3>؁CFN:~8^9 6:zSS89`Vn)(D4AH=BeVEb $,YQZT_Ճ@ΆG+fUVr9rX/?7^szL%*$xǂQ)7o[ΟFD0lT4C|d?{Kox>IEˀ~z>SphFe "l=ST8`[ <.=k_ݎ`dS8FB;w]6 )$#+e{u7sz?<74u 6\ 8ws/B@.̜F;@F=r.uGpd6PHX(I:~['PnK_WdS*5 (GpV]QF㕋}sgGbc+A0>})$B眹wddHI HI~^Ͳ:vO'HFpH6W=)P5a bCã mM7ArNkǬ2o=}Yޝ$`IUs@sl;Z~2f%_Y}Q۩:3S!x: #<3*RW_ O6BMW }H|5A6Қ$a);]t]—إ4WO *?XjC T4vMkw]; trcbPR{*_DsN_W%1AIAwrF2703`U$ /$"nG7soYs9N;yN(dbWtf Sy io\&Cx_e9 n_ð9 V"Yӻ89m7JI_951u8"c>BON[$̋Š?.F:΋r`k#p*"#0?ġ*c׬8`管4HY/orE =XmYkWx\Fb(iץ2`HX0Q/ y[hm8}7}!8@59\$-6?xxןFͷv0ĉ]{b &~1Fo!7mL O1  G&rp5_vLYtY HXPq/׋꧞o>v/vhJ@[N\} &2SHp!_~qTr] 7_2SW8p*a t9T7ݶG&& `a伜[g/IurLR}A$E0/" 4@9@ VdwlU_71 o*ͨcrFU3p #M#|xNtJo^#U˿_B+\-ǘJN1"_p@Y& 2\;˂w+4Zfvk_w]P FN)y 6Mh4h4`Tyجڐ*$yia{H2:O-58ODG*0)1@;y`՗+1yI]Jc%nV厾5t/hSac6rjsY-Ie[?**y@wWW\N  /LBU8߳oftbS:JSBo}icwxD?mX?EǭzZcI?v4*.Ndh0D 0r#@n+-jI $wSp{5c/[9S'? ={fu0XVv1]ļ3-jbK7 =d ~oE_?1{9m>/<^6,Cp@=Kz7#t|K `%<=_k >p~^uU1 ݃:__ Fji9`?5@??.y?C*~Ӏ1ZV-V]1@/#`b&9&̟lsͨ茛iPأW>5k k2 /E[f 8)gc怘aiqA?S4^sQ /2T /̬wrЀ+8@("W $̫xgt ceuX >~7N ^b_=8{F<09~=]fgb%8П_WBo =B.9 2L24EO]l;`;0^n܏\zU睵}=A4PB,NF$ȏ3ᴈ2#2N6 hڥB<? p+i(+8EQT`w:;g9"v".$.e^!P_wR:ѿ6@6s/vn?@*N!/K'{D^F~fhZj$SZp"o4b| L2I7Khf;ˁnm_^EGK8 `^ĺ\+?>z(t<a LW>wR@ xx{3/z/A^ . 8`i' zV^ר姨2P S`HFmw89z%;*HFT)8`l |\ \6`ϳO_[^I:mK#7:._m\SG@G"2pu8@Ȃyk4G4'!̪YU}}!)oGn_џ@d8<4bC[X$ak?8L֭])5Vn+,':zfnMK Q2w@\a=Ex o a@lH̳9vWML? *2;tڒrzf)\+@DP>Ng&`VA܏+vvv;3=@Gp a5?~;.x%Bt'\zx_l샛n8-@H&&r U3*Q QPv~j< }3j Y<}Gsjgܫ+RПl@П ^(:CR?;~GNmV-̯1҄Iw}{7߱p5CgEKq~Blп3)FZ'Fy+qvl6=B_O+V# >wqv(Y!K@~$(} $,#@N=F@f=2xZ#$[0*+,ڿ7Yta Fh? 7K#;yَF(ПЊ3 ̷}hz=`.Y!d $uRB)dmD=oBi6L{}0\;FE#'ŴK/2Ȱt_MH'ꡦWH  $apJҞKv }](N7<Ź܁Rc97 ?B?k(Ozsb({`%_wbܗ LM 89@rkp}7q)ր@M9WIZ@+0i XΜ>Ԯˤ?LU~ %kV@"?U# u!Lk/ޫ?};\pd鷜['4` 0?@+2(ПXXD`6Noؠ<"jvAq~"gʪO6 %jr$ HɁfcџl8=OvgJMrm{pnt"V'k1-\66>j);bX3.'ki@JaDīw&YeڳMZ Mݹ'~bt.j?Q,G>"p9@0ĞP8XOR,=)4/67.5a?\}iwr@i/:,h@@ QwdjU&~vfYq@Fdώf?"F7B_p@DUk;/8#x|N%<TI( $6=5uU_0sQ Lذ\Nqchg:-d2Z{ i8M.^q&`߱p@uөM@&!9`LD; zဂİ{~-m$5\?0oq@w8@j pQ=dį@D8@4PG &Ҁ2{r yV~#eA #͓pq:" G=2u2zٝm,S/1=₝p*5Cob3oП;G*E;WZPG@O_iBy\ YM9#HA1 w7FS:p@~ AXN2C怇~0?.bHţݠ?8+g^ a>IG>92$rw:B`}C>/Oǭw5ߑlj@8XH/џ@@?DZG|ʢ.ԿI J%m$B ? lX p|daz37وp0 #{Ša IRa,HR7%bLWeH0P!p{p4~^j[0`Sӷ1I0h$ѿb }㫞l gn #:o{`pYЌܾ|sT4PאeT;s݃9|x8˜W]qֿ'* 7 Ktxʃq w (({e(SZПrۀ:cObiF|$7\问Wc9˻>)2i-֨3,ꉍb{"pDgdA^T.Z$" fb Kan"|8d-^e/ 食~:( cs+(Š|=ܹ<_9%>c_"$MOĴ#Sq̆6 4q`xg&q(̌9$'6K>(pd@a_Y~>ܡ x5(uŲ OSq=Bq4pWv5@|&ПIE],Ci&}zk'/wD9|jDڸt!y"pj`*; _s@Gn$F9pן S?/_bd8( !t1ɁF?\m 9o' L(\KwB@jU{}׽|yel%l `l\2<"ဨNS x0PK75ܶR9?8B/"П '?;uxMylqU[mŠY ʯ9y7ä`s) !ZD6}9Hp@UWl7ն~4ӄa+bQP=bNv<7ޙIYkyрpDFwNU3nVLdF<\!,fնz"}_vj-rՙip@_iဿo)LX &U@@ -g}/z9"]1#I94]E<_|'x("36Ϲ j pr'ː>v8xt!LQط{yt 4J1;ː>^RL>>4|No~ k/_q}ա3O[#׾z7BQIsZPlǏfHMQs39e׍ /38W cqC2S8`ۧ9`gFJFb"Cwm:em_)pK@`{W8F_7S LOFr Ց%ܶ0=7t;I92u#S_^ɗ]ăEnc¨*?Rś6Ց >Qxm;Otu?9|UzBC()_@<'4o8ra}6|6pm#ֵUWmklH`ůdCۥe[rikMs4EN$*75瞹"^{ekjjHek _@A#PnzTDftveѧ6?zSsWpoG'o*B p ^, n!pp_9Jq1@~8=CR'N,3A˛$@Tbǹ B,q|YH[Tq6w#@@ 8E7\}NaԱ_xE j 3PW\<\c)'sD*^'w5lJ 8̎B2(DRʹ Ed Xh+D_MkdtI:n[\|$y>;^}k72bL O8eEV=)si}B3|t ݌o??]T)3?FEQ'Θ@ܛx"S9(eet-~,h~/:E @eD Z܋\1gň, x~ߎJ5F:dWI;CO})V$"L8@OpwCU#BN={tO"Plq7I  痽 bG';Q-? o2-AOcv@ ^FęNFjDj8b];d|L{8Ud k0!_Vuhkhw +1:ü0g?}l`O&Am`+ џH![|"O1_Ro5(%N>~8[p9CDGz c@@Dt,!:ۅJ}R 0~wv6~7>`3׷t* P=F|cX_?cW"Y(Ĵl@џpq  "ELxq$AyDOsEE:j@gI~Qm&M (b R_zH`z2,48E DCaH 1Ǖ v?mT&6wb(|hkW4ЉDG"%c/J}u|1Il s `?3o2Wv0H"0F 16T`bⱭ T8J_E yu2qw8 _x~~7%f7x$2HD|$[WR<pX.eB8o4eJ9Ѣ/Rqп` Hq!`wnPi$q 8@/4PpIȃ#a;g 1]\\:#8[6L'[W9E@՟*S˨JR v]' \kD}op%aQ` *S۠/³>j# NQ;e 8s?~TИK90b۟ѻm Ggp4L1w9=L?@䶾8?l'W~k ^#Gt!9(BQJ/4 `N$@qSLWd&q@qu>Hi;5#j8j'G?f@Bb@gO6dwp(F%8t;F 8+L|)gOm{pma#AbhsxW@ET1ݟqVIU;K i .MHKSGmp@2`}"?V铔$'{sDI(r΂$ ^B"5KByB4H8`/qV_gT'*R,s1׭*Y0}1L/ N近ÿfƙ^tW+/W<2++Y\ݎ 2x2N §5>EC2:`_W܀t.?VNrm^%o_7IavXY (.7ժ0O$0zT5 SI(h ?67wr@T% (|"5T7=Kpi@Fh!51 IDAT;07wN5ʣ{Ԥ1u𳅓9>r#4_""@T%# #$qLѯM (I̍N)q\ǻow$dPƪvx@YGݟq,*. >hk]:CO5p@'[RJX=!Nejjpd|9}Ώ.K܎?dma>ȡz"SB1@>~}k;Vi5YHwa?4%n ?ҐwDX*_ " ŇPr{cUH`_lZYe4R#p WJ.8XsU  Em8%~Gp7lrxb:t'Q3A@aXW_3d6w4L #@}0>tQ~ #SВ9ܯ6VXc#su1pA?3 [ZܖQwvdM)ླyUz"ApI0_Ņ'q[&x!0Gh`"Fjn4l BHE(Ӟ{a?=Z>534* aPDGpNh8}}}{\rj/jO8DNRMFA_zM=npO `6)PVu9T-t)uU; \'#8 6#Rs٢@_tnsnjB<~L+9hHRzn IY<5܏`4~(S]"EbQRkF}WV3P*)BY7HYfxn/0ߘHZG0?8^^۵yxVLDDyYTj &\p$j2J r/I?dMpdYCG Y$%0'Y|'o+GZ.(ϗr*oVZ/JaHoP?Nu UT46)>o9F_s,8@-X9r  W~ ))2ڮH/6BAƋ N 0ȣ/A=<F~8`js!m+9PIUY;ҡ`S$^?@'nېMPN˻*4B3i ŝ`@G8~L/P8&p/{=Q'7R#Xښ2<5 #rflaY'_~ ]9~ _Obn@d_tXutf;l8ӷ$#7 <𮷎8]5Fy@^W; r$`GЦ+t8wϧvyえJP_ROn? 3>~ i)޾ F#q9 c D x7}Dpm `p_E?}c=z̗gW k1c95+~fT9"z;{h8 8 zx(<Ĉ P"3bphs\r>D /dTv#Έ?QXrLsyhDַDCw8/;5Ff[JE# >x (T/։Gc3E;GjCN".gFmYvp?h>0 ٶFoGt}c{3rsBja)TkbhENf)7X (G}[h(Gkԅ,8@jT8P~yhG1"O>r-ݟls)lm G-+%VʬЩq908 d  [q-7?~u((rG/jVQPUп/ ݟSy~a0@]UFn# 7|M6M\ 4#<OG HD k<"3 hP9i <)RD(t,'!r; >K*Xd(THhE/ {'*Ms\)X+P1H"ǂm{ֈu{V@(Q+\pF}Cfbjol׷;Ru@/J]Uyh(Ց8۩<(`SV!Bb |:ܹؤxh4W67 4 ]64ikkXYǧ"+DM1n-l/PNvD[*/pͻ! TL-@0NFTxu?}} @?诲h)y.Vtf=8t9Y:xAu#_-_w>5*Fqz96Ҡ?>.ܨ G;k(ѿX5)˧QlMy/(@hX(O JFm/i=)G m=<5c'&υ0;DYV#X;[l|Xt1-Z.-M? _my  IrAl;1&}9g" L#W36 jOn$aFy WP\1O^O0|ݬ Xq/(fu5#T?>ν, *^=(_l_#fWT{o"$=J<\%=`V&5[?b/62EAMxm_ b"s#nsDթ_xu2D&{lxwj:g@z.sH. _v~Ϛr B*gh#AC(4nR4j58[|sqDzz] [y'#zt,niN)Qo!\2_@?wRSߙ(lH.#޹C_iond@)Ocٖp@{b>CN!/.l@aϘUBSh [w"PYopL84X1ڑ`/kq{qh"H^zr c |c&q+?w6|~[qˁx8}tf w:S tYZ%dWלEFFpC~K(1WgpTt 8v2g ߶ E67F ]0NipP|tn?t-Z3` t..=-VBi|txW8)| / sY%j^8-O}+k , IDATu>Ndh|yRp\p:(rR"k.v0FI9Be3 K:Μ"^np"CQP HV˶ *-1{vn}4  GQ:8 W㻶agcBW!'uS[˩ p*e~ -x>0Q N bPx.#^8mHN=QY;i'F$o O-84[JnLu u[$`Pha: G;lpgaeh*9%> 떠n3vxa;6RK/Hm*6ڗQ<585Q4,D6w*qUj?/IH#,<#ҭ>7~B") ohah x?󇇧 TeW!W_S~Xпw_1P];0%TX@ˆi@jZx #njӾ 2hw[O`=` @W^_ ^z:5솛nCo7tGF9S\["e@'Xր-EwkZu);ۢ^M;UOi _r!6I#U{UC~A j7G_B9?ƠnQҚ>I K59ͽ@[d.? ^yl49phmbH{'E# ZpcxBX1NE\:}ޯ8@اTD;&`Vwu73O]S,8jd '~]b˕8JF@;+gxw260|+³]>}^yAb>&^Z7~7Ӽ›7@b'M @$<:ȆֵFc|RxU&%qݢ@GHh ?]wm][ pTwS<ũg/.R828Ahk&n!S:py8/5AΨ UNO}Θa3' +cȲ dU*e#`=Ys)͠3~uVa*Ol\$iv& P9?Fgnqq\1n֍#S`}:M2w^ s+.ET𕡈U)C+65Lb1O\aFc)}nL&Z2ǰ TOV-n82Eg扢j α]ߡ'_,5TJk9pF/RAi r@lW_VͫFGѕD`?A+f_ND(KFuo(*_8 Ҁ"k9'#w ;>uNo{pOj 4Tur m2iס^,q_D,bNmű=_9OCXg(gfg}T-,YWsZ0_C= F׃u-'^8P*뙀XlPGo a"f`+ sfi\I$C8` H_N!+ZޢB-gSc'>txEP]A/t䌋k/DFI8HStlWS]hُ+u"Ͼ&:awRfu~>@Vv@)^XV\5-т7gSA9U>?n$TR p=1Py/?VB)W *h |4EukzNv#Edj; ӃcY?Mlv6񄣬$jNCc0wS,5{u)9|ػ@Won˘ztT<p8Jo.^g>"߅UKémA7i2`R',.p.JLL5h6ͫB1C5_^FtjD&2K->&#~~](_c =[aiS!F?7vR{5b6XЯ~#tBy:Iσ]`_jBoFFqO{z}z~QɔO}~ eW3QPs"oۺDOc͂ 􏩄{Pd(N#9-*iP3T4k.$NA]֧u~?=5Fӗe6Ӽ$ah=JeOo?$23sUpT !l| #wԄC3yuin p5ć~ dd{ԵcUY|`qcnߕcr``ArűT ):%6sUY'8JWlEu%!0_ַm}OܺeƟĽ8=(ǖzƤ'CaE+iQ=潪}RaMy{Λ㉤} |(jȦEZ{j('qN(&`))xE;Ev$С?xe9+ ÚgĮBAvWLj}\o8$b'|#nS9SU]xW8h"[4;|>菍]4 h jcXfb=b_qPkִ 4ܒCEWP h(e |8Cv)??]MZ^Xb ˊ z *_> nxXbǎ)7]P X  };<1ํIpY'!z9:?tT1“<8:Р4 &vSLN  #@=~L$j2{:H28`*en|Lb'_*8 W;%vawēAmS37p@AJh`8h|ambp 9`:SF_Tԁ9IIZp3 j $|4t l=^Y,i@m-ֺLG 40]/(<ºNs@T/`" Ă6T{%P@W~EO]EO9%?"ᑪrD.߷v10GR|J#cFXQŮn Rh;C/C5Yw10bΘCwp16=QdztSGOO#W%;`ՊK:ߚK,"/`$.q!sA~GGΎMB?ۆxmc|WSU34hљ)Zf:B/`GourfD?:|@"g}?[Y9z5>@,Hy2l ȏx#Wm\O os~}:F?"0ip33+ǭu5ƋEva>Ҳ{w/P䴝bN5hh8oZb.9x^$WB1""""Hlk$$X!B "ADlcyx~{{}oGUjtuUt眪j3>+ddYAڕ8+BL G;C6; XSN[*o=B9^l6ؕ+B6g d@Y޾:Soʸ~@7yS[9fb11v%myW9C r! -gߵo<\'\4Nw{f;.>}?&D_ lOF >Bc?{64!P?r|x~P/K(O}@z.~{p! =eh m<7U O?%`nUO̫l}h> KT7,w~W` =a22 dWr% ~W*I˶Ν2>`j˃6ٝǢ3,P;r;Op`އ+?^tgUg9.sU}Jpu2Igv9ϐJOل=:r|I-k 3ӝNCR̔MҶ3O00?,?`_^g 6}=._ك@Mn`IFP|@]؟X{| tvm!&FlWa;U[/Q2eP?~YOO}mI9 u 7Wc^6MAh!x- O^}RN'~z9x8<6qD<J:~gͩdO>aWMl+(#|l(a6|wX.oU /THަ_?T{{0Ŧ55;; Ml{TK|Rh"O7 _rt&HӝyLxׅ;\=ƲNx(‚cvD{; xoMh% pߋ70 ē@V<]⇗hiBZ9=IDAT5^!F]sd b>F3C |d^6ExiIaiV꨼xP/#HZ 4<}{\![o?|5CuX @N&>g! ٟ{f@:!KbFH7M:`e6 HA:cmYF~l>?/ \o:0=Π~jWq 1MJ0qGw$!POPl`ʎ %K{UO Ȇ3< X FOon`?̚&`OZRv S$-017$~4}@::.6Rc}|4ao\?;5C`~ؕNHӫ'4!|4̦)SƋ5  |]s>7Bgob[_x7Fxi`*{F؛  &JG GZ|@v Q ` =KTS"v`>`Ckdnj1t@=9c=llro>s1HdtVWpbax72C؃]oF ꅣQͳh5B8~-TӦ!PUeІ8"_[ "&^1Xkgk#>|ܖV= `oAh j2IkNg `PM/{G[RјOQNbp#B0罍wdwty^?o`/~/O[OвBGmtA=_U A v'K}N?|5@uAYGZmc4tIrCC~ f ^4%?gej$ُj]Ƃғ-|}7}}Uj g ;L$іTMf3^wJ|&3Q%93GTbl >ڱCM+I?JcB5l[. ?I̖ q^p8 `7e5&ۓ/AD='=Lc2Ɂ؟@3H>^` GGG$mӴI7T~[zU!ec4c8;̍͡8;T,!/L q)$NU ϶ q1"MO ?}( 7nLl\BcnBn*/]gŇd`l(em#OwfF+/ > ek |Y& $ ؇?Ēlo(g߇< ,[?gNdƉLO`x?7P`Wy*m=3k~Fh0Gc1eUcs`Мt-oa,TĸHgk$|Y*7(y- J0P_pb#&e[[>>KHJk)Jt 7]|7L6`upMrXI>K| eNg?æ~^9H#~ (U@/?Faw3]]N `)#3)p5 |cxq%<_۴ZƁȺА$AcOyp~6C+cד!Phbc96Gԫu]|ٟf?΀>"`I# 4%K tۗSGψaY:׾vzqj%bJy'fh$=a?\JIcMnE0`i ]("kz=Ð G2ܟ5XQg*B&WAKz|g0 ve! HJ쟆m>ξ|p#Z1?l6nM?~-Uo<٦> [ COW޾p>?c/rVa͈wCͩ?IfV_Op6% Xa;w>S?x7z޻zѬa&XXb[Mr|N#?׶xM"`@#a 7Ys$S}3 #? fQGIFT/^nQ?@@`V6Z, m\Z{,% luk"$Lw^^|R_ds&/aE5U:Kgb)daQ*! Z :"|{^p*VÇ |MWS?V7eǐQl@7 ,⡭{݃ >o&҆4<Ea`׀9{pj:p1bvS(hG2|?A>냒X:$ {a>tgcY!F/q[e-]J=! қﳇgϞ49$ʭBdM0)[O?5}_bzeKdah|Ty[_M@ќyOOVx|JB`Q7RYR+ (XD[X G@d&9w$՚P?~^{Vax2F`UĦւmg>~=G%Ǡׁӿ^1\| '߶4YԿEN]\ZMp=Q#xo#?xJx?\]Ϟˋ$d|O'a+|icA6E2>?#ԯG>'J3n0'I+ V+\4@O>@#BQF)uvPhq681ʺP؟ڂ-6Xc[=4 6 ٶXB _;;==@|f$mr_@YԿU(*J o?Bhu󝣯|:_Pܒ*gAI-.\r/e#@ٳ7O]LWe@%mȧ[ܳY,ߍ9c78{GI@`$MZ<jrsY7?[y*h}mp))pG.i5A&Sl2I`P<@X@ZoN>&lϿt7~N'4cS_>e_SzFai/o2V˕lZmg8 K\’yp>}K28WP}uE_k{>O_OXPc49އp (sw5'O8϶3.0_q.(v{4 A C79|ԏߗ_~; >_dɄ#&Y@׀RUn^+]4<!~N6GMcv\ǀ7n1h T` Wӧ'Do>s>JoHп؟6ڻ `&p (p` [Û_ϫ?Os хo&Ko{YԿ{ۏ }P6}L&|s>#Xx^P AboBd9B !@2Nxjo?~= @Q_z\ -h4"? @׉ p5.ۄ0p۷JosYN`3ƻӠ (FNC 80j_~x^<547y/hr)(+jl`E>fy `O_( ԏ?Z?w ]bN1+YϳWQ6cco[GMc@R @ԈPU*K 5[>?:F w_8@CMm*Gq l˽t=8>ձ?{-ߋ1+;2 WW@jJ^{cHk+b%x͵P*P3`n$pؼB܆&_{$w@@HUdN;}-Lg +cص_c> \%sV: :71nٺ@8?c lrŕ,ǨJ5v0{[)왓ȅ/ە-Kӭ2rl5M l t|SA~L0C(qݩ)p`(zi͞Yror%[gӺ lс'AB4 I7rBbXW'׆U*! эv\,P(%ؿzUPT~UWm( `#0VމR b5@^eóZgT`-jl$j[Y`K٭@v먵#P㩦!غjD3TUWd `gPWu U]YQ;>cޫ `_vJ!T~6ڣ~ V*P:# ! [,/4E) (sRU{4$# Ў." 7GQ[Q2L) u٤T`UT*PUDŘ>Eg4V*ocm n_{{OeνRB/-ރ=2v'T`'wX"0K<kЎc [׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݿ-Y]%EJAFrTAKE8e AA674BPT&HX]9{~gϬff{f=}?G{? 'N^*&@W @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@PwCVv//k<PO|BKWvyǿYc c7;$qz]ѼML \xx=ͪ֎SM dqaaZRȪ;$qۗ&56qϮww7YܹGǮp=cܒ`L{{ֹfMwB@MYa6~k/ юWx+_|u}{t+5\XԎ_:T6sg 7" ҩNי`t-A xaǾ}\dugћ x1$< ?uSh՗p;55 Ǚq,\_^}gu}Ca0|Wg"ݎ[ɪԇ<_[~jZWKxs55YkxƢ[V~v~^2RW l?̌g:G <^XU_?$AǷ ?{0~)d?'<3E_7f_˨%5,g bm`)[} n>fv`|VQ nm;n!i|'If_r2So}?U\ױtlДTWJ$AYe'[y/KOz1XB /r.;Xۭ'EA4IC&׋~/} </'Mam/yd4\=[@N:r_uo[s򫫷/ y׻nGڳmuzXu_n zί ~ᶲ~m0CI [Wڻ3N߫yg s5pg_50GkyU=nyRx/2YWFp7^|!߷8"3򸹚 v6L!9-gU>g7zcG ƚ7׾H}ݿJhn݆ z>˗"_?@M*S"nQj; zў[s@>+rӞõ?z{hҏo~/&,IA@ͺG.V\G `6ݽ'v2[8]'_d6zI:m#@}NwNzGܘן)_͔kΑ| 3ś]|?&!@We\) d@ K/De~hֲ0K~ow|gz& n|c>>[_J;?lI ~o Wt}nvc=}?h0r3~Lnio':! dlϘ=_$\nwd+΀?_6"gR;5/۾;ٻ@ewtfd|m]j<^?o4v}Pfn? BVu(n}a+#p*k?qߔG(ͫ_Ȁ<7'gZSiN~\v_\>W`tGzP~%}@X'Ó{g[x^ <p`wZxqOvxƒwUA2`w.<XpO=8@kڗDk(c4谎YP]xPM^ P*[ݿYD0깇=eO|mݴBo [*׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExcIDATxݿcu~;[pz?!4V(3J&J ;m6/I?U6vwo9; @@JV1| &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6-^|(CjW,+p.;mB@4ц61ޡ?9g |R@| |]q~/W%p|F@|F?u[yC3(10S-t%>, & @t<Xߴ+Ji۾-wH`=eWߺD==. ^7 Fap`?PB LWHT$x`rOg߶޵$x/, {j0H#*C=|շ^=|եmGnZ}aPH,! S+XhZ@4ݞ>6' nIR֖h}F$b DFۄ$X0X|8=宒`Ӓ``WܛIK{=M@Y|}${jW+ Hom$<]@NWI &— ݨ#$M[ɺaI |M@ݛ d$t\fN̜mDĵMXv{m7>Vq>|p$0Deyyu='hwޙu sTZL$́ / EO#Cq歟JgvJYw~zZ++_|Z@| pC) t6~o٘78 0@;Dt]W@j<Oӎkg>I0Sx֕4{Ͻ÷3  {?\. f 7w1bZh#kǹג/z`ԣ/?5}\n'؂5;8=an W}k}Pݿw/z_:G[Lr4 '[L; y b- ^vKpc~hg`#X=tדw$ v'Ϲhr$-nOXw>ڝ#||b|TйCw>7ܿb I|{soI^TX 8?z`=˱$oDmO7)/%l?<)\ŀ?ҳpuI4MDlK˿x~ϵLvؔ]$6w=2v$ֳ\oO%`rOW?~<:1b,; p oށws6t/Q K%K`Ifu1q!^L:yRGbۼPam&U;: ]l`U4Єy b``AѿcڶzuGkx戁V;Qh1vޝk }JQܟ1+@S1pg'c*@/:S %?XC(GtѦI1PH]pۻw.z{7 [x+,?WaiqO3_ +>%&s?3;<,Z 1p 7'wk`ދZo!& ,z$h&=pOn@wgҾ~?X.@, 8OG!3rM-kϣ]?t A';c6S`/Sj:nQ*i$wieΦFNm~q10Uw5-^.P ,۬-]G[ӞG*EiiO?):>6o: ni;g[Hϣ= gvG@]xϷNUΣx~c`*9yG4xB@\`xx) .5vx| |c?y( GZn`"[`/rhpْh oc<5\׭u[ͶqI0ŀO:ێaoW Հ/;8ZX8~.v{n2V;v}{ >[ qMw#t= ɼaQ`ŮxXēbI8o#[<~b X@tܼ.:h- Wڝ< җƍŧ/͆7$ m$aGb jl^@4ߢ7(nz=ti=.dTqܩi>xx(M KXkUдh=Y.N_[wU] ".G] al;Qtڸѷm \& ч@]@=O j n[cџ3U*k4q.2ql& Up% ~h 8;W G`p3v))&/jW`p;vx[,4NVqƀFN`'hOp,w:T@ < bK |:롻R7V 0]X:k|4N@'b7Y,&`(mB \`p`ZĀ>*  P~]V, @@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI* D6+U@T+mV$&V ! "ڬHTPM @ B@DYX!@@h"  P@5BfE @ jb ͊$@@ "@DI*7:1@IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/bbox-transform-bug-expected.png0000644000175000017500000001322111676112355030641 0ustar chrysnchrysnPNG  IHDR{CXIDATxA$GPip!nK79mll$oVVՀ?C}[ _ @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP   |__׿W `o |>V ݧO?6ނIsU>\%霋|>q~'H`Tݟޞb>} (s~^>+O }v|_[2K\|߯Pz:oVjx\%v?h  +RjW@77 %W/-KN iJMg}T@|T\'t zSЋ_/-Ћl  `,2Qtsy#@8sl.6z8PG2~N[G H  <` @H@96Pl= (#?'@ `G#p$\@l p$d ( @`sy#@8sl.6z8PG2~N[o~a ; (LLD[-ބy / @p 7!@@DE@M '21nP0{ (LLD[-ބy / @p 7!@@DE@M '21nP0{ (LLD[-7WPO{O(@'ޓ # @ $@@xB@<=   B0PO{O(@'ޓ # @ $@@ (s~^Me9?&@ ` Ns W @`Ylt'@9pϫ  X6: @8XV@,  pN@j,+8'y5PFgpP (e38 (s~^Me9?&@ ` Ns W @`Ylt'@9pϫ  X6: @8 D@\'D@\'D@\'D@\3˲3N" (M @T@om(w 4xk @@(P[  @@( PJ@i&@p P*J6;@RP  ܁>N O;x:_+}Qf f on{A`h #x:xCN (ӄPoKs |egTR1בG2~NE" X9=w pKC@HXM/WK̼Gk%>"s i6 ([j~s︚w>%_ }Ru=;P$] V7{1ZyK (3ؼh?_6zxgm,6jP@]xdo_a|X=A_* P 5_@oPe (yaȹsK/ |/E9OO 9 @>,>Lj8VW;i{rԁe~=PNSvyTGм8HHK<[-b~ }|N@ ?Gd'tB' Ug>??{P@<+@eK+\L=%;%b2~=i*Isk7v9@_n~'~GC}ю%@d1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,1  ,/ {+5IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/child-tests-expected.png0000644000175000017500000003244011640436733027352 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxmfu/0 xa&L]؎RMBU+iʇPɱh-ŪjC*JRթc` JjkÛ0Ԇag{^yg~fs>{[Yys:}/@Gl{.1  @F F m@cQ6 1@(hq ``4 @` @0J0x܆ 0 % Y8ky#hxf{GlyH3e&[rH@|3W_ ċvsǧՄ;'OUJ@R˦7?52a咀L=$h_ٿÀ)XK_Y]vgdBCG&Pͼٛ.3/n*Qe*3߾7~>@CFA4@ZD\nnͅbT`0YNyJ@VAYXl΄uz+:(^Xɻ~g9‡ra*VTC EO dC ĝ޼B,E| xֆz1278iM`R34N$A;qʡHGAv^yۏx 7b{?x1WbQg.L9GA;adELe[B1AyߏE %l=XLaF< HD|?:.d:l9=RP9nٸwZe`Hkm6gw{,`yG((@`( ?҇r-$vzW +ӻQ\|(8V4H:^*-r&pN#t 9zq ĩR_:5tEev)>ٹS *fkpټ9 TD\ʣo)y߳By9Aøkਰ On!EÙ\dѯQ/w 4sQԓo1(2*˝z+,p[ y_"*Y[=~g֤PPق $pXLhv4@<"߅Ч/ʶsVnBߧ;!b_:)8%Bh(/\S~ RW^{}sB-X|S8%2 H)2PsёL7n3ʥ\a/ 'C yʅ@v91K2-Hz<쵵-d"T`:[^=%|I/InGO{gJ8n-Kd)Aa{hIK߸>B7sGc݁W lõ+@Y.~ ?BRN xM@ 1RZHeK9w_HT5&@'Uf0XUK {?'?[f v ҂h׿o (f,3§s3S-q)7htT"$vZ} 7[C3\d,=/{O߯+4k)L$G 𕣋kN*}?oե~ XݹX6k|B :h@dENB೿jٿO/jrhx 􎂤~oziO arАta~X' ػ,;`B jj}+>VW_*c% oH{/ˢv?[^t~rF 4lD.p?)Iyt>u%p[Db0~4@ oE:i@Wc߉2P.?x5'} bf# ٿOу6RY/Hdt ੐>؃ +B;Vw ˵GVı\0lwKSBe:cr/_<}|[ ׿{k* (ӗ..S$Gbp೿|鳌9rU=LT2 kC 8:I,OINN zwU ArDLjߖ?&Z4`nJyآ~MS>-_Z_I/N@fċ?B5L~(؇ol7/4*;5HeS C庿Yuc7▓p cVz qY/]7Tr2 /PWczt՚Lꪱ@$ 7dE7e:\\Wuε}$GhYi8 @vBB/- P&>~&4 @CWr24  _$`v?l(W3uP'=w~&..L @x H@ ç:7f)oʓCxAh$]n5:کg.9u$5Wz'< hPHUd!7,tMMSIϊI^ ЏpqY w=*}ׁt!᯵ݼ'/}$H*q~"d=r ;}#G^]= K{W_eYs+yMXʻ76*w޶, 0.ۛ)Y-֩?o_. i@w#b)=*+N@K3QZ]N6(X8$z.qOY"߿f]78@"W 71>q-ٻ jLnvK VHoS ?=ym =YQ@? s;GU?{ow'/߭h\xn-lT^ D s_z[E!=X= @|;W|/}1'hg#nG5]G^W){1pDVT@ (~㨻ƴ,Bޗ-Ds庽'rꗽ×(ka_{/.+.ciȱ"T +ˀT%o"@"nGvjMĮ$ gpcr9KBkV"f~/8#+:I$TbIQV4zoHr_>¹ *Ҕ3G Lx n?bo2\*Sl/j}[C*5@v5doh@k``}o sg_.K?+: ]2 S2 Ȁp2kRԖN@>R"4?We]S _:;4@*]yp[Of)3 ؊'ZzS\[;P *j@ u׿>Z !`tnv:lzd]]RCk`@H!61s F 9'&~.'><  u2 a/h@H2- Ӏ|( 0je/-4':hT+BY<~gE O\sS~oe-|óg0WhHx 2PEz 7r@] E.ng! \u?}{|Co5Zñр#GOߟu{ h@%!NpG NjsT@÷6<+_Vu ];@PB%a(ٿ.DYi.!g ^ױ{:0˿X{kWYPYN<}/)B'Ϳt@Ov;d4 ߛ5`appI@g (_ys9ewmw` KzA;x ׇopR{]'cȺ} zOlof_Yy'l: (Ov&>_R8[$@AE][Y[ Ē^4IxLp-(*֥|Yd$i@r8gd>y/3u`^Y~7. LeO䆠wLw 'mss{*2Ƌ\N= }MyΚx\{1[j=V*]: ᡓ1:٥~JpgdY lR 7NԀfr R$om$@PeO13Zр7lߐ(nތ^8h5F}kDyH]#NZ};shFzۯp{̜@i(߭eGE*v?I$k< x12dVbrN0J/8֯4O MmN tM폸Y1e~bFFDᅭDV{q! _^}4ZO+[NQ. y@LSS2 =ը`KJ.L^ \oݶ;[N(D]fhvM1?ZPUB|/N⳿I'ca@,/(օB(Ou.֭4~v oՅo >v" pX4 %+ߞca>uq.t[_ƵYq=5G`_|4S6O$wJBIDAT)2id_#vp*PO.@BPݕ7 p?rgMϋAל'KӬg"bl71,jj ;Q^ r1H o7]impH; ~Kj\]uN ~oUHO'2 l}SʿjFhGcI0]1yuAӸOZ]e'׷fHij]/ ~MG?YVY2% z5$`~1.ngـ{Qc쌇gR)S eΘ>tcBS<?d@ӡ~¦tr#V A^ ;eFD@VvWI@f J1PId0=kǎHBÉf/NJWb1_S3Ǟ^~cot^B#\ lꖈky _NnKfN kos~ٍ@x)n֞fN@oC2 ot:_D&?ٿa/s¦FRRk"ՊM>y}ׅ73  T ۔_n s:\r+LjLS-y滯՘e_o8z}%% jړ@\;O4\M'GMScF,ڷLcZMg?)y2h({G~3O%\ tNěvn.%(we疶e$rJQrJ uq@@Zj'_'uy _>PYBC/ A8/m(A]ҏ4xƅ$٭%* X$`Aa-h@$nJ#7p_ ]6`)A>{hT"c8{/Jk`ΐuP^zQ~_&)7vAc@"~4C. GTUiV9 h: }?l⇡c~.4vӴ7'-G D4 Ej@AW;Fo_?,-&U ,wyIM,fKy*dU 3OյӀe] ί `[KQ*А+ffbk-? @ @0vM67K@T޵oZ-*W"#!y_j~߈O5$Ж "V^F@V@\w& @.CZ'sp8L  iZET卛J{C "E+n6Z%bл!ye&l@fudm/y P3 <DiP@+ ~E-JpZ/6>%޽lbdJ/:i0 46^޴jjj+j"0\}^Q r}moy6 4/g}q 8zZ0P`<&dvD`T1''<^,;{OB`C@la'7wUkbjГZWuwL~C.=\yS3& ixBZ.ЅwupNրW~{3@[7SMfHB(mSdɍG^@  nk3 @&)qz0q|H`nȩv~{PX}Ƈ?/CQy .:LwlXK?x;~/jO=u6Y: e7~_sxwoc@wJ Ip_WWl"v}#[?hwM{}xwWrԷ޼z|ك>Ճ~Gr-]-օn/ # z &8o'qk_lpœ7O{ވ_#ltϯ֓굙cCOGMx`bp# ˡ ͜q'|ΐ>lL Fl}&JF)& 4| A.ю?wy}̾dz:-P2` aN"І h B,QG@g*-l|.t!" B B` ~LqUXm˝X9li&ZƶZ۪ܜ[wOYk' +3^.o_H/h- +6is*y@}r yVO p^`GLO?ø nȳଉgxݷU 2z_G>Z>VXiΟ'B?]LU6.}wuЇ W _t㑃uk/:sKKh0 rg_o}gOd"k\%nw_CS)_K_sO?`?Ɏٻ"ۚpR%6UKv % %tqQsӼ mKd<( 1 *p& &C'k~.5ѢGoWG(]R%*Zl]ʲ5XhTɦHmx@&" m*#@@PɦHm` P@@h) @`ئs~H>Z%@!p`3F@3ko4, 5Ǿ?APv)q,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8gi$ڥX 8K# @ H. @ N@Y@v)q HH% RKqF"@@*]%@@4R TR,@ J@jb  ' ,DT UK8-IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/ellipse-arc-rot-expected.png0000644000175000017500000001735411642654340030136 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx_-Y$ŶzD+Tz#ԋzB,AB;Q8(+n-^UzQhAĴQhChcIbrڨ㜽9׿=kwf;3Z;9׮]'pSULu@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM`  @(xe @@X(* 6^ W65@hM[ɯbO%k׮g+}\%@\p.7W=.|"˙-l}Ҁ4;!!Cw7>ܵ90M'c7o*w6 >5M}b߇cz`#@b$쭯y 4ᡇ-vhdݿMݿAS{T*1YHmhof߼d=y;o>'{d?rJd lte`/tgsffMQ/,gG +a0??b.5?]l~:>Z0Hkm4f7|A:4ؠ}_ k & (ہ-AM\|+1lz*܋ % I'Ot1`o{ ?Rsibֿ%?k?lƹz]{ۉh=lYj8%@@F|3`ioя=ܝc]yo+~{dn{ew{ѾR88v_1^ɳ,]?.5??z3;8\u'X*vs*,h_|ؿ/W "Z!wbݿ߼E+սon Wr.! G_Lmߙ  \r5g#4=G/g@ӑ69-V"6Q ~Iy2qY4ݾ( |X5_˃`? o~i՟# Tɹ@Ooo{'_hۃ!vfpZmSۺ-~x_2{ϭO/CpT3sV> <7ݻ/\ru3gD37v's'?7./pK6Ŕ3x,m=k$hW@l# B@̢ @`]%@`Fบ5!!@`z89sk:?ϯ5p`&@q c鏷 PF@iB  pV@'o'Xr B0eSR߳W~~kEB=w ^횛>䟃!gqGv y`l)v( 2GQyS~W5ONFrj_s}Γ?B̹=/e>&WLF_>f_O/.ϭ׿g^Jmk$Z' V1+CkZ'Jx֓'w}8SO r[W@t567r,nMWYv:c߉kf1`φ_kOol;`w 8O1ljAyg3M+;zկdO00y yrn6ck 8|"L):'RiI g8~Fʀ]t`PY nӟA;e XĜPvu0˶Wm϶d@(E6@ljFUϿ*$C'H3?fZ MKPx7ڼ^#ϭ~+ r-W0V{wW: Hy ysC5oqQyW;@+rN@iP'@} PZ@n , *w_ۯx/{ P\@Xo(Q"whEnO/Tr fUM຀ׁ|uoo(fZ @`~ܮG:Գg>GwWJ'YO1~Gi4 T]Oj&5 I%W`{߬^+Yo1Wj<'ᄍɘ:|q8_-yots}kgu뽋2`+Ӭ.gΠb|t%m܎ӶVvtz}|X37Rw.'Hͬcs{[HU,v~ hO`ԧ Z@ -gEz<Ϥt@8 M_ ˡ3vp9 3Poܴ/|B9&0M %Mߎ8S۳NWo'o$iK{gMxB0!G lσ2|j{ #ιaq8vsܐQ']3gdH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DT ULq HH% Rd  ' ,DTBݖ0IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example014-expected.png0000644000175000017500000001337011664235355027013 0ustar chrysnchrysnPNG  IHDR{CIDATx=kZ&~$j` boL'TP41DL4DP LP`&"")Kjj[u:]}^>缹3 @  = @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ   (  @ ޱ  e~xQPr==x/?!743[HgoGOc 7;Vg4>>Y$[@EaYO?>w}*_ .x3[-i[z[@"PUW?]H<5 (Fc/?/N)NH_%<~O=>Ed dX`w# P@E %){~_շO&-72+~? pY@\hΏUdfїP/O x+@Hͻ/.M pY/xtMPң{p?ӷY@U\MěE^>CT TqXP+C\'Ə?ד'Ml FN͏~oW4 { <4W~N$5ЄG gpzS@\_婞?t ڡPQ{耛!6rvcKz{OP/To~n>&pfpt?c}vx Y@9},_J!tloKPR$M'C `7_>&pY@\hwwiV7VWcPk] 0./@?Mc xV@<'<(|@Y,OJt(۸J (Gd ϟ~ 5_Gv L8L@F^R:o'^riM  @ +-io[GD DaX:w (l{M;_k (T88Sv9Do9'!PGSt@W^gw=r=POH|T?w<=pF8Tˇ>'#/G|@W$p&ߺs #~k.~o(/gϜ. ܿ-xWE_dd!N%|[\/#^ݳ'5K3E@Ӱ"+qx/ܪ(w@v^Ê)PYh'p_ <_N@,M"@@Ze  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T (,KYD*Pe  P9K P%,r gi@U\%@@N@,M"@@˲ (IPUqY94U *. @ 'r& @J@TeY@$T /SӔ:IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/triangle-with-duplicate-vertex-expected.png0000644000175000017500000001543011642654340033166 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݽ$WЖBw90iSrp#tc:dvUVͻ0s*ڧF/_~} 'm&&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol(;@P  B@h&@P  @ T@ol|:  @k] ??>w#@@?-f_S- lt7ƭ H[V W{o|u}>û }[ԫ?2ڧ7+Tjt|3Y]uhvش,oϷKRW7 0!Wcݱل%pߞohZ/"@`LïzPWcowhGP #X;( j`=7 :uSq-X;+PkW?@.   p@W..jตp_:FS *p)ړ^s8";OU?j'ГyxhOz,~Y@ -0\m5pσ'"0";9@ȏ1 !0G)68ggX`ԫE6V?F#WSdj`C`0E6n`?!@G/6g{@ oe@U cjk d^M1j`GW,j?Zmz5ϒ p"W۰ "Q:r揝y"~M` z_Okف=a|\s xp(>j8 p:W=)%50@RZOy|@Wq(;H^B@Wc n75p7M Xy9\* K grM?xROV s.0ɲP ,Z F0'\ ,r ZJ֋-!_'HտkR;^@ ?Y `Ʃ7QS*p$Z `-ɩ)py蔔3Wz_;[wV_%'9W̦ `S7o`%WW+P}}ZQGDP;B8'%?J~s$ˎj`Glu@Vs2}}ڞ=}Xĵ~gWK?N,j`{ckU_¸ P6q[P=+X l$vU[ j`=Kﴖ-CGć'|1z+ps{@Wq,|5˟p? ۷+Y\9U N]p `@) j|.O>NPtLw@.c9C)DŃ.b>(N j0Pq:ؕa@0x6'~Qqo2؄h ,/_ӛM( GO %bj`1\p.5pEp57P4/? xq8U@^oKЃ!gW޺;7,\&TgKl˔#3sWeLZ`}qigj`]nRgJkg\oSp W`[98 `dO>ikz|ɦ=U O]ſ/} _"O8)&Y'e [O@@,W POzWčFv{kտ}>aW+[_`pw@@tGx^`p?wV@t[.j ;N&Nǽ-t o#{ ` QWt28\'PK =l䙿(?o`꿼?lWUqnݽݹ;wi̙333;A@}g2C:@J@@*urG;1Zʾ_̹d@Iip<0^fNmk;]L)n2 = 6(&G7^j:}0T3 蝜7~ Gzo,zׄHOD*Ҕ(/uG~׾q"ݺdp_* &8z8#+Ґʒ_ 5@:ғQѿ݃FhpN]z>J*q<0@Bd]wЀөH{21;T9|=eJa B|]@: \XAwxi  0 xM(RӃf?L s"GjɁA)VMڏFm&@ 5@j)?A~Ū ;N5t=yzQ7!CgrѿV4 R @b@zQ,ONB: b H=%"z! C.1k.4^) 4 i/\94LX,"x2@w@@QTs|*:]>r|JydK| brY3RmZa;ħ$_ҢNcfŸC \yNuO/>CzpM+F3eWet?gϫz 2+K;\R! rr(c kyo* kxO:0|O>'.dǹb$fJ_q~u4Ǯvzp7=*- g)2Mh^Xh*dI%cfsUE7ݪl7+IS}Rc׾ I@Lےoi^0 Un2` Q`K0jBG5ͤSߝ6TЯ|MDȀžK@yk}q_վnV#r!Ho?V|Et&Y3MN~Yz?ƴOCI(*G12HC}WΨhb૜/2~~j_oKR K7!0@+^{˶:ql ȏJ &/ju]9ڥf0cTV^uِ>C'r߹b`y*[K )xb U291ھc5Ӟ$0#M/9m 9?qr/B/ޏ#ƹ1 1i;U067 ,pϞ;^2b`!3tcNv^Zj': /2_^jB o 20#|͙^jguOD͚>W-M@~UM{rN`^ 7o/4@~~v& 4E:NQЯJ0 #B:wzYK"gX  -ƨ?}yp7Y.y8&mǶ,u;9ڙh:z_.PtF=|Poylf' `vtw`]>!0;T@1|<#LDWv2 Ēr"w?e߶M(UWl|ڹ^;}gMo/?08a%RWOپ}'_ȃ'D*ӏLg &ms[w?ܼ%݆*ȀG)@{hЯw$`1˰ 綦 "@/𭻽! `[XgklE,uˉ,01QL^BL+-e;uNEU}q?lԃ'6Ʒ?soo7n\/&}ͧ/ܷK:I̹qymSj\0'UՈ pEW]Jj{U@C;1; @g?@fwAw;dj >5&?ts*f@Ћ&fF)(L_:7NW%vI(2q{7ۿ%ilW Ss G}\G _OYןkց -zDC (`o> i X:|­~ JתrА=7,]knK"y\o @hB"GhwJSV&]?.-Vs@Ћqe/!>Zwa&W_' 03':;:8W^T u?}GnM<~{!0}1+Ab;4,Ŭ(XM?۝޾mV#l HutTЀ_iރwλ BLFc;}BPE_q_y9"ZEۢDC0@9bI/ C'Zf:s`l q8 P$=ޟ:S=_ &@wmD"كهbo43o)+3r|c>cRӘ$`o6xmg/ m6-?Bd7".ŁǞ<!M3< iR2ttlEyէqrg#׾m Q0%.JnX6ka`qXoINCv TH/veQ`h:{_-С͓_:%Lj/7}]6 6 vmN.$ =7B׼* woV[!#lL4;IHa0 ҍ~W pMkA6;]\\jp={$8w~q}~lo)>@ dNJ}[CGN6_} Ɖkq#}m+п3$@]%Ci} cZ2FQ٥l>WD9rɅCpl"l:‹E^@T܁ vĮ3O?76pd^=5tnc~ WB_)?|иf2mg?ĦS|@> >(/Iqm-@c/{Wn_i5Ny![r!3`5`5wu{+TG#6O6tM7nYbN d?E~!4GxNk\Z/ gyjIFs4o͈ `f:y ,4z.hN?y`vk0Ǖ̵-@@H}D71`G9?/V4`jEu{'J k.ԁ6D@8/%4`+O?R˫5`TSqPs/?~^܇YN$ςQ<{.؎8X+r{|'46Z29c.G F*蟦4Kyuk !$^@Y $m@ΉU m3 Z{A\(P?B@B^oPbc[%ynE!#2@) 0I4$lI`xX}o#c3/.?[|y_Ք@-U_{9{UlJ {~uS|nX%(]`t/>qw:RS"PJЗjW_ p?U>~j$ 0H-UAœ (*+0afpM*|O}qNVs% *ިҟ=r=wWW'f!fSӛƲLJ춎1:Pfi@LM)L /pqă~ _$L:Hr \ "lY&,H{;!?/'hG;3^[Mmb+-k8[S~>h5whmP#X&n۽,fF(R9tÏn$@/(js&8s?` hC7F$1b=)@4K`XiY+K_l̑ >gրQ j 7 ˛֒ kܙDр$@'bP_o`Fc V>poocoC!@ѿ@;s0iMEޅ8E%@菊ۢ1fbT &pڊEv}F{25&@Mܮ=, ̂F} v}S4[!aݳ2=4@ 9y#P_m@S% B;A?']%!2$>Vot CWJxVk(C#r1:CuP Z7dBҥnΡߦrD 0JȀ =a| nk"e G)';FV@?^r"ɹdjP9@#`ݸ"Q07bȾ*LQE=!!v[m/nyt&WQep0 >p3G bPθhA?cFu(ΥF# /$] Dט$Qݙ+s (7Un{eZ4TEً[6 6? b MMغcWu1 Wpc:`YbA AZW.&-ku \B,.:{;Y `o4; MٽmJsjƣ:1lj{?U,$@0ˍ@#_tȒlQNBt${K~E[!M'Lg軆'c`Ԧ !3q ˶oR{\k$=/4>mHmPd~f*H*[/XV!Ν^R%IDATb$>2+ џjWGN (^SwHzےB{8J-Y-րV;_Ze(mIV {SL_@ڌ;/L4Gf$@|>Qџ( #P;5&lN9)=笴h4j+VIl17 />`߉%DI }[':X7N@hBm&0Hn OdTU< mA``_d  $./ΜݟN@:<$x A n/m]c/HQ$Q%jDU ٦HF |.@O ~9^@ 2ZVp_ߥxP_ C@#йs+fi{n$@ Nc'ã*YB.4WT\!E`ZIK?{4;. 'YS"wuoo'ٳ${3ݴ jK2 z6},9NV%{=5K 80!h3,E Dʘf.Gmc KKOU~sۤa3,GOw;mnBeO1N%U+B &gB(OE^!GqFxC"$aHt}r׍Q30e8Ny{x`bׁ;LpKfճ7" dAMNn̐Xڪu\b0*mOh!Pn{@ko6 }%qK, /8agfS'I1Xն4"&=kMy\gǞ[j%<2?RYӤ鳽~G4)h=)5W 0JZ}U Ygn̍ Y~Uџ%4!ie|?}*Ke Smp~Y$OpW"IaR'B%ߠo0ةm0؜h*shd%Pd?@roY} I.z@~R(~*;CD8)]GRZ|τ?1+B*/?~&#zߺ٣WwX'UDZ~Bs3cw&X53wEN/^*=JJ6|KŢ1 0N oYx@cG7@rVp\FdjtY<@\itH1_ʖ!I:k]*j0 ݲzG/ %k& = ݃Bl (ZeDhmH5:6ZDd5d,[6t~Wfc&BPc=['NU8 U??\$o"'ԟx2`ۘ_LCTQ p0c=߬濸 :.[km<fPB t*1 -{(D6RSR=eЀg`~pURJt>_79P^7W/y\^vUcUѿXى@NLXn SR2bc[._ZAZ~K4q!hgjhM>r<\܅g?sYu:`ϊ t.54t͙#[ӢhhdA@W-6&iAS?l3FD0`&2Ч2%ϝzܙ܎l GBߝ N8A!}AWHhګBq@WزۙnjQ8Pw TmzcWOlC]0`% U'_v/) mL'LgH e~jp7=_-W&uxf_oxџ_#&p8Ԭ8/u9+ĠL:sO O ކ@cZ^v& e?vlP RxB ğX#rҀ`8/#,8# YD=1w缬&jῌ}kR0 kZr$p[$aF=8HSR/w/O 0<{E˝xT{t̆oI@v 0 q|.ɧG(>Gd%NHAto]ʀer!* UЯK ɐR*Tb ~l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*Tb l@@J,vA0@ Ȇ P*]CGld\IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/include-tests-expected.png0000644000175000017500000002672411713230315027707 0ustar chrysnchrysnPNG  IHDR{C IDATx}%W}]?1 ":E8QPCH[ "RU - QhVUR Q*ҪOiS>A L 7%1隆O~Đ.#(:s0twu:uG`jJ2Ȩd lA0K:1F!؃?_ߏ~|dwY`YdJ0iBI99"`è9ԏ忮o^4Lj_Ӿ綏}jd)@{@B *A8yLJ2&}14ꭋ*Wjko2W\Q )A⼟~_EwEֱUw.7b|HW7+rc6eBϹ=tWIJ`Ԏ>;te+`ky=JCҟkg4r^g{_u4{]sq3(AXnZ#P(.z/8?Xp4  24 bA (Ob4b0WޯGsk>Wǥrn'gwă=1AWSS]5ՉqAd@&1-#x4_Dbh0ONCfʹgxg#qPj,j5 [韮=îx`we+>obyG/8zC?˃\t^n?XE^KCzcŤξs Uww_? x͹;;Gk_q-gWٿ#"+IIeRѤflQCQjɛ(<(WU&N`5?>q[@6m6ڪax|I5rdm+G@as],._g5_B U\g{ R`C׫@ %A #!DwwzJ ^ϿIw%ВcAkӥk_Uku@,g!Ao?=++;ʱ#3DK:?SW;z4?qwg AW< ˼@ԑe]K%5Zg n+1_qж ¥WۯNڿO|56ϻF;j@7󬃟`z1 1) HѾC ;/~o k3?u/皯 ҀC{4hա^ jyG^uݗ/{qby»Z!)39?oڌJSo^n׫X\n{KS-wզL, 'hPׇͷ%b n  pToP <'t-Lg" ]&5Q HH{{a5 *3 I k8eߨksUH _{K~zT9SEcz٦Ah@^vkHKELqK 6w!Rf &;QLRhdxg5!=;x9|%O45,֩4fgJ J0[Aͥ[Af*q 8=)KYֲgԧijiiYnd1VЀT7ԱN=/yo| kcy5`;R^Y +XvݹGӾF[ S|0k4O A!W︧vؽ bk8e֟N@#.#lN;ZvXjDԀ g궙i,W-_$\F"q vϴ 8s5̳cnq0jΫ3}geW^nɞ\$K`@\[Q}~\q\J2FOob7`?9[ђpe/2 C֫v&N`0@K{_SbonZ#u]bZמ*P߫W>YRetYk267] gfMV\஻ɢ>o}fCWrX)\뻍3f0} /''U^=xGLYW^?*D1hWyS e nq߲HGIkQ.ۉ@$ ĠړCꯌ$1X#V ټcjiRtyջdJthE@b $SO+닀k޿Aƞ#$x\On Ǝvnбj/kD]4h}k7X*kvƸ ^k؅xx,ϴ/^{]U|8qf?qU[?rKV\겱I vTT Ԗƻ< Y=x6 Bi; .֟wͷwpޯL+,:~M֐9mKu(1jĠ`wٷOoWGxK_A2$hxmG>~g.S}Ub@ V C@[)&~~:=wlpXaWB_)t T3?w- "4no8G2%hIzZfn=rfW' ?8Rp4.UKj=/ne3@>jOTPlը@@،JB`ļ HԃN#=K\Ru;|G$!eoZ^[Gj,[`}< i?}9X ﷐~gI[*CwB.GW$^մ[:qֿՠ8I[ʰ0(Mi`?Z5o_ǞN C:FVH # Oų~ұ^4˂{w{}ύS!_^4qoLV -SJ$%DS1v77㘑WNV ߓۗ}mO\/-MUׅBr3%g8ٱȫn?=ԿRkmwu(}dʀ~뒧ȉMq H502!+ks_7߻O:}nvC W3h{](إ&GKؑ׀ggh[NkP`ܸsގ HG~澃E@˔ϞC4?E ,Ob64ג^bN#3~n+e fSԹ} @ı)x\kU9?vZ/Z̞.JJ4i]?;UR,r2li@=7,~ÿ3W@Vy?|" }x]=GcSE&_Zrdh[Py?ZpCG.:b5駙K4 m%w|5fA q?Ѐ 2'rw[lIFvkv,n|Gn-5@Ѐ^tZ (W~K^sF&ٳrP3t_߭ul|qIZQh[{;N=Piִml%kb6GFycPi@#g6IƺSI˩SÙ$Jyꯐаi|#?t}l~W6k)̩o%XDH6@vpK }v?TyKtJWQ By D W68@ԑI}is]5MSŠS&D&GXՀRon~]ͧ\90c =G/Z-%t IDAT 86Vx9(sFZ~j_snO J$PD`3j)rsݮ UE3ЈMZ TKoJ-shdi'k{.w5v-r,2lU84 * ٿS{t(N__ݞ{0Oox4&# ~ 7c6s'/o|ԩ[+憋Կ6:]`U+2N ` D`L]R_U 43 Y@R1:4Зb'^/Ev^ zܻ @wVj"09)6J 2T.hbu UGUY>PjIujsJ :Ls";HW]Hq FD!7L;OnmS="`tD`# S"#oR s6qkR5it$ǩ#d:H:R ~2E\ vJF`(9!ԿLR'L#U"# +jY& aP<f̬zKv\В L 1/SyN`샛,^_3 @0c2'.'h(ǁԿ;[ #͸A? ?806 ~6N?AΥs><1 eu .MELE6vGTnru ^#`5]5=0={;}탴8{jLFLvY o K=Rq ?0r6п'O{wF W v H=Ra[5f{JL$yɛxgaX?CjLڍ؍~ OH [Ȁ_ bR )Ev s:u"}z\*AO Ey=f`@yL9XA}}&\ LIVFNΰ&Ie@ꯣV΄$ 4c+W2u]HUΊ* 4f$!7 HmFM"d{6bm :op+eQ؊[TR.>e%eF%[Xqh(s'ڍ\Æi5?g8Y Rl`\sƤ62 6[]&j[a~1ep`ZѤ R?{p1;50XIJh+H[W$' 'G V*yzq5+aj H`9Ċ[8X.E@_V Лj@ "! /'VZ)|c267+^TF`fRد ~œ7K@ H@J@_b#ԟu=" Hهh >D{F@߳f@aX>`>zFF@PLD$,T?PgBS'r  x (!l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9 9E- @B !l]!9DIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/example009-expected.png0000644000175000017500000007443711664235352027027 0ustar chrysnchrysnPNG  IHDR{C IDATxiy&vX \D$[jٲX5؊lJ^2SN⟩rJcJ+_)˛23HF2^H-I A ^}~w>}^ޯPOg{N77`FztT\bF`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0 ?#TV<`~F(,x.6#0, 0#PQX*Z\lF`X`FT،#30@E`hsF`g`"Pъb3##0EfFF`* @E+0@CT o|;"'#PV77l\#`"0DE틂 @QjiCw{9m'#^nV)<T*zC @'N<%ƳWOl*>(,fRK&,}/#GQ ȵfU!bw`UuT43ZތœO@ W&7eT:b<ԜP RQ0/Yb3/x# kv{wGF saªj(c&XX)\9%ȪХNp9$7/Cݴ T/-7>m-^DY Zqg;1eIUjQYRSA>zA=jڋe9|Qװ\4w^mI% 1>ԁص+1O(E0_V ^fr7}K_|Ξ=+8^j U S3n=|8N6(-*]$#G!Mǎ'F@<1T¥JW̏u)*-t $\/t 2HR6Th̢ݝP(6%`PƗ *}=p_ *}U@!PRt1oKBn@*/=hY$xӻdH[\YCd0c mrI^?|/0??OnO/06ִa ƿ~6{P~Ti{-JBQʂN~]!AlBl,Y,8JńɳU@@].^` uSsE V' ˒-bZ]]If, 4 98XD4bY\AK|/͉Yhu$7ɀb/Zܽd#Bv j$x1i 'KOfh؛b>HݻŨȭ?oΦU<>R A/ona|P~j155fbУ*x1Y˪@P'2==-zԞuШzWT`KIߟ~>My8_h1[oBlI(-{;tP!h93iI x< GBS}aaiNA؅ B!꜁ܸQI`GW} tt>/<\z(uwwVVh$. u>˒j Q @ވ^zRdGsxWWӉmK1%AT@2EMkڻ`󋛵1 g> r;:[{{;y^XXЭ^{ܒɣ'_O-9zR?ڤ-:$$ܩڵ[۶ε%\_ tC^}Gb$IS &&KW->HFG#w nr<'6VcNlp)Ϧ9,_x3{ioW6 g;b0a<%pttSxJ=Du8%/_ؼ46 yh-tohϟ?Mj BsvCik<|l(DKrAK=I3gnwX<ϝ;_i! @1%=}Eq$ 4$A6'Hbn ! (ZpiqPZ).D/ k׮&{}C U5Uh $-맦"o ({N[i(*côX@|/^|OwK@%qw/]Jp1h9Ϩ?Nl@:BP2 :XKy#?rJ5% fU,^Zj5%x-T "Uc}N|.Um"ʓ"%xhà䠧t|u[ !ʭypT-=f ۚ9[Hmt/]@]_'Pc[ܠ:utr)LjK~ߒP[ 5 v6Zĉb?Ks]hgfBǎvBz7X[kj/Ŀ7 ƿ_s2u<9s2gDf}-׀/5nd||wn+Kw\-}1*G MЃGA5ޢ[2VU!jGR$t=;lj:lRr86}*o &%h7P$&ҡ>o?5U(ƆNE:n޼*zF҃A];f/] Am}>'oK}Bwk#`^hF6H R@}QH T,8I,@PlU@ 4uZ/f hgfi:&9蹔&އ5]]v8+fϞQfwE=8t(&R=@XzBLӗ jC{Joǟ%CLx?xMRI/zqhBܺu{p0J?Q YJ0}%"UAtKz SY"!R  C}aGxgf+R /<EArr^Ӿͽ{]33zdǟZͮ_>00,S(vo 5 %:v rC;N^Z fDz `>{[}zy |hZ]Zxq㦥K[x PlBK Tp/S<s?<\U%P 1tKQAF]MvE+"c1 =Yh[A& 3vfXXUoݾ} + Wt&#i~C.BT-sh?=Az&ȡFk+GRFPmH1ݡeZg?AXQ?~" Kv7q~P]?t ˗q|#璐#PG͡a-2z]177?88$`mm4cեKMU&>XPVPXjlD LYZ|;~mj -OT4bYY[VGo(Եk/>Ekr;p$1Oˏ*dPt_R38Y^m)ɟ|u! $l RcDtSZ==|]; l 14& KbϠ4۷&7g}d[o 5 ZHRKЀզHh?8:`ȢCa1ojaK)ЀA 9E 7b|~ww(~rllhF*xKU JB ztOXGoKo6U@LG1*ѽkWT Q DM%7D2J-_Z+7;Z8[I/A7=-H>( ,̼OQM޿{&O((k.jothI`A&Rc_'tz𹽎qIb<;skĄ$wFO~ߐr`>*bLx ~ښNCSgXBAS ~ߪ>=0{o1 n2d6ym־Cg$It_>4G;=Q?%&h@lҧ;? ƣAF@9p~D"iVE1xѸH:4C-` -Y'xp.ߨ5-Ʀ[pM_m,dDIAAKniI_w$?/Owb(/s)q,̒)i`&ݕ>:O}GpP:iuU}W%6q@L՜?!87?"5&=DPcڀϭ! 8pM8W/)]]M:Ve1n/>I_;$Rfw-UsHA1M M)ʷcp~.'0= @W@dȹER>HA!jA6^?P?]&2l&t']_,(%Db/ULF PVEctj _%@}J$Sw\ >Ehr\줏yLpퟘC@>]_S6?m[ӢQU2h}mSb}HWUZ)d)z-I T2OԏIWp(+ r1ρ# XJ-?Xv>hp|~K(օKvtm4`_Űv%>fbV<k<_XconhvP}(j;G=[&% ;ȳ7XU A:΅ɡ+:H bxErƾSJ1HV LL'c8i=޸"f FCח*񄺣ʀR?>خ&5خh] '*|]ȝl! p&dƠE #ڀ6Ƙ>ID?%U9h!xJ3coZC)-|Awmև@=N/,-/buPe:wYͣ-%x/F '"[;i\de#:vwߞ>dɁ3|BcD1Z¤dvvAr7fJT@:B IDATg?e.7GG>Q5/9D1܄DzLHjKo}T H5b({h0\Tg $78wa{7aܱ`㭗_5sO}} }Mcmm4,݃S7~!a wzrc+RlA_Y_4DPc ?k޸1 0F?<+_hZZؘm ?5EjssԷ_~7z 1 &#-K$GGiIO 0 "1w0˯}9#x7N^oJKh KSGzff7~}{fⱝm?\iGWY _C?zPAV sowLB-އ?*㫩OzZ@7% WHVt4%v G-*-g>Yل[naƯkŘIsF/P u#S4 ~RϕX{Ɠ'wPrr/z޺v߃ϵ{EP=34G}  (H|fIKph#K\%X\\k CG]0Ο\ -E=Y ܱ+~@~L tu9:d'kϢ%?InI~\/Y~08C¥y@4;{6=Grޗր:I hR- i5bOK[ȳmoݟHAHڧ!w]~L;0r޶H&H> veaӧG^OCd@?S'>G7SwHg&ޅP7o?Zme%%xh6tp!3 OUGG&Du﫞W~ =:? LLx#j%%eOWʚ>W=Jpoz??Mɱ}m0D;/BhMTDHK\lS8 H䟁+S ЧhW޴'SާWH[c t XX7ݵ×cMK~r-_xkhoJ$ Po>&r*@]LP;ݍbLJ.-ׯՠ3]X-ok{+!ez~?Y`diiD\".My_LD@! n`lHSkcyPO/}x@Zo_u%qN0W @o/U%@  `@_1C{$qiܼUOod;xnH_-a~2ͪ}G]-eJlxPZKI B|`qqzHKUV'9ÿG=[\Y4)@CW**0{/3࡭yiht,9^[æY٫vuUoi}fm/-uȥD&Lw%%y_@h7A'F#m뾾ޱo}J`y1`8)s?C (,|&%@ 3iDPGNR>4?NZ$C<8?xXH(x+|}@"'cԯv%0 ?r#PrrZ;ϼo {`?A N< /^&F28Ic@gD0ԸktUy?)"foo] DetU6?ѤLP?>}PWxݾ}_eV< % KWPϟ?}4JP 6}6c6$ɻ0߿cqެyJG %j@?v5P奦?C"5U?uD_"2i2.0d@E-^05>==8} ܻ{K.t}6xnzD9̋b- AF.=FWQ?XGlQ`$}m ~lkxکV%ln|wȦ"HI ۇk{ݱ&T"1;; + A 5Cm < >ןpds=g42Lur>rm'!Q"5:"8rC WOR݂йdP F/{ JYɏ*4#uz۾sr,e4??`vΜyANg 4N٘[MX$ ~줏i܏_ݱvP駃K8GdžU#G\zU…%s\Pmӵ>AJ>_U% n+0<93X+SBTP%j~ꭷbݠ|=,Ps}?rJՍ,~౶G"ѓ'9z о1R).0(] FF rt0ħjmmӑ18%% KGJIxO,mgf?Ot38 GwZ:>E;{waZU@Gs?΍>̺@a%bJӵ8uՔ<.ܾU2y8xih߉g೸)j@9Sɞ.n w8?D؟"ɕd[B.g<6ؐwɛr-}1J0jG%xx?_}pcS2b@$=u붸1&ꗢ"%q/%akl["f;*թ? ƍ;O>guuuǎ';C w0+A%r}}tݗZ1v=xwlB4&#$E Lж61^&l=G]bƓlGbwxi9ؠ#À~om 4N&'pDR{{j?vP1&U@E'.Idz!%n=fIX"i$-j|5`ffvGAדgutGE&+ 악ƹFqx a(;onlvtHv$/>>8Ӟ$_m| #IbO (K$ {zlb(:u" % X܅G`r#w?}kӾ){֡{X_|W? fwOa'9#>*#7gcGxW)D<ߦ;+jcWC ̈́%E\*ay`ht1D Mbbp~6\0۵y5\i %/WoF[z-/77:ǂjgg925Wgl.*ʴL)^J~eއ8H{kziR2u@T.48#߷쾌QeT= %XX LL ;wt1ٹAlsY 6WvˀJ1>ߝ#sb0+*)mN锔ivyʀZ.abZ Q0T[_]@lv jC/"7w#M쏑;1S7[9`day4#ś~0ƇC&(߄  ^ص +)8CМ|ݎ4G0:f9b-~mgϞ ="-9=_:;=6o66i=}m}i26#SK9 %f(7$a< @.azU+ٳ\)fpmn6%RSWydh|ަ~r[t:"?tšM󑟇)d@ #kbZq7ˑUwLXRf9̣ýp{BDǮ#T C^zj;@R3C[7cG?:4}cˢmNJ];VHP3..Fwq9(û.ƒ oR?lPR8rTn1{5 uhy_ JNj0SOwM$-|S_K@ NY&վِ4VL4췏lW# w&n䱶WVܲ!z\J#Î/%J E$r~^3|Wsj'nc3!~qOwS* kF~~9?(xR/B҃ S`TH _1P"EXBq38U Ju|c/MpJ@Rr<ϚWrzOO4{:ں<^_ HzjʒG6.''P|!&8MbyP}PRK b #µ%b{hi.dIɐx_W/kr-׫~?ާҕQ]`P,dƧAjQW( ~*`ry;88_;>o7|QX7i[7;:5j1IAg,Î0 > ݰ%bp3p/UZJG(W444 Wj{ky;>.Azn4@vun,,jW@ ]R4Tv0R]0= (R2PiSQ/^žڨu n)ű=,6|b%9ƺ&Kv+9y|ɩTd/Xzԟ@ Ly_mbb1p?OO.omIV?67 b\Nkp0(E<՝6|ͩrUI VIMCҎOFKp`s)q8ji|@ o5y HaK]ElyiwQ`[oCcSIN~_ (+f`X)ە|T=-5NiknAr%G,AC: l c#x#vo򋑂Lkn]^ H+ =;PţBL.n..00g"v~:w}u}cO;` 9}䞝x 39=bV{$S{߼'! ;VliC@R? hEWcro9޷PK?< u"΃5yf0yYTPr> 0ÝO_«.T>gbjL87sgpx_=*1C1|P  @}?ox?wč7BS]`P" @(ly_GSmgn| ÎZdz60Q규`'1B#_^{#H[ 8j۳俎2aOC˾蹸|(p`b"Csx S5$'L_:`֊Z\_zb=FPr0s ǐQ>·:F@HWϣ?1{ jmի87ybshj/({;1T߻fSֵډ'Oll7]墲_]`ܱUV=6m_o?}ڜpx؞`~00`#*`_YZ[[܆;Q?Z=i\ŕؒN@x ֢@DfP00?&JJA7..կ?,eR~|Q ^ ZrLAHevY"ϻi̵/!ѱsއ [)BEtL>-J,5&/?}Zػ+8%^߃C3j~(PѳB: 3=1qMwQ˒-c&S?4{z:;_ xWmta`,>C<:."[RbkֆBRpk)ٟbE[KNÃZ&Z]` KÐRAtR8?SJĀ U8ϼ]lil&}HܹowlۗPZi((ﻢdNM?sfj0c}4N46Տ IDAT䓟 etȸ >!ȁw1 *?Q)xl-g h?$8S _]` @zFQ ˁ}-5yn5Ͻuz(2;>+PQdʻ2n1!K kùm1uX/UGP^ֶ]QBvڞPE 5˰,I:R_K@k?86,ydgOs g N9߷H0{Yh;_#Om{=?QiZ>̼ߨʻXtd0<UFcKv$w~ 󾥮+{+C@j^03a8 "ρ_o_lkU%4,5݇}=Gu{'A@޷n5{ltУ= odF: 9T/9w@*qi4BtY*5 oɞ.|LG[ў0Trq?&ųRLX~^/f9y7ϊe((T@\@S~vZh=B} ky[rX h"GL).3`s`2ƅ@50 I#iIx }O333iD74#G~*a? HŎqn>=:ҧ hxVmVjnwcO[ܵkj"4&꟝;GQam ˢJ`41 hi4),vR0m=CςV*&i3p { HGx4*!C) 6D(o#QmP+8wՕ q@===y]  X]/g&~ŁV6a3<ў𐕴}P(ZIF-L8'ٝЪN@ƾZ h:nls}&?A-RL&Gr75M)Wo8ۀ 1tlR/L:3 H4#5mh`mDw?%JҥKF1l T%tY]`8K\O#<;VǶ ЎY^- R>b=&t91dZ pz-:~dOjpʀ[Jb-o7ۖݔF @qa3j[{NC>8[ yXQZ{'(B%rtk| Kԯ^ayP1ɧOAwE|>yU>y_B dB^Džb-m{2/8 %x 0;k@])[r|0"D+7uenJ՜C%ju6}tPx̨ :o3PbhZf`loɓi$9{V+`z. J]?XհVU4M 9cNŒvK%x޷Da3իW[PҏX- ٟȏ߃mm;;' m\R<]<~{ `f.'"tpEv,¢ƖgX.{%dm{3>WX 1cXukPniݿֶWG (<1wqϫQ4ְJ.ٍ^$#!gȑ!ZyEƮ29bpeuL Ah1 F,&4ٌj6㮞2T LMMS'zj~y:MpL3,0U+g"CbI1 &M$_#y rfc  b"?JS.luo Sm[S[/@aG4? ,_KS H{"cٯYG>զo ]ފ JS`E6b 膃 Phn{ߝd]|_.FჀ"<b@$6M8Rf~9 JuUWRX4R=gϒ{?@u= WPǶ-?eG}ι9S黗2'ØIJ=HLcn:TO><h,agP ro$i_v|]̋ɉz reM>=ϮiaȆH?R ز @.$-t8u|eU(桃?a)rb?LӿTx\%@ʞP<$y1 EE!8/0A5Th&P; ]3Il4 b N@#FwWc#jɡh- *>mm*S! ]mSNRHS':RL F1㖑0_;\-} B?&P s B#gP]`Pb @:\5;RA ,ܑP#jO>,OICn ̌Pڼ#KAsD6<4`/Z_j)p&i?iHEZ*K3DZZ_e?{Toĩ|qh)61>8qρ l:/%0d  _J2L{}̊#h,5i',yzʸ~`[0gaZFNڗ I݇SMX!YoʤWͤj,y߂F J ``yV$.^(؟|UP"ݻQTϖOeI?'OQcE4=}>tqQнߪp$[2նP}a!sPE@: A@i,(,EDb!ٺ A4%whc|* "U]p@mO&uw63}D<kf/g /]0K]Іŋ9C` !Tw?Z[4>L/.0 @(1֓';ڻȥ?L3ag;ԏ_'k, ΁(.0@R\vIEۑoG ;:'ɑjHv6§W > 8˖8"QRAk?CZ_18#!ІJ>@4<99(yAZ @˫CR?'YWG~ȷT)=!ܼ)_ާBD,#aaab+fHUv@\s,=Gx?=0΁0m..0xTRA666b.bW?f `O?w-ֳļ6haϔ`H شG>r&>?jn=@I?ڢ4C>9tTm0T 9rիo[Gb2 P_L;b6c$%i o%[ Xż P`|2m-J9k38cgɠo N @<=%AZ8 8ǽg>E1XmޜT50@?U&?,4a>\9ާӯBziY]`Pv/@ZHgYi ١o &Hͪ,8!?vfFw.Yf  C KUjo a00coC~,)&Sx<a1_2( +knol޺| l)"(Hv1 رcG,<R:@]N/IA,UPE1)= ul _m7C"zG=]8 $ d; `wp9vn%' o6ٳ?@ퟌT74 xVԚ33=p`/!33#vA߃ywةF!@рF^]0x}#sgXg8;Óaww=pN1|?ԇYfwc̾ و; 04!/F!Fm2Bc3ZObl N=hwC_~H p`(d84!m欥&]((PJij4#0==qGu,A zDV #ޥtyM/㱿cI?7nܘ"K-gG?&fGv-= N(G1،OЎ- 1߻w,ڷ/$P9 hz> F>ڱR>RZRX ݥ1b~pc?BY4"b ܸX;;;18lˀ]P5y_:(bw '^V]p\OK dȭƩP*꭬}cC,m,;-1˛:*V'@[bC=@@yoh6cvOzB۷`T.J F\Ɍ4m%V- hhߍgK&ꇔXw/lA=(sO黌19쿺ʀ+%xW>A5]x"q%ţ'%7P?Yc^ :z@b03_?a yHQ\I"í' zP(}FrfԀŰ7 1G.A @~Uml HDz* e/xz'<ޓAƤ|/ol?d/@~5´_T7oIDRX: (͉ LU~#TePMmsda8ځmg/rɿHPaa|ȞKK5A*6@&FY o|GʀIAZ~R|?P??PR0a4\2SX2uyf}b ɩD$͹x=ܦG%cON]Pm?Lm~S?|h_Q {3?Mj3 j"{Ϙ OAQ$4k ks42)zH/R? lX`ZFfx`Tm+9^kUJTQ @ZjV on6xOYRP:M;4!ڶ%-\Kea@+1jCb2#ښ r%`٦@ĕs%3gfRMYZr %\.G{B7^>0ݏ|gX{z\E3==E-?dֱS9@zTOjW_A-wh31Kd?R aj$4'OnkZ`_]{Yߒ$K[9 6xnʧ>3b~vs 22, F!>Nnb(1쯥~ԃ% 0?_?)! zXoJI붰Jʔap-@ծǢg jB7a9do` ?^zyhhvx2xJm!]I(ÐڧljS QFkx~r7mt4}\&=5% R *``o7&(蠮EpK`_,8NS/%@]pP J/z ũ& J_S'Nx`\\4::L.G%*F_ cR` *S??: J\?(TW\6[k ]K]`s9?ܿdP XO 1X4j!sS!G>$cq؟Ay/Э8^f??ʏ=5,:}ChIJbJڃ%`U|m[\%(g>IuH{Fhik5zۃϺjM$Ul'g`RS-Z#Kd⚝$D/?d \Yv/FJPD(A /=;G):>(*Ϯ l$*L A#C1QmM_Jl1ШKo Z$ 1xGv/KE@P@ggϏ~* 7! Bj/6*@W![b9|]CUA)n11/6{*Yh@f(c!* ,s۷O or8mg5+쯆|xi 3 Ze[zc؉GS?"_`?"`CJnw 6D0GMoqapXF/˝ۙIk%F"*1~,QI c UHbJa_4 z*L e!#}4Rqp7 K:^ IrT12?Tq 5MJ"$gѥ⚴gw.vy{9NSIQI`met2`1܂N݅ȭu7Dؿ6k Ng>k-^~>b~*nՄ _ 쏯@IpA@.S/!S/jWf;ڿF`iC׍`b?OƯӭ`H/U,gע\5㮀 <:?L2[z+?]~_g7=oPdo *~C7S?LM`f~Ѫ)3u{T̺1:IoT1F (p? Dm3B]A`(@#Y=huO:GTOBbb?'!3o8{Cc'4N2MCz&ZG{8‚ ={V oO@ZzSf XɔnaW U$p*%_)z`HmJ-ʀuSwdT*+J∐/1㌒ԔbT1_ nqǦ~@ XTT:@[ȗCٟy͕C$bc 5kO+@?|##ڗӧLS\e/6+-Z®81XCv(Cբp9X0쏃;|!-`귀r @po`ɷ௿/~2"IbTf'(b;XХk٩L5~mEo?HL^"F0GP%3. yH>_xfGFY%қN3 r@F{Wo)1q{Vv9wen{n!%yec_F p~1]I!f~JiR®ą[(RzQ w1c;@bM; !)$)sHs?5[ gy `f P~qArciiܑbr֦<Q/Vt(Lz *9Zm*'\J[H_z)uf r_~,KSe1(JTjULJP*N+@Pפ`Cb{x>ǡO5k* r~ ڐ%AQ(CByl>,}0Šg rI8.1gߎO :"`eEsVBѱs琣%uD&S J HDc (dSMG n.MT͟S+K_&D]`p)o}}C/%ܒ S?A@{z 2 H%Yl׊M0znOq]d@5cdpAjb([g6+`N)_ Da3yd_R6V޽{nʀ>~~=.e(#+Ш[Ƣ_&{$RݻO"B u$~Ht Ź,l' @Arᩦf3"BӎUR$gU,9OW II\_$iR*Izh$wyP *ѩ] Ŷ6ZH.CJ͆4PLAS9Igp?! QV8"_b e'1b 2HEL_vXnr 82h\?O#B4 3HNP 1Ue)yRA@Bj.iV6[IHʭZ" S< =f󮀅OYvzf|>*D5$j@®Xm[3n1gVeM{eYr+T]tع៏z(y.P N^tg1pÿuWspUւ +06vo]$PʏX .\r 2|hzؖ6'!.NSO5u0ρ3t($+ݙ!=̠.OBvB;0TP( f9=rckJ+YW{P{XT^Zoj_TPjlQ!t 1N[?K0[[!=̠.sBit`R'U=;g/Pqh5+NպbW1a"=_¤v` |ȸH?S {ů L pjlBXy{WB9xfd5'$ ş={'2@ ["wBSB9x>1"i@3VB8")̘MȰ@shD]fc" ="ь@L:;A{*Ψ[B{,Ϊ lL:{EC{E1ίTVf@slG Ss[PPЊl +5.,(lqH`Ø8 0bEG{EA8QLᘲE)@) ကcWK6) ,%H. #۔*MUrA0 1;FB{O.RW 6*A(`G1#P6XV\F``pF(,eQ.#08f# (`GXb3F`ʆ @j0#,@#0eCl5aFG،`!P0# #Pl0@`([ryFpD(6cFlF<#8"1#P6XV\F``pF(,eQ.#08f# (`GXb3F`ʆ @j0#,@#0eCl5aFG،`!P0# #Pl0@`([ryFpD(6cFlF<#8"oG>ODIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/transform-insert-expected.png0000644000175000017500000002033511642654340030442 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݽ$gV]ˑ S"@hE<-"B !ڿJD  !$#$"S-jN}: 9yw<~ |Re @> @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PT@  Em{E@k @@QPt&@ PTӢ}k@1?+4_PC#m@?z.X@<{ |vdE!.2e @h8Z-07E \?rz'p?A$mP08g[ھGm8>:%,;]{?ږ4Sc7@u\H^Ro_m)#HMkH!pψ Hv"fg\@2'"Ywk)k@SM4y~ܶ~n% 4/!pn#m~^M _$.% ]X-J 3RԇѻCPIsa0 Q /,<'W,+ cwF66 ^#^q.Yvc+xE/'% $K?ˏwO/ҲOW[I3/" .2Be,?CO3˗/maec1XOM t:t& ^aܣ8Zspc[@ԲzU1[@-\r~d/?[;=Gi{w߿*'A|1~fȍo (a]twJ  %AmAƮ[uWm! [y K2C)`(`3ޒ =gs+w8R}z_ZŜ( /=>ߏ}cn/?Dp]B1p84ddVy8Ox~8ľ|h{c/ ^sU1* y@ ,u/Q`,OtM+ b=6%8{O0t>З#o, 6l~Lgq76^t`ˍn-^& $qEw6^ ohgGU&4mwh:, n!Iпl nM eD_kݣ+ڜH qө:PoTƪ6|q 4WYqDnOe>۝@xzO FH!D.< G{i+uG _wR%skfUn̫<|_-YqXơ,? w[-){WءN8Yw#=c|;.`.9R33;jѸ쀫L o:}If#u\{0 zrnQ7|oi@;I0gᗏ˯>yҫ^) 8~-_~vqhFqE <'ś{^;W>]ePwHx-q=ey;<Ȁp^-$޿{]߮ퟭ^nnrй]q 9] ME]e@gc#uc4OeUfz@;.Q7wtq=)Ddqg./}[vۑtkBT[<w={|ǢYӡnoO,|4_|POnIܸ@h{ߥon*bEbZ=v5/%*ZhpǛ"33Ƒb ӴJ`J S8&x}b<  aǽTgJ8lV8M*W: \"3J$H<<8-vO-:i.kV+1-E DpLH{Q717 2_Hi ('6*||n/nݾS @;?ra_?/^hQM`}+ m/hPO eQOkzV(x\; (h/Ҭ6 %p1 MtϊN@/vq4td`G \V`h}2^='[`hk{_=O <?g@wϧtg81U8$jǀ > 9q* <(N ;G$ p+c{2 ˹)g@ h ~|~%C IklGsSM@[V`lxŹ,qi. hɹi5y8p-?qgᵺ/| py̓b`{Sdwk \;Z310w4Ol}11п \N C4h2`j.{@77H0>y[mC10su/*ZΪ10sd4O؞O AM^a'B_nxų~zdk(' $ Fɀ 4ho|w;C`HпՖ{}lIE).gW^*7G <6?Y*s&H37`gѱ{cFҥb xBӂ2#%2iq!J`47k,K蘡8AcmC:calg]٘t_oV!h_DK:=.4Bz" ҀMx!S', Xѓ$р ឭPN$൯^h3_oj/€4L_ܣiԟ}oR{p7 ,gÎ܇=O{ثzƕl0S q45OQ"A@ڜ^` .u,*sY"siFp*gC.|o|eŷo}k_"@AK>~%Wy?. PRZ<;~~7Ks\d @nu}|0bW:z糗᫋O3bISJ!8` tz_:9~Jv} ]W(MQsЖ`;} Zoii {?|f>~QЯ>So~쏩ЀRcCÜ'hA0J7q`ڶ+9?f(IoV,zF r"OifY| 7 EKyۆ?3#omll윒sU>g|Zc`!ksԸyzzSx~v7,X y(uM0otC`(8ROtAFOgcgF?:βu6PtG!onj~:%re p{]>p R.on,hZgw @?俁 @/qW;ݽ'wU@69p^h}ҝ0 @zS $?1~&Ϳtl5$tbd%[ʀOJ xUj\!ti nU691@@Z4C7X jbĪ^PeO:=ݬT"#."C;2p{`}QkkP> PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(QM IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/render-2d-tests-expected.png0000644000175000017500000001673611676112355030063 0ustar chrysnchrysnPNG  IHDR{CIDATx;,Y3q0 D`9!!b8!/XD9%$~ #Ȇ,n` sOUU]U>^]U]Ƌ=?x3d @ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@r'֯x7^x/@}5B ~ \C`HaaZ3iC 88TɼCS Xߝ]<:C#;/Az扷C`Hzx3:#v^z@ }M͒}JirI X__@oY pLCC2֗ٺ󙀡q0lnT a0V yӤ$6 Ao/`o5י`.?T߬ Y9n&xKA,-| #usZ EXW0Xy"vܼ_v; k\PswV}6CUM?Ll_ч +Wq,``ioՏFדH,[ɭ Jkcq>)~z5IO5+oaO`߭4ݿ?0uggO, vgsw溛 !@U8{C}GO|/{#w9;%?s^ Kj^ jZA n?)]8$.˷l߿^?Um}; M>mԧ8O 5}S*4, wo(~YC9^?_ݜgNNaл%^K ]^u)G_o=/}2Xk uoL#_,؃o} }0hAw'{,|>=:C|gzl6xXӟm/g& 4ap OA6pobs$"ItD\ߖ?tG7 _Ǻs%o}=q$ƇsnA~K=6K1**@0 ChWjo~eZD߽oO`B{Q _B6 {vi'=W9gb`R C6GqN oӡ[#ğՍinGe 4%wy0mUg>'؃eb``OێU|/]7KDw?ls&mpS >`nVu?;ݰ˟ 2Y] Пqo ~!pp!`0LC4d 3-(I{[[9+ 蚬vZhI7oc?5M+'G;9 >z=OǫMa0;Ǜݦ \E*뿅{~ɷ;]@K?7G_h7PK@1^ln/ G]ڰwn;'8?:Q8 @MoEC:1Юgg>KY';VjhTj8&@ʣ}10EvQ^7'0&}T Pijx'uhl8ۊVcBë)[l>\G@ &Vd}ms&`nѬ]o 3nέ@8a q L~x|T;* c;.2ڂ#-A7m@,n wz.`{{u1+SIu@bԮdÄ?m{Iy~ 8[F䭰hW Lޤ e@ᓀ?mw-ڧvUb#?{m m[\" B1mb`..L=>oku{|1Чr5lS7[@[}*GX3't񨣿8V5 pWF{ G 210aHdO n%V'}WIZ{rFshӾ}*Ӛ6[hkӾ20,gV,)ڊ#_+}J> ljGmb񯞾;>9Y415,_L76#1G`: e@#Qd@t\`?랓\UokωO <_.NffbVtd@cÐH0ZFumP=ƃY1Jb`啳Xptj\?W}UoJp)60 TN$'F9BF`aݱI."0QJ4G0Ub<&`OsJYcK`?nB0$3r] s:F)Fq:Y >QF(' bw/@r FuY0D X#pSI4 `.ɾМIY#$Pfџ\nsl_Y WCF̢`Q@!X@k.i5 wGl1ϬG诤`F}VFV+zYV\+b  >Z ɬ.ik kj,0knѿ2؏cŖ?_ ,o0`n"@u02˸FS,;LnѿҷK w10;%`%}&|xϥ3 3bnu+c+s#F#zU]+jȇ# `m :2y2_;37zGsr@PN/`7`7bඑ3F#yg߮<v} .Vo78V?/|˓@yO>;iQ(H,\ !/@H=1U?`' 5V9bPFN*C2^nD!'F)Tfccw8\K{ 2{Y@xUx%q\ $q1p60Oz@/Kp ʻ 1˶=3ٷmZl㾏Oˀ$l_oˡ~T. b4OgWߢJPTژK Tג2lnJUU< OaWӊ?q6{t1ڹj1b`U3W'? 7xO`! ,a}ѿ?6|b`>NFn# zP,=$ { w19iMt?ED8% bz:进ʉ (hP@ gO/ª`UnL F@ ]{0{ z{s' [zo u`;MG3C)ok9؎W9`_:12`h{*K[ŀ{x FvQGm ;yY/jwFv}?m/P} o"O+;^ TF}#@51`o<aB7X_`0oO\H@, FM U}Ā?ܱPA<ŀxsܡZPmk׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATx=,G!ց Q``b &xx%pE77z~2;8˩{!͏?? 'UL @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ Tк=}z7'p7?Ñ@fSODE?MX:mx'!K[ONq!1e[?/J|3w-z6 qzuכ ~ޤ Hj;v}fkCr_{]MR `-yH{%uD®QO§<+)V`]j׿Q@'RFhv &бT9gg _W@*6:l9X< ?\ʃƿs]Fy0[CM&˃d݄U`S py0FG yi[ p@yQXϨ @~5 @s;DGG`>O^AtԼ6 ln^wߛ  )w·b`n'i;ƸWaU/[ Kn{/?XOq[ uhIV8x7<$ڣC#.po@{}G'@{s@\FzR'[M|"ooxjW o 0@WvE,S>tvuKFv71!y;\.$i p@t:.j༑dn |Xt?;kv^ZMqho*z{E \`Z6N?j'Г)@O?ޅ@諿lh.Ll9VS9Zb'"0o-?Zb GPo7YU#L ̺[ VQi{7U&9 $ֲy'&T=rVS=Zb`ϟ&0@o-VT \M1)Zb`#0@o- VGkBoЪ[,Dɀ˙?vu_Ok9=>8`J11O E5b`k <,`?Lws1ZuXub1pK WqXz1pK|.`w&K7K*omuJr>%.Fxro8~_,Hok2 ]y\ %7/bXoOY?;3=^!γ+Y<b{ԉV-{.##W=Kb13,` q`׋=aooM/6a&b`T<@?yG$]P`Wލn.6t`[x,i++S#Nab <P[ {xϧv|1O XOq[GVR\nᏝYZ -ϝo'rz0ôFX!`R0f>yk1 o'`4U`. ]om0W??T~_ ,n3`@!qAK1UZ&XL[刁[B9߷sz}RpMfs10u{og$ @4zL12?wV'֊MwY, |/HV|=ݪ"S`%P Q8Byg!bٷsZ>S2e}oq_^տˡ~V.b\E1ݽ%/dwٖa^J Ӫ.^T tцחi/"ni.N}*TSbܯ'`^؝V!qq-ߥ`1 MhEv;YrقX@qxVӄnpEjXЃA8K@ z7 7QU1pV<׭_q/$r{؋i~? =1`{ ~{3ŀ?HVc T9;sm_L6c#פo{%ȀktG*Kԭu'p 0kgkYڡbl!_"o(Y'e X 7Z! V`|nb?iB78^o'$ vuz¡Pn^o;v :hWx^`o;t+ m[/i X uo <VmdWL! h"C1`WH' J߸ |/. /WJ\ _ V"X_^ϯX5|=Z=VGVG"{}V%/ʉmV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  P@5qBfE @ j ͊$@@ "@DI* D6+U@T'mV$&N ! "ڬHTPM @ B@DY8!@@h"  PB"eyIENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/polyhedron-tests-expected.png0000644000175000017500000002425711641217140030447 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATxݱU`@E" BR>t44(C(x@ Dkm/c{fG}mx~>ɟo|~ @@>_W  @: @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @@R&@ T@$m  $IlkI@+ @n߻N@S plp X pR`o<$ ׽8CH %g2E wv)f)jnHB̑@?! @R XW߼N@Z?-N%{A+G/awR= v`2 Up(PrOBT#ОrU]\ @/{oeIܩ\xw[m/ ^: |*p['mNDOHܳVqv |;,Ӓ<tXeX`}?t:,wRˀR#>x'niPZt-C@Y ďyo=PgdoeN?2l[_oi{gt\㰷[_:v>'{; ç{k'K7/:MƖBۻf>Чm6ޏ~Y[9#yyr6"x?WR0װ@Uhr27o=e ݐ-6˰x8o8;qkx}5;3^ɍtJ^맭Z}#ˀgM;ws=oWG"(2?etL2pPӡj<y-QF@\61|~K~7en;kN/Xfćy[>~^`Mlq޹o?r_L/XEa2(˜ mUem׍ ̦\ӻӰ?dNԁlg쌿$܆wvm?޷\Wrz]%DwLlB )yM$^n1`rzA';%NlxЏGk m8:,6=3UooQ7fQ29fhgAۙN~C@pF/g;,;Gz̍s/-Rk̙*g A04\`Ysk!`yg,'~>Yȥs;Q- |HOns}a8_.܂ W?Wp lq.p~񚟃o+o(܂ ÊW?H-7)/j!b7mV@<_ٗEͻ^ϛX){]oyq椥>{C@d/UE8Ӈam#27cjoS?;\W\E늹_\A oyUĻ?%}jb{KTc=|Z24q?E?VM[P0R^4f_*NnpǗ[F}OOY"<1_s,ן^- jjZWK=low=iٹD.!`8azb,7K>a+*2o8Y MNQ2`4i3pMGv{{[7 _vp?].n7J2Cfi[U/௉Zf UT:t]p;냻s;&pS{Mv!3@̯ʀi@mCo|?>w_ƺμ?FثdҞ(?]=.#[k;3 n˺"s;/yaw'x|XuĖS v[\la8B6%ۜvy j/6'V|o?/R;y=&f2Hoit[ޱib#v)xr_1B<7H8 Gl.ylXُ^>u95[ ǺZd &v]z >] ݿ>G.ʀOŎŦyǵOK[YaݿN\mq?r[<eq;8#S&oT6`gV¸gd[ 8=c[OaC׸˶hηNyyɀ:K 찕ԱRǥ^@psf4 (rwp?%է?~E9:3ۨ ^K;.e;†[zTWU2_JZfRhzM!vڿr]Po`ޞ7^ J}@իa_}fSx=wlw-+;(kT֯زSwWiC@-fMlCdlWV8P X?ˊ], ND~aGZ>vj-J?|_.t&{%{n%8\{| -o?}z2 .1>1>gv=z%/Z6"|ڼ/-󞱪]+ ~$x:DmX:ݿ]se%p-"Լ,mvb5Sl==g)H֡K-xyʀ֋-5W];>N`-[Y/m)V޿h+U[Ǫ^Oݐve[7\杗@]wl^9m7Eu'ڰ\l?>zgG|e ™ErTGh/Rgo.9ރt?mt_gg>~4l,ǗlOx#|96cZoԾk+6ߜ?' G?l~oWίvp|^5clMwP\=lRdpdLߤTR,3ٴ[g#ïV~>-.^ uVԧtB{˿}ٽ@rfcVu7 Cטacfp UZ/<2fk,{YN׵7M>g@A52 IU6 gX-#v솫:r?nwޡV?37mE@p]w=?ҼG^H9W9>#;GxŅ<}^`[Xٙ8вKs> Ճ؇;$jvXveԋj?HϞx&&(ӂ× g> s>ß:FS@ɎwoKرaj{[5/ pbmpl~ng ~|!`mK`S0(z"v*v,ͽ͕lu 2\ß.OL?+8~UC05]L`S@l0\̥g:1p=0[Wˤ\/ |i bzO_O?q=/Zœfnn'/oe;><{.{G;6 xh` h)hP@4\ԡJpQuK " "JOqsZjo7k Ц'/uu܄7gML$C(%`/%8M xh}R"YJqZ^= v&  a:R@m(yv]\gmwYDg(P@t1E _%,1i?ͿZdG3O3~(`azO~_o_nNذ'9vUaQHlaz;\JW-ã kgJ0( F/k5u׽̮vCW̯}*c xB9G[QU x8zn.EW< 3RP661&oY<d}蘷 zdm`uqx *@%1`t}VE/(9\@jPK'Svju# i嵅k{ЗsUMRxHE^(`/)") `Ȁ \G_w)PQp@Ĵ(G [Āݿ+eh{u&~um| )`ףݿƙIZOi[_Y~HVlYpV? ,c#)N:g? P$<ݟ.f7< "zuT= (ezuT=  aM@Q]pIDAT @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCBF@oU ezuT=  aM@Q @ ( P @7[GCH_IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/cube-tests-expected.png0000644000175000017500000001743511640436733027214 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoExIDATxݽXО!O@ )o140HddLH=r׏>| !eWy}[? |W  @'` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +  @ T@6^f &@0W6 @@m  B@hM` * Bl3@Pxe @@ +?C@@:mV |Ov" Ww>}% ^OɃ OX6vY^HxKy컪8gџPLD=%ڭk._ߖ-uy貭^EHL詛jR-HxKŮ*^O+ V::H^ }|VWU]':'{,G4I$5F@ `?|w=^nlfoWFhxs^'sUI?Uu&  ]9;z+D "ypr*+uw.+Jw% nW:Qע,|wÏ^'*u]Q‡ Յ Z,k W m0K5jؾxj xw P׹O}wuɃ;=Z< viqş==,u F=g X=>L}Gݫ]]GX%= L}9+DQH=z]aTişn[( moIT+ꖬ?+ Hm׌\M5a?s̺`,# unϝj^\ +Se;p&@|85{\8 V3gd0.W5jb*PpH/xՋ_R\܀%om$%yÙ`e 氒__1P^MX(Mŋ,K@M|wPN^`7 ݺ_W6^@)ҽW( 5K}߮:fHf@ycIP(8 F-8W%P*w6As-;g@kcU Xmy\6^ҥv`#{oR$(nCSGtݺ_&Y6 |7A]u BP$Ahh,W ]KlVK7@kKuvK`z&6=O[9nݶXVYg@h*U1X]sVUX)@Ai*WB<6Z|./ג# rTºXLpkr^ ^t (WQؾFpnoҢ vN) Ry6v\ wwl늢 vN2 ߾7Ryٞ6ZCnҺR; [ K8hfN ]TX@a}{#8siO34[ oy;;۾d]5}cKୀxK/J {kEVy@x'% MyL?5ɇ#@ET҈N.$w2%ʨF@֊_cX7^ W2#P`xT`G߫}OY$@N +:^:<@Ԣ?nmٖc:'Yε~2zlb?/_tߵkX![tqjB1`ѯ>w= nL}!)wOBX4_zgp<,<=~ç? ZOGN=V9]cN"@`xvZ X_) }!zOK_tE.8^@,3^U-/ M@`Mc|_uM!@ww,4L`!#;8vvZ{݌|+GX,`_L`/(:w. .Vtpx>}>eSbo].^@܋xLୀu-MEV!`ݯ .b?e+Ǣwҿ %p-gkh-t5z8b^Z[mk fC0ޢdzO~CGyOflމGG+v l3G@QJ=upj:#Ni_^o/uQ 6?_m$=- ݺ7 I?7ܴ&6nP4 PN cG-IhbO;^yug!0! &pz hgEUpc$a{)ê_`s ?DX- V9q=HĞEo;os y|.rXlE}{zK$(a0}g lNOJ=رA`V]M|B\w%2;*/HPEB&P+ 6*"M|53AZwW, >= +`9@T'oj\-$-ϭ鿕(6B6Xr%@pQ[Yo<18Wo(\@r$Ml "! `>7 4$ 5Vzou@8T`/na`X}n\WH~EXKqaJ6NgPb'a㿺oݭmhDL^ 7Ej:ě9/N$xWk"`@g|{N" 7Njc a|,e$u;c { tQw45=ߚOH|y 5Se/nZ ݲbZ4 W?Xqi? k)Qp{,޾; u# h]KtF{Қ Sqc)dF';^vJ_F'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H + b[p@Xz . '@ +t>'@ V@Ķ^  P? '@ ]@O W8 }O@m H~b@lN@H +_꠲IENDB`openscad-2013.01+dfsg.orig/tests/regression/opencsgtest/ifelse-tests-expected.png0000644000175000017500000002266211640436733027543 0ustar chrysnchrysnPNG  IHDR{CiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx IDATx?u`HUtp|#K?MTP.]ڸuHD#%w/$g<rw93ϙ=}U%[1( $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I o l{I@[6=@ i- @@RM` @ HZx&@ T@$-e @@H* ޲  $I ot|?̯fLqſi83eE&] zgn6)A^G!Q(+tNt :ڪ@De5Pߝo+q vEjsC|/ vo|_$ )mO6mJi!+ʃ:_W*_AϽ:@9w &U| V'c\j;'=Bٗeνp.ن=[!p]/{6Kq>^{ܝN2oێ@0nϼ}#{&~zՎϵ:*sP炡w i׷#s|7.ua S]=bc6g\5*wApdEcUڴQU9X?=' 1LyӬ.>_y}JAv uqG:ZiZ[[$®+h+C@y3 +k1Zl+}Apgw:.T\k}WGU] vgeY,~N`ˎ֬yOt/1&OO}~:_{7j_}$8G`^O4ZӘ˯ 9C̿VX݁xv$A} }snlm^ҕ=`~Mm[le2(k;\=]apd8sy>]C{ ӹmk|O'f{?_ȹs 7 Pvi_1 .iSKGM]nW vÙ~>zF6ݿ,a>踆gyV*K҃6QX ˔Fawwb'A4,G3yy}8J_}6J_JVrK G@*ơjj +ByI,膾|&_gS>ܵ89Ykg5tWR1˭#&k4U&;EU\8mm^;}} ` 3kϥ#@R5h_-[,v|u'Ug﹵~Tχs,jjֶ7%ff rK:|ӳXf1PE1ЬVB_o3eVԩf!Gf@*2զ_.ջ5KڳNiXi0h6alI?_ߘJ}l$hR!IP&w]lh ' 6N,ʴ7ھ7힯KPܭZھjv?t,sz1$۬Qz~˵A_qglûkW4-8k\&=N;޲/'W4YOZV 4N[oub>[&pʸf>Bߦ?_Ic4}՟'A #z[[퇣aLOi%IPnyuuU@l\[S5})\O[/ WI s{dGf? hkT7h/P U/CܗCiWﮭP͎ *^\p>]\YމD{#Z -J7IV{NZ V|oПRjC7Hw<BU,%گگNi |J\|cyM=[]6]׆'ndMrac/J$G'G_KG8珽Oԯ7؃`)Ϸ՗uWXѼ!݅ҭWzK4 hpGjE\h}H"P[RMwezž hrtuEIe-w[v &66;@)/v-M^LIkȗU*o7ш1з}A0U/tĦLsߛB_xlo[گXƇ z_:u{.fud-tʝChX}_ ,ߝhwr_*"5T1Os^u7H crώ4ӨjS wyU[н?p<}_|wj-}14ԑ_ME&dͫ`uV'KH%mhJyU Y o#SUqjkwf U=dЫ~ 4e{BoA 8h3q_o7E8rצj뭡U3Nw3r并@zRrxk?q}#TjT.U/ Q6mrl| y>}igHo }j:篈9{N~Gi:DȖz,D5i;`Zg;πL})p TA?&?0unvPfv˟=j1,h4{m i8-{NQ(0=~Ďsm3ME)}#uV!0Y:N^7s{owxY!&I(|aFs)eR*$M{ )]2g'Sfv89&.1v`wV)PGi嗸O黿v $eF ]de c Nx9M)XȅPfszʖPh1P*p5Tjm"pmLg@rJL3L_[[@Ouie ]+M5*2&qlq뾃bMTEyӞW}tƟ4{5%\(>ըL$0 3}{h9ʧaJ̾WcA],p^hK9=Mɲ˻92o}N%;"[gsQm`eCJ/1{Mq˺ר5/i L[]n7=_ܵ?l髴bVW?&X} I_14_?~ò^?1* ji* jh˃{^.P_x=1 JcUVJ so&hSBwrݪ < c@?o9cTl1'}Z6 g1;oru@7sZ~UwV}b=Lw y~'YkgI:!`({:9 0o@oXUi+ [-JD2QHQ E%z)܄_/ad }c@?Y6NH~A@lǀnZ55@!)lKK/pS|8zuM@WU~pf iJi@u'/Aw :'loǀ߽v&p Wnp/=g5o󾐾`_x:\\|A/X/K}iУiK WcO1w7.C@aӗ3 @`pQ`pv'@@PYq*ʯt3OsVgpsߌ<}s'Y@t  @8W@[;3'@!pσ  0vfNC/Zjng  2~w~o8PVT2p"HX/p*p!}T@:evHʀk:):-yor=cWw"QWuL/* ȿ##pM (T Z{'#e0'nZ`\e_W }# !N٭>qCٺ^,\UZ3"p+:x?~֩eЯ~f!w|2g+4}?N̈́$<ʰ2 8h7@(#_qT S!JSLRUwsF ;ݕ@?Pn4D|7)7_oO`vl,ѻfu9  YYqiypV<$@ @P\ [b@iB$e%?o;&H`/vZZ)2eeNLh-n<A q4~o: 0OwrG  O) "t7etK`# @%|d O`&@x hü=[j7 Ru@}*6 /KLjcdz) 4y;gꟆ/? pk5KV{L0wT@{{ KP=Kw!@@|)N3dP}ٖu@vv^ $Kfu+ $㥀v66  K6u7o2kç2ֿ2L^T)ϸ]$@X>?BF@VS_ hkĎ _@< :L@?7u gR@LK} N@l.K3; N@)Roc=pK@D *Dj0! @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%)sIDAT-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-A `QL-@ ec @ XS"@@ B( Ŕ B@P6 E1%-Ab3 `IENDB`openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/0000755000175000017500000000000012110740367022617 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/csgtermtest/dxf_rotate_extrude-expected.txt0000644000175000017500000000003011640436733031055 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/glide-expected.txt0000644000175000017500000000003011640436733026242 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/allmodules-expected.txt0000644000175000017500000000013411640436733027324 0ustar chrysnchrysn((((((cube23 + sphere24) + cylinder25) + polyhedron26) + square27) + circle28) + polygon29) openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/circle-expected.txt0000644000175000017500000000001011641442556026416 0ustar chrysnchrysncircle2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/surface-expected.txt0000644000175000017500000000003011640436733026606 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/assign-expected.txt0000644000175000017500000000003011640436733026442 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/sphere-expected.txt0000644000175000017500000000001011640436733026442 0ustar chrysnchrysnsphere2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/intersection-expected.txt0000644000175000017500000000003011640436733027664 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/render-expected.txt0000644000175000017500000000003011640436733026435 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/group-expected.txt0000644000175000017500000000003011640436733026312 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/subdiv-expected.txt0000644000175000017500000000003011640436733026452 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/minkowski-expected.txt0000644000175000017500000000003011640436733027171 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/dxf_linear_extrude-expected.txt0000644000175000017500000000003011640436733031031 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/color-expected.txt0000644000175000017500000000003011640436733026274 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/child-expected.txt0000644000175000017500000000003011640436733026241 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/polyhedron-expected.txt0000644000175000017500000000001411641214650027334 0ustar chrysnchrysnpolyhedron2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/rotate-expected.txt0000644000175000017500000000003011640436733026454 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/import_stl-expected.txt0000644000175000017500000000003011640436733027352 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/import-expected.txt0000644000175000017500000000003011640436733026470 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/if-expected.txt0000644000175000017500000000003011640436733025554 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/polygon-expected.txt0000644000175000017500000000001111640436733026644 0ustar chrysnchrysnpolygon2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/for-expected.txt0000644000175000017500000000003011640436733025744 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/scale-expected.txt0000644000175000017500000000003011640436733026245 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/cylinder-expected.txt0000644000175000017500000000001211640436733026767 0ustar chrysnchrysncylinder2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/cube-expected.txt0000644000175000017500000000000611640436733026077 0ustar chrysnchrysncube2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/echo-expected.txt0000644000175000017500000000003011640436733026074 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/linear_extrude-expected.txt0000644000175000017500000000003011640436733030170 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/projection-expected.txt0000644000175000017500000000003011640436733027332 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/multmatrix-expected.txt0000644000175000017500000000003011640436733027364 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/hull-expected.txt0000644000175000017500000000003011640436733026122 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/square-expected.txt0000644000175000017500000000001011640436733026454 0ustar chrysnchrysnsquare2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/intersection_for-expected.txt0000644000175000017500000000003011640436733030532 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/union-expected.txt0000644000175000017500000000003011640436733026306 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/import_off-expected.txt0000644000175000017500000000003011640436733027322 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/allfunctions-expected.txt0000644000175000017500000000003011640436733027657 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/translate-expected.txt0000644000175000017500000000003011640436733027153 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/difference-expected.txt0000644000175000017500000000003011640436733027250 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/import_dxf-expected.txt0000644000175000017500000000001011640436733027327 0ustar chrysnchrysnimport2 openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/mirror-expected.txt0000644000175000017500000000003011640436733026470 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtermtest/rotate_extrude-expected.txt0000644000175000017500000000003011640436733030214 0ustar chrysnchrysnNo top-level CSG object openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/0000755000175000017500000000000012110740367022634 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/csgtexttest/null-polygons-expected.txt0000644000175000017500000000004611640436733030024 0ustar chrysnchrysngroup1(linear_extrude+linear_extrude) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/dxf_rotate_extrude-expected.txt0000644000175000017500000000002711640436733031100 0ustar chrysnchrysngroup1(rotate_extrude) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/glide-expected.txt0000644000175000017500000000001711640436733026264 0ustar chrysnchrysngroup1(glide2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/allmodules-expected.txt0000644000175000017500000000055211664172104027340 0ustar chrysnchrysngroup1(minkowski2+glide3+subdiv4+hull5+group6+group6+group6+intersection9+group6+union11+difference12+intersection9+linear_extrude+linear_extrude+rotate_extrude+rotate_extrude+import+import+import+import+group6+cube+sphere+cylinder+polyhedron+square+circle+polygon+projection+render31+surface+transform33+transform33+transform35+transform33+transform33+color38) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/circle-expected.txt0000644000175000017500000000001711641442556026442 0ustar chrysnchrysngroup1(circle) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/surface-expected.txt0000644000175000017500000000002011640436733026622 0ustar chrysnchrysngroup1(surface) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/assign-expected.txt0000644000175000017500000000001711640436733026464 0ustar chrysnchrysngroup1(group2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/sphere-expected.txt0000644000175000017500000000001711640436733026466 0ustar chrysnchrysngroup1(sphere) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/intersection-expected.txt0000644000175000017500000000002611640436733027706 0ustar chrysnchrysngroup1(intersection2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/sphere-tests-expected.txt0000644000175000017500000000011011640436733027620 0ustar chrysnchrysngroup1(sphere+transform3(sphere)+transform5(sphere)+transform7(sphere)) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/render-expected.txt0000644000175000017500000000002011640436733026451 0ustar chrysnchrysngroup1(render2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/group-expected.txt0000644000175000017500000000001711640436733026334 0ustar chrysnchrysngroup1(group2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/subdiv-expected.txt0000644000175000017500000000002011640436733026466 0ustar chrysnchrysngroup1(subdiv2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/minkowski-expected.txt0000644000175000017500000000002311640436733027210 0ustar chrysnchrysngroup1(minkowski2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/dxf_linear_extrude-expected.txt0000644000175000017500000000002711640436733031054 0ustar chrysnchrysngroup1(linear_extrude) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/color-expected.txt0000644000175000017500000000001711640436733026316 0ustar chrysnchrysngroup1(color2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/child-expected.txt0000644000175000017500000000000711640436733026262 0ustar chrysnchrysngroup1 openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/difference-tests-expected.txt0000644000175000017500000000004111640436733030427 0ustar chrysnchrysngroup1(difference2(sphere-cube)) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/polyhedron-expected.txt0000644000175000017500000000002311641214650027351 0ustar chrysnchrysngroup1(polyhedron) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/rotate-expected.txt0000644000175000017500000000002311640436733026473 0ustar chrysnchrysngroup1(transform2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/import_stl-expected.txt0000644000175000017500000000001711640436733027374 0ustar chrysnchrysngroup1(import) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/import-expected.txt0000644000175000017500000000001711640436733026512 0ustar chrysnchrysngroup1(import) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/if-expected.txt0000644000175000017500000000001711640436733025576 0ustar chrysnchrysngroup1(group2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/polygon-expected.txt0000644000175000017500000000002011640436733026661 0ustar chrysnchrysngroup1(polygon) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/for-expected.txt0000644000175000017500000000001711640436733025766 0ustar chrysnchrysngroup1(group2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/scale-expected.txt0000644000175000017500000000002311640436733026264 0ustar chrysnchrysngroup1(transform2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/cylinder-expected.txt0000644000175000017500000000002111640436733027004 0ustar chrysnchrysngroup1(cylinder) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/import_stl-tests-expected.txt0000644000175000017500000000002311640436733030531 0ustar chrysnchrysngroup1(import_stl) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/surface-tests-expected.txt0000644000175000017500000000002011640436733027762 0ustar chrysnchrysngroup1(surface) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/polygon-illegal-winding-expected.txt0000644000175000017500000000002311640436733031730 0ustar chrysnchrysngroup1(polyhedron) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/cube-expected.txt0000644000175000017500000000001511640436733026114 0ustar chrysnchrysngroup1(cube) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/echo-expected.txt0000644000175000017500000000001711640436733026116 0ustar chrysnchrysngroup1(group2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/linear_extrude-expected.txt0000644000175000017500000000002711640436733030213 0ustar chrysnchrysngroup1(linear_extrude) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/projection-expected.txt0000644000175000017500000000002311640436733027351 0ustar chrysnchrysngroup1(projection) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/linear_extrude-tests-expected.txt0000644000175000017500000000024111640436733031351 0ustar chrysnchrysngroup1(linear_extrude+transform4(linear_extrude)+transform7(linear_extrude)+transform10(linear_extrude)+transform13(linear_extrude)+transform16(linear_extrude)) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/multmatrix-expected.txt0000644000175000017500000000002311640436733027403 0ustar chrysnchrysngroup1(transform2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/rotate_extrude-tests-expected.txt0000644000175000017500000000002711640436733031377 0ustar chrysnchrysngroup1(rotate_extrude) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/projection-tests-expected.txt0000644000175000017500000000011611640436733030514 0ustar chrysnchrysngroup1(linear_extrude+transform5(linear_extrude)+transform10(linear_extrude)) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/hull-expected.txt0000644000175000017500000000001611640436733026143 0ustar chrysnchrysngroup1(hull2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/square-expected.txt0000644000175000017500000000001711640436733026500 0ustar chrysnchrysngroup1(square) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/intersection_for-expected.txt0000644000175000017500000000002611664172104030547 0ustar chrysnchrysngroup1(intersection2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/union-expected.txt0000644000175000017500000000001711640436733026330 0ustar chrysnchrysngroup1(union2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/import_off-expected.txt0000644000175000017500000000001711640436733027344 0ustar chrysnchrysngroup1(import) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/allfunctions-expected.txt0000644000175000017500000000000711640436733027700 0ustar chrysnchrysngroup1 openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/translate-expected.txt0000644000175000017500000000002311640436733027172 0ustar chrysnchrysngroup1(transform2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/polyset-reduce-crash-expected.txt0000644000175000017500000000015711640436733031247 0ustar chrysnchrysngroup1(transform2(union3(transform4(polygon+polygon+polygon+polygon+polygon+polygon+polygon+polygon)+circle))) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/difference-expected.txt0000644000175000017500000000002411640436733027270 0ustar chrysnchrysngroup1(difference2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/import_dxf-expected.txt0000644000175000017500000000001711640436733027353 0ustar chrysnchrysngroup1(import) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/intersection-tests-expected.txt0000644000175000017500000000004311640436733031045 0ustar chrysnchrysngroup1(intersection2(sphere*cube)) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/mirror-expected.txt0000644000175000017500000000002311640436733026507 0ustar chrysnchrysngroup1(transform2) openscad-2013.01+dfsg.orig/tests/regression/csgtexttest/rotate_extrude-expected.txt0000644000175000017500000000002711640436733030237 0ustar chrysnchrysngroup1(rotate_extrude) openscad-2013.01+dfsg.orig/tests/regression/echotest/0000755000175000017500000000000012110740367022071 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/echotest/len-tests-expected.txt0000644000175000017500000000007412034314023026337 0ustar chrysnchrysnECHO: 4 ECHO: 4 ECHO: 0 ECHO: 0 ECHO: 2 ECHO: 3 ECHO: undef openscad-2013.01+dfsg.orig/tests/regression/echotest/escape-test-expected.txt0000644000175000017500000000000012034314023026623 0ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/echotest/vector-values-expected.txt0000644000175000017500000000070212034314024027217 0ustar chrysnchrysnECHO: "Testing vector dot product: 14" ECHO: " Bounds check: undef" ECHO: "Testing matrix * vector: [3, 2, 13]" ECHO: " Bounds check: undef" ECHO: "Testing vector * matrix: [9, 8]" ECHO: " Bounds check: undef" ECHO: "Testing id matrix * id matrix: [[1, 0], [0, 1]]" ECHO: "Testing asymmetric matrix * matrix: [[2, 1], [-1, 0]]" ECHO: "Testing alternate asymmetric matrix * matrix: [[1, 0, 1], [0, 1, -1], [1, 1, 0]]" ECHO: " Bounds check: undef" openscad-2013.01+dfsg.orig/tests/regression/echotest/echo-expected.txt0000644000175000017500000000000712034314023025333 0ustar chrysnchrysnECHO: openscad-2013.01+dfsg.orig/tests/regression/echotest/string-test-expected.txt0000644000175000017500000000014312034314024026702 0ustar chrysnchrysnECHO: "The quick brown fox \tjumps \"over\" the lazy dog. The quick brown fox.\nThe \\lazy\\ dog." openscad-2013.01+dfsg.orig/tests/regression/echotest/search-tests-expected.txt0000644000175000017500000000247112034314024027032 0ustar chrysnchrysn search term not found: "q" search term not found: 1000 search term not found: "zzz" search term not found: "zzz" search term not found: 500 search term not found: "" ECHO: "Characters in string (\"a\"): [0]" ECHO: "Characters in string (\"adeq\"): [[0, 5], [3, 8], [4], []]" ECHO: "Default string search (\"abe\"): [0, 1, 8]" ECHO: "Return all matches for string search (\"abe\"): [[0, 4, 9, 10], [1, 5], [8]]" ECHO: "Return up to 2 matches for string search (\"abe\"): [[0, 4], [1, 5], [8]]" ECHO: "Return up to 2 matches for string search; alternate columns (\"aebe\"): [[0, 4], [8], [1, 5], [8]]" ECHO: "Default number search (7): [5]" ECHO: "Return all matches for number search (1): [0, 4, 10]" ECHO: "Return up to 2 matches for number search (1): [0, 4]" ECHO: "Default list number search ([1, 3, 1000]): [0, 1, []]" ECHO: "Default list string search ([\"b\", \"zzz\", \"a\", \"c\", \"apple\", \"dog\"]): [1, [], 4, 2, 9, 3]" ECHO: "Default list mixed search ([\"b\", 4, \"zzz\", \"c\", \"apple\", 500, \"a\", \"\"]): [1, 3, [], 2, 9, [], 4, []]" ECHO: "Return all matches for mixed search ([\"b\", 4, \"zzz\", \"c\", \"apple\", 500, \"a\", \"\"]): [[1, 5], [3], [], [2, 6], [9], [], [4, 10], []]" ECHO: "Return all matches for mixed search; alternate columns ([1, \"zz\", \"dog\", 500, 11]): [[0], [], [3], [], [10]]" openscad-2013.01+dfsg.orig/tests/regression/echotest/inf-tests-expected.txt0000644000175000017500000000034612034314023026337 0ustar chrysnchrysnECHO: inf ECHO: -inf ECHO: nan ECHO: nan ECHO: nan ECHO: nan ECHO: nan ECHO: 90 ECHO: -90 ECHO: 135 ECHO: inf ECHO: inf ECHO: undef ECHO: inf ECHO: inf ECHO: inf ECHO: -inf ECHO: inf ECHO: inf ECHO: 1 ECHO: -1 ECHO: inf ECHO: nan openscad-2013.01+dfsg.orig/tests/regression/echotest/dim-all-expected.txt0000644000175000017500000000131612034314024025741 0ustar chrysnchrysnWARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: linearX = 51.44957554275 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: linearY = 29.13025467434 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: aligned = 60 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: ordinateX = -49.17542445724 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: ordinateY = 30.86974532565 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: radius = 60 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: diameter = 120 WARNING: Unsupported DXF Entity 'LEADER' (1) in "dim-all.dxf". ECHO: arc = 59.03624346792 openscad-2013.01+dfsg.orig/tests/regression/echotest/echo-tests-expected.txt0000644000175000017500000000034112034314023026474 0ustar chrysnchrysnECHO: undef ECHO: "string" ECHO: "stringvar" ECHO: a = 1, b = 2, true, c = false ECHO: [1, "vecstr", 2.34, false] ECHO: [1 : 2 : 10] ECHO: vec = [1, 2, 3] ECHO: range = [0 : 1 : 2] ECHO: "string generated by str()" ECHO: 0.8 openscad-2013.01+dfsg.orig/tests/regression/echotest/recursion-tests-expected.txt0000644000175000017500000000007012076022157027600 0ustar chrysnchrysnRecursion detected calling function 'crash' ECHO: undef openscad-2013.01+dfsg.orig/tests/regression/echotest/builtin-tests-expected.txt0000644000175000017500000000002412034314024027223 0ustar chrysnchrysnECHO: 3.14159265359 openscad-2013.01+dfsg.orig/tests/regression/echotest/string-indexing-expected.txt0000644000175000017500000000017212034314024027532 0ustar chrysnchrysnECHO: "t" ECHO: "e" ECHO: "s" ECHO: "t" ECHO: undef ECHO: undef ECHO: undef ECHO: undef ECHO: undef ECHO: undef ECHO: "e" openscad-2013.01+dfsg.orig/tests/regression/echotest/parser-tests-expected.txt0000644000175000017500000000006112034314024027052 0ustar chrysnchrysnECHO: 0.1 ECHO: 2 ECHO: 1100 ECHO: 0.021 ECHO: 0 openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/0000755000175000017500000000000012110740367024236 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example021-expected.png0000644000175000017500000006304711701151225030425 0ustar chrysnchrysnPNG  IHDR{C IDATx ^U.Zs%PIe #TD[T(6Ш'{N9zTkF}RF2pB"PHOz>g  @Q"@/̝;7Cj@71*X+YO*M i @#qh@4.| r Ǎ D& 17V<-0} j_ gDi\H-m i# @ e W ym  2{  :! f|f X@ '?~xxX+̱c9:V޷o`9 2 @ /[fOPK&~D 8pɒի  _;ǗCElY"@o3O#[RmvQ8b QA뇇U]O,ܶBE 8M2B@sҢS S?m맘f 7o&EgU bc߆&үl|\(A AO>ۉM*OW7Y0X:ujW,##Z!WV]`% 6R/s@^Zg?sJ=e d9`~iooet.]JFa9ՉFt؟#0>{تyxo)ͤdCTk?j ?oŊƍ3+  %"`R?ES;&Sf~:bBOqY5СC>~h} {Bۂk֬Q '# sI_~g1RLk"?Q?"75;rˍўǷO3B*25cC)YfBT@϶k_Bϼhڇ(UY>P"; 9vsbݡC_4UU @M5'*SP?qg+ǿ ̙1 ꤿk2-6D}a h` .|s+; A[ా~Y]`%k%c?*2SNS^(, a6JWƈFGeӭktv殷u,Y&:@bz~]ٟh< lsn@r@(^O̜li?w_}8Džg@76Yh F@6^@i@.(U _y嘦DȰW}.v%Zg3]5vj| `.H%?6 ?m4Seuڇw θWc?w!iű|م[ CGxO)#@J52 Uxkyu 7u^ '*KGtG}0}1 ܂1޺?8c 0Kq5FʖGCf£G|d%Ә4iX!?Tc66Yh,S s I_+z)4W3J4 ?\c>JoVFrπ^$9>8cywrAyl+sR*@Ab&jƼ4Mv,cǎi!>^A&qtɒ92sߕWtM}~Xwww|ɟMO=J?P Ac/>x ,)ks.s|uAd Y<2X`A( 0sٶm *ŹTO.67{KGө^V}),B.Lw>;דzr I$Y ۾}/^ADM}{wCŋGup:#(w}&Ue˴'?|f/0]֌,Ga@+?v+$0f_`h‡:Ix'OBpz( '꧜~$}Bм̏,w_3ik 6H^fz. ?u ;/\؟_ *ϩSFRR1}hl4,kv:B\?yph-SI?5:HK)?šD|Rz`2?kkk#"miiwg18t$`ŊeOǞ(h &SioSz‡ܦD6#hua_hɝ5$K#~.GwKr Q-)SN%}Pf6Bfl84b~r%bF;%o!YIfyu i HղPOi4*؋.W*@3:pOK]:??z''G#1~̒G: /;;;7D́{h@ٗh*K`fFfPTߦ/~>q~}+=#A YODoFKF( `*(`/ v0W:r.Սvؕ~*F63uy_#=gZv%P2PS?Aک*DtBI*2d4j6IЋ/ &Ne_;@Nhi?*-Di?U: a紮2{vQ(p@\H5'wK|2ȒqUW]jEu/|kg_ȋ9N@gԗ_"z"a-&^ 9 q~ާ,#P?4rY(Pɀ)~-@~N*ZԦC>IuݻwIFhXo\hϽ@gGٟJSnYdG(^b嗯r}GP?ENUw4q);!2>٧*P̋"2b84hSWr{/dBzŌ a5~%hNd[Ua~jXRk#_U|uf|DL2Jp6Лbuu (R50F+W. 8O'1G Vq9 5ӦMnJsW?'^ruSH@9,'_h>rm@VxTS_I2 +~nwMֽ:`) ۲c (7b!})U̾p)s. {VG*ڏT\i'q ٓypg]}4F4C]~Ǚg$ jǟS$✦}lPSkv`闿劰HRr8 PP@qxu%.ș^u=|X+$^^?EsaPb۷\f_jAǁ4 Y0go yGV|fUl6 IB$H~nVP9}d@7`Jf IDAT:v2X8D/T]9uS|K) J%?>] Aa'[Z ~e'K{?&Ml EhO@1dg~aJ<ӑ8jCuPe"{|ItٴitU -ZF0&ۏErgK=?@ae~S]`Wk`R?aOӨM8jd3*N?U~K?w>SzLk0ߌKy`4nzP=Gzerk^'N*Bb"Pp~Ž?fǟ$'uc16S9Q׉ ^`Pٟ\-_9>RO;ZoKJgjnHlЯ!Ng"s8Q||L888,#U ٖ͟*jE hl;okPƧkӦ8;3xF-]x'A@L9r/ӭY &?}R8e^?݇:#'- }I K>IKi)k%{u|ӻcLg|dyIH{ŅA(,JFM~l?пh=@8xiH Zy_N @|Sb%gdW_d`rc 5ufyOo :MN:SN~6?1OHDdx-IX&Af t9Vh Hk;VUokS>%kDF@O-m鷯y}W<m)X!tSE6y趩bG3wL.ϳyI!PD_fUoK ~{pgPaݿw'!F_D~xqzE:TDg7gܰ{Dωs]. _p~-4 smkm Ȇ?hC ??W6Y g.ȞADЮ]x3J4dž1'"L@s` }5rLf/Ei~3`jmmk_6WW"Lsnx.Y{'ߪ^'hhLb4qʰ;OdǂC+V0k<:}%jBa{7/66wZ?%q `BrMIBD& Wu1N⊧4W}3kRN=:J0R#S@ AƳr1 T_ﷱq7Sȃ,p _(m"Hɘ6pՙK.DJ s>+GF)f/[8mcͣc(oq) ʳ@nήMth0,~kARb_4A ?k, %K;PTZS;M(!k@ kY_ S|ax؟ITՊ}|~dU \`SùKVJ@6@$iOEcB?97nj])w-`dqXNdMK_x6G_{VDa7x$T_2gr*g*YՂqǟBj*}L2T%iSS㸖g":5D0&PQ^uO#ARJUo/ >wl|k5IhOϚ7=~"?oBs'Ǐ>)ьߵܰmYsᗋ4k,OFf)ӧ){.vSSyFQ+Jϫ!tяSC`{!PS@6v0uꘇ.< s=Ut/@yjz` `OրfV&7]X9kM8g1#.]r;OW?j8*IdZW4')i d%) b輐Κ옭S64 %uN/eZB-[v!k}6d|R͞=4_mBUy'1g?'-k7O8/6S&$K#tu9x]{8b~qUE@=3¥! $ #4WȾhᒶ6(۷oܹhm!hbՕU}3s.Oqm>оS/0YV5Q1PAsU*O+w'2 &Tu?%:SԲ05@ E#-ש>GHCQWQÙ>qC"O)Edh`lgW5WJ 2 PqR?"LA?e~s۷oϋ\` >dq]vY˾jQ?ez>>T鰿zЊ޽{Wu@U)f9 8 xbрc^A7'ϓ?OS?Egla9C1ò6X-))}=WHTc*DkD ~?to #뼿OKwW)g_[?p_`z_pٱ "#t)ONSγk/s _sLZ"P}n.D`1.] @>M yYɕi"hÆ a~Qk=Kb%,Z f|# 8E8@ Y[W0?EWIf}`ӾQ[Uhɑ4M!v5{hv_vQ?CBWVAr8++ ٦9ҀSRZFr^ 2}m+r"( ߱s,PDHf%ɪyUFNMꧫip^Nyg[^Ow,Ϣ c5ZM/=[2ϸqC8Av@ %/S6|EkTs\-7agKw_x++BT0z8pfu=p,V4T@g#9AadC ^`Yv- YhOb2^ߟMSٿRyb|yS ].Aرc5С#>J`"6^ (?&(I~*Ƣ%by!Zo\a>_]>@Q*>>_A0x <: AW]lԼrJßŕ9}r/E'iS.44Oφqt5m,CĀ`Mk֮"xP,xWπ/]::(L?&&TӞ=mQICC_!2?xS۬w8mm?{7kMJgϾ}rp;/+U LaL6%u?~JꑯD([^{#I Μت14 ڧ 2߹TO.E`h0UM l*G{KL"GJeQu|kM #t)m6~M?E8K Ik-?&5%ZrTPi".V`{=*mWo۾m%|-6ȓ?DN͖^LE ^br ٵkp1?{.!к5VォU$c=0&?wEؿ_m7/%*S Uq}Es℺bH P1jրՎ w"Astڟl[6?%SCs)S:M $94Mbv585PD$?!9`镄 @dbu<=^)4% 4)1XpaS8@5 @3EXHzK 6Ajymj9EZ- weFϿDSu_F41?{8vXKKoS.<2M6#u^3T,Ebu`{&0ߟ)a~ jP5b@?衇)t$F ,py RIrY@Hkorf7ԗ?Qߟp_c--ɠ^?ڰ맒jirÛޮ,--S7{ 3C<Š!@ t#?YS@/Y@4U/XwχU@AxѢe8\ߏ+o&_uxlȌ!Bt6ګS~eӽ{O1}_1?z ? ,3f8֎sIHCC4 CH? )oo|>RG3?˪APd!Fd~OsG?3꧒ę^}+E1#wUU,6ĉ^j цZk1tE MU !ީ 9y7Fl24yRhH Sy}||4Oɉ#;X(||Ϝ7kB/BbU/4.%"6PC v`<JU޿4|j7o] 㦋9 ?ό0ٳ?eJ1޽>(Âȩ瑀s3?Z4P*(^ f*WyuZMWfȬ wpe,zGӛ7Aӯk3`Cԣ.m;88:vC"hIjx_08.P@):Poj~`P2/SA Z w;TdҶ+ tUft1WlWUCҀt%mT$_p/%G΋4׾Y::7+>OKcp=rܹ[!i: >Ug |*ϙdfOH0#{:TY>}#KjwĉoIE{l3g|C6mr7?Z6|7v !H- h+\|^R]py`SqߋB&WyUR/= oSeNH "@ ^: ׏Mڳ{v=;9B<6#DS WUᇝM awV'!8٪ЩxfF,h@(W&ecd Y 0@H\g>B;59o'IH;Sڑ,S1]b3 _'?BBW1Jp/P/im_"D.X@Ҧ4uMh 64ԫhFgǘJJ@,RSͪ8Ref͎?LO Ń(,7  4uuA#! q#K9Zd o|EgbAׂ+FX~KBc~%% q oeOXtFڟğ}C ^')RP 8!X˯%~l* yGco6'AR`i$%&]DbjHБ ?k/]r6#%O2?R1d\lMsx*ΤFk"&qͰԀz~%K a uq1C*m{-={w78׎G,Es~}_{5 S)J_ F<=Ϻ{>"4R~*?\%}׺:z{wJkK}[kϿ% ٻwt-a !~xo)W\ĉSdϝ;C*Kl̟Q}hssg9ęZ$1"jXE@NZ۟û߇7x|@xĎfħ~5s'LKl?;ȪoVԃ8tob*$G#.7~a„ON ,{}?0G WsLw[=mD WOO-H<ذ?%y_<~p¸&gAHD5`=3'Ď6|&~);IAOOQm؟͛7Uz0c 5NFbv>\-kv"ʪ;TC S+akgIgmmNL^!sgj2? Ǎ2"q43?H>T&, Pђio&3p4% E2lRI׊~\}ՃP@+id}3Wl!O6j%Ѣ?>Hs;Ky 3o?O'FLH@loV6pyճ!ĽYCrDjI2 Xŧ~`꧄*~XZ['Sm~p#DߜPeZ_cpT IDATU3[؉#)~5`߾,ɹg$zެfl&|½ VF/u HdKo aާ%jw; "Tq@0Y@ $cvlea(#@P}t2&$A@Loo7fJh*SD_3'L\7yRf?{;q̎G(j1~o$X/k8OGPVE6uXWEHQ[.|;GK9r`Sbkea)aLO˯E?B쯆ڮNEf[LDMqY\,Sh@U[oY^9|9GN̺sYslyK1Ch(0y'ɲ6]~ѻNAe{=\…4ǝqD*ZS-[XhAN߶wiXA#]].Pz)r_cr,[D4||8`V$Bm>\RٟGXrֆY_@?ˀ*4 /pc_#>7I?,Ƀ)S >s>uN͆{L)W>/ $3B=/|ܴE1ߵOѿ5 CLRn#gSu@S@x1hXҦNͦR:umZ>88Fswy5--6=GWU%̓j|~/q>y結y?o3#'&0a@+8,,Gx.XJό/8R2\MMM.28#8qQ,mS_was/rӛoKLgѻOI-'w)S4D2Zrd@JP@$KKBQ@!HhGD U8|=lLl纖ow3|%8#.VP@?k}\x9/6g H-1*cdË`lt;~HT@M(dW"Vn^#G)1WKok+$f~"4zTX<8tpѹZW Zb`c @ 㫅W y-_?PUwzբlalF%L5î~Zu̘5ʚ^Hed2!PX ( :Q#l|Dua`hw4iiĉ㮽Z5;;{tK5'Wo}AZj48{ś} #k.S'v 'hlF0k_+)FOU|dȑtoo%;Ay]i4纈D~rÅ_/|1U[}@, =Xt>" H%2l_2V +6H9[ =sf\4k mRhժUt؟_M^!Z_ 8|Kr3$_א$ ,JH!Y W'}A&K*pn:䖨G?N  "*SIu%U_;ZN+^"`œvJn}4P8@ CFOOz{Q0(m4l{- ~dmed5ާS?xم=# tɶ{r'6C?"U$As皫Iɝ  HL'WgN;+.vόr,f_  (&k@әo8 k7|t>_i5"$E*1&Mj=F/W S@5Jc M*tuܥƍ毿p}=fB5_ܹso<7R8W=-U'Bd[,M"H_f Ԁp k 15ꦀ: @ROenU-]K(ʀ `bYtgX) qTWDQ`Og_zU> T΀Cthtk@X0LdӹUz[?oNWb:%7 4ٳw1x P ,\<ؑӥRؓ}j[~rd@ENOrԈdCX Ow$ޟ:U_4irASsF0SO_Ho_'`6qo0CCCNu% <ۃ9f2pɁ{PZeٻu`7^hLlgvZ4:LF~~{+?Bj\RK?^7y⤺xej\ H ?= ,_JE2@GB4W߽_K' ۯ$ gΜSi" _w[뎜۸7y[>v3K=ǎH߉EբX]&zbF.Deuz nW$ <E`E_O- :Uͫ"2k_phq蔔`„V_?FP%GqFx[^#M1jds.A4rik'ѽ# G60uZS i I6_.]h9rͣ{KLЬ!KuO7G"P#`w4!E2` h2pIQ+0ȀOw%}5Igd9%18}\OOK! Ҍ.Gø^0C^5ACmNdE Q,8/Ʌ]ZN!}R46:˼$20k4WWlb& 7tMe&Onei?b P(e(vAC]n62uڕI:2SӃސhһov H2JHX 9A ?qFԯɋ V/}%+ $0YdO$Y a >gɼ ;(ܱc%΋].Ӿ 6K]X{!!P;@Y؈[o'Et|:w8_?xwVs}s<(X/˙.X(/mqڿnv"`F P#?oذ!6h]5w368Ohݟ><(oIw9 iʀV.tΜ9Z N@7xOFk+h7n*髱㐾sGΟw. @bPeagNaxb]AnW4·jNِvj9m6 @01KƵlHHFF몺vrZYW߿oEy[2@LN.^þA@ iR4LHh+MMwŕWٮR6{%P}H Bu}V3 PETx~.q@3l):q¶/\E*Ă I54?k^2o z,B^;BgV_d1I @Jxh+c9ށG)dҗ?kɮ#&=zp4}z O__k<ˀVTHR* j^̻`jN6}lw҉-!{_k_^Εi;Hc@X ]' 0"B-!;fd `dzv'lnuu0WG@Z4 Щx @Q]E}jA@6m~|]"/6'ܓew: dM{@Yu@`/^$4-‚xPl"kk6Ib!#"''%#`]'|r$`%`lu@ $,}eS˔OY,eW!f^!5"WsFx1 x75 ad<u-r ?a4oU'5JaD~jT|I ϏJߋND@5`* ?W͑Ra2@Fv@+F@jc:qdoW nښ5l'/SNP 2޲ G3 ԫr3v4 \ǼR9"krK `ޏ6S~ԵXLaի*LYMPu27۱CRoN4@ݢoU`LпTv۷ ]A20qb[]n"wՒTՆ+"ppA|G0}{ߣNXh3 FoG΃qVCQQHKhac7@ ǁ2mI;d4G lΜjd(tլΉͦ)`HZP]P3n/4l^W? H5qg@?idA*Y2L Zw5 LO 6S>^3 @5 shTL,?!ňlY ١ގ=*16 mnj`P63wHs8 ?xp<8x>s)bUgGC W 7xD`rExyF8RFDLR{Ӗfр b="aD@@f̗fϞ=Ǎv#osq  Jrg4@LWKEJ)ZlR>`i#TA~i D$$ %v@/L]bД@#Bp[ U%k`x!d9~B Ԍ4@" ,H`>HLRoSI fHK}K5h . qBJWT%"}P[lg;7A?gƌ:tHiڠ~,FfzP]~vq9apʁ3>kR؞=t?5 H P# (` pS*p!1,2 ۷o7hJ@nf4!V/{af{~a0)?J>sÄ́7ANM&KdJ q5{޽Xz|D= @5D~ֵ_0}s`SSA3Z̈́d@%Sy/Qg>s& DM&.!~JrͣOԞdI Kd1(`2r^ʞC Tw-?VT}tD?@L(6ĩf @r] PԯvŕiPpx-mhrKR .q옣^G4A@x=??U TFh?~"'~)6? QϿQ`>Gk\7*Rdmbi#>c%@4 ?D !@ pYI*50yPOFX@aC| @ /~W\:8qJ@`7J4"SEݹHod5lML#P!q=L&|ԘBHvPk/ ,$[͛Q?{^3q ʌSA/Pi -AJ/"cUՀ|hzi @R* dIQ8Lp1``{5rQ4~sߵHA>Wq)&Ɂ%9G r}vxj~CmOe9$Pzi#68oɟv\h@AZ N## hq5 كG(:gF jpf#3H E`jRs1=A )y _pjyF #BSOvMJr2ȬOg]yJL@d@GꃡOi*s;8d `.{]t;, EF #nG]R?w-[%  hF*,@fz( Wb _)8J jHZA@!P.b~dGPx1X@ 'Tj"b@\PJPpĉ^ְ3**l[bq>KTa >y@ 8F(+ѣG֘v|,?Xn dgt56775ݞi*z!YޯhU9uuWV Bĉ^xy4G̀ ]S]1s"  BԯeҢ===f`;wFKT@T#yq_f %PF@# "X<2?g92@ؿ#o Px EEP?vM*@nʂ!(\]az,,D$# @e ? P ("6 P(`devgYa|<ʷAtttP$(S&@Eu5J#t  @d ~L!3 7olRׯMk\e5 PAXV}mYe|@G$ \c7 r@SA-MB@  |y| !H@xVL E e^A쯀T<Z6AΝ*Yg4IDAT! XiDՉ ]0w|@c~5 PQ y~_ %@J4 zB~@J`8%`C4GB'M[oܔ@ @@_f%.g G @| SP~*m@ + Y!5*x?jc"|Oi*>5i\ՈZ-xnX#*gV~#P?<|8yG/徉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:@^G&B HWx@@@ \ { o" tpW @侉P@ @:o^QnrIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/import_stl-tests-expected.png0000644000175000017500000001407711776112755032123 0ustar chrysnchrysnPNG  IHDR{CIDATx=]}cGP H!C)hI&C :CA,Fx`C!$h0 (:4x*B ɒff$S%pry}^,\yν<{ <%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A @P%A]y7~4~=|^l?Ne?=V\kOjKX$NX0?U,%{Ezqom?t{ ,BqMC0C-5ԗԀ zO~ u(pw<[ pRӿew WX "#L>Ro  h Mulm4,[@&G^P?+kӿԗ8 ! { EK|>o kdұ4?%CG~w2ĪGԜ0Lh4Qaoi95 @; Y @K'AՌW,g2р @Su4-؆,U3M&w h&Ts쓩 Tmwf9?~ݯW~Ed@+xPsl Sϕu7`wBnpv?z/ 2P* 7_⩃'Ǡ4~ @ &絛w30{AQh6`N=7R-xCu#Ӧ5b7߸yfy%ym33OUM oY`k"صT Rp StCsT(o\`3'e!"hk hd G`מHmzYTlS4tBaOQwei@l &/; F:gߞЀw5 HC`?hrdg~=mhqOhw&L[4K37Z b^ȸ>˞Yޚ6 f3ӿUTZ/r%-?|o=_|mWBkծkSkjyC@s6sUqH8Te6yNn+ k. 8/~ IU _5Ymڥ){ HoW4N5sNh]W4VvZڥ P۱9a<;m|E}>^?KG WqUeǷ}: rPY9i@X%~DS {A꓊okSFi^⽠2 ;!+,-A/}ޏ~:=4GYp?#q<Wl%(@ex!o'|]y~@(`퇗n]kkg`$ qqxwy:{{A7Swk<`"uVު{AUp;-͹ZxJ~}sTC u9!AMuC v;(3κ:ƪhBXKq[@GqVq?o]3wwvػJ{,[@(&pyݼf{^Wʙ=?=fGU1[o R /􍛟7D>cùiM)wvenF-`E2P|xx+m f_vZn/87M @kKik~J h-v9^x][ŐW\=-sVxٮ&|vi`|5肇܂¶og^,uJse_V?'CfQÿhȎPO&~QZun`?j'Jڕ{T$zk=g@."PW?/[jP!6ulԹ|ߌj2PoZxQHW{<ɶOoJ38˹_º6سMiI]r3`@%l~ihOg˲J& ¼xA sZ©RM^I0d$YPȻ5a6"`U_~*NZpoQ߱(;K(k92!ߜ3| ďp@]^@u1Xד$q`ࣿcP˂?S#!3w_w~%aݽ?y?s彿x b\ӿ{ۀG| d) \=2 !6.codT:`G26%7"]7n_C'IvolbV(mW Iw2qvV6Xd潞˲`UXQMӿvilc(8nt6`ieA;y"kٲȗdWf:z@6t X6n4_ :4W>bm3j`(M-,[e`YrWVCfҀ5 P6`ã3m~}9Q|槻_ʅa%#R&!v=# `ץ5nGH Z&>]ӷU$W,Zí ̉qw" +XzۜFVMf`a_hkM`)xEMݡ2Ot-e ٖN&4Y7 ~ ]쒁*=}_ 8\ ?D_teڂ w^|~Qe VO,w >NJ ?o}sŃikgɄ>shU,gJ5߳t=FM?YL$c']>Ro,2g*!*N/7~K<@Z&|(1QB**%F5jAs(u~c/L_tMS0uQwF 2%xk366@4 {al,h-ENrne/AJ.UM;K>AMߵ>~E`E@?5oc]Ζ` Gr%0+*ko|B"8?Nt znyK/g9 Lܚ/GiVڞOO^02X~nQϬ(VT(0aqO Z:e{/2(6,lO@J;cM*9 *<*<rFvX47mφUiWTir`m+RK@UӎTUV pvv4s+?]?~x$dۀU&":)@bB?/]l5PwߟZ 4_ 㪟SvGh{^e5P@kܧ_43wF^ӷ??@ n]WF?C @khHwt.~1sQ"uScNQ_qv): X03@_2F _?&k&~&{r=f`|?Y(Jp?L~fxD{FY k9.f0Y@K0sY= D&, }`gΩG-.0Y76 ۀf>B<>)cN忏h~29ͣ@>XV麥@ŗ]{io~ ɭz3bC`Sjb?PHoE@̥@"m*!>NXwI[5UO|NrI蜺?l2g)o  Ի@f wOLڥ} 9p? hn=w-KCX]E%% @PPoÝ )(}i@ @ʔz)>0$%#@ 4XTRXTDaZP>0D#5jչzo2@r>Y|W|5l#2،Kߘ0c5Yx㕋^~臁g;B~Q`#?[F?L VR`o0l^M>fs8 H|xo}X@-he`o){ Z -&0a^j跌~H fڎвC1!95tG܇v_ Iv)&0}ՙ?܇b *U9UC#LtP5jwzP J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J (J v㨊XVIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example013-expected.png0000644000175000017500000002654211664235477030451 0ustar chrysnchrysnPNG  IHDR{C IDATx]nGuQCQTBś^&ioN(؋P/oC)+ sU(H/ZM,4F !4mjO眝wμٳc̳왵~k{~x3 {^ce< k m@kQ6 5@(hq ``4 @` @0J0x܆  % js)hk&N@X|Zb0#45Wƀ@. / ̪ه9` nA VF-0(=lxCΙG>Ӂ\2ʷ74Ma\ydoi$w ⅵ8NO>}b0bT @ ] H(@ "O MFEG@c@Ɗ'@&D#  co D@QX7 Ѩ@`,X@hTtc's* *Æ@Yr)@3@3L @--f Ќ =ChKh˟!4#4C_db(X 1 nL ;oSmh˟!020ZpOt?ޗ]+ș + )4p -͍ȱd$ M?^xbG#@C@|˰`: @ eM@et@@ A(K(˗!tK݆ CGde k=;~X7h~b%8B@Q?ה$Ct{IiPI @eؼ.oLЀ $,{d5o l8 0@^ I'd8 }R`Ʉ##4^%2K*̃WrL/Gj/jձeWV  PP~˷e`TC lN:*B 7Њ2UJ%%@ś:8J|>tW@j.t?ko~]5n'{>W0ArW>G;J#AI[. j>Ovg%C:[ҟl[fn!{]5p SxeϤC}@8dLDɀ u5z8/x(1=O~RGaիth?a~i8A{jij# f 2OOn^Xjs ;f_1AR=n@vh,iUBU6/z]\!/ygqydP[\~-2ƪ+,)R$ύ4^L20[8g_qzd%qG!qg+7"v*;?+~e=X2G6PvC7:#]'.7ڭSҝ\l`9@> v63\E_fn){@GC ^R揧:Ӏ&򾧽@8ۉ3m-gZKJDT=VHOgE*P \`+hnb4 %/с6o=mC]TO,x>ms̞1xIgSL3rI_fwy:eA ⓯ǵH-V` ^p_ Q"Khye^ \O bp~c @Y8t@O ~ҟo >Jl-8$()~S쿵t% a@:Siv6O͜>qLޟneARF&L&@rEX ,o%{啫'zt~ߙEEePN"$Yo)*ZvHSK}?M7];JP4}eЭ$%_ϖFț~OlXMnWŠtJv+(8jđ^Pt#ȍT'+ޱߡٶbP:J5ePJ#-΂I@*o1w]jE;<PHC-ZV3.|S#J>^4 P8[Ȱ&>+GIcB7ЃBA{Hpa촩v*YYjKwiL[%,pF R]z.of;D'}{=?_>wMNӶ,bY|Pj h}"m 4:t ﷩p6?3G&pۊ r_8Kb@E( E@ >ﻀ)llжUОJZ5Vp*0m*}>-K )˂J˂JZGd$TIvV^VI`-"`J\ 1n5V+np =o p!3o:OM,b*q/11[xoe}Jm^x%pS/1?TTbG[*INv>As%pz1\R)ǩoO%p֎$"qY,F,*]7N7ƽJ Eo-ژ@ %><~77nM~ը{%pg fub`!@!;}?qӫMG(Z, bЃ8( /Ñ@ >vqNnӛLn nvw)2&A5Q^atgeJЭamikhamh$_[n!?0@u@7&Nb>m8pbRlPt_ vvɡɻ%T XH+E:OF1y(WKE@&%/8%E"~_*難@" HưW B;l/#7ѻ8/C_@>C#Hey?Sw"lGɁ^2fI5j,~hR ( 4AEb$}>8T4`?)Հ!Bat#\zCwܿ~b,qQ,:{:Vw4 \!@tea~cu_NZ IMm]:c3N.p XK}_|\QvB2M@L[fkk)\ LCMrEZ4 "@ׯ^Sone}7h@/"}Z/EGjOE;/}GW+=x|مH&(Ay?=趍Ȇ- YFs&g'&*P`:\T{gv-@"q85ЀFWm@<@:RD0y?\j"WHHhCv=ȣ&sudޟ&0;xV,er@"`Կ Uh"@Eq2\IyѬAA0T9\ V[XPlQ*AW nl.O#nzԁ?SKTK&- Z -G3߶ab3cܤr MBNw Q3#ăfo;x㷹0.[@Z2oLy?>[YR)GcyxAoOCOT;i|)б"Ǹ]e RS~?9L; L7? -4?v~:mco).OB ЀX]y4QK!RJ}]?cCiTTĄ[E-/Bb(fS?t ޶˅ n-.?tW?N.}$6]FwB!lq@9e (^dD`a<7}?ճb1r tӎLv.^fws @?h`Vfٿ-d}L)lf }ˀSޯ|| O+ {#lގU?FѡugS(.lJ|; F8HKh!NT IDAT1E@c/,p`\E5cfDb(裱O? ؝{ FnmhhŔ?[s"Npρ9ImnߟEƽ(hW&?ִ+bkn3Oի$]@#24|LϜW~˙9jl쿺J:HU8Όg}_]"{x'T= @P%'S󁌿jɉVZ;Up2/=(zW/dG*AYe49ײOܑ4@Fr`nL \ݶrLl ] 7]>M9sQZEH_ j XS 8Ǽ|6MgRX4IG ]5~KKpBPsaSS2pyvA? 4@n/(ϔͫoz1ס}UKRU)*җIw;@.6o8{..n^h#,;I@N[D!)g\DL@ݞT]m eK~2Wih @El0@K?0z!zWO =^\@"FP$=8PhLa@fڑJpLm/a02[=[ɀl@=^] Wԯ%G|o~#;%=F$ O@N"C%t0*d}ghV -_oS {}R¦PNN ˫8` ҵx',C[߿w{:`oaς "1i[:9|5@IKx 'dB4~@:B4=OZB"i/(|$;~{t+I(IUR%(JBiW>xcACIu[?$|/?l fhf>t&H6Xwb-T 4μ׫ˏgH.HF1tMN<;v #4t7Y0Dv8 m@R _Jr*RH,@'"7ψqj&+?,H!+ *3 2ϖŲ [#R>& LhW T~BYuM5Z_@i"Ͼ=K/?7W^)9 cC7 7Xm-n0~ <#(Ox1|I|PGzX~Z@ZW2o +=fO?xH'XG`" QOQ<@@7eqo<,(@kz7ybHGA H0O-^ܱեhΠhJhɏz{w?VSC`x$@`~9?7ZcØ7u~9Υ~`M/s-;1=!赲ZM.[y3wv\x= `Vpto$`F 1$ER2z" l $= +D @e =D4@4D  I\@GE!~<C#4@&liB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"hB$d(@  0 &ha+ A L )Z @@  h"\A[ŔIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-tests-expected.png0000644000175000017500000002113511664172106031377 0ustar chrysnchrysnPNG  IHDR{C IDATxA,Yy7 .Dbp a "H\Np BR$Qp?A `CPd# YdR^}~`:S>| @{ و  @0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69@h  @@QPM` @(Zx&@0 PT@-a @@(* ް  E o 7lsE@69!o<m p8G˾H@tT̬CWuP}ČBrʞ5!" B5B| _M! j#ZynC@Q'$@`uR|,S@r@GVŏMI'  X|GI@BtՍv5H!оhF@El^twvk }{kݯUx] p3Z@t];&"h ,xo-2R,.7|߿1MOAfb@ֺ] k#0Wa*-0o)@ʲTVk@560~V0:H]~ڷ?r~ \NM&5:_g{EV\o_y8\2 -w+N4|w=g-b`@Ԭ&}{#;NjAI-T s%1*8}o}7i%V\\ @s%aZ5I[@5[ƶ/tM)?Wf\ȀUsv{p >-F+e@X"g0+F }yaL_2oMA307  Se 5zt {0sA8@q;xqW'<`0ɀiS4I )e7elk+˽ʀi^yÇoOu*͐'smnO`p 6pė6KwVOyY{:v)=,t}?Ӣ<޴m5c幱c.0ϺkŞPVtxƺ?3O%O :r3 ~ h0d0G}\k`Xj?J>Q!;= crOK²aw{b/=m_[lq. 3.l/ V W/AX7ftA?>Yӥ5";Jxz?hcwrc[Utap*S O-N܅Xm,eW~VG/ *Κ՛|B?E,w LY}ݣ-o=#Jx_ eN w>-Vq,~ @O"bmbRu+ZNuaߢ?{-XƓ آsgѦ 9SK~8՝F,KFDW/xj* ^%ȹ{Wkwv/Ga,-?&yYսHzhvKpp$ue(Fur?Xl[ϛjCKr$xT/:ڻj d@W{_ ?4B3`àToqp+7 nwlqM, $w3dqXL^9kLG {ؿ_Y{ҿn anXYa$y^>{a$gnU&Xq '2 ڰ wx%6KPӤZ},c GNu*[>9"?Oݣ$de ?̣&]!^[ v|Mzo߼6 .r-Vg>Tc c負ݥ -8ɿ֧(0*Ic i:Q Vkv82 ٷ?4c[@Nv{dַ[ߴ=?7 V3@>{[[e`D/Үqe K>I-tc`H~7FkJk2꟱*nCdJ`?|D#p,pgAږY fg_ c t}.h.`YeP"pe2̛~ 솛;# P 7-NT *Ft @s)}s{~VAY\v&@@ N\lg-}('hw N^w;gz3!]Pc[V놋]>/:f& ԝ­&Qt}As·>v X.ɐ4v)Z?@aFX!cl.P/?8V=Ar,̇eu j}6`|}zG"`)េMd!cl̵Ok{ :þSu H}𝊑ٜ%ЫcA'&޴"p b JZ*oI٠S}7ޙn~yN=n@:~k5mn@_ sk!L`H1 6nt8&s#w[ {̀mJxnoyu#xtᛟzs@W;MiO57ϐ0Ip%GM L!Z hb4fNjJp0n/ @ H\]#@:}|+_Qib@Y7N@h!<8h95FqxvҿnFX.O@gRV @9o5\rKu \$(E]_E<O,zdoX:(М[@e4o~j/=os;^='y?)(egK?(KO'ob`x^F88ss+^,_v+P xKvܯ˥9_X/N^rE@9t.,gM`?]IZP KQ\ Ӌ^[˥-;tzA`_eUW>eP֌kIsE]}<{@bpD߆^A;?M mZ?}`_.iZ V #=6XP/iuK]V 0@MXĎk_Q80 7;W`H1 }[/u.Q5/sH16QK|@yo-=ېgV`$zlȽ5aﭢ& ָ kO=|Gt<|'>OA$V `?]Iw K $سV=i{_, .R#3V qA`O8@¢%ʠDY>oEp'p2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěkb0IDAT)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2@  B@(N @ ^@ěk)@2!6V'WIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/linear_extrude-tests-expected.png0000644000175000017500000002736711653126251032735 0ustar chrysnchrysnPNG  IHDR{C IDATx}gGYRv%4"+P /j _DA&!MTDcD(%PЗvens;s9gf|sy~3s=w8O_D @{0 0'l@cR6  1@@) @i  4 @` @PJPx† 0 (%(Mc(3%?2GTInjaoo1}A>@ 9 9R )Dk^z٥^TuyMy&֍ 8ܾO@Q|_ d%h#'$]JrsJC7 `` d!gJI '&?6iAwIL`g[| *J96T>G3I64/O>4ܜ_93eW'#\+I@-?#2&%D´&?( `>֧(M `Uů>Etp3(z&?Og 0HIJSfAg2 8W@ϱ(ROo^vc7Gp`p!pxNkS{cxq{چ<fCϱ^_UY~ݾ C&;t~!y03ID'Fs"wpX 5C}@eUPT?8No?ANW*6'z_n7?>\9~١oAJ "g~`.R7>d֥[q:AP s"?(ɛO=O}|?0 (]lH[P8l+XmAIX(I0˨goWr4ƘP&viX1πv`nlno`Ftf.{ _gP4% `K, =ns56¶{^ ~F(+!NO gjw@k jw*E?ͯAU BPaRwqf_ݽ(@ |ԠSyϜ @rR yŧ-{܋C88^`8YPwɛգ1? SGvяEb0bި7a_x+OtC8&+E?OtsiZ_:9@I@IڅUۘM|{3Oz9(<>yӢ5!:u`Y{ n#7[՝DK  P$JgUX _{z5{9 6ړ3Mk)4(O?GQ=SXC]{/#}&@ĝ$}~H^1`'p^;Ax޳ EX 10J h]ƺ }JȊ7oMEaN&!P1 LvmCי?~ %qo ~(C@'~ {I,(k8>|r LP8U."`NOtո202eCDeiqcV3!P `q}SSJdp>s8թ~۴/2qΠj h7jX+o{oxHK\A3I3/^57_{Hvvb\c_L3CA-@jH;43v;sswP#_v'7,}o8n@}5UGڀ;,-!Yݷf C  wiNO'eidCtC: ۵-77NMa:4BQ4}x?)`rV U6c?.wrġD 3πcT8ݏ3u SW7:8Ͻ3!Pgνc)Hu|+Fd'r0*`;Ѯhl /ܢwTɎwүlE؊|:RHu?\tt_3PCbH:}e5ǪZ a0$c7m.zh>4A8M2BS}tb< 9T?P> ל9+WOg =Co B=`P}'8+ )>l6d R`;wg FϨ W} wo.P1XRi Vjz) %vA@NN辏iD1HP)5t0] t>! [GO<S(j?fMYn9լd-}e<,cAD)+(T@VO9zR`z@I48c $}C g<_c@nݿdrοW[4&ʊ `ïC;CR wޅٹoMBV>"CT\:Bì1Ix;YbpX#TOB'vz!{;I+"c|V]Ec%\ ,SZsG,q+Sؐ"?N]*\pWyWʥ@ {Ȭ;OQpJ_Pd o{g]ut%] U8w" ޴S fek_j"X{߾/q]$dwg=|D+~o0&9}즮D-Eo(bVM @\`*{@g -zogzoMe"!2 {# # Fc  lwFRMu/yJ?p tZ6p 'ט:G|EXllC5zgo y0?eU?3 &?C{.,+R|&/ Tyzᆛz;8[맬̭h!"y/嵾SRǿIlVDۮ7yPGAƔԿd25'N6a+߉bHdo>ؗ~ܽ'K⪗_*$|v1?D-,׿du"\_yo{r|?}|*] - RY  /0 ^ 6dxg ~\U*@=鶺; @>0[8 ro6ك* lcz7l /}C冟L<X7_o$OGe=`S\]HU5Y+IIc?/Հ5U$!P,KA+ ch'}!FV&IB U$1*lUA160Ffܶ,0]uo,K\觖!LQ5ٟFj#;G`R}[V͜<Ӄᘓ=3fDE VWי e^4[y 8L pDMڀ BuϝVܳ_ [+ݤc}t͟{}\s1a7Q; m{`a?3r? iolnHi{Xuv_8c~?s`_ ОtrI;w)|`@u ' >B\͘B*72sDZ:.:ѿgP,4o+㕨#cmw`; ̥}ز/~}p6^;;W 6dB<6y)mwAP]|^MS?oӘ$d4C!hQcRPNB뻾wZ8O8cl3<\IDATi.WnHGx޷W?Ikwam6/F?y57_H`Z5`=YSmçH0M?'ר?? =6oZU~AМˎw}h˭!(!An- &u el9wI1%`[_ wclОLǓj?3cd~9s͗O=`U/xcڞU,PIS~mzZmiOg2!:øoZ[:+ ׻ZjXH<%xe[FeLc>~s'pf웑~?H I@LgM1T4@~9Mt=6V@y :}S>%yg3?T?v59aU}ϱYvşY^UBJOF mrй|3 涝?{+b/ M0`JALw XL`l 6Ь_ #z=g}6?@L|L0O|dB+ǣԎaQA9`g ,jv >zVB LS\N[@+ʪtov@4q`#SUqG}Jz r?\mJ٥@BGi>@m<>G@X EIݏԂaԊ@WïW?p @`5` kݟ%@ +e`Y&Z~aM@ `Y Gc(s&,u`MI`Ӹ辰 &pP~H ƛ?ti雿?P@0X ?ҿ匣W_>TR(@_!C f$xz;BA@$gn<ՀF+RXI8 "pEC() i=m;oK@`J' 0@i@+0V2E?!$&$Jsh_htXCBhp: 505, ` 'C 7 &7m!lF =7 - `[f0sc@!lF }Fd(iKou'@&D" Y0Y$@0hTT  +D@ h`u(ǚ;A`%ozhe |> A"d*}cdddj!pt~@, , '!TB CD@ `JHb`1@@  @DRJi- $) B #*Qy `y: j `զAKz11!7$GZy@y9hl xVH,\T.O(<Y dӼoDJ w؀u*U]9zwU -:3A/#T6c_vly7 `K%͎P ;G? %Q"㥖`d"o?X d'RAd26 TX NkL_ٯCBf@y( l sos{>XapQHPªa;Bqk~E;>QBP^,zH'Fsn'@-cjSh@\TNwМ#tDKJNw¡!0 %R7H͍CGp((=w=:ҫ?\׫/?znp~\`PTR+cc'ƛru|w')@`.~Z] o v6f+^͎?=* 5Ⓘ#'(4$ ɴĥ_zqHxm}T%x] FXKZ>үk$ ` #& `"HLQ0[6gܠe@٫U!Q3~ 7v5PGQ:@/j' Կ HKnM:oe_"d"† em7ˆ8  GZ G)D!p4**. `<|6?D`R! B;B;) @A qR'D  @L* dRo'1@c ݸ/$݄Q+~ h藱CCT8XI[Kv% 3 Yҟ- B`@R @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@@!H%H,qA @@* @jf @e@R `R3K\0 .CJY  qT  f `@\  5@ @2 0%.@I >܏Z?IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example023-expected.png0000644000175000017500000001635211745120722030432 0ustar chrysnchrysnPNG  IHDR{CIDATx?z a6WJgnF@R&*E BrU9ݤr*BM$ K+o!"sΜo<\G{YoϼoaoA @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (J%A @P (Jڶ=ػzʗNj^ym֑ԕk'pგsUO,b/?#;`l=mO 9+z>>)˲[߾N4Ν=4gP0OR~vM)~KޙcZT>s61b\Kuy. tȖ2pKէYT+W_I/ H&vyqi$:`v@,?fF[4)2  _&X[VEd+F1%ރ?5klZߢS<~_~O RZSGWXƽ+\rDQNGӫNzA%NrhivN Z tqV J໯?8w>{hiOg>{i1,Pw`&GeWH#d+3颠XE@~z~TӶcoWuvnj,.]x'q{AӢ{AK|e0ZiVAzmv70sy dIpT(Y Y @-_{˟>qrmĿc)+ݾuge1GM-t ̆~}ɛ?d?t?՞~G 6R2.mmZ]:C-mr=aڦ7"I:;5AiEib6xMt໯??>PMU=EG^4M/?rW&%vbkh ێRk4%6}ˢӄk?!kM_K%Zs՞Oޠ[H y5VobvePt:3E((=1xBqVEYu]/TzFϑXtϧyβ`,.P>ﰹُt-<:nyMN4Az~|Fg%"un:f][upesYQkAŢeuP[N޹៚~I'Z7S<tGdYe\Ȳo=+TB|97OuЗŒҺ FS eYg@-O ekh-Im*z:uY.S?˲ུveWW PwXtM=_.. JAS].24-1ab餝ަ{;L,witj|vKȀՁź-)bFRp׾*tNvɦ%+]}e'@ӴMzBiYiU \CQJ˥_>J_.mҾoC5 m:wa`Jzѥ}U7 -\X> ˅/R;Vyk,Z#kه_AK9YO˗XYV3 eo]U+__8:f6?s,kX;?NTCp5G}_0?|&F#vJhڝuƶg޺կ k*Łғp돲˿e5K}J5~-: (mG0&V]qŰҩqlR^l{>\Zz֝N^;.lMV>z+y>JIR?zW.\ 4~ڵEoA2[zN ~H_{XY➸B9=磭%bs[ ?&CUU_xGFl~-Uê4`<'4c1XcKD_gk[NJNՍ_c%SC05DX%w)Y/(Х%`Sý;߃Fo[I˽Fao`JV41W::ku/~a9 dO޻zW_YB~EWzou~d`N2_TNoܯMΑnWhYڶJ߮.~:Խ> Mkq_{kjk&.w= mx/|^1&8\;Q!{ַ]4)5~dC`8(P۹jIKvhګjdN猍n{kuz_A8L` /QNȋVH߽O}{bQ b?wh꧲Şo85WdI]Q-MO#MU}1_|_^}$S7hJ8Ѹ7j]FЃ{?Uyˇ}7ctKD.[^Z勽Id1eٹG/}SC[Ut 9ֺ&%ף/W-ftsua#ŘIZ?O"|d`֓3%XϪ7*;{8X(/U8-=vA᪇Qȑ>Xk:ޑڴa/~_>GY{m~LB#!_z#/͖6`}Ȑ:݀@&9w;MHT?͉lu\Fi~zyVZ0,[=>nA:`=:fcEL~z6j%3W/k~ʠ~`~jkβCV4U7TYu&w"`-UJTgMSkxMRϏnv bpˉ$:wq(AOuDf.:?aRm[N@w -?I@7Xojw ՞O=;HeP>ߤ6(0bڷvv,4Mv9AzԵD"X͠+I6)s1&%d-wِN7ZϡA5΢.ꦋoy҃5c'[i:/ wlMs5ҢF8ۃ|JDix:trPHn/= ֝SS;.gnVq9ࡏ^k %)r-òn%X:!|}`\n%ئ.g<}A6Lg PzDDw]n0T ʗiz,9"b.?u$],dsѺ'#o1дYl:4L0L4P 55_E~4KS?>g%]j ``V:ofϵLη£P;U X|/}ar1v_n Z (17l B~OztT-'6!زC~V5'o7R靳`p3NبߩpL;b?=Sʢ :Lo8~31Pƍ, #- &'#NV_׾m䆧+FR-Iؿ.G5:CI+~m%jj3}E"N05:A Z` ^綎"WUH|ɛh (Mp_:2Pۥ Ho~Mi_zT=ۤۓ-^1^?d'7JۃOwd  >gK` (5rزv]PY`(?{ymhXlB W0 ~<\aSpSa&# n[<A }KA 3pϧfg#0Q2ug?5޹`Cp/Ok81'IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/use-tests-expected.png0000644000175000017500000003000211713230315030465 0ustar chrysnchrysnPNG  IHDR{C IDATx fEyr* *M`[Ea[i CbbAntm+QlcBiEkkŲK QA ""Y,,uϻ}wsΙ39|ٝwΜ==3sKvxh G`iz.1 L @@ -S~hBg0_4J,,apYQ@(, N90K_Ԝ:&Tf eY>St ./eA@S0 vzS+A凮ڵ˹W̡ Cu3{+@oI()GD#{hy;-.>2#S[@Z@1@ɥxߩP$Uw=꣫_4o岗 MA鈂 `T3A, w2_Iƌ{~Л|^#Mzs{G`G RA&0x&Hp/6O=C o]afFL}p% s##-RI ⭳Ϲx{/C~k.lqz_Mwϋ_47?2 Tu `<u*ja=n>+=`Eh/r=pׯ`d*, _;^'7>) B%Y4yM]4/Ldw=*MĶ>>m˲¯6=Sr+` H%JPƶz$DŽArE ~Ӯn} j>Ke>fdVrخsM!Soj=ooç{7FnytޱpGً5Aaޯus8_=@Af @Fd5 ՀL& G<))iw/x߯ĤPfE2J?QcIp B/k_OL̯2ӓo CeAy Dl ) +9povÏs~KXPM &vKc?L۲/ v/¶̍[%9ۗ>q T|\f|׾ry) ;1QEOz|XaB-Ҁv," ӲPP 3ʺs+[Ԅ S R`~"ʜE M$ro1Pe k}5n vا?nv.6[2TD0C=}S>h>Co{/m|6L/˖'=52?5`˅E~m +ZOn \ <\n7P~#6bw׼/Fȕe^\iQ/&Vx7ͬ߶pi_p? wv;YqyHܼ_h_1ikyCM{&p`XXrJ ƈc1;moO121Ko |4M !AtY-4Պ?Q|yݹEPG6?Yak$kX=]nKL,_ ʭ?R~xѿ'\ jr_8nGNe\leEA>[4}6S,_B J hzo//}].V7S*`Iߺa[` ȏ1tM/7JNe`ͱx&J.q|zDƹsw?sRS n`ۂ2?_b2 {jr=y{x>&{ vE*n}lCeP0 >GLx]`/["m2# 4ӓW~SK_7+Gn /_׷̵Pu@.JTT+=xae?v@25ˈAؼoG+>T_~_DBEyWxcYgFl \1A6 ?!`oS07 Sb$ /  .^Kc?#Ӏj{=Qƀ¤i%! zm8C'5Ҳ}? -4^c x ZN&W ]뱤~C2c… .4f,'vEF^lS '}`Yq۵/ǜ a@_]l˩D;y_gnv\n $BWf^ x.zaέDiH`h؄tx9ѽhzz*n˗MvÏO`6] fhY#1^ ] Ιn~+]zJ {750ߠb|z{ g] cC#% {b0I$:K.Gk@2Ws}Ψ⊓8}7zڀ@=eWm9EMY6ʦB']=)@a8%Ѣˏ8 Uk GzIyF |nI _z׿jnb{a}JЎ[3G N!-"[JOٿ~-ԀP? |s] n2xwIGVc=gcT M`9Tύv-uꛀ_AǴ0ij%1y_6f[Z5V\Or2D>qO2{&0T7~ڔ ͖&zK?}m#`/3GѰ*b6-]䷍]u|Q<>Gq˿hȿ-7xa]X4?^eڄn9 y8h22po (DtԶYo,<4&&Ͳ@_]6]7timFEop POUlt(4ƭ [IG+>8Wej JY|eVgB]w~KG%9}~/C 0c>n}$:|xZoЪP+l64`^C"lBJ`;k! 6N«]Dlw;Es_,_,"CS#?}g(8K< Ϥߚ$xF}Of7灬M*y&5wM, ]["@Tay7b~W1J?qj o߆ ( ?Yh9y?!ef^g?V!!ôon G[]wkۚꯧؽE 䩡 =Pπ$;|@Y?jݻO=I,Ck{㕁.=s[byZѹcolvʲ4<}/5]`6@aPz4 kŚvGׅy-1}?' xIߗ3/0-q~?Ȁt6 %(L̒~4Z3=A3~E^dFx鏥y0>{>rx@/D 4\ ,ãрP7z7QmR`I{&g𺜀7ǽ._k_GE~2w"CDR`,#˘4/qE?5v0_w?^5E?NN\ƑeQ!(FY[órd'zvv>/Mķ/>/C>x]qiTj>hϸfzi%$K%o qRk M ;rn;hI'~窭zK߂UflbIm@yg6cQ/3?U07+tիmQo =x}ٰ"`?XQ@7@A)vaW |\mүho:iC}.J ^E:o,G9>¹NE:`T S7IDATM<_/U[8=jKƕ ~nb x.y^yc~Ʒ5_g0xgC%017!0z^! =wVf! Q|_IȹA_dKQ:er%u7."n)D]~u)}?"`SUd5cc}5r؝,ǝ7+>4dz~ )D`]inolMF h/SOsnHrS,W!]|d_iDhuAiˎ,Ԁ>RkϓL p'AWO8qJT6v %};CzЭMS&?rYw-C}8KT `O@U80&dc ^=Nԟ<3GE0F'}఩?(6XevOaBzKc `4>Z鏧!5g \M&|_3_S!<85@Ό 0س ,1SS;K)Af oQ) zb% -l5b  s` PUFTc#`^kU$\AoLԟ @W̤ksޫ5X"l>*AHhb5"tB 4nAӇՀ.wza G,*4ϴR<,,ôBΨ T/~LϤ~ic7 C x4@a{) {_ڐ A ^  PO`L,THQU4 sIP`~V TR[&۫~i@귔TUX} mS_Ea%0(|MUVUc, cXܸ!cd2!Wc/*30~OPJ!J BJɆ\- SH.ws?rd.5^x) ȱt#Gm!J.O&sp 96[cC ¤b7O0i=1>כrv,{vh&r}19^1ډaV `9[@cԳm=վtV|]1pH # \h/y_ؑM ~3^i&T1  c ƘE,FO㑁FJes5!==^Xm 3~\P,bBbp% / b@bxdc7J0 3 AmW^{6+_sDOGROq=/@ d )k h˜l&q~}O2@p@̌^e`Ȁt=@wRF1\O] L^*$( L.~&MeԟKad@ywc#~e120LƛþeEY?@ga 4gb`d@*.1?#"(X#3Ud o䯖g#gb0U&ɾD }$L:Xx {@J +⍷i ZZD4 GMGg#Y0Hh`pE` hPF`dY0X&T( kbRe , Ss 2"kxSрc0o~< oIh .De> t ȀQ&⤳`XCIGC j?;b=Af1@7  J/@s ?xiDOH srt@t 8^2@oTSH9ފb I*ap*€}3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" a@ 3" IPTIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example010-expected.png0000644000175000017500000007441611701151225030425 0ustar chrysnchrysnPNG  IHDR{C IDATx%G}=agsJZI+iWjwU$%L0l01㳍mlkgp`klg e$P(yg_uN83sWuu=#`@k^]c#`HX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"`hhûF #`@C4]m#`0FX0F{#P, mxW#`=`h(6m0F4 @C6FX|#` j#`,0 EІw0F"0v<;;iM?lA#0̾6snmwoqS.?ٽ}=/yҳ_t"zEuQt"p9kez{r8D|~+NxR#0{̞rI=޵>ź3T%[0p@__-f  a$g?88|i6U" B>h fV. W_<~]V2P QC}:2~s]u@7#6\LL ox婛OM}ؿv='8 mc9|`ڷv vw@w"`vqf N;%;>V)Yh r?^PK]#ЅXQ\@_y*>u:p`hꁓO8diF  y71}CF`f𢡊 stvd/^~&euG/ ~s̑ǡM{N:~e??e>~zz,.{!DJ:CҀ-.\N~'J'A3c3t鋞ƫ^}*eOJJ64# /\z+]+7n!ӂst9zɅKE?GvL . y8sԼ{ zԫ#)M ~$f6oZ @x|Zl!I( YPM9K]QTFVv'?PXI K?/b}A_f'^oww8B2Gyu޽nMbe:tb1l˪ds(՟xn"'U\?dV$POeW픠^qP5%PRc׳[;.铯:؟ƣtbMYy|?pvNU4SgȓE` (ݷʳF(/4Ϣ}hB] pǽ#{8G^y)Hzًs YgY CҢ='#q}C'ɃOr{iIkͦzz(ⅽ5Bԡ{y5@yd@4&3B֮I4?T`˹z0bkf"^kr^S~i a;9S[کqJrYc̢Q,Դi7iٽlh@.L,x74 ])h s.f'wݗ:hE,0W5דC .6<X"܈\N `;4='|q P3Alϭ`p~_]KzV+g%vf;dorފ}+!ӏ=o}3=-):Eu!^O((55g7JV:. nJIN >$O/bN(.. 4 u# PsH'bk "kSp=x%$O]_#>oy&/1TYc4pưD=nmax xQ$0Wesё!+'=gq_1sq?њMC86.k?|OX`7]<)SAb;/V̮tIU7]L8A t_M Njf<,4 O%AVpAl .rH}Ub#~B8chWHY%8-y+~Q!?c`fDz1IH#5)ٳ"  j1VsWZd^<3GN7m:t^fbCNb BXTyfmT@&% ? kH1|ړ]Lx5۟ȘF>PgؼsIaURi@,)^ZKs o -P7KA'/GڔV`,2T̺@uϺ#!@ ; 3zc7nNkNeOmm܆u1Ba`rV1T- /xΒ{pÆMSSQ `HZ?.V}2,A `fy @'w3^;>yE"K_Oc}ۋd =u6f aC 4`)Nh@ % ]4,AgH3~|쏇e/c3Ė'?%hIi04m :F>$vNo3*@/p;ڋ!XC%R݂8'g$B1}Dx +OwtyMx,~Sy,OEa+>h@)?q9*80;(ENeFɧ(4:|÷vv8сق@뮙-u9nj"_f#x Wd")^ڧ ۻ/B"fx`CM# Pz~Had@2ʚ4zLBxQFΜGND P)؟ϷMS|Xy6BbbF'؟JX]AvRi@t8k@@1YXc**.^IE pm)CX1~j3˒ۧ,>#k(QY)e_ ]V<DJj Yo ,!FƅbN@n*[]s"1̢Q35b(L||`% +~$^h(019GU`X PkFvE4~f悺lcDbe e1(Dc.|z{3 IY{zp^=7&~!k'Q\I H\T&i0cYb7P)(}tpaߕh٧-ݻ ȊH$bEH3Ebs]r)8EEmWL߯̕p IDATOVYuwy}T@cibVP @QsN# </d9y/x`I8 XzqIj/]vŋze">3y{N'S憢ԅ٥/RR%~e#UrNF⡿ji4ftQ<4גytors<*şM|o;:}3j`w1xy>/Em3˳q`&}P>_>2WޡO<.9:NG,jqos{-4yJz">4x 4 Q P ard )3'䤯4ћ.קav3O]} 柟sjb!B?&4Kc/F^oU {9%V'9K! _vPCLnԿUiP*LK'@kgƫ[j s~@\+L3Ů]EʿSt-C QSEt4 n;TJbIk91U`LU+@#w??|tk N'^U;sJ(b°ͦ/[ZKOi4_rYX G0gCfZɑ(3Z>WC"kP@X0o $deW52?ֺ<" Kv䘈1#/Za#:%]poMo~,' ~m.͉5t.s"@1o>lE'B,sT}L\Ǟ=|H|}ɭL4\Nea?H /`^]V('s?}2? ki]#S9YCk<)c Oc*|+DJ4a*5 +&c" z6iɝ_rF.M_," g2?3%g1J Pa:"4\%,[/ (I\RȒ^ʠ1{׾t9/xycT.]WiZ~4_X!"aS ??E{ʢpEWi`8 0FA3msTO Qʻ)me vHY'MK}OE?Bяz_qѲ5j?TZ(,ϼ4B!7 tanV)HP' hx/{R0ՒN0=_b`G< e4SΊ7cr{a)I~K0Dz۠<΅^!VTsКWi@޵o +y>vm|;[vJk[=)޽!bB$N.5SBv"Q> a˫gO{o ËghŲһ,hށم]@3^?%/L'8. x yĊ*.QwYÇ=a\P*p%~a9v(0.09H\]j"GnQrᡧZX| j@(bMhB^ Z‰ע~s=pk,=/&/4{ wPKO+:wK.X#o_z]mw=tioa FB"klT|b1ybƟU@K. Q?Gc%}4 tm P\D{ǏN SR@2UDEDip{0|cO uFz{b T"b"XLfrh@,I Fbi6жdI:M}`8Dx]@[av1-ؼe/: kSCXc-g{V9O3:fx[Aj+ `nk061@8 %h]\" 3` +̰5 X^Һ-64yϭ)@ع?Imf"7S 'FԊ~HJ~2HCѬP5yyd-RJm쯣 ⲃ[$Kȩ#S(U44_@-nϹWްKM(\sJ24~,3Fzū.t_ɡ?b%P64໏M /|m$_ ECLk 4N@F/tЀh+V'l`o&_i|+ZðхB@뾽[< q6f(\K똫Phd/_ V^PG`4S)@Ck ^:cBKzZʇdJ'?($) 4*syHZ۪k8w X1^ E1bW. i(L]t R~`*bl2QGt,yb (I-hE"p9K&9+QP6pH@s P'@6{>IQYdd(^<ƃָt!OCڗ.5CbźXQdh?Y)Ri gd+<10t98W]I΂ie؟ًU/Ue˴jjO- +Ԁ xQܨh]`&7kFB+ҏڹb+㗧zr` `tELJZ)^?tW0? ?\iˈ)o ˨Ǟ=j { h!':Flh_%İk+SWja4o}go܅Ζ]=]N~*fk?l8*!)2)v^zrQnxFAy+y!9ܢ36.dSNlNy.;O7:ώZ,4gĺ=qxfajbN 6 {0Y$T\1L`. [8i@C ha?p~򓶓E)ۿH|~ck㵎LћnۍT(ٍFXS us2@tx*Q`Al10BZu|[5ul!uA©矕4Q[ޣ= bh@.QQV1WЀpb pt8%h,O Ņ4w/rhr'@p ;"t~'M'/ çēGy%=lq` Ә*B@'Ipu;ʉUyWC'ÿ%+uw,`d\qO5Iߩ?O/23J?#84[ [>*r`iOmdfD+:7~|1hSh뢦%\EZCJ>9._.g2 Ni@ChUl:Xjok@Ixt+T&oMK• pZ wA10%( 5[<E0c$Se*z~8.O-cg[9 P󰟢'Pј48x?P=bM/O=32ÉzКx_՚|mh7[vC S`C-> JᶹOWg+BϨ,?-9ӈמe*y|@kWAFge]`|NgygV/"Nx`z=w ?,4p3(P,aT(}wF: n.,ݜ(YAcW~:"Wk33D ߻uAm/̍kB-N8#_&ȵ'3i1.c WH z' H B?EAL-0 äeElQ1vk#f,kXP4m󸀜ɃTu :Ѐ:7G-W44` &ڜGDaJ聈2e8(@a杀*-}ʦXƎy!]L=b1#}q"Bl&cYq: FrJJx"Aho@_L犒!~n Aba8r^?/ys7Z|~(¡e.G0 \W؈|V;KA^, F?=E'@1fWOOV0bȊYFo#n8ih 'tbo۔ZҀk Q{8FрcF,bC8|D;_WĿDJy<@1CfX4 IK? ʕ  )Nu#zp'`@`b2.c?fhWd< G(s^рh)Jr+7?CJ3Fx?pP^C(֘i*[}'#GHiBvo<\KJhPDt޵I:( 傗O)&¹pqE;KF#?ɸ1TY{Kځs4>/ՅC$qD&e?d-Sՠb1s}$ ]AotZ?YKPMbfga satjzDdTO?v8 Ͻ' 9؟N_쟌МM[T濨?2i@@t!ʣ"[`v,Z O<Qe` bԷmDO"D=U+u 7Kh@$R'A9q IDAT8ti@ZdYi]i!>^.Q&zŶ|Y# &CNy B,(5of+.&KE+/X(a }`UHȄHL~.Ƈ[^) rG~j>iȰ箤d_˒bȣת2 !Bgh[!޾Տbը>&1Gu7gMo(ݳ60;KZŠf 9LjNU9 hߧ?|2h@x 5O:/ 47u0{Eb x6{LrG/mh1ܴ Y$AvQwIʺXL#w1+hCm7*YC ,]Rm< Y.fF KԸDrz k+ >Җ^S6i,\ G hg-2wH\3vyb/ixJR( ÖWoj2:JP͵4$Beέ4@ oecmDlrŤʬFZi'u{z?M@-@d|>0%% Թӡ_.3o8cb `Nk8Q8DOCFT׎ԭiV$ɽs4(=^){ 'T.?\C;UJ:@k@Jm[ N{4ե5㾰&;<ؿ3}IIF;s_/?? .ih@՟k)NxpLuVrLC xpsܭ @WWga$"O?+w-w<h3?ޛ/hl>4@u٭w،{2OVb40g4 R΢fV$&BG4ob??'UȪ3N@M$:)&׀}vh@QˆfWFt gSnw+"4@X暍-Zi2)B{B*. xf%eH2C)_>`+ꎊ&ZLo/Pf|pMpx?-u˜IӟHϮwNx(Ogs5r ; N+e1Uޢшr4qrŹ-ۙk3^ p2_>"(ENw++%|cSeQ|xm9#TtX>9 GOLE'e|jЀH@h34\G)5ͻ8I u*<{"ʃڸ/>^{>/ =F:"WI$"-?g~~>0RA$S)yGҀH?Z(HYi@[n>?fĜ:K9N˹P}fw-druNA4`HpAdlc⦘XAljIF8Eixə4?LZ*w軜4 4 z*D^ bB;kdE@󾊭 _t.L'h:|YZ.r;ۊ+GFzf( ډ|^x9q Xfɀ:Iؠo(D4@ :{}3>˗0?$ !}ke##D'T4@<=-[[P#BE3rWWN Wx'ZB Jj 3?U;:uM0^Z'[y_^?~^tU<=lĿ{ښ `󟵘 'V*,OM5@Ҁ ;uH| }h劬 cjc:\ ?pr- ٿ(u˔F&@:DEapC DF9uRُ[<:0>#6C(p'X>_; u4$8@Zk<6TX/ `߽XvdMyQ6vcpm(8<>铽OcOGw S*5`RD3h]woZM4MuÀr&kݔB+"7oHsvKF Dzkg>g>l t`q\tG U@?zdnsHD)WUϠmZ杻v a+ $g&-_=\7|YH'׵#T+B{\}+xE(㘣fxk %ci-:Ll#uxxߒŽZ>.͋T$iMVuErh6ɀ&Gj(vawk49+ȱ"A;N@o'-*wHF;*1cӂ`%dJ]i@R(,lf]^  (h)'mddZs4g"$|n矵Xa9X3ҿ}Grj0_ؿɉI$^s>΍]MW<>%(jwŤvǔNgrŅy* Ι֙?Ja (ם]$۵g.:AVD&_5!Q| 4=8~}tR4 7fK$GP˺1'O],n"~)\RLz(s`zj <cB#<ģ;h(Qog'`lP'_iX(i{ <>B;"R~H?Hx[}-&Yt\>ͤb^rLP*Kc PY;?29OD200*OWȱ'obGEw()s!~q[d)O <ogώ]6ZMRh@!\ i?wQW 2Q`XP;ks.P5КkϼHroH/ *X+nG$I!ؔ"ؿߖ0xDNUHzcܔyU0 SbG5  | _޶T D' 1e}6ipR5̛kEh\n=_ GO [yB>nur+P$/nq!SLg$U QB(\aZ*MMIMяċ2*%=I!1-[ pI/is@3XUq6;@٢(: /㺓8Lޏ2<~E-ȴJKpڮ m RBIl17t޵{Ѐ[Cb_uō''CIEI}v줰qe[r*8R*犭6̡SžQӡ_xkbS:WPꡓRЍ-Oc=3H} INO@&b(32 %qx\^biZX˩}緓;Up_@&| ;/<|y=ҏF;ɦ?ʀ[BLs>؟ɩtH hdŜ ku4 (\iF| C#}c#U jW'2WǔWPX,أX]J-?/8eΤcԠH@;.jGĵAl-w!pSίN/p3u -l2*l#Yij8h+mۯ\1mQ- |&4hL5d kG' ? OCK_0K2Wx*q'1ݔ~Ugo|ݘLZDzn9w|nۭ-[v`#!n'k ΃ltl쟿N(iL-g`05?wd2i7\Fa称v\h(%@'F"#[*4`bTmt!`.;8k-IFKgpB+w^Su81]ӗnc|ݟ|*E750BbR u_rtR|ڑ'r@' 2v,:*U6 A8ʭQ b- `a8v-3ܚrS EuOSM>S }̲c}ۭz+unŵ̋Ĩx @gxugag;LtrjEzN'jB0 p0M*ݕxO#&7OcӁ`&T˙lNB|@' )= :J 3YÎk[ 组kDAB 㱯c8:56F?R1 5.Stڶy-a\'R܆Vse0ԒrW?v CB:X^.+oMS~S$gE<JKD}ng_M ?"s+64 ?4^ CҀƯi@Lh%SIh heclxukX趻Q i}4MJpg=%ps8 YXjX%y *_3Q[ 42~OE:}ƥ#EbO>zPc; 3Ph RJrA<\_os >Z1E4 _72/?oBiB'^ǥ_#Bhxyc:*sksWX:_:2 ұ1ʮY,q[#go%Q09&]4r;gyB$0qh#:C'4@g Qc ng"I Lxʿh'(2 @ҼFgZx"c}Xm _K(^Z-|ɛ?'$Dkf^yIp!9WUv%h h%l?/"c魭4uskG r 2պh.X$:OzU$g=~kT_DԐЀ8 /ωxiTJj:[N.:=L'ٿ s#' ~W @/ C*>VhN0mS9gb3 #Z&4@Ӵ"U׾tX[0ySt뾞6v51>ekj](׀a+%SN@Rb]4@4y[< ("m @T?6\.#x9(Yh5aO& NYlh@:_}i7\u:>!"\M_u:rJ)h@镦#_Ӈ佄 jϟrF?D*3.N@k2`КdYeɬ5"ʌ #hfn6Pce4SyU:ؑ+&?\<}X#o_𛿳&"k&n^|GUxYx9gGg쏞3fc#PdZ`[9_ً'%TW],}Bڲ oȹXyѤW|<;}[ku9vJ D|ަqTHTm4{q7_^tt^ u*>^_=A==z_%.I%UOvc ]@Tg]AX/ݝgloT@t2kd%y,81 FD.Oq5պGۇ7L/lTkou˝{y;4ۚc汢l^vN c o͔s䉧ʧl%l JS&4 :̷\v͎ z}ZzL5 :+2;;iY#s9| `@5q?e m_v7ݺS.jvS1bm:i۟!P7=&Ϛ0b~i uGuC%3"yK|OOfʼn tʗPx:r0yW8' ض-NٟNX? ?yVO>qYN߸e\OIyg/2_}.fj1ֆ#cA0*_\kȴ9k4ן_y?uu' =~%bV7Oe## :GjoЉt@ _wo ELbV9T`ȿ1ly2'`),ژgG?p=h}mG%Y_ԭ1LZ ѫ J`t6/b*9gn\wU?^r9NT\k`',/gu4ϯdP޽owZ5~h.[{ E},!\"Mdt ~ṛ)Q?1  "}8X ?? `H@1b s:<_xS2  HON1u}F'쯧:阩@0"O H0 0cIaxёlNw$ Q0bpqnV煉dh[nC?c#FX є$󇿷?%h a(-;{#]N@R\ۭ8hcNd?N? t`Lx`D d}rqJ_K#֣stħJ˖/tC s{>W.L DoBod1# wtV k=l9O^U.@0a`:K[9ضEG~gU Gр+GNM'?:܋c?)'@8`VfGC csNWSFm:bwج00Hi/Prx\XW+dt_u9]:<Ą{'@ wfo,6;ox `,( F0P?ƌá<qt.Xa?9XYy\\Nf>5qSsGP EYAb8ߺ/{AqHߴpZp8V |cO s4- bӁBY\bMγL`b13>f7%=8VyyI¯ج_ >e0>hd~<ppk?w`&dQ[j) AАv5'n+T,Mmy׻[/Yf*o9ԘJ 0Nz]Ӓs 9L!W`J`w6  @ZVƮe}fim_[L1cрa{<;ō;zyo={L9)0B&P?CC=f!3`fgǯhf(chg^ n@/.1B5F0n_#0SXf y_#0Xf|y#`L!`)}]#` #`區03=3\p#XYdKkP}KwOmX 9ɤ!`4(ј `=X\g=" Sӊ`Zh L;i!H0@12`h{G~xƠA@20́9e# 9W\i9S90ϙ;t.U0Zseɀݗs*֢s>\LsnVcu2`c\`윫,Sr,su`ݺXLs~U20ɻ 4h@LsjJ XSZzS203d"dfi g}F0و:B`Zd?SN@yS&kT_yLw&T0dSS`*u3aˀfWj,Si&$n6_:Lʾ#0f0|cӅ`uQe M2L'~l:@{YxxЈfv%d]S7ޡ'SYW#`*p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW#P!`p#(,jnW!°! @ D+p5Hd! @J\ͭ,pYHpWs+K@ @ D+p5Hd! @J\ͭ,pYHpWs+K@ @ D+p5Hd! @J\ͭ,pYHpWs+K@ @ D+p5H`CIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/minkowski2-tests-expected.png0000644000175000017500000000706311653126251032007 0ustar chrysnchrysnPNG  IHDR{C IDATxϋu'sagoH+q񺗽,+ByPPkمBhEڙz}6qN'y(L2I:*q@G@DP $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB dP:O߻x`Fe9v `UAi`##`BO5b #-Mh Fz ?v`#~ lW8 @iֿSd`G /%`n|)PO9Ҁ6F Ԩ,Ng}Ү>3|8ю#-{?ЖjY`Tc'q;3˓G_!tvA8DHd/|$KfIl_B C`)O9' {i0<|tg9PD4@QYB^^MAɿ3a]GOV"jܙb-}91*qA^ѝ?@73|SBXf`J :bf+ 20'2?1?0SJЌŻ?U#lԜ?#%ؠv/&!~FˬTQs%C7'SL?@jf`O-nd[8 @7X}Ah Fs͝3h8[7lp*20Z;vW~'fyK zoxc `in\uw>;/OQ7f~/~P*fJ<X˼_AUl_7QWbpO@:nK>~A㛻h[k3QFw(lkg4eTc0_`8%㫗׏Ͽvo NK~թݟ@ݟ!G/d׻?C5E`H0% me8 |gPG``hRD ݗ`:q2Lu1vdV~dµ@[ 4MQYM?7 Na:h=;2ȱcJ' Fe9><;ٿpwKgPΚ@^c?qooc-'ޮ{?/$iΝqmLt&Fe9._UЈyrS޿s@0e(4iKwj&m9ؾ_h@/S~Td_yh685w01mЀ9vLdlO(4`+o:@E~b&u#o>^ր5w0:3`.d6`u5d`/L? r>e@eY:BOP,o@с ~@fYZioр2`^a*e`/L? @eY6ۀ9P RP/;?1Ps<~iqΝ~;ͼtp>ʤ 3mvV3FL?;LL4`?63`d` 0e3*qg=<`1;@" I  P $PJ$JB DB @(@(%@%@H" I  @<%P  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(?X& m=h-^~|(  qMCZKg3kSu$(ECZDhD< gv Xw~@암{}k} g@ė!$jַo8| IpAG=pl/$F[Zw>"wh=<]`>-˜h{W[`6ɨ :$ l Nk XWy?)h~D>>K1Xg5 '$8Z8a|k}B($h<=  R<6߯YwIy~iK?c/]l{" Pm9"؛,@`HλeAQg0m%魵֟ނ_/8` J{ ַvZd,IpyDۂ}74B'F4z% $qk%׌+ ݮ'q VcZXfsa ˝/ F^ӻ`'MQZgR%:Xk589I$oꍋ<+]?O32"np ,C7O& &k Kk pKrK/W9I@/  ,F BݏN1 Z@w?t" :i @׀/98]@@s9J >Y<s s [ p8]  p8sݕ [0|q3@k y * Vy$@Cw杈*#@PО  0*#@Xq y{2 U'  0*#@Xq y{2V9`Il-WJX0_OUDM` 0*"@&EO@S @`"'0lxlɨ" m܍ z"d ~X(| @@j  d ^Ț%@PpYV-P@,o @` /qcp3@PJkp3U PY`a8 f+Zg f+Zg f,-o^x PCN]  M`V @CN(@ @ E@tZ(@) $.5 nM|C)`sUT"* ͊$@5 "@DI[pkD6+7mV$nf 7|ρ&g WE9 @౑+ 0"@cR@LVE @ీxl L) l X@<6r( cgOqx%0Q x Td|O V {2'@`+= @`r0yG{  0\]ɧ)0WԔ1&7Xy2 SY@] @`E@8EUV SY`*Um.j3 63X PM`\2@ T$"@`NIY2`I*[.5u\JX￳ /J'@@F\7|O@@L4V u[  )/m&@Z 5.gٶy^Vn+Mh"@9;(nlnH|A୶ ;&j+p&MXq l@r  m-ۜ\E@`sqf* 0xgl roMxV4dE5w`|M`wlvS@ v[ @7.1ۏ36#]ۭ6\Ab`K?)@{[GB%`#)}g\~.> jX~ ꤯x{~nJ[x~(`ot[V3uq@[p[6u6 ݰC~M'uV$x=WqwP4<hV XwwpOݧu(uŶǸ)T6B4?v<*at 'zP܌"0S?Ns%}z"._??k$5TO' 7j \mocvu*"Bp2|R,S]/9ϔo3|.,[ 4Ql|~@+[}0gywv:&*`M8Ǹصy8|.apuؿMM~(m/S 8e"@`m?X"at/mk!J}󏯕{R1PQw(xPbo: Pa>hڥ!@-e՚n?٦~MFfu+`ny5M x?lM/Jd&7 lduh w}_]hY`8d5RRod?k\ͰI^ws3ASDu^ķޗ%P`f#=_e?Dֿ=;$dC8˲ޝy_mB2nC>mݍ| xS4|d@)Wntߦ ՉZ T0.[=t)|%@I`-47 @`c1#@@+N6{:"w4< D A3 4C pTн @X0Ni,+ t67ꝯu%@@Vh `:1FyVѮp guJ d o(PM`yg$@@QP&@ PT@m  Fx+H˞> b6& Z @`#!@@k {Z[DC@NzY0Q{"@?f p @ @3ٗ M|}"^z"Ly3p_m oȻ̜fr@3|&B o̜!3yZ oȻ̜-@B>S&@@^wfNL o̜!`O\v v@,- u>$h,`ºBuAe@08:  t-3a,#9l5,E[l,#^x+2u\h/L}D+0 r @ H@'@\0W8$h+dL@ p&w Z7=^RO.lXMX`'&@{EEJ5lfm@(k 4 _45Ws @ 4 @`5 /V[NL@Y$0. ]q2`F !@Tpw @ l"`F !@9l 5}U aZ  @@ppwϭg p@ g~oh MJ@πS4" R(/<\\^|=BuPX%?f}A^ $8D/g @!k[B @`SJs)>4s6Q$p+_ /k\8hܗ[8.8 υ~Ov{z?%#`Kj Szy_{?!@$P T>zR_ p@wuxӺw0@mq.t\w @(0X9/їLrJG~t }#^߀Pzzn $~2 =(L@RT(e? y-# `n/~:&>( @ _gy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@VsMN k̛A4Y@Ι7 h8 3o@pdY;g  * vμ  A@  U@dy @ (  @ 9&@@P@ '@@Vz%Lr2IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/render-tests-expected.png0000644000175000017500000002250511664172106031171 0ustar chrysnchrysnPNG  IHDR{C IDATxO,y;H D"(J< d^*co,/ ed$,D4J$$xa/lb 4{ac9 RȠd F7`K 5SS93=>} @ ;Mٌ  @M` @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 3M0Ͼ|іz[ @Tr?nKc m;u <~_ooϿ3{ hoa'@HOϞ`ָQX5c&@^Rǟ g?~ 4Z7y2 7wR 7yW {Xh rkb, .x fKkb, .x X51 R-ע_@c'tl)0}(x*Lx p?c"a^G50{ ]_iמy'o#jXWMbI;@t ag7N Jw9\%u#gpWVnm;W;_t?y$TOŚ"/ #_i$tߔ :e 2w%0M c*dYWqHHUfv͔DϺ=Խ/s`Nv{. GX B(X)pV(agO4~7LT܀eWK%g7>+fzzl$41 `Rt#p~l$3}*uVNO3h^CQ=W4*wRӠuV/vxу@QnH@ǯXN@ssTO^|9.7~x&MN2wTb:f:Ɍàm<C J6<x8R`Iǟo3Uɟ-D~'?=~ gilcɾPvX`Eǿ N@E# 3nCgy}<=\@?u @!Ć&>?4>d8x h[gMlx'Z0ѝqw.nsm'ogL`/vhC[!y&{QM?3ej|ǝ}n!SMvswQM*/;Kniy>i KN1sg>Qyiڱ=t{㸃m} LJO [F.tm}G Z~x{jU) 'һj+]s_|+s}ܾm}`ƧZ~x=h1A??8Xtcw w_'}}ȍ=aNuY?U9?HDh]?]ny+g[ q[_>^fO}l%PkDx|5v>< > iɍo,ٽ>J(q1 @5o^[^c^),?#E\@2KIIG@/9$hiiřާ 8s -9C}^? fHnZzG@?Tn'0ap6 ^z°Q7rQ,[@:;߽QCP $ Cڸs@ߗ}wrYa j,1>wq?[? ?o~mO୏5SF PWZiX$P ǀ;5Pi/,?~S }鳉QCtϊ{ǭj۟Xk]> 4?av/˻y@r5:>#4߾w Awhw8z}M\v& ޮu_W/Wӣ[ 41qWjKC&v.=oo~gfyZg"wt3$ `ٌ#?x❀1[Gf/ 2 S0VCv7A|B~^A ' @o3̀_zKoa.@?h1? ?|#NwuZ- ]N._H_ʯrb{a X!*V\ghOIW!'#_fMJ;WV?}}$t7ʴȍ~Q drQw G JsvK=P<|PPX4=g6,1 cndetdYO*t˹힚5-j׭c )[Kz}5 ]gdc/6(x{`ڒC4%JiO SpB h:j ] X| 4hS`]M~QqjW@ @ ЗO@%@`"N K@V\h0 ~G }=_&._%jIU#M΁$pG1qş/uۧs]ݮ_%[ ^}V+yhcsZyj a;W'1_0 G{@ Ļoa*8  cU}ߵ~sU',#'2s@J& ޿@*e @`X+8jGW=P6vvhS`& @B92t2 @@RpC?߰]  [@<~pw F@) @(j2 UbB"M _V,)},pA7*g7^X1?C8D@̲=>ܕE\Y+BgW:_9 P@@@v DbL( @dC~vvkrf`%T$WTC-|)t27v *_@u2JV[@7%ߦd2{ xs(%n:lSN.gZb@+ZOb*b~N`Qꖃػs`3s.wr eM*r4XPS5֟+ EZ"&;' s4EoV@x@a0~#@@_d|f b3L'Z3X5v_tIJl>FעN?/Pc˭I^^Ao* 6t23Z G #];֟ʕQTZ8î@h~+kC?|`AҒ!}k z9"l@6p[4PDS8^ Z럈@럐qWQG8L xlmXAM@EpAjZ7|Жu@[j:] apz)Ԥ-WS3"pBZ |Z$&hc९4?Q| % @ Sk3%@yjmx pC< O͔J@!@H Ҝ:2m: h@v:1b  {)7O~ۛPȷ3ɋ7! ϷCHS @Xd@k!jp̽m AofQ^g'هl$pM5$80$/ n,Z}Hy Ac MV ~<֪r8hV@ߟC+;#AG |:.WN%@vQ*~G]u l"0'O7*&M`cMSl\:NQ'lB ptkA;vuZU";V vsT`ۚ;&FB !]Z5:* AuJُn@OnK؉b.D@mF\.iG1> ]-}o8qٵ~?ny,@Ry*0P.e9ɀ X\C#@͠-ȇ"g?R5@OS}@/bh%:pRhN@(/Ptx^*=PwM=,E1ى@T;/P0_Γ~vz 晅[5 4]IϺ S,Z$r>oyèw F>堁b}<= hcaxכ̕G?+C p]ėOon7&P1O7joy6/X&v[ St k<[c@ݰ@oˀ_Z{uA̍=@飼 hEf WdjOc@G oꞿ~lm$@T 3?`8E?v#>Rx9H ޮB]fO3̢Gv~8}`r xpΥ]IDATsEugi3ggy*?[,לg'@ༀ8`kԗerbHOe#`2@?SX% nd; Rٝ+ >WVkdֿ<#@຀n4Ǟ/i @`#뀴-J\ =6z9HNmYrֿQ Xw]# v]ZGm6E{_{9H_h'v{*, n&Qh7ٕ">PE OdD PB@Pv bH(! J( E1$%]@JʮA `Q %@ e @@@(Dk @ XC"@@ PB5 P@,! @(( Ő PB@Pv bH(! J( E1$%]@JʮA `Q %@ e @@@(Dk @ XC"@@ PB5 P@,! @(( Ő PB@Pv bH(! J( E1$%]@JʮA `Q %@ e @@@(Dk @ XC"@@ PB5 P@,! @(( Ő PB@Pv bH(! J( E1$%]@JʮA `Q %@ e @@@(Dk @ XC"@@ PB5 P@,! @(( Ő PB@Pv bH(! J( E1$%]@JʮA `Q %@ e @@@(Dk @ XC"@@ PB5 P@,! @(( Ő PB@Pv bH(! J( ?ʩ?&IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/circle-small-expected.png0000644000175000017500000000737611653126251031130 0ustar chrysnchrysnPNG  IHDR{CIDATxϋux؋ ؒTz)z-xlO[zj楠{^L Ħ1N|y>2٬M}hZtZ@$%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" IZIB d Ǫ>unkWM_ I9)@mH0@(`2s_Sx@?sTzp@" =$)>z@h,A# ч)(A@}B @j#OSqJP/`a)Ġ>JR @~I > d:7#oJ2 F~/(7Uv 4``b=<^?ɓU @Wr d``aLy gV_<5œ@x 4@O|^x|44 +_)/ @k'xr?1&`FiZG? `9eXq ?3?"3`] XR?[|Ԅ'@AC* ? %eEMk&H_ &/kFMQhil:DiȡL_޼_9<}_+Iv6[N0ko0Wȣ~Ils0fCЙ~_E %홧s'Ǭ^>oN OE(Pz=0x;zШegl|)l9cz49Cl:}6`{3<{}9zP)| wɾ7P d;'x#4O/^=x@A9yN<{@puh`$wx'$AJdx)DsҀWЋi&/m9%d90 pMG(lάXZL/Wl95`9?Wn:B0Ȁ鯝g.8BAKw`79m{o+;Ü`yL._y<}S۟1 PGҀPi%juL &Vfs;v_1V#9 F._y<}St A@K$7H-8h ]|/^wn{-*o]yYcg.8H/ Z+ֿ%#l:xPg8`pO,0@3`h\a~{םӗjoqN0o TPgG?0T{hv{F=~wϝӗ\nwǮ4Lm@ 2ֿ`Ihi\<^֘XXPF O$t0);Qe@9PX /IJS埫(e@La0*0 {gnS8Ll@A `Q/+W&=( 5X 0%>3L?X1.%>j1XQ ( ׭4`JK hw9Q` >2@~ 0%R43/,MрХ*/ub PMwPfM @2p}京˴k|Lj -$K O _%X930:Ā[w  LR.},v{۴)b@y>tOחt`H*d @=םAE4ޘ7BT԰l@4Ts?h$64+ mWo oei?F&zK" +_`E*1a~+>3ݯO(Clj|ח4’z4 e6}* oh`}Uug^< /ǜ1H (j7Ֆ47b$?wvI 88zc:؃Û\1,>}=ucH'ci`J5°Z2F `Y`}moЂ֧a8v@|.g_=yYI6=W@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB "@ JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I ,RtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/circle-expected.png0000644000175000017500000000542511653126251030013 0ustar chrysnchrysnPNG  IHDR{C IDATxO];cu ƵwBEq;,Efyn]4.nQ( :[K-MIrϽyʝts|~8g I%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q ̠I@((J^r& Žwڙ]KMMru1.p€08~Ts̽0%< ID1@|E|z"gN$dY10p:J00bFQ kd 1 .J0p0\%``p> >20`a;d``;><"fA& !R 3pf2VFd@L?p.`a4db 1"Æɀ msu#<?t|w 'r `"vc_)4FdW!/r#bW$+S3‹}7̀[_kaۋ7_q 3}cߔolR dL,e`~ d,ӿ]UK)M 0("_X"L,C Jkql -@ ,e`='aP~|1_Ev`y韉qlx ѷ "\(/pz~[O?{ݟ$=H[^e7'Ib`G?yߕ: O #X >?f g6lS:Mf`0YK?}h ن000|/ogwmquF ͫ,>.?fٙ] h @((D J(J J@((D J(J J@((f4 (D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J ?5tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/union-tests-expected.png0000644000175000017500000001326711653126251031045 0ustar chrysnchrysnPNG  IHDR{CbIDATx?#׾QsbGĺ4(,k/7o~h+ ïNcb-75)M]>\-/AӬC8<JtEqD t_Q.pc~Ӭ\# m0#^8@P $m%A p=/u~ݷ_n~ǿWs`xW%} וby\ȅ w׽|_NL<=87}^c8ma3zb 4vrP jvΛW&jGĠHUEJ'T"97VZnbiyLG}%HſO0w7_y_=*O{y]J?JIMU:?}̮L\9^ ps_77uv Cw=3ߔOwiV&/('TO%{gYNv(f;?^RɷG.W@A (ӟ *gbv?F }^p@ '9ĸ\Qe]xSZWvQ.i28,vb\4Țd{oʪN?WQ;v? 5% NO)R @!?޲$# ~:5` ~J+fq_UK`E WV W9MAD6gzkGxT4wj䑚y\#Fx ?|kiVV aO8`O4+N.73P1UWZgַ9Je;?߈pٸs_ ]gmJ] f87t X/-/{O|u7ۛ{m;wq%]:e?bA _{Laf"U3px20y3PO~a>.I* U~i|؎U$7*+^]˰EΧ tx$ߥmsi8/.%u|5O63Wv5\3v SϨ_[ ;O3NOնsG w.1ȝy)Vy%e 5`* *7zqdW?&_12fTuEFK1'bs Ö ˵v`$"d:Op)|geXr֮< L)\İ%(~hC]e&] $WȀ?ް&,'}#a,q>~ &WA2`P<ͪ2]?2P+AӬ_ |M QP,X3`JN(v?#eR~ M ڴy5ӿKZ3xv>uiT?/~ TJhM @LjGp;7ͧd1w)>J`9ޅ<_\wLkIjG0q}ϳo7}~7o?ky53GhL%` f 7`:d ݯLv3RjܳˀLf`$M7kMow;k7 X/_@f4 k_mֶa@_~_>vp꽣ea@(xȀ!2vƖmn"=u >ɀ]p3`0L'ErUFLf`(J04jpɀ IbLյ Fds)ӟ) (~ @]σg)_̀0Y2@DdiΟo_ LpYTuQoz^1IuˀGvt 2\nV3e֟AԅkĮ s͢>i4tݵ\YPz} N.>{}^Ew X/=2 1L hi0L~]:2'#MjGE0\d@'C00s{t >NԶbגʑ.W*iq~T;CN~R&G2~ (4L?y9t ZP;^8 3@0jh@aZO`c&#})LLwJ1f`^>m;| KpJEe# ӎkP3G0^~Mkl @P D"A @P DW0"4/]#\P$=HF ]3Gpt^#HB׀1~$CeA5#1p$H2p'9u >0kz>k@G`I4 'C9lt >b0dkzQcapg:a2`a$.7èf c]BY[JzQ44Ô=<1tfE60$77`le l@ WT;2u X/L?pk@' ~H@2 0 L+~H55`~53~L?Of`~ȅD53hL?eB30٩+^\2%ހ05`+G7C-]:3` 3Ԏ=0Pz~(ճ_@@3G%A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A ٩<tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-intersect-expected.png0000644000175000017500000000342211653126251032232 0ustar chrysnchrysnPNG  IHDR{CIDATxA M =d =[H2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2` (1(0 @ 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0JCP4XtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/lwpolyline-expected.png0000644000175000017500000000457011653126251030750 0ustar chrysnchrysnPNG  IHDR{C #IDATxAFQ]nC, r)k{7ajTKBUdp J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J q(a{}B>l!}fb>!F }&bH3Y|B>LB0%G2 }X`!JbX|>D @ `>n% 3} > D ь>0 8 D >(@NF,>%?0@}@J>gt}s}P>>}`h}P>f 83`}P> xO~bC. l} is fy :-20o'lˀ-ơ4Δ ,S)n!E4ћ i٘j21e`ck@42hc+#U/.Y6d qW[ lshd=^.2$[^ 7#2 2S2%? C~Ew`Q @l#-dz6`r8 + 2A&!%:`2@v#e&`>p  ZD3pm ;y`p@%2D |d8JH`7 @C i2Md!p2@ I3 @Ե2INMHW@d F$ MMd@ JF@H(~" D o67"`kdEn' ,N (qd4E %O@Hpxn!pL@x MyU3p#L \ p`22@ (`z2! < %,K>niE@8kdn_x@ 8tF8# MM @ D@HFD J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J޾tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example003-expected.png0000644000175000017500000002243211664235460030432 0ustar chrysnchrysnPNG  IHDR{C IDATx1V}t(ED0P& ]Wa bR20wIʂQ60P0THaEzur=>ǿOk{݇G7d#&@A@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6kA@6C@x/]M W큳#Ɯ>yH<7Gm, 6w{~^E7W@̕>x59}/y7C2wᓐX-/3Z#78gsrf3jF@l,srb0gajJ#sBk{~NsK@clќxܙ-!X%4 <7G @y| y Qh^@4_B @@ss͗ ' E@%4 <7G @y| y Qh^@4_B @@ss͗ ' E@%4 <7G @y| y Qh^@4_B @@ss͗ ' E@%4 <7G&߿{{~# @6P[E  &M^:=& TlJ2>T8s}I췺gd.#;`߬NT_UdkoI*K?5в>XkV@)~0Ǯ~NC`( ( xH@<$Ls}E6Rŗ?X @ Qh^@4_B @@ss͗ ' E@%4 <7G @y| y Qh^@4_B @@ss͗ ' B7P?B OuE,ݪ#@S%#1M,ѫ_Um@@l\)FgzCk \^"aMJT.ZF/p*' Hëoǣ^TRʔ(}+.=e (Nb$KT* j4FzC`,mz4=m$p k^$XYuщ@o M@y iHo"P}Xp >y|Lx[/Q}Q֍ӛ?@ '; )Ǟ o40[ynGÇA7ئ8]]ɤ?|s F޲s;?zH$ gj Hƪ@8dv CkC\]̷gV x+|XTaDa1,&pf$fBM8 n5A d*|SP#oY九U4ΛiȻ.`O.U6*B }3B P6X C`݊ , fY|[6H[/0ZIZyˏ oho8f}`oHf|ha! mkl( pv` *J! fp" eaFpvq?) ɖ9B.=p=y|j:) N'8 "4I|>>.Oм߿M@O|A,7pk zb@~bXn8hzv?~'?Dz/9w=ž ~bXn8havHbc@S?_^${Ȧ;[? hpybXn8haAZ?~) œ# ѢH@ %z.EISp2)/-ˀSܷZm?_ z1pvn=j.+awe(X 9$H@( 0Y93IbB`O+`![@bISd,kd  } `wS3`=-5jemvM@\9~ZkN1g\I !)"Wa5pMכSL]4}պSS Wy`/w:/;3峉*apU4z!@/Ho&h?_ZI i6)5wc .+U~lp~gw }*I9?W{ Z,ļ߳ Bw __}vryϿnߴ|;QoP˓O3OvNXynOZ8_X{~k ]kxz©qapi2G@Y|BþY&-P|{2|? e5fxSvCxX'I9| K-~zߺ h7$9m)Nݤ/`W~'A`?- pݯ׷䆠Sta_w~| o|[<!8+];nթƓ b{$pC0R<0o%y)E0RxE= ζ@usnx$y?HB7h%~_~1 冏nn pMWYGھO>ۡY8R'[~+[jAo:< ^1u^]P7HL6Jb;gf6' \ú_I%gj`e@]? r/C\%m0Kj0X; \֢LcK6[YRDZ%π d"7-J<ɼ`E3bdԫ{ IuD.Jv:y\$E$pU߂־`-ٛ}xdh\յU?d-{W޳M@ҴK,t<|>~_LXP޴߷U\O&Nj@1+ :iiito4"{ . %.Ml!@@IKpib Be6H\ K[ B@(A @R@\r&>wn_zn`7z'&@`_g'@n`~?#Ueݿ ԟ^>`F_@FHQ0b#/ _c#$@eǯ @`T@DR+_YDq @  UDQ*mH@tuo.{ k2 @6<\dv Aw.ӗ@ h- USk]8^M,&; @xx55"D Ԉ 0K@\e=W)ZYUg&SX @@,FK^@ K@Ī @=}9Z,I-A , ꭮o6z6[wAϦaGS @PC;)t15  i @థ50L i @vdv^-ԞfB9`#10N*0/o%n+L V1pa @`M; 49h!?VdӉ|:G("`_B@O:@?mxjd.w#җFB̒8 E*,0~z1P zG[pC7x7=߆'3e==*9{R >.%yߎDH`&1PQ#L^`UUvkbzW? o5~0Mf-j_98%AU=5oSw8r+`ߨޭπoL[^;`KcMLۛx sO"Z};z 0PO A75O=ye@wUcԿyix nߏ_@`{G ['{T\Կu#+A0W(g.uC`{'B]'?8}wMjz o{O:-M t_z+0f%o.[S mښMM8fnzcbyalM>:ؼY+͇x.d^ۂ"#d꯯NeztP72Wj?ZY޾Xn~ |0V91Uh4zJWj[fPW=[FcԿR<vMRWEC1`/UQ;QO|R ȊjPwi;N#c=[& ֞Ux"41ՄufM_U ~c v/ޢfEū`PGb[SŠ<|0,߾M `_ξ #٢ퟘo1a_vY7Xq,F_M)JvْiS =iYr`J ]*zoꯢ uBF[IbB SkG@9jP{5۳f=7<; =[}9B(L+bRmQSOTP 7n|oխ`l9FU@e٬Sn6Dju5O Xd_=j\vUyi_M);kPQ TT]17mExXCu6M{r=Dh;ٿrp[{4eCs O_>j_` *nu+#gGvcv9g2>@ ݭ@GW>fu]}Tb`u'0ϕ߅G@$6Dh:{qҪ;(^kn֒}]S@^! f A1 QL,P+=*9ޖ,wYl&VńH@*b(x߄RQPScC10Z6g9hJ/Spr+` hg a7 dHv)&P1J D:WVp F \/HlB@l#bcSȵaVm%swa#] ۰ggI#켺Wh W#\9ǭ)p'ByhG@5O{ -vVh񉐩KA+x&K D3ҕ޺ş|b8IDATm|"d/V` m+ vĀD=vw~0q9P}X$䃁࿨`F#jJ#[>2Vq5 xTcU)C`'Bd! xTytf|<jJx@'B[ۘG@Lwg ,"Lj+PYO=,\;5.Pn}"dHǩL̉S)3Cՠ}0qG+l|cg~-G@!l@Dw7j@wA mH|X'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA@B&RX'@@ІIT@"  D@)a @ uA mH@*bA1IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/ellipse-reverse-expected.png0000644000175000017500000000567711653126251031671 0ustar chrysnchrysnPNG  IHDR{C jIDATxݽes+$ m I)M ?J6V-XVZJFDc ".FS$u8ݗswv3|vX p I@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J J[{7osղbq -+uЉը^&l>c}!S"\s/;O>_%{i@δsqMo/5 dR>xA&~yWFlXe?}_յ@ƶ&ʔ`T1_v[y)J0@q.;O>뭃 lMk`J e'~>Lzϥ[!q.0`;cgрVd_? vs~c ،*OW`zLy# EoX#dy# 04[,\51\a}\g]tc}6g^v>D }6S>#11s $ivza 3~>t`e>pLga`>֟쮣w*L?pk1>pCa>֟kcwwky0vv ?8_9 0^iYv?`aӬH(~R?Xq-3tL?-Yq1d$`i:^/Q,?~`a~{Gbq +d1^}dM~0;JL?\ip-ow\dM~0S".O\[~N ?y׿s?a~(M vz~S#eI1OL?~"L?Ku`Mh?g9W1֟ ;G? 3I/T`ӏ@˙篻 W=O]wfϵM?K͝F#׵koa٤~L9<`vkM?4X#bi`֞Gx;8AI{a<]Ng}f4?;pw'cS20y^C.0]Vb8&ѷp чkk'ЀѲ ko Ň`Ѐx>[p(mҭ_8`bbpqO>Hp^ 4[#&2>o~K'魏.@ w/??:=Wy0mp\<Ɵ?9 X׿q͟pXIBYA.-fc<˷ y@Au ЋX'm7 @N =8)N  u,k#"޵ A[bs!lGZu @_'7h%F_L6 ՃAFBtڃGB_&h=IH_pzu ЗaY:ȅ *,Tr1q1 %A \z;\cRS,N-fmWsW2SG@??!Y@ L1bt={^1@gC-oI @F[FJ0b@P@F0{41@`ÈG,dHhA?tb@&/%_uzbɩ 8YS>V83pԪ/Nw@8ê#*Jp'e`' @%OvNb0}ZQ > K``3bV%(RGW UO4@}"ҵ*A1PX}vn >#d_b+F!E&ei G "1J80*%AM'z|xi>iG{%E7W2,+z3 Uu^NV ^зkFTZ?]Y._;=,=~7.@} PwĠ%ӂv|'/~obF:{Sdv18Dʣvbp.[vGPb `w\J++;`w\H F` Ͽ_F3տV"0HN}&J0S > @ḇO}D[Uwgd]ӿAr]q«U bTOSqT,fů J%$[0HWS{ n&ljXWHƓ"F #0uN'WˀuV%(ҹ ח*xWGf2u.&jި2]uoW_{]':}x {{ݨVޥ2-.Ջ4l L.p-9^qOj{ZY;1瞵?)A*˹ݧ~`4 eNRrT,f=@~Pv? @VV|WUӿyN),N!7s <75_w ~}> ۻ3w`߾nГ2P ,箇xe`J@G7Wݛ9޺o%kk^\ld2&+pF%9s@+˷Xs' d_?T=h@ DT=ϋlW LoL}kQ0OkVwVQYf`l2Џk%r&G? I"-f~]+yUy-jw74% ׯSu{Xtv/UuO]s׬kpc~ӿy^bwdon X6~/ VW]Y=7g{!#Oq([S.\4l޺`ʼn%0#Wi޷3`ʼn7,%Э~2ףPUw:cqۧb14s'gg'cqdJiKZV쾥PϴkЉ3`f&:4P Vw ~ty ھB^m:F.O# 弪L+_A ȗПwe }oq@w)YƹEӿ',a~Wy@~^3n3f~>YR?f^˷弪 H찱o׏2_ g݀HjWlfo~fH9Hs%1Mp720?2ٽdl|3 @֯_#ӿUsQpo~ezoM?82[Gid^FҀ:gL$3`!N.uMK`CG\z[zZW_VnEO.*OfLJVԿ^v1}Mގt\\{,{__GpOw3M]߀''x1`~׫#}`gn^ 2`c^T{{p%hD @~Oox=_2l2P\XWx@w_Uwݍ<'g`n@w)/ygtB Կt /ypM%p1^ohJ#GM1~o8>b:zŬ/#q uje8.޽@Sݙ: XN\@zT7?vg` ԀzY &`0QUwq}*X3q1 @P@?STsDޯ>ՁtـZ7gYߑ4]gkv_`(Ӡ?w݀ug9:۟,Щh,gM<>ʞ9$f|u Qs/p+. f pyH|wtx;CMW;9vX /{ë{v+G?{{oI?Y._YLh\dM?8 ϻ>?ݫ#Jտ>>~?4`1ԫcR{%ӿ -g)Mukӿ ~&n@khs[ʀgNݙ0wMu'd32@8}OFv53J@ԿӿR7+Y._ Ư< \<*OCb0e -p# (" ("SUw0JH> 7WZ3KL?eR@ tC5 XZZ'lz2`#7Sk߀<4mO2/z )Q`7ډz`gԹӿ 400#g1fkw-|OͿ? f|u PrՆx~qzV#㻣SOp\:X{|x_=$n|1)?e9? Ts8 J JB}OWsG#p\:+˽naL ۧ fa| 00Vu`Aa"Y._@@G@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@PDtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/cylinder-tests-expected.png0000644000175000017500000002653411701151225031520 0ustar chrysnchrysnPNG  IHDR{C IDATxm-WycL1&\Rj %RP8 Ȋ] AQ% Ui:mJ)֎B:'AڠRVm> !H( E|/IIE-m u=Ι=3{޳33g]ٳgf[?3/9w̑ @94R@jo}\sե_X"0!2_< '>;x O` 8~#s{"w[. F'u) \ ˟u|SǟzS,^@,~ )p/iz!g 9Ѓ\Ȇ3إz{xL8F!LK@Lk>% 5zC Qk6yzC`d,Q@,qV$ @``jL  لKKUc"@0&XXH6!@g՘ 0@@ @ ( 8D`M DY5& lB% %Ϊ1 @`d,Q@,qVib-ztۭWm] ílIE EM @`neK,J@,j: p+[ @`Q`Qi0. [ْNiu{`ӧ^@logOZ@zt IY YO @`{=  0k0H򳛑]@n%puh%pt$(T@:Wŏ ( v;* :sMv'@\\gN  qSO=a ,[@,{~Fr:նW7hxj (z~Soqe*L^`juk$y$%|/V@;|.u1*S|I-/ ) ʜ-G=]5be~ Ir˨yU ( m },N#MZpO7}8ޜi# 1yR5W]:9֫&7[XTfSُ33t?b~c=?ȉ )tWe@}tl`OR" цohs@= +_ֵxn''+gltKI?p$r;`!`R\rlDp1|X37\YC>V?rof Gtm/߃MqJhuuzscs?y9{\LN`'>; @``sI@ggW@w|!~Ya!9aN. @` 0c؃wQEp/&:"XC MN`ǿZ1&KW l)-ۢxOR%E }{Y+^~;o-jlؙLU U]ܻOȀa! e T\R kXK_V˳߭FU 6ێl+7xUWNٮ_@}'?j&_?Ō@۹S܇thb㔷W~/~)~W"RLwѻhQ.V?7zM 7d@e0)os/x?h[= ^ 6G׿ 7}?PHUsC]Y=Jʀ.r KoUIh4e@O?o}@+K +gyub@4Loԍ& "6r[@S_Ǻp+ΗWZ>@W_w}5zgC 1˫Y󲅃 tU-:̏V7G)8]f* ;q/׮vU]O^/o=8~Kq~=yTӸF?Y80}@XS=9t_u}eZoҲ h%ZJi-Antam:r&@ YOti.q&G~8 w}OP5gC{gEv~qݝẁTW9ntcmP]dFnsXeOտvv:?9_7fC[И% Ɵ?9~G}K7B{ӓ 7*ozh%5^wFWƎ۽=2 }kX^S *ߊ"O( `ƖXXTeŬJտU\E:lUrZjrDžQ2`H#H~ƻ2ed=1߸g^xۗpui/_U*ϴpOz9w_rZ.֖_?B9yPY]&;y=Ggn2A /|77::jT.6iǵ?mڥcyMWmf@ sD$@]c_˧ɳ gRxqHs|ۿӳտh#Ua[?X-;Ʈ=i"*b>-V|' ?ż߱Ycq]̀|id@y)/ޖ O]~'nc`]VjeWTz^#;_`f ]3ilq5l._c̷G+Ch !V*ovπ4O} ^π\@qHQ1 {z {:CVlT; hmڱwc?U/y=7[BQ1p2(l-r.w:hn=ͼ2 -gA7V+[/[]CMgt3bOR ,ΦEs]^f@@^FW7غtM} ;`')P]V1yX,^v{[߾6Rl,8yn_x P~5 q㺻O5F3F4]itcu[e5Ͽ (ev<`C4F!^[v7idGF>rc^waz 6l/;/\5_a[5cÎ\/s7_6ƒ2Lw7aSoTn}ݽzݸv x]z^u7z.?v닺XN|]w+^ԟ?9Fڙ:6R4,UH,)' oXG^C2`ni}j1~׿|Q>Hpׯ~_m /.9 _5~u3L׺+S>k ?|hujv*_ 8-D&h8|z1ww,MW׽BO=7k'l/ƒK,e}q~%Z):pnx}%@*O,ënT7?V5yp)Wϟ_ Ó)}'~y]Lw ?GߪoS>9?<_3s2Càg?rȅ yօzϗ[v}nOl{zsX@,-gU#̏pCWyU  #^o7^ZkH /ă]{/$o ,ٹܹ3rgN~'yiÿ_+5&Y<|HT#-l{}v@c?*_u5gAiM oqG@ȝv> _{8XpO Xw\qVe?fzz1տ~72=2}㧟:7p%y'ԟ>=^?4:NB`"տAӃV32@ˍ߸xYz 7nt>=o5R4#+RݯҿꟜlޗ@U[w=JGyy);^Wn:? H TIIP:Au_o_W}V?kخw=omb75Uln pA&ZZ[y!ζ▫jǾɕU-W`f#^n@ՑeV{mpPUo:xZm7uShU3Yտ?OÀ41>`k;jڇF/*X5fտ<տQM].T-.[;Y|}C3^V֡Rp==coM{,[3g߳q>X_&._u꺭פ_^g@)YOeX^U]̀m5տ?mAF[;}H^KyiV_r?h76n}yZhҐ X1? 8dlT]VC^hĴVwo=`ZH]_X_<`.Day&`R k6 S㬹 H3(\_&^`m8ƒ=7 U?n<l]7~?W] K 䛀O(OUܓ,=߅7_ y+A}WȷB;u볔frƥth/M_`W~_D>^7ٯmsӟ_@W\\ju|еz_U'l;^7x 410Oҍ EX s H[WavW*֫vbDh\I=տ>n} ځ2`AYh])ZY\@u+0"ߴw=9prt6:}@?WFG]Z? ^}ybNR_\j@=_z=տ~-o\m8= Z>խ5_/}~7=_ ?v* 6 Vwǚ_5uGon-s/[*V8,/]X[eQag7k]=1]nFl*f]xUlcMzT}8nݷ_nߵտxao[g@u!\rܙ!fKկ^wʗC>vAgz{Votޱuan6nUwϿ~ hg~%FCX7:7#à; UL VW_6͑WHhؠ :2Wǝ!0 PWz 6.o藁7='0zV_b h{ʀ@* Vov&ڎ``SS LsvruS=p7GGþ3rx0?aF{ZOF eW魗_ %]ӳ* ;Ń/cK N y .jYD{=YOqP)|+Ot&}}:տ \#v}eu?J]3wZͽy@֟zez Oܹ3ں#N_xpTJT&`˯l]`?h lӱ: 9꿍TPH Q}+5wfԿx꾎~ɝy5ڄ|$NN@eJ5?)e@ 4iV^+@ J6uAXY  kuht==}*3سx+ ;7x2`EohK!J fE!]sե{;^n1-.&`}1S?uh%@` Ź7]7./ M\ )5J@joo#Miu(7 ?= SoߏN}F"+HTe{mJտtgX"~ϴ(<rQ$ВO>Y;g%?Rמ62Ţ?ʳX ?!J٦?dVy9l F9n+ρ}s{@W5>=; 6O(37xbUX9 8! NpLEo0 P..#w=w>TN?}%c}% fr&TΤA쉁g޳مAy]g" ]K te@[AN< V~ykBlZ37P'=u?wx5Tc_@xwyI0~@,!J@=6 c>֑k7Zy Wn{k]ߵ2Ed}_뒱~/稞#^s]%g߭R+yGP1=@_>ә];n^ߚ1Ob_/qV4&wLЇoߙ{~~c8@39 ؽYց/0$P6ͱ`c L5 gN^.PO_8dM$4 0XO~tG |ramI`Dw#b:^vǃ8wqZ&@@_ 8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@8@  * B5N8ge P~ @ N@k _qZ&@@;3IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example018-expected.png0000644000175000017500000004524411664235504030445 0ustar chrysnchrysnPNG  IHDR{C IDATx eWYoC*U$$BB NlHaH4jҘ`@C-Q[Z;HE[l]J%t@TX*~{33{Ϲw]wϊ| @ >+23 @6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>0ym2/;C&-P]&ba.A;4̈>" ;{7b UpzkwAE{=2C-K j..r #C~ #& @Vfy4 ϾP-s dң |ahh@pPhsm:IS~wr?u@]HC^ؼi഑ŵ~|Oiͷ EUS=>Ws[ŵ/=cqB_藽m.w' wu?4}'݂6ր ֤>k=!084vu/ӟ \{Ý=B Fݗb \Jvw J"D;1R|1PAoŝ=v9E?%IC` dͨ-{#hvz 3P#ot>9w&cEv\-75|/{1ڦt']1׼S"\]|tW{pg (;_Q^ZTzHܬp卟 1[[ aNJAr`;6m׈nO ^饵sf0m^Ai]wAmѪ _yN m<JEfk^&u:#?]UwA7-H>4[hT[CPw. ,{\NI5'0@ ͯユ&kUWwߠ;9rh轓NA}b}4E龤 ]Ӏ ɁOi"m[ذZ5;Jwm~MGٰI@8M*k?ѣW@р&] u|Ϻws=BpO}=7OK~nz~iap=7(^tyՎޗoݮ睽AsZtw&k2e@Nm+H؜lE}%όչ{]X0zآ<Ů|px u[~'ٮQ8U/2mLpHOkYDPE5J@Jx`mi؟$V+a MgO=arloՃZI1H_!@ebX`z cs|/[xlIP MC@i&SׇtYoӡd`x#6lZl=w߳VmwEJ>}ȕ  v]D;~Mvyu.}DP)+~ )3aڇCTiD=FVz~SIyӀ+~b}cOtvH߿3DPjY:g:q|ϞlOUZQnemc߮+|s 0O\#K( B+ԜzQ]^qNRmTVidS.:U(uwvZz+n y/|`,wxdΠdtMe:eA+BZ8Wq7âV ڃXv $TĶhⶂu?lxJ NY_Ad9[FĦi7V MoJMwnF&Vauljqub1+N [G6olu"-gxU Ŭ-p=n"S W,?FoǝLVJ]a#!̍g =#]l-W!Q2js!(HdSQA.ɤ.FХёO;a:2Tw8ט(էPĠלjV]No漙3O[|fϓM79#j許Â@ElW6X N@:e@`z鱦' PQz5J* WlٴJohZ5+-{[!ZzƖ;_|ap۸$Epj'>p9uI@'~cϞ=vZ=Jl=j[ϯ9ӓO֭Yq+V >5\u=%!s?'oKpgߵW~By>u 9cA%v-zzsu]>rX}O/=WxQlzqו󢗞z30,<8XXXWnJ7_o +7jt(wLa󦕻>-:O9I%棏4*/_ʞիmmebV>~j}oN]~1b-U+r桫3WǶ*#X +M_jIlq׹î/E]<oO=i+~+ؑ'v\rcO$E_qag`Hv |c/9u ?t_sЉ~V} job}ړ{o=}ؼ݇d5WԹU_۟Ǯ5ǞĬk_y'=Jnv}o_j1֤|5&C=r@~ Z~{O`_?08m}v6':t9rv\V'^ȀQҋm^|ɇoZBܷʱ,bvIP:p̑ytQws-+MlMiby؃ٙaWa \ygZ/ FS_v޿U23"y3<|@qF.PKۋOoͯ?C1݅~UH|aIp믶ޕ:((G2`mkЁY2¶T#pNuw~s T[DՠSH̕éCr#}.駼Em<0! _Lm~)֣J>?I)pn_4`94nW$RvbA9a|W? ~a^w]\$*2oEnȺA?J<:=Id_yKҽ}[eW0䰿pH$w}iݑw؝՛a!}]s7kE-^Pw} z K>b-gbL,NzmQ@^/|uOuwuf6$܆.)qjt'a}y h']Zێ] h_g9_܀m+gG) ,)|O 6q=)n+m䕮bOޥzl>B m}Ш|{٠lvn L&mK~>Dgg[w֩01i4xUm:=(t.2y돸z SLnK5T?ԳKmxG\Xыpߝ$4ʷ0fzxî}x ׼p }jAG;%.Vڰ+'M^ᛇ?m]w!ѹ=pRxj`_(}i(m%SJ`?Xe"N_i3=0MGv9s?)]Zp_0ٴ]{%~y,pdr®9LWXτo>zPj'ɍߒq͖v mudaW9yŽ[q5zx@tӭ=m6;AfkN;g8pǫV~?6tN'Y|*Gք7fO[@"r[kHueM&aQ)msf&y- N O4  x$ǘL]+xonڞq[`9zWoKd_ r0p`'ާO=f&ցU+Oj;cy@z>ú-*%UD=Z0o7Zdno Ø^㻽#Û9LԶu=ߵ[;[|?!2Z^"/uj'[ nepp}fbݷ_}_I6u读W)H+nN@Wӟ_zͯ,XӳN\|##5魮qoӧZWb™F]ZNi^Q-ݹ'n|L7ȻWjs -u|>#9w5Ԗ=iBjܤWf%Aq}wto@G [ %dK]b}Qiar/ܔUnFxu0Q<:Ե062g-_(/9*ʃbowkxNaٙ6DKOPkT7)(8_&zbѧI8zjMrb5S"Ay2|^הi9C_|ךޮtHo1'km9| Ics~m|(Ȭa0&h|}Ʋ•^2TB]@7ߺW1 F*6!oo;2-إ˦w3Vw=/Qkdήt)(ĜX~Q@~9fS,dY\Zl,cH;*%s @S) 7/rJ9:+W^&_Į6K793GR lX IDATf ZZܚ*wL2_a jL|2to`/1־Sh IH.}cͿG~Lztƣ2uDЪY2M^u=ޤ1 V) qgVo&gnȋO=q6>~Ӻ7';٣Y.AU$EYT۔'XĤ; ǭ=|Q1nƑ}"7 e&dU,bm)$fH?_n *9v~0[XJWIg˕ۥ.\d%pZmv-]䪔$T~wۣ(?p~=?d*E)/>-{ AEiS| _u'!60Z~UJڣ~]?5mZ$V\}o]k'M Fvh \P/] ^`?o-ݸΟrNIϬ.%Wߢ+6N^7e&dg^!85N6>qlʼnr[XyPu0oMbîNg5Piefa?贆j6a<?e-/+#n%!B hZFAI5@}pZ'_oV hqkU:X I6=Ҿ~JoܰR sr%Vk/ 7 O#_iYaW)ٮֈpoTB~[] Y*Lf#EBڲ|ߢQm~SeLefJA4~w7O`F5~~?4sЉ [z{fJêh/F.|Ke[?ĜvVKbX2-XfÄS__M߇&Y?UۙfZVKMs^\<¥_C+7y_RT`e 44cPkKZɗ6QQ yAO,抉g+^Hҹl#%*}~elt[VxlH߇vwS|ԩP-NeNۘL뚞+ów%2+?,S&M.J7ZgIz%3# |z,Lr"}C5߼cC+ʸ@cmڍ,cÊmWj?Dx̣ L3e`Wנ^ho.2"Ѧ[E@Z9H}e0#M6>!L)Pf.x۝~}53]d8ANQ9yh̦kP)AR92d/vݶ@5y536i9k4:Fc#KfZf]SkH3+TX2H?kh@fM2$J4@;e"BəbKDQ|gvY%ejJ𗖿ݯgM>Of7i&mSkkLVB,|9E*?x]\M&f2L3:gE pP@~?.8-6ۤ. h:<\mO_cmۺ[ bxX/7X|Wqwoq#qKZpG&>%ͤfi26_Z_w/y9(śMuZV(gFr۾ h] dK$\ p?]x_gd^A_ŋ5QD|U׀{7Zp/$#c[?|y)Q jR-f}쥦Z<݂Z*0ׇ }>m~܅E ׍LG>mvZˀB!}?JvT&`|]roDPş Cj;8[l\M5TR7)`.΃)e,)A4.*o=g,ucW^vy{Z1̴V\18P-rZIq .GlNvSjuU"iMّP 4Uֱއ.Kk7+b‘׳6_6[k)~zi%{'SᭁJ D>^SAݲH \ժ ̪>=u?o}&z`;Tzh9 կɳ~:u]1lZ<bPSlEK'Zw8k猌&0kG+jp^~#'PfOhxǺN[J mIu܌v!JwB>n rfG^&"X,cW|g gNeuS^QViχПyj\zrGKhrÞ$W"?Se]@1KLc9nR G6$_D:||Sykn.qҖRic5ߢ wȧnv_EœuoM9ݽ=Mh8xahF2C@OwLSۛN52q_;: +- |,^O!sWlU~ytXfL7k9JH>rΛ# 5ԒT}P '雄wrÿ`.zi}V+TwrNd@c >>#E~9n1i9yZ7X̄%w67^ 9!(PݒAXT]UX#L=m*%R]^>L /_ w*pt4ɃWq.`;h2<5=.oGxo'_,oK'S2箝u;~̜,¸8cA&eߏzBFG3#( |}r߼>: Z\훦>ykBK(6_Y|q3wxuiYL+ȒyW_QF`"ogIXJK LdB}z)Zͩk򰗞˷K\b;…˕{Z`φ3ܽ|8;Frz/ZZ&d䯗^vGA( գ t_X9w߬H625U`Jsھ/$ΐwrVGAYі7VC} w|HU/ceNVp3(h+f ۫cq_e@lWx~ N ʄlW 96莞7n5yw̔U˲?GZʛɯ^{Pi$l:\†JY@ґ-譐.}śr_~D M1tyeR0%X.5 16fhM'Y㗻+2>P󧞐<|[~ӖRe[',x_O?ƿMpl53 ]_~@9ZeK!eI-W5mfo\Ϯ-J& 2A@ixΜC@m"-_[X:j֫/zs٠i@~䢟D8vZo86ݕI&o0zClỌA~Kso1}ִ\}4j=$z=9qfwF]9LFǫ,?[x r=쇏d aV_ns\ U s~I~_7;QЖA6g{I-ZYҳ^ye.$<h0EӞmŏ^k$qL?r^ `Bzܽ1\;)A)ZPTR.ΉMpWZc|~sbKD+D/~GQfOG q_inq@`֯I(AZz, ZQGq?h~IAڜ9u-<0 xdQ_՛K֚Vtj}配f|o?koH{2ig d@qS d8%X:I@-9в+p2dN)')y5O;`0:kOu@uf]D. ű] 9ߢij:pp/{%gCc( { CkKq??;N踁^H;NVb)ݑhC2Fbyf+s'w{G#` Lĩ9/y$ &CO/yeW[/ygE̊|;&O?@V SIDATO[!/ymذd 6e; L{K3&~{hYS/b$zA腙dMMdO=c JN@f>;"Ts}Ÿ sg^fwS6͜0s0iH6n@aF1uN.쎩L .%xfsl^c=6^ 90@`YPDz%@U Uhul囁SkSyd@` 1P#}1׹EN> YTȃ \w7 ~i( vW(qʉDžpguՔDλNr#XX(%*!<Шͺ1e]rt<5wuQ;{/}૕Q!Y}DLA&0F̟]_%6i2%Au`4m9A̠YPKJ?>>7?i$'1h8u <>;x{cLycxUmAkt$ 7-'dt{>Jiԅ1rh ̀0t @ .X1@`@ ]c 0 % .@`@`@K@] t   3N@ @f=.7- W3߯  Q @ !3 PP  2@ Q @ !3 PP  2@ Q @ !3 PP  2@ Q @ !3 PP  ex@9Njڠ $4`%%Vg>_`&o@2Ae 3|i@E~2 D,L s8 O2@cE:v R{B)s8b}Nf= -@ P5gO`;#hFhƏ] 0u w쌡99CZf@H+]!01 wČ=@{,i;ZBw H%U@.p2lDDfit< )y@M(i^AA M!T 92@o/'{e.'KH?.+k DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%Djx @ DJL@6  ) R3m@>@ R@g|@H ϴ!  H iC@@@"5<ӆ "%oKIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-overlap-expected.png0000644000175000017500000000342211653126251031702 0ustar chrysnchrysnPNG  IHDR{CIDATxA M =d =[H2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2` (1(0 @ 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0JCP4XtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example015-expected.png0000644000175000017500000002074511701151225030426 0ustar chrysnchrysnPNG  IHDR{C IDATxk5{]OjGM_DI#,QA1ID.E^)@0* *Zף%MVz4z_Ny.ffͬ53yq͚5k~{?>{^ ܞW  @B@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6=@Pxe @@W6@@ Jo>޻_g=E`e=++I9q{pӟzgxry~Y ZGs{k@CaA,o @ @VUKF@4XWޝM) umXθ9yX̷7qߥ"sS^/}ē~>[S?aZ$xv,08q5fuwvw?ypcaKűq8oz뗟ě7XΟGs3綸2?WnۮCP׵f7|Ç(-&hF|[_7,Y@,{{{`O5$·n*zx 5~[|W+L4hf*?f髁¢orZ1o1p/?Zҁ4yw2LjW1P'kU Iy΍--y۵ZzE^j~o.|)m{Ķ.,.~gfgOf߮z2.[>[^~GYF]yOyȽG𮧾΀K}P~hyբoWlzXO1rjW_{ NqZ {}ѓw6#-s-9xP@$ }Zus{#[|Sl֏CzP#.O:.M.ӿ~3L:}[T厪N踩RF!v]|L|ۿG՝ [pQW}E{YF{ns*>_o6EM%..Ջ_ೱN\cYuGDo\ohe藭}3]ol~î} T*M~wf?oJ~^Ȼ}'~;~q|p*ScM˖UMyG\בW~i_<}o<\ZO6>5' xK;%w?g?y۽O=qҹ~y4콶/77rM{{w;?J?ǿppcj|;?*͋Zy_ΣS46ηklܬ`Vغ*}b~ۯzuG|zNo߼'}gO}y}0yWu?8MZGv8}p. xu㟸i]ケx?~3;S4\7=SW/7O~ߞaDž꼧5m:yCoV_?]G~uر `@3;i2͸ :6 _}Np?b>`>8ݝ짳^;59[v #c1 |S84wO\eRsb`-]``l|6- Lr'DPT/MrmvZS;d w 嘹m0;"ˊKV`$HEF_~v&A˂.{cA5V$طu\,_W6pWg_iƍIP- wRt>K$\;㾮+}9v.%3 *_tg?G{o vW"KMMBl3imk\I5vu5 YtПEN~qgv`Y S7yWq7PrT`tj 8'8\EĴ Ç~%WxT,8~'3o:^& AmTso?% $(J g4+;s㕒RMgWd~}3 $A, 2IЯN'I_tنMܯu]2$AIвC&_;cɏA=al sXB4mEtP,$A$ C/52ג{Z_rs԰$AB``/5A0XaޭF`%`os{v |y:`%p]Oڗ-bSq'_~k>9@n>[_LQT@Co! D7K1B@F1PtXHk>nnD uFPAA 4ۡB tѿ&n[+  {?&^\}O6-n`إX~AGӚ_@m?eol C1P` X6I U/iF(&ACBϋv;Y4(5u!Zy<) *ZN0[p=%:.v:&vr;Y:4;Bm&M>/"0/F裵$0mǍP vCϊCB]˖h9o+|1K&;G_U:|[˫@ Nϧ@O}7IhF y NH>0:=uRy0ű& - fW;LU3ƀ/zm$cfz>ޘ>tUjyb` 6 o6`]WXNI$Әg 15\K cݭ/0Lw51P]e!h~^x1WZ1p޾6I0E 4ߋkD.+9:k0{sR̽CY06ҪKX";_l ݔkLkgQ1`mǀѿVHe KR.wM <RFRl>cpw@?/gQ$1`ϱ8pWG`0dw2-0j nV@L8:4λV@ۻR`P l:8w^s 7;K@̫f ޥ}ۣ:쟤.:'0nIvO=io8J;VYx+/dH ]Vc!'2E@tZW0x$VkKAV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJP xIDATR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR@AV*JPjX @ H@5[(@aM l @5@PJR7=IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygons-expected.png0000644000175000017500000000624711653126251030427 0ustar chrysnchrysnPNG  IHDR{C RIDATx?n{ܧCE wTd3,.ݹR:4- 9sy/=B|o@o|  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  rw ֛Ǐ 8"LO0b@(`1`0:E o#}1 ЯF p9F 19J`xFvbqJx%1@8p9F\byB 29#ß #9}>;|Y}}@cw` F#}SF} 0X8^!ЖѧrwŠ9hsnwч[Ġ0zbp(=?AOMiE!#Fy1L@ݟ<XaiG #_0}ӜǹӃ-\%! ?Yc0U\9vߋ8L1>N(`8n:d1cecx}YӭvM>Š}\3y )c/䱄hzp cE'P32@vXk1b *yT p޽<χ'_ 3%xpŘ(dl}`8/?((A=`/f _b2'uy F .0żظ<%ؒ38;%H"# nKPfN^d^Ҭ1&O;)/"}d2OLV(d.3z LsR%X^"/ܖ %0 32WjY\ ޾}0 PCo%ӿJ'KtRO0gtJ`p\Y4.*27S2J dv @wؕ Ppo~?0g Xd.SC @/NC d^|<E @4@6 hG0)hM` 2L@(sSJv"GF J!~v%`' 21a5@8/X08Z00b OO#~.#Zˀ`25VOLdL(!~bH2S @)'T20/ӏp<@&dAL?5`^Nb^Ogy@L?k@7L?'M~d:Ͼ0 1#]~&MnfCӿI8 \#H2"@3d  ~x XO?> ׀XSg-e#p)2` P@džʀg8@πGH]f34@L?5̀G0LF\ ~$Ȁ'0]3`0dL?Qym4`5[o02`F޾]xOo}"|?72pCHr64@g0dzWOIB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  @@Xf'@H" I  P $PJ$JB DB @(@(%@%@H" I џ|FŪtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/for-tests-expected.png0000644000175000017500000001541711653126251030502 0ustar chrysnchrysnPNG  IHDR{CIDATxoaSmlDj~E,CP\XtEȩA+Ւ \i7͋ңU+>Göd9q16ZLgggyv<<|4}TT PB@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@D@d<v9l9"Fc[@@ngf,{#%`V T(nҾ+PRe޳dش/@IFJ(n+[ze c%6`屿#ݛ}s_}&Td &nK}>yiǟzն_վn hp'Oku7u_y7"v+@}?]N:Zrq&j%ϑM5K@$?~ϼ>Ͽ^?ïAz_ܾQs`HM;8.]*?x˳ ϑKW񎌃%> oV%t3h, {m;ol1Gy};Ns6)/ݘq_?{!wGDk^3϶gyHp\vΎS=x07%Ml 6k%k/}~^/V?Y>%d5tR~t`mo4L֟ ۙW<5'}o#mA|こ_2ll΀`ց/yȝ7_j c`re3mE&lE՟dןi5;wԲ- Ï\}k_?~wNn?rB__\^9^4:}(k @o3=X$Syjck_+kri`1mxalP՟7# fn~Z_ |AFͳgd2s9&mK:fThod2 {0qI{+oە _ߵE?5V<;yV)Oz}o FG3~sc¾&ր|ȳkǍڤ(|+Er lٶym*ʛ ?r|*ruvz8ttIQHveF1' y|-=hZ>Ͼ?9fwO4 tO.s^S1e`=yfx^\]7H܀/3Bhgw%~}6_$u=#QOdkeXrm1 kM=Ǧl[4[GO/U9lKj4ʲOyn$yϋj 4kgu_exl[X#°Xx'.mg kw7;}_{Zݶƞ'Ca޾g^/9u;ou}/./xK:(mR@f @t@itOont;rJBs7+}@рG8[k}F{3W7٫y8;yPX 61PۿLh[5jv}n׼*~lnHOIj7~րnVOO[MFKퟸ]m?矼TÏ?N5K5sUٺ& Oޑb Ý=ZyuK}m3ڿ|ɮO6~N1|kpGTH7}oƻOܵn!6 {k&L-:d sM?ņZv[??[K؞dYuze΢V˧=Z#ޛkߩZի"q]sk&MT7R[R(Fc;|F7>DO[5+1L$6wp&'l$T_ XTT $A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %AYݩ tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/disable-modifier-expected.png0000644000175000017500000000561211653126251031747 0ustar chrysnchrysnPNG  IHDR{C 5IDATxݿjcai$Wqq)TlR+J@ܸ$ " jR br_yC͛Vpm!Hy&O>߼O7E|?ao?-..ww&kA3#P5؜!9\JB DB @(d:FWF5oOB ;jB$Jprf@@P@챯.JB DB @(@(%@ ^|!@H" i893B&uu|nJWzA$u94/k@ @(%ZiKB Ԟ@:F I 6Asu|nS#\'rqymFB DB Xm&Tt2 @(@(%@ ʦ_P @ D:>Gmx^;7؜6&N6F P $PJxrmFB @(@(%P1~c55&@S#PJ$J(Fi(9\ZPJ$JB 13# Ps^o6Ah43@ @(*WF`W>v"@(%@%@^˵   j@&8əhlN?Y?c~c"@H" I m:_PJ$k@`893]!`sj>>;u# k5m% I  P $\jF prf5^&ͩ%q94PJ~c' I  P $ jIB 6/ ԝB[[#<@(]\^' Ttj @(@(%@%@H"" #+ݙ @-%Xm@ @(x @Z:F`JB DB @# (|e @NFKOwf=@(%Xm@ @(J1[P N]\^t մ PsY#PsͩPoJс`'Jm:_@(%@H"Y Lݙ Jh4^O@2FlU'lP{ox ~^ x?%Z6'Ln {CN3@\vKةȀOEM6k3OAޙB6]p)Pddu\ %Lo:_P3Amltc{} OIدZ -_GȖWw'P2ە}tJ@>'bPZN?%'TT_}s7 (ngBu eAЭGڿx< ͛V@H" I  P $PJ$JB DB @(@(%@%@H" ζ@@^tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example016-expected.png0000644000175000017500000002523011664235501030431 0ustar chrysnchrysnPNG  IHDR{C IDATx?}y u)@ [E*h]()MXpuZR"A*1&6[X'qpb\. RfVGw93ewsfE`\JJP= @D0qCo?+IHfYL@uhK ̗gSK, 6 G4WN=O sqÀT쾗`7gH`k0eka:^Kƒ㗷E6H=J>Ͼ#O:'yyicU5sl*L;у EaS?8>qrRD*xmom( PܰŢ?6ih#)>b,s%Z9tK^7#YW{|SJ4#RC{$^-Zn(kC@[$xN4$◊-z. e8vˢUaE"q"Hyu?g(4$\9B1[%<낢?ihN`k9V=H38`LC.eo` gRihLa418K•߳l%Elоrl+GqkF8Ce|4¢9>rlDM7*"ٍzLz;ʋ.FH6" @zk 1AFbc$yqO>z8Fي?iq'EI=xEUp +2/OZP\, h1AEM J՘5 O^0>)9xʑwְ%k(szY)[r!^)izmXﲞ11+slh@F1H6ЃmkL,}6-HՀ<1(4*)(IS@縎'ixzP|h`~P3QDrK-7YvI3X)i3#??fH2pgX+֠1X3vk菡 ;_ @&ӡ\\3}t3=>g/̸W 17b@Q~8T}8k^/9M7N-U7j@&@ 2+=170ݘ<_֟'}\jЀpSΈo8Nm^t- +1ٚq)9R$%x4J=k X9$L4z!BτϻOS֊`ӫQRR{Cjqujᫀ !S~Nj1;gWeb<ۜTv>8.7wF73[LIXQj/3,3jq%ry&.wL`ǟ+?3Ϸ17Rg0}e1kRSsɷ8XB" OKqm0]l bXY^deR&=}QWE|O $TO2PJ>6$yqq\|ǧ?6q[/`K~oo 4!jT5 1X8&}_lUj\S3ozFq1ஏi?ޞo$ njd+ySOgGy#= e^tVS8~OY +At+)yJQlWyÌ\V7':r0<2s;(ٙIg ɶ C{W^ve pCikٝtdQݢ?I( ?ib;y.h!=>+o;QLb[F1x64_|ܑgk#qW &c"'=À- 5]5A@ϻ an[6 9JТ $+A\V RM Eȗ|{[)D8x @^$ 9iY MQò`h*[_ G 2,`M(p; cF Go䘶P F7l \-n&ICi&Hm˂TzV7PʰJ 7> )*/goTd@J{""z%pLNM βJf%HmbV(miԝ̮Z2/k 4xJ?vgmU %ؚ+M'4Z%(6 Ͳ@?o'& ;C 2,-*<O-G7 ;% _X}*95GI}t HoRLJ6}?K?ΰ&SRB5 @TDc}R>:xx~S2n6- ^ + ͏_|& pE0d[O J_Nő=!9`1`e⧸t__wPv#%Sg[Cɯ5k~n(EgӰ?/:6 v&U(1TP߂ dX\V.r 'Z2Ï~9BvFA.Olm QVpV}O6yVm35#5(}Jx^$852~bTG 0[ދPKEKL}Ç*`?//N֠ Pd'xDf'3p& 5 H{P/pؓ/=97o?~ CI C"׉ӎ/9t8OGhtkH/~Km^#PH:z&4y~=]BТg\(gF؟86}-*1\WD /*;SE!&_*M^%8;5^.s 1=iA_``)uxR}R9HJ6q%P׻)yՔKn٦!EhM^^oFC3q2C==3 Enݙo):;UN:rʯv:~f}oA~֜TA0Pt`߉gY=4y᥊~@ tr 9`}&1)UkMŤ=ˬ6%+amIn5$5D c2Yp`M mbbԺE iwm![ XD%6ڽE@덎pC'[D9QaZsA:D9PlWeCd!|O&-mx0 6.Jz(ι _@A˽|`_[Oi˚m;Мr:4Z]( %8BϹ P- tv80Ǜ Թ 8ԙ'Aȏdip "C&E3H?xW|: mMً?CsǰJzz|jo,qyP#nځZ:{"Lx^zAg<~\_n Po3{I_B!OZүEn/>(K R n,:G.T3W8nzcy]lW' u3VR4zJK"Of3@x | \;c3pN@ {?q7 >taԓm |OR`1  8|IИ['{~o99h /A/m3n|ݶSW7ۯl¥3H@+}ܜUE]?e1U=.XSmW>:Ow( |F#tME@:WB$cwNP`<ĔKtx(5g?ih#>iqd<#n[[I+,U')[Lbq:! `.%P|p&ŘX,"ҡa_װow^G\+7B?3-7x8Rs{05\Xd 0W;w ;}u_\%sV<G {.,A~9D[@G9n#8z+ P@[͊7\?檿T2Z"i+q_O(˳>;X,ya\(4@Fϋʅ+=/=|dUA?5V5="6@mY6٥3o x(-(Y eM6O (Mw?{21Xs`IZְez+FIlwco:7Bod kc8x$um.^${N*IZ?Q|k癕Ƶ%BNO"|{!i@jvmAjH/ koM+ꙣwTPg\XH"H#Ejhۼσ`y4xi>P3 +r@thgJV775]p\8/_x\W 1{?`6.{?._鬹{ `POUzb+}ܜ@hJh&4j"O$`vOA)|ADO{V7os?zMY}C*>IЊӶWmv*E=4Z]=#8@`Y=E@*ߍڊk( vտD @WE}(ŨI(AҿWGtL ҿXo @ok(k(uOy`TsiVX SIDAT6P_7j%K]_5TU#tqVwP7'P/TV-7B lu_A6 0}\,+hoTc\C+B @ В @z_i [_qp5> hR*TE(UJ!7@7eJ(#h=쯎?y¿7kh6t __LX4G^ήE<2?"p`UX*>GUl jO_!1Ub eg_whq 4_!v_ HXA `$]!S27B7-BKlhp[|%ܾ9J/lҏ AMfPta@"7MC0wNuS@ ԅ5!hr* (ݲ#-;rүwf h vИv׿U =ɀ[g`*݆#*Dtjq\QĺuODvP)~?R{𵾛T|A Vl P b;(Ш_Y@@#+7׆W ү'hg!X dPcob; (L@ߌ hSa/ȃ&Vv)]5SMx[L9WIqHhG]>үsF-1AcXF]6ɀ[5X6)M t$s1?P8+ EvPz_JPoOd`-"OQqsݭrleY<@f;-_!Z&е  A/|U!?5A',@Hti)VJeaΝ: 4i#VG|#􎠥ү攎 !i-I}|˼'Utz @ # 5_xC X{wR&RIh@te8Hn \}T*@lHtr+'6< zy7@O>,^[=Fm`k^VyYd x۰Ħ+p@ ThWǔWdGrPҀaGa "˪68~}Nak}XW~/:!䆺D$`:`Щ5xpV@ߋujNnjT;*:JP?FW)&@6n Էэ+ՅA]A؅m$\@B{v@@ H |A)92a6"T7di:J:Nz!pP4 & 帻%0R韢U)ad78f!`pBmʐ'@#ɀ\RFE<Z;#U}!N@zV'(vrSS3hAJ;R@*ũY| ,K7;3#D ɩROM#p%p%s# pS ,1-  .CqֺP #p::R`u=TX X~H9>=s>y1!@|oW  @5: @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ IVv_ޢOlqX$РW).3+Nfe7wQ;:,T( `K]^[k85S^O( 6˒Z$6| _;߇?^e,2v[5 s;.,S|]y?,g{ `wQ@Ϊ r,`M a2 j5qVv^/dY;n  W7@KY@Ϋ % kM@z@@V&@ H @ yu ^@ U@d H/ _ w߼u/8VΞBcR0(6r \nZݟ{~c~G@{~S#붠Fɘ꤇pXI`8a0ְؔwĽ@(F`#]{i/7ӿGJl%z$ .t`kwpg - f㤥<ݎb@w- @|9U_*٫P[!5g9DQ\*w9HG7Y|I`˪TN]?XEG@=][Fq4Ycǀ_gFdPg/ty>*GzT-w絹)<8Br6|f_ޘձLʔflg]b he>nm^ƳPVY{o0mN _\3Z[XWA \_z[1): w|PbМ2LWj 8^X=ی?Un 6{mLeY uX?U짾Scl,y=SۗWv70sC>o>'.+I0M~)\!= 50|t >q0.?(8b`_)^ v yeV(PyDG@K^۹h/׏_⡌4+)ݯ=v0^?_}tohkm 5,Vݯ|+$}ٯhw AtzL֙9)/%A1XqՃwC*tsC_ڞh?;@~|M2O@skbE/Si'?̆衕+=stC0o 7%Y7QHL}jMr1u/#@b`6]@}+¯vė?;&^@/0w'?|{_no &s?5_ajibn5V?ƺݧnLBg @AE͝~b~{!k$^+91pM%6~tCJGwwu;gџ6 BxX@S/m#8401Ϻ?na_l@!(s1 _ Wh6 (X ph 予q/̀W1$k-]]f TDZ (nC7%D[Huh%~'$:Z}=>^_˔@q8Ayh88 BP8Akc 2տM   =z0wy [V?[$p70nq覬I~/2ƮpaJ+mpt/ SU@u2`_f( M2ϒ _@NտLR   `KfGU=,7̀Pz2 |(T{8S ;I10T' J?zF!_IF rD=8ebPX" 譱XCqcۯb%XT0Ul`mх[X1iw[NN?w~XY={?=#<* gqb8^x7o[ \;?{~Gous!?%2:a$P/re$=[|pҲMυH H ] gG@8;KOƷyX&v"=؍ډ+@rful 4xCaO=u\ # q>,>:&Ю~=oow~υ<ظ# p&0d+ tCvV]^_>Pnr`Ch8[EC "XM=oQp[f~Pno{CmM_q)7-PFw r>P(6H/_ ^:e+['cm1p ˗&jx/3'ź&n*&w Xte@wC Ktp S/? kܻ-%:d8Im_ix\v']MuM.!M`]OGIu\ kLSVWAN:{*ar6FqƜw4g/,pvhpߥn'!סWA?78c;~ 4>sn~N4WNλ `c M KYP$^Kg^kڃ-xs.-o)}G^@{=7KKby/_~}I ۻ3-5yȀ? ߽Z_~%a Pn1)]@N~ uN/?y{ A=\$׳bK xU%ZZb׋Z"8ey)pHp\ǹڼ!(:N% N/V Xm@ѧ-wco}ߗAo۾h1;K0wX}JW Zpjg̋nV'>ĀSrxps8\`ߺ :'4B*CXT  *Of. ,l07CZ`I xU@W2Y ,&D2?{-0)b/ʾS\2WZvƼ:x_pӧ|% @Nzg̚@#F1kfى {D@=Tf Ylv"@@,6; @U@Y` п过* @,0N_@C @`f'/  0K@bP |Kwrg&T@,?@߁@f*S-c  H@jR 0E@L2@f*8Ow`=  е}&O`=  е}&O`= <v%t* :mi @`X*ht* :mi @`X*ht* :mi" p+0`= B@h" 0]@L7B< ExUxgnn^'!n'S2fH(6B ,D(V)Bb|J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F5h9IDAT$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P zIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/square-tests-expected.png0000644000175000017500000000757211653126251031217 0ustar chrysnchrysnPNG  IHDR{C%IDATxݿnކё\>UTf\eTsuroQHp@P [(O{նZgT*%Gv/Pn3GpRKb L8׉)Awb `f&\3J \pQ+6 y& VT z_~^TPG/Au%ulQzw_`bz -`4[P/\E\`k\w?s>y IcPlP/ KPP/5T7ӽpVf _ /%h{_uKz prWkPrv#.?bЀ8]׺r=ׯbo hc_%. 'jx@#GH}Ġ@ 'I}~g^By.AH ݧdWA%0a[z K`k'Pm b`6*o@e%抁o@ 1vy-ؖ8v_Zmcpj LfYvvH 1a)Цav 庽 7i!Dv^Xhp?Z9PvQb uk|e% %X.Fs~if#\o/_{i0gI h0M(AM̞Ը/)GQo/N 0VGUJaefytF|Y.s~@\}?>)l]y׷8{qp'Y.s~ڻ_iw3P O?F kfY}7U%2ХS l}3-ANL?uY5r-ݧR0v7*d#5%g6@;a&,}twI *ʀݧ10vM  .GxEӖ~vݿng{^-rOa]C%X.~H(DDQОEKS}c!AFnﻧ;E򋗁݇L '̀gj# HɀgN#O^R>}`>6O{e_Zk@ R_/x[0՗  ~DS`\~b0B2`[6K f["5eJPLL{|eG2pV @ïs/)5J`2w %8?i t8vrJ`$g3ge #{5vi *8Wb ,~Ә~@r ~f B{  SZ>t%Pa 9DB @(@(%Cׄ 2 cwZ8㸽a(;'`EML '`dC\S8`02`"t&IL?j̤ ~VL?U ~ f]GxM 'ʆ<FiOO0Ju ~u̾,Nu3efT` ~2 0$j3RL?u @PL?z3[>4** %88~p14nό>1~fÛKt' lEfBVG[8 4 xCyz2`!g Bk2`A@F>dk7l6\^yyM?pq \ TBN7WUL?*8K`\}zEf0KJj'лvL?p*I+5 ͕@yLo@o ~`D0>5l;&'ۛn,`r`+Y Cfg`L? {\\)?`+l] ;'@(%@%@H" I  P $Ptd" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" ?cMطtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/background-modifier-expected.png0000644000175000017500000004260512076022157032466 0ustar chrysnchrysnPNG  IHDR{C@IDATxkubXb)˧H˖L9BDZHNcˉW*ʗT;v*bTd[;N*J0ǶbI7  A ,v7n;333uk1}/ο3ln 5&b@@@(`O! |  0Ў>Jhl@@% i6  @4g@ x @3@`v<͆  0P@;fC@ @(`O! |  0Ў>Jhl@@% i6  @4g@ x @3@`v<͆  0P@;fC@ @(`O! |  0Ў>Jhl@@% i6  @4g@ hiv_O;w.=yvv~9uaa9oAe.۷L)mllU}ҥKOŕ!<=v͏>O#vT@ N@ҦWmVO@SHTÇbr_ v pV@@Z  @u@]!ÝZ!Nh s9s (/v{"`N! @4g"8l@6@ a Pb@ /  e wa@# "PMTS@O;f̴W95C% %`@ }MOGC@@jQ@@nx G!V ;wC$ ]ڼ<@w ;< PP !!W 49*xlaa8 Pb@ /  % EG`\wŻ~;bF䈜O?)N^^l~ʷ>{v,-ufsXSSŎWnl`UݸX~hϞ˛ӻwS^փ]#a.vڶb#PGl8#k;nʊ˱*˱*]vj][y,[>ў/rf+NX%z big~G@$a\" D `x?3@zir\M}]??/߱cmښN4$%[VKֱ.?o*UUYWS)? ۻOgbQHa'Ś B;&dE«֩Jl H($j ȩ,..JN^0 & ~17j$j@VS`qL) dA0 Lݗ6L'Es?#kj_Ֆ% *9*HZ2/ ֤;sa,<>rb-ܤR9rOhD-VXBaр<]ί[y3L΂k*˩T8qq<=+W+`wY٩%5,\$:´B2$؊,\9Vr?7 r ! A$O{y# VoU0KxJDd[cpqKHαh@4PV,wy> 74L0=>WJ:o=V3b<ѹfc? kr(EuPj?d.7^MoN~T`-!#]$`_$' O wg[wrJ\K[sqI?^IJ%u/8@nw[6szH+ʴd>fCN4{.o휣.A_ מnD޶l~)iX9?_=?8sz).z@Y+ ̀doLͿܐGm ݚY@z֡SQc ,ggCCQb &ȥ*` fu5@ DL=;Fz֡诒RJ(V8 H *j5߼WB4 X:t92:/Z镟uKO~?#'t孧TWm9__[+ml^8~wO4>rt3v2OG7ic_[c=XO}H7Wu$o@~3)3u֐UPiPB$қc7]9i5z zUu`m8Ug?8ꓺi7]K9fɦ.h诊n=Ϗ)_ڇw?B{ik}K.3RefM>ͯ~vq@p[-k>Zq3G#,2:$ 'E%kq)ȚNb )c221Yg 'wԀ7Ϯ 5o(엮dhz.ҿN-4S@]=;u5k̽_R=)dm{kzD6Cl{-SG @;'Ax/Pe@j4 a9 ȁӛK@I?VofJB_|V⵵$ "3tݝpO\zOHw98** X8 2ڭVuTeCйDs]p_qU7S9PQG*p{Խ:in)Y:`IDv(MuU?)p|WXslGoS?Q{N&<;toK)3.Z'~U#7~% sp+ɐuIkF33{n|_^ā$@deٹSs]fҌPKb#K@w>.>~Z;|J-dEjm9} ':~j_/UE:?mo^ɬgjN̚OX}kQcq⏟~Tr쥩 B#-h@hu62Q R4'RgVj!=B@RoC >dv^/.˟GzA4L7?=TMk8U,D'R橹ds3 ޙ=w$%şFr@}cYk@XvA*_PN0)?YLlIwр an@݄Cד_VeQ7?'LgcۊdA*;$.ѿ_vX[yimSE@]cwLO엷RF #4NE#9Ϗ㥴q$Z$ߩ;lj,zSt7c`҈S&.% /:']'$?N|NtӶ27Mk@;q:44b;Fb둉?YIԀߴ1?`7jkt[ِSٿMI;r"m/]ob{/yJ 57r(;ڠA/0 p|6yN5 MC|=gW!I@!*әt"D7 E;4R5= 2 pp6aNՕ_5?9,u+Aφa*$o^pYa;L@dbsqo+K~A~UwTVEV;LB h3愠gtcR]K ':MteU鶉|=”P6 Qה!.AV$ ƀFv^3OE |0MGKo_U%L(F 0p%aABtPm]{nVCU3 (KDMMЀH>Z>:J51fk*Lk#ҰTg%NTz>:f_&Yr!CnPvGn PvVg+fBԭBMk`X13 hO<*o* mZgu2bŲLZoV4Z;|_KBϔ>EUjlֺ#l N@= H4b?ge̠;'w{v>{싗*ڬ{{ofj,pP3,&鯟17pj6.b^ `3R<p惟('s3/1x/P -c?{})Yku}{=kRVK2dz8y豓@;A ^bp } >1guج裂*7 5 PO|ӿ[V$TX0W*Y ]D7&|H:WKR}Wm$@Go[u-l)#ǶmvD~0r ,ޫ@YI *Ԁ}eackl/FZV pY1j5TL1GFY86Pͬ_HmHci,h uЃ?;q Zsi tܺ4i-@[^( xxk?{ {k 3 [07,wD<;eM$'GW*P:f pʻTyKJgɷ3Fj x?>|P}lCZV!S>ǿNt{ rPR߿wEZ/sǺl T7Iۻ@5og( ΞXtP ɚbfr?X6@YjMėZx(JP(N'61ku 6~y7@l9!`BJU 3ӽM@j*f_/WEjx_ ޞn{m{;?gcWn uxJ]lT,3<#&J9|(Zd"xC?W?n1ڻg&--Je p{zϧO D͚6۠@ k7.N`@clnV2_ǝnHD} Ӻ L)ݕa?ZJ77 p!P PbNw_-e JB("B]u@ͷ7?@ <)S}ѿ#&aNk@[kB@B?ѿ PeP$+P` /ov tK_\}ψuq흼]:u- a08l xe?@t" D+8Tj*E])^Hʍ@8B-f@Z?Eջ@BE [R5_JB)X[DW4/WV:YOqh>|8x_AJ5Ih#|A9ʭ\4@ *VǼy ] Ճ@]uG kǶC7^s@wYo-?s<=3YʩK$q$#l2S~GtĜ;9xIx깋u7_7#C}9-%%0r\+~x6^GO{'bp P>)YYd8]3q?኷ JSh׽kЯiV~ڛ*2 P4HRTJ_c%T SbߵwfʕPNI"8GƝL?p돟}7?T^='^x ,/\ؿE>ZJTCHN`Aȁ;A[pW4Hή]_؈tA6c/@H:=Lni+'j%]E&QPI |aЀ+2(Š9_Nz&wZX >Pgf@9Ilf aoȊ1oCM+l#Ӻ`D啨hSwz; 9w{< /WgZ+Ʀ~@[ܕ(kk8 $BJ=/[նFwSHRS85Ƽpa)IH8"-k@vkM=@ 9qş^7Ajj2:}hI@G~>$֒ɀhh3g~Q's*MC49Fj\ ;SuN=B5u~aLA FJ~LO Oh h & *pԩQ,kNf9-]4)2pqsod`yAqDƑ;U8a i[\,["&OMr:|a|Ly P⬖r$O]WD맆 uyǕlZJI/0eL@B5`> Ċ&>˿,S"D/F Ve晲Myĸk?q?KA}kw|`0 zu}5a؅RyZzϑSwmr󛎹|;Y\MG돭}MD%Xc9N;}bu;[ 7ϼ !m dFQ69@hf@k몘9A]dn#`-~۪6vDRJ #k?   U}Ņҝ>YDÅL;3G 4 \b[ʔhwh68KCyt&ws 1ov Pj%x'l o@\7~'PmSfOhhz^ܗEb~]l p yCM@jdu]~\k$@0VbP7GGc˯5 O|~U{x( כ xRUjȮSFT.TFX@c}7_'HJ+rt) ,"G]y=E+Bik!R>ٟۄdͷ)!H}{@/_d< 8=K]j*Tϴ+gG"LO &H½Rc a b:TnGi\I% mMҞVL6XC5"֋o_{up@@4A;qR(nL?҆& 廫8` yˡ\;m2hN)Hm0lj%6ڗ?^^!yGDroW2PG;s`6{)r6F`Aݦ $ *Ҁ>xi2oyo)@fG?kSgES4zMP?# yT = P>NTZe  `HG. 5?Zq9dٛê~==+= r\}+'ĐB2`vPdy3;J`V3"z:K@庠EO|bvbi(Ӏ$3i L"IA|:B|J 0-8 ٕ iy)|a0C0ZܷV٣4`ܷ( !1?CK6zo^yD13J=Њ4ٙKJMt﵌ZJov=}qXKz@Vpqe'&{7v,~Fѡ Xg xh$lR2 E Lo@. d߅ hF1؃*?6@> ,Z;^aB*y_^9Aܣu  )Z8[~B0ҥ*[Vr;_Z̉ ? 4=!#rNT~ ?AE4)"Ue0#Ut+m~SScT;T BP[J/M_!\uoW>9@=UUZ>m`xzGm=Q>.q?HD 14y20edb WA Rj#x Dck1ԂŨ Td}Yzpk#S%{˸wUC^%.'=.Пݍ{)rO`a~V%WޞJ/]` JFOLY8 3,@hMH*?ѿh&d*Jˀ[9S5Udb$pKAZYi xZ  >SֽL$j* U߸l-V쮩MڴAD=`lקys7a4ʺ%Ԗ7|BL ߙ.pR~M;j@G;_fgF9wWY*5 .VO\+˻ة#O῎:6`h5#^}T,YhL%+BꝨ݅39 SvkkD|@q@;;P^_ހ9!^*P:(Em~-}t4\i((_w͎/kp뻌wPkd ֨Ϗ~_Nէd0Wf[H}R\3>Dύ/5Ӣ%8B:}mЯQpBpDѣPx?dhc{~J Hr;ODtWyf#بA`<Hk<*`~O)1Ȩ7ɡ⾀"pChxo 3"P"!~_[H@fYdH$`_Rt!=3U7奥K9ie@j$ߦǟ4 l<@m MJ I*?'lGQ-i$d  dig)R>ȏ*;Ys"E չ9uI# JvҶuW=  ~?nWQJY$?~bͣΜ/ E E"C6wJ$x{p-HU:W.GtpSRV G/VЀ=fFpR17r@KreїQe{~ftm?u_\XW/C$T(@`aaam-ojGyttB2O&ɦepgFe_ j#ԆE>翠|ޟL *h@QM\w_Z\&d@peÇ}ZainZae뎍/]wI0K},񥢓+^w؇'#[h[ }ɳiw^ '˯_V__s߃׍i @ @<}'Vo+Ux3zwc98Q1G4p n@Ox q-r%P'NK-׫'^w|]?] WH@\ެMS߱&^y3Yu|P~~gBXdh@Va `O_{řtb}WϹsUP5@jYOu~OSJ THLGDq za>>{%H3!@+ةtLߡ_+f V@x1n'oosvdg j!ԂY g(O_77=g(A۶A`% P+oC8 G6R?Dk ȑ*:M%Nw_h OA-`(@?tЉn꒓D.0z@KKKa i@ )I)9&?q{t333q 0 :G, GFmD> .}׾w}[N K%G9@'ts{a a8 h=N{{Ie(@bFH`):Jh6 VzΥi yt ?Sty@vC+h=N{{O}i|CXb#%R8@fB  A@4@fBJ %rSo   ¦*@1@bꍈ}9|R@IDATP CF@= i 5ʴNZH @|Q@ =D)|N l,--W950! @ =@-󆶪^@@T v֊tpI@ԩu@"W5`ffpmvwv@@꓀k ܿ*i-BLP3`Cf kf[@o1 0!P7n"ƚ1_6"&ͱΨ3 b@1#r@r}_7Gzŵ7puu: EBBBi@idHIM7]HVDZ4J@4ĉjB fa?D >0@M5Y`Ƚ_WрdbP | j!T V@2 l80v0%WGB (HpEJ(_=">XrC?7s  R5`W ? 5@jL"f] ci1KO ʏoFwJ@>"vʀ\J m@3$X CDw@:ih.O C w@Wzj~@ Cv3-:Ǚ3gZ?5LA&jZD8' m3F0SIS}vɯ*ޏ-%D58VH$X_}D7@6aS  1@h l  @ @MUb"@A@ @Lz_ 4Hh6UASo   ¦*@1@b | AT@ &@L/$4 D7@aS  1@h l  @ @MUb"@A@ @Lz_ 4Hh6UASo   ¦*@1@b | AT@ &@L/$4 D7@aS  1@h l  @ @MUb"@A;&ߴIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/lwpolyline-closed-expected.png0000644000175000017500000000457011653126251032217 0ustar chrysnchrysnPNG  IHDR{C #IDATxAFQ]nC, r)k{7ajTKBUdp J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J q(a{}B>l!}fb>!F }&bH3Y|B>LB0%G2 }X`!JbX|>D @ `>n% 3} > D ь>0 8 D >(@NF,>%?0@}@J>gt}s}P>>}`h}P>f 83`}P> xO~bC. l} is fy :-20o'lˀ-ơ4Δ ,S)n!E4ћ i٘j21e`ck@42hc+#U/.Y6d qW[ lshd=^.2$[^ 7#2 2S2%? C~Ew`Q @l#-dz6`r8 + 2A&!%:`2@v#e&`>p  ZD3pm ;y`p@%2D |d8JH`7 @C i2Md!p2@ I3 @Ե2INMHW@d F$ MMd@ JF@H(~" D o67"`kdEn' ,N (qd4E %O@Hpxn!pL@x MyU3p#L \ p`22@ (`z2! < %,K>niE@8kdn_x@ 8tF8# MM @ D@HFD J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J޾tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/minkowski3-tests-expected.png0000644000175000017500000001054711653126251032011 0ustar chrysnchrysnPNG  IHDR{CIDATxkw>l°yaa7!d9f ryNA!i #6>6/ 0C2IAVoٝ:]]E0u}F x I J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J #%a27 zaHj$Aj%53A+ARԁї ?ygӃz*TAbkI@2 O LwP!.@Pe!)n+niWܹqQi:럼s6<>q c1HֿAES[9/K:AKFC@''~I?O/rbdx=v&5*PE`O@@_^A8}81z0 b)4ZbO@/GV,PЌ.4럼^؃w_"'O'*vb/4&Op z?}5Ǐ|Q՟%-?V z, ?L?R^0<.6g`ڣiO @",&k^0_ŀ~bH8OJP߲K X`[O XLD4@hֿiPpoV(F?!Iپ(k㓌b:藯b9%E`>zw4& gl9@P5:d=PPa"@=j꣭279;;b1K}L) KonݟA6u}(~P`%X~ @[=J2TG;gv]Xyza3p(/gN)q3p?n.} ^4a6l1ev -l}7 woo1X8oyg~o빤WU%A@⣟ͳ3]@{g< -HWe/r Pf/+Ҁ, h1#\v^+Y:7 îu|ǒXֿ.nP'%5c| n'_~ׯt[MHp'@=[AFasM7^a'_~ׯ@9hfedT5cWw2K6`Vdk@h~{|+=+y`KhO @chKfd-u 5eջ/@N4-fe% Ȓ 3cL* 1fݟod\>?\o4ik խv<~2ԕwz@&c3PODoontzѰO;X+띶6dU?M{im @P d@#?&Y0 4)Čd]ם%v`߱YXIOvzѰqWum}G?D0h/\2c!~7 4a% 8XkWߺws?CH$"oͱ 7`-.;;lԢ7 S2wsVߦ$z]ր>Оh@IL?0 T`Ђk3}A;.3o@Nf2@0@ X}L?Aˮ} A.9o@.vL?A[/<@~,h;X:{7z_>jg Z.߀~".DG`Ju"ٳ:BhsL?PAn(o@n uq~Wm y[yi@S>Р KK,HĠg } 5w7 PL?h4Ҁsͧ_>,2lv/\րr~ }pw7 WM>"g~@uqboc2`Pz) ػgy&A@L%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%AU邫!tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example017-expected.png0000644000175000017500000003642511664235504030445 0ustar chrysnchrysnPNG  IHDR{C IDATx W֌4eY-d{0!y ˒d!BQdkdڐ XTX /吥X%K{dKmɖ%Y,FҌf4|w;g}}O>ӧ~/,j@  O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 1@S O nC@<%xjx @` @6 .@O_ҝ\p{?ɏ ^{N}a?ܹc#`wwwoo|˦&gw7333۷?ק~~^:/+W 6GwyԋEqEV%0;;+$ ?"VIА| aK$ɚHoW"K@QHb=C I_U,HKpv2r.WgttTE 4W& dhLDE N8!aQ'OǿxH\mJ@;vȀf0 $^#ſK)MBǏ_b|`=I @0ȁ29 u>#D5$͉ H?CY؄wmGrg!>rW|\# k@U!x_RMkY E!އ*f!` 97D4s 7+<&Yŀ\#rرc|rN*"@3 L@4{ ޑKz~l@.9 嘣~-Dd@'0esσ\jhpK@ڎ k:ц5—lcJ -ݐ% =`P -W 0pr;H#w= 7eK@~k bXUAvɜd9zNj@X2fYmC@Ve^~$,E)Ś5k~$|ԁ{q#!2MJ@OۚO>ӄ%  ]u= ]yPD0{0<66j*0b!(Qe۶=%W,orQ' 4^e17CFțE_#7lUz 80 sXI@2k0]7$'QNHX"E$#8g2\9HD*_9]s䔯\o1.+/ (gBs 96mX?Y .2w.sUhy2b "f.Z6C{=.=Zx=kk|@"sbY/щ׊m`J  .Z6W +fWCY ~d&Sൡ Ibd)sИ$ \}eZ9x Z+엗% q2d/L Xrv ĉ[<|KYN" -jb 뚏$E2t3v-QnA_B@\|L &LD5,f5 kNM5@rȀ|ѽ\2!r_}} $ fQUg}AO;4)LK@s{B:}sx({`E_ko@¡t.@@ uGGϔI8zud@95uR9?2=۟w$}זI \$h5& ~_e_wuz/1r/%# ӗBHȵkתȷV7%k;Z^ o8zYٔ.숗dzm577_PX)c$U ɄȉdԒ%eJļ_($8h4H_/'u+5#|]7 w˷ `޽攀~I)kAF4 $A9s&m ߧDtFܱxj}KoI)%,\HЀR.inf# ;z-o8ApL4rxs){uzmqsduSW$ME 00 $h-J)b+mW-W充ܹb2_|tYۑ͊3M&ŪgMETĸ~7a HR4y2;ۈ܋D_b;ֽ`\ƛ4sU#yM^Md4@~y-oR @2kLxs0_?avU_o]8(r%H#dB*LR`X\fZי@  &-oܴ=7s.-Wd}])2Ѐ-gMЪ"_Cŋ߱cFݱyZ:idUX|-̷dƄY= +̌4 0dMЪ^y w|Oٱ,޾> ~z{{_f /_@4@\AL l(\Nj6珪; HRy~[zR@ 2MQ[>}^>^expFr/:_Xjzz t9ì 1EH2{4/n CFEd螂tm㚒od+}`.v󬞐v-M*6!Xy"^(?ss+V ՀC,Ą@ giwfg_Ku_ͺ͑#GXW2"aJ^)sQ3rh\>7 /il\h7D6i@FB@L[JnۺtUŎC4|LGh 䍲$BP.{yeI6u~ a}G|CbHYcr7K} ,[nk[< ›\V7:>aЊ;mwL@GǏY)lJ$I#.wT)2i1Gnj/+AMP tNho3r牓˧(9U0vI.z:e ϏO\rE羗:$رYK1KZ4]sdg?{yyb "Y@z_k5',~%4K`cD.XW۫$\)Dʟ8KncCI@po0l{0bXSVHN^?GoHC [h,$. 뗿۸jI\a wghHdxg0oafkYpA~[>yR V864&W}΃bP )G.0+^3urwtqSs?^D($f 0hf."4۝ @z20l?ZyihK t{pl" o[:qRN!?zo+74yAŒ@aRTT S yL(wl$ookFrfLZڕW,eyS*>Zu G^Ѐ9:0o4i|—/4$g6ML$}?I ;PiWcݗ{?RWȋLLQdHE$޼L 7Or֧w|6y~a;ƎgMi ``YoM7ߦc~`A7F]-(s:;ZPW-]&0"{ڬkSx4tPv؜@k6 Js[? 0|_'a9:== t n+>5uV\ZSCe?ZrA[RsqMcj?hHH4@jd95r޿ p|nu0SBb`|OY%gtcMg)UD Î-Ȁũ@_uןH<|1n`Z@^ S/^ ~,.͸r&D$""Ye?}UomRM\mooR' }fFL7*/MZJGȟM E%nnG9}<o J A@0s[T{P6)A3~t& r@9b'ԃ ;{_  oBū*ʮ򤳅zn|68txj ԩejx dE` 4H@BP4Z]?]cz\O|C[ڕZXrRi9?k|@oLե'[r[K]| *XEm_1 @</ oL|¶6s WJ|] ?og5]?Q)"~S{#,+-^y_%-E_۶Xmh]FpW6]6O@ H'W!a%|\4}- JP_V1>gk᭙|   [~Wb vRy ~-d'D>igbp4%G;f@'aؓ=z9" Vwb =˛ﯣ7O Y$uZ?샡:^ꪗxJ;>Vuv:ͣU@|}vw;6JwÇK@AyDc{A8i(YܿɖiJ{؟K=zLpng>mʏ FpCoo\~Vwww1ug<& ΛK(8(+\J஻l*_jUI ) |C~%@rhT@  %@! FK@P"  @rhT@  %Ҵ՗ K$g Nw}%p}:JHԉ4L ĀF@y @ @ hd @HO`u`o&-- C0(@- C0($Iફ^I8ʂR "Z1kuS1#4Ǐ%8k:@9@s @Y tzz:I S5 lVNh-wo:'''M&,cǏfWgg0~||\6;:ڃcGWcC+%mƽrx6ٹJ&@%,X6][sC&Mjg 3gNF%Yz|mõ7d14A])5 @2c6ct{{*;p6 IDATYY&d: MhyMߒj2O-/7N*to֭K!'KT]8bD EșSiS5]J g|1sMA|UrHȡQC]Pl H8)ͅӋ333#WYđ[ ky *Ad`tsxEqON.`/nvvu/N<)#Ithhv"D;;:Jni[XмNbe, 3&Нɹ9W7'J"g$hk;Xx3#0pfB&6mܺ)67KCE@Kn6ܘؑroz%d@[̆Mk͠B 9b .[OnT$YCJ.Xav4F{FDzwQc -E*@q"lmJ3chygTX~#XW o=k_:G-g\IMBWIjqhSms^3Vcu-1$6T&\%\nfd PL{-5{_\OX|b]y1!pj.,!Ԫ. "l=@Sb_ޗxrV2}s#u/\~x3Jfe2e!uO<&s5() {M ּӅ{|[9Fc, )IPRm)2I-h`Rz9O#}v'F&&^|5G" o/[0 16_W>RH @~WtbԚHqQ=9|'p wϚ5kL8͟X-r]*P48rˣwɇ?\|vCQ@Kog'48vtVj]HE] ^z[n9T6D"`l\b^jnH~ӏ~عsn`kZ, VO|ƺ)I zq7w*dn1=-m:1hYcٹaiDqS3IDEukC"j2$;ݵ2 iZd&Y $V\W2cmmSN:zfgO> H~Jh@ >BW5o6 \Hׅn}B...o*ZuK"T^xkc2PR@ huXkWw>;9WTr 7ygko޿/X9T2&b&UjWjK1΢*# Kvl[O.cДq9i _^XR@ŠJĢN֬:;>f{k>Xs3PпhE?&4 BKOДԪ4 5][6 [?Q׿wMbqe 4Ùf*Y쌼y's)L>NJw_iD2!}47 L6]Q,p[)E#6N  0}t+ˇ~hSj<ޙP39Y|k|h(e'(^vkEv#[gPնT@52u3ro6Щŧl1L{n߻ɂ+/l8thsfH2|C~ Zf-Vk^xڕ۷/mlpС OHT$q54ji{5 (k 0qtl}}IҀk9*H=7]/276UTJ:ІqS X&5k^()344n@ol2M&7oI㏟iv gd>B|>}O o<n]y`ײTpvA%Fz ;*׾-]1ƎAn-#3-_`i>R|` q'V7' #?"(uQ(e< We@Q'|=B,ݡڛx|ڛAOCb@k$@dlh,KLJdx-"5MiӵRH4^XSP\U@[oOl~&<2rfn,{ꚯbT)RC͍ Vnc W0eF=)%:؛nVE ϋ0TԆPzC@blf|,1:E!P`i Hsfs앻Sj0b2G/_1 qh8vQmĒ@婷i%g_S`_9*Opn2hbI@6o (+jiy"K@+$Ykي T!R4d@A%=Gx4@74YuJo.9I4RXm1H6H?Uno%Ht|7%ikw]rRR @K7u?PPJZQxzV..Œq)xGD!2}<~dT$I@c#[Bodo!%@ 6fё19)*$W}*%SJ`(N ޔTCIM6+n@GǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {{UUT@{j ``?CGǞ!X%XO@챧f@V VS9 {?ӕ0IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/highlight-modifier-expected.png0000644000175000017500000003202712076022157032313 0ustar chrysnchrysnPNG  IHDR{C3IDATxky!)QLE"Y%ْ,)"7Ez BŁ A(.(jmֆ"AD@J4h(V *N̈Hu)ɤdѢDz:/pΜgf~/ٹ<{V.zl GL!@`A> P(Pm@ B :nC@ J(t=@P@@@ u<݆ p@(P6 {@BO!  %x @ P(Pm@ B :nC@ J(t=@P@@@ u<݆ p@(P6 {@BO!  %x @ P(Pm@ B :nC@ J(t=@P@@@ u<݆ p@(P6 {@BO!  %x @ P(Pm@ B :nC@ J(t=@P@@@ u<݆ p@(P6 M 4fx{4j@X˫HmE2X'At%!g 4)&ܥxb8~9FrG*Ie`RUS[_8XI{'Nw^bJjٶlJtmڰ{f")W|׬_moTHv8MOvP Bi@* s/鵍u}*W4@c,(gߵp`5_}!A۪YcW9]z7N=3W\VU?~`3ܛ$q[Amc,٩5wndomBl-7-ڙ1 A  0歓÷>OK{;SvfrfU|7m @۰+I"=Je߸#djtǭ/ZMUUe P1MDul%{[WMk;=/Fm1SX27 g?ON5mz lI@I)@Nշ^7P@& Q5{[gGU@, 7pQf/{[TzW{Tdw =ֆk?+%ЗaomΈe?` n5OMz`oZp_%Ro{?vS,7LC*?1<7Ejᛱ6 `+DDDpҜ5Oեayi0r+1[]ߝ$_tY2j뚋*h۫ߣ _+a8f˖'Zb`rNHw~j`~@okx?K=[?zO?%HCR{`sRluop˳ϟ0V0 Bz'%Rqs]u}l>@`p6|Kp9U6IrU@n?y!_`S$0[j@s  /ҭqG: ScjU@cK~՟_%050W@p8N@ޯ?1TbU3{ϓю67 À-wwa*$@Uzj @Ĺ͠>pk:4Pb x3Wњ!9iszm9OM{J`F 9Jꙥ%sm 'X,U gK.1Ccl2 xW`1NsZ6x6*P$@~Fm62ByGQi32v:1ζ 2k ;RX逓${_C;!j@"r|oҀϿ JAod>xC*P S@;+E<|'Ao 7C |6HHۇۮxWj`?3z{ogtDM[D-Q; :'A@*b`<)j@*JԿʦ,¾Hf5mY6q,Jl^Q`6Q\bVDG \0p5ݰuz-[ޜfPfE 8!. *ZNfP4dȧQ %ЧѦk0ޟ `v0@O LUaYF|t$wllQbN-zZ( P^#7(wlxte~u֮j%8{~U]z םW}qOjՄ un>ݳM7t6cϠIv|%A|CcjPLyN@*;Al* *6=w2Q A&[`C%@D]WkB``x"lVt) o?G[5. 0` 4FU$m7 jif =}f.>_e 0y!Ы}37HW[pR~m'T.?P'az_3wW|e& Hf&p@KT_G  kt33~[;!sOGB,Fp 0Ppӷl헏zh|%503U`^=׀w{qY'ttёpMi)1&ؐ.}>{>SҰ+&нB?? #Iia$6П5XHɻ3v?=ysOps"|u7&5G&śY %mz2L֥;n 2ȓfm$sd"\̩xx2kh 2Ūdӗf_fy s:׬Sw" ΃;j}R P;\+ՠ? BԮ`00^~vܫU* YSq4Nig~=f8 o\젠_3_;B6/~(L7tt*\=򳟸-R@$gJԩ W^ހ:@ Lw w*0+CCe@Րv\Li) S ǧ5[=d@Ր԰pAcK[/q`4OT=Z 1 DM٧\w-Osf"=/k)pUZ *%_n%? vɍ"#'L )<>drIb q*=2dAd@YCj$A>P;B=63mdH@j@\Oՙ]ԗ& AדoɏDF+zCzue.[U*AU!zugLko<;[y•WR?M1`0f2lN * A}ڨ&1긒U큪{S+AՊ}&xłQ?8W_}|V@xILT(AM/~ҲSfsA&Ȟfa|f Uw/zONXrD&$A@ $n 73rq}s:H=#'k 5 ƒ6a=_e( w&zXoԉG9cf`F96mN(֏ȩs H ȄpB&l۴bydMKb\huME[nRKT,@kr6lE ц<}Uѿ©ppg^]*?? HYia|jڰ}xue\u@BF#e(U୓N?{k:n7=% 33Mq N$8vB`3n3D"pV2u$IYOΑ@8!XRpӟ]f5bXdM5]iF)yl_"D* P_w0o2I"Mdh82*Gn"` hb7I}Yb*ѿmO73(c63xh{ԌR$ ")l N*@L-ڨuu/u~@t86*Qu,@ɥLiօ@w度8/!H@O"جj1[׼ Ip*@ cU 2< e+YGP!#UԂ-" <~i{{i~OM`Qog@1,T:X~|Y"([VB~~dU\/ῈN_R/}*i@R2@b`1g?{c4Ġ d+2U0ʶ?73_}U헊N#s?5#kQ`q+D6CNo9{4iNZ눩/ߺtbg*KJ .ߴtZӗ\'fw\*͈$!2sauA.ojI0>?s;\H+@ZjXQo<_-3{Ӛ+7ߍ0Up*DDט2jE]C@ #F| >mn-wgvq;e_۳z,xT(@Aybnà.e^o = -v;U ߄Y1PǍzk@ a%A4awwD TyXع]4|c4?愀Ax,m< ;D+4ۜ rmH|ޙP9we~HlGPgSaP/bUkޅpoGh@mӀI:eiɌؚ[Xk $@No1.( 8ߝܷm%=i <>8P[\uKOoVn23r}j9(BPkK '\i%G1ѿf6j*p."{`k֞s{+CZٿ)ג?}õښ~mk{ծRG8cEG^Z_h"\AK@v. TAZΖA?uӥDQg\?sڶPJ Xүs?o_UmFͿ=JI(;3\(8uaÝl0Nkqʢ D6z m6ui׽ߪgPߍ2Kc6_:ދ:3B.P"O+rk~?VkfH\u_3ǍRAZ )E$s# B% J!`_RpOk0~stC&?Q:xλ[U:d@eJ_Qo.T6{$XK.PR_i@%M CwgyG20!5XT2.MtS* *}6o;>|vi壃H;m)C`}B0^MmT/."55R6_޿d  ?qN  @upY j!~qy1Iaa=Ї;c!VΪ_/3toF/r@saa-#9\Fw=SrO/h}5`d^=*qK>*(_ @wg!pخK/#u1IQ ݺ@`Ni[bPf5`U;q{JwnY!p"P83X% ~_0'H@"[~rEO῎{SK&Hx{O[K5IPi숓o׿j}WbzigH IN$:~za}>σ6㻮1PYCf;0.f_t, 5+T@Į6gn^-Lf$fueɄ] kYhb΄ٶo%~$7Ѕ`~yT$[}j0e`U;C( |_ko/-@[C1{"a^}M4_F;W%P]:m 4Ǖ xʓ}l]~qhRBĀk}YitL w{BH85[~m7o]?PMxb^?0#p6]uMuѝw?@B>_= JzNgd5_R,).-^J/"@5wnNsk#;SQR*Nk 6 [ U>wi@qKfjv_{~0,xݙ>sMA#e2T8虲YYOŽ~ ;j `8ukݸߍs)o%F ٿ\xmj{?A6y].4`)6U~ThgA{}Saab#?MfqàX%pr%[*tb`UT;1 VWAԹL*ivv亂Fϩn@t젃n4o hb=p6{b-lW/ f~)(ew+]q }Kr.*})򛯹m--3 gկ}+fI1ߵK$ i :;<ƩS `o ?vףQ~ P=o^ 5ԙ75>g~T Ip&9e[wy/Xeoߖl>(wk5Ut(Щ-W wC@V 5ީINēLEb]h^ m~=R@ݿ2 d cmX]Gݲo j,AВ0v ّ`} G߯3V;1Q9v2:\$_l, Mt%oyw2v%^j+/K;W?c=o?ތ2}EsoU\@79)9c;>;N\<>VTSHnnj׍,~n5[uhwHzSN┄l[>l:gq`.`~=UQ/-9y 1pAM:?#UO ,q,_f{q_o2 e3ApgipW 9a^{ ,}xaഇf$E@fJS0qT'?`'j~-p>/_Y $ݗÛ*_{Z_USr2_ G iJe_RKũm>o^R`ߵ.K׺N1 K]ibݿtl'N~{^/fE8~=--U?A3v_rk.^~@a`ӿ܎G+8']ywxvֿzڍ]7oj1 W5JWǹE* J1Վ 6Uo㛻b&S"k.^c* 7 r"8 m1vA*kI!9FBS_@C^= _nI3W M m)% )0?9 }>U2뗒)&KC @R32I$ H<ԯ8KɢXŹ; 4@Gd~Z 8_z#` R8_-"2qȍs5@nq\)3(ṯ_KNJU>nzO~RB2xҿq_n_,ro m4@~?tG/wݿ?$[+.~^y\ߘs+oOֿ56|Uug~ϘW9@~:t[W2kW5`G}ҺO /NިkA c*0KwV (uD_ͮM r*ߗ>Kw{s̠&::8/wSCo|P_4]GaAV5@\2G! _j/ #h^~X UNȃfՖD>_5*> FkˈjJ"eɥF4Ty%\ /tԤ @!2,Km)W~ĤF@zH \ /\4@M%;,y8H&v PIUCɻ oGsB'rzUxPjK?P|GRܾ5l su7pG<#CIUrUA P) C~A?"t.Q⯰<7 (R!;!,uЎ߹׼XL+Lo"<=d9h, xRSZ◀ST#+>_RUU"2{MIt'ZwQ"=@>n=$$K s9O)3e.Y1E'X̛죪K%9Oż63x}./;_A+Fᾈ q #oګ<vH)QGED1M`A/胛L dHq-}icNw,Nd\c_}Z*&eebsIkl-h/+oEm/%@ʨz(_\5΂ TB5 j6+F`=#I˜daY  Jq9ܻK ^ }&~gNc⏑@9 5 FˍV q\1v?y 3| MH^&⻰Ͱ S:z I=vlR. { "E|½ 9c6s͆ z`k! O"=X[3Yɏ߶ FRl^%Ѓy%ϡJ ]0%H!^Hl6krPJSY2Wq%#Kؽ ~aGOm>n>3S=Wwmhɨ?V @'hq໸ pqhe ['# P-P~eܦb`veLD|=^..zP#CMA:HHBVB)뚄?;$7n-{Ǟw@B%.FO z HxߠC -v ^X\%'=p6n%2=Je$ ˸q;%Hz0Ƒ?F R(H6%p?:D4HBz@\YwZF/s)@^Hr 0g)DWQz`1/fY~]J }AOL$f/&Rr}cq?hgτ3G4@wm[XJ}M$(DрeG؀ ,wf~ߜD_Xd@b\@(UU#I^xz;>R^1#AB}]>YlTCgb9S@8Kcq?T0c3`8Yq}_[*08__3K~C %0H`,KaY%ɷ޼4zP\h @15^' xF鿶(8'cg* -X?';я6 X^ u"ov2?T0:{z7)3_:i/*y^&[nKh@b4gYYcLЀYAp٧f=tA}']OFEvxIX7[hF1yL"K^XN9R `x?XIL00IL@AOrQ*4qO$k\~~#`;F읗`?XĈ6 (8rKbs{H h֪X!·% J*|veҀ7nz%?]$wncJd6͈{Y!I_a/id' =,$/{.sʣ˸Up׳Ep܃>',Pe 6Bqبwrgs]ukX(9`{wI_2uEv}O\O\x?lqvuE蚎wsWC;NtbZрA3ҍT?^)R}dҨXGJ|{V@4kA;*2 0~Vnn.|=`OY+܏I@vGIFEΜ>As&-AnGN-Uxrp'@a!` Ȭ~تhzoi|LSH, K4[Bi!`]Vns*Ϝfme;/{v !p,_~rɂKC)C2M,EO_~Gʨii8ts_ ~+ѿς!,-DH?T[`BX;"f֖LG6Y>,Ⱦ%`㢔ĀhOOe l < (`Hd?߉^F\(S='$ eM 5L#mtǬXJ$ay.z',ֱ _Gt[@ NiJZ9LJ<ts@ e+Y8?.5-S1^$e?H*Y D0杦@CI3/}GB4Z7,~_|0Q! 0F *P$``&,Y3UE?Ocoh̀ @F'^ TVI@.QKLl6pJ.U88QőZH4  08Woa| #1u$v_6U) "M? I$xFxv5 IZ_Zpg͡0-p $H[;OdVyCCO'}v@I %Խh$ D3 51 v- H APp7йuL:2O&HoF?l wwKs`qaGuwM$&iUp]ݹ>h@  pN $Eu [F[i@,R2aW\Nגu6ۆ {:@f}$ ˱pe߱ס1#ٖQ蟿s?h %2qs, L[8fQձ 3玫c}zo7 *[ /(6+/[H60ͨW$dfv! `ce ̶<ϣ~9WN j}sd`/iG ֪%p}4ayĿm`r%%7\Pːد2W%o}G $ $q?ؐm|b ˪ D }߅`**nG$@p<$pd"Œ ЖW.4:dh@ڻ-Sy+K@up!Jd߱*UK=Q/2_ l' 0i:^IYF*?ߟ6@RO0.X>fr 0ܦɶ$Y&*x L4{`pM.y||148nHR\چV8iOtUmj' @>w] fVFbTK; Pw< 0lFdz$kn>𠝓wu @jX M89^xJk IDAT>2ρU6"7/ RgnC *) $]rKwU؄ׯ?[I@O[>t:mpX'r 6{xN$D2s@ߴ'|- /<ҤtڔWnLOE9`E<xwbH4..(3F#3|FZ4HڹXL|ݼ_~xm n}}!Yl#@9w"_ڹ~rǰ 1ι M`y u]~O}8#z @_=TCN/@ ו# ī<[a߱WpP_:so' `2.drKa T.|RX^DςV#~HcȂF-B-0!\Kw9@MπZ\`^ja7 Pk@C u #g$ lx_9zIcg [lEc9G ٓ<l4$d!@ FfC h@;iz|0Oyoocyr땿kiK 0Ydu#@+|i@S_ܜIUGeXBk_%n}ȿVZ%P4 gZ@j)r)oQG-@ w-GM  @idG@ euxG V!&#?7Qi+/\]eh( _nz HSPuUjH.ok5t/[g@ ?.??#Z m35}70xG읱@QP*P˥;k2:p{ d= +{ X+OM* HπN(=eEh~e1@3`Ut@jOw;MIV4ړa hDűڹ4fÙ `9;>WnXrV)f&gxHd@BN&U@J)ϼ<^J#@o!qPn}g PTu=,i!X Is.V#]\aW}.zc H& 2f`^R }o >VMl1T/ e h3o۽e]^;s;+3 `4Θɾ;H%H`]E \IQn=O Y9%\!Jp'/}Zs)?;X'Ga%rt]G^oNY'A{ܖ@zDqq0.FpV-s/AshQwi 6@@-x 'KD5 m1 P4}M @}&@\&v rhy`gdrW2qDfoekZ5,@4`?@ C&VG03 r&g9mdN^ pD!Mgf'0k#Qme}}~aկ3EX{8_4Hp$rvp~I2WaQ /=/5`qN˶:Ո &|*&C*V({=u7©5KfCxOV j.Y d'y L >os@IlHl P*@@YN ]κP`T]>p [\ <98XDTnu-b}Kmn2-zIzH8W'vwr-f}?!!#_=y+|;z,*P&}8< _qr`ld$ί<2}Z͆dۯfcl4xm$4Gz3CjOFPv}6wjX_ Q|Poy@JC`pB9ΊπuGq_wal@='\;\>X%е~MsR3\ Hv.;rHpV{ؑ[7Ԩ1x%ֹ&9mM 6 9`9'Hq?#@zn]$@Zo*9//NȻ`;X[V0S3DIL<9}  o 6`jpe0euS 4z0#7o+HF =?..Te$W\s$6W؃@LjD BSK9GH;Q4f]UǿAѣgv^kWn!pL5m@8ύuЁ5?aaweRf@n7N뗊L :;:37A"&$@[aX{w:HI`\" &8$=Q w џgP  I Pé> 6KXwO8,XG f`eAĢrA8Ojm9W{}ǽܒπ slkB40q )(W˩gs\Ԩ_ X1{0Ԇʭp]DB< "DV.0e`&R &YG30 ? k( J xtj`w eOTA  @*gΟ~k3ٗyр$hĪ UНd] K8A !d?E$4 j*0a!6{oS[]_$@Ud}h'A3yTB?Ly L~[h|[o-6gpyg5AaM(F&S4 `2B@! *doiKtҀnWʃ@ &cxIU$@!3' d@HP&Q#0QVcV+%(8$sزߩGrv$&i܎, E- %EL}~E߫d@~/uȃ@3|#Kcd :ܱ'M&c33 0-!]0/ǥ}}LG:@?Lr. 8NAxq߫ ,qy? W _< h,-l o^_gk5 K<6  Ot1qȋ`.Hp ާD O*Ȏ@qH~ ?d2e6kι@T6pL_N[|K'Ag=jw{N/%%fKOU}<1$iov֜M2s;(; 8hiH@w.57M nǾq!ё&3i$>^۩D @ڗ=wX Ϊ~୽,HH[nuI}a`S;qC GOEU Z Ÿ o.a'd IicQ-Z -2Λ~TE|S\PϤM` &JZ4`$o.bgE@zu-X !yZ4 d3!b2(_3 01 O_VֈOď3W7OeWgв =#G_ u3F7n2-GǙ:2.$@Ujy4(|j<}v/?y04/8ùY?cv^& ` yyt_ۭ L ޯnǞoK| Lh{DkW* ]qK'T * y$b~H$ 8>T Psc" rW푉U{ 2Jp`zz<׭ c&؍39W_zMO@GNt MmK /xc 93mС_NƎO5V4}W@5UARn?'5IB;;v6jfڐTNׄb?0N: _< y4/:{fGB'G% ƾD0I ضOO/ċLe`ϹN OrвIOO$ +;ۿEܥ*`l Dhj{ Ԁ?W)ğ yb 4쯕Vd'J}  eJ]֦._$2U8;4rn2@p@0}7/E:Ɋ;XugzHT&Hd@ h 1AY,2>'a# `.}_s!<3 9^@$ =dOOI2EPA!R3Kl@Vb7aAt?pĿ #bv<`p3vl A;dr) ȡkc6S~% V<&(P&eq?Iw3O$Kn[ w<#h[B.y2b#wt(NE$`lʯ59(\*0+P֛;$n-_9`Cs/@pLZ 2/>dBح>vs"sMS\ B5RYXJDZ K@\b9H=!`.uz5}\<l@4x=k!tӂy> PV {_s#ktVT`Dsd2-XoBPg2L$ߪF}3Q2 G*9(fIr͊/j: A˔E@JЉO,(MFWS\%h@Ρ_1V:kSE)@)ڶ3oW_S+@Ը7~6R xj21`2'05ЯzZhRM}m8mS̖)B]2~QPz6ݰ聈#ǿzP˜п. #A0fPIr ȠL@A$/]Tnb(烐Q@\CcC(+BPPO} 2:D*PKs?/ 8<*$uXAÏ^ }&Aj ?j,EŻv,큢'>\(^Tpb>%H |HV_bf2eʼTL蟒m ]PkT2P$T(w%0rM :%Ih@E4B/M1d (Bd9G3m5ᦘF ĤsD624nT oif DaD Idkϲ]R,(B(CP+uT |j"|,!9YB*77dy{X# wdG%@Z /G%|E$Y"/swI O`R1SRp_2u f-'! /wwfL c`pܛ32m~SB;wd{| ,M?{@.@5O'P>!pSGV!0 pB( E`$ L= (Yv*@GJ"pK[!@ 2@ @i<@@@JBDj F(c @  H P4a/ @@ @i<@@@JBDj F(c @  H P4a/ @@ @i<(ӂh8#IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-riser-expected.png0000644000175000017500000000550311653126251031360 0ustar chrysnchrysnPNG  IHDR{C IDATxݱn t.S.y@ H'E^JR]HH4T(r$p]{wvf߯v2;_oz @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%4 @%0iO |waR>77"_sphXf%AsW朻š/}u|sxFkݸ:t__ϰy}?/y%>Gv%"% (20( E+ &/2$d( uJB@ J&o)#1 bxW~x~Vr0/+b`+9Q8K% :7}í_ aY*G/V~qy}vr׻=%%`,WǷߙt@鏯s9J{'WǷ g)Kpqy}s<;99|#\@  O JPTe`P@ J (`m/  AmP!`:%@ F1 (5fRA %}`Xp`P0=J@. JD ii@ ؁OK0 JT s\\^-|_>_ @ @ (M8PJ@ݝJpqy}vr%OGQF#3,wϞ]b6,D3\\^}_eTHPOJ0~F ?% J` Pw<ӧR$ Kpqy}vr|%`uJ0b*)uJ l0C;,2A)S%_I`\f`v%M SD@ F E`zQL Pi fA &I`i 1 Rꔀ{8J@ ԄKo?^7J nLg'GO_zu^['1 铇w{/s+d|?܇@@T {~|=o|)ӗ={v F >GϻS {>;``AMV v B`=Cl̐[!DK )T 0%Ƶ J00(AR00=J0  Z@ v@Y9 @C`Δ@C,oyݽPJp7GJ 撁;^A7LcN-?=?~ @/^A`/KF,~AVSXA,DAְLj`C+%X'SJϔv +Om`VJчџo ` J0_78n"Q%@D @%%Q @D P"Q%@D @%%@@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@DB~jtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/difference-tests-expected.png0000644000175000017500000002676212076024662032016 0ustar chrysnchrysnPNG  IHDR{C-IDATxm/GU[z˃њ\"!iKl%6Ć!"|I#/c$H FBLӾ2@MK/A!@D5X4k0ԖN;ϝ;ٝ3s>?۝9sΞ>~?%@`!  'c< $c VB0~@J@ເƏ1BΫ*2SJD@"A x@Z AcP 7X&@)XR?ROe@I鼰祉S9H#\x (-}у$ \ Ufz4Мʿ73@U2@ =A` 7F@mp5v͆6&pAd1"7f_ sl~@&Ak}L.8y7WP v@`a: \5wUӟ&sV  \$K¤-n [hH}|i;nҦ!tӕ1c-.\cA, 0>`!  " +7wʹ;n!ˆ@3c@C@#N@NΌ=  Pȸ!$0N"XfCvW1( S@zT); @b)z}Ta[d6 vDs`/6$l`/뮯| Gg@b3 Q "$\0:+7DCп6qug@ SVf5P9sf뾒E@KA^Η27pՆx4Jw5δ}~} z)hy3 O}#3NA+n_fs޹5M|T=&l{r!EpaSpޖ6z%E?2|sD 2%7sbH믿K_WΜG,DLL)1HT+4诸æI]dhbж oxi@ѯy2D־$׏F Vp񎛿)1~nAe=(T{P$BJM7]c>b:mO? PO7lS]&&ĸMkh_AثuF|?8L_3L1Nzq?"| 5j_rNx r $CD#k7 0'09 c@ˌOyٿ'^Pfχ|nџ|5xYVrbyZpw eJO7!82?=?(1˾lX8߉;hw/*Niл/PxhuZ=3Bb.ψ1/} /H_>E%&m(?ػ ȟ8ꎾ}w}dv*[[WI1zS=Y]V\zK|%6Vs; i렫EE+^T=IlM#!|=H̔$؎o̒3<4OzkWWOL&^҂M9d9/ ~.|&˓w4Ό}E8U(a&Z} ϣ~N5CYD}sG<)H14PP*gǾv1Mc4.QǼW_B6 $TVq*5:L:Z1x}[/z%>8@ϟxD`^eyM |=p2\zE{V-̎/ YS.mcyk}%y7 &4vcҤvg7RԬ\ʓWC@Ojd}'}0r/T7@D)VĔ!y+¯ΓG[\SH%XxC9%0p&/!Xo9s2 GA*%[ P=2 p6 nz/o)Gi\Y7lhk?)͓%.NF^>dbQU+>  2r_3ẽح @|Wg!IS6p/g}5+r|#t.p*Q}=@ |2S7f_~2pޞmn௷Q58#SgaPQ@3b0S6t.1Wճ9 `=)zHvSwEod2=W@!Gmhro6_F8 l3?'d~Ri'?roevUr)~`;QJPH(V B<4`%_Ui23QHȚ2`FT ܁d ;P5 %mꯧZGK 9p]Lܑf#T,wzYϽ⭑o `qs߉vʿl59̧0 %FNN S[K? kv("֎D0M?V.oʕ`.lRH&q\, nV}}KVfSM) ou) ^ .ۥ/8)(G1ƉV%0'6X1 Z=w.ě`au?F(jhSr)(4CMOK~"q8vY&7pN~hF蚁sc9%0kRC6- i:O`<go{ҭzچI_7zwgP=iiKΔ49]!`ƃm%$J833KN],4INӌ\b, NнOFZwB9hfj Ġ<[R4Ͷ @-GZYSufĀ,=2+;ƺ;8ddx%+HJ/.6Y'hu1!x]pJ`?k!]fs "L],6D)[4}uޙX͏+|b+.& rgeþ6]U[`Oj GT_:?sWV7?zb++pԷ&G+^ W].m?=נM7S.(*r,59l(;]n?.ʍzvcݦM Mx4E`>?2_KRcP/`Ϳ7;1%RU}lpV9|0'P\N=|{.kU :`  @Y*@/~.0E]|ط ?K*-&BjuP>B&ƻZAX 3kٖ: = ʀmVb6`z`zOaȾ~OBfVd?/\99scQh| t_@Jeٔ^A' 9Tv#.u7=fre.PeƥUN P !?^= _} |}̾lf҅=:uXN rxhc]~C0׀no!j6⯜| ܍;;%01- d}5DN PD잋ruT3(ygsȔ~+ %J GVz`S$Y`&vnf8M+ Yaew\H@@A ? Bl&Q{@ ( 0Y{$@1jlvY p*y d 8h4 3*@bM;^AWi`>W\O P{ Z h7!&ҥS~9A 387 =[VmBa9@%(R& P߱PB2*MrsOݗi%X؅ +EBX% =p'uYaK?yv`BnRv8!7 dx3VK8^'3tBN.׫cU&sGahv9M*s78lΡ?6jI/~DOziFm޻Wh˛C!l2`SYAGvp`Nm= @MW.dz3!sGUjQc B|SuL#(٪@S@ymh&5ujzpFܜ`fBnl,)/ۿ, ! @P((>{K|ǵK{o|a@ p>z\'A$`~+;K)Ppk | OT{ r(UrA?sEe`>Y !;/_0GӌׅvjKi{;d[n[~! N od'Of2,_}Q 1@V |Mҟw.p u_`P0i 賸0%IK` XsFܜ` O?Fzw,Aa=klek%u`n#BK@B  ?}A @3Uh8}7>p/9:ئ3,p69{ |o!n 4.D'~#L82@d1|t뭂 PK< $`.D?C`CSK'NC  p}X">~? bh;wL\2N@@,F 6ALo % $5(&vq:/p(@COLoZPgLH'@GH{#l|ޑhRx.8%YMnKNd@=m 0$J|X @) Bҿ^W.!$;(A,+;9;а  P@"Rw dI@bڅe l0rӋ)TPKm|wa[Cr 8 u~8&eaD'@UV B2`̠gEK@-n죉 ]u!7-xy70v3 !Yq#Yl*F`: PUŽ  H&@OF_ A %KJ䣩{9},N~AL󛩀CP8 ު PݩtG] < a*PJuc қx&@sѽvK@~ l">?G"`J?feT`A }1aj`yWf"@/Ev~4 APWCkG8L (nt5`#c=.uC[(CIit\){-|Z]%wSٸH@ q0ޮSGڮ},@"d{RQ/ȇ !H۞Z챑4]<@@XT<=aV#!d9zV/&CcLۑ _Ʀ' RV8Tc ,i) xA=ŻN{Y Tq }z.z^1@F!)@@+@kPOؕ)]{   Q@  3$   Q@  3$  xxo}_w</v@Bz Bi([1HF8p;kD rn#EsH_ +S|,{{؏4wr?J_Rn-P ЀPwI#,@&@2}rP&]tC"L9'̙[T K=Qe" P$͌O,`X$fҚ1H'moJ`>>n:b;9Q{PEc 7T`#09)rb% HFT ~!.=an/D9#J1ă5<F63NTح\j+ ||J k$+w@ AA9j QJ5"K TE4(-32p*>"@/E~{ @d  T`9nS0O|c;n_f_/G@1=};z3]G(NNboGh>:5IDgp`[ ǥeO8_f`KvO8%S>fcQoNv*fxz8T3@&2'@@XZ]ĿgFQK{*Bo58W8ٚ38~@ 9/A>!$t/e5_fv8.>\ǭ>o9m9>PKT`*2ps%;3|*@כ|x. #02Pr] Xtd)ל PS"žK˳JO('Jv[Fl`k;Q 0h^y~4oSlY 99g_\,1!@ l P/: t&L(ÄJSh  0 Yͧ~Yl! ` -am}#g& ǯ ́66^L ;/k9㙐3ﻞs) _џQsr٦dsjb(e3jM[Ⱦu=-mӠ y1K=\Y]gNVg՚ ޙ[w?rf'ULb{w__& "h@oo=! # SmoAICVrC@=\m"4qY x_e4ЀF2KN_ *D( (s诟4%9ixr)P sT7 5;ľs1e@`@,ѼPv1;6Zf@ٝڹ?5z_-Ot|>◛jX?5}7noX7Y6H cF_x˯NpQ;ylJ­Hmnr)26`PQɽJ20xXQٞ%7-Uo7A'TQQ:t\:}5jM;O|{9Ԁ|lŦM#Rہnܳ119%+4Z*A_9Ɏ>&hp=|{{!_@Ǜ{:yC Vk,r|E?xQvy+ܩx={JSr+S;| 8(O|ūk.ƛW[6p慭xj@۰=[Ho2Ξ[lN}EEPe>Z7:=>/-<}lD0V_n^|WGn6_hw\TH5m`[ ɩ;l@eZV [7o#y~_v2@{[$2@Cd XC@M@@*N+2pheC֣f~ٹM\@{~+z J@o%ڌ~r 1(6!CudkԁumT `sT3(=1迎ߨk|019UEY# Cܼ $ ^` *y@~D +_*,9/(oÊUx; m⥿/ATI_k1?Wi> d^:ܶO;/|{mqȸA$a$ƺ{&~!2iZ1VO*g0Iz}A  @e%`3`2B~X ި%(-ӟrH5m۱GX$UŃ"&>",-0i߾}#E0έ淛߫Ͷ-ث3m=33]B?zm'G8~'_1~3nC:-p|||TP3S7/W&mIB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  :R8tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/rotate_extrude_dxf-tests-expected.png0000644000175000017500000001672311653243562033621 0ustar chrysnchrysnPNG  IHDR{CIDATx?dy])޵ ^D0Q!\K1tIHH*,)i\E8utiC\scd"'B!$K͹;wgΜ3"|~wޙ̣G_Gn+Y p) $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+ @@R&@0 T@$m  $IlsI@+" ~{/ ~'{y5\k#Pj>]t\C)$xxngOJlXI# P]`#O*0 rwfV.Rfp`rxeRaFuJ^~R0aZyp ,vne-V֐1/G, ȃH-wӢ_} k.@ܽ Pe,U-E :,iEVЋ aP,mqe$Ag6 Oi/T@q`-Mcza0q3NLmd?nwO7-߾qf{oWhA@pf3 º߂hݫXgq$83`Z߽[@wލ~5rw# `&mK.;fns#D®՘኿.@DMq q='~N!O-a &8qwy,gDng1ktXtQMڥpߒ q7O%Ls.>, `˞6 v =H7GW^ɞl9SQ ׳M|O[=de(G Q,/4I Y-Q| ;6S-gSnb`] 9jwGqv֬'P X [ $'f[ur{?g}#_]/s@'lSiZԳ W^8m?md $̀l_8mQO<gx 'ovl(e;1Qfd=V!ʀ qٖv!X@LPCۀ\FwQJot_}|]Sxh2ణ)r|S쁸"5> @`>>7|滔%Ix|f [^}SA +}E`W#a]_Uu.vZ0ouGյ[[%R\5ڳmoF#OBPMD0ixpIÉd,=Wם/X\ _O>@wni_aSVuI^ls_kj̪.WS4R~Юp$d@3,JFKY@eUü q61IۇƝk7޳)ߣ5^6rʺV"tn93 \ʽ|#<笻mI5wI* ]â;V=Baw3˺L~k@yѰΊnVxh_d{yq7髦#XqiO"PT mzsn4/}  Zp52഑-O'{"N]nd$e#+hށغu G@$@`%{![]ny@?/[Q]e g Xz0Snv#0| `AI w7]3l}/ص-|)؃qt]W_z%]6 ߞtw;.4$f'c:'$:h>KD=3kp(w$thjЏi #y hcLakqX3 P;^iۿ оEG@3{8sυ5F` >>Z/`_`1|OwXW?X 'ͅYp9g}&VL X/X\y ?&赁cw~8c< O aeO]$Zxm4! nwwsZ~+|_0ne˙}To8y lk|4PksArݛj YФGA}=[+4Q) |d ,@tU}[^~ 'P銿W@w[ꋇeHC X3t\( )|qaOe V Uno + v5.o~3"ߗ r%u ƫ u?nb>hbo7~]j_{k~P{\vKy׫]l3[F8?{OP3 A@>w|q(3`:; @nPw\= t |!@6*@3{ @ FE &mm*OO-"@@*0^}xD E o.1qG*q.i>:Q-|İ6 an"@@D 0ju.fډ .p^:md .='l@ f_UE oLE"«@(XV(տc@Gn4nN"@` k|DW)XT@Wuvj9%ّ WK@~mKV f>  AGF23 `,]\Ȁr#@`%FȀ3J`,(73~y̻ /&tܶ{ -7v3iWݭmh2࿿o[ 0H?e'ZP><`!F`4>Xk:n1n記F@@r^:#`3U>:Q ffD`f4:*QZ??mA@+6 ƀtVIg^\e|y8XB9,5_^kuOwXlX-?y7gsF+B#A:L-tJ .dJK-zM LXq?uVpJhqo X'`I~Sh_\?9'gN}I0-`[t d?$G :S^LgX[rW?''U_Tٶ$ﻸ?[Sqg3bO}O$_H?¢P3'<wCK裝آ=ݓ:W9>X3^]i,7o r$g\/''m׊8"߱Gn@ʃn@Ƀ{lѯV styPC/n.5.. oA v_BbPqVt`fXM}lS7^<2չBu"SWy;YB֟6A@̀Sm3y'?{i~Q@*%Ac W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEP1H noUF($@@\*#@@Q@y  @ [ @( <  W@ PE+ Ve( "Aq{2@  Ucq@ުEDIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/null-polygons-expected.png0000644000175000017500000001576011664172106031401 0ustar chrysnchrysnPNG  IHDR{CIDATxݿ,Yuh#3Kx#BxD9B")dB37S35}OwS]Z#q]ַٿ[̏!@z_+Y w` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @(xe @@El3@hM` PT@m   W6 @@QP&@0(* 6^fE@+  @EZ_Mz/ ("oTdeo(3v! ]y7;5ȃw|`/K|.\}ǏAc4CVaśJ,$p8ܾ( ]p%K\>L_@>8+o W|Jag2ޗE`X3vR>' V9S[K\'0  &Sr#AݿWp%FNSH;B]m ܽVV`+IH`I0PWx~Փy:0ȕ<\[G`NkIL S7ղH`Niȧ P_c?}7;CM+ ?}Վ}- kG@~)@GK➶}7N$4>Z 7J@b= h+b'kIe+ݭ _|OC H3H>vX7A_oCߟ#X@,z!1@{! ^6:~60IxwRsɹhhҹ è?8¦?@ h 'ҩ%>ܳ6)`;71/_=xUl{``fF[dӿp]b/ے3źm‹ }2`O ڧNLE6?$IǍz vvӒ`a~}f"8;$A8.S@bP' V,?ro7<;gO <} 9$ѾK`_WMiq Ё5b99X@>fL|}bߏ7s@@8C.~~OuƮ\ ޠ'O m'7.lXLu v, <7ߖAsUpŮ1pyߍoȃ,.J\uo$?@{3<p]övvO?;l͡cR> Am~뙭 %J|F~E7~럭Kh"v[$Np}ݿAa@i[. 6']~B*'W%&p}708Vc'﷙! 18_*˒`E\to=0`.lyb`a\wӟf)y! 6o؜4 $A vXlҠ/79$+Iܖf߿-愖=mУWc ?o.Vaj=*VκWmm `!U7*gSX"@sK^z7N]yKPra0@yW%7sOO7CemySPa ꎻ?oeA:I  h 2NwsTku @``$`|jPL# )@V yxP–Z$@2+>xX[* pP绗8c}\*oݶ Jƿ1ƟwHJ O,l%pO.<nNOpK < E ?% u0!. I .<(n}s70*b;{`9U@+O\׼@\sn `)8L`0uͅ.#0g0$.\7ڟ Df W`9V a XpK!n5>^$7/ :>V_Et_oO + |@ˀOSX`boioW{S;~M`f3 [;ݿ}pDzo(1LnwvZҁ^̀0K‹o<` <X`$)X.p}+Kb./^iCC; `aI0Sxq/owl*@_w) f /!c` 4rwC g0. fR/oKoR}nc`[_7~*8;Tu[taMJl偫=h?$m;+$pl 4XI`zvW86 Zλno +l#pl {42pH]$ L@Nӹ3nxI1pW9}l3 H-~T 5?#p1ЊK#;<_k%0 g bఖwn>_7SV$ص坻[TصNNC$z|hNN.ͻF8<Z`wnS`F; $[]aTlq!p8yE:v?W'f /\J@׮ȭ ;"\hwoZԹ 7}%k b`spvwM$x&[wvuP8%ΈVtgoӄ ӿS=H1coc'sn|IfS 6" 2otpoG' 8Lno c{N I1\%A?? Hͭ@NJc ?̈́XMw$[!d0SxA?uZ|>"@@۵vvͰ'y?X'~OZ"@T*No'@]}o'wC`QOcL @`@Vk&/G׀mpo#!7 w D> ;* 3дUbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@*} @ HZ @ Ui[0 J mkFX@>V  V@m  * UbX%@@Z #@@, bH+ ҶVa@ci@* VkLIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon8-expected.png0000644000175000017500000000673211653126251030333 0ustar chrysnchrysnPNG  IHDR{C IDATx?k$N&0hԃ`mpp3FU` F, &r0 6cK ; I}3~׋ L}y{u@}'" @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@a7M(gGQEHџkCQ *?7[ ֟R x}7=7 )P\qzLM FqM=qm&FQ.dz+xvfv}>v`ȣԓ}G͐G'AcTCHEm!G'J+c]k%\SO*#}פ2sM=#J] } 1zv;I"}@zv;K~.O8=0@)Fhzv;l2'KFtڮwWSOi~ڮw5#~fv;P}@~lI_Y ]0OxҦ]/دge?_UjI,#MGGnK @f?tg|䦞aP/ڮՃX%vzX'(*?st|U]ۇ @V\;g.PˋU'Izv}_UDrnn_ڀ*̇\וK74 ēޜO?9&Lp`ktb]2qPc0j%Msoeio:.oN?*k\7{CoA7'ojXo:7tz7'/v3Ro;|ew+/w2P)h@+o _7M%LjVQ_dd+W0>37'2_;?X{+/ =Qʛ1:ȫw7'o,2 K20+ `W1~?|{+,! w7l,7'oJ`M?w%fGmo:v9Qu;~?lw ջ8T2aVv{+T2@Ly2@L`P ` &#~M6L!/C d!3Q@$J 0 k_@2gx( 9E002g[`2P)/f `d3B2g-`l2P)d |o9+10?'`d GXP(g] (AyL?%@d`L? 8~6MK gJ L? |+ӏ%2kd`7L?;',PӏM6# g0V b 1t2ydJx0R3`5`bJ`)EgS `c|>+("" @5~ &lB O]p_~6e`0dJ T[,'00 %hL? ~#e"`֑Fb!SJ`A(B _& ~X0~Ϳ/U8 ~Xtz @" I  P $PJ$JB DB @(@(%@%@H" I @*@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%u{(*JtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/sphere-tests-expected.png0000644000175000017500000004337511671515230031205 0ustar chrysnchrysnPNG  IHDR{C IDATx eE}05c%<p "F|aԵljS[ͦ6U21Dͮ)F1F@*DD(00 00ӧOy{N֭ߧ8]v4#k~&c1  \2%d @ ) ӎl@ L v ݇4SI(~iR喯nv7WģRawSҦuS,DPgu ^{+^Z |*iܾ{/n+ra{iI sfvʪo֌!-ʶ' 3_dDBm;9`?._>w^?UjGy,Vv_%f?C[pO^ɘ2f)nm%}s">|9{[~M_xs%Þ?7_3X_cQ9ز9]Aé~C؞|܊zUIeKF򗌦zLjcL F?YѮ_N/˗UA}2>H)r\ LҀ~\UKM@~G{H`+ϿSa ..daȫ+]c#ҀQ1CSW/X}V𽛞zN\vY khKk2nrﯮչj T%뗲ŁDD 4@bT@Ȁ@B6\QHk/1EȢ"'#%/8l^b["s}ޫWzT PB\T7ۦ#"x7ڢȢHdHf A_/ }ktH_,//%T@ AR?z߱_qB _2;@QT`ѪO݅рpzGuN񭪢 Yjxն5@ʲ"dunb@b:6G:s/e Ie0JZ\~ G?pvwBdG:b;P_*)KKj_5L$թFwgai/_p֞R=?_@w?]MDy{WG&[O_k{$_$8œr稾yT~8oǜ o߼IΕ3Cq[ HSB6 {{,tS_ Ԯ'Z(~W\ݮ qN SUD8kt-j{& PS&b!66(z;3ofĿn \F&{=yghYw% ϶?g':@xme[@x3f}{zk᭾rkPoRjY]ȹ o>g@?܀ynw|xU?}(﯆Adz u]R8Zi;hD&~oY޿rHǣI !{ꙢZWc m\rDh 5@W$ð;^ƳvO (_"]S?tϒc@Q6 X2Q_cKx `y|98}݌M,~URXjA/]h|d*k"  +ЙM%Ȯ K*] Mڶ g s_ yW|fNT}}Y4;x{c}IҮ_[vM>;WUE$d'E/WGί~bkF?0&E~Z $~ׯ..( ZIjLW^Clx]O t-= bEL5tӗә~_뗰x>SO֬^ _ᚒ)"*rt5,^1*4@b,}_V4@@*45/u.Rg$@h _"C@ygJwoy 8z\x' x˹/XeE/[~_bL/CH e@"M%di(}0e_L#~ ! TOXT + {#½dHlxk%F> 0*wՊ]˘ܙiaafFK$#!0,$@c?k:hJ/<_R @UhBk$C H}_Loqҝ_-/1H5 Hdq* 1/29}ÈDʴD~ӰYR*}2_\}e8WTs ꩀ5!} 3}:3u׾i?6TkX>K1p33;W/}̂̕?*gH8$Iw  .I)MzAjo|/肋Ojrj?NE#y^:$%^_yLDy)UO_i:rՀ((zb E(1cB4_* P\J (izɣ?e_D wjkxpxϾ <@""7~K|j -jZ85@e KCiրp/B] }% 4o/2/ ^\h2lIėiæHd)oGdT*:$[&@z_r dH&0/mnW²Iz_@Y-uP /:O8~\0_PmIQ3<~+)nc'Y3dȶ.n X޿ w;5HΥf`S7jֽe=8\&V69?pNQ8Sɠ~~nxy^V4,sԭAۿega|H0ʐ;o Rg,wjKYo,Rx;~}XcƿuEnUfn  %aрG7/J҇?P̎okx&ryd.Ntka!_ٵAW1eIp*`y2/pp_f$UyLg; ~ 51`Mih@Q*CZLĜ@ 贽ϑC,şv9nVjz&RhgP6݆ ǩje볳]mU}[*e@NCk-O?||?Y֪! /3~ 0O_æv'1 s8ev3t54 8G:~[DB_ul ec50Yo 5@y+m)$OnLq6&?]TfS?m|ˊ4yS_!߽ߵkVkz3 ;xٹV>l|X)H25@{aM;_:ƿ#]e`HgI/Ӥڬ4cB60)7Vs_z䜷SԀ#gH1|Ooa貃῕_d@\vU]sVY9leXml<#GGV2X+^3p ZP[^B}sa&xf#녝bUjf`-f8}'P~&Ø|Np\_Ju4};\)g+ 7j%يw q®b8j_,>O]ͳ Vgړ䉴LA Oc=IUNJ;RZ9*\i%MN#ڪ6td3Y i_V(前o~= zR$@n4\ 6@x#eysNqCmtYI)UǮDZr#PR"}KYrz23dֈŗ/z J;-4ף4k7M3hPYMXп ԮήzorVʷzU!Sp6*~?YIhh>s#pdR{w° ENӢ"CpKP·:H9Jb3JJ)3lmcjMVU#D"3YfOq2j`Ja>^~-:;QNK~T(V+uUZDeK9OOp6nW%0n.y([׷m biK/g^lkbQwݷAM,o?>L}ќr(1u@Y}n淲 c*$COgbKpjW)5UX|+zwf rV>M:uy&u-N|}`#6ۤE?e݇̕P 7u(Ս,1 *Ćep=D0"qRɫ'/7s hwKm~F͵T箹]iY,l2(p8 ͭWP =N\$@4`u))"qy,WPe O~Y{JK25=0L!n DH\E=?p@h /}o&ncpi|㧝j5K̛|cI[$ 4a5ھ Oj ;>'hfK|3C:h  T"}ojk qrUxdwԢcH^1BoI#E7I=O\|WrcDDGMz dN[뷜2T;ǔ^+(%f4 zGWKv'B_u]fv[5c]hv;[^ xT@Ѯ?G3|h gýT=ZiԄ@EbKv]?Ik{c{8_eJ*PeG5/ ߊчN tvĺ XX:'y̜~)-8},25@&B%dZ`_!B?׬7_nz-ϔ=+ 0vv EyO|T@-eNi6S/kw'qZzboͻ0r.Kr2;Om[ƭwaiD , $ H9!P5 =u?aC' 2YorۈUmlfn%YxcN/_8I:p*5@ɀ$:%рW̙gX&s2R\P, h?<Z?e3ι]W*Oqԯk{U<\$ S>[kI;A@+ LЃM?SCZ7~bUX`N;wΝ׭Qб{j2Nie_;Y=Q~YVd0S9j@ւfsş;mg`ŝ+4 C-qOUX[&$'㎔w~Yڼc9>o=ee?d4L&nJkˀ(k^ր >Hw$VCFR?ir&N~Q=J DJ4 \޴,yqyQ8DK2?YM#HjsL֬^=%"5ik*DZj)!Ovٺe,ln͹ik@N|G\t@;o-\v! ne޿˹DUKF_g Bo?]Ȁ|mN7<4,/)zwutVNa&р2fU]4@\h@`G> j' ޿:ij3q~PY=jG~9@^wʻn)}MX-zU;ZnYXux=S'G?Tb&gvG:2 \h@@/GLgq9qVkO** Iqw7rf_' 2pޫW;uxOU~Weleр22 ;pi\@ɷ[t/ V:>Bp>㷣j̥ss@jgGrVnZv({/0Jދޱ1 " כZŨ ]ig$_Od@Ϋzu}dhO@5/xP#I^ $7H%?{;PSEI0an\{JoVg# mJY6@dֲo$`6K>sāSCJI~"UJݶ<,o~9cbSb@,ԀޝU^"4ῇd{8[BUi? ԁ*(Xsl2O1B4x*k=tRyn-C d3Lhz)$!#L=oka][]Cg?hl'k&ၮ7[R; < .OV97O>mK2p;/E%t +Uhg_uˢݬ'}4<| , ؞KLDῸd`OHE AQ x_3wEF2P\~iFi@_xLYdoz 4>&عg5`*?'t54@N)?Q7+ըmE.nBSRe)*F46gۻf'ZUo\k߅!)C* dp ⶠ[ Mo8m5ST](D CyGźv3!2iB_1Fyl·OҟG<5eN_bVwO!@ fM+<20TL*9g7CKWow?z@Q6=S$=(ULǷ["ܯqEmا++8 5&j*0oGDOp?ao,D$.~N |7]$ʧ< T_l[Ҁ_xǷ.qj6 U5@®_zNƿ\0?޿E- M6R8&jF(o8sO(4?62pYmv 1Z #nɫfNx'[)&RʷF$3޿ zezUS* @3C gQeQEeI@T~2CH@ 1#0ighGg,77ed:G:śc?h1x;.*)CUYU'zTn;CҨ>#| # e_J @lm>zʐS[$ĹkV睾: ҒϰO]52? @q聇+y'ӇTl{MͰgOL *L?˓3%s#3a7 ZiϛO@V1߇D d>0X? s@O:f@ @POO%0d?M D9o4F %?T &$u>3;v)IZdh+kq!;pzf$D@wi@S"7YEmu\$@L 3IEd AS1iޟT (!x4L׏oȐaS~ hӷ{@wJ%U~Q]Gk~ ȕJ}QK@xHK@i۞[FA`0nj# 4鹡{t"YL h6Gsv_:z)7堨cG 33!NmN>xD%zBӏ$<P{?VSnUiQ!mzBoyCCp/D51!RK2dbT5O?/jJHH@) &ݿSNt&N37l@,AȊUwwiv^ 3Mk. @Ͷ5K˧3Ϊ uy/lT9bq;{@W@'bծ\l"hHh@K\-v9j߸&*BT#z  h7??(RPMY D"k(sʠ&`xd#"w}[_`|bE Lih$P')Z^q=" Xl?n,xf~("!M@4> $@#IU<9% @Ùx(@6.,p$;Q /2Ӝ?vW'guxC<㛈x;<(?047E@7jq`v5ƽ R<l85F{/{tGh0yh_zՖІ?xn -_jpnyX-Vm@%DҀЫj?޿WCczO6X2ЧͰ-xd35\4@=%z2DHB*l#O =Q3:(-\KTQPPN_DЄЄe7U[ oh? 38v@xuc-Br<\2X/zg@hV?xP^1`'# PR)_z i/̂.;wnP^h^޵gB~-gw2~;fM{ T@};!P}oW-1YPz{?'5"uCkzH@;&-Sň~nX}XFAgЪIz*0=5fIDAT[Y,{οp~ГU)(C  &H);otW3/EB/ 'Pp熧r? Ȟ@zA4KTZPC,&{h\-+L&?.nѳ )G?~?%K@5"p!CfG퐪`0.a4KHH3t x (/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@t x ^<$BHnb /D@@[, %x@ ]@}e/!KHo C" t -A@xH . ݾ2@^%۷X@K!@?e^IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example008-expected.png0000644000175000017500000002025211701151225030421 0ustar chrysnchrysnPNG  IHDR{C IDATx?,Y"$d'+$%p-2,3>Ċ8sfْ @I`Y%Dpis|fLz}tן-ok} @@>/囲 @u@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RM`  @ HZx&@ T@$-i @@XH* ޴  $I o 7mkI@›65@ iM @@RMH%~}SLw>lJ\`y?#蹷CaQ y[?<>Q@Xcs?RpDϽ' `5D`-Ʉ?<>/[)v+z/|E3_7:ԣu .jhl&*vUM\[9Wv!.3??w~ryEt)|O]^}Pv`-[lR!KWo^6F HG4R 5맹ҽhs9R$ܛT{T&; =l}Gw Hۦo~/=/^o">t7p3eprvETw pv|lMZ&`٧g'{}UW?OtO˫g wAg{yrh%&E6WߧQKWh{ #QGTKE/ EeK ڳi/g`N{WFj80;__'M NrlavнIwn`[$T-* +bJbyM$ȃ*+`/Y8Y ~6/:uD8W[[zVXMc\|DD{@E94(&!;~(< "q͘mkR]#R{do"AR";~ehPb9<)Ϻ'pS#"a~ V)p `ю?'IɃ麜`]">% jIg^&F;I] >A@PcXɃ>*KeY jQ&ZJ> > 'I VY;"[-^|-2#*`  zu|?|"Q&b M@lr5ÔD M@lr5ÔD M@lr5_0&B00D T@49 vz&@@SД_h' M@S~ @hgg4MuNv  T fx973nHv3w @`0DMv3w @`0DMv3w @`0DMv3w @`Y!֟I@ S`|`՘ :'@@;^h* @;{= @hʯsL)  N rxݺ3/q9,@8 ๕@;xn%@@dzN[  Y@D @8VDg8 << |n%@@ǀs; 7ur 7{ 7ur 7{ 7ur 7{ 7ur ς^fO@&Ъ%@@pO` \@/ @`+> h+ ʹ> >uwu\w>|˯EW>Os2QR<6!;\i?~> .'ImTG&8J~\(*w;9_,yzg E~мAwA Wis{gJ5 Z)$(  x\S\Lp9|G$pl %%`,7$ 6+K҅3 g'@SP$PwEPw%1  ~ + B@($P$C$P"/ "UX t/_/?uwWC뜖򯀖t|6#0̿L#U2F ~k~d/I@$M`{=Sv^ Z5|3M `MŃ]43VT%p8&WCT@4kv5E R\8L; P T vM%A!lW@[ #[H VhKS\zL??w&@`'aJY`" xhN-0 ߫5Fz l+A[A kZ@`iKodW V@- ]@d_O@Z&N@v}?i@қ8 g_>O `O..G () JjO?f.&B> 0' dO6= 9 @`p0xMs#g} $1b- J@* @ WH% ۟:*~ F%@@kкAς0 X+ J  j:X+0hxlp| l𼠮 @@v}?i@қ8@`iKodW~G'@` PPDM P]@T'!}( P]`0pŤCC Tq`ȕhR(' Yj@r, rZ"@@(\Kr J@* @(cAq ςU\I"0OM:\&EBf M@DX~g:3@yS- @ Q&$@@yPT! B  P^@7"Be2H:zxj~J@@E"( j@Ī3  @@DjL& Q@D1 @( DH0@k@e) Q @tp: Ч(Y8Y@ y* zq @dp2  Ы2]O>r\EY=k= dx lnȻ͜`[@]_#@$ӏ9 0(\Y 2 8A@͔bY PN@kI ܑx]iڵ>D@ǀ'4`v(p+g b30'-N<ٟ90'S}?r,^,TQ.x( ~S PWk7B]` /WZ S~lB\I@&LPvߚ8XR WJ(HH SNbO> Cf, E>$1"6 d==TDQ+(rMM)v B ]Cs $ 8ςmZ8b`x\L @% rݰb`j)8 UN!p8Eb> jrb`%//8 Q H @mP[Ub~ t+ -)j@LnFM`|0[ףV1/1੠`Ueb`k & Fhn!0eeB SG(pt$ :*F'C0- \ _~?ꔌ>|G?xO`+/oߣ ~ Oddh"+ ς5Yk:%б@§j i2)9w 9W@/˯V^j#@[K . QBdwډO(p@[Kӟ.QB _QxI`Pua}t~3 `/k <{D?C p6(J9,%>$@[ri}^3Q t%`_S'5J1ZW V_\H=[f@5[Vj'b1>w p p؅&el=vӽJA@'#z(pLvwpGIt僚 ZkO๕z[zW:<%r-*`*|X nkk6]+M\.u:'WX)`_ 2'bwXMB v9\Q`LJl>?u8nGgB>'p/`7)@qG : -}[dz)`/_{z$[IEu(xZ#jݿ.UQ N zԚIu(-ٖm 癭9 ""qF]#GB).`/Nzvlڗ'j `}Ԅp:LRRqo^GGrZ'`]Nb0ʹ `;Pcp8LMvM\^mi6Q`# y@u;*Gr[#`_'@Z7TGuN$`b'(8NG`._/H.e"W WBEW@z̾ZM{[`8 VGqxe:Qgpx&󋀭B1 'K|5AG+ /  m ׀@¢y( / S<>*d}t쵯~{T8*: r dz h]  W@~jT[#u&(P_{ޜ-m9 TWa҉@JWv3u3Q_[ |`#(P_RK 8ᇒ5m 5${{ܷV@r~| {|ZֿʅG 3,3!p(3Fo(p"gާJNus+("ۅNuu/(`_ީ) jj@ ?Z ޫ*+:{, [eNu8'(` 87G[|}F ^F< *FNu,0Qֿ\j6phgvg5yKR_"gy}]TW@MuF A5uMs'%0uqvuuU{'50lkK>Q(`__CWv"I! c@gG[⹶#'a(8 U= 8T c*(`Z.&[Eg@{ѝ$Gn= >*_]} 8Y+pQ*T ~pgNЎ; = 8\c;&p(`?Vw.{ޣݗ lqu-/+kd%Vd/N1deeD H Q_ X;P R$޽潮(w:/p~Z?u$^@؀7e508H/s&k| _&!p?|jxO@DWCD508ȔY:j`q#GS\ ,qqP@ ]eMp3 ("ÏWC PEfWP@Ga@;G050 EL6y%?G 5)f%@G޸)Ů:m (6s~axj`qk~Z"s!ҏޗ /2i2adG._v#ɢN\PhlB{ޑO&\tY =Mo_xnm VgP3bG O H^r*?ShH!Z^{8˫G^gyke^p8ˋ' D(/$pqb~"m P4vN eq 87xWÿ?sG |=+ 'P^t3%ſ? /!@ uvwypskW[&8Q@LkGۏG?C (V^QDL?oxn?ooT =cooZ?{G_ʫof G{?x{&gyj_$.c^Q+P,]迻eV8B?xR@ ls[/?郟[G@[BQ)(~N ~sP\[xP@<Ϸ::$6Oz{|1ɎݮX׻OSfQ7Aj86ٌz>Pn8g|h+5w_SUtݛXы; fmMpVJU$5>`>.#Mw-97aC}:Wz}طh#vG@Kɶp] )t?:0J ]}h8㷦k6sɱ+5# `GGv2$mQpwSM@ϧ (G t@ :;/@a*.sw[M;RsY@!SjҪW_:J^x(?x.7 $[)'B7=os-G_& m}j_jͼ@s8ĆfP3Avr 9gat6b\|h%G+I ,o<$E__śPGѿnC@ llߌ$ }d Xѿ*P@ _'u+'BkFڎ5}F._VS,_ճ EVK:uzj``X".ZU/J7a3*//蟍҅j 9`Q:%y mTCO(8ƛ|qqy1|8VC?F{,)#ќyDc@s6U`:dEPSP#J Pq8~8#k8"8x@ IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/transform-nan-inf-tests-expected.png0000644000175000017500000001115312040570422033236 0ustar chrysnchrysnPNG  IHDR{CIDATx=ojqZPkXHդނ@j/@L/ &@ _`S*۰Wi&ŀJρ4ZM|''q&JC"/릮{ݮ3%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%$9H' uGKPX@:_4@# $GoE =_2"k|SsZ-&Hsm?w>g`N_t؃EOrNuRSVzϖi;o/=IgѓnpyΈjdCMvʋsg*@4u>*/Νl@PPo8wm۟xʋsCh8&87~Թ!pd݋ˋsq]^3XSﺼ8w@7y{//= JΔ NS@Ryqn]@S@Xyqn!4unQ+/3Nx:77ʋsC82#iۿ/ʋ#^պWU^{`F8 Iʋ8 x`l-~'x zd]ž-8˫?|{_ןT'zagdϰG?OW^AI{? &?9#g{>jR^_l",'?9M@i4un*/ί?|6C_ oC%,'?9j8Z:>Gcf99})>Cb ׀CkHNޟ?U?;o[,߽,'p,-W䮹8koSޜ7ABFæ1fx[Uݖ揉HyqўqmO|u׀ןڳkӡNo'}׿ @ۦ==*Uo=mN_','Ъzsz^ŀNPﭩ=Bhq׿G_ҀVMvS˫>gmlx;}q󏃖EOת6՛wra&8n׃γퟁww/ן24W}ahlv%pדWo~݀GAv]5u~rTvw/ןZ5=Sf .)\xZ4xڵYN4^uog5u\4޿{q UMocfYNN_2ܖ (Zv4u~uy޿{/ @ۦ 6zzZE08,'Ъz~L ~u pΝfw/5 <=_jlpHUM{UpsdISf=_,'F4l˿#_ %?sg$ꞯn#j<##N74u~_zyN}n*#x\бrbLslJʸd## Թ#l6ˉ)qE0a{'@Sίo,']I5i@*#Fa|Wlrǥ(ʅ!4uZ`6I52Hfw.4ud6_ Ĕ@JZU\8~xΝA櫌ۿ'FFSmClH)M;#W~2:Rzjm^[16I%W:w$=7޿{io l|R1(M;$^CRnJ XBe(́_zrM;;?YN ^E:.+C ԹcHl2f91HBh$m6_$jd1u+C tyc6_$gdn_7hʲcO_ S${m@%7> }iUv̍_ T'4@mHx Zrl| i ʲSϮ=3O}EvWdoH8 ~fn2VE^{mӼ7 Sr]:i0-ҕn,#v ؽ:`l딯OWϜL_ o!H8K[J^ʾ3gC2Ni2`"R66o2}l|gl5` (j(7\ h@r hXS9C+ʅ!0Eyf8\ h7fSr *G ppo(jwc#xWi;nצ\?lnj76=T_^`sݮMaow4llmN;,}]':5ifk56VU_^'9nצp4ilQ}y˖>йvq@ӏ׿L s##IH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (Dv{tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-mesh-expected.png0000644000175000017500000000342211653126251031166 0ustar chrysnchrysnPNG  IHDR{CIDATxA M =d =[H2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2` (1(0 @ 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0JCP4XtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-self-intersect-expected.png0000644000175000017500000000342211653126251033161 0ustar chrysnchrysnPNG  IHDR{CIDATxA M =d =[H2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2` (1(0 @ 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0J (1(2 2(0JCP4XtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/color-tests-expected.png0000644000175000017500000002310311701151225031012 0ustar chrysnchrysnPNG  IHDR{C IDATxom}3MK0 I!AQc&hzX0-R(-TF:yU֨SE`6fh mJ& M\׽5묽:^yf}~kyB#d^*Fx@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@ l@@  oZ|L"*'087WٗR:6!pg >cUUaEA?{7 @@v#XS~>A֠j̃V=pZ,E8G"Îߏ;L欃8\|Hr{8v 8v@N xFܟ:xsn?=>cރ=B>xAom ݌q]o>g?kniLk~,̷ncT|+l) sdgױ|07/]jU>h({ՍU=ٽ柼fu `|o6Kɠ>@{j:@JH7M!gLkU?~'XptWś~оh ;_%tyӿDsLm_%AV `o~{(OA5Olv"-U|rUz:~|^;_Fڧ:w ۯvŴpRM}@e>`6|Khwf/;Foоj:@X%5|/.?W͠,woiZ-[_yo͉s#,sTl{HsC"YYlOiܾ^_Ez|]?#4i/|o䠯iow]B-#Z) `do 0,{>8Kb9ƙΟ{ڹ 4OMOrgaڧ̒A507X?7uBq瘠p'2X-(,<0(>vɪ> U2o{nz 7M g=2AA{g~O9> ip]1A5J2jsmо@@d0WwF^.o\W76оz . }|۴%n|܎ f&bo~]Zn`:AjkVhr\}߃lqKޕ7}:zT~ug4 'p!ƅ6G5f}anav+{Ͽ&Q5< O=ڰsx'&n; oj̔A3NªM;oŭ[_\Nǰ+%@;):pj@B@AG  L{O?MI|~tҧ^Ke >gqis>AwC?vkmSDrw*|w3u[C_nB-e>x{?|{E"+0y5󗻹idר}@JW#?~4v6A?^S^]hLP z~hY;<4[@7 U &| X鷳N5A5ƺ2>Vnrץ2!`o}I?KMgo_hgkg/טڻ ,8{nnH.Ϝ8L0gQXuo-ôl2<v @Ӭ"\h1___αi~3{'69nO }p K@Ӕ/ͤ5?|Oֿ> {9Yg9=ڥ^x? -X}|H\7 _իMH{iMCo>mȉ{ }p],.1iR5{w=/v}nmTGoEZ|~6 vCt_~=:5dPFoH ®L;ԫ=_՘^g޶ g_ fhm9?$FcMR"'۽{ '<ڭ 'ݪi+m A}hk4oA5Z 4ԅw69|os!2(ש.؎bq\+ϑnc9ct62\uWY^:d2˝=L?dc#b$tolMF^ 1>cOmA/c\MU/a3 2+ <,(xr%^41'3Z`_h Lyx\snW5DmѺR<)I\8h`δX_5&DfsD P~h`R?{Lp˥w7Kgڎ @][jBl3xG^lٻ Ɵ{ c*Z~^A.![@PX7 v㥯kowL*jIi\UcK[5޳޿.&]_uP4^)ś`dhs5 631'^:^GMK`u7t~W3 vmMp!j՛gKo{ @uS2$u?нu l*>>-,@PnM7\ _^y-iζ 6 5P'o#M F`+ [Z[9H[8 #0IÆpTE~J`ӯn~քwJm~\\UsPpjhKM|4|A5pm I7_{\Zv!_wIcg b1kx,<C&VQp9p 6N}T(\.Cz/ؽ{o9`ڮZչ{e!MlXb/@QX;>|/L] ϛ`t[j'B孿ۯшW8aVsC"vK Էx?:׹髏ρ]=nf@;n˳)">贠.%m(7AS@û?%n~k{Z+eoRJcu@4e|_,Qߟ p'4![&7V}Mr׍5ߦk|[&^N g&@?n__?Us轥 `MθMG7}=^@ 򐇗&}Pk?Zϛ]=4\rݘs޺] *~M'PU'; %@,@.Kz+/@XBG"\ Ws~#8~93ȣsxS{o}G 6`> =䕷[?G8}Z-;50A}*ۄ흀ńVl6=N  v{Jd=}?फ़넾]?/ouh t6ڲ1o|EkfoGg:C;>rU߿n; Lp_GNesW0Ziߺ[;m=T #v*LO##`sZ)" 4tV޽7ypZSdenup:m9O@?eۭmM0m^ƫ/]){[t.޳ZLk<zBk>}>EFvcZMz9Mӹ{-~BKo$j"x9tҺ7OO)ZA"i&\fo>?{G^y)kmGod n5j=uB3MP߿^W?eEMk0b]Пٟ~4W@7\xW_xqx< \H;1J1O~΋:Uo~ ճi_'׀O_kh@?mōw -Sh}nn>b#p}C.uۀiQx+l^* ~7]Җ7߳E]M;dDD8!P͓l@#P#d @PPhB"9]ol칝Ʒ,sVnzν:PT9{^ۡo`@ Viܜ++ϣۡZpV9Pսɣ@۬w# t=p:(5P#D_Z i.kLl)9yE|C߿}G74RjLl)Vm(ÿ V'^=O 9iXF`>C=~~noᰂr+ ]}W>.#-IN hK6',GG}TI} #p؟a?@`%O4a@vNvP P "U 0 (@8P\ B a5;g TX0Qe!~cC'!:Fp:kv)&x#X>|/ߙkV3'& X D f[i`Eeu- Q`gs* -:9N `"ĥ؎A @+8-EM2 (= h-(K4Q@?7-lC4p9H h'=FJ4!`? (AL49ʥ9|ݏ'O'"POcr,Q@c(?LJ J&@=ڣ?)f'!P85HשOfgWٹ Q@_"Qc ArA hx` JZ IDAT Zث"ﯖ"@kֿfZF Z9q|܆,σ7ǥ# `< hR mSH\ \pi@߿F@4^_+#MW<$x2x# 9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D  9}#@4_ LW;D ?Ho,IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example002-expected.png0000644000175000017500000002355711664235457030450 0ustar chrysnchrysnPNG  IHDR{C IDATx_-YM#IZEUl6&ZJMXEXWҊZD"AJ^QM,B"նDIJj#j=i=8yygfϚYk=3kzou3._~@x)@ ` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A 0K` *@` A \4oiO?s{>IW' 0u/?3f@o/_\^܄t?XxW[o6nn?b0pp>'^~@ JPI4_mw9%&`]O`_ҫys'gnģz9v{z;hs_ @@$VX@)PNMbx-7u 0ŭ0<T!#)!0J, O&PrX>_?!&tJ[n)(ldNd.x|+?TX @ j f'fGT/L̫91g guVe .?JhOm!e᬴̊JM`#Z0Z= hՁ;YP^͝@[0hR9`N`` 4ć@~@~0VI? _NN,TZ5t4t2!2BDw_KݔєBnDpN[/@,3f!A%1V  U}F$ Qsf  bxfeiܜj&Sة: ~ `zIA`@\@@i4g@Gw1Wt y>pDs? [Ν˼<ibnz~[æ 𳯼c>d X]t}1n,$da# $<_ {WGB}''+@$p06x¥L;6N!h]^m d 7G^{8BlܖDz@>@>ZXX'0|(z*߄8u 0uŻmŬnovعS`7z_Hp;e8RJyK`K7 (΃@4e +`+7t훛 g@_nGm*ml P1P5$o,IX0Q4F`:4B`  ` <@`'9pһ D T;8 yt @D SدH@(%m `m@ HSP|44;# `&B@ %#D@i>eC`rxkCA:@Ck  gA 8yÝ?YX; XXWhG2!XXN(p*((V:/B`]$^ 0Ky ￳,= 6<V'=~J"PI@r'@eWu4 DX3*,Kԫmޙ )< p$ `6'M`H`l8׀wmh:@`:맟L&xޜor R?x҆ɛ~-@ .جk>Aw~W8H́ 0ܹΕW| =G hS~)v덇>Ė1"fp `8+-8S/@4O~ޔn|۸qc+xm !Pئs}Ib cb{-7<'!s2(0@nϡU#Q(.M>w7eDcuJ.[PXdžڹ <:ׄg4G^vh>0D3d( ! ]3uY^7G%9yB"v?|/=5GGPnou>S.]?=ĵ[$Pl;AnSWӱ f$aEE2~v,+Kx_ܼ܃lGzXP"ؒÝ9LD4`xv ;4}k>гo1Ul2>+~:&a`;~Ќ%IG~alszurX4.(l۱Lf6Ӆ7 /b8PLKY¶iunU_qcZZ"_ָ]LY;;vܵ IG@| :_C[+g@Q6( )ޥ:_ël>@Ϥ=n'Y5Ê?oFzˁA cGj?Ӈ`C(is,?hsrMbb t%D+JJ {4ki}ʅE qرy`y"];~,j\PP#c KO ;$Mvi0%XiSP c AӮ 0US?w~ ~eI`Σv"gDHR >{@@%`LAB`U|;HC`7PЋA@^ ^me`xD%Vf @/ЋA@^ ^me`xD%Vf @/ЋA@^ ^me`xD%Vf @/ЋA@^ ^me`xD%Vf @/Ћ&LAbS'3@P@(%`',l!0PrK8!NXBB`, pB"B-Y@8aa E[ p %d@ -@ Jn"' [ @(ׇV |og?u3uK:#ڹ@ pŧ18|H'^5 ,+3n?w;A04QYV7 E3ي+Sk9ZPǺJ­.`d lk{jx/ly/Z8 MuЃuՅgSMw?'jl&hQ,(R+~TiVдG"1"d ];2\5,}>j4!aNKK0Uc%â?heml*풱za_f6wujַ]/R,uN+n}բ@ڍ|¢?M 쪆bU9$vѢ?j>mZ}H.yFeڕbg/A1Z7z% JR+Qe➻W"tsd8Q6wj  =I/(P4!#s`sP P PhBF 栨@@ @фAAQ @@ >@ 0E2 00E} `&d@` `@ $ M /B/ [\| lC!9`9!@`A `A؆Br"rRC,  D䤆X@ 0a ȉIcWw@E`E%X@`> `>zB"K ||,E%`@0X ((J."`LS)95k~l =9G`s PPXBE$椩/@  IIS_ @A@Ab @0* 0'0']8_6@ҡoίOѩ>h=ޘte:|^3M_v20J/l"73x$Og+?vjuE|"lV&6 uK; ` wvYnBOrծImfEw*l/ET{B]euG / ,+tu/?Sh#p?} w>8Hy]nmC?7G>|Ͽ{l_z=D玖H@ ?vm`]3N8aͧ`36Lހ764L[Wy \!'ݦ?*_v؜XG)UncPv"OtAYDžE@/9j0j\/دsm[7総z?xe@eMgWysxe>)Q9XP_Ǫ}@M3nu`wf^z'yUJW?c+OG󱋟03CwԺ h _I2N-2TZml`ŦP]ٿsix.P[炜y?2hZv_hY,3-;PJx}Q &r㞟bSQ*Gh1#-.?^Eη@n2N2'2(ax/kȞ^E,EH:bw#ZkZPcRy~ڮL`@c_;aЕ6|b 1ڻWn~ FL (t]Ie`e6k|h֌,9+(UپJ/Sw1ejs`2EK _V(w¤Oү]@-!!rb"&w4wxD`"Oc%7) vRe>:UcUە@3*>eQ"7f_.π 4~͎4@C!7* T_P}) sa>#Qp 8D`?_eH  4|^PV!&RΨo=D3U=['DPӳ\(L)?м|ۭwS@1u?u>@3}7`^k$`QՉ91<VW|8u& 0-G4nPx?ʉ;-KM}?ehZ+5g;;BJ3-04n՟ z'؀K8ҟF2&D0zwBsئa@c>6c^;Rq3ő9_כs29eJnL ?j_Em].A*nB М!̄ 8j 'w?+]\C.u~{dOz>ҢTi3Cp<,3hYٰ ` 5" F¥11;3xgϯw&x)0ºnlܘA׀7} ""oS6fp־~[|-7V3H `$0͗"ΡV1H"cn@n =Kg|8g#L1?w=>$g P !%DHi c 0ĴG*!*R X `,1@J0J 0KL{@ !%DHi c 0ĴG*!*R X `,1@J0J 0KL{@ !%DHi c 0[*IDATĴG*!*R X `,1@J0J 0KL Σx¬7>C`ț[!0dhuM䭏@d@2:F&Gt @2 Z#y`y#:@  @ 0 HV @@HF$Cc@ o o}D$#1 7>C`ț[!0dhuM䭏@d@2:F&Gt @2 Z#y`y#:@  @ 0 HV @@HF$Cc@ o o}D$#1 7>C`ț[!0dhuCw xW'V@ ::܍N.@u0uXX] `p7* :@!nT@`u `u Cݨ XXQ@ 0% w"`K @`ׯ3QIw'/~6`?\?f7s p#d7! -Dr%aW"3sPl5]iU_-67Ptu^ X랪EgP|as\_{)`r!(_eSCYpGc.V+JFƗ(<]T$fTǙ}5e &5#ͥ?Ҵ-WPY,&[ٺTrZ㎐?,2_WU//,WVڈGW ^mcfRsB՝5[ߨjӨ_qGw@#xĥ? + BNs?+(JGs𥀥?T?\{moD#P4fF@.kpΆ߄K˗ @@ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG@h% 0B`<D&"/wM_ @ 4Z~#@d rG6`}|IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example019-expected.png0000644000175000017500000003336711664235505030452 0ustar chrysnchrysnPNG  IHDR{C IDATx_uII^Dr tESvF[(Ȗ]HnL#Hjdh%X(,"ıDRY8? 3sf>=8s5gܹwv GTFc@%9 )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ  )@Gm@8@tjxԆ p  l +V ?H`Ι-6C;j߻;o o=~bP4MÕR!!՛B`vV0{pL?oWnm#E34cJ@eWH*_h[:@+ (3c|_]T>-B@tl1=gn:.% YӢRح_ލ.OoFjIVlR5 Hm๥cWxȯ35X6@`>f?yNk5`vW~}3Zﱳ$3Wg-$ ?x&Ck5" `CƢ&`|tfyK_s3@G XQKIa!?q91fN5Zw\8S#"`ºwk?~@ T-RFT9[!,φ 09 v.Lm?r/' I6F!% q܌Dx= `9"/~tap\i8IRhtgr߽SD@z-H&}]J]g _W{w͟z/gurf`^LIXN„EڤfCME[% /Wc֑MtSg_JUIQpљ=c Xhbv J\E:ԇFo\}_B@km+;m?=e X1xՕ[)0poKNɾ}AkpڐaІb,k"~+eٟOe \3) 0*?<60l{}%2XMhQ[bu#B 0 00ip39ozZqiTU@E0WR*/ڳۜ8JS'w ّs.… 9H!B5J4E_9pGPp DpP[<ȏj❷Ly[!?+BCS&@o7_q2pL~_o3cY?MGUQL #yvG8{1ظ93yg `T$쫣ͦc/k _ѩs_}NY23)ǟ>ۊ*$0!r:o Yϙ 'wqxg^k*⦘w|f0[$ `VIco$.ّ֠S3?RE`wqked k?kL)S`05a_K qD6H_*&A$73՚ x~ٚyWN>qW.$Jk{yl4?3F ۨZ_t=O??}Nrّ>wr2z9`$<#';&% `R>F'r}?׃L \N<1͢UF <~g^737NٞRjL'HgղtfϫTu_oJ얼eEPF*7ާkb\@3Z]꯵W&oPS/e Hݷņ#Y[UYkRQ`Kp-Y3CH}<_7>{iO߶{K->Zرr%ԋZr+JD.nkָk93_v~ qz U`[ڋEj߻;êMw/ջGxKꓻVǡ0VFe򥭔1O>gwȢSO]6z c"& hfN/:kK[;̉ӿxô~n1/d!8q[*ޕͦW %%$ڲDߪmDYCC56DkkHxWzUtw|*ksdF!)K #fPQ\B*8}o9Y9(V`fV';)eǎɶ[>z]#9'_|sΦ{satRf0X !UO卒mHG"0wR32CAf8Q9el`Q:1:plm(gѫ⌃Λn-K,}>޵_h];0\^JqG^?} L\@ x]1R 85XaTto}2WXoq/B7]RNԛT q88ߍ ̬sE[x,w8AAQd@ @ V#r[vONg+ktdobWJb'YEUSf 'r`NKnn2]S&s(s&3'U7i,G&O|}RQx!@!EVw&y*e,o#~m.(R`0%p̳ktWzu$'uW9tCdw_a+qD{m3OGu__W]k-lu/ z٘/Ľ[ [Rgd5\8ɺR>ݬ.'\FOK@ 뻺 +3(ȍBܗ%]:zo^%?P#VO?zl#,8%%iOr;?(f;F@ga3KpW hkT41@nG?4,G[2=1okU=H7^Z/r׋eP)\r,Z.ݞv>|/)_& rg_D93!n쏟8ك @,o_CƅK@?xc6Y֋jߘuq f7ehLUۊظ]7}zGe)dta$xJpt/7+]@vq)Iʘs#+6ml^֞x2:25zfm73Z JE*rrX`){jq] |^IV ҊSTW4|eT&c=B9lFgmƷ ]vGU)1=f3XChr4fHV#xT%}rC姧GB[V!O^nk  ^bo=|Х\):yC)iJ^yVn60en|q@79S-}WzHh>^~'lm}2HȾ8 UCIP7D:I.NZ]wjjY.'#AlYoHlב<ΙxD(O8Iord5TnYk*c51jV[hղՋmLY5jdzmCdžUqhDbnk8o3+'CsfST HΛ'<Ҭ1.Xւgd_u+2H_5` ʔ΅7zj|.s̅sE:ebL܅U $@ʍF)gw[퍗 >\kjZncw8t5Z4"X"b\8\b,NԦ0F{ё #T[n۫L.5(ʊ'F[>_V`R˪F'ȶ́ Q@CSbG`n9$Kꫀ}/׭-@SsZr*ݷ7z/2|ۿR`J+2GP?3ξw ?z<хr_OUk\?U+Xq?^RyE{o*qd"%WoJ I!`"#_J^d$H-|rjzJ|.Q"^( R6PK_$@^/ĨR.O\-SR3O&#)[}BGL z!$/ 3\WOkyU]񎡖k it ?zq9urh="叹 ,^>j@XcȲ)Loh}˖+rIKeW1}gh[֞P*cPYo33M 0/,]87mvw[c`U'v׾NSjQ>YLop!Dvy,csoQw Z+-~=A7#[oz2Iڼx̲ /ȟ:ͷޓttOuPD@Jؚ1Zo/?xhZ|q9V: 5W1GeE 0j#Ph813 +X+k"ou&.t} ӹ-W<*4_ދTܘ4ua~b؋=ooD~II,o{yu ֠mZ~&P?[km֕x V`s ̰0:Yuɐ5,b7tonQڐ_ixsu(yٹCqwCZ(6ObD##W$`e1]%Ԝ1^j*EfWy[gO[Bm='/%GeЊ7#{-#NnRR{-d\C4?¸v<*xgCLEw{ju4)G©" G eէ`Tk_!!Ў(޹q#xhBA5ƏLjV2"Ϝ7n0R?Rx[f;+;(a?$% tvׁ^3!껃%98^6v;ДWpu/M.ePԕRHzR&\-;/HYv鸝5|SxVNG/8I'· ̽݉KN_p5N1:PlI꟦?ytȢJOL:N-O¶mK)'dY-Dl)nƐRx#x9[RKLDj'h|#x2#J\p` ўS&Ў>zNwXS̕r.$*7eeԳ 3W=Y욯޳ftضvBfl=THDzxpP{|ZmJ ݚiP f+A}tZ:rl)ݮ {)d.Y{3ZˋwU5Jȱ[ޢBuj7M9r ,>+:ke{i :OOw[leofoOuX@ nt>4n|_\lV5oh&ȇ!"(Ė%Б䳗,Ni7@o9k@ECkH B`%uu7RWe0ז=q8VDo(&U2_ui:< ;~Q::>LOL)S^lH@PQ%)}Z3;*p.&ǔW8\(n&w[%9M'JΕmO\G^?8%@/ =th{bEb7*nj3nyϳ>4,@':QnENXqdUf.HݡyEg2@ [E8 a2S$a'WV#ўɾN :1S"EZ}Y|Ź9G`0'w8iwKɃ ӧ*C^Z?wW_#KI Zi5Ҷ[镚o$H_5A4|z)ٺ{xS ,ȝ8suF xɐwXZd^3̢jiQ+7۶kўuVMJe0똃ս3K`ݍ4c/qk]81Fwwh,[Z&tQq}8T`nh? h23x=GIh+JTPET_7@!@EăIeB;ACא$`]_pMj@+$3są1~ Wzj"[NM˟5:'Њ1ch#UF5^ݿ=x8kbNĞwL4BOjVJ!f=:=7$f{D?WMå%s/9F#62w KM0xiєzemD{XHIM5=K<UNnnؑ,nUl~nCG{]V@%иp.Kqg 3'5UMe%ϙ+xI995g  {~6 njuʕlPA'֟k\!t xrYz#NZrս /̎inƘBTh@`O}p#Р O ~H^b[g) N_(e,!V7NQ D: .k)N:~f$Ȏ)ٻ7ozt鸐@ իPW$R,1Rݧ4a~AjDJ z[\#dhݎJ lYbd-#[cyݙ9mfT!HV Fjx^=ۋtBkJzaJ5*~w[jԓ Q" 4`csI?2sPNR:k׭"3o %^vvfCU> _v BĵUb]x +WO=B2:}H1hǗ9[/]?!=}tDrZtS[+OyU\ ,;r%p>n'$лH ,Vz칫!@g@`~]8^lI;KHeʬC]XoWV"ЂLU}xp@\fxw- K/I@`~-82j))2YgdՕ.l孮<-ɶN @w e6EF5$;u.j']]y1UuKɟN  N9 )*_úJuVrT D`^]U Y=D4Mu=B+$вuМf37,c5%П I@`miR-sFNkZ5)(g?of47z ][} J _,X9V޾Z͓ʳU- 2-Gĵ[DmׅdwC$]ci7‡[:gnl2K",x+tFj@!p崸\'|8}(3Q `&NwM: hjrK*z:mA]06~Ci89wZ!Bj!h,huo ;ANx8k!RDY.=/22O u9S . ( ZP ;#葳tTf1;A9$5 47=k8 )| M!x4] IX^ |w{{N~O(h3j6Vu2w'վȻ`-Vp J4P| [@ ߧ/o')` `AOt^:ߣΙ*:,$~-1+N6~?^w! |&,$BS˫l,eBOfwg3A8й+UwϠ0BPdBƇԻ*TE?[xJ >XHUU_8E]@`<@QqE%ў6@wm:I @]<tS](ǩmqB܅&!"$X#e^#2܂ 0fϭb]K6zEr 1sRBV!:uIO@`A8K}|"t@s@k2x{%U/bq܅$лHA: _;O  ,h7l6[;fMG!f5W^YeA@[3wTJm-KO1@`%\f;y~4 . hkF`j/O R|"]@`+z w} C @$?BvOM(T)X f!X㵉h@ 3i`g_{+H'·@3Zq?(]35@) ֫lIÆ Vf(5ax53. > 9ӧh @s :$C$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$8 VZ$z@$KHEEIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-concave-simple-expected.png0000644000175000017500000000512511653126251033141 0ustar chrysnchrysnPNG  IHDR{C IDATx1yhI$a3 -q $+1|G#$ 1-LU{]UU>O2F_=N$ @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"0@D P"Q 'Q 'Q @D P"Q w.ȋp|zZϿ7b$Nc06F}bP Xs!G%|š#AtV&!#wcKcA9D #k$t9 _>| #b @g6'f`Pz0fD1D [ s%.d}`d'x268@.eɀsNF%8֛"Q `#lǗ2wd8QXߵC gJ 'JɀPfz8@QdA ?[%8@[%`;l=3F%l=#5,#ۦA>p*f*_ߔ{Gf`Q dE( JdU %AV0#kRV ~Pf%`d J6(+`?du(%dmyՇww%@XlǗ7`&%@4 %Qd>+PP t!+PcQd Me`PfC\ d9H `*J2p P2U@  J 2SP}^?Ȁ2UjJYd`P%$QKJW??ug [%g %SCnߟ%>c p=k> ;w2p 'w>Onߣ ;3l8`7s-L(}3%8e#phS۟?lWN@O/S%}g~,T;+=8@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D D G'Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@V "OtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/surface-simple-expected.png0000644000175000017500000001634411676112355031500 0ustar chrysnchrysnPNG  IHDR{CIDATx=rHvPB&w-hڏlY m虌x;O[1fT7* (d&gP"Kd O_b @hxe @@x T@4m  <h* 6^4Ml W6gM@+3@iM @@Sд&@  @hxe @@x T@4m  <h* 6^4Ml W6g-^/_ٯ@i㛗mP$X/lǡqN@oлs+ E=V>'"G &@@#ШKo(Z@\Q^@ U@t|;u[;,fؾo29&>!@@ Тmozo[\R1i@i˗m/_ <. !oA&/  PW@mlv^ݻn2?,0d2Hd%s#& < h* 6dv%۪y` ]ǎl\HZV?Vc޵>$ qIa#7I @@SдeʶO/Jq D! @ î؞w aZ)l_vzEM@x T@4m|S80MWw"aB @ ٷyuOSX :C[ϐ4&7I @@SдʶO2/ "Q 0V@44j;Q[ﶭWl0[B&sՏ  OQw6d^wgs9⏂ i&@@l?]ggݵ^* rmv 7I @@Sдa˶' 4qEYV,L(M O@IVwOѻGt oo@iCm7&G@uJygQ0`9 @ чyu!sV%|T& < X:qwW $@@'ЩajTKD EnO p8  p8KnKV3P C@s*kokW1)` A/ $A@D9 @pz[67)[^PWgY<f@  P]@TuwԇRj% qza&X* rY<ە*`N&/  PW@I8s`7h ZĠ"( rw2͒[JU@x T@4mزm=\$֑|x4M?lpn*Ѕseyx4Ml-(,p|Zr  ?R.=\\R@Ԯp/Y.  @hʶ_1qVV]1'NFk@U@Ϊw _X)h{ }@\A H4S&@0B 8gi;yz"l\D`Sڝ%:w_Ny@xE&H9`Q p tϯ7 ML.z~QS8"N@k  @`h '5@w|M +3%@P0` 8iKp)N@ M&I` p 4Pğmbr v̎4Z$ha.7 82a@֘ F'0D)F\ p ˥ x=1#,K݄a@ p) .EK)..% Bd N@v' pNv F̂r7|~?Ƕ3t Զ3 3Tۍ]\B@h" _@7  8:@vXSݚc17"@@z h(ag,f6)P+;H:'@1pϯ $$Ryz1NNo . [@v*SVQzL@ۯT UL8K#X.h9y R RS 0 m @(Z5p Ԥ33TC@ #3$@0ՠV 8Z]^R7c(V?̆"/(/ ʷX-h"hQ}p ? ZbBX# 8 N(`9 !. -@v+S ]-j+@W$> B@hI @`Xo& 8[nhP! r -&]@tO@[ж /+lkG&F@i4z7&@\w'0E)r r- \S1cLǀ@M@5:*0`=u`; @ ՎHy~4syD)#j~#:u;FNb,tе!GR<gG[(I @ H0%K]׻h@: S* v^ l4P @ ۻ3w 4Syk .jQ- v{a B)Ќ[gSl p_@7rDuT->@ݟ' γwglGOo N jЪ݊%@x/ylę ])лY?{M?嘨Y! PwOlYIky؂mUU;-$Cd YLæ)YqvG=76 T.$p])tZh QΘw}SwE#ШJ%`_g+2v͜  0@@ @4T@S* O Wvdݩ47Pekiu d/+L @`X& osr0(Z4>7I E?J'CiB  Y@|W`ڧ@Se[0}|K` eW$>,P+>5P#@w;X!`B=8@SU\@o" GN ]V#_(@S Y ]Vc8h]E?A~d&V@mH} d[( b" H0 DU&z!8E@Ml6>j jg̫տ\K$ҷsN:w_qC#/`rr7$@@ f@S Gws\_ @ +"`_ڬ@z G25hhe `?-=Z*(jg++`w}f.Z$ >q#@S R VV,"`? dX$꿨n3B@P,?Kb)gj̦Mlu&@S3@ĮSF]k>gP>}@WS S@n{LP I  CqS qy B`{Uff oSS6 & uT=lQ$0 ְ. wz dp_0 3I#`O*) nu@ުi)'(J @`b b UΥS{@Nof}9Q@L5t%nM@x 7h1_,D9="UHw&7m1& Xk_5&W*`~[@V#7 x4 5 2t l~6BoY:e# XG(#H*#}X%#<2QWAQ% WvVqFJ&~[).0BH( 6͔  0B@P4 M3e#A aL#Ec @ H4S&@0BH( 6͔  0B@P4 M3e#A aL#Ec @ H4S&@0BH( 6͔  0B@P4 M3e#A aL#Ec @ H4S&@0BH( 6͔  0BeU%IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/scale2D-tests-expected.png0000644000175000017500000001704411745120722031166 0ustar chrysnchrysnPNG  IHDR{CIDATxݿu٭ 9&fKC}o*Μ)R'n9c-!/Il). <˗_>ޒ E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6~@@@?w_]_%ݗ/\5q 8 4'Op<[:˃>eeKooO'zJ*Ŧ8?Yr;i?!ճtIGAZ'3R_rO]aq|_Fϫ+ f?Yj6ۂK| j / xTp*w% |hh^Z@m% +-G_sO_|I>?߳v+gn[@ۭO3yFotn0f=B0- \×m&A۩64tE$+F#izI[%ATC+ E ÿKW# p~'i[ TO/I%p? S3wқ$Ļ_׿cތÅ ̟۵3Ck._( >`wMY_0)$A5W`=.B@lR/{$}"Wh'%ijI6}?U lZ;o6XrO<>q*?՜M*_ケ/10@V=Cߏd_%^[䲅@o%A+yZ`n{, z  M&x$Xy0 h{͹!^Gd|D`g|lj^/; _ !je렕@$/E[*- zKjֿlF mzV>K|.V@ln+,ɗ# l쳑{oFk?,bo}z1pWI]3ߓ)]]H:՘zZk8(Ъ6P)mpZC%Y0 yWrN,p^=M)s!Ƙg} fgܒ 57q|+Rwӄd|g|G[wT&ۤso7gQ-n? [H]T2:(4f^熦IUmˌ۶ ^$h%z] fJ' l̐C,jk|b9ں=׬vnvϞM#j}?.aM䷖6jV;ŀK"}?CaZdIriJu.in  }sIpޖl'zC~$]ZrN#KK?>ܮ+''Kk]3ȹ]:"էAh7%, hK E^*T@߲ѝC@$7G.P8f>o[ܙ<(L?}qr h L@(S h 9$@q+4^z+T ^@<6 3Q 7|z; ; hBY`l hܝE`۷n p{4N'@tx緃^A@8V@?*u 7 hoz)qmխ  '⬍DTߧ @@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ U!@@6r \0 0j @ nw4kIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example006-expected.png0000644000175000017500000005472511664235472030452 0ustar chrysnchrysnPNG  IHDR{C IDATxy%]{}u{g٘Iؖ-@ Bc0 1QH{6Bᰍ2bĘ aY=xI#͌F3=KwO}}n:ujʪ8qoVVV.ffeV\HHyWdHH @`;  4Yl  @C PZ,6 PHH( xH(l$@$PV٨ >ݨ,z4d7?)kQ @[p& p! {>y ~ڰbAH - @Zb M j&>:|%bh3"U$` G>L$@<{4k<0 !7LH#@J! pC3S! PfHp!U 77TH Te . >xHHd D  E@A3Z  PfHc͔HH+! w(X3% #Vꆙ!h&7֑4Yj @p+uƼ @*CIHHQk|P@TA@ΨSfB$@$ _ܐ 3g EW}07$@$;^0gʄHK.0 * PĜ   \L @- PjY, &@͈!HH(VHzf$@$PKC,UBq@17\kyPMGtE'W p=RL۔ >'ekWe8j8V`.84^Q vĚSmmXqL( ?$q2 $!Q0P! ZH*'L2мH罈>Cpvz yÓ$Г/1-攑7)@8t NRlabRt #>=yOJ{q9? 0#@S48Tc~ wξO7c+TWen#ca%LέhJCC4|D>lj[NLq I KC#hld7A l@1R7cG/ap@ \љ,+~Nd6ǩqp_]2ة X:znjᑓpbzm}Ays~He[Ɔ0J{S-=if8b1Yr*~ܰpe !c|cQϞVk2~77 s/,_捥ko;?[q@Wmhx׮4R7~}mSMQ w*i!0=H3Iպ[z\FhhqIkyQۑ\|e?NhQLj8|s M$ĽAC}_|C'vG7փmֿM q7,g$p1C3œbfۇ/nSIF4`u9ͯ^=x`?UB_ [pay]AəpTń$to.ԍYWc+srR =ƪp:^Q|ñxzatwa=l,۲V_x. pd=aVFԀ ( *fM 5n0 @G UARs]u9?n-طmnlͻAb"U!#913RTVTj$ @$xF im0B"x|Fw* {i( }~ 9\Q@ 8yNQЋÅ8:DOrbd#\?X-!Gh!322BoU! Ef#s!X=)mF%n0XgcR68g?ZYk Qd 1ֶ`y-!/\]?ri1]ZPX0ĘʐhL qPz2rpU1M.zF:aE+I#  ôu dz>0H;X/FV]+hk\Wn*4XȑA(s#P]M_3Kc#k:m l8HC m ̓VZLSoZ[o^ FF  'W6fĞo)>U}q -FvOy%Sq >UZ*\ =6p %f>Uˉ.FB`##i[7o[![5,?5+C$@$ !(# (Y8­[byH(wY$ŀ$@$@ P,et$@$PI$@ P,et$@$PI$@ P,et$@$PI$@ P,et$@$P U0$@ e)_,eT$@$@ PbH  @! (Y1d>LtfɷP,Pj^, t#@F$@$PsW0G$@P? Ԝ]5oe, @'OGx!dxD$@$eA$@xX) @pAi )~82|2E H@lœ$YcIFfJ#v3 B ӧr$n$gmPD.uEğÐ @Zn%"_“*O{T2TC`E 4K<9N$^UvzS.ggII  fG>aLO}|>2尞 ,) 01gtW@A7 N9F_/uu,^ZqS $XI~PbUUp*U|@I~]^s O.[NdW؍ZA7 T@C:&pֲtm}z? $4s ֋Cyۏ/ɯ#_N (@oH{g;3&go{\7:>Y 1&ǙT}@UxP4Xx}_m06!Y*Az'*02:h+W-2L%ǏWwQog~-ϿO7c`H6 .0+A8MxY'oo(uC&xVđ^XxŽiB 7?K+F} ǩ7 }APѲxB _/`d,(ȠV"f& b8ѯ~ϏC塧}1Y$DSoF'"()-!>X=c çu:rQC%W di+4=g냀B'*!o=1u̲TG?gA ~U~Y[6@e&^;@CCN|p{޼J[Rݿv~dޤE% Ef#'~Bn u?oN@xe|_ /_~GNMp<VAцX @#K4X),(hJ D=byU.G7YflZlGenP h5j.(-4_T? l 헹!LiV?2П͉=X>wt<ׯG?7߽f#\1V/FX Vɋ|,n,n葄UA}=`.Kc:`ei}3 xǏqAU~d] HxJ3ȟ%c qb mb2#kp:EK=nܺ X:}7WT! ?o|=9kL `*SCs=`CR'[*C8یuʑEVP8@]BW 0 5 y_z=7! 3nxn61`J77Lj-)SC|uB 񐌋/{:) f(D,npS ".I5[]?~\#T 4бɕňm`?$@E(bYX,?&͊*PyHmEnX ^2ȷ쾧O6.ZFE$3ە.24H 5PZX* C݁%@ha|{ph@gyH b3Ph4`*u>RO$Pu`g7W6(})9=0&n:H*JpV[4`cmvpS'(@ћmn,FmmnRmmeBMs @O,ރ 9oWp{?P;f_E=XRPo>nnlom,][;q<Lەg41wOV zn1( #cCj[sv|r_6HUI𨦔_]޸4"g +nٴ6z?q[ *C$-Ćt4_>0؇Ɖc扱ѱFf}m{rz2[۠xQ#y9C}T^|fۧ#}jX %G{tlX_opjv(~1V~z~ $ж}Yo [q ѱс7!p{0Jݾ(׋vc)h+ _jC%.+7K 4v0qP[8hAW4ZeGZje{pya+hg@i~b1$OUXO` 8eVCT &C?i*;wZJ|B~Rdzݢ≱7Wړj2 l^zeEEr5ΰL2\ !˘F7 4tꙧ,`-Cw_ȳ$瞼3olm8pp70x0h;_'L(vy  (~s3?*Xfډ;Xw,5W/;dmO@b$;\: pl_-@?rqXp5Xvohȍb9H2'3d 135oPj.ٕ+wqFbP|t+䎝7Y7Zt nԀnd蟁@Z?55>~8zߋ//,47 +&Ҁ*/9YAnth,]\'$wɅC}{O5+|/~T] pjRdTo='@iݿg٣i#ax0#WIL F :

    :<g @÷#}_e:}Cpt^X0óϙp𶎟͕7*Cvb:A(!0!= nh# 8C(֑z*4Ľ{{o_{~S Y  CI 9rcG{:݃yW?|gq @+=wu>Ǔ-OHaH@'VrPn_YncgEEa80X?l=4UHRTp1׿OF' t#/?kGvmO *dio.i.08rj$s`/Xv[`Ŏ<[UA Zoj?v l8tw;wfCC`{k{xtMȷLY|5&= $P,Yڰt"U#m?r[gɎx~l (@@p{[.fž!nO:1arR /'@,sȀ>F?[gW"(ҽWdS͈db8q t \3x4BXŻ R.Exzc1G |$$jC@uV\x;z k"m`y&= ͐=)s Ѕs<$Hte7^{x&WVFNz8YݐY}c#u+`5GHiw=xv[w>sxH_6Hl9\^> ?>"t@@G+O<\&qv+Ͼmcg.֘$w XXyvۭTXaHH@rʢ#[,&!*[\n@1 @GAX pC@=a݌XN=`舋$K?uo:~ix`\jX?_ӍZOJ&p_'gۋ3/$|K- [)"|ЀCXxVT; WnMljvDYtV pC@ڂGoګ9J˭kǛPX`oIsowjP2྿RʯJf%3"MTR~ӟ~7l7:ZW/Yx*z;uyA "oo=jy1Xu83n2sR0t<eF=(8'02:zF^jWLMf36 G &05vLzT~صV"ȐL] >gK:rV볧f*9zxO,ޓ &pl&pV|TcK(H7W,x/ :<$!y'{5 1XuUi.UpT8~ssd,M&&;$T*D`x$n;μ2/"0Dž99\f$ 7rǯW_Dmv*Ey lSCWs ínV @T%3#2;/{yH6@Z",cCW_Lm7{ZowxOsSt ׇɽ_<1f%I"5l XmZb3De 47okUjY$kStIj*5("',|XޱRM #tX4[ 0^*z[s8*jF } ;ikĐPmZT l5Z+O~]xiCZ}<_!;;/>}o,\$'w̶oїJ4R):Kg{/hߢ:2>C/Ztr @0tc6Fm}G8nne ߑts7]$`ouVZz`s842L?"QCZ<<3_KFwwr/Xt~ua>X @ 暠CM _e#/a? =0{G ecZdxxb6I}1Jї΍? 3L?+xu _<6͕%=h`Ž\e#/돳W̾$%7[7Q,9||v_j?5ߣQu%|Ϸrr$<*gue_rNv>- sesϕSLҧ{،8xsh[Ͼ@R63BGc_Uc6˴y8br ݅7tُE8t$' PD$MB^>L `)Qea3dH}U}kׂn_ghwGXܘ춿.l y<8shx@4LgǤG#7$'쾜AIU'p&Z kjj/4CX0Rhaq!L~{mMn18nm9q<<6<K Ⱦo;"ڒ!\Ƨ~-h !@{wުYԓڞ3dA>M|<0V ȟS<]kOv/]_g{_$@$PPncRXۡsM9dFUӂ S$@$P. ?* )x=ޱm%:9P)JM] ٣rH N)K #GNMáwdo+ +2 B`AĽO㣿[߸$wb T@wx gA_b8z 吧D؊ %`qpڤ= {o%j oP:,>tHÓ @q+`wb@uySρX]Up/œU'c& lxܣj=cSxhYYX)Wŗ"~3 h 7viy-2&3I O\KzG i2 q3{@$@u% }e eb4O42$h7_?y{qC  ?4C#;|lU^ɞ!HsmE<6ξ\qnY+a 4@/) =NAԓ }f &MJ@ ,CahmuS[8 M$PQ ,n%| nu-ߞeE1H (ۀK4Jd]죯T/?93b| o&c @i#}GeR1#cCR111V(.!L$!GYCBF1+AQ090@`x?N VRW_+1 *g5 }GR??ޅB+ ʘ`lai+t I YgSW AFπr/QIJlĸ'! V$g äF?x@7 >e<3ΰFq‡iÇc @UAO&LȾz#X@’== A-l/,\nJ7CH[\Uo&loB67z<*m,*$@5#` 1 H$hLP*s/,Uck,C%;$P֭D oN%(.Pm/=m=+8W7s.ߔC8랆Po3')s4?[{t[(BKt8eN+;;dD^EE,B{f֦̈>}p ՝ }ipsEQw "0'C6džz/+pꦢ[p)YpHݧ[)ywB%!^})5׭b ŝtX]{ҵlV_ 7>Hrڅ`zgx=jY]&n=1-ӯ%+069c_ / -1=|CiO0rigRʁ#^ [o W[dWe*~#t Pޚ~)Cu'0r} nD)g}-Xu4zp@Y55zƞP*Ç$TDN#laЙ#R s2g˜QgꑘԓȀD ǯ~嶕 #,[&aZj_|~~bLdlHȰ*YX*z8iB7̣Ȋ2ΰJ=&;IDATMΰAg6ˋ};FQkW\hof6ֶ1vsSi~n(돼%WlѰѪIDZ  EBl}WD<2!FVsG|1`8LC1}lwG ﻧ.|eB&` RBȀRItU_طb__^^*N7|ϷoRMi alE?뭻G{ UE0=gm(pnX9ۦMW!vwA3ÿ @VE~=eatOoI?2H R`P &~mX 8Tu 9?ԍa|HM**"ߊ*#uϪ0WH8q<& D&m8{_an|zSUˬ* r$O*XQEl?omlyzDN/V?9 2pGU10'~ֿQ~+R 9Dx]@Ãpu,n:H RL?rXh*y+AdşkK swnpԌ,jq}H}*׀"Bn[,@QA[124D^^K=AsT.byY{ޕt5@)iq=F1W6T]r@*/wرa*IA؎fUbG/<2Myp? q)+ 9ÐG֧} VbS)\j"d@ "[Sy+KNџ;֭Yuj#.HN>u  &GɀS#.\^# (׾B{JИPJ@=3|Чhi=׀"xȀ{ L]$ XYL11XYX\ ϐ0>|懴`Nerb},<8 5f?!j(xBJ\Y@I@;q ^AJԀlC|>LЀ$|#g _Jة Y 42;;XHr>ІkZCY^^"%1:QK,rTe4`ea#kVl 7RJG(;d, @ymO_C+ IWBGE;Q >nn /ޙ7} 9#!7[e7{L泉2 ˚sN{sS=Mn=^F߳2dFBh@2w=Pt t+vi mBCdCaU j)W)%ۡǟ k dJ~kZVQPŕFQK?y( (Š_z\Şp (TJ'R m:hg{'ins] m~no ;nu*ZPM>dfTI9#'t2J &gF"zH='PzO_.0gM b @onR$ ɅTˇj՗ܦl6x5qb5 C8U<JB`A3y=mm%zًuDSYd# %Pi@)@)-<=ɧ>@h!S4ULkUF CzK2> :$hxe<>`wbht /N:RfX#WfjU4lvAD޸B;~.t;lQS@:)hsAjBrPЀ?$` BX=zD_ FB8&_Tu_n҇/8@vZr0O0JfIh9?+ M3rhBJ)PZB^Hc3w+7#=H5$tʝ V[=*So6<=?:dZ BO,3>9^Y ^%&o,L락rM?V#=&{,uYȞ@Dh@ P5j1Ijrؒ'psA<{`lng@孜Okʲ'?9C{9oLUDc% gb;8!6o)zAt_{/{bѤʢG. lA:n5P/+w hr{0!F4K7(`L?(Ý?b, d+ \]Z':Quݷ?_mjntz~tZۿ_|u!9EGJU4ETM돘 kQT@ׁhKZ~SCUvoXPF@m)l0Zk[F!]\ Ir"Ç!Q?[~Zvb FFnų@@2ߖ%*j~g@; L?[˽ʥYc U iKngE Ȍ] K7|;v럧jZA%NKvcM_ij㋪_gd.q8e wUR`7YسtTmYn ĤE'T_wζ)__g tQΞE+}:8ph3CNe3.LbbZsfO./j$ UZ/%fh˶b+J (  *oS~9ZQ:HFG!3F3% +Pv4"S#~Z)̚FtptnaaDXsgM'IA)w ԇ Xz:{>~d{ڍlڞGV lܦmV ?8ȏ|]揺s{J M Hb<ucϒKgQ~OEk?IUr H/X +yMJ/c~'3B>J0yxr`V~ FE;B:p( (bZޘTnG1-M4C0h@q@liIJ< X,K\H%-VU85Wvi] M #-wJxM@U0L_t󒄊pPZ8kNkch#(E֤߹hL;) .g3R[PCrz;y,rlJV@׀n{Cr~_ 75d+UV8Ȁ ,(^Qh9$'aup:۪NӋ\Xo\P°Q.K# ''*PՔ-řH(.lWUPr({.kg{=T}/e/Qijh)~U%/lG¥GUoCkJ:ROTmb%p[ Xi%FRso+JIP,kp(Pl),wֿюP4`.2@ (Nvhea=NNXGZ)*Rw%SJUgQ2vY=42 /# !P?:`cX w񷎴QRJhQJk@}}5;%6! @+[X҆hK^DjVG E<>r 4 7$ hNyQ Uj2yRUԤ`i bh)U=462Zd6|j# 5*);Ced& Ićhr6'N Pv|pP>=뽬\Z* QD{WvgN<*GEo-2ZZVY/uTm灚g:W>- @%KtAI.u$n9Z@ gRa3b*wKoǔ8ůtM)@-8 i@7/JDZ8(U|=M\ (WzZ KeUAPeud[ Hn%e @rӯSVhjPʊȪo2@6(4?xQSW]r1R2^X KTAhud\ b`ʕZ.*>V\GK)f`E("΄lh<GWP 80F̴ˡMߤߡ)~O9_]-r B @=걣jK/*N_@¹6 @m Eh@)_JU$XaU :9(uM,d\/*Br%4~ @괣D5/+v/kPj(Tf K,jE 2@/ Եfro̊ XoMJ4 @뷣t 5/ʯ/P*(`TKrj@Nb2@/4;Mh`e T n@/4b2Pi/˦_2@/X4; KV @=LN 2@iOmTuw~+P VBu4tt'@w6=\µKp(p+>_V80Pqi-`^jXHH,5L;:+z3 PUh@fUgaB(!$4GjsL?iF&pj3iYI&\X7bQ'bPoکp)͢Y͙RX,/( @E+rJoU1: yCf=ȎrSd2ɛqK#릔f 8KTs& o5R~~O|Nr`u&*%M1*l)͉zK3̢̓ɋXUX)5$@_ߨJh2 @k?QdcbѨ&~5 @Rj`a{ZE Gy-U>3 @kb*m~Wu5 奻(ͬYc y.cSe @E5:,D45lZy6%&U> @uPT&ZjV5Hf83Ȍ*._i啂QoԻ~KGHa׸/Tj\^ @jQ oIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example011-expected.png0000644000175000017500000001613711664235476030445 0ustar chrysnchrysnPNG  IHDR{C&IDATxO+q'GZx>8)tmqbϡaBKB(~Gޔ͘~ 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65@hM @@QPM`  @(x&@ PT@mi @@X(* 6޴  Eo 7mkE@ƛ65PW K*yu{_y_???zM(h%p/K"6/K𺂀es_nn/dRJ@jx]@PggIzn0wC`ȃ [l?6w)`uz]tF-C!ڤv`[4J{>w=_Z XaS7ڟۏ2oo, nҟˀgdL# i|B8tu` n^{',\nˀ%C ۧx|3@Z% @CLF F) zv/,S@7U!7C2Y; Q?Ȁ(iM]*I=q  ]> p`hϻ/F/P^@o^aZec4IJȰߋMb\0nUrϦ#Y+8~H?R!T: @ҭߧЪŮsݠ;9Ȁd YC(?c@(맀)Vv !I< O/T 0/Z<4AU̕D VfPS1ß!`1 yznr M)]޳C (SN^lKբMUCmʢwi0M+'3Lϲ뇀'e iOIXC!ڤHM]q|;Z>|ݠow1`柝ߣi+ܲ>=ܾ"ݼ& ¨ 0 x d QΖݿ,J;d@^Td?ße/nK4c@Q N@kUw!`U=O2`ZbP9qQUc~tYz!Ek>?9d'@.\fCss8K;,*0ßC[^! z懀K!$ u=.k/ruǗoMmq5ʮݿ:5w,=wn_K=&.rPڛ}7o{h_r>3}\K^u_Fd@n%[{wj> +b(L~!EpFw_2༡+|ח:'pϷ Zß/Mv+*pq pXy[@&]C5@F768ܮ)Kśkv+ip@ŮFceFa^7j B5 F>A)m2)]XC70n) ZjN|-|se@y@`B[( 0O9pWįuPxf?>o6 'vrw+9ܾ.ta֋Y;{ p2VR l:'oBNN{0mkL <ȀW9 ч\U\NMT>B@@-d54r: RXH$ 5cR?jR ȉh'єNr+ 1Jq/! aS$YMnBM2!u[R_On O@n7! P@4L})O) @ीxͯn$! R@L{NMa=<ꡚ aSҕ?]KNY;.Jܗhg'*tKMMH]Hݞk_dtЄq֋Y;1/&opy S7ŵ@6$,¦+![o ! Aev;js8V+BkOˀAZHh {djn AW6R ThV̱?n5 녎<ϳu |?M+'r,֯鷃 Alg~ دO+ m҉:d@`u Aa@C 8 ݾ ,t_ُSuxus&@M@L >q?UOf!SƩ!Rkqv\|o2/un[| yyz&NtaèGhW2)uo|s IIZzz2z @Zpq,jK@긇?}t3H@$jR ) ".3^t!'h`o C !ۦh –?nаco9x 4l{? wP8( 5t*a[ Vv*'>hOFkC# i[;rR@Ԍ?@v_ۻN`|\ ӪevM3! rE@  B@hC"7t!`IGtW+ u~IН) rHUnNC+`Ϯ05'}A[8n C4@J ]j2`v}[&/Wg{yo?C'^fCIȯ Hmc @ HԌ+^₝@'Ɨ}.G@ _Ft'4N.W!`X ʳ'U!$@,oV2<R\܀-ûߢ3Rbw2Y޷g:v Ȁ`|\\eH(mHۚ s={'N `x\% _ "p?x ] g_|@E#yWghǿ*u`]E%\hPĚ)`HPgs?SIH]E!`Qck>-`W<(O>*`\X?}dg `ZDWxvw(`Z5S 5Ul|) 04:c srT3Qs:v$ 8 DCt#Tb\ Kub1P~+'``ZKx."VSp#*nR*5: )[%:ȥ?7^bsvt/|֨Tϥ [=S@s KŎ>Ge@+Q*:O@E\Ns9'g8)`? UzTZTN$p `?<<\+p c[OQ@;h 9NીIotIP+Lw RC=/`|M!`PA܀2vvH?[lCր`ܠ{,ʡ%DU ǖ@0#F /`|Ddğu(`:C?{mvۨ>H7b{͏8qT+0B3{ { _ߩ}Y~:ou~: ;6 chѺ vkѻZ-Vֳt`[V+Z ٶgϻizw[nу ݦݿ9i /:eݿp~^P?UA+[+߼,隀$W&)ahʹR_ 8:P=@5 =Y0mi (s5[59Y \s,TsC srVkuTpZB0p>$.e!''VO@PƒC @ df@7bY 7Y.ܘ%MhJD`[*#ѪDGcq3̽sEqs罝XXG@$A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A %A @1 @P D"A ɤ#fy OKM,,\v q j^yE=S/ĶacoJ}€ A/`S̬] GwpkU 'E,~V<ܚZ @Ǎ4'Nzk_̽g!o,`+d(A@G3c~m@ ~4ف;nzpwa@/*DïL,ٮ sݷLtmT!A$btCnG'۶;pFpG81X lt4HseJ~V b )A2t @rGG坽?~bkmyέT_ z;ےw^%h#h׾s7gO<={Scғɉ:b`l7g޻$m!5˱IӟmKCKt~18R݅ūXhݜ*j{'x}xpܘ_zuZ+??]$v11?F 5)l{\ ' q{aA JPZ~{>N9[Q\^-ז&~:+|ҽ9_, TO3|dw?)zvW[2y+XZٿǟv#f Q8O4%-T7>m]iMi/24a5|\T3G=?@2\ dTPVOFvKjQˀd/^8_†,lsd{Gw GL_xC_i~Jd$2P4(LyӟVZHO `aM ?~AKƲF޵5}ۦ2O>oyrck[ˡ7 h&iͷOYi=Oo7:5/}m`ɉ_ _n?j>Sk_߷89ƉpF],Pkokر.^f5+v]Hf/&Xc$2PMy}0WX߂|tr.}ܾmKvзVW}%軕}!1ȑǟi@`XCtp5Ԫp>|7Jpc~߻T>&u`ԣ>K ~ocjKpKN!;֔\؛߀w[g;d`HP̎d?'0GÑNdنiMyЀj[Y} 4^ֿK1hv5y~LrWǢwO˻I%1H X`Ik58I314<Xc&%@"nʫ/xMX/w#)Ao~fb<5[z񭜉t#p?|6uOvw'W_ѱ/r&.;}2}48o0[8K:Wܽkk- rzM#? @BW+wK+槏m5rWҀM:AsoO|Ốܗ׻nG'zEfDZ{Kw W Ba>񯾸#u*|)J}d/obWuԭwOr]w߿0dIf@}Pԧʋy[zub澆s?Ξ myg_~ jE|]';?Z﻽=o{sO׮4H@67&0׹>38 _|w:{n/o&.;Ov)0+[35i16"s?!ЮR&>t;VooOW^TW|WCn+9Kъvۛov_>Ũ7榽?-%t-Wַ][g/u#:pΕkJ[f>r!ΕkKw8TW|!#g;B7*}gz7?~bk[~>7;5+3<Ð,j>FkKzs7gO<}ΏV|&f S9L9[ YXXz@Z/sak݀neOvyJYySH[z29Ť8v3mťݬbT3nV:`m27s&A sڀUW>:9>n߶%gu?[SK_ ҥvҎ4nֱ.NYo53Ng.]|jp˞||op}TǠ1%ݯoV10vIG0n<I?ٓr$?%?L*~'Kdx~G?zwɹ1럲}&.;eμwi1Vrb>wm~J2oa &ͷOWjnYnm0"*锤կI2wP%%Ƀ_w>tW~\>r &sV^}q LPYv?sWZ/lOW]dxiŎT}_oVj2б{?^6?}ljZ{3KzCH_wu9N?d4ovsUU*qyKR0R 9M?+@:I}_Kwl (|G^ofu5 "\p_]gRֿ P|ܩ ӜԵMvԭֿ`6 Y΀4-kd0 Hd*UO4$%yǷ$2PQZIӟX {y։L%kZ9E~WCF4^\JN,] vিgM`t5 )6VI :s3Ц %0nO>0D >yzv?c50I d`7kJw< @ĩ[;IIH*L&$yqPbUo(ԃ$cg )3[9t} 7̃ ߀ $Kpo*7؀2Pn [~tC1'eJ3ubpp_Yb `dV5ȬDǷ =iiu 2@ zS\LQ: ݃ooB4j3~Ejҥ$c ͇6j}_;U9k9Q0L'kRݼs{ˊ-ARo t 馏k޹_:F?yYLIJ@{0zn^yWQЄ`3IhhJ46}Vl{~qEF 0=n|Mv JZoh[ -XA畺7 eB׻t~@ ]߷SM 2}1 %~{~' CC8=oD1 MAO>˿ݶ&1*}ZԆfnV}l-mA5V&u 獷N!AG 3ŏMX/swqTCY|sPr#a @maІ;7Sd0 #`b0*/lJ{~q' CX?.o: 7hfݹ_|㋟{:1p)$A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A @P D"A t%t%@$%@$%@$%@$%@$%@$%@$%@$|j0tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-many-holes-expected.png0000644000175000017500000001136611653126251032314 0ustar chrysnchrysnPNG  IHDR{CIDATx]\a0nI$ZGRQU)jBChjEb5rQ7UQ !mUP!"8&VNC]C .!1X&]pǙ>2;ݙs]w<3nIB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @ nSgxf_+٣t{ЄWXFָ},%LF1`b?( #4^KFFۇjuo^W h*`9 F0E `AnD 1@h15﹤Or^,~m+ֿߞkza1%ICln8zíbLq~2RL[^1 4ͨwxWN:w'=J uQ_Voxe].Z1u 1@Wʱ']/C_{W~k~2˾GNy:a[0Ej;C8_W>xߙw-W e[[O~[_oh6Zݎ.1`֝={]Ӈ W4|'[[_v`ѿU {W򎻏T'/ߙ}s\z]ǪOXwinuoB];k|am|e؊ /wLDF?W_/xXYm @6fbunM#]qĀwunVN̞]O /_:R=^!玗ou«|s%?j@۵xJ `ƳŸFWԾ5;gvm{m)ػzW/[s#t=}wu}ܯ~08m͑=:?|z盯Wuxc7 @/~h߉깛>{|%~˕C"~0?s+VwYFu%h*X?R_Bw}_>>v ^T{5q0#9] 2] 6_շ\~=}C|~o=9}]EŀqbZh}]uO>. 7N߽)\ ~[hoxEwl}U8x{[ĀUybjwsfןz/} )B7߸yo;uz/Wˏڈ uŸ&o,-Ղ/zǽ]0{Lwg ̣[3b0#/Ӵ,}pҪkٴqϴQ>Pt\2"4;\~KyQVA[h} Qt w\iM=W֨=]B 24'F t MgVCN?5c;w vj t?wU ~|mGV:ֿe~YjX{w+-UN k]oʸ/| GVc#F>4Sى4cODJppxߵ}=} /_qJ;_! OjP7_^=Z˾+q|l[t>p_A+C^nR'0q^`F%1%(nvPe`qg7;~ݿܫ` M&1_6.[.+?= '>snWCdR(?(TCـ/^ɨy y'z3eѽSwX+ @>F_ TrB&%??؎L1$ǍX9:tz|KOno{Rf]:"9;gvm{'~g1`ojGh$%i:3ڔќc]ۑOiWVC vS>_Ýj?`';NUꚁ>oN Nt;g/AAS:ҳ4 |3c0(8v?Dz܈ FJx}cnPzgQbи8>fFLp 1)7) @ }C 'nz֭ YO⧫[[G>cXo'>߻3Jt;n~_~e 1XLI@ `PbeKcm?(%@ (A-5xKJ ?%ZRpħX#PcYB@ K;%UA 4(L@)An_4\| L@zA L`^cJ`$%0D#J`WA5bֿ`KP_#z~FI / JЈ/ b׿`bJбS= UsKм/ 0l *AS$MIћ$LcWtL/c=%K8%a%~ji,%u5tL9%0L((AOIi^hl LL%غ9z?h+Adq LΞ=.q  JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$J @tJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P+ԗn<tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example005-expected.png0000644000175000017500000003352111664235461030436 0ustar chrysnchrysnPNG  IHDR{C IDATx &Wy߿wq|[ vl DibSPU o!*M1JC-7Q)iZ%qi(wRHKUnF8U06 ^n773gf9s~#33e.{N|b #pFyM "p@(Pi6 k@BO! \ %x @ P(Pl@ B :fC@ J(45@P@@@ u<͆ p @(Pi6 k@BO! \ %x @ P(Pl@ B :fC@ J(45@P@@@ u<͆ p @(Pi6 k@BO! \ %x @ P(Pl@ B :fC@ J(45@P@@@ u<͆ p @(Pi6 k@BO! \ %x @ P(Pl@ B :fC@ J(45@P@@@ u<͆ p @(Pi6 k@BO! \ %x @ P(Pl@ B :fC@ J(45@P@@@ u<͆ p @(Pi6 k@BO! \ %x @ P(Pl@ B :fC@ J(45@P@@@ u<͆ p @(Pi6 k@BO! \ %x @ P(Pl@ B :fo%'m< /?}ӷ܉>7 bib -4X?֫y׾~B';oX&4L{;_~e9 EϯO}'.h} zqlFEFkG Zց3}x}2a9F;@B3TFکک^Wu?#lȘ#KV*wr @A?v5L$ O*Pg{Ι;k_`h@5j1@;ZXe( l9|}[v֣#j𣫡Ï>qK2E@ZZ'Q_I뾿5U_;# @{j^VĄ-'@Nޤ-}b=&Щz *Poun 6*׼ΎpKf_GZ_GZW(0  :vniM?ls%*dzViGK B1$S6zGc:2m'/h WA FQ1'ߙ`^4A2C>΢8E0X; ~%+Կv @[鈶 @GZ#Xeh q0ß 0XXCG* hP`&m%/OJGg_g[TJ>Pb^.N.(׀VWv A}A"O]UЯ#iq+q쿎w.ү `upzv'ŴP@$,Ъ[Q}bKTP!oݗ jc_);+˦Nu.xqr1 E!fWu:5A  I/DשhfT [h@h¥E_u.Ԧ.*s,N(`t !\h-ѿ%NWEF#:ZTŵoA;;R \BvzY_M+iʸIts"hu|ħoz}- \ 6=[=8Gi~260)ʵ/RcuK  [ @ ʅ_5335@%06xw%п`@h~?~h}z~b dؙCz]UȦ;>+s&T`_i@ sMxu|:RϪ $Xt* AV\_M>:5'+{UATKKXiƍ\b-rYWF׶i.s:HsA=AtP͐ LVzMqU` v@ )M @ 6-l#AJ+|l# 0 䛢B蟢7zjN8`uWe *E(\E'3y+\Vm}ĭ%aU@\0pD3B"'M'?Pޞq@PDk`B4u_\`_dG*mp%@iV 6lhc(Pq;FJLYG~] DrBqhp &v 2Ŕ@W&#|E*t´OUB-J]fT2 8@e26 ~U_pL 3v.HY$*lu&B N UC<P=:kr ;o֌O{; R l8`ea_4@X*WR{_e.; T)/Pj~?^f~TcWJ}2cT o@fN_],PW@f8rl:Ȁ @_DQl pmթ:go aPWMwpGiJWp?*}X)A /h o- ߖ278ס_-WTL;*ǎȘ bRt4 wY X% ]%0Щ2BV҆/=K:MTN -e,һؗlս,S-@Ĥ (׃ѿ?Ѳ_S@TT"zA(aC2`WjDbbVi#ߥ_a tOUrUdd KfjJhMCAxCtn3Q_ŎW _ l5PzljUʡ5aY%c(P(/%Ќ_m2Ss+,@uřRE)jaAiCrǻVzw@2V%8@1$o@>.@3?*x_F5V@ϟ R!4@ B&3qf ~CU |eozkPUTA:X}jX;AB_F{)Jc/{+`6mfk @YFVg/  mt.8>zm8@%V별(%@Bej3^uJ<ꞟ SJ#TArȒA* m@r.[܌B vfai 6 i]A7B??10}.htǷel8yF#[0ЯVi?8WwN(oA*r\^jc(PqH/_ϜQ F5m)Ph 0$l@**KuUU:vAx7~H@gtmHv v}#C,*YjYdG+ڧM) zd `5#_qpӧ2N; Xdzjv ! ;䢿NZdAs Z%,  0b<1f JHtHOr9lW10P eFHl_|d}TȨI ǴΙQ0?ˆ)AZP@Lm<fĵc jǾ)N޷UiTyE+ˠЯKJP_믙:x$x9'1yWu͏^^& e Q8q,p?Yjsɢ@̙Bᯪ ƣ^Z}q8j@P X B!ia¤r͙Q:sZԩ$+KYE;*'eRg-e|U5ar(gE>2z[M7 @fdEEotT_,LdNL4BW-0,gTWO:w젯Y5wqh5`؅4wS TTCd dL-rm"`UЯ:U3oQ!^&T?G"96w|K2%ZZ= Tfw VS*_@ D4Iߋ콽! 5bY [zUD?j`0-W/ŷ fiӾ,A^uOǻp6 gZj ;" 1//88G" 0e,DF\[F7_ \ݟ`Y~ >2SwHz@a`)M+Df션9@eB+1xV 88ʀ/te*0ք 31FȎD쭊%en?3 $*A^5>vʀGՀY 8y1/zim@Z:mmSʌbTIJ@?2= 5{;^vlfds| Ogf&'`  E C\qTC є b"EfU2к`-yDV|~ͧw$ew C b 9e˕gO o{־=[OM7}ԉ]Gvy'* $*y[WB?_Zi/P5wgP7?|#?^~+tC{V;Ub6&Q䯫|A$/QQhs:B 뚳)Sw>ٖ'︮x+Oף8Z$Hh~Ⱥt;]~`7&Z!I^wG'dY %o|퉎[(v݉w_?x¬~tW4͐ j*7ԯYY`XX`gD2viR s6]gk:xS퟽*6S/۱^:A5rj%gQ7\' &`!o*0A0ō0xKL H}5 lI2aF@@A,n{ZSl2װ<9~j-}c <}1Ʊ.EH_eXYh?@$@$IW6< u]/~/}v"nME&b<@<,;MHoܪmy@g{# v؈I !x~ޞ8 ̇@l]0:}t>= ;o %U&Z]C-# MљnjgVa!X A A]XK׷Zz/oC{/0ȰT C7³ZWÑ1]ݷzUܘI< yj5I۳T 'n @J!\0#& &Nͥ=@0E0{R IDATPQPdS(s8ñ18 8b*C Wh@K&皴_ `G,NMO bW `j]yMQb,Aq;|,":*Bhԏ@T3l9/>ǷϬZ<ݎ-Bz@Yr9|=x8M'6FY0Lʕg P W:rRe[67bV+ <^>Y||~@6l\dCeI+M̓_w8 (»h`9+ sVל1lK.|s+'}7|{(S2e zSo PpWzʬo|g8%Էh\ɉ7ڢL=xÅ <DI =4ﻵ=dvW ͉@* 𡱙Z׾5D G \-0|z%-.5so{_i"~J2M0h?*wM/}܃lO~|_"j Dbs$0֦:.¥Rb}ImOm!JP3~ 70"Z>/xuub0Ywă`~y&R~[Y}0)ދ:'̈́S7_܄\u,GR];`g=+;:?s\ZW-2M@锚Rm:DП&L–G&6͝ypʾ]&2O@)XI||IK B`]h < yq3s: HĥsD?_^B[N/@6܂L\"n^6 '@&a+ ӡV^(^0h@o hq߰ 9u:3_}3c,IX~;*)?.=?uq乄٦rՐb )`גHeOb^'jFط,OF5ċ@Nnl߭RA.oXv`?oD;WTk6aLE^{joORsMG̹$Ak_,GxjқXw3O3`iGUib:?^>: K= ^uŃg_2!̉=)ԬIboYx{1"pl st@:tp,p7G>cPdzW:[14 `TG?%j3_$+ϧZxCIA0I0jX]y2s_O?"_g06&,Տ(G3k<&#zBB\K ̶;CZOl@Jn m90O~eDpk)?ŪbfWp1= ޙnv{ʸH|;֖d $c ~`S@`Ԇ~k˞ڱz_;Ҁ3B+i- r~!``#)TRaVi>d-Kn:K 8R%|nMdЋ'q4@o|/џr,v̓_]U&d coX1J"dm/1rD|]Rwڵ2ߟxYH_N|6Ҁ#f 0/Oi=>3t & HFɀc@0tp]||tь 9ssS| jr!̴?>(&Pz*| #%fKi>{s.HܯN_XR^e*5pW ?Y_Ԏk{,3?D(@Vl-? )V20Yb YV-> `_|v0++Wn闺WݯYd?oR VM##XҌ@Au j{(7tx9/\獊*L?t"γ \}ΨV_oY;Qǿ<' "p?QT(~Ml&#tVVAs] @6ʗ?-WM%/r{ |ENVqdjn-ww\eۀ=`ueOM6=m> us>_dZm:i:aп*Er2."/}}i4vF;=8:M`8]ޡP%gM_T/b2"֑֑M?)| ŴI>b? c?xGm]Z ~𓸟@:& x7xӷk{ѾF g4 fapi#Wp?w+w!x6ZhőxOƀ_1&w6zN<V ܑ1uJظ,4MJa-*e@Ӯ+.TS{ۿ];Qsbl!*e@ $">軚?$S{Hb__6- oҪ@ğuA90 0B?]so~BGlj*?'DHY>LE|P̵ .`C,DZ<3(N,DrK,@~ߊ`|rI蟧_Z8@5 gǴ?Vni<:=h8^&ёAF/9OZDws* gﺶM $?Gk0_N[wsrϏn~J`oٝO{NFE orF\AqPOD4(@nۈ9P'~O s+@n8yMI3O4oX$EE&@ <$粸[/vסDL+@v. ѠJ `LByI+OiU@ *_g7lh/UӰ(c Xߒ7RH[l 0W˱Ϥf G. K'/A=: @*xz{8* zΤI$jyL"^Hv \ abLǏ}>:@%? @"t(T$2JA7~#cMMm*}%{!B੶I@Jp^ohd#j?hͥo#MI oc<10$/s6䁇s?pѤ11` Ou݌;Y;>,%$t &AAĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  ĠL @ :  "C IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example022-expected.png0000644000175000017500000002450311664235601030431 0ustar chrysnchrysnPNG  IHDR{C IDATxo%g}xmװK6تRUMDY'mj+%5HYR^Q )JmP&$mlv *sw=g9s̟ʂs<iCK( Mf'Xmc`>}/=S/y;^^Y~ ~o}@I@MQ<F+@|;1Њ?4 +O\C  q mJ45R3>=oV뗇_ΛWe0Xuoan\U>gWgXPhWayxFC[u{ǕL !Ъu_䠻5w-8E bvwxnO}I#qb9rfE Lׅzdˑ*~kAdv+Rѫ˃KԿN CEBlO+~=yy[_7(7'}VAkY(ƭE3k=tL] aNˌeDa`v2T ]|7wuƯ{^n^E`6+;NzB׌#CYUo˻?s_fޯ;Tx LM`k.ӿn恓˩s]9cn5 !4/ma}" (j!@ XSd \ iz? bn[WdGX8o  P(=ߐHpM]'@@k=ur  D :鰎U  ([ p1pǮ(>R#.ky}Cҭ#>ˮ`! (A @`Y@,XB"2 q$ dhE"lV t~" s/蕅`s4I`[ $ӃSG']OLywye5& r P 8x$DV @ yh-he klh+\ Zd  &W2hH?\ ZX  I 4BG;O=! }Ν=g3 %B~ذ$Z#@) ^Bb7A`$} S } _tQ Īe[Uj /a`Hm p 0h& b @`",-vC@VY@V1 t~"}tD@T嘩3>~--" J1 @E@XD@ѱ|9;j p5E1 [ pU p-Պq Ly+8"U.!. @ nw}v]kpE@56S xڃK ¨' ҫ @`L`!pEr=2 \e\N@ g%"h} $p1R{4y=G dVϐ  ϦHY@\=}''Ŷ 2ۛegYh^єPG! @|FJ@/| P@^Zr\#%@`g`g  O V[q%B&X4]&0^ $:Di4B@t%!Q xXT3`XO @ :J kf8$ $A@̀ne }2^]D[Ss`y@@EEݤ@E7d  Hy"|Wٗ  .{R  92=ʨ0ծr o1凂~XO ^om Qy5Nx@3* F8zX;x PV#@[Qj0 @ 2sC@$k"9t2 u'   @ vI@ U f@K9 x@N  ؉ > ي@r{bM @b1C is˩y h8Q1ں"T,#@@""^ =l# JpPj卛@J(&\ 6!~q*Uji`K@P XK$ Y:SŸ*D vA@U'L &@ ( b> @`0](QzмzHS!#=?=/}"}?)v|#mN nOqz : Y@ǩ?H7g/h@%6h^rz=77>v'pX`끎0>SfX%N`pBqiu Eo/|CG^3~S(c_cbe#Nx_p 2{ko?qof>[T^4q\ zl; }W;\ěs<9I E* F}s3["0,0l |Q.",.$0H ?o=kN?k9govM@-{j[sߜCsgi`s T1?2+=5OG~恧rF@uѫ, n$IP=}ZO>,B7, fuC_ߜÞ͚p-Xla뎼C;R]]Xc_zGٿک?E@kjx~򅏽k/ V|WN޿SMp8r;#0@* Poi]"GP.BNϽt@[4|G>;~SXeȗ {V ,|.w#y8W;o&+%U;{{uך Џ>?h/ ?GYg 곁:/sW h]m{k#h0~{?޺ iKo t8 ςػa'V1h7Oz`4@u=3>г#dO{?r7&}Raꯖ R)+`* oh[hj`FIDATЬ^*P'cZbOn{# 򩥑$O.vkY @U@XH@56B V x*A/tjT@ ʩ1#Ppk|*p .Pp4Kۦ! ʨQ @`I@,X@2@u6J, % j\x_+ 򭭑 @`XM Ԓf & LP0_- ʮ P@b}C'@hM (@@PdC$@@hS{mg#k9wyiZ z-Qji ꥷL@ F!%P|,Vo NRKHK@'.N[vW MHH@\- * (D@Rh$@h8 h`xI@p_/ ڊ\Hty*䩣m@ XQB2`-&@>Zm2T` HT@t( dJnN"@ !M le]"[Hl fuۗAۛق@ߢ8+g;";BWmz;z p8h7?[ 0ߩ @`b0 y@jx0L.`J8h8K- 0٩Т#@`$0 U . 'ҠqMUHjYYO<lLm~XI@EiuπgSAG8ھ01=F}l7z7fHM)3>{璷߭V\T` 81YZ&,0O[@yCL[f*?zu*04{pצّJP i@Ȁ'涜[?w쿧3po<``3OgmOC 8Zw{U8 8p`008hW)7Ol h|mmŦ]?( `DM8݈[GPO&Y? L* `RwW[ xS-! Ú^8h oG>]w?A<@Lb|(2d3 ;!;Xb5Sj qg4rN ~nsow̭g>jI\-`sM;j Ujb` 8ut Kt߂bQI>J>UC/6e% r8h2Ѳn2S4w@J) J'w?1M o^RP*O-QH, / S*a V8Ƞ+2`]c>, ܷ w>z43k% 8 qg8J1fEI@L/U{*`x ˲TA`GVo;K (Œح>2xh:wgWu|Y|do 8nݚ) ; hg3G_ DԿ[P,"K@bi<੟Lki 5Zoo~ӱF + ʭ}SK,"02fSNǔ) KZ oޏP(=ǹ=[鴙 'põyWOwY-s~V#@`p08i .r<2 :juyt xZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ˣsO@geD- . @`<0  <:GxZ&@@ jQ ]ť3IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/hull2-tests-expected.png0000644000175000017500000001736411667564604030762 0ustar chrysnchrysnPNG  IHDR{CIDATxͫ$u}9Ʋ`);&/"YC$< -vYf%&A$ n_M6&V6RA[F{`dyRW=SSTw:9=.߸% @@=;-ي  @\@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@h- @@QPM` @(Zx&@ PT@-e @@(* ޲  E o l{E@[6=@w]e8{lӯm}|;k`GLY@o|?M@ 0+ 8$ hu?ϺZU4<2^R^'@so] ,O `nVQS@k l@Z~t+Q @ͺp^ϰ4jekovܵ ܅G>Zk Ed0j u( 1Pe,A ͍O`T7n3|?n8G{|,O__^G82K-$a@3-J_w'h@Kq4^c&":{<d؉+yic@WoẋB8 +@/X'^#@&y>{ h 2[O~S?/Zhiz/ovCY_{}w;/ WIw_>&|9/sa{ГZfyE@wn_{݅4vEYĩFRO [y&XI"S޳k/og|{؇ǮWNc 01&7NP1_j왷7_y+_7`OS.8cyNcw\# g`qɵvG?tosp̾;-' =Tk.LG9ť$Ŀw |mQrxpP/F){K5ť_[t~#6]' Ipz_VpK>?yt#?z˯{tM+t =kqu7f ]zRwY|^~<& WW 0sG=T6ң|x7X7A9'.{uW' .7ݽ\zK@%g]0 N>t\'l%#I2MחvmWݿ|e_m5~lСh-@Q`خWzVZZ]bCJP]v?f6UK؛w-~j$C` /{[WI7oCk->vWYٳod=_;5~k" '˿rk s+re+&zY֝lZ?={YVO^'Ͼ,QwB$E{YbO ?v'5us^<_[$hducLc'5cvG/J}:oRu@} zRR+d?hI W KYyQ֪I{O?m >rJ}J=Asy޷DKd"I1no&!%S9Z38LTHݿYiH$?r,&3#,D b6hP2:O vu & L-$jxko';P O171@O&>4SMTg׾p7<~Mv_C. [c/L"Sv u{cy 1eYUR~.' L\;d/ZgLJ qx;cw~ƪs@] ,f7wOM 3' ?|:ki@wO7g/u}N;ZV|jR̋//̇V)ܶ EKo<Ҭٷֿk)>d)^k{3 !.}γ39w[bn[=#LG`&]}2`Zm<k,)(@SݹPwC]ӼONp) XݻN!W{uyɿǽ3M~y񯴽WߜAm\Bo Zb ^^d ":Wm &6 SAڭ] fBut2B \W]حnjc ?L~ gAshkC}Hx/gO- A:G#LM~?|߿OJ /d/ݿ91Ѓ0'a׈o@(-g`׬ M &"Fwϭd }x|*4b m60\rsJpB B4^!GF ]twӣwcV&c ^&@GI{ѿ'1yڬn^8F9%L }4M/b@7>v>Lb3Cwwc wL z&kIX10VGۘn=41x}ߏ|mvgov,>Ͼޣߎx)Dc^? { <;z w_%hb>^a篶O M i`}ѿ|O`} +1Pc0U5ow^&.`w%hbP1/ i= N`}@ N1`'{MjA1Cn~Ŝc[SΡij;߸O *0o.F8lo\"'bP%F4rJpQ4%8^>/FwRz׬/``[ߥ28Ev0o:3V"v%hbf,Ct9_ՙsE|ӿv;_^"7:uF9FJ}E^`xe;;QY99m0r5v !Cg%vwd0Ԟ!2pJp5W_|w lRvC\!Td% f?Au7=ok7T;,hnvAX8__j)զԞn` XSuo@S(2voӿ(Šh8jkfZRbhO, lf=*OȀ? :XQhvhLvCg`sio` M__札]ˆӿ'+3˻of1/F ">v9[cLb,2py$gU?~s%7kLӿ?3ͥo1dk7Y+0h%}?o{f)o!vp%_|0Mѫa71o20oMfBTyLdҦ?)20?߹U9,do:'yyhO4*W  Bf!W?m3 @ lހ6N,ӟ(>7Me`ݯ v ,20`]:`n7 w덛LQYoM/_7C~3;_&N(T?==@:5T=eV߬>`O20޻~ttf+_Υw0i3%M ~g$/!PI @M_@/2ТK`KP㬗`o$u@d`%@_` 7@_*6j L@6\ ɀ@+V_ U߃Fd`01*f<9_hg/T,A  ph{OI ?~zL?1 o=WqͷaFaC@P4K(05K[ӟCiL0 (~ Fd1 Pd 2P П J@( !t J@{nk #(@G2P B y[G@_/!K;f&]|2 (o֟-ۑP~]L?= 2P?`2`)IEΘ~$2O ~B Yi@7ko9p Lӏ3 2` %3EL?6 p0Q2^d3@nc00LF\ ~- 248ʀG` + hOe`mg^@zL? +x'֟$_dG`F3`I#Ȁ'ԫw~v ^7" @(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@% }tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/root-modifier-expected.png0000644000175000017500000000561211653126251031327 0ustar chrysnchrysnPNG  IHDR{C 5IDATxݿjcai$Wqq)TlR+J@ܸ$ " jR br_yC͛Vpm!Hy&O>߼O7E|?ao?-..ww&kA3#P5؜!9\JB DB @(d:FWF5oOB ;jB$Jprf@@P@챯.JB DB @(@(%@ ^|!@H" i893B&uu|nJWzA$u94/k@ @(%ZiKB Ԟ@:F I 6Asu|nS#\'rqymFB DB Xm&Tt2 @(@(%@ ʦ_P @ D:>Gmx^;7؜6&N6F P $PJxrmFB @(@(%P1~c55&@S#PJ$J(Fi(9\ZPJ$JB 13# Ps^o6Ah43@ @(*WF`W>v"@(%@%@^˵   j@&8əhlN?Y?c~c"@H" I m:_PJ$k@`893]!`sj>>;u# k5m% I  P $\jF prf5^&ͩ%q94PJ~c' I  P $ jIB 6/ ԝB[[#<@(]\^' Ttj @(@(%@%@H"" #+ݙ @-%Xm@ @(x @Z:F`JB DB @# (|e @NFKOwf=@(%Xm@ @(J1[P N]\^t մ PsY#PsͩPoJс`'Jm:_@(%@H"Y Lݙ Jh4^O@2FlU'lP{ox ~^ x?%Z6'Ln {CN3@\vKةȀOEM6k3OAޙB6]p)Pddu\ %Lo:_P3Amltc{} OIدZ -_GȖWw'P2ە}tJ@>'bPZN?%'TT_}s7 (ngBu eAЭGڿx< ͛V@H" I  P $PJ$JB DB @(@(%@%@H" ζ@@^tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/circle-double-expected.png0000644000175000017500000000757111653126251031267 0ustar chrysnchrysnPNG  IHDR{C$IDATxM]a3 Hޅ,,,6Zbэ\]nb0mJ Ȧn L -X`6$.NHN^8>wbjPO@=kg{g?{̿oN?v; &_vJLLCpWDyzx:^dX. b 4R^3 s֊ѷ+fQܷ?;#}wa6oկl0ޕŇ/PY=A@6 ?7~`%?mm,~#f߳ۿ(0ĠSо_ߎ5TbhGa?ww|7:"OY\ @WW&0;݃%xrǖXJ v 鋿pkKAu'E~hO /> 1XM(~k+6џ%$o3 FW v߿[Q%8A-:9?7_ Zr 83@f ";?q? ,b>_Ē |̯8RcPT~pX\Tb0Me$'ЀRc0^a>o?o'8 0L#G7.z&|?447FSWOz4`S`v (5}w :ӀzeG`}n<h Nn`v:֟~PҀǠ\}OOw_#޼4gWߩ[|4he;qe7֟a]}Cf_3O{m\(_Ѻ/zx7/;' E秿#%Xfǝk+>)+8w|st_{~AՑ ]dJ'V簵A7wd&۹+8evǻpuIo^d`skfǽ%4`s9e0/~t]Û* jkÜ @C+f̢ c^@6t6M!5fOL}k @MLobj@2@[rd@鯕7)&kNm:2F_Vj2 ݯ2VVd@ؖ鯒Vbj2 `OMd`e?#5h@ rZ22!LbPM(O*id`CJ0EF /2%9_&85_.ӿZ|j217Sd%z߄=؎ߔߔ,!z`oGV֛~D`;ew'2 c`"0 twGm New#m0$ؙ3 o.@dL @d1 9LH@dlT`27# Ñ2~@cGNA0ND>/lk]*`L NeGIFL0tIFO%/E _ hF&H0A&KJ/eC@Ad&82VLP 1Kd@rp@0,"4 M PGL?  #4 e14$Ȁ'4&Ed`:L?[q3HO(ӏ0u@'Ѐv5YϦ4h@%qv ]j2G @F'U2`2 ӏPX3,@L?^Ȁg|eg#ˀg0UnL? T1 ~E^Fo`|&ӏ@F 21O)ML?%c ~{L?d`)O),ӏO@L?5/7:<n?6jg`~ʶ(8W7ᵆ_n(K ~adHHπ'lvWDPJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$U tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png0000644000175000017500000001443511653126251032751 0ustar chrysnchrysnPNG  IHDR{CIDATx=haEyroS@_e-# 1+$)iw]RYoσ骬ܺm^PPEB P(J@P D %$P((%B @@(J %@IPP(J"B P(J@P D %$P((%B @@(J %@IPP(J"B P(J@P D %$P((%B @@(J %@IPP(J"B}r {?vrpuYHи P(kD;+iE6븯 Ɲ[g P"` ^0ܓH;=h\6q'?@ m wؖ6r@(@tcD606P(i҆ 06AC*NoO|Xm[ a'$L@ /?9\*6@m}Eۆ߿?.mÏoO%; ,8]bm1HMetA~폟yz(8.18i@ c`+K V?N)7`w%124]K bM еw ϿN4k2@1 Id @|~ =pw Bb,v_ He`cb<^".8@+8R 34]5=W 1/l1+ȍ%90P?"FPb@/1 *Fs5` =g@XK ؄&b%G  'ЃB}1b@ ؀O)10MHD I fs%~|g [z0șܳb`)Pb`"lz`X.}fH;F!FM,wd >ڣvD1v7%Fuc`9 >u8]p $@IPP(J"B P(J@Pk{ @\[m@Qn{cFJNR bL0 ,'o.[̵y 'ױ/Ǽ$ N Hu g-]}z$w 7}dUo{+c* LշC?Fp܏uzGj/ ~ۙǠ_|aI?yћS0˯NŸ_f/V۳ɨ?~LsFݴ6ziuwZW0>d#l@v[v8}%ݳ׉Y]ԡnk`cYsvJIj]3.q$?~g3~ysf_0do)wi7zs7C nW3Mrc?7omֿvҾ?R?nNo.L<϶g&pBlng c׼4?փk>Us4^~ѫ>~ۍn?m[k&aS5r?l{朦SEy1n:Zs x5St9 6}w佲Lx?v2rwi55`{WUORoE}w_'zҧb3T$Ѯ_N?aքi'zڮ-McLQ_yvy__*zzz k]n$DobSCn:s~v{yL@9eKz0q7?]7/{рO&2cj֍~G8x@s9[]daOйoWP3_a}Hp1 jQ GYfJ @dx=~D\j0^jnn>vz]sϽ{6&~ڥў6fG ߿?DM ^z^}Ly{mN=]i;y?|CvdI7d?lyTa|ɯ0 TݤYe?^Eh{+שOP|m{s9r=L]t[l,w8!L#t{c+c۷y^  x7K2>mh1VV=oH;1}z&WړM6ksygTrxDO9\lRׯuڶ@YwU?AaFn' mNO͢/]3tuJӞ0ls,{!۫Hf:7}3Zh.e|MÌ@5g8>|ROv UMd }=29Y ax|?^}HPc{\yxW&~Mv:mAor+>{1yr #k}FY qOsԀ^{ti޻ĦЭsѷhx(N6I< @^FӾW<|M ذg$C3_Sa j[G>~_fn|B8 I @r`&nߴk&̏pO[0]8atZݖѿ^Q{x7ϙ>rt)C)o#7mh'!$$$Ƒ!֏HlـF$&}/0s1sDz<{O MLÕY`Z/^_+HL|O!\G?T vl웹oF@<ks`S/6TWT Vjf=fg:jaM/^LTuQvf‡$vdyCKůߴtZ;973|j}\޳.Zd[31ڏeL[' - <ݥo?e`!K7ee`?e+r]{.R㪰KPWDYyy~''%ea16hrAYE&M/gS!WpU|Yɔ{ p >@E^/os+6>9D,l~{i?ȆlqPcY@)BGiٚm 6֟Li4-^7fb:Ž|՛O8M$a#+Ha$r󫛬L.y&~qY b!ֱj6~o]#se'j;ihA8~?Zc<<}Fx#9s=}j{u!<̈Oq(2ԙ7tC>i*H }˥d>u0J +gؼ<ݳN|ƹ;9Ɵ\%X2wY\㚻GZ'/cDYL~D@0hM"wѧ %$,K=6OaӅǑY{y~2eI %@IPׇB BOV)$M %@^_C<200Ph4 ah@<^_bXk75\  _BR6y (4&lZpſ= HE %B"{i Y5 Za7BPi>^_c2pi@<8SUNzc Xu+2p3p1/Drpϡh@4@u=_\r^_׿H_U4TiNB{I[d\hM^'5`+!#MZ @t2XHh2!Ϡ@9^_ +dI4놯r:5dl2 @2Xp@NX*hֿ8oPi` @@^h?`BP}o ;f/J 1 x{ @uHZtWrWe @@Zpi ':qp)]J.4(m+01hpHֿ*[gWgy+O_~u_vlU_ 8 ֋s+xH5W0 <02LW0NBQXJ ` $fZJ+` 4 W%[(P_ 4K%{4@ oy%;U6_ ~4hl+Bv`$Gxk @2^8@Z^J4Wp<  8@ Y8@YJm @TZJN`"8]/8Q_ @]J`$qyk 1 _7'_ @4v6B; W5 Y(' xk ֿ$CoKR0 Yq )C$ 뿞J`" pO'@4~R}(xtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/projection-tests-expected.png0000644000175000017500000001335111775004604032065 0ustar chrysnchrysnPNG  IHDR{CIDATxOl[}GVPHWa#gl$.RОzءǬ`l"A(ݫl9NBk(09k즈eǒeCG)Q|jE>{{-U) %@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$%@$#闏%}5u2T^3WK(!.-ͽ0,/U6 &?M dŅO}#Md@*F@!Mx?y훥$9~ 7'_(;g;~.Ys{%)5>3t>歵_[r# pך煿Syi~yf/dVw+ + OB.B Ѕ闏uƩPatgWZo)a3C$ m WhH9{i7,oM?&@*F@O~>Wo߬e[u ʶ?@LG1rN#?%צ斶뉵)_rAMOL`݉m*ANW%tdԋOvj{?OZ\M0p(JvNeO~N2̽LK?uoYҝ.{zsvViHiիҏ$%9B,&{v4>1.[k-u sO}$J%g^nuG^<~tt3zg2_ٹxdQ 7ך4 s<d r7$./'<B9g[)gE2 L&5?Ru{l֋ﺿ|qW2nٔ,Fxvt,YK`l:f1C } n=kv_,S0e# }'m@z`|HBW[iwv9Om.}(`eუ^cm&KȂsϬT7yYPNw*./clĈ!Ŗ,e|G<0{i8H1C&bd UE r:{q?A>f_-c(2S&5?RvەmeyQVJ9:cmCh@f2paniyw!~~BNՏleq5ٳ#aH>f|wa|ȍ+z>;99{ٷAv?:R˯&IiП̃)G?}?\7`ǖ>'[901rea$ ֞7xO׿Mxk1YZS9)%CLk~f#nsiFuGwZno?:ydr|~1t+X\ulw ><<6`~ȷ_&@& @PĹ,ŁߒA8qt`98u+դ[tRjmn|߈o@7J}?^||WݤLXò(A_94jP{z3KMpN7 s~~B'&RR=88Å;37lHYP> ϻIݙ4yd?zЅ,wa j dOw`j2R'^ZG٧vһ]g<Oo/-{7}w?H"J]Nnx#WV|W6$I_2kxlLI=oėr`l[mdc}? 49rh蟉s P)T6ޕ `q *%}c2okLP0cd@fMKۆtl6{qV;7,/3(ёC痋zu뫿`{8@*W=;{R)%wI!?:R,/Y_owMȯJ]Nn~)NhoF{ܸ|]B901re2LKwz2R1 $d&X&#KKi~bmO@ ;J|~[mk[pek./wr5mV/X8H32YP)Քj@$_zӛ~ U8<oT@ \Kk_ݵr@ e#(`\?o ޯ_'_<5 rT^~C_p7׶>+m?B\_nKKm_R{0SJP66wsEw}ާp?zhu*n5) u|nZj?NrVןL~k 6^\ȹO,W~Nj.}`*>]g׀jMeG^_83g/tͥ.>dA8R/A7rp/?}2X]P=57^YP X5jZ/7ڼJ]Yhm_}gWqv;#ޟ9{9RK!_)lo+f_RzpJ^Yho53uw}O 'z @ݠ30_'w@]30нN@?tV@ @N;=f /0  @]H30_'w ɺ _'w1Y"9bjNܶ軲$A @P1@胊@_>V0u= GJ5Sȇ['SS.gg^o$M*Nz 30h?''W*dh@_W+'97 %9]@>(d dv'WYDH'XuP(5`(02@@# @V,>K  =YIogv?ze>W o$U4hZ c &oT>O`!:oj- Y S@ɦlŞ'AgɄgo-ңO<~`+\=8;hy]suJkY,!pJz#%Il܋ۮ0~ya+=F0Vl"Y3]wgt[]{"X2OzWOT5_iqIXzTVkg|nWw!tpD(rDܞHRVCa+e2M]AWe$,Rcl$'q0wklF1GTMLy@Y?F0n|؇g!- 4Oroʳp26`,|݇1b@sfLQ/`#8k747o?V?Oo8S .[%2jgٴ[*gRJ֏T~3w2peg gdqm JkZߜx~ʛtQJyNu_lŸO'C+˴E]9,}WI[-{ڔŶ>LES@iPgT];d+~ŋ䷿c&o>4o6kDͬ+M]_qچ6l2;|}d!ț>U{i /^01 :yzwb)) ں4e3Rv<~te&ZN{9*AJfw5##h7Pv?RUs׳OW =o^Ts*~&?Q{>2w44S:s2C'+C3?Wr}qu&ƹqꄠҙd`J1pOL}7"M\_&Ldwҝ&mF^[Gԙ\v9@<t1 Wl:޿x~A5Ygwʔt=N8745/~w{]O~CwۮzezRŋSz)w?4]0rƦͪo\Y:>~t֦ʔ{=UԿy Nޔ,{&}x,_O2~ܝoS7iZTZqb|J)={ݹab܇#z77Ǐζ~z>){=?&^305wcG'}%ҽ00v00n:xջW/V|G/zu Kk+e\qvʐjblCa:tMFw3ι8S.n2pu~3RF[_-;j4ڡW>k _}uw`kC .vm>! tڳS؛ۺ\gv1M>FVsBbݸ;l<&yceu5zJ;7wr=GgO~[90tP[ܴd^|w!o}=j3`N `m] xlm/;9pN"7gMgՌ@ *~ I̿9L ʑoYCܟu3'ޜn@`ɻȀq,]kW7)7gm;e ~`YUvZfU@r&l\Sy䋞vruOvtGVvN; `/ycy87\ۻߴ]\=CǟOԡWCvt u؀+ @e]zjp0@u!wV8йl@\S8ع i@sNYzqq`v:#[ X[$pHy(Щ}O*~m};g#G~&0" PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @#NIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example001-expected.png0000644000175000017500000003726211664235457030445 0ustar chrysnchrysnPNG  IHDR{C IDATx 'G}j=$Βй,@qU6JLr)" 866V!@ʅ r r%Hc H.VnV^iߜ==3=ݟWן߼߷gV,,#pB~Cf H: ) S3l@ L :aC@ dJ 5@ S@g@@2u<Æ p @Ȕ6 k@Lϰ! \2%dx @ ) S3l@ L :aC@ dJ 5@ S@g@@2u<Æ p @Ȕ6 k@Lϰ! \2%dx @ ) S3l@ L :aC@ dJ 5@ S@g@@2u<Æ p @Ȕ6 k@Lϰ! \2%dx @ ) S3l@ L :aC@ dJ 5@ S@g@@2u<Æ p @Ȕ6 k@Lϰ! \2%dx @ ) S3l@ L :aC@ dJ 5@ S@g@@2u<Æ p @Ȕ6 k@Lϰ!@o~a f fço`}XXYw|![Lê.ъhTY"@R@bDm@&q&ýcHBG`Gȉ) h-)h]a׽rcD`   d͈W>Ʒo!v1jNY84MCh%"@WW^jiqW|ge2mG+>ZO&:@:pgﯩsSS?u[cc{w z@zzy3 7_i>;/g6l߼g!3nl .MCw @@@@4 @ f@މ˶];;VkX,', l ٸBXNX΃#@@q5MHœZp‰+{ b`%˟!F }uczoҘD qTfmQ / _ۏ }aJBS!LS @33P 0T<<@<9@S!LS @33P(.޴A{e$2̄@Y@p3 P&@ @nf"]S'M0;5!L0ia< w;;jB4`x@wvԄ 0i݇ 2k G͐!* U2.@-@ * U2.@-@ * U2.@-@|m_< `t @`|>ox'a'FB{VړW}4}>-2y]8z @`i!8@Q1j\} 8!Qs2Q2T xq@ . X@,AQ @jjNs;`m 97m- l}`N7$ܻl@) Z3 A8*WB@k7+d+@ !9~sg^; (HT@*YQ,ܿf횥9u7pJ^(:i ,Meѿ H`x V1׽Tje)0 &|~ru|IPPLԪt띟TSy`ɧnoi)Y!i!d}8L诸=RubS@]W?ݖW[e. OvxGbJ̬4RUyg_ܥkMwβgjˇ闥@3|"zH}P-_9q/v`Ͼ#Ǔ?s>er`#Ҥ:@*ja U֎a/ubXrSԐ ݱTy!EʹǟW]+mGV|~'-oP]t4GHG6 9guw.v "ɻxizӿz90񗳣GdKγYO<ˢC@Hcѿ\/IGFZ35@Bzj)h@ob9@b]65ғM;4/ؐaEF#4 H*?TL hK@ag*] ku1f>\` ٤EG`Oe_h24wCGk:k +GiKqykSٮe藺?Fզ5Q$@Rsk],ˀ}׍'2n"*i$%ܲ:+2}dk3vn+HۿwNѿ9;xl9TAuEW*|URg/پպ g:9un3 (`[4nt=.@C'_\~D/M! +>"@ztXԅ~}jZ:hSI SԢ帯uk0`/]#]%ҵ"@*hg沍/J#7 8|pe׷|8ko}߱#2k# GM*_$EPAЅ"e& :eI͡_:DvTs P8Ӫ_:3  $u@** hR769lȀFg/V]*2K[a9Sf”4i5`e\ntFL٦H]_CE $K߭oVc#݋u9z .P!WR !Q]惡i@FDFwA_`b qPѿbHFV6_)B]_e-R.XK>iHdccjڄ~[![Z[Y{PB#lރ[銼%Ԁr]spl%[u%+h@׹Բ+f_;9% NifpƖ;Sx=@ꂵnYHfM(lq)P2!0"Y_TFuWrRk,:٫;W>V9|[Ժr£/ھ[ (;b[b\&¯ƫN[l\s(v=;&;6bv_*/6KTe/* C/'_Oa_ZccLs7A - ؐZqrZ ˂?ssTluFՀ^*рJ,e".vT bowÞMm74`+~_Κi&LX. Cs#̷I_wwcwhf_Oaz!NZ`8w^}dhwmJCy/YS7{kԑkKu$ʐ?`0K9Dm^F]2ߒt1A d\X}u~ c[Ѳ[/Lm}V ׀ʱaSYA]o/^ _jz`]ӳyz~\n\Gb 4[-{-i0?̕Wtn`9 gt*/L 4]byH:6@V%(D݂h@ $N`E@W (G!T͎H/eo5`?M_.G" a4cZ ftf;Qcߣ"`GsgU/}`,3:ۊˆ ]y;ޯt_oHܽ-jG7h_vEKwv65 NaӾ.k]kakOomp[GB9"@H/׾r_x$xK)=2gǯSu߲E-Ս 6?ubM$6%sΊ/r^|6=":xE< ٌ /JS"> P%eq&8k8l Hl_l9uۢuYPlϿTAkQ/_϶sue w?pЋ=7s ^zf'6wW"*ȃ{tf]?UU+tQKnI:Zns"પWw6Ekk,N}Hv:)jDS* 6]u~Kn_|l,Q[3x'u`N[n. f3o5,xqh :B;9jt¾)u]8rtfٚE"G] JseAslGcsjqp,jo76I Cǚ`d< <Ųcv_2ԣTWmPgO!?НM^q?,a@zu;T?:lEۨv&[gKӝ'w g N^N'T S" Ժ}[m.PEq">!G;9OWV=2hIO]Z7q%{p6C9r[Y2hA毳:xuoKxo| ZWOz_vԡEk?kG7B q$WAxo+^jCNUnt] 6eVQג/z_+$E'OF7^0{pp7:QI@nѦ^ ~]zKJ'6@n PS"-[yך!ix$p^rw)OCƼ7F~B7P8%zit;l+#ᾏh,}V7|31eժ{oJ#T}@v6o}GXZOX+KozKf[X6 WJ͸_9.og-ۢ)聪30&3z\pXvH+O8jF i(!Zl^+@7 -kYC3_}ٚz_kFTwB8p'wOYF=ӟҘ[^ sr.О =W]u8tb{m}kN+Q[e_` @\# 底G _twih©95{ȂyB>Yxbm>@7RXu^qap|(N1H/VP=Ğ, }S nHʀI98U,G|i+L_/RQBӺ ,{g 4삮9lu%V[~rA;nYYB~5(/DTNzS4: `΋ۑGkj_`ȏؼ!άnFϳ,idnN[^حB1g/ Gk@ LU1~HEw4o~nA7+AGot t@+='NW d uYl"&綽"*A/5 D 2MW%}Qmy]ۻMI)y5ϊONgr_6ݗ {r8DmJD+6q0d,p &G_20zЗA?WtL#&57b !;@Pxr zDsH́Hzx18|3ܿ+!62y/  & t7%{Gfr"20oE(IS ,f#G] B~ms tWזh Q 7 @ Cta 7_ Fem/\> bdO_ԣ l9f4nS׽^P@h284|±춶]_(g#( mdReЪ}{%qMD45 RL%KWHQFieOd]D:S5a7:Ձeo`˂I>?S#3A_$0O6@0G h xBnFnJ@7!f (=z}% EO ]dW]tE"'@n ug/ƴ>Sypieѿޫa3L 5ٯE@C^-DǦJ eԲ KЊ(~5 t܏YrFLH [ß4Z(g΄H:{!0i7hg4Q}`YQ+$,P BeмAM)V-(؝;ERQX E@J[hW ml$Hak^L"ێr tY^h0%Hx_ȳD&C9L r&p~n 6v]p__4NxY@#*1Eڲm?pV0O_JP";n+QPrncI&vHKl1Sbf^MS7kT=[+2i䌵0#o&`?GwxGf^NQ |pK%lb` (_tD7mu}sV?c 19k7qK ۠wi p&zuC(Aؤig~w0s.:YrvlWȏ$-MIqWm_gO+WKnh/ġ !Ct}t8l#4{jg<>Li8*v3Y!qqMx'2]Mk){o4ۓ]u" ~ܦ_V YXkz8/Ve%3pkR}\`vD`q{@PM_e\`<=Hy4=_ximۖ>/%> rD:b&fWmbMЈ'q:Oy(k&HYr{T!w~lchV ~Hyn'>O;.%qKʲ;4QAF?Ή|u9kǣ1L+[ (Rb'C7]rn_d@}t & 4I|D`D8t@+ >Ԕg#y 8B qhr8#@ڏ5PCV=֐'43#X"O(@Tk q?,[WJalv /H#&7FmnYGt\L@A,9 $ h +eb/3(1,rXm3Z ʠΰĻ5\l4[Ck_aCڐK"*esbJ`Cx/dܭ¾Ӈy)!H™ "@r;Ws.:V05Ge0E6bLG$p,vn!q_(0?RШ< n H.P ǭz]g1kc3$(I8 n ;Q4DaWmn=LEҡ -ky#LXM7_" Ū\πZʹZyA+]g 8~8&(2 l`H1ۆ@[@] 룮R;@#Lޏ6$8 ͕A/wAW Օ |:SE{VJ Js˅=_iU,Ӆz)0؍b[ @hPf_\t5{'NY%/'H6@à eACINA[@r): GNjIiB)V5'nBS3׾ KL(V<֔doҐt! VZS`)b+.<"@^N;? ~ѣ 9X%( wJ~f uik2u֯;A}$X_ɀ^L'PxƉ`3wzQW8Ub4eY ek|F[Zip\QY~u$i7˃_2rf}Ֆ ܸntԙ'=T&]7Ă@"f_hFWYTc PԬN,#E.$\V-0KĒo6|.]r}ڧ)-W=^Ҥ37iT>dpHZ8XauNA0SY?ѿ"9!Oלl(64sD_! p?tʯ5NSoht( u5@|F9aB#i H] c @36)м/$H5d9+1Q ^r)525@b_M*/'/rUGS_5nyT6!_>7ʳ2`qxj,&}`CiAoZCML`)"%[zm(Q̙@uɔ_"!꟯4`ܔȀdYy'wUk~_8Z8 7lYMj_ 'P@j@ASz^鿽YسJuWZ&rx_ ;8 4HWD׈`C1tfYU\VZ˯JW+_ g)S)ѿ|4̧x67xMkS$"Sq:묮I7?|=XyVd@}*6gʾлoyIsN+ HF͠/~E2XX[lZW#}2.@j@J:/^bN3wΊըT}qq_Du+gꜮ [u8D7p6½BoTpG *].EJH n48)3|d4>f9~\"eW CAÐ+Oh[d]D>^` ź}oۏ~EXxk(o掝~@tσw ~U>,n8w}n ۲Zj}/w[b n}_ #۷1eDՁpbu7_u2ny@7^ujʷg;_ 3RRc bDm' 4]'=>&Ye 7_[Dw J /QWF̯+$z"a_qaOA5.t[_;L4Ȁ*bXML pV]}I8u,9v8 c{ʹ00րOGQ$QwƳ 7\!X8@kR[R1 $~8_}nk Yx4;m;G3⾘ԾL uzTܻ@ @ߌ!:~UI4(@7+/}A7atsꏊ:})̾DK9q{`]!afR-d*?,TF |-. spuX[++EoNm'>FtvPAt1U _0G{!a D_x9xHP 0oUɳ*yk#@-4ЯiM A.k< ?h_6&!Q, Mf}k& 9hq_20~7WX hw l[m[@e?b/x?|HwFVܸ}1cKϗ7<3VdK /dЬ*$uɻ^pٹZ#SxV+7ͽ~r˥R=X ʙ?WnVц/AtMA{xٱ1U10uaJE%16*4ncCG7/ xSk)}k#D U6mF'b@&y}ߛ;5Wq_#qd=ϮzK{ &:7_1! N|~*- zh@U'CYF I[5}` 9ϯf$xQ G*vՋ ^.u{IUHߌG™XcJ d(Uhվ'+a摳u [أ$ ! B`R-[OFطW,gž} f/fZ}3gIC ~@>j= x۠ `(@ 2@d@C@"M?"#Dɚ#/b 'NvCCNwb!  00``t@ @,HG&0ر~#SF@`B^{-KŔhTi 4 l}`{ejB` sE@oM?XZ(@ @8@ & q=~i B2@{h!u]􆧺ؾyCέ/ 7:W^g\gD\׀5h@Oܻ'7l@B@4haT:M/!!??SZ$Tb)gq]D2rB@BPjh@5#WqDa azP%5 @L/3/?19B?W(NW:Ҁos(_s]d ?_ `l\np;b lX$ ֣"DY[)%XXz0B# XXY2S /(~`9.gu|Y4$j" JƹX z |ol(k 7`$ pFv#`J/x/}@]a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'D"  +B0@@ @ z@.@@a a* ѻ!!J'jp'IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/for-nested-tests-expected.png0000644000175000017500000005176411653126251031767 0ustar chrysnchrysnPNG  IHDR{CSIDATxmLYyLTܖ/Vy,k/bT- K֔,-vԵ eFEs%4]Y[FW- *W3!v夺8!{ pˉOdĉsNV ?( _O' ) ~O' ) ~O' ) ~O' ) ~O' ) ~O' ) ~O' ) ~O' ) ~O' ) ~O' ) ~O' )Jws[((*AXC?Fu$ ڔu),B z`5]sBN;VΞna U ѯ M#(=<ЛE142簠 y.[gQ;Fj?,(wa UokЌԦugoO-=VkmSW<<#i:h:'>< E.?C-_eS tOa1F P0"0L9V%]5eĤ,yҟ1)L=' &XPlL~B=8_dfNqLwO>rE%>L=Vy$=||i= 0f7[#_'ҟqZ^̓<NS%k}\o5ڭ.XD?Yz"4lh,u}j| KiVC*MS,8p $VX3(=q;M=w&{bzSYs)vϩƂ&@%(siz|ˆ Og_hI5|lɇo!v ߠ T bTIkFg];0ߐtAݲJPl^ M>R'xsS)=-d"?E=z)Fi?0̣i-(W8\ejF "9_?Y]MᙋNypJ`/PTi/;gsZ g.(K+۝U5 rWzj|*>C:k%*fs|cjiGξ(-8x*AXC̦?O| A ? x&bL7TazNCDJMxrP>N<89o:'yφ]dY?}aGX`{{xZہLoj"TR84pz?.綦TBk3D蹴(wݼؗPPb&)r04'0>$zH?E (rݤÎGŃ"+)&ZEQpyqRz,t+x4*#zZCPώxN"MޞZ:/~*/3jFϗtdzۦL{iS^^ =va'T:ZW䧱|l|-yLLJMHSj_dΨ94rMuံ?鬩g5ؚզg,} ܼT{jo6|6ԶB["(4-?|* :wEuVP>k֗'w7G.ض7?'rhB#I~ƌԛB ;}maŲXHo2WOIQ4FbDћi]5E;DrDk}&39>??itȒs.J"^|*Mߏ3' ج`(SLSOdWJGM v͗6rVc1 !BΊwNfDc" 7H?Ws|)\bЭ-eEh[ tkN M1fw|ՁnP޶wש |X~rΡi<]>J g$y:MP8*b`yCf X|}o諾EĭS+]G@|FgWy7^^GM%p#ޏ;$fǜZK&B]<ģD r5E4;dqkYivGW OfwDNb!{gT{'{S~fw%1x\Hc֟lYI/w|2 !ly46>zLwPDI6v\S饿z_ʫ}/ !ktDKr~œΖWsbh_ovmCivvKP䓝b;GŬJ !Enښ\M ׋Gn'li/SqgL^U%{4{35+SY+&P9 o^ +#4vMu{:E RB DjZX_u[z⏓_׭;2]>?yХѼbk̖Zl2<,Հ5 !R#럙yË n; 8QŬ!p}gjV)-0 j#=B/q-zH?c D>S\h+9-Onc/_pãI5c 5)?h#CE5 =,|]O<)b擝ҕC.,{'Pр(YD JW|2 h<6PZL|9HP%k>}L^C V͑|WHLkj@Ax0=͉GS\9uծj»<~ggMD= :~ 'pRrvQӲgn˝wCSX0)>m8s^ ?L7nAo|F%dÄll8pw z5P (l?|%ND*&ԟ1]g/q5@v`m?0$뷏LwWAoe* :`yΣo24Yv@>I,?oHdH4h؋+K4XjhWU@71W>yvdzj(X`GGVxVX|QM܍ߔGC|/t{|+zyKMA 0ЋL|3 >w00.uAkv$5$ڂdoJ哝 4bj= 8z2|ww諹=e^\— L@ Htl()gjH%r`LO%APW/eJ6ʔJu@DI2etX7Gl_rXwFK,;Hv#7_[Lm=DF=^i{'b't@Ƞ,u_i5`9Ǵg= hH1yq_$_TVɐ_ abKy7vT۾\}sLz9Ej4bjCSǡ|nhZdzRt]75dH4h35+SYx!>4_u';pq(x(1r:{Ry7Ơq!oT;D7vT۾\}sd7]Jˍ\:vL Q?TK T`IwSC@ L@@4G Ld-zPh m)?!4K]/ԆJP?FzkHLvmMEjCi;; /X[8T@rOT z!vQT~jG94ϻˋ }uR^8Xh;P"&}"ۛw"aO{`aЬ}hu 7Pj|W)( րaFkp>^[^8$* 1<|\l(ߐtA>8eZXWC][`'.U\OD'Dh\i`{{۝ªk[dy5TkJuR\49pdOg_Zo Ѐ<<@,}LL=nBjpd>!?J)z{jSwkf5;,?9fYDP K;"/:Z ~7 JH vyA@XHm Ri^;@DҀOB%}ښ"fĠWzR$'`[ ?x [Sd"H|6OiB(Ok<|\ăҟڢ9";{/쓣տzgLO?Jt.q}/Oo(?(鯷S Q>@ MEÆfIW%KyFX&=cѠ-,&YS!Yʹy%%c9Ev/6c 4>EF|ܧtʷ?Yޭ"NDL ~f9OAhPlK32Ma9PԊ/蹣+@ 2?s\$VH$ɝ<ݮݚW_ڔ_yC⥢Q+ Fg8˿1Ѽ.hs:kˮi^6xr `/KO%"фFRb:kvXl\;A/i'zk2n"F8B n?~8.tI)Nh)[Ϲ6PZ}qx4xqӟْ/yQWToO؞Y'3϶WO%*>45邺m~ijS6Qt.Ӎy%Nm4 ?<܀oP /O)O|w(=O4NIt=^y,$`)3N'\HM 8|4-?6‶w>W5zg}`(8++:BM+~$.R%kuWG=Rz @Dբ\oe/-sꋱhtְO[SĹ%҆ѯS6KMr L^AtoqBi2x?23].cU˄ Ɩ7pуVDCҀCiMS۔x;eScOvrg H !a(,kX4X{d! albȮH>NOa\ІFω."C 7GyrfP'Z"G4Hm3>5%+"`J+SYSOdOf;S%kD(SR<#Cp~Ϙ/voOVOut/_h8i֤pv .g2/͒](/.W߼_k7[(4gK䓝{6&7b_ZB(Go_3( O:bg:>z.w@S ND1T^{Dϊmrsj߾+$穄|n[逥\瓉 #`@F"OYMi*NάS ߭&4b`n|,*࣯'׀?~gOq$'@[NRܾ&]IԦ- _]tuqu@oOsrf;vv.gW1~2/x 6B 6x-1W4gה+GyiJwiӃF?xJtޞZəuz>^}_fDz({RAоӟ$v%Ga5]Zc%vãI|@O:)?ؠѯNHhB]\D"j`tEKy%>0db_zjbX>>~h4{5E> d<^E~b>h:oζWol1 O%y_az,'dW ̦?[609NfHy?S2S P/_͍8Y˹0Q/ l.uUYSf6m=l=*/=,u=S ;`)_l3Fd"#?@FDNtЌ~R\sB5z"_7G\t 85Kyv'~`D%P)ΚSY5]qBAMȯlui-TB{sīҠ376VOa?(wB({Є {hv 3L Y@pxԵsn}xe>W1H]A61s_ _0s"flh\{WݩR**AXC. {-nLen Řy$ 0061)o|!ؓ2bB@b:1C[+9RV}RIK;ӟF?T+n Ʈɾ.+8+46ht2|9"9 fQ@ygktw8Ht.HRL n# 42ewhY32HLgy4Psgj GfKt@Mˁ6ksY !:`7tPa+(K]!ly\=w >hv7xJPb&yLe2L  `G,u8T6_lk>t% o5Հh9K^'a- 4׳-|@^E`@'78y=x } ]]2f?S2E'@ɠ7>#@ *^#Tㇰ'@-aC,U*T n r] ww2Y6!2sHysZ" aGr h9S _'~ʐ*AXC\2Lema>( (G ӊGP@~E@@ |J!O 0a U;K]Rs1H>,NƮI@ @S )@>O@SB(^VkfQ4U*P*&[ Skس9yST N%ehvaGNJPL!O7|)OϽ=΋. \B~r0#ڔ?RImg۫ç'(L9ySI%Toj sxp:DyA1@:#?@&g֩PXE>5]P\;bpu#w45TX~r}O:쿐Լ^/s T%]5}"N_{ؖk@/I]VkhC@ 8Gj5]P_}W1>A&*AXCp'Wn_,6nCRFfu ?%@8‡#hPl KvKN,R^j,?9(y׫!泚/ Ԗ@_f@ILgcj @ČAmJ`C%v>Fp>*~W.>|\jOά'yFxFlp&rP`3h.L~VOܹ*ݚq GZ6##bF#/=utea UA^j~|Dsdr˱h\b:0!5_Hmj^E ZAH_]jm0|Ovңc'Z"_JJU_[yJG8  ܆=z{jy:SLάbѠ/%w@uʇ./A#bcR$ƿ\B @eGx/ߨ;dH{NpSYD1X"z-s_yCbh΋T š*)n~ImF}=ųĚ2R:  >ݚ_x[wRI!y;WTlWы~Ju$ )G[r] vL;Dٹ@-z30f,  x4vi 0pL3+8,TH <|\qerf=}>:ƾ_KI5^N^JPP Ԧ[]ߝb5]0, jmp"Vtxc`loo F1) 2n_S_/2Dh2:ܹުrΟt{n 3gTu@ @=]>DKܢlYDK{fE@_Mn+=>Vkf+}_,VsNh`~qCQ=!,=>mztS(rĢA h- H݉Rg9uk!ɸ.K)Em9W޼ܓ3=r@looh:Hk( !@%~\jK[D/bu؃|GoO-u=ݽ6\|y/EdEh7bѠ5^JPP,?9BKd Mz( 杔"R޼xHSt}처МkrOU;ftC61ջ5#zw5,WKO[r Pio^Xd#EhS ԥ)ܗ g'`fWGBjSqe5]P\P\H<8m蘍o4#zwcZjʘ'\~Gr$1%́@J3Ͳ./0>aS_ăh`)ovI+&;92<$ԄP`6mM},:l{] _ʯPHm K1 Sitqw~q Gc#Ke4\i]+?%7xId)s!03Jt|z(CiHS%k/8sdY/J$Skj?J.u+SYRzsX4ȹtqw{{[ykRy/=?!a& |0BIfioLάCOvCwAYׇifIk'c--^y?bGJ'WO, -xP>T ,?9ུF6 lvaz~?϶WKg+}sOLgs/n{-yycb6,u([ puUBIHQňzRo`(G~ C|=:Cg ,P)PO# Qu$owbE]GY'4Ov#jZ"R[.戢')l8wI@%Cj R> (4TnW&', JP1̝kfKLN`ŢA,C[~ݾ-&n]<ĞQVK];熰{Ek+Ya"K 5.`x4HP1~ۏ/NS y%")`'ʋC+oPhr@/&Vu"@M(krNpN w(g/6-G?=h31i?ⱔ藧?}sz/?jB( ޞZSOMάj<§.FUͩ\ښCW◹./Ԋ-Xy;@ãI|(M[F +D Uུ-*_o?o.\*V?T RKF!g5?`tA͛JLgô5iHLkX R<2K/bU%tkŠ i8ux4 F<8|)/{{j&g55>5-yNi"&?iz0;ʋe';Vw^L HH@l|'T?(FDp02;hke*wKS1EӺwM_b\,_))h_%$8҇oRuqv<|\3&g֥0';t@yN[zVl߫w%~]m4L֒ ҈~`XsR1 Aq}|ClܹJ 9HAJENŬIqvV5%ymţ/5T$ܾ_"ӧ.QO vkf.YƎBikߖ-rSʺԵRnnc$hB(O 2~;[|uJ8*TtӉHv)\M.;c17&khlW!sRHԦӟg';rմD,x5]`lH>[hfԚ#_+d^#E^iH5i z+Y'4Ov:ʎJ`'ܜN3? hKc([T y9U^o^* j`r 8 3@yx_)vt8V?ScvX4LXğҹd75"p+E&h7 Mc.= =t耕pS@Xğ҉a! e{ws-ښXVqd(=>֫[42@Q_>f壚-j`Gဒgze_hСܼgwho(GB(AYNfSP G^kҰu\1G2(w̾Go_s]~U\䆺[{tdK1(k ֤)Ց@# uq߉Q7t߹*6E4Ln٥k)x4]PPikZ"oHw(> /}zSr N K]w 4Q?eM%7Fv.gˀN<)N-yڀ6 $LW0lc$ӭ6T*U*;K JLgnkȗX48x/͞u!ɹOs_l[K_z]VT© b nh| RӲ "EBG?.6 M"E:=mV';r@t|E TVZhP M}~io2ڊԀSS.5]d`H[ãI@9B ʎbCa{G,MzbșY'* 䓝8 :*AX#Na[j^18KLg1%R^ljvk૘.ex4wPP7?Sc_ES~=Oҟsn3d'qq?B(<&GE,Wr ԦV]\?:VO|: |*2ĕ!AeA(ͼz_ >.u4@s A%@ ౩UU.-k`(-I"51GW5P+h?|ܰHLHPy@3_ezotAb動T0;KX4"_gXHmZH7gg~M%pW;ԟygq"}8┏'ҿz{j0c$OT 2s97 r>tkkܾf-Ru{j Aj{@ ":Vys[#s ljc5w [ w+l.1-hk:0B壶w5]`wCH"%5E o7^wao'eG]HE#:F2[ ?0FWL3& 3@$HF%#1Bqm6D?Pxp?'hޫ?S2EPPǯd`4AP>T @;⟕a3D(GB(9RʣJP! >O' ) ~O' ) ~O' ) ~O' ) ~O' )|7 ;tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/hull3-tests-expected.png0000644000175000017500000003026711664172106030745 0ustar chrysnchrysnPNG  IHDR{C IDATx]nGU{*~,+A %| J"HxAˆpa&^"h1 blH)];{ٳמ{fI;~ffy?k~ŋ߻@G1Lb@8!0 %u륿JTr)rlm8<i_ GZcAhQ+_{S|nWЀz|}$@vtd6/x/5a֙C1=ߺjw;)؏T'r.ʷJ"HIqPsʱֳ[# O>ogikia"Ebq\T'_GNsXZOHew,eA'A*U+$2` x%K: p O_4@ 驦W8bqK[u mHiH!8)xA> |>ї˿c]x ߤ~d|ĀU\o-~0xF|Ez%'?G[ʢtg^yWpחV4.siVKWd A%`W >~C7weHvWr/oVݘ:@o[ / ;}Aook\"/ m gd s E2e=1Z&WIo߿^8ܭݟsWt!tl/oC3&PWW^wӧ'm꿘 Sl9\r ݳ@Rx ǁ OЮy5U߯tv(ע'_p#9A+"Ý20fRʖ?JPb*ln|; }g޿ uN e?9Jʳ@C5RO KwL p(j+pGrmÝ<'sO>.DPAx??ȕ<|6X ~ cH'(ĝR@BU?-IU`dՔsY`H{a|*wR`J]|ak!G~, X'ր\WwG>_[Nܛ'<'J @qGX;@Բ?WM!pIP9R@ 8}m+\&-AV߶@2,nzvva?Zw!J 7`/mb"4,#h|1O,PԠSl#s)[~e*Q{h}A".PonI/e[, @l5ئPkpip꿘aHtӉGm #@Y EW@ | *."s,#F6o܃@~e4չ>920UÃG}5QAl lUa.ʫa:?Q%\3'0nOyӝ,ᶹ,Hv{"hHc.n#|gǷ1Wy. ?u?4\EXkA$QslĦYRFq>.]ܗ R%Pln@=A@)dUHr;n'EA0F gk. ,PpPxtwg 1 |;'09]Dr-};{ԯD\0+RM` xt˃@)AeQVnf,бA$wX48xgO,OķAW s@" PoMf0$p\a6oL*\]'Rh"\M$wϦH?B^Xhh. aF -mʳ{Yx=uGMs%d]_Ɠ?+0k3=sE?s,ʃGxc!Xuqъ dz@[L"h Ķ@"jwj@ [eE'̫A `*HQYꟂ4%\'dd(aWkdw**_ `rOv1҉:yƩn7XnmlWyT o(Xql3;{h l m=' JA(/WV^,]m  LWujGx<ؒz[~ymJ? sр;>r{IAAX j ;6~slwtEV)Y r`&HMJgl =%)o±BO5j.{zimni8 4QKQxRVx߼AW`+p'`_ ?MDh@?e4 cmv\C`?EL BDVm>M@$E տBJP]81U=ꏆy}*FdT٬x/c_kMU`x=3g|t. s0鏔 `e`=. d#cc{jdhe{ 2w/茆g7}1WiMlnΞr=[_p[ -axKs,ؽg0y A@pKRKxȡcw(,fmݫݤ'dS*KQM )sqw\}vЏd7=љŻpe @Bԓǿ][x-AgϽ!& 5`@^~?XʈZDC=R{ tVOR1R,][#A4`ZRC`c{Z)r;l'?qEdW}[0Z Џ Bn曯3t<\ E6qIhZ>n/VH>uiڒ<td0#>ʲې@[$fBPgdTF;p0Sݟ=n_v%hH;{Pn% .ߕ '̐rIDAT__{uEx+E{xP3yKg?sV$O/v^blo,OUu>aFT psb8&ɅuX pW{밴Ucm %&LbȺ?Ek @O9"'i_j ]/Y+ >tų_鶿zHGuVAV lKX @|_y7,l͒ []W\r],ğ)׃ƃa[Yv@ByA)Qo !Omπu9@2wRd0A2{% 4w@0 W:#Л,nǿo;I5? i@F16l'Лl'2C?vb(@ك<ّaU?Qo}?TjY ] @!jݶ4AB@GXWdґI'u@Xt.Sh`g@wxhpS+A7⼢%ЉowlA@1@<B:DQzo3=R `1 0oA? ?:J`t㧕 Ҫ! $zɋluYA@z `rs&ls9 A26l'Еlǡa9cw/_)M}Ս͵e\,Pʽ8HD #s[FllI& VluM<\6Ve X7h@'p p տKD6YQl7cKϕGA@UuLH̖,P `Uoo.&p3U^=dUȃ@_&_EtF+<l2'K26VJ@W0-Y,o,,s Z!Л &wj[πS4/$r9~ Ћ\Iʕ)@X;VEN+ESOn<ޘ72}XO u)Cu.1".*$Б#Z],}3A`G} @0F4`GFo1 ɟQ} wX}>Kmw|=u %`| PG9g@wu?}g?jnsJt'3\} 2{?>]ˉA@ K#4@0D^q{:.2$V- pQf^Ȍ7d:;;OLfiP@xOLռf?A"HXw$#@ 4s@x-(L@ˠYW2 ꇯ ;:7Lmo<н߹{6%pnI'u\ , 1$k#$U\xŻx0Y`E z2Mb [L-u_o?nKC!{ w LZCYB[`cGY H,Z<I"gwr( -NO?;EeXh_|핮>bPl/d\e0,=B XJ9&j#kJ=#'$ s1-OfXb>c`?Q*P:,Ȳ{=xKpݚ'y\%0)20t uL徜 ,ҳ)`s&Μ\i+Gwߡ 0 ꕗPW{e  d@rkZlK^}S|us֮^02D Q<[޼u/zh8oSP^xg!RJMw(H:z,= @@A164  8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@@N@m t@@@CP   8 h j 'b  @C6: tDL !h@ 4 5@Ё1F@@:p"&@@4h@yԀCIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-holes-touch-expected.png0000644000175000017500000001006311653126251032463 0ustar chrysnchrysnPNG  IHDR{CIDATx?\sōLljBXPdaSB\zUlmY J 17-My! j.xUޙ̜s}bf̼vg6ۯsP I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" Ivr;/Ll诠LbMF1@`b6eĀ-1`TDC0Z@1 z@F>ˈJ(Aa/ C_AeĀ5F_ %0Fob0"F`hq?:1`! MA]yBAad Tb0!ѧGz0fF1H 2 I -{/_Y췾qvųG.P10׾?:ݯV\yÊ B'w.]|9stۅZbm>? o_#*/׃KO{+?8b 0v $u2Չݟ<7ݼՏ>pxt2|A&ѯ}޹ygٳз5C}^ `r057X \ D`tc<^&1X p0 ܱuyGPi@ 0sΟo{XJ(?@? }9;0f{.?[op\Pe1حh`aa1fSy?7ΏHq|+EϘm*Ck\K&[8O~u?ꇮ[ aрz MͻW/ pe`n/]|9sovEv~_3$l7TjpmAY/F;(3_sU?Tfo OȲ tx~>iCPؙ'tFHݿģ+~ɥ}|9sޛ->%_vK32dNwnY?^>5Kpxt20H` NEW`n[`ԣ '~0鯍(F$SSc ږ`ik>exw{_Y|d%F[D"v8 Wc0賹 Ϟ @ν}xD tc>ȝ%X>ʛ?qN}zrٓ?8νszj2} 3k+ik3 Ϛ5d`ah鯭_>p{Ƿ}8{X 8{w& ~Zi8Wݚc6_G\> П ~7+6 x'Ncv^||%0V;pRݯx}ػ}!lNLQ;?(s@^†CZ80.|k& Kwdi-247 u a2jkjԀJ ~VoÒo&v @ hJ@7*~k&(_π[Rd wO-UT2@o (ݯL`L&P$7fd K)Uڙ7ԗi$0}WݹU2vm= @M Lz+721LV>5B-Hj2L*UT2#f hi&0 g-@M`|Lȕ [ݯL 駙P韮&m @MTMP,g@ /O^dZ2J @M7 Lhb2@LX'@yL 8A0v?,!0 2@O% @3P( 0M:vu#ciN6ָ 'O%2@zS2g:2@L?0b2@?L?]d@8[п dvӄ Eh#1 @dq1 FG0llUT2P.ӏ@#2P $3W^ :"##֘n97:'$2@)?6 ~D~BdΘ~EM4B0YmP@oL?~NdL?e(w3ZPG`xP:0dfL?@d`9O  ~b @ ̀' ΀ +k~e)N&׀S03`aa-P8&MEeCsi&m ͌8,6!Lk釣l)q0:'T9z"t ~Н d0Ae`dgןokuⱷ߶π}3::! `Cp` ~00 }0 ~0{L? ig6w 8LJB DB @(@(%@%@H" I  P $P P P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P=tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/ellipse-expected.png0000644000175000017500000000542411653126251030206 0ustar chrysnchrysnPNG  IHDR{C IDATxݱ gX\u(X(W[Q, FHؙ ů! Q/N+#{{nvfyULwXzn9$Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@M%@D PtsSG,VcWȸǸq'2W scJ FHz%#eGNO0 0_*`,ɀ,~`5؟0*fZp>ݹaŇ1XVǮg{8kK'`>b:`w>{rCGحv&G0 4 WcAh0?ч(3>=>-vs`(Y0v{#W`;}wu?x40mvy&=~}0 ݧf¯ᗿyH_NqHK'Yv~(7H>܌~X`>l`!g= ?3^j=)7$b"??Oju _{OdWd"Zn [W0p0+03 φl2p?3^_EN".d/dg/~00gn2{X8g`s*kPL?~Κ?}^j~EOOOfw.cnt<~KO=0{?~^׬pt'Jg?x45'֟YL`XZ>4X>Mܬi#bO^#0Wk>>g&=?t7}Fn8Le}B.3}> w<<>\b:gѻ2= @JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @ P)Rm@ J :nC@ TJt=@R@@@*u<݆ p@P6 {@JO! *%Tx @DC|Φm6 %oG};.{g:  %ykܱ}w p9.,D+z='IVINmG'}9+ ʍxO~v}:IO c#|# }ԉi]H>Ƀ!Xy=~Ż/Z/ޥW,%T6 ʍ#;^! KvُL?{lGMtX.萅w]{iGۿ$=dW92Iƃ<⌓d*H _B> oySg5 ,Ӊ}YRA@ `E՛ki+㗝쓷籧ҽ^y2o Ƕq[' r=K) k(/~ OܽF uc}k~?g:B`QEn\G˿6/p/ͥ M NO_()?|=eY'qZ X]hgis{8I8}W{V5@e JlWˆ~wfH(doAvbOO@OPxaoZY Wd58\ mX:Ќ=ozgs(\NӀ/_޿*@@J3yľ,|h/lZ}=+Z/OF -+и_f?鿣P`eҀAAB)NYk`( 딲@ .<Q72_iRиyֱF-xvy~ֳ\nFS~3բڭI)~AmJWoK5^VG -X(pU8@e<X,cS~_?X"Hդ_o}tPVwD˿@q,~3\}%Aڙ]Pa?1?Z%T5lwu ZogSB#l)X{]} NA2sA*+P.Ho4`b2BQGظ?1m⯝{J?(\NS(H"H% Xx ьҍAms,u5ح,:45P_ rE>'j8s>kߜpsh|)Xa@:=F`_d١۳j訆`*,&)),ZK*w]jmE=pi/}){}jTM,Bk7q^Z 4nvW z@,Pg*8ס_2@DT82<)O 5-ޚMDVནO ` |옲@~}c] b68@$r3ٿhL5 + ~ [*k=DJgI C`q}'KoYA@O4bN mz4 G]jӦ>k=˪𧏳ck– 'Dy:(Kyys Gm^ ^`_ aa"iyBT9Ԁq>0ۣfU!kO3Vզ%T4tP%@_= YO^7]ʏOWi >#qЯ_{ti*$(,֣G\빴=o E:0q鶍 䳀le 'ChS}1ɚ}TƷ6>ΗS?V_T>++= d{t]иq*Gf{>CjFDf??H{HCX5W}؞ M| e Xyb4_B"(5% D S~O'|̤\=a KH9:o Oڷ_ I=>' NtiqX s=wYw'be8/gZI j|ߩ+,P,剠(0~j`65zUPoy`O4BkΧ9f3鯝̏vFtOk[5@Ї*u@li͖,c-X( i:i^(bouh߯8ftb r@?0GBt,ɀ5/ |ܠѿ}M͒ bvFqHtPH %Ns^i75hi`ՉrA3~[c!l ]DPs%@vUnՀP 􅧿gokG:^(]tei IW]`wkٓFrt] sls4zs]9( Z5`sc55@;C f$-[]߅mS!hBzKTSU`ʕ@Ozجu( ںjA@h[Etg,݌? ` {3Dy[9׀0/'_j=|'}D66x$tSZ\^Ca_O!\ P8ACǧ]w-;iW S9T: mh5Nׁe `.:aUC]Ac\/WZ-,D:ԥY^^VҮHB\k\F2; $> O;s 'A[ " ?ѿu־{forA|@Ъ @5{j ZAM[GX־qqG>sF+yy\Я G7fw$ASsAҀ9uHOyx:~gvUX :Grzsj,1͜g,{y}F?iԎt4@Wi]" &$ìT\TX@'F -i=Zj}mCz֫nzL5`CAI^nM8 fõ_'*,AC[߳Qvk굇r=zTӦTп 334C=aui@"H?k5[ZL0֒3}0 A6`o? _L7Gj(0hI O+й5 c+^ :35[jp`ڤ,fvѣeaSS eue5ezPDE/ܿڅoZH4/fg'A>x$W><9QCvuӀ](8|rAO{? }'o?vXg{~~?1*(? [cWܬ_c;=IЛn{@YG jw .5a׆0+}w\=ӵO`_Y,Pstļ_ XJ2EE]ӫ]Kњpŀ.#kס+{mW]bu4?5VZ1N`0H-|'3lshkZпjAdyi}B%nFWa-BM3Z kbNa%@J^7DW_~/3M}zf~dO#czP jVVI3.h2Qk 6e`+}?f|f9gD_.ښjpq.swܽ_f#zЗ(Tkܵe[jpB+;wMY L{;/]wSsoNYZ;cz6D&W3A3JU D.ml|sS( 1eE/?ʠD;C=I WÏY?b72oRPHeai@(;l>|6 pQH baN &4GWfޮOZ8uI ka+ΞР ; vOy섹&z40P GO n20(  ׀0;%h>t-ad }?xh 0 Rpt=x?o}QhA@T}uhhMU؂[tɀ.M]dYAV20A7O?ͣY m8h5xb9Ŀ'y@C5 K4 t)AS~w5e}RpTYGOWo=sWL/fkp~w-#wx|8G.3S֌PsIuMdx1 '1]n._eq%HsDzg#N޹}m?Kl3,ПiAP*Q(H c5A$?~<:h`O)ajNfbP{ ҶO]{ri@t@eKB PyZt@x0^/;)M㾞1M995K 1jS38w}އ65׶qH}Bh@2]/JuiA0+ 0QKU_Lد 7)N>O.lћ5MIDAT2~>KMN{ضOr!Jol֟eJ0Ն L Z5@W̻p;#Vaj@`2?kU=Z)1I5uy'jH1 /*}E>MKWܥX5?}ܗ&f'ADP8[PMjsT|M1.& 4쉠Vc ngZʚY SiPM{lIk/'7ւY9fS ,P]Yh $ 囿D~j_FW@-$ р]h`4U8p?+u㫸~5-<^ %y6!-kVei]} i.0M [u1RD^HKr7HɧQgz+k{/|! 6d‚%,=VSYٞɂ^s?Qf0CCPkRd+Q.H j .LM%BzRH 6Bމs xg+YVw6(sڱT ߣ/{0CAҀ7и %0PtŦ HBhsg7r$[7gfZ L<,P2,Gq^ne ?98|ՊD0h?i]? &fZ(&jj; Ԁ?.ԕ }[CE`<֛w'r3 njN?u` 6A4ʾD }n C  7ed]uJ@JJ$1?x3?u 0-{'OmCq뵀<}4n^20PSl@E  qBpeXO]_Ot1R;blI!{dDX^rOW9A_1 Kx;;QIсlb+ЃJK ('D ׀:Z 6)2pK h/s[Gf?кbx"HGgYƇfIM慢 45 A3&P_˾ V¢lU2PB=h]Jd.p xUв+ 1hUd #B4{ڷ 2еl&cܷhPܢ, dJW-y@M[ P"%biu7ٷ ?''Lθva@ypJ`*,k dt]:2?)ړwGk9`հ( ZgwP\ B%.%ڀde?q5!P VYv"#1 _<)4?BekG+Q;ٜ!7⽗MBOǷtCs=OB19҃.%0 x/jexツ!SՊ>wp8e'd>roW265vǝA=*fT0z ;o}L)VWgTa̖p 2͇@6s~^N>*}!]sGѿkZfYA@sJɢ"IBHڄy@2/8]ͷw|FA鿺WNl_hO6Uh!Q;ҿRG+ 7.o'X"2.N[-nlO:F]o#$:I᯾Y}ݏ~^_ 8tԯ@ۜg0>s|p=?| ;}G~ip Q>2SwLV}ψM`N<2x'|,Pl}=oڡm b(F|c֭[* !Y,0ck RJ C|x^s6WY# {QA_lW?eȂq=Ϡeyh "uH|`B'FL4ۡpf!e #5lJOW]h#@#,sʨ!nvG|mnZ}z:諎*kʯ @^Ӛ}ݣ7Ggh0vkWpצv&尉(gnuV9zࡃc7D820h31Z_j67ÉXnL4 MV'i7\GkA_q_6?6pgr^n4?,GMe:Oev4kO8/kQ>*:\LX ®bЪl>Ϸ|E#3[#xXsK>砯.Fؔ_eȯuL@=Ժgtr ?ܫ戯0͗K?yq_D(((lq(?{'/>wf 4ܫ_Ǩ;U)6;-t7P]5Eܬ= 1]纭#N4_m_V6s3t/3zy{,oÚEZoѣ!D߿"\!K252T4w 0?ŷ51E,Ptt p GLcq__~G:`u|*DպS _ gi)'}N Kҗ/#@[i ka,|0hY n *{gѶi`ϢTF.=N4n: gTNd^+Ω5k_s0}A&_Н,L| Lu)1=sh›LL=@kwu?;W@q_3ײdH#[|x(A ?C鍮sWq_;-ѯ.XUJ_tّ1 _{ QF$~\D/WegZc"]2~ӋM^ Z9N`иS~U s# j],l) 3:e5OGV/KjafߴɞqS~]Bsْ @C;F?dFy}]W}`ܱ|cZ?5|[`8C~ݛ8 Q$o #,d?S㾚f?pB[?1#ߏSJ9#zL|\q_>ˬ'u\ї'?1σ꺶guJ0 8G7w&UY#U{pg, o`k8aQت8 ͫIFx1˽ P;p ;MUxo<3W'\Pp JE_cO1!^gA럝@]Ů1/+ C]r}1OE4K3ςs=]Mlu`t[ֽܶs0޵{\Q96//&X D;Tף>m04KӀKfis$@Pۻ;mA@/LT2 ˠ^5lj>_1:@u.+GKu;f\D xܲ2@8"$w3{$7bD"sȊ_~jhQ:n +SVZ \%H~=lB@ rBIE4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@@ rBII D(Y @ ' 'Mڂ P ga* 4i @Ar@rҤ-@B [RIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example020-expected.png0000644000175000017500000011433611664235510030432 0ustar chrysnchrysnPNG  IHDR{C IDATx -Eu.~Ν.\f! hb̋>>dҋ (TT &fA&ŧy2 x9Uk{s=WίϪUVU}USSwx<yw~G#"ׁG#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#׀G#8x<N~ x<x?lG#Cx F2ڷpʛuyt&QÿS,٫h@cܠCF;ĨSEǀy8tJ%sDp#' '>I]lɼ;4e0Co['ߚS9ԁM' SGLAXԲ؅r̜f.DNij6xw,z|1%E.')myNMpV;p=;w;ºˊ&=ah5Kb׹'Ƅ{`H͆I? BOPeruᙷiO:+L{HC'9xRo,>^#>lZxXf!fFmbw1d ,w倷nAgu؊dbXO MLN%_ 4% Q~!^GC zTN5v+'nF>U>Z)erlD >}!,| l@_{̹S'ƅW~b^ E{Vt2ӱ;ȇzw8 Oroz"t%e`=Sx"bG=%K<6|pz$sApgaFq_z80⥳,L ` F|=6A|t(̑WfK9quM]~N+LsG>m 92p2 `VOL@F| p_s_%e_]nt%4D|b=s4NO1捙z1mH!LԮ?O~'8\gγŶy&pjr_/Q}hrVpɕ;(Gtb7ktYSLJm oa:l6D`]')˗~%-MKML & ΂ |L`NL'f63l4`Ӗr" @pUz~4C3o > lU^Mhkۘ ~$ѿуCh"bZ2`R(ə# эi); fN0aڡkו/Y42PØ9 Di}ǞOGisp_@}J8}jQErkm ^~r_M[+Yn(]gQпMIm! Q-ASN&;<0m`֠-c|wr+OS-kka֔# RqR >Қ@~֓0L\DUgT,5Nz#=|?h꒤b0|3M iAxř4 ga&pmJؽ"0~ի{cc1XZ8O}- fȒoIK߬yZurw_Hs$Cs2ԂᏘ@H(ɠgM0x0^mj"Lh__M6ᾀ>o`}V 9dC5R&QddVSC[^HΦ=^$ՙpI"J^CVnc[oJk&Ƞi@"?- aiD?;a1v xpS~>}"}Mf'N(AK#o}$NʠZ&?Q+A ypkWRDE~zC3憄\->=oT>9C4P;t𴣿zuпkuv;6mP^"Uz K) BDyX'( ^݇]im?LoANtcCb}L ,!9w˖G&=/A PcK2рʁ'ntq580zjSD kM̛ o93x]v#s+@cȈx_K1uY~z5R=(ѻ(ڭh/a4 2$aWsqjf/T 4 WzL*ɠӯiQl!n6~||Aw޻sAwܽM^kp{_5Mď_ÁF|)B9Ѝ%{~A굯Efڅ(q7Իdj}Eu$QarjL1@b>KPmwl=2  K>,.dg>nx?7}:Nmrle{@?n*:kI>@4R37zIjďIK {A▂A}5': @ZLпVic!*onJR!I 6Ϣ,(@z!@.@}l+>C/(3 Z$]'Vky!Ua?u'X]ہq?}TqSo%GJOQ ~ ~uc?1}I2(oF{_͋R&w+n&eY;B#f~J` $C B Ӑ `I2Y/!c Nޮ@CW^Cl? {(XӟW7A ~_%6@cs4ejk@=v 0ύН~% fpH+M3 ~l1z! In<>RB )>;;RhN 4 ΠaXZz&i? `~rVw5#˷angY˧}N/~0wosqYte6Vp_hyPD53 >{?l߷2<+fjH֛vu$k$D A(JM 1%PP@~I&dtX4QD>=_z"z5C#G>ᇲӲuA@NM-HYAS|cJ,1@O20LpO6c\E!cs`;6C8x8ߺz cL >~x)Z Xp cH4,k,8>Dȴo1Fe5Xj84ЕƔH ٠ b dW#h&9ȀL@R.YWe#`0409$B7j;CwO DǠc⾀>4hGrӖ@|l}k\~ם+s(?yKlsx~ ٺbmu^p+jA A1Åz%7TSFudܭH hkL}5̡RN(p1wvkO-Vi=m1C) 4Aj7 >+뿑9m{5/s߽z3]ɲ)4_gM U; Z;bM l` 1lV" I&dP1$=,rDm8C P1ire[}ӇVy٭V'.0ch}=_|kæ}tGWje'T]VߏR-}>~!yT&`8 n)_=e5n.Etg6|}k'M=H{ԩ3Zx_וd 1[h!=џ FB ,.ĔPV>X'06 i@Dn۶\OӉ;-m[-h% p&M|}g*  wm[+6.>Hc!@eOg_tMC(jVq  .jЀxX!}?dݸE&J@ Y4߼'ǖq#K7D Oq^b:"v{.? 7M߹\A}}h;Wt G_AK7O"qʗ>w!zÞJ?k QΨZTqWGPcAdA F^~׌ !h9" P=@3/WO I~U @!$ a,K&MM_05^-N6PBc-0PzFc~V_߱+7ᾼTpXJAA|NBcxwa (g0p{IcE'G}[>G B a0 p(F?޼dͷm,P5%6QA~`c(?d8eo?eS C)~Z~ S.}>rRt;T Ì>! V^=m^r7d!{l, ϻۙoS5#rbo x IDAT?Oܒd@D7{j@P9+r@$ {i]~N \ζ͓  #Pj2|F '{'G 9\#Fr I m6'D8ϟ76sړ~b͠oY$ @À]:gK{K8J$#)-N9z1 OeWߟ)YbpL|+FuIဋ$% ВOK0Qkd= rAXuPjF9d7  jX-x%׭qc@. |qk? Pw HH>05s*\~Χ9dBDVO 'z >HNwyWn8~}?08g/;nrB@!hJPKV0 ԂhO   \C.V&/r;ƎS]McҰG|6as_J~ZK X2`Q n~#r4( z6= $]0c@p6'DVs6\o@n3w7# 5XIB?֢>[Ωǰ]$'|./]= = `l:WZ/2 o+G(#4 yb5U%!u uXҘjo]e4ib:ڈYANGd{< 2 }Հ RSG%-F _$ `eo /X V}9?zpH0`T/6B?^b,1aY~1!) ~>rK Y>  7:aAMaXHN?hՇ/S3'%g% mG>24)Wd1Nk hb ༏ ԝ}`]6AUkqb^3Bx{ǒS-ksŤFrHf6WogoxNb?*e3͐AدZܒ0FI@%3cH`Or,'/r /Z K @V'8##^I4 ӈ}\hwd{}`K|䫺.e{'>U0@w~n40DĝWT=wZOS%=P+'9>襸;p}Ӏ|U[~଑ۊd^ > d  ؁~ D\nRf4&Џ֡mSxH" H Nɰm14k\@?,x'\S> )܇S=䅙G="|>}O޺E|K˵K kn${` a_Lh @9+?}@˞Ҁ qدOe:MAn7QAӆ1\W.  P&ƃ4+zS.<7a AM hc2!̰6;-IaPDvP @gm484cy:G_ >XZ N~1{^%^_ߠʹ'^*Y1w,I| ?a0py[E^mg3'q`x]w)AVNj3W4?VteX^shK( %d  x-/H0quc< '_;YMuB?l-rc IOs}fu@+Kxi> 0)k&D,9Xrb$?,  ȭ^>DTl8O?؃''%W XAV:&M# hL2O ,*}{hdwq6p'fj,!;1`P>^b֘`}x&n}e.?'v=j\%oO5y(>v{Rcc 2p^ci 6^? š@?{/]m;4ƃ5.}2Hz==h~1 ) gI"$q#4mX~ڟ ÛA&6RNU'3 Er ܩn>JMU<;oPVeq϶=+գʕ8'n顕?' @sKzn?{+20ģVJ84R{QvQQj|xzz)CƘAz c~w-^X!&@O~G}7y PV!;u.;ϹF[iAtaP7p` $9F #𡫺P@7X/E"C8no_Ɔɯ_{(,/89'pZ, i‹]$- hb64=OK.oZ.G %>@)R<Ɉc&f:x"4w mhG2 Q 9؈c+F6_Wd|2VM,?IuM|>,)ʙ4_'.@%8@?Z uoiOXbh(v/gO}TEAԐ[O!kRwG LK9J|@cBLn컃=L[Ǹ[;_}t ~(}#Ӏ_BX NU$s=l2kL }w%~R,+fiK0}74  a Y{"Vm>O}aD[7}E`% k. .J90.?CWA=qU<@=NV}XcM=:iA݂B建U5`.47-BE Æ4+Boo@E2sJ2=i&1kzǾ%'q_ L@@Eྠ?$h"8H(ho<5dYzZA| .[{ׇ6u[^?[{=ź/~=/`񟷜7AXKjS~V?laA~Fkk-YZeC4M·T"H %-!%d|]&ue5>7B?s1A2{?9?F'dXʳN<8̡oș=w{bG$4}vn,{a?|r5kOc!$BДP}$D8? O 1ƆH~ z+^`f=oV-~7V8Yأ൹iȫs Mz&9& u=}]Ua_x{b{Rh @' ߾c^f22m=@&av_Y"ԻٷzP4k^7s i$E@/ Y} {l:2^KUl_,߫ЪHA3qvk\QIѡ#oɒJa@e]AUAK܇n?S'qz>VWTĽT>ǘIVE*  {Q7մ25LP/ awY{+JCBNL‡޺q]@? ^^4xa_: g_|OʏWyae]R KS0U =vH]a%h>XJj5,>}W cנO˸/&qv.c_'.8hʂ} 4{MȚ|`k߰oH}),!8noy!`_\>܂5?_9"lhI˹%ׄ( DŭEI$h@=N4@xB37џM肛>SS(AJ܍"wC|#П}ep?C?$| L?rv@2,}J 5h^y@}BȀ$%$ɀhJq=/Wzh@F{oz\*? !鐈/u3~g$#+Fܗ߲e4q闝8)~?h+r@!a{}TEdm>ȐGEw-yOT~ !Ņĕ41F썀OƤ Qu %9`Y J3wOE:_Yں7ԓt˚tl"F@rm븡T#g`PW>Չ$Q^ʶ{ý 1R_Hh$Ypof“rHDžZr@5@@.9 Cgw%9%4PLhf''@ M X5\H0pܰ;yt}K׮pQ^J '0h e&wߝ@2,A؃D$$-<ž[K1٠9c>~>H-酇|PFVv ^'Q^{Lw\ېA X ;l#8D@g~pƑ)|'@#%m25R⧍ F'mZ8s6`2pGy"^BKמ iIJVɝte'\AXA@#TK*@X,b_ɒ*衁 *kt*e\sޤRo{pmcG]{gH^˖BHq1o:Yڅ|rYuAH~`"s%yB?r'?n4 oI0n-4IMqn~=v>5M>?b=qb%;:Ih^9Y-'\@cj#z('W!L $ M kԦ{vc>2ɍG9ΒQC\Q027 q(h5Fg f;!ck}i<5"w}ߓ7O-]";Qpȅ(@m4d  ֘р82^P[ k2Ε"eK&cL߶ (rLr Î܁0]cxh{yZ=\H[µT+{pr 4Bdq:8 xn452Eޒ-LKkw-1zeul u=&I}51eԸwh]piof2GBY> 8P `pQЛIHAvA Pׂu[$a e ۘM/p1!|7L½z7½[܇sѸ,7nED+){|O NY LlC(d0# $ A2@F>hCl =h%Nl1-Ns5ۄh2 nJe,-fa% 7]-߰irpwa 'Qph X dK@ HK.;Ik̓9@yYf!uA|1徎L<[aq2:hL`ϛh܇>$ ܇ RwPnbÈK IDATL_> NusWN4 weh`tZF2@)ი >Ȑ,#Keb&aT$>d ƖPɘy:Gq HjG?(b3J'%wuB3\@!u+L_v$^{)܇c2@28#!$ .ypoy5?rņoFح鬸HL>ccrEˏ,5 779q;EA-qHAo/c)/}$()| (/dČ޸Z2v/ʥ:{-:y5eмiQ;vctTlFWڸ&T4u]~aY~HFwM?( d6'Lp4 guN^}ͧ>I{LUd38YD$u-IlyO.eR❀^آSvhf C cX3} {Zrlϵ?ٌ!C_G2'? Zeo@$4V4Q8Lg|r,.`JY>Bh.TasMn>)10D;6k樅PC>^a=zx\xq>ᦝw +??γAv1&qO\r Kw'@L ti!>u~G,PX1w 5l&ӵb֞*⻡ťyA%o6r5XϦXӡd'#܍n yFVkf2v_Mg2.$#%G\QF AYط91 \Le{ Hb5o~E(? U.>Bfq=.ncz, 3 F=HýzĘNg8XJUpO3%>gΝιjhS2P}Wѿ/@"(ykMXBk0Abw!L?{3ƶǮB6MvC#=%pva&[T[Yb}ט:upq+1\[xű׸d|yePsQ bL|_ @<<޻hB5 Х z $a|aq޿6t]wleXhLFfpk6U'z7  3;|:t: }X_({'uO6J޽z; K!s˟}R4wtee6>H"S+-Sӵu7!EI/KkR \ v2,>r *'ǽ;a<39H¸&f4va&LY>pUo؎[.~ h>rlO?z!KIN'4ɲLB"XSB<,kנ {8؟(:|߹6]emF#w֐/ZaECk1[7X$_c}]{(e2 /[FL/tƫ}qơmgBFO)'t\B0(qM.=U&TBW"9>MYd'Q& }]Ji_vC q^p Z$$+yy,"e; -chfgɲyGY Oop 1\Q,6G= "y'ko}OGh< o<͠ y>xg~/&k2H*T9]e7y_7QaPP{ؗB0=~MK獝v^ /aC[<[$7!+7T!lۤ4 1.qYc6Ek$s4xq\ï&&o{h8З@]_j$ Ƹ_Rq}%.joL R@`U&EJt}4۴rBJԑAP4@V͞o= V03t܉0%{=Clwݺ~C]Cuc3IAd֦7c@LzJzdwgW^\=qǞU<`|a@mż#a > #GJ.#7QK:E8 W|}jr*Uػ^R˴ 0`2`cM/|+GWv'chluǽ6j?@0Wp>{ }R_ cHzlH<ۣ5&rf\L$jЧ_>pI[GS@luKpH%mcB8 dbIu.fo/ώd AvC#riF~<5Gs%ԍ@cAmQ;}˞T) }JҕNo02@AÓAMEF^r`,vm%Ĭ07.Q{!hbW&x+,-G׾{`Q~3w𚥒KGls gKM~K2\G]ŭS\*+f +:w+ue'!(Q@$C̒P8l)]\-~퀮2l6ɑg lVΏ_@B (O>nOԆϽחr󌝵M,اw<6F Ո޸Jq+?n &!rp߷Bz]uWg!_(AliZOe`W$O$*z@ߓzեtEnmFh&`5ߡ0i&`]ĠY˖Kr!/M%EҋuK #b }bvזF>gL]$Hٝ }z,!ov!(ϲuX/}' O.W Ki7=(bօ |GǼ*\}#j" ^Vx^n>L@8s1U"@g.8@p_C~I`؃ $^/8;;oPQ~YP]s9}t,Px0cFÀ5H a5 X/Ƃ4jC @b`ns_=\+m{R-RPݷo]6i02fʬCq,w8膑bVt[ 8ra7ܟ ܇I< 1 X/݂2a}OLB`d3\ d `#OGߓQm1U'Gfɢ1dKaVb)^'ENV;$W:S @3w'_zG^q@iT+@ hI2YgbaQSۦvf'Bg^ ۀ>,}q ~ɠ-(cά]"nk'VWBA{G\OyK '$M&n03v 7(|pi^_c=D[~}$ٵg$ׯ^˰G(wQ_t4v)>JSlf091% 95F@ p& jW>8]@g_0ҚRy2@BzX ŃATHjRmW&d憞VI¨{p!0 AȬ(5cįzcn XXO/x,=X Iq;z`L{| m,bX 򝀠V`~"HÌi,ZP*ڑ2@Lfa52hd ~(MRsClߞ-X*&Bygp㌥??cf{P 64{rԋ.jM[6D)$2e҂7B3BZB=Po8Я ֳ^{$IB tOCNSh3p|6@d0:g۴O=d$g}V)J]D|`J񺒶 @?lLdB&ߺun@SW>zA@L>|a5؇ҝ|5|5[J6Ѐx}X*/E4qC])cㆹ( o)&E)&/P4b`JՙLE&SIj FAkNJEl•O:ӗc`~(Wi1P& @ @=a ' v!MsSnC\tE6Ml;.%7.4L4%_|!E@VWh> ˕A8 hAp i@hqV1dzu[٪<7'ر0Pn=@Ǩ7P^Wʘ+{h:!xf N C_w5 N!38ź yNPL CC,x+Ց6qL<ЕQg~DbL*b?]a9 @Dd epe-؈XV0ٝ2'㜏Mĕ&@ .Cdh`GNjt eudą bϓAtkFLoI~0'r&g~b7p:4ԵV^s ϼ]DG HVrȆ'A@Ӫ_OXX(c&h(dPX~ruTO7=5X/bp@2+f,J ayj^ 벐b$v>%~'W0QL$Aɫy}%V (\8#䲓>qUqDZ!$=Si"ed 0^\uT1$*8ʁ8sx+GL҃l(b ĉXCfsh%khQ^~H* ЀL?բ=c p@}"}Ƞ !0H?04CX KPH˝ 1DiA3?ӘP$O0 +Uk0d,C2,L#xX2E}PEC]F/P.j f-[g@ܔd>Թ,(pd4@`7N.5()4Pułg L X&@Zv)d%0AaaElS߷$U/o` -AܔLԈM bgLXsNe;7L=˓$o?<4P|r@Ȼm 1D @_5gLC|a+Ҳ[v[~M%%da82ߞ N]%O  [Mϭ6X&Kzf5sּ:`Ȓ<D9+8dSy<>DY89y-i稐_>׬Ot]gg յts_Gڦm'pgA[{8h. |k"Ek3ȏ @aHk : hBnEwD@kSDcwlStysx 8#}r!s5 N!JuQ[pڗ(=t=1 + H K~pM{ chPJ6AB HaWnnw<og~=kdZ3};9Kz8f{RuA#W=ۿ:2@cCkv}(ߗ(t*b讎 o+$C2,@f<HƝ K<7pL&7׿S֩6Ԡ 7n\8`jlj]ʯĸ~~}C}yu(; r5 $-td߄?0 зo `܉ tÖ:NA[N Ѓ !SXxA|қBd?F|4&^?^hKX: AiDF$i&DyPsJ3 4bH ?6<` : ӎFן>=bbМayd/aQ*I'*-Aab) %|JXFk2k~-])+]2P.pfu<ђtEhOL0Y0sW9YWW'ھa}U?'3-'~}dMs(${?Ǒ_9;'*-B[UσFn6Ƙ҉H[E IDAT|pH]7,6-y؋-reel:ՒD|mH~%`] %f`22PYcf6|A.<# '6X2+kezK h@2Y6~κ"I4A<[޲ `^^LgD|{wB|:O>f{I&M蒽_V7>H; N5 /#M]G ;\H~Aϐ;K fL;^ȃ\HG|ޖt͒ʴ<.bfJ* UW~(TAǖkć@ex#> q6\ПD~0G?uD:NFPe\c=gBp9ʷzPޓBTU  `Sq%Y0~4"|cXtj%G,>u' la]AJ6mn i]6hNḱea9=r믷 ]:DF73SǻmNL@M`j t񽔺Azx([8nJ4@=RiYw !O"Xګ$ :a/.1oxc'$~"soz" I$fb3Ju]+5kJ ~VGrܟz/O/|\dkw C̻̀2M=I>_i/qc9 Ӟrl$8p~݆S.-/́w(D =fGm bDfd'c,3x,@o}nES/D){е@?*u_Lģ-dx@/LqTU#EѤHaGw=풏B Լ=gR8`{/\{9@ iPu>৛!\l{#*Fрg2_Z;]&4Xbgcl6#0GQ4sNC Ǯ~~B<$S=`ѱgi#{!#?|fI fMFħ0'wu@?rZ`\^!2)ԫ x:Qr)bAT0$ O `As $\41$)A IpG6c={&a^]!q} p9d- {=I/E?(aQuIiT:4 ^A 5#אɑA'2Wი*  s4N 1Y?W:~ܣJ]~ x wfvs_# hּmu6^t=e}"VQ^?] d/z}’aP~gA7'n{1cM8̀`Cx#K15dP׎o|ʤf%+I /?AXw;S٪کP0 eۀ>@P\O #hchAk u*ÖuY{C06LTC #`) nxx tS;W1O|#Mf?9(oڟ:ć< 4hg_I4 m+F -#q2<+}&װ[&VF[ 44Åpdu[Iq@(H 0K34 h== ,{W*1tmUWzӘ3pϲu/LFE[4USfD)ϲI`rkGC Z.8+*/+=?psx@1?Y+'5k21< 4 h%G|LA$eqnI> %3 `Fp0r!2[vٷL龬徊g81g%A|A >l@_,3=[EE?~NsRu(_Fo~}%0c>^tǃqքxM|6A'i(ȮC̴>@(A@4(A\,=,Gim^Z/_/sxc/p/Blf@_p\[&A_[ćA;Lg;E C> ءh ޅ@X%,,9"5I&0 H тTTK8@C:28ӱ}RH q)Cb0s0.Ca†Iv)%A\r);z)6I4', }<~(U=*G3c3ӜrydB,#}*e4(g`uK%x]7Pv2 FI%|懽/C`%ɠc D# AkvҜTGAv˴ hlkU 4n ǰ.ȭ3^JNȝ^c'`{D$qh.2mXTƒግCGÕW<)hN]aHq3c9:c'3XL U 7͎ڠ-DOxP@F|x3ЈAמװܗ=ϵweMojZ|}'.JJ C<G饗Q/a: 1 }ArX`&dX wтp@Aqƒ~ffyҟe29LI-.AֹT O#Ȅ@<kt,~3$53׻q`qAX}=I)JZXN@#4\Uaޖta sD4bf bd`Ȁ^A$[h%JfEybhuPb~MH@mLVLA9OYe s2>xv;t 5>` &d%ڲ85 ,O\V.-|c0o12&$.ՑAv` <1 119>L5Cɥai,b | 'c@fBh `@(ڠ<xJ Ϯ)o*2#KȀ^Vh @3IO*h3={+2 b2H2-A`3ܠ=8s)w 1m gWصxl\֓6 {=d@_oıςv8ekFrN> $GL.82,IaIz$6#;^&s#a!S]ˬiu]~UmLXO">Yր=qO߀>lڧfCwa[B=c =봍-#2P hzR93>pW~vX\ɰj(b|oIq5O a]ctcb6"h5\ z$_4e17@?\c& :S?]1$zPBPRQ+0S_ӎO1qݰ@ޒd,δcg>ЍLAc,1=RkύѸ .M7&,'/zJ) }\ 'GVWhg? @ 8 PаXbUһte/EiG3p #8F ԁì,|KH"u\E- Ʈ y܂W o4{{ȪC:ryRpO },yA׫(KAPhAi&SC`o9"${ǂ- 7(Ov Bu~dMg!7'A;pڍPau+Ii LE =qIYC'n5 1ݜ]bquu=:DŽ>?AЧY^?/Jq@џhȽ$ĸr"4fֽCpᇺȀH#aS^HuX{H?zvv"8hZG 5 It[ꍅ:eF!H{Wɀq\G{߮zh@DAyd C6XO0A(̫?ϰ w$aA =@>SYcliJ9~g " L /c4CQqd#{fHBJʐD{n] i l>jJ|& > 0ùȘGO?} vԳur#FN~E/poI%iwM@N: :@|PfX6 {=/)"@#RuL HrI32$aA$!#6ux=7H#[#|bW R<%,ФeOFYo礐5|oxiKKx:^0=~an NN ? ER=װXGz$LT :AR`%WM@gDI$ K-C"DŽ$ڃWpk)n.[,hd l}=*K~ѱt+'51(i/ w<~yGC`1xx_~(5UmkrVh&@ɘ (f+B vxo=/ˮ<{|W M,ۦQ>I5ēԵV[ ʪ $I- kXԅDsN/po<dbːς"H% Nǰq!pg$0A0#Z@*6J?ϏXA-Hl =V1brJ_aЬ;ɒnf3+Y!Bn*^jnݍ$?`J7""%(/tQ1Ds+KBFc̽"b ^ fLffgy=o8uNVi:UoUo?ϩ=W}`Q./#TzFKޜǪJMm3Ȩw+{NJ/}s(Wck$Z 2) @8rO8 MtV@}ӯhub38hOy-g G/"=|ǻo\|軳TpU!)VDzܺny|)=J)XZ&ω>>:g|KJ?TUQXN؏CʆMwV@,RXb͜1$-<:@} | Nq`ZcX{ cg;s VeWŗ.#C%MZo<nyO؁v&Ěk^% 283  ` ~3/We'WqM粗Ekp|QS_F(h|E! A%^졖sP?\G_lóf{KS|,:b$IN`ups~ cGQxŚ.1PŘ^׏PD8UUy4ijy] `yPx`NfV t>O9'@m{E [_e uu#ӍM*̒t wtw}7'lmҏq&3֭i[Er<M@%rNV8=Ҧ  fsl?yD_*v/'O ;H囄{eOqwr-ćD[q* wײ~ J:y5Zl \%z #=f DV9'pݗœVs$/8 q\ /3ywJ& 'CǓOPݞ#LeDG};]?Lʘw15x78\2/S :@uyguIDAT*{:>|@$hvO` p fPQܷonv殠;{r S/>r_){FUW=]U|W5{#s(NZ`ONa sa+.݀ ;뻾? `d)ۂ~m؂u =[(n /uO}yƵSX}Z b( ;T z ;+r0@4NZ`g&@&[X=>@Uj5?~wh%4xa  ŵ+=2T-Pc >d2NiE1NU$o'->} Oe.e~2w;72΂t+ nm@>hm@Z ح&}PPO͛VG?L269dqw6+` l*L~Z6ܤu|p#J ҏV? 4.{ r<dK? \⯣K_}f[{tn)tmB1^:f7^vҸY?ƭI?@j]NQ(U.FP/pn;V im!nd _zx`lG}N Ha76n1+{.JG'f?pB&/'}▔~/|Dູ-En+zAZ' O="sN,GCU.&앜ǚP'C} ͠R1}-Uu_T~ ~i-bd~JF~ JPv5ΣL}&gtO 5uO[ϼ3p!.|=VGIT`.BRcA}x%/;-GW#8)cC9~TQ:CY,ӕ>\_pstJYT1ȡ؃xjXo {qS}/k)/Î/P3U"GkYJ%c@J(zG8[||o{m@w' rgr #$A7Hod]l:챬a %GEїa+_NY kB$vIc(P0=xװm "*hݠ:W>^-k淇_eKKLK#P*'m ݞnn CN'(3JK 7>owosů} R}+.\~n]κpwH~5mNAp.uXBކb +l7~'9u3B8ŪJՙcnON!84b IK/<'ܕ$Ǣђ~%s fO:!E  ûe'q޾j뷕oW?%Zf(%ź_:$&9ǣxN` v˱@9)2;'^qvnɎJؚ\t[hmArONƣd VP(>沺D|ǡNlV[}ƠZ\ te裕51X_:+PvEr0Il3|um:N UaN &1P7;L0p@? k7@HHdVoÓIH4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s  h sJ  U`$@$Ѐ tNI$@= ́H4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s  h sJ  U`$@$Ѐ tNI$@= ́H4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s  h sJ  U`$@$Ѐ tNI$@= ́H4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s  h sJ  U`$@$Ѐ tNI$@= ́H4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s  h sJ  U`$@$Ѐ tNI$@= ́H4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s  h sJ  U`$@$Ѐ tNI$@= ́H4)IH4V9 @49% @*0 h@:$ zX@$@ @$@$@HH@蜒Hz @a 4 @hS @h=s   oiIENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/ellipse-arc-expected.png0000644000175000017500000000426311653126251030751 0ustar chrysnchrysnPNG  IHDR{C^IDATxݱ[UGa "! (*!6{eս|_*f~'}\^N<;' I@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J4 @%%=@؞D P"Q%@ `c̏{Gt̺Zpf} p$x = /N(CͶI9C&Ap~k{asFY+`^9v߽Y{wa`Y0g~F86V~0=C0/Asϣ& C{`&:+%![y>';5VVgFV`=[y! K'Cl/ʳ"0\ʳx?1o噄c'aAF0bU`<[fNY{ FgV"C|bgao'C`dzU @|<_; 5#'dA&[y@v}+jV}+W6M҇  I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@~:y8^B|GPb@G o0=Jm)bibE-}cJ?=1*o,@X%),~!Jx,~Z,T},~`HQ}i,đRM,>#;߈Ub,>6k`=6k"`FÃU“у,X_aX|UzMODSvG$>O?5o_/ Pq @AnPF!`/1Xd5sЃYMkGҝ0b fr_-vubPAdiMg/fF- S`@w_:-e~(GI 0(7?7p<¶g7P G،Gҏps/*Zx{ ;Yxrv\r3vxoZL7)]ylj~/)3_-3W)]č~pKo0-<%SV Et42)!*U"O3u޿*(!7vV0 Geo ̥eWWUz{NFZ{] џq ,77Z ;|]&@ X 3|%/p`$=_$eu|9F4_{3FdpsLz3v_2 L`~}[ yw[ @_vT z hl$`C @(5ETa|t @(%@%& (Gb|t Ah.ۃA )쟏;jlG PJ$S`{pІڶq@b~\JB dl|GI$4n|toP0!,@6  !mPJퟏaldGIB ,G%Pjl 2LB Ь!|@$|o;: sTcJ%@H;m_}}r?Om|X`?axWO p]M@( %6#20z}re22`۲~2d`,?.?u>9U =>rG20_tnS_ە5>KDJ`q0}p뿀,>9 /Iaq0!/_>9n˿·LZzGK_#~xېwOQm !PLJ`qP4wPO|/SnBȀ/@K`Z>U{MSKPpLE63d`,Aa]zGg`4nw49 p_'pF6k $c:5jeQ?Iש^:7uYe¥ޗo@55Xsf7J,"k{b=]P8V_Lf{R.`@wc gR~0S|9OXĕc}nγy}Rp B/`Wʀ##;5ǣ?; K?vj2&їfL?L7 @6C4 tì~Ѐ ~n}zȀ4bZ4\Ӏ *`Ȁ~z} 20~(܀.}L?o탶`r ~Ѐ CflȀh@U0233Pt0#PC20UxȀ~ 1Tnh@a1K,ۀhB=,܀~hX| L?@!1EC10 |k@ 0N`N~bh ~L>a@ 0ܤ~MӋS펦(A=߀~ze702`}(g~fp3`(Ð`I@M 0`RC3d ~`VӋS[펦X]=ـ~`105hde3mL?"X`=N/y6  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB @iG+tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/multiple-layers-expected.png0000644000175000017500000000756711653126251031713 0ustar chrysnchrysnPNG  IHDR{C"IDATxegSM t'+EbtH\& qƍB wFa "qV@0 C031S[]u{>ͥjnW};oX79hHJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(4IB DB @qG7lb  s} #)d7#ߌT HTJؐ/T` F6tF?T̘0ѿN7_<#z Uv2G[O6{G />GXTۉo?݃#Ԫ?T)¹zWhMQ?OLV+'|*@ $ eê5y97>ye@2ozV5; Tkb腗9y?rr#zPH d Plz+!g5L (Or\Q]^`sS~S}\_tJ@%ѣ~s' @)Fv/i |h ;C.%)͔DW ѿcM3{0OWUG &CvyL&o hmtwid``>?׾wW1d0 DiM?ӫW#("*v/**3`VMS+z_{7_Vo=#P>v?o׭g@F k(a׊~?qȀdֿ*g4d@#Ռȯ_藩2420 XÄ׮2קԀZv~_IFk $ogl3񳟿w/?}g'Eos_C`b` #O8o AsT@0}V=mоڀF6"m]FmqR Fַfkr lӏ/7^9[]zŦ,;PGe;\l8R6Ng.cw`(|B_zQ=sG+t ػzӧy22pyPVғ/nn36p2(]hA޺@Tӟ!vBm\xJ@n h=,Na4ܛOpGJ i?Lu_z+O%Irm{4ogw ki@<<()3ҟw'g ~{W.v_*AҀF8//] doL} h_3X ܛzJp+A_n:A\N o[)3ʺ 4K%i/_%p+vdu?^TMuhJ CO-_69 Y,}kiǠ_;[n@Ju_^ d_%݁W}ԫBq h2(v{Ty7 XlA3[8nL@֟P;(BϪPfy9P>Nϭ^ 23ПYn/n8A\.oAe?fgw _7g~%59'.~Ge`6%Od 镠 C`zJП&f}Yӿ:dd~'K*(jwL鯈lHTF w1 E@T13>:6g@e`'ptʹ[3,`_/,)<GK@s12C 7R ̀1 c-%e U#J//J~!xꩥqIۚӮ#w4)%8,NaNO٥u5vX_ 1ӧY /|AZL  E fL9f+g3vhg[#_&`wo$l|tU;~_ `]KnO޼07:u=/D࠯egw Ex A8_#8p?@ Vcڙ~4kggCi009?3P5h@Uљ~lL 6hǙJ0  L `e0S? Hah3`"A#j04ڰ1 = [? MLL?'f- {uL?+OL?kXMa0La6~6&0`9#` jv~V,N 9GI$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H"@fOB ̞ P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@/-m"tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/surface-tests-expected.png0000644000175000017500000010617411653126251031345 0ustar chrysnchrysnPNG  IHDR{C'IDATxy|%Yv7]m-uջv{'d5I DXb1e/03@Ȱa /Yp@6lLf2YHpIp2$^b-vݽz=uTݒZTu^RݺuN=<:cBPJ@(J.CP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JNCP(BPB4$ BiH BP(JBP(@P(9 BPH BSH Ӑ( %!P( BP(y BPrB4$ B!P( %O!P(JNCP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JNCP(BPB4$ BiH BP(JBP(@P(9 BPH BSH Ӑ( %!P( BP(y BPrB4$ B!P( %O!P(JNCP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JNCP(BPB4$ BiH BP(JBP(@P(9 BPH BSH Ӑ( %!P( BP(y BPrB4$ B!P( %O!P(JNCP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JNCP(BPB4$ BiH BP(JBP(@P(9 BPH BSH Ӑ( %!P( BP(y BPrB4$ B!P( %O!P(JNCP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JNCP(BPB4$ BiH BP(JBP(@P(9 BPH BSH Ӑ( %!P( BP(y BPrB4$ B!P( %O!P(JNCP(@P($ B)$ BiH Ӑ( @P(<@P(9E%\٣Tw?qLSGLɶ毑u.x4C\- tZ?e~&V.˞qkx< HO_Kz3o;w({xh|;H .X)t_$t."ϳn_$ /1Q, w<1~?] 5;[TmGf'W廴(R~oY&5hVw/]Ra7f *?#x=r|uZ8n{z/L:SfV;8^yz+nu! CQ'g@Q b[cFzFِ*P;>+E g 8ڗU!o[{>US,?f9Cَ#fێw9P5:6J%~s0J[o>.bZ鮌mXx@h;^*ՙ@]dI?<¶ 2@s 3o۵Â[o:[1 oY3o x_ TGB@yUَT81аwܧUyr r%ˑ`(oנtDp@оo,g#+:aH`۬T2@\NHX6DoI9Zp(e$ U s{rA%_~]ۍ@dx C<yU~ GOF琦=ML.O;py (/FpqlՎ01? ꋍeǿv3,3r`O wgk;L:cpWRpp_0;swkۯ~)W=$ӿ\Rx$UFGĀx|dKr@ΐYޘ[p0 36Ӷ_7,C&r`Oan0.W:rhiB_jegAd,Bmpm7TxC9mh=V}\xVws:HjHG_8ݧ7|ID Woz* ×,tӃ`8.^gS36pbg/t>ISX/{5{ ,ߚQRcP)OqM3zǟkHd pgRڽRl:c\TG<6?jlp'[\n8 8b>rx^}n fiS.[`zÎl}MsB%o Fg%^qG8ڡ n߽ItNDz>WQq`;~s? H?R.|/ƍokDClp_**@ 'Rbc5E~|M;s#: @6~p[ju~_( :3HХ3"b1'Nr=:u@ln/?ЀW;vzO`ۊJ:ׁ{xC^yWOl9_<ǜqC5"ǃr)BU1:`\0=`c˜]Q?$dٿ;R@t;M"w',dqTO؋K ejw\y鋯0&cpõ0eoOmm.Ov#P6P[GM пX@D(+4; PG)ů#\Po_<5ƽpO:?huvoj̸jfx:E؀~WU~t0-ٿb/~}y:xӅ@ɚHOxgzx; ;l|G`n S)fq2<Vfltɳ}I?\< _'>JcfhwM+&8@$~dB1M](Wn]cQ 2}+Hwj<+p e-Ċ;ٲJKB-,9 MZmƟٳpupjfz \ PQ@DBfg Pm~ā"Զ3?-۬9;]c)[\5ҁ='lѢ\/Lc0mJE TQ3:cT ŌX;ά#V=oW_+{Ԃ7% p#*&ɋ0=`G#68%b 0a TkEx0 ' j"cAo+tEyzr'7Ҽ8Q#m_ӟ&OA ߍj֋/\K.FM̏⥚ @ v:6{śC,Z`y3hLF{=rT-H׊ _}W1KgrяٳнE:;Kh~ћ?ׄ@mT0F̾@1NxԥgXDAs3;HEX h]36MU6+DB4mLj>bUVmmdn_̓&}S0LK~Y-Q4F3nw'MS?<(ΡTl%gjM!4(,Or6QHjEO;^}pjT+F^0.P@P4'>ԟr}%xpםoPjslr9ppaLN=(} (fېk9xGv`pk u7`} w QI@(@`ڡZ@a/a~ &@+EN .\鰉E8x/}ӕuu oP藫 I; 8 9Z\ E :`v 2Ï 478csF_}ӿHuxW6`gb޺ _, vFٶ ̈́kafzzp'`L" MҜD n{x߇}[p&+_~ ft.CfbQwDM`_9,KXrUHo5dǧ>DK.I#C&.Í;(powppo?Y.?(`,K,`?P?.ׅ1J/,;3~ׄ]S:rd@J*?*}#ٯ.?p܇R[)M;v"2XX _?Ļogt؂>.4#%p);顟E'~p~yG=<;9iYeu}0>]Ν/t@?`)A+HD?Ķb.3m?r?ā􇿟jM3_\E}>}3ŏM;^ ڽPm;岷agz,odߓ#Vǿpdn [h5p}i#筯^w,A?) +g #0D),l]cftT(sC!i.պ4A ('? gw@R6v/{b|'7o (* 6,4CY$gi8޺p#\lv/`&]>~=rYϗϬJ?R>} NXMpl(|;@@p|w0f;/it7M4x9j!dAw,Uc=P聒`DW8oT Tk4wx/j3,ڷ~a>ͻ,_YЀxV#hƘ;L)0m{rM"}SP_5,nHŮLNM3JC~?~@범qb'i2PE3͖"hwمj|~/95:vc^Wq]qȗ8e nr/ mlsG}G a}UOH_ 034<9}L9 `v"x0yt"mHf3=OwlUm&O"^|fx%yդ#$LWx 6dJvQh }XZo8`# ȡ?=/ 7w'ѕ?һ'\g*6 n W}:tٹ߼it /d0_WXXt˦ȯl61=kBj^>5 l\_bL۸sf&[fDLn"Oo%%~rvA^0}I?~/x+./|=; 8 w,t~ZhfHxZ4.oI-n+ҿ$8R*LEԄvb: @W5eJf;LlL3mpj`G =7e_]vVǖ_o!H"NU; hxVܿU$e,?SڌIr&?rٝu@P iA&9`6@bqS>QkqŮ;[aof >Mx3m$84;'s`39z\8x*_;,n>6jq&Vʑ*FXCQ =LZ5>"co9RJs>:@aǟ7?"{F/ xo4#{s) L୅[YiILlݏÃQ}G^cAU3^(];~J~#Jn`ÃAYj3Ŧ 5h_yUœ c듐q ev5'OVV9@mdțĿd% ,X4nk|w^Rʉ+Fx?s`JC&:o:G( _HGmȢw&r-?9_,HݔRxǩ?uN`+8ݶvBg,Lӿ=gB{ය_AKaCRH9i7W1%j){z´}~ګaÞx-@`tuex屓m{\u+j_)EoĦrU3Ec"#qqpst]%!}>@ψϡ?8}'aXtƒ9ڌ;|A|ϻ$'P^:Ym@i0蝩Gh2N`poWcP+prV瑱Mb/םZ>O~RBPNT%kOj'ۯW墱sG87TdH~eӼN/>4L?P6Ux^sD FO-}wK'?[n'Wρ.qo=,;@BO-vg̅KZ/p7MkGq~KEÃ̀?74uA$5|FPɤG@OUO@Pq4[;3mѓ?|ܷ^N2<߫nlQP~b.!O}3+1=t ? 8<8G??(G'&[Xr_ I'Z #$/q 8e #G[ksVﰰ z>.v&엖ER?4m",%GKE~цT&|Ot LD@:(@|j?x-HO?ho{߈YCvxo0o }3M ,qă0dtJ 1Eȣ4OI(-Q둟jћ >AbwGOa~G'n(@E_Jf耤UmG6E'耓:O ~Oi_[^|fq=EdzYi;N($?0?t^;WvԈQ?/D%䞬8ЉMCҗw9Aυ8S4\VIm 72&m-sSSmxqqzz/?o5mC\FOKgOlpva2FO8o[ӳ68@xQJ5BGf2yh0Q/fB7_[nq{݊.U X0>Q3Z18.q#OPcZIX끪Ѐ)%*,2Ɖ߭T2.spIx% *e?hF8J ldxh_qa9-:LppueXKsMK_x!7]WzcYlxA8D'K x}XP-78"o(Hd佦XҨv1ͲR2$$.?7%8?b;Xlj8u7Y)!w9Atc[e[\d[<- n7% ..oc]ߓ;tE<] Xy59 vK?}=>ɞxKGǗm%Oqj_T Q=]Ӂ0ji%]?÷Yd [;Ҩ9}u!98@~^z9O ^d38C'|W6)%vEEc݃ |AYn:Y´|PhGC;-~nWmN]( SyG[";n+\wYP+?dǨtyJ*D͍v"ӹF:ur.[H[SOSR-Ѐ(~auVtiQ~Sl O%8cۆ[s@FMތE lg|Sc&d 0Fغ\0= " Im\M(VƗa;9W-ex@d} A (8@[ď?GI@S fхÏ|KX;I\:%wSdp#:Wq /Qe^Uߥi:Fy'hlů5ui K.KgR~ <_CNF?_بCd @b"!)n16D8R_(Zn()kձK|5(mpA`إ߾c?H`B8m3NwD>D;5kԭɁ" ψtuA]a:tT*wWq}Fc,ԮB uW])BM`3tw:௾ԍvTsE hrIҵ;,5zf/Ӕ> F΂h/٢\9n]kN؍4];bQ/`LʦMGpS98~hJ)ϼRtb/y8FIW1n#o-ZA07|krpoQL)2+up\'d,k&i~IRt=o,)q‰语63 ߳ӪG]H81V3K@ρ3aɑI4'^rБ]]&Qq#Mԣ|< Eta>s#^c]  wp8,8W,|WD*n3ЉXmN%8u\s@5RqHFXH8qJkabЀ1 7;fYj&ߍni|4>[ؕV [YWi YlU: %HSqi֎_)9@w:p?MWӿ\9G-鼷?FU۬;f{poo#37@W{ޭ3:v-ToW~"{!o0tu@d(E>v)4pb8@ImҿRŒ NM"ύeX/ *9@,8Hr̜/Fb9 *9A5` 3iީ3{}ۢV.V ň[05;v-9ęڳmo>_OrV+rNT$|ڱ"_1R2-Be=A3|cHOy.c@k 1\K&;'Hl+-:@ tMdxq}V0uIەoWeG `Y ۝j 0Śq8.ǯ8 hipIrw@ڪ9HF9y dĹ5 :@uK Uџ5.ҿKM.M~]߇,IKŘl(ZL V 鬗trꪭh)ZCt8`a1r~hЌhEa_!C^a[{eMtX=ٸcڒqOi8{ѣR /9ԌDߨw-?FMY,ZNJ=7 `>}Do4a  wW^.a} 6?N{PB|PBOfs|c`/X;_ifpc‘ 0G>OR^̄et@'*!t+=2]D XXrI;vŧ,0+vn`%q_?$4Ԁ.QS/K!+e]5{ }ĮF\ZU⻅Htz;'H),`{el 0#m#ixS# ~aY!hZ +1دv.Q`Pŝ;jɥbr5{Xa*ԡT[T_`nva5bzg/fmp߰'⚶bVhN pnڸc8*XOaDȑC%;noB|[o3 ͶQڤríAC1Q8Kp豩*K$95`K]O@vY"kR2D$(҉'F3 i[Q 1=+_9{\"ywoSw DRH%s㾉@\fyGfapn3#/#?K2$XWYug `SП~'$8.q PQ.į06j%=bX4H'?X.N0o1:lPП%v|;^h]/#b4O~? ,p3m*M;%* 5-%’eW׌b\% 5_#:@a *$քәE/H%\h~6^韸3Y+$&:pSJУcxPw%\8 pbonRP)qcvZ^;FsCtQ џNxm֌UPmM8JDLxwn~t@c.^H|._S?겈2wyGp / (7|ohX7Бz2< (Ak%8'T dX }ջc⃟6a 8-C?Z##g.q\*,|/:OVI8oow,pɖ]Xrg;8>d,׼o3qoLrXޢ#DpەtI uSr?ixU;)w9A`M^ cTnKvvMb*ޡ12K< D[oY] o!N5IBs/kHتOf%_K5NM &2eTgGrHgQkCm_M>:sRr e_ޮ`Is?߾_D8=/g~RHUDN(` pb.cYc@ NF߷kĹgm3s3;)OL),TL_9PkuϼR2qӟda{qGHYleo#؊0zI|N>ȕjM庸zd(e:@$zbG4LȎK.U/1mS _qRTq|lN@R;ů7NӶ 3& :·/ɬ\%Űm˺L\,@? |,FN&w+#a_uB'?n&^p3A Hg>yhsVbs2/a|% E)(C#:Hyj\iփZ8WkU}%|u;qM%hwxOq4,:d\ot (uidrIta_)Яw8keeǏCF/cyuK['zt7 ]]]wNvj~"S H;܅V :'б6# Q7c/ۏ6zY V AbI,:@4@?;^HlvK@plD wԌK- Kn\0~\\F45`{oK;]  럑~l>qA5J~[nw3_iU8`-et>#o8~Cs x!U/!Y #TtvŸd)6pɖynwˤ' -;@O?4 Gu{rT; qW+Q Έ i&;;넯^WwE""l!W~YٶwP7gj؎q>DVj1qCWU{vZ;3qg{8u]bd6[ѢUJ/=<R뮚s\̩ "Mڒt]LXZv"Nr%/q_I/`'߳ܯۣ\Re W:tx)([DHk1=+r[xО}&0=;F,.m&jgR#\DbN?ӿKd ;Q*=k,:sXM&Mew3[C(l 蹁ysp\w/J 4gK0j;R󥚢uH]Xt yS*kH;@|بڝ5`DO_م`9fwXXv$HN"NbTJK,<߲C}$KpF\ 0U?h=WMךbdq@9o}ho}?X5}@; 9zGƷׯw/be|U)|)ޣZ~'f<r׭kvK}G4.Y{a߶O`${@ӿD_, N; iIb/u)μ}3W.[|{9,5rE&(7VR- 7<,#C+V1 xYA>T4`doV)e&9 0ϔZIPjd%e"m;~x Ig'ma7 @8@Æ9(-)9N3:auaqu 6o"w}/4PMzwgz/$IgfNFjaw>wi'` .LX@ }3 6)8>N:YCwI"o(y ?j%Y̓p WP:"၈{(NVRlW /lŁ}?x$cD.?8'N-܍XM!#oTlb$: Owu~3z`>ai50=kǯ p|u@D +MwWӿ;UJ:.~ϑa+])1 gR-r_"ջE _)8-G\??' ^s@?AROdxs6{Sw9AX&7<д:BE۹d}Ţ F@[B!4<8ȡ쪅sqK#sEh1"KX\N|K]yZU@v? ;yvT}#G펷O7v ~oy>z%2 0Y}  (NP/_zNdK ч'z!P@*$s#o'(0"V*wt "f lR18>mnHP?d[V8Pz LL\]Nx{ 8i/`Kg\S 9 ˁXO|w X$ MfŊ Pt68@COx.o=8qÄ|SP]c^R\o"QNpqAGRNlQWYx/ _[jT9@+_(ʧgm4A}HwD|pw͔,`3aI"1ץ<ׁ:!_,=f0 j$5.j }s@Qw@FeKn3a(o(GM`Zt!i` N_HkHtʲ)ߵŭ¡i’{C$NfPrSߗ+&pt'蟹}sm/|pXHHBJU mN%T:@܂r͝qy'Oq,N.E)Ԁ];`5<`\O*vk0)ՇHkp%i HC/+zb'KF'E7\"{!` #8bAoSԛ0ũ;~̅vKyÞߺ.sU O=>X7g(($>w)Mvp9TLyDko@$$TJ[50=k'Fj:j4ZJZ$H0Ņh]DyJ$]Lwwm Mo T;',z;`׎BX#Lӻl?ز~d=`Wz':F rC01aՋ;9& 4+@)5l# ̪韲QAIo؉鮲z;'H&iV=Փ=cd^,?ϏP޴RMKB=5O_`܃Jr+0bTT}ioaq \ae&xSƍwWݺ0oZ>_ܑ耡\RNي8z/fE+b/TP%:7rqe >T:@y#/k`OIvDž1cxgp5\~zt#"^oV$D~{e{׊O бWщ/ďej;Ӻ3ƀL5G(I}op@[/W[)iA`PR1mUJ'_eR?Y®_k'U,%<og!p܂AX|sG~g%P%}|~hX)aR83j7;?\^ޯ}?~cpw_X;5RV pٻ] dux%_L7B;z --~ox~f<[tlm41 v!3VrECfqthG^'! j|#SaOw>1X5kܠCIH6t~saYnFӭK6YLXLg޳me:|ucV~"[d9臥;$-q7nwD' Lc'6`4~L;v"\}~'-g1]יv[: Q Z1`'Gb-V.ʘgN+5IƸ$~YspRR/|N\6 #,D'aA3?h,Sq#Yz4 ?B@:Et߮O^ _COĿ*P3*bW@VʫvOӿP{w~zNmΎd @5Bla#-K'?~ ! Q꧷$~~<6p-8 ;Ok@n gt Dpd]e# ԣXH@PAy/+F*Z|x1)9@΢ -0<(/!}\3l!h3aCs7y$L%ВFhnAGoyg)&w@:5N]NxVIk6UVHTE&-56\4zwu})tNlV?'g?w|&RoAi 5pgBL,Hoŏu/ҼaYvkEQҿbR|:5x0 #V"bn͘+K蟋džU)88`EGB=ag1MR6N>W8`vnkpr=߷'uħ$9pO ߰s&{~ǁՓ׀$K(ӿ.=!^f=U1uNaQoȘE_XtHv*9 p@$g|`0g z#3S9/}K u^oYؘ7W,hF_*0I`{SyYV/}><}U? W2R(f|I7z2 =3~wi;s`80IyҟD7.?a鯑L~ǁ8|l?UX)wǟ>?臔+%4 g#mC/J逌gK8dy;iU~э3ki6Mp@=1V:2xMGB$q?xM¶y3+耸vm2kU7~4Gde}7iP^2֌A%*yKGD+wcMtrNY|9Gxbl >Id ,Lzӫ}/: y_-8=4A (Q·"ŀkZll0T?|$a`~c$F"A 4ѿ:\ }#Ka$$( d?TSVwbi0ڤHKJE]yq*V}WJOm]B14AIoD黦 amhh8n.7~vCt: T/^_ak~1WFbK}Ð._t`t?;b;khMN3G,mА=43ތ\W #9]>2;`|K򙾊!?zqBd^Іi#+K&L|黦 =я |l] ЖNY|f׿R#d`a;臿3W1Y,8O-F%EDS*8&?^ =aFeco op l(?ҟ މ^`h)!??nY@p4p90a+OzH`.-r?7/Ŋp,.fA?6WImkK'yBcs`e@?Ǚ%߉l]-wa̍;9PRU.Gy[kVJFf8/gL(-#%La7FxSV4&ZHtronwX;D|:1f~oǟ(~q ײqbx0(/S~>Пj{zE︊m{ڌ@3_۬li{[j>#QCr@8Y{lDquȐRFXW*[ ljc^P["w0?VEiwXZmW6cfK Ϝl@cz|ԛ+x)?kOrIrw㲞oGߒ*@l ,S_lA#WH^t.J>s/9 U&znSvyY$HwXBM{َ{>0Q|o k[G_8fac&uT}DeP􇿛VBp[qVk@%I1ޏ{%'#ZmFzl-h4;2q5fnh fɁ\6'ϴ7 1p@= "&%Y{Y(0R.p dn]l{=--*_8XT(9B: c?\do:l2`t؊;% IL|". zo\7J=ӋZ,$-+rD77owW#:wAc Xiܔ505kKDJLCMh2o㧜p+H!soᷳjE>ⵐ#ϼ@޳_0]4 OLD@y+%8\U*FزVft*Lwo;ދH3Zl\$j`s(<+`ka+5'wtؒ9{S**ZܔTlu%Y0F OEM[?JNێ<Vm%g HpRr˅8'%9;CG'Po’jE6=@N'p l]86ow2@7wxƈ4%\r)2Hr.Xxy+mI7Rc,-oA&7’#(`#_t/\(V[(Ouv䞴 b>cJ;wOɟ0YR#϶?V` 0  j;i!w){hF+~/fD"QoDJX?g< `{kyj`)?:sRYy/pX[EC*Б΀`TW~n!xފ︊7T(N7['yߴP\F| K~G;fN;vpS??l3w0R|5VHIҗkn TgE [;4|㳋HHr~ur@:{(sozNe.g C[t G7DwҿݎoA'rr3?4Q[U8}Ǧр墁{~s"w u$qXE@c[r?Őc]Yg/t?q}poQ 8@X)/8 N$u:yێ-OI *"Vn>߷K9,LS?{ wY4b$pi` e=BNi0F/C2K''r9 5̸^9β:4=~8LN'l ?jzNOE%t@m*`74< :rbgB =@ vUޣYm2Dc[` 60 SP}o{?_`FpO;G$sX|]YrQ3^ĝ&xBd@_&*R4Հٵ\ûY>^Я^1TXaq9f9џ@؜э58;Rc"m!*eAvw yܴem@Pr&?F ( zHœImwA"HzIG0#N(%Y/_ox w/,bQ +$UX/͔߂*; Q^`V=;3S?As]BncP 7J~:zjH:C! OqH%sNzw-&cQ =ڤFe:y$ ttOtmObǞ.ÆebP (yh*k#_7j$dpt[QJ#;ԛD_6^W,PJ$w禝LޟhtG</ĿCsVKB?  z p]7~5vs%`?/g.t$7A7>~;8#_MSNH wݵ^87AZB\2#~GCkZQɨזj L7W+થi/i`0 tk.KNW{w@Zû[JlYP†?Ơ\([7Mi07jYoףȴ+J/^CW?ڤFZ1 u]wԬwp?ѺpIџ%Ir;iz-U lQ*eflkmZPijxh+NW!,?O|u%@`Џu?˄4@ش W1-<@H8GFFZ!l wf/MP)G2t4u֛~e34":2:l4ZKz!~'oٽG%l~JgE :͍迅cQ rIfр뺢 vbA?OY]tƦ [?䀄ue7Aة~8dl}'@C,*A.R4yb 1ϺҟПmF%ȝ(*qkE%WIO!2BncP %!9&9 bP ((DJbQ (^IĖB l)R *Ev ʖ џE%(MR%-J@I jCĢP҂MR%6]1l)YbQ (MR%-CP5@٨!SVJ@YYIĆ (B?%15@!S6g,BjT+B?cP (kJOYXTZ:6IX)keM )$Fm0(k?e=bQ (t@mR\^A%(DʆE%oIĊB\rd џrebQ (W(ڤFIr%CƠPBP0DUQ(W%d@\T j !Sn,*eC86IPp *eC5)$Flj[ eejOـ1? t@mrScP (:?eǢP6j )bP (#?vMt@mrNO!P( B?e3ƠP66FMJ@٬A& bP (;?eǢP6}+@B?ekĠP?DʖE%lj~ %KH-u%cP ([3џUcQ ([U߀O1-џBŢP~Ɍ)9A%%^!SJ@ɝj/ @_b SJ@iPDJ36MUP(ƠP(J>CP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JNCP(BPB4$ BB(B($ BiH BP( BP([>$ BiH BP( BP([>$ BiH BP(JBP(@P(9 BPH BSH Ӑ( %!P( BP(y BPrB4$ B!P( %O!P(JNCP(@P($ B)$ BiH Ӑ( @P(<@P(9 BPrB( ( %!P(JN3<tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polygon-concave-expected.png0000644000175000017500000001065711653126251031660 0ustar chrysnchrysnPNG  IHDR{CZIDATxݿk]ib#E1AD a"¸YcE"]XՀTlESx6 Na&B@[,f QI+Y%Yx>e=zO2WYuT@$%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I*$*O_LV}@? H]|%`TkjO%00.YQ J(Q!*@I%/Y1? 0\їB -W/} Z͉Zj6ǯ?#,%m}A0FPe.!%y+3s~ev۩u5oA?ULN!?6 >qlybş7?w?ݓ6 +S <7CYd{b8`T^?w7P| P@.u凖xU,!6ưX/$?Ci ^r :X6>%w[joϺ7hĚ#׿vыw&s%8>Ҧ&hi_w_ϛ+N%(sXۻ ,v鯯 ͠Onr9^f_!0<]zap^֧/j=M^;/Ϻ?k_N_ʓ7^9.A5]>'mt`z׿w8zuCs1(t~~g㏵~NJLNd=S/ry;nO%OዯO@/">V`({6q:W_jo~cP@3aŠ\_zp3FBJd=H bNxdyXn4M.ǻ_ e/pr6U\{E?eƳJ+ZE_ڕ'S5yx?94п~?q -EF?oAACTt߷G#^b[w]_ypf1Xl=]ʟcakWĬiO{"ߊ(_JyK\qCЃֿ/'p܏wuZyx/al~]d};XݽCrw}φ=Б/gE,K 6AofOЍ5G`YXC[_Ŭ׎~NJPt`e:w Cvg\{(,;cm[sd)Iv+O^J0yxL)A}Ъt)|?o~p~۪< .H!AoY Q %Ѐ?-=;~1=e6K-X,ډT,r׿h@tN5[!MeeVg`0?hX.?~|@*4K寬??ah@`A,u鯯Z&J0̏ϻ| 4`}% Zy:7x_~ N-,):֟`O: w^3J K gg7X!yՕ'd1kUi7fc__E/p+~vUX7}ɧ=/xۀB2`ٍǻG7jjwQOϭ?V__ ?[sopKn<=쿲 ˪#X2ypI`5Gܮ;^9%}ׅϫO/7 Ϊ#hQ:1wk"~@ @ Ѹ~GN=3PМo30ޭ ψ @4 G8M݀udR'O֟q63PU0tnm/֟Xs-pp;^9}ϫO3]u?Uuޭj66@jt)tv}yI,l_mYG:P> oo ЀC`pWȀf@/ hϿ[_Q(ì 9 WOg0`+PY*(Ň#\,У|e&(26CO,(,`q0T2p`fЀC'`! ͬո2`0L &P+C!c@/ 00t0|TdÈ (,C2p~ =pLF؀ڿXy|k`T6't5 |?{rWo {|7?xGz}~iw`ogOn?߼cѷJ[8Zju j3<<D`C ݠkQ%Ib(? &%P% J@(`lHJE {z"<(bf%8J@[%B J@S (1@#J:w㯇A .޿X?'K BvZݸU`\\^{, ӏ%xbw @0 bJS:[n\f Jt ..[w_\~h % J^(lq4(F%ƘٹЭ= JplVW ԳX?\}V`^N@ w$û&v9Գe|>}X`'dЉ&vSmv,U~~OVWʺv& ..8*'ԫRRj#}% Wj#,#yv~J՟?V v7VQo @8 wOO~j//E 8 u0!%@`R&:/GN %eպOvԙ%~]vaJKPĀ7e6TLB}%P Kͻ_wh5g(%b`kxݯPo M Xݿ^%<E %izx ~%`z`b'LFjdQf _\P?>P&v7N 8JP I_L@Q`6M~yh~-A(J01KʗN~'[NJŻ޺ˆM&% 0Mv2Pe~5OO"]L`^2L?'K&`8dBg(}/<  @L?''L?@6ӏȀ dikoȀÙ @kdS @v5@L?d}}Lɀ韅t K~2P1O@d`Zj @ve4_tM>~C6@d`o'2P`'02詫:G"^XM@FL?C0מ즟12PZ.In$37<$@9֟q2PG85;o9R ʀ HL?'\~;`.27o9 mf6s d$N(J@Sh 2@(`J2@4* s J@(` 2@@ (2@B .ͻEzj 2pJӿ&TKXSNP9zg#0*3`i 0t@hТ0tCh0d ~$Ȁ'Бf#К3` !t ~q ؙtLC0tm$_xOs' ӏ??G2CO( LgM NIB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(Nɿ 8tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/bbox-transform-bug-expected.png0000644000175000017500000001421511676112355032272 0ustar chrysnchrysnPNG  IHDR{CTIDATxݽn$]AJlKXC I | ݍB 8)STpJςp>qəzS_q_?,od @ @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *B763@P   (M  @ T@ol(g 4xc @@8P  @@ PB@h&@p *y&PIv/W_f ? ^LJ)GhP^x' 4hxOܓVe  R`~D) Xu?qN0/SGM\F'hPx8@F%rO S{.2%ຟ%fq|]up =TZ~0Ž/?ZC Ǧ*d*`\*Y+l ~/1 \ Vhhhfnfa +hLuߌB hT>}N|Qo}oaO G 4p7\OVP=Tڿ0k`6Ok+wr%$ͷ_YkxwKm#K'/.s9pQc$.K1*K2}H?%L0Ei׸ Fu|ۿ#*_Xn:KU u9@#dC՚4OW`@cr ۏ$$(h-oi1\{\KW?vK$ cE_pwx)~8756'~Ɠ &/u7aHA~P^ޒx٧WA-KV=_f,./.+/܍)b __m53R[ eh-pK5x){@;~;VR}Crz ~ !Pcsw[o< w6ݥ߄qE^߿}we]=tNc/ yG\s8^뷀Gooji}ps{7M^+Y}&wqIڏk @3l3J ]M5| Qpq =2 IZ48nn @`sVg ]`^~Q@\%!@XwM:?C@,< npF@$ 5!@67t@PTq `I󼼺ozFfg|C*u "&E ]@p=Nu# @`@`WB?]y/ @`@ - @hh  ( ͖  B@\Q|^y/ @`L0fnvM `5 037&@@ρ8)* UڎPu3tP]y-N n6vF +  PW@ U@t8 (i׍2Z( @`@|JL xlm-@ Ek @`@0`hL 5 004[&@@ BP@ - @hh ; }f'{R4(Ih~$&/"@`(0T\6K@#?& @`40ZbKF e 0-1%@@#2j؈]   C@P&Pd!zZ(!iS@y !"P (>V%@@yP>"$@@ժ(/Gd#Z@l}@W @(  @jUP3" f`y)~dG  @ K@dmZ|P)|@,i$ݛ#cH D 6AH D 6AH]{DpTD FkA `^~O (l<\Pd|Px$.\t+(, ckW^ 5޾{hc7w>㗮g@\%pO LL2p Ib y \y# d;5zKn `Tߊ[\m*OV-LpO@<X w`-K@WK(6B~ A W u/UvvVnOS!@`SWgSg>$@`[Wޏ57@p h)on-+? bEoUK~S_0W ŖJ_6NP6#0x x@G`HW)!bI/ ޽m{!*>o&@\Qc  '[TOH|@mޔڠT6fqy1\,H]Uտ+C`KD?HP׷;F^A`'A,P"º `<@mW|VNfp8܇#6 dc37&Mߍ¾( Kտ^U{{.BBal!G'ꯗv;RY{RRq Ys5;69~o?f-); `lbWbQ5Ys$d3pCp.ҖC"PJ_*@PlZWZ+M#ꏉ %l*ŏ׏WU"/ PR5ps{/Rd. |?]/xYzW  pX,Oh _@7wF;K+RB@h&@p *B763@P   (M  @ T@ ޿li-: ('@@UP5"@@g*&c_,:[U@d@g` @} @ lyTPU/tP4Ơ#@FkaP;tPh-L v>vGn   P[@ M@t0qk@ 0? 6z .O x}>vx @ Yw雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h HP雝h:"IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/child-tests-expected.png0000644000175000017500000002202211653126251030765 0ustar chrysnchrysnPNG  IHDR{C#IDATx}l]."e>Y%% Neϖʲ^@rPKB p(P@8]8W@w-hZdJH*+| >˧0i\Z!Gevvwvwf~쳳M O% $" P"@P@BHB@(B IE@( E$! $" P"@P@BHB@(B IE@( E$! $" P"@P@BHB@(B IE@( E$! $" P"@P@BHB@(B IE@( E$! $" P"@P@BHB@(B IE@( E$! $" P"@P@BHf })gˉ?RgMA×^v?b: jų9ˉz_i1W{? c"HK"R\N\\$r~4v\E/L~~\?\-%kpp~r׌ )Wi73ܐA,b`|Y?8 u$ 1Ea{j0}46 M|+r2X |I+qs7ƃo`9A$ <0Dc s_֧; @`IUASsDDd@H Ԃ7義iuu/)PnW,;@Y}j׿7c+F}嫥_1w]J/' ??$2HxX%e7e]/d< BvyCUGdc5=@!Lji/47_IVyOGt ]__, iH V["MiwxL}|:w %02,%Pǀ@Nh<z`~#>5wn~hYF9 P0`}/dN~K,K派's_&/`5T .OǠFݭ `pmߜ ѣ_5nfOM΀Q31K#Z0}},@_rwn;y P(=I&TvW?Uӿ,6 (u-dJ/UoJBwvoRpW9Se5a~k@@OՃ?94@f ެi %Qp?-sswoZπ7@ Pm?˝SU6Ȁukhoq⻏nM~ 1ok)b_U:oRVb;X3k컏2v/=+UX~o .rŋ TJ~?W wрoE|%pa M_5_?5)m xOoi|3fHrJO,E1~Sl|{_01p2;7q_1 R$s? f0b03 -%[:ʏ3@Ȁ?Ŭ|5%;14~kj\8Ru/>yViUo :G[Oc9۷~{GGR1:tpo[j@r9?*\"\;S_iENⰣcK)j̦͇'0ӨS:ƒ u`dH4pހk~ʵ0r_RցU3N%piPiW<~~Χ_Zv(g_ ^MƭsLΪ{GkKĸ}8R l{1ʄgܸ~kN_ΙӃ^N)ӥ4c``.8N}⟿tx_ʵC]?w4zy>_hSw0K0s+mn|{FXۛ?pgk!UPf*DߑMpӭ ?K>THVjrΰMoo6*# j=_X:M,}},p~߭g^{-Tgw?֑u^#tz("@ YH,f.4͹opq[C"c>Ή_繊<$S@5pϙ[i^_~ۅl}>IZcJjx]߯'ZZp t_ixʻ}A$3^?pgSd6inȢ#N7SdW}ɀ5oH 5>7.k9?<{Rp}Uho}K\ZtnνҺ>4u r3Y+΀~6JY!GZ>55O-g45{|݀t,x/_Th4HL5/w}یT=Mb 6>ru 7o\_p{2JK\2 }C7~W x%_Fv>RGXܨ΁B58&j?+_MVp=˝.Z#a~ l߽7W+6Wŧ< D_\g L}_ĿwTxGO.gSө$_|N"__҉}R_%G ( 03@G 6Ghak1UG_NPj=9[֧nΩNwX̘ӪCp_ -9ٚ.n]-No6X@6@Sg У_LaS%OC7'0JPn`n%~鵛{GԸn"o}C_[rד,.e»`mIB=3#+9[ޱ*=Lr֕NUcO4Sbff,[ϔ/߾h'_7ˢdCo+g,@!穇ykiڷ7P릦S 0o3/{ cy 2~; <[m`dSS7mY|ɷH.gvpo[=u^|~MUm%d.>׭gxtHOd7\e_3{_07Atkk2:nϩ G^ vbyeU?%^_ObJƠv~e6 !T&x {b&<ȵ߬T3-Mc0Ș[~t& l`菎-Fx2ɬnʢ/w_J-a9A`L&}tlɭC[l? H}[*%RF;1p% P ߪԽ#Z;i@seG[jzNc-9IP/Up5ܳ1Oko\"wSgO+j^>ߐ{p0cKeo@! '׷=[|G[<1wDՀ{u={z йě}G6_7Kd(8tjC ? 2,ߍfצѱj^~7Z==_sM}כ5W%2\:/hւ۷okqxhKS'3/»_|~#\oy¯=M}m֧Χ_tVѱr_V\n>' k {bW4)љDgOϳ8pH~M-S7 E?5pݭ_=خό.h%|--|f )œ ݧk:Fgw뮇y=n Ih5 p8?Ppp(F~NͫS7 ջրD Hf}瞍]O3U6ˢpft-M sx#wʺķު?ݭ6}t-{.R;ϞǼ2TL-S TJeUH$=4\z*Z,gF;l8FU F!3P.A|DMйjFim@ɧhV*~mcoʪH>a57>%&Gݪks}?rq7MDh?pgS現ޡI}}> @dPz52/fSQ'~xm> p.֖w>App>JGXwgFCΞ?z3~@dPzU*"C3^^=[+E3KJ`.gъ>C?7;c=ˇ (#ӾN &JΖ]OEk3%,_ gO}C!~C7gj4 v9~0k.>*A}~±MLC&UNI:j>]M Z}1sz*Z5K0skm^lRnΞ?zuWEsP'{>DBOjb1ooꪏw&]QMGvbLuhF9vxY7?[?xM±M-ͤXwW>G3џ/ӏ[kO{p*lgnmN+ A!}{7C߼oЂ_DmK`Lb*5 zLld5'dk?[>u}ZCf]XۛY3pj3FӪIgrwTd*L]OEd!Q3w(om %oըxQg3)a0n0 c H|iJ8;wF''Wjt^G ,D~Odڀ$dހ~7>dXkHUaVZWb1oo.Uͤ#ʄt7O$_GMo|rWߘK'LE|J7 Νpi Aad@@gpwytHQ4jL~Fņߙd",C%+w/¦u%]d ,qFKvNNK?Η}6 +avĨ\%pv~ѻg⦅b Ȁ!Z:s+-aS=+1~>75 ؎hWnd@BNLHFC7`dQF?f lwXzP> >%̧ܟMse K_uǿɵu h?uK>H@4_!s;WR7{jq`[f?Vn5O||k@aO`wȂG~g%% ~۝ byeuW3+!p;YLFKf=u:=;S@UEҎ1b1}M5t?@ T^ȰŇǜn@PEhWd ?0ośi@.ix/WOAua5fuC@c'$ [8Y#T^࢜_xeAxg+AcGEUcPbdc%` N_[]O>B " $v\T5b_y(8bEUTVŚ=y=.OTQ2P8ɊAA}4UЃF TN$wh$ AT^; @4 UP#' :ɀsKdPzKR5 +L0|@Xi}cf 9/;j>羾(?v0b} (š T_ֹo`%2p^%g=3B,o&]C뙘qp.рWVL :f MLkt LƓ6/a (Ԁp͹ X6ۗ2 ("? pʝVLr24bkZ]eUI&'WT.'O,{Pxs f3(A|5ˀ1@4β pGJ29Rr/#_qF<Mb ! $" P"@P@BHB@(B IE@( E$! $" P"@P@BHB@(B IE@( E$! $" P"@P@BHB@(B IE@( E$! $" PPP@BHB@(BxrN5jgtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/intersection-tests-expected.png0000644000175000017500000002607711701151225032417 0ustar chrysnchrysnPNG  IHDR{C IDATxgGYҖRإJR)tk`RUcbHĘHB4`DF HH !1!D E( (USTRj B[vrsw9sΙsǙܴs̙y~={ @@'s!@`<  4 @`@Jx܆ 0 % 7Cdf, 5Ɵ|j@@KM+! ؖ?Ca!pශ|W]4eܧ?>}]ԥ! O@Έ!P>c#}߰5`&$M9(RܫJ@ƘYDQ,JBR?Iyl?hs6?wh0NJS.YM sRXyOtScZ:g39y<N4Y k'nMߛٝ쿈7?;oC`/T@*i+){3wKI y5'F~fIi$/iӼr=_yLD'-yB$׃yΦ" 4q ?o=kShN ̪,M2vobN $}ViK|I@_K=~3[6NPm-( f҃Iߎ`H^F#]XR]0mÌo Ӆio+̍C0T@ 9F ˅6o1Gg9}.st?fdH #X8jD,#Ug7V +x= 02ΡN!2hbt*>ĐW&MlPp$E Y=83_t.r 7fVyѹ3TtWzMuT܉bXe5W=]+Z7N@j8 ݮ| wUldz)sk w S/M=NIm?axZE!(!̄bl7y݆IFihƾNȌFeBgP@yf#%M7Z?0-%4d2 6DvC:gA 4MVQ/-I@TP&Z(r,ن䠰,zlQEf|+_Tu" #zp c;3C9' 3$8H&O ݁xXgGNHcE&$kUyx =ɫ Q2``"p_d%13Gf|eC?f|tBpءl&M|$gV6(ݖ+>NpH8l^LS'Iʗz'q1{ɺʬ~9^p 8<h?63Qe,˘3uI\bUWMAf5ڠ&OLx1XtJ&b,2\e= 16ȵ@/0gRT&PHpp/o*LxAqGK9,E /RcEU 9͢$JDZqZ:9jckMe(oCi_%6@mpNq2~D1drĭe *ݭ](p:$#2Q U5YF{vG۵oڇrMC{ۥ.ŗ<ؕ+I0o%qk@lQRS'^,3鎇ԯj.O}bT s=~62@T@)UM)x^$̛哾!lzd_~L)Tze.M7תWTӬ zd,,_@3ačL# AYIwV%d_d{̠^ϫ~ނZLscW_ys{j 9]?COwv";h@+hA<ӫW͇ Ձg~4{nnfI?ufD]:5C#o• d8/I% ( X7mG owe?/eP_vחE#ˏ)$_)@E-RcshҥS,.;}C|>,dN+wCpݏ:55hP-:@7f;h" C`/-W/fS3ov?Ny,f~^qvv"@<ŗ|Gb4 A69W4 pu']f4z,]KuûRzXf `O ΂ aWΡsߘ?q;.:@рb1(m -JɀJIJjgzPW|υG?|iUaI²7N`uW\|zEjmMׅƜ&4@f׽fj0vvc-?9 g!P@]H@Z'5;~L>zi3p*7eBF.{wM|'г]?fZ8>ꐕ1N@@ @m5Зf~< nzH5\,P1@U d~zc)?wz1 ȼt撯,e4`^/3HJYPYGs," t0bAYwhQbA*؃p.Zo~LN'"y[eA [ïR&^ V|{?`ZB`s'Z 9_?M^_xkmՙf=}} loI>]?3@+{̷=o ;=x滗|]}ݥN{!1>`"`JH^$LvP~๺_u>-?LTQ/v*'ULE-2ܡW뉄vp㝷|]  a&񛼀]I<@~Uxv5abv1'@;#_:6py Յ@|A@_~=+L$$$UU Xtwz> .XoD{RR#.o調m_ <ɥ=l FrWL$^Շ>G?FR&[H2ph%H+$<Bς#"ڠ[eJ /b>@+_x+^aOkfU!\ Fxao?zՁiFޯ*E*k2fzA@/y_[ko-A0j@A!C3PAޯy EG@n9WH!QD#ZOؓkD ^K+j^|SN};E}&L`vdKxUAu裻:Rm Jp\@?K@oP[(]@UV2 Z"R?ٿ*tLu~M^gSK?썳g5@4' @?TݧP}7s.߽2{_~ Ev۷mؕ"ھź.:y;8޽e??sOh?xJqm"=S^4m\ٟ]~;@m)>` :.WENڰ?y1` /R߂z3cS2}L1t@0>uZM`sAl$چjd6'pLJ&zXG  EoU2 . e*m02`o`PrF,r~!*eK7FCB>n"YM*t2A)A8GnA@-r;R C $F@Ec TJ) Sh4h@ @ZR@-hV4d% U3KU"@ !2\ @/Fd} ȃ^nZɿBv (*,ڝX"Щh|a2ʗ?mƁ PM$dzGhe3  P-W6T?S7kR P:pPɷ}nsXȌf^o,822`P@1@1~2`Ӡ 222.ȀCd%3xc;o1%ž HE@*O >, AAUh SMiP@B@BBʔȀC@LjP5<P:+N n|??d%1`~ OID@ `G B Jb8@8,`m~'B, B`0FFb}y 2CĚR?dA"׼DppM:~;ZT oX(K&`G? cFP/HP20[ xP)[@?`Ll>K_W,En ݄rRLDY !J IDATL?=k# G/Gl;&T g !2 ,C';d_&r<(ÙQ6!MFe W?0)F 2 A(L  7saQola* c5?[Rm둁m3z<ANʼcrC'n8:@E1a 0)OA9)T5MfN Ѥ%@KR"Կ vMM8x025z~'ZJh5rnd _Hs=x\O,VZe`\6 R?@> !,D#4Dh(X3"3OKokK@ p `K1%3jCefOD ^X>#4_8" `x?&`5`xroPP" @4w"&:N.$,rs2@oyb{^l[aBvnٿI`PO,YR_n&1Ra~2@ꏘ\*- .X ffdJ:>1 q] j` h#dff>@>M܄ []T`Q2@`v`B?~bܓdԟxl"&4S~w  mgR*% ~ k>w-#+ QcwYC @8 s J@JP~2@~J`?h"J;;Y4%Z &:d PPxÍiakj-b-BаQ"@bd24`  ` @:^*D@"r9 V F!D@"r9 V "$y4b76FP * V E@{8̃#@c/,|T:#> kFBE5 0q6: Ŝ DR M  !c)@%aʬ6$b !j By)&. Ak,(AM@R WC@؄;A)( P8Kt, (@H @Rtd%dR T@#=a'Z g).}CHss8lEO~v?@JMH3 Hْ@`Ns,`S@`1`1  K%zV2@  5-\ 5p   }$5CpXA h._ t͆ Ӆ.!+44:鼟]@ /~pԿ!uZ-U3|(Mt H1@ &z$U| @D@=@z*>A @   =F EH53\3F`/6#_;mzҘդSI . Yތ+R /IE03Hi@iY@{ } X44(z!#V}E@x UgqhjאXP[@=FQ%%uM`d؂f)i -vB$~7/槳_Kɞ st}2 .W@n&4C B@L:jRy_:Ada3w9KR"–dg+g" U "6nC؆{-vDeaG52%ʼtCזFE/Ϝ# 1? uK? =W$ȰO84 11V&V2>uSKR\89?υڽu@%3Q!C-z_[vٿ Ȏ[ T8P8Tn!R3"P[Z-ۙ@ߎ=#I@qFA\__} Rq  f "`r.H&nGv9R ?F[4 'DI"t͜"o;L- O P!BD` `4@z@zM~ 6'!Ԁ Qǭh,`-"Al{7O7@!pdw>C@@g< H H2>B@B@B@B@B@B@E43oZe9rM|v?l5.?';a?z3?N?/,<ϼi`4nU x; x/Kމ!h/Â5ZO? ?KN0US]Esa{f?sU#Wi xO_/04’LC5^Eva{?uuOSr _~J|ǗOw-WM` &pWOUsL? *ˑ+LJm{aq7JPYL?Rѧ_=wx_^駹Ze9rfM/Km+ he'8ןu~F V?Wn|}ޱv*QaտNsV}/_wZҲ4hw=y*d"M{; sp&-9 Vh傃w;^snr懫|57?p03Y`I j TN]#Nj`medJ%h[@Dͺv?t -L{gzĿ~j8qvq#/}OuNc+\NN ׿iC/F'\{~ .qV /=i':qvq#C|W}Wnk6o=`meV?iC/ޖ L{>G ĉm`Yn0apKYnT ܩk+3K@n]BN?tL~nӶ@m@n @( NP'nPn z @e'nݡk+[?\=}MhjYޟÂ/JsU#W?vfn fϏzFV?Q nUj*ˑ+lwϽx7~]Хk6W[J-;Aw\ VY\aO8u?/84woK oۘ,$Lŏ;t|ɏOCJ 8"ykkOCZ|` >3p4䅭?̥v">05U?k; ?:h2|8_r ?W4f3'LfϜ/8 V2@C aH/ `+g6 71@'*N`LBϦ -9k+h@:O%8 I \ Dx_+>:8WJ"O=6wn<9GH&)] T,G?~sS/C0=|#8LA?KNA,Gҩ.8'Dtj DlT#jF4 gWM?Ze9rtNUO]pgzepk (d`Qs_+ܹ4W67`w.@}p 4Gh7 Mui<+~gNw^>sgF\=l g ݃O~~W9`}Gۯ|o/04ײ0~h'Ci-9@&@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$J`?Y~ŪDtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example014-expected.png0000644000175000017500000002113511701151225030417 0ustar chrysnchrysnPNG  IHDR{C IDATxOi]"hRt!-ZYEhF QN I ZXAĝ-B.0g3 u;3ߙg{{y>H9>=s>y1!@|oW  @5: @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ Hxe @@ T@$m  \H* 6^$Il W6kI@+5@ iM @@R&@p  @ IVv_ޢOlqX$РW).3+Nfe7wQ;:,T( `K]^[k85S^O( 6˒Z$6| _;߇?^e,2v[5 s;.,S|]y?,g{ `wQ@Ϊ r,`M a2 j5qVv^/dY;n  W7@KY@Ϋ % kM@z@@V&@ H @ yu ^@ U@d H/ _ w߼u/8VΞBcR0(6r \nZݟ{~c~G@{~S#붠Fɘ꤇pXI`8a0ְؔwĽ@(F`#]{i/7ӿGJl%z$ .t`kwpg - f㤥<ݎb@w- @|9U_*٫P[!5g9DQ\*w9HG7Y|I`˪TN]?XEG@=][Fq4Ycǀ_gFdPg/ty>*GzT-w絹)<8Br6|f_ޘձLʔflg]b he>nm^ƳPVY{o0mN _\3Z[XWA \_z[1): w|PbМ2LWj 8^X=ی?Un 6{mLeY uX?U짾Scl,y=SۗWv70sC>o>'.+I0M~)\!= 50|t >q0.?(8b`_)^ v yeV(PyDG@K^۹h/׏_⡌4+)ݯ=v0^?_}tohkm 5,Vݯ|+$}ٯhw AtzL֙9)/%A1XqՃwC*tsC_ڞh?;@~|M2O@skbE/Si'?̆衕+=stC0o 7%Y7QHL}jMr1u/#@b`6]@}+¯vė?;&^@/0w'?|{_no &s?5_ajibn5V?ƺݧnLBg @AE͝~b~{!k$^+91pM%6~tCJGwwu;gџ6 BxX@S/m#8401Ϻ?na_l@!(s1 _ Wh6 (X ph 予q/̀W1$k-]]f TDZ (nC7%D[Huh%~'$:Z}=>^_˔@q8Ayh88 BP8Akc 2տM   =z0wy [V?[$p70nq覬I~/2ƮpaJ+mpt/ SU@u2`_f( M2ϒ _@NտLR   `KfGU=,7̀Pz2 |(T{8S ;I10T' J?zF!_IF rD=8ebPX" 譱XCqcۯb%XT0Ul`mх[X1iw[NN?w~XY={?=#<* gqb8^x7o[ \;?{~Gous!?%2:a$P/re$=[|pҲMυH H ] gG@8;KOƷyX&v"=؍ډ+@rful 4xCaO=u\ # q>,>:&Ю~=oow~υ<ظ# p&0d+ tCvV]^_>Pnr`Ch8[EC "XM=oQp[f~Pno{CmM_q)7-PFw r>P(6H/_ ^:e+['cm1p ˗&jx/3'ź&n*&w Xte@wC Ktp S/? kܻ-%:d8Im_ix\v']MuM.!M`]OGIu\ kLSVWAN:{*ar6FqƜw4g/,pvhpߥn'!סWA?78c;~ 4>sn~N4WNλ `c M KYP$^Kg^kڃ-xs.-o)}G^@{=7KKby/_~}I ۻ3-5yȀ? ߽Z_~%a Pn1)]@N~ uN/?y{ A=\$׳bK xU%ZZb׋Z"8ey)pHp\ǹڼ!(:N% N/V Xm@ѧ-wco}ߗAo۾h1;K0wX}JW Zpjg̋nV'>ĀSrxps8\`ߺ :'4B*CXT  *Of. ,l07CZ`I xU@W2Y ,&D2?{-0)b/ʾS\2WZvƼ:x_pӧ|% @Nzg̚@#F1kfى {D@=Tf Ylv"@@,6; @U@Y` п过* @,0N_@C @`f'/  0K@bP |Kwrg&T@,?@߁@f*S-c  H@jR 0E@L2@f*8Ow`=  е}&O`=  е}&O`= <v%t* :mi @`X*ht* :mi @`X*ht* :mi" p+0`= B@h" 0]@L7B< ExUxgnn^'!n'S2fH(6B ,D(V)Bb|J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F5h9IDAT$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P@l P# j!@@@J"@@Q2@*5F$%c P zIENDB`././@LongLink0000000000000000000000000000015300000000000011564 Lustar rootrootopenscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/triangle-with-duplicate-vertex-expected.pngopenscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/triangle-with-duplicate-vertex-expect0000644000175000017500000000504211653126251033512 0ustar chrysnchrysnPNG  IHDR{C IDATx1FQ@v)f)T8XXrږl`f|~xz ؀$D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J J@((D J(J6h(J J`y%<D J(J J@((D J(J J@((D J}/Ͽ~ӧG`?LAf WadnM!;  Cdb'0;\3p: 0oD 4Ù~1<ؕ 4w3 p'x$x>$x</i2 9L 2O#~32@ x,Yp%2@p=2L2LD@`:00zLp L`N2yL2`ZON"/Id^c& ve'ˑL?Eʀpo$2ek @0"2-_Ȑ#2 9Ad6ȓӏX% ,:04/9~=j&Wus70D ӏ&a 2EO>2p#{1<ؕ0D !_#Bf9 '3E8 ~.F8 #T3`Z ̀j>:npOO\?#%esq 3̀g"Mӏ.Ϥ0D SLL?g85e:<2` ~fkL? ~"0D zۭ 4G`V_ʀ'KHgoO' ۟_ɀI(y5=ˀ'WM @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @lM l!o tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example012-expected.png0000644000175000017500000003032711664235477030444 0ustar chrysnchrysnPNG  IHDR{C IDATx[gW]3g.BKkKn jP ILOHL|›|M&E\RHV轴t셖Ng:q笳sO{]ߞw]=ϯ md, - F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q@l@ F :! \%4x̆ p @hШ15@Q$w}p=SI@ln>_m M<Уll]C& D!3%dƻ[qCQ QR$BD|[} ō#"2utb!1R7Њ$;[ ڰEsY3͸F!cR"_VCY- 0QcWІSB|IjCG!>/Л@@ WjSQކy!6,h |B|T!wDywv7|jpw~Wo>CW! }"W~d;4$!0 630ؼH<^n~)## ^f8XH> P1b*H0 }ΡZAB[/; ;a˨3fuI̞,^! .(3Fp?Fs@N&! { ۷n( "O1Up_{Ue* 8p_+c»_U]ƅ۵v=/3x-e ¯K@~\ $!1t}b-4D6" A¤) $@$P"O @ 9II O^$$'$GN /A\I sE(_6OI 7z9Vd6P3[2%$[ZhV_0( \J0uj/ ]@Z<FIY>u=%u]@<u,G1@  "I= #0 @  I P0]@ HR  9BEEz F(at@(@(@0@aB@|I~VAy@K@N2 dXMp֨3#r@P[1 `fD@U@t+FA0@̌@J@n(@f9 TIҭ@L03" * U  fFΈ @ B  L@ .FY  Qp@-@[Z@ Qp@-@[Z@ Qp@-2k!_~RvAi!gc*??~xRAFTsƕqSAIhaUny\'Fr2@>?_syH~̏>y9 "I{67/݆L̤'"wEcmc5f ç+&lh&Ed'{ `^ew떈o#2*R"wCu-j9 PkG`Co3?kE5f2<`Xs`713 d*w f" ϏF0 Dr ۈ5CCãօTC0Lm4Z92`$[Crn sa*g_{"4(x|0iY\gc7ns85JÒ}xV.{ؚ<ګ7|NbGc_ ՞OT _ ;h{b/ ˀ M91ھs5`^0' Mw_ 2C H9?a/B/|7mS0۔"O`:eU5`nU 8U惯L%Y7 891K- X{Yy9hޯlQz Pi9L-uq_Xg~55 %x۟a_ PiLT A2kgs;Lx]*Wp__d|t; cM>ȸ?f0e @Jz?_߼9݆*ȀGUk~f_B vmP&pJځ"@! `[XekR6"܏fػvf<)&o{_x&Ml0+nzö'|G_zNC<I@pW8>FX[ vs#pژQ(O54u!K>S{A$@,{Hj@γ[1[ם646j51!00Y}L3_~٧B˪*iX-4vO$0MBr:O#{?5^=7A_~hzE*P _$, Vzpk*?ѿt#5;JRh?6v4b]oOm חaw^L9E<p5(7E< 0@v2'hgrXEmP3 )BRJ@Jڴ5In Ll ]ہ|vln pNpr V&FQ=Ur@] ߌG dj0.Db`YYק[I@dD`uGޮ3jY!0EyhBDYF Hה?Ҵ&ײ9_@ul :fQIf^}fn.FrjJ(H0 fc`$ 0 i@`OFw-W?P9Eb@b6/ԬBz2&8^d@t PmiX~k M8 5?A>MMMG~\Z{΋||RAze*З~r<ǜa G~45nI@*z|Ƶ*lҬQxЗ~Xֆb s28Ȁ %% BhQ,1N"1@N ~e`YmN* 6,VOEz~⾓߼ !^fVdY#4zfG"*hm[` *#%qh΍V\S*"1 4=@~U@cOTobNaש JJH[4v?wT}BS3 %v{T# }wo{Lp8s H4jCqi𮨦QC&J -y1 7,>4“-|:CؿgCM i<$`o67xm "m6-?AN<׬Ł^8~j˖3L]09-\w/>^S5S,k?$k"i[>ja`$pXmIJ;6n8 ALE=Cg=٣dtGD%F|q#քAOԦƀOtivmS$Ma!}෿0 ɐ$n$[^cOu@wTRW ҫ$s O%? Sdu>w6JU*$ ~=׏: 7=Ԯ[o=x0q#zޛGH粧s{2@:d[n}\ynOu>}n'+ p/M樭#5u8R/y=wSomvҝE9>\$pˎ-?ù5 sUP@@sxr\vhyo}+mFB8"WQQZKBS)2qOi@;qP]Nmbȯ4`pU .$6"6bAbB÷,Z5)Ӽ@}a7@@ѷIQWXOBҳ`RTW{-,,DŽ| \\:X ր*4bU8>>v@$ @Q2K t /+LWQ|n00r@r dm@_*k'9oC N4K{nEgXZP$KRWH9@-Q( 5Ͻ0s-%enfo`vu TXֈbzM,ӷdF~*KT)>pBu3(gǗ^3$POG}DUOYG zn`$Wa.^ dt՝e[Bү.y0PO,uRNj*8rF4:*PA_~"\T fx⊸0'ӹCD\Fb`Ó9})uYX&&ɓ  lwm7ŝG9=H~-/`J(bIDxn<K:*sA?30XClTV~J  1+]5#_N_$u})̈́+=z<מiSBhRI) { H|ߡ}943$k7~(!g*3&7̸wO*$@!2vlYq^vE\! D <6;Y fF7W){bvp[MN#c%-~ A`MT'~lk&󉜺񑛹X=Jrm$ 3@u.5$l`1:?Yu"pE|ɞթZTyHb`,C&/3ZMK@ im^XӀ{V*3:BrBf}P@tAf՝>rR+'JF ]i ݲT1d#Ol@l Ο򯊁 =vowe_Ö9ubpUz xF`K%!?<əE `n8 PM9oFjɣ*9Ǚ;U7/ڻI@W`fu:kG>v0(6H2 jBj'3 ]Cѓ90Zӆ?zro{j,=/4)mmPe~f*$x Z\]:wu i jOeBNpĆOW)P?ܮ ~,7 *^S>~ڔt5mI_*Ѭbkzk|Z^Zz 7mMV {SLS1е 80?T']_ ,ZE`,3 SCrЕf*DBrcE `VC,\2OM{Sq#X3 Xr8] 9xA1 bDuj22 3L1~eMu,sB 6hFm(JfӀ @R™}_6:/'f:eХV }o֧0jI{@'VFYf 4q1IDATS_B6?4sQ%PN{gB$zO%^!'qrFC"$aHt}zW30y8Όxyü0f&B ej3e|0mC~|c+E@pӠ{A;8auz!Ym@2ԡ *Цr?bڽ"^+n_nr(>չ_z˩zBU4"ߵfwgʏ=r"ydN: %W?/! ;N`_Mv?XT` 4 TY%^-p>&KF,ߒX<2WBğ: [@aav~lM(dNȅ QKA0D`)hsd%Rd6js )3DeU@:P] W%PQ"\ vꇈN(/#| gB䟘t+By 0A@? 'z(s#V5@$/=^1?bzjf*c ~eW`jF3w tc_{@x[C`P7W$`8q#uQuO)+Pj.#V ~ w߿f6UMja' X o HD!05џBCGi@ AYT@u_l_uT xr"pkk>n2+3j\90< EօBF8C@-q?xTW3_$tj?Cz" uQD5w϶! [l F@VS`oe2v4cT=J͕8" xFbjG}}{?_T&oNMχ?d9]"`1/z]Y_itZ [ ~:ԡȏ() - {(D!Z zv.jbJ2q}5!8}7%P ^ CwoU.\AUr`Cn@C%VInNX'Xnn7xӈ/soE~8>*+2r9s!H3L=rMJD|!pOp;@Zi9h6VM"m*_|oclЂ6vA6wZҶ853W".1/ dmk[hd v7?.X XđS'VOez)k',ѿ dn2X{ no@8/ T]͏<_DiWD֡ Ojc[N߂_eDO[d Ds$۔B Ab_ 3#B?_Ê$3.K7Ǧx_E(8!P"j[H^p=?H?]D dY# twBWCL}_ㅓ& . : vڈAI@b yG^}@YsrPOv H&O ߚg@f#6 uE{Z%0d3-*z؟z&202)'/~RnGhџw'6 d`j9WJ|_h@'T{Un@;=T|=ϻ E!<@LB@6=OuG s}A~=@χTB bhGB >>LEB/g AK^ Fg~WƂD՜II& |dOW/ `8[jV\y>9+LFKOgsW~|8 Ȁކ@oZAv<29;aC#cK %bI}A_GܟYP" Y"pQ Nڊ缬<5 ]߉>$c:@:ִHvJ k$aA5w%Kq! CХI|`*Mg'^N<<:@_g÷ YihυҌ]'k|DRDPUa XF_DnJ3+&a߇d8S+Vb ~d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+Vb d@@j,vA0@ H P+=?w&`IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/include-tests-expected.png0000644000175000017500000002717011713230315031330 0ustar chrysnchrysnPNG  IHDR{C IDATx{'Uy]`aua BF,"b1Fj`4mlm+-oQmjӦh"ٖzYn*E) ={o~gfܱ\@,GwJqbih.Oc}iNJEFWAL#~ʫ "XAL;3nw @p|/E`Ѕ.K+ѳ_iUa(@w3|wݡ`y'P LBdN8$5bT٧qNl:Ѭ4 Ƿ P^VEepQ5F=`CA]]{x~s|V{Y0BlN™DF'cD?+u@aN]K58R7, O_ Z'EN\sd Um_|򓮻aWX`\ [)AƼ/yU;!\2(8%Vxp7%6h!}TQ'f7؂`ta tB\5)|sܿ߾a5tWT[+&Sf⻞Ǜ˽yyܦf BPP!!٤{ `RTaK,ޏ]ѿO Лr%@q[Ġ}ݡ3VP}b|] vr? }X[&Ѕ6 I4@3QOo=Z@ :=WT IjL%P{W?nN N?u5[W9P⑫llg[R@RI.;y_\sam8T{Ƒ^w9@&NykԿWyH;pm#@{YQQ #{'R 3%&|O;|ߔoKlnuo\,9h 0(~3O$}yqb`|=;SqǬ.s3me W8+F*P٘y\f\hܯNy?-k6%]ϖ֫^3:4R[z|J㝻7|ƣ=}(7H8O @BtPPeL>\nYYydžo=*N>.j"G+?lv:v+?vmy NB)9pr{ KfPy?r|7sEb]Sf;sqw5qOqikVX Âɀ@Dmh?}|I$ f~ ,F#ݚEw.~>?1:_YX Jp/~o+t'W] /Zz5 I 6j*:fԖ 5.n\Go@!ʦ5z 7p+/yY+lRBկʝZc=hQ"+:_sR!(vP~WNn,̭T@vse!q( l2jVW6*}V9rg.eq9L,,\Jwxڋ&_Ru67X;~(Rw7<bR med28.ķ{o=ԋlX L)4zhwA{Y פ)!jYFyXxPpI~;;jpg  E?}en;K1,z(&Z"M1ҬM_BoYi%~?%{&[O|~9G +- nQ0䲾lPfo_k̺01J X~JGWkˆx=wb+n)}57L_ݺpj@%1W䅓 頼 !ߥ`߲ΗR~[\_1f̏}B>n[Z|mk,-B|Bw (U5k>hˢ/}ɗS^}vbq&IȎJ ʠ?1?}MC:~.3:jLQ,@{ +nW,D`ӀK~6+N}Fbf.5@VFBE= Q, `~ӉAlY^+__y/\yivMr*Kofo9ᣟAeW 㞻0vpM@R(%YIMm4yL4(AyW 7|( Tꉳw轗SE\ߧޣNvYU`H//~޸ .[/ڸoU宩@ 8%(iQ6C&|~R|寮$h 5?ɽ75av0);"7 3%(i45,]41@_q,nIRW8f1F=A \K`&BfϽ  cޟ$ۗ_}cgIO|;*~tǮigxEn Gw /^3o9@Ц7̽mv('kyƆ%iv=Z$L5gl$`U  "mRM}/R2pؼ_ONA)yfa~xz t8vG?KCoT+©V7gܵ_h)baf>--2~pcP#0lwn9C/(3i__z[;z9^Dt_zƥ7p3j:r3#هImڂFK[wѶ=CxW6)%@˳l5,\w^>$T*;I/<aqx{,\͟n?42h+#^ d~d# -8dEOθ]#?zt?;NP =o9 r,'zY2R~n ˋ1B?DD`<@KE9^5ϗàqт`[U^SpI%TUU>'Wdu@a˧q/XޏkzPͫ9<.G~0V@ꗤ-03P˶u!y?X[]ص{a]C̤/sOꯞ*#E7떀{ܵW<?)8nq?A1~yGYhΑQFd @ϝ =7_ C+ ʳsU`[):|~;kasyDaMK?}P"9BE@|`frt`MƏZ. Yp @< F? &0E ?Qq%OO;/RAɅ붼cKeOR?h= x9@qzkJ6J3ۼi/شn4fpyiՎӀZ8$@M?/,pM컲\1 L dzarP|F]) 8fm7nAVOﺮ^q~qWۊTlCoŻz-K3"J<{$@aj %^baݓwt,?bJ0p/G F=u!lB@p~oJ+>rPWvhD&XM/ݳd'}?׶j2$<7KA *AQ{#w 0ze .91x`B*>M׭~óa </Zj Sg3IDATf@ևio٫ 5ywS m`V ƛ@!lB`:(k#R`Rj%u! Z~)˳W5YjWQW߾s 6lB(7Q &p%h!7}3|w7 bP|A|p{ yz@Fte@P34CcM 2wٳ}f#xp+'({2uepdU@N)ߏZ*AN3EOΊ%yQdt M{-,%Ǿ~^ Hq@:+ZBw!e)t;J@2U.8Ǫ(&#wН!=@xuh!Љ|/;F% غh!В_0=/Tj$g)B`*!ORv q4qkղA D[K<HE34#0;FqIo6ڶFڒ8L!@&ԟ)S# H@]Jp֯$ @G.1㬿 ."]q,ТgJ @y0O)XR3'70x0`d2  ԯd#J# 0_;_xp@=B`B}3Q=l:e9C*;Z$ ymެ3R/!id7ǁ̱ h?6@!ZZdRLm-W MU+adE!ϞiCӢ7@ohձx@Co6OK c7ֹ Sj) Rännh}2>Gr? EQkEGc1ذN/zfq2 \'cg@@@A׀sA]}5A\ݨmAV$@绻2Ky` 0,Q޷ H8?FMY @I gF20TcU@Tc| @_@ʦ6kٮ&QHm2Ӫikn7|ʙ6huMWJyvk" @S4FnK@?8R`1`Xpt'Ӗq8B20bke.YxKS.2.uO]TpmHe>Ԍ+QiF?_=+߯)$Nً `n݃UHUT!F e{!0H|@zJPCԯ& A4F Н;ùEdQo3+8 Gi` f(.Y~9c ZTKdYs2+9 ^ZB6C͆>@:Aԯ$6K@`sEh0K?7PJ;"Pi0GcnO2@/_fBMG@G>!EH&;@:-dDꯢB]6@6t ̔~T!PMG@G^M@~5)d)`L T? IW=8VsR'R86nqذe>: ֤* BF52@W4+L ;N;9l&a3TVutgjoeFO`$L}_ єД@n =!D9p8EWN4wߜGH` MGj?[ynJ AHM~X}ll y" 7Z:h-@x H8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ @K$0@8AB  Lp@D; @3 --@a @@ y0,vQP IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/example009-expected.png0000644000175000017500000010345111664235475030447 0ustar chrysnchrysnPNG  IHDR{C IDATxi$u&uU]U]]'@7Fh$EQ#"E "8䬤YQ혎1YYfv~vGcw$FR"č@TguuuwUfV|/==<<ΌxieY/ܟ?w}~G{ h_{=x {=S0s?{ `j&~@N=fL 쁜z 7``9@No @@zm^֍s_01gLYS\NXOy2w^`OAgΜkR 2&LܦR n/EE~T 2h\[`fE,L9-7HTnV`11y$jF _ܗ,X^2+X:"@$nd#$-fgPL B*nC+ juJ3'2dVH- @Kި+BysVx)2PQO47o^56%)nhLq;Kb5`r`.dOOYc/_Zf0kL-|sm!Kn[^%]!*LO)^B:3MQXwm}`2000`(LA0*H@M{ܡ.'OWch0gbbB[Sj3\.,0?Ё8x1G(d7VdH 7oޔ*}N y饗K-JTB}jCrT&"$2L@H ~) $p`;物B.U⾂LM!J">EPBTbTNK@J +WHP &N2!f9= 3$5&rES&c=_'Ha~1VQ@*v'Pr$l()! U$*>@ {dŷb=q}}ah %lxJ^`,lllL++ \԰a Ŀqc=qY?*~=QM)!+@u'ܸ!H!uLXEŁbƄ,`i n6RHU/)vssG  @̫z`:,!KsY rL@A`V@fuZ@/C}16%  VFJ!LF C$l^*&4==#Bf@U"!q qNXOٛA@h.b9P¡CDS$kqO½{$kX҃"YLO_ņ)Jbyy ľ!a9N (_fr y'`=yė1,#9e%9#{OSf>ڪ髦pi5\ Y\tK`nnaoa?Ny 77n2(@TG}6"$ٱsV4CAlZ"H!C =6z@Ћ/w!꜁"ܼYI`˫!RĐԺK4}]g3Z +H:uB~X m@/=ZKJKչ{wJQWt'"%H*H piMGN~e dK `A^|E%@T=zĐmH9KQ'nxᅗ!#`ׯ5kH 0<<$J . /|W4V4QHaaaN:l}ȣ6F}w o߶1Li1%b`%@;n0_|#6,qڵ$lF8{߫?sXHsJ|4_J]⫫NӧOh; #W(:;gooЌLO?4μ!@}M/52">RU> /~a1|p\꼍 >?לSpp@nAr+_9;]Yi>b >㏛޶"|/H   l ybN8!OԺ,B0Pjc;w@oD MHfǎc2n 4ni)Yߕٯ⬯vXұ\[sڰhjb *V|EYRVYoGr$: 9Ň!O}rȆ Оn>33$ϮJhP%\#f\~p~b1 S% @J%!Yf*L/,8C@CCd+te_~<)* trKЏNB9ZaˣNBwF6BlAQ(4!= a (<+)YvrJ gJAm@1< @},߂Vbɀh)A[H-q0Du 4@!-KBUgE>O=t_Mhgjw6ۜpv񨟽j ,;7/;dY8g… B+MŹbh7p@3sE1l:z,gˣG1t ?+_hz(/k+S`=((KK΄ޕ+Blr$di @NDN\]!}JH;WO /[ԭp: =(|[xR F Z@[neս8$|L).%b4P=*< 8lU_K?P{1Tڐ$Y!<m𹹆 (<ىϴegoS7D4j(8${]mpw-p8~ܽ4qT[ = HpψMaG[iΠXWYJ*X?RGK AP8Ab́ ` VhwYAbnܸ100,Svo Q[[;QN\zw՘o;v*ӏgT(`YΈ` E{[۱cV"WuJY݂)M:NmݝA^DK "+["dRn޼%Z} Ӱ-iUݮe‚/V^nVT@P֮Q !hmMEk.QG U?uogW7SSrF-^'[UF{vQ/Wl`QA+c#b<04;55m՟X@|Iܠ<t6L@YTJUJ }] +rfݥtUm'4+iJykI @/ %`4][wrp#2cR.pG6U})D~PXL{gt2rB&w`丹ƞ0܏fkY/c?D2 W_}] ^!k%SjCeL[p CΟ?Gֲ+|0lV5MFLM?|4o jW 3A)Opj9s@_MeC+.,ե[]_6C*Һ? |P.Oj;Վ 0ёb͗ԻY[ZbLp =JY_zBx 75 5Ɉґ#G(;!d.^|d`ojIMe U^D϶Iu{ g!~^{՚hddL\|]A}_j'j=Bp?:ұ{lQѿOOުL-[[DzrcSX,1X`'ت x+ja _p (nKبUX6|aBʕ+b8|#唐"PGCCb2ҶH$2R8N˗n9% XPJV//)B,v Dy}7P}skϞq } Ԏ:CXCB4D ;_ФQT2O~>;q ~]^"E'n&G"D2ou_zX!} u+ UG*::SawhS " Asvvv~:P j 6x1"ʔWwebt$ah)/L: ɚ2A+5yEp_٩^}ށA\ d8V =DX깲veڇ2H*ॿ7m#R:Ǽ7R*:_s¹{s\H}FC~\jo6\jD$QlC8:<d=Ӄ&T &Ƚ޴!ý6M8-~==*=r5ĝB0P>7!Yhq2ni ؁{(wp93%hRZzZp œ?(Vs|YAy_ol}3HO^}˱40J} ?i>ٷ~:,9ah-cƾhqSgkoqW=LS& yuQ я>&WmaOWgG=E÷: LTp^9<ް8DmkSa`We&# v{P6S2|W}@5Hv98t]O>Öeմ/*D"?;4@OZr $v3oyDZb&@Ct/R{4HR@04=HT&!;;ե +zQ C@k_:zX`!FPv#}5 Xh8`j=s8 !iw˅K-PcXJz丳z "GZ2P^{kKpTqC?@쎋` P{{CGe! Ӫ2J"^VqroP ) 5bJN$'lWrPlk +4֜AU~#} I1e`Pzy/͕]KЯMD| C9WÁ 5`Cd_+DKn5M4 '*׾=i?@^+#$2Pr@3:$ʑ }lQ} G-&uT*X͂۾TG; gP;bTTDU9*`|K$ET(Q_$ E5,Bx0>3J-O TI4U]] *+F͸=pSeZ)Dh(KdА\8Р&Q IDAT~hà Ά1h6*j`b@c]u!CB0Ad*mCxGF U;_\^-8[qq q֌@Z p~ؿby}`^v'ky1Ũ&)" p ouY 74^dVؐdzA$i2* g R-(9Q1>jJݵ)\T@~To dJ K@$4#<&֒vz4dq=@{<1W4 GP򀀝'?~钿ID*XBJ j~(*łP,K wb$Q)UK$W^W1ۇ@2L;äbUgZQ_T*j"K^C@BiѴ2@%}b ~ }3ͮ꒪7=m1} 8ç}ߎ־} MäpmMwQXM%N< (0mB?X*kw7Kп,|<ݴATxheܟh@:lRԏPG5֌kD߷cظ}}HHi\V#,;-[т/ - z~{bb}L53@7)L!1*cz 닯 Kc:Jgi1 L/(jl) )~){cyVn! d}M$wK]R^WZ%&~}2?oC̿PJ@e) 7pI# =[`BOҢX}G,_ w#H^1n!K }X16%r G_H+%h O9/T"𠳖Zdw՗JH w«\>*ov}O&R_7o<]ꮾNW1K3>^J|d^} awG °FU K'bx&I7\:c>ҧ_bLhk;fگ;߾Q8h01gfޢ<{~}*Y}2uj,۷B~x&N^_p`B@ sRI|U-Oy򟿲smQ""C,|7IsݎN@c~yi (_3e8?:wCZ0y@pnWմ!0n_FH@mQ!kQ8nVf 5\Fm9qK?r\^ I& 4W޵+GNxhD{8&&ӼjPG `!ָR8Qi be1G3@Ó^Xx  v<7kb1TY~hEG}ygP&> Z̷.9?rTJ v/t)8AV}1 "rcIn͒ր}Ҡ@^&&xp-􏏏e@{_E5.M1m.@'xlg{ M88?KF׾r?rJ tt"A*V0Ccbk;V>THOþ_ck{w''2?|-[ippBlZ14b;&p,[<\˭˟wUxFRe <@Jhyysf}ȑqQڙ2;se4~K&W8@ԑШ$twG6(!Js7yPbNq}WVs#&6ܦ4́nG!}De2[EM Пd/ՠ_ -NtiovYA^4+v`I@V',)\wVVpIU@ ҉ I1BޣGzCIiR,ˊ{`?p&8{$.t ܚ<ԅ/[Y]* љ+=hy>1|L] @T^~$3@~-@g=thG4UnIy"HzeM}}ՉwI`K'}0 ]`nJo) a Z.>d4J?cD@4p2u4[p`cs~L~дh۠?/=1Օ  $";џ\6lxjS6ʒQ" `_`'##V#m֑H "dFIhmop6wڇucqe0 ^QZiPΎJ#nmsoca֔M-R:>uG{5lԔ099)%|嗥_jl~C#nӼ4/Ҁ+"/:8~bE__F ?$-4(8-{re#RVLP*nLJU>"v8eIiݛ +kEh}p@n^?[z)=䆭}-s19xƾ lwh{P di}# r;7_]7sx p)_%2x+ߛڄ&\qJ,i@As{bc)V$&DҽWL)O_o4i]͝}`}gP܀ﰽx!%p!6@ԕ;+k{?uV6Akej&p_[&tMXv =?+B/K!K}T^95XNP8s_K?:gs>ܬFtn9np} ;Cݰ׻B.v1uwˍo2h8eݽ]mN{lu[N^oc>b藒8ѣGwwHZ"M/l&%o2켅ܯ4C"i!`, .i:4ŒߚuvPHO%.9 y JEBh_ O: P x ?i_&*zTDZZ_jK|pmCW֫(R~1#!Ga }:{.' ؿ2> hq@jK-T87p젳KfzN`5H:?o?HHDZ~qnc2r@dGd"2 (G7 a+|9gʾ(aq}puJ,ZSׯ_?Q@!r2hVϓ83iB[>j`!-;cA;NL vB^_wOoGZlMR-ptb\,(8 Uk@Zm0uz&$6Y?^-T'M @xt2@ȀK3 S2MTFVE'b`@9GAgkZS݋ z?jqph_ݿǍ)JYkfׂWs"j"T,KoE[ {5? l 0}:J{{&PKU.KN U{sn6TUX[ 9L~aA(`,!cH!Y [U|' `Bm86+7=Y jHp@{8GN9aS׾]zʒ@B@1^+ }`@ -94})!Ѐ@ Y |]`P iX _Uz;7TYLqw n|ܮN;þM;N`vΫ/~KkrbA;mks P7_*dG~2PN̿TFjP8h9ZܗʲWy{{%Js\;ZMX):cY9WϏ'-9f0x<Ј\7=7Rf&PwvםyPOMX~i dJ ?fssʍ½{"Ohz;K0=ID0^_opUו)q_U+@Oihܯ }aʧ2ߖ>43 [S9%Sm~7 )\_LLۆ;M? _zoߩnO@\Eb4Cvoq;Ww[%wCF:@Vu(LJ^tJJmD)/+">iq,72'j K+QU嬤rG Sٲ"=͠ hrfxcb|ļ$Jw༅4,D_DLZ=K>!{޸N_z #B*@3SL2'6XbIDٞ=>]vob6ãX]H*Y;.$."7" W5I lG F30OH'mǡ0ŲW;ʢQ r=7_GRܨ.Fޠʚ^ժb"C'`ХEq=@PρFH^0QKt~Bst<@L86>!^LRHT7+ĨVTɠEqiB)G^mJNTp]wBH_w')+޶_ЗP8Ff]$٦,Rh91LE­Q2shfi<$AvS Fv F3c]M8jogUA39]14 15( Hj}&'/% Q/D ۸SӶ,ϭqWsGr+ cAnk!jF%f, 8`oۇj]`l@: ӫr=?-b[wvND%ʄbZI$藲W&|S!/ ({)[?l_T]YۇsH啄T0_@7䢮5(SԑʪM} EZpC\.0pK6 gz__*6>25l)S!xm)^3 쳟<#2Z-87nfqBp.#8{8M ;XT`Y%Z0?&8NA'`8u) qx%;lfH3zus9owJrI]+Lz8lD2${o -ooҺ Ze(ryC-Œf1]<`A|vmD(jX}Q2+2P])d]\`Ȁa|W f C k`\BQcX[}-*lRB%r>7 9@5ЯCN*'0`.UvAuԉ< Bk­/*]z-,2^ӝbA:zB?%,ԏxpZ@Ð\l) W~W˰((q%cohhYZN0t$Z@<ρi;:zQS H;ۤz'7nooJ]3(C09S@_5'֍薢9#TZp 6XȴtuiBK|L:6sZ܇PSF- X)ܓp_c Tsu}vRH^07#u?=X'贲H}JXP@B,Owk7lnzd:F1bIGYD)&@v=ٗ-:6 {nm= InN.0pH㋒_ҿ:;ejW˿P) oeBup۟dCR@"k Ҹ i(hBBO~2~ S=ӟ6k) nI8@TGLGsF2:Zez =6{ RI`M`ǝ?RaG? #'(?!(%ޞޝm`_}&D}p5 C<n ~_K3io޼$+"!O7]![LnA&tMNczh7ضc qv'j:NX st>tvJ*#uS]kkYhm] g5!f__ &aqӵLɖv 2ZŻa`x&PWC ZFoH\hIoTC,_v„0eҺuTQ)e^LR#,0qE-1As IDATr0&{DS N@q @o'軽͠rjkJa3eU]kA+_4 "@ȧ ,_,/&hĶy[woOL'#Eqn]]9X?__jxUz6cdƪSXF Yj }n`@➏CGB /®yz濘(d󁘗LLnDVM9*%/@?]p@E N~A?H4x԰xc NI)/URN7PUBkZ 8 {{Օo1 %@bMNQ]R/}5OY_:-48|$o SiA XLG:eC /|t!3%n) ;//HjԎTf c'L04`6 HC+#5gWTÒW(.-w4ʍ{܏o\B^ ffC m CC`yQj/9- |%Q7Y]+|K|`XE]Р@R?׶7Vv_AKYG@(WSZ{uby v4,!Wc2yye;֍|QZO9=3G {z{[6%t;@Q[[[ b(6!:2 諜bSG_:qz٤;T@=oian f29I`Y0CS A.mw=Fu`_lڻFj{+ #@|[sӃN@D8Silxp#p8@k>#rxho 2rCUz ELYg.|>mws)%sf`)9xc>0ɔi3!JlrVr20 el&@K(u{*w&@?6tS#`< 4`RYyqZ@-@B )} EXhz>6#g=CJe0s&qiy@[(Dۗ1@0w~$@"jowl  sb^ 1)Z2Hl&crܘ ߬@p QAR1@bgF/ʖuK*p= WduTѶ3|5HTBvwL,Z}paW@ r{faisת$g?܀ @8àr(Q.??J2 <=o:4d:.3Tk]f'$;8"RNG:qP󼩯[jX_u颴'( vU2>xmfz+|wO> $?B0*fzJt+G GVg ݆4BIqwAK ߝLk/6\J5J G76_)$D8 ob设 ^AT ʍ^?/m+% ?!к%@u Flw0K%2G)m.ӿ Hý`R*һC`A4L)YTO wv =mJ by)dL@d Z;tQBƽVyvN]H&XsYY {>dW}ҔLlHYXc$hfO[ 9J,Cl4DŽ?,JI?v$&QqTi@21c]]i]іA5Euעo@ Zthw!<xjRIш =a'`w>J]5Z˾Yg@X`F .`Pr@W"DѬ$0ۀJp&ۛg7! 4E2;:~%=0 o٫>ձteDVe(RAۀ%dҶLrt0,i;dPcRe&z{zwI ߽lȮ ^kPHU^{//kw2v&vA-AoG4SR4 udL|0Ź|x ۍ6@ ,2@Xx `08G%L~]Ƃ/Uzb`1;c_ JP_PI]~9ka,ot,5EfA$@ 22u0핖L S$b ~B—^*$|#iL%6.yАgC 1P%bqYAR2u͑םܕR~K<~l]'7'j3&%6UVXfEd=lդ#Co 14.M^rn}-SƸ dhx C:b0Qn`&4% 9 +p͍/,\,taEs^ @Ok|/Vo]`V&_ϐ/W>}z웎qlJPрPut S})`2o[oPdznxT0LB?ߊSό 6 $ MUc)~ Z2$&b͗g;ۦǸS_-0 uyQv{ # \?*܏ЇLeeXk/'_bJ`8 UИ[ ZJw~)/`{OI^xQݪ:h^rC6 ?`(-?t+;Ƅb?J嘕]`P?/OSv=H9VhiEzp`qJ!(D?Β6vO3?nLM,c}(ng7}ϴ%m dzNOAr /K3h @DV*WUϳ]?bbi~/T?&8H /[ɚִmi/Zkl9^&]#Yr'`b1=qR2=(Pn-M4 UDeE6t!͸uRT}KG}lkx0F64`g|yvY=Hei@,J ˬ (=a o_Nq@n^uR߲;##pg%7qgz8'ݕ}W? Ѐ f!I^"r#c-^|re@78&ިmw0DL٥g,GjmH64 UBe(H.xK;)Tqovv[㷄gwN,RcWJn!HBn ׫^tbkfk\@/>>b\e@{+pg!0a_)l MpÃ]]o9?6npJSǷWHP݆̮'{4 [~WX,ͼOۧlnmY;!zp?Qq s]j5EPY3*uF[@`!R.NnS 6)*gq DB_)%0%2"_w+?j+W}E_X=I(-sdI4L41Lx Зr`lWp 37EW9T i!p40bət,Rp`i67>O@|OOdiR{3p܏D{x{ ;XMZo9u ԑf.O26V$hN7R72h(tTGe*$[c@1ɵٱP=100ޣL䊰M77Y8u)iMUh S%Ǩ޶}a*fk׮ɡvבpd%@vd4ztugv>#qua=ol< iGйQqXg [%Q_ZB'Con]`m.[lꙤNŞB4{ 1$*OmgH LcnQ@q\L%:[>Yr[gɇ5lӢ(,|W-SG߃ Cݜ)zWH& V_NTmhPad#STF+}W(A<sg'j9- +jDXKDw;"̄_e 3qs$ fjSQ ,:>xooرS= Pω xJ9}8" SZ~2F0@%ˑ7˼@sqI um֭g8^֔zw31YܬߘxO LҀR͝ K&pw ^en/IT!! yp78c}-R򜬮T;*?zK-!U]`C> N||Wf4+IPed:zxWר'Ч?H*QɰLBJY΃"=h U]M dW8`{ftw9O@Я4kE.VA1s6x:E@|#(e3h9!ny-!N:< SV%[]YMB?~E,|Sw1}f`?sH, 8%|6z' ܕmPsLsH3-Ncv!$CdQ۴"O1Dzӂq!4K 4PUܦRЀ+TW K ߸4*q?p٨L%bK;wJ?SSe~!˽`q,|[/ܼI8HvڸZimjA\uYoiJuhA 37Kgfl.Lo*н .9gZkc!Tq5Ƞ![ IDAThhPpALiS-P'1ɩkw=!Wۋu9 4Ow|i9rohwFE_e(FI28=z0|@sr2}'~YW5A0( DKL zr_O{KN99n?4%>PijA\72fʰ xzA ^4({ZI: a<&MZ7Ǵ8-Ѐ FGRUܠӷ@1Ǵӏa ȨE ,@|f͟!*#ͨ{KKK ZNuƗeT%aeŨAELp@Uqa{5hl.|,07ZX=^Jx-@sWHMl'| b71 ՜~}W˼y ᖾ[$Uץ+ >ʢʙ!reB*!`2.S- Ɍ9A= w;Sys RWڕasA0gW>Xr{~QYߕU)wH SYa*Kr0A|+oJIE"0 %>X)e!Bt:kOQi@* 8a3A~irV bC/JYkT Kd5*/9hwl+/6W*Mm\ OO`{)䀗^zkZߑ}R':T9LM(47 r][8y93jitE¥@&w~ ڨiz_С]nˁDO6{X*nSTM 6\ lMX;_2ϗ&!GjkžumbDf@wE ˃*IA|@|SSIjT9g 漍ftlZ_{Xmj?11\ > f!bg@6A Hr |T9_p^m|$Klha擋*.K KIП O:s 2A 6?̡?8!{V~ogTXtwXs@Wl Mg Tw$ [ hdO㢝.HBzjwXb/' `iUuCח@WU]IcW`}}mH bHCiX^Gn5D5]L@ H54P7)zyF.YW v^滅{?aGM_L?èhSfTԁe*$PW$ !R 4s%7aШ! i\A\A`/.'ү2>lR^${BoI?B kCCc8+SOI{(.h|ߛF<RS~A -Brf+ ڃ4 @9 A!LIp{VpV'YZ,f'b/^1&u"7[Y ֦s!{tS(O2 d,@ ;A]  [ouv6j({P.;:jS?iUBv Do4I^hRp;qE_Y½EW;s£R^qGv/KYd=~hh 0'#i2GvDH<0|cFO%Ѣ?A??22Byy "W\2 @|5$Rx /`a>QgH[zo y+WޑR/62YzBSq3@7's`7/B?TN[[[ѐ"G;e(=Q:L* Ҁh,>Й3 jiΞ<!Z 'K/9hɓ눲  \Is@A䀰S_H"HIe}$wK A?T߭: A?"K%[xpqd BU,,=;g-H|`@&Ef,?T_L>P̡?9{KW Њ7󁽯<0*Y3qGU D4hvSY~ti& n999)>=qtr\ 3 0"ހXͤB"l'}˗E'a}|9-@?o~tF UBM$0@y889&se2%JetKtBxJpY9zM]^9^m&CP]PH 3 lsEJϜ%  H 4L@JVX %eg3r8@dꝛ)&6PJQDK}`eoZ@5lOdk>HX9(?Lַn=ɏj#q1A(HN{;j,H@W Rqڮ̞Ͳ~?fJ4eC*$oek@?VE+c `j$|[pD,R9'fw 4RЕ7/<*t$hCJ[OƬ Q%ҜTj!LҌRI旼pSA_Z$Yr`L#P k%*@}l&&PYiY'@8@vuw{o:WY1@? 6u%[$jC.&nvi @BHJ<8Rc pz_3d/\&J^jY`~ohK6O$8 [I/yzT=]J|W-Dp8HMB| oo 6ߴ7&C-KX[Y;@1)|`& @X7 SW@5 2[wdS,:;u10BYt˙?؎1VDU3$@8X^8@x#|B2ۓbލO֥h)볶QFb_+7ε ax 0O+`CXD~ ~ / 8.!B~ljn ! )gy!pDFi %7w}R$/w~YU;`G,Y `z#G:9@x=I:'+$;DYmi,?7}?0 i ?ʕU!UzW@轹OV|Κvil@n O^gk_s쨡o ,SB`9Du LW:?_XCHCxȇLC'4 ~ӆb}{pw ]tR)_Y?">YPE'O ?Џ/+@.\_H\p|hS8A! -UFt Y(6-P-B ɽnh @\ l`7pß_!  N6w$$0P4 L ĆT* ߙT3e,pIF%T@R\-SC1SIfM2Hvzī`Vp(KhO !1d`uS/;v8@H՟}-Ӡ  T66D)man9+pa ̰A uOawO'bT .@p:PА/:اB?*~ 4惀O1ж/KnymAp#2PHGdMث+?H=U}IH=Ah^^CWK/oϨilDѸauvvVN`wJș'@ jՖ߬EO;6?zĺ62?58d^+`7^ cƂEDįՋ!.AWf$1wk:ڞ%?xᗩo~!MP6ЯT?7 =WE<{XLBѿU8@З;B@*ȋAa#!?(L|"諱"1_{0kZL.T$(b( XK\ @JN|IUDP# =A@4@pqfyЏ6,R ?7~E.0x4>',eT4_\C׀̃D#Q->< q/=oͬHp_4`Џ6RI/ݝX/l e Ÿɿɟ=1[|$8@O׫'8T&@6͵`(Fq(<;.>@@~W "/9 3gQh !Q*LPI|\DuBjI U@WQ~𛆀! {;DNJWdT ¬ ^^$US1`J$Adx3#abբm{:&k~[j1:'&߾3s;4@u9l0R]%d ͊+vL0 h͙?nKU(zfH` b۟od]vS .9ː62b=o ٳL{]AB`9|pL|s0Dot 3 `*CA6^FJZ*+iҮCu'?U@;Bn #?==0ޫMCWKB X@-*aO*Rݾk`3<$3ۻS3βgf-48=O4Adi9 {@@$ 3K&%B:PN{k![n})qo {F s? 5 @%7םn- nH=xHPU g:M )غٴudxR(~$'IYr_rH:/}I[Wy/!Wr6y ݟ$0$e# h׉RBXhmwC?xz&P. {"/_;y`H7)mrf?d:6@&Xݫ748Ph f-T(8J]~(w&bQ+(_L4 ; by4J.LΟ 1 L6^K'|WJF4=<<SYE4a2ɑT$%#_H;{dHrvQu. ϞuGXzftHsv] ~($3}l3x)v8E&؟Zka0kL֮Y1 X; Uy4enE܇X s]Y gH]+p?T D@r C1I~( 7ߑ2f `9W)Aɪ(*p dnA¹0$p `~cFMC.ó~z,J o_`NK(a-cXD-cR{`@5) _:xpTRZR|'k|'x}} >eCTs'ONIEP@ oJCBv9~˔_d@ Ɲ<)d!)%RuaOXԝq+:TdmCɓH&a{{d_>Q1Q HC@ X nm{w߿J)zTL5@_RCZ K7BPaqD돐wvY|!#yd)B"YlgY\dA0!.|OH BQtuU:HUs=}_,`ǭ[M_7ZX-PcAvRJ 1^ 6#j -}_ 8yCbKĠhKJ}_bhkό@?X~V'P ܹz%#i2RXt<GKtžmwl ! 0&Qv?l;  L&/Pӟ>}cιO@<'R/)2gs*ӳJFJ1H5/>9z7<wU~SdchB`m LQ397|oV ђ`w3^]}`6sṡi6423pyVf d}V{u? tO// U1]]]eVܔy.ߋ| T&~dl-]L>6aYׯ_oӀU$7[Lo-r4pi[cCr˳kWL$SӦpݟ_XOG:/PizXhئKʟgI| e%tQd%!Un/x(5_T쯁a'VM>AZ9\O+@W0Lc pԈ*`O@uU3C(A^|C'x-I\_"P>诳h2c%|ѓ$XO4{ <|PxX4;8@Z{.u~?YYBoj}AO&w W_$t*DCDL5> &_@ A$Bp>P\: Ld^ #MZ.ށ` YB ܾ}ի ܹ(?x">7r/xv>k_s2;(N^[orw?Ts+[q?.엿wN+ ̯W:sps};Wo>8w2;25w)1@-G)%0g2fwnw_ (p4[?'w)z v)1`!/L )ݐw=1`hٲ|~v>JPOyg\<107G ?V8\^-dpD@ l%@FoE p`ŀAzws}I?01@82tJ@{B ;2#,%l lI Z0')ͧ&-4PQxsW`V 6sJ0j6eRchG؝ gggO@3B@wZgR}1h]h@ >@[fo^hC~K{[@Kt7+f_G.K{[g{P1<WU G~)-U\ _{\|@oo*0%c\3WJEiU;@5fLb6q't̓3lf:~`_^m#Mwk?~oKrk4i*֟\mw,A37oe~R`vgh`5yvΕxA?"&uO~{]G?ZitT]doq w x#yyoyz/A/ӿ_x9K[m2Ц=~^O'FO6>s:0Ge<s# @P d@ Zg`>}8)] @(9Նlh~qV*8OZv2m>Mv'7U?]x'.XKn^8*%Sn/a2te0: #0dFaJ`s ӡ`c30=#0dӞ uOn^`{2 w/&wNd6?'p'o_^}i6d:}z7?V8;od!pxpQf~c9N;^/7?:0;Z׀Jca h@}>Pk@%~P[  qL?X6Ѐ!51 2C:07PZ׀Jz}(0P[ \wbWo>8C5@& ,58^ @ h@;~8 ]X݀J޽9<=^}r{]vd`pcFe 4`} N2d'Kwn1}̚W 5l|uq9>y&W_}Qd~]Ձ:Ugd฻_~(tz?_рxNn~]w+a@հ3׷ }TJjk30t0hA2 tn } ~m{><02o=p vWt znӿ˻] @ m=w}Hd866CTP횁#O\P[ f>M X#~`.5ORf?Y>Дڦ r6m;n;sۍ@a`,;5c$5`uL? ee`m>PX݀FL?P X@9N@ HJB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$(<9ltEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/import_dxf-tests-expected.png0000644000175000017500000001062711776112755032077 0ustar chrysnchrysnPNG  IHDR{C^IDATx?$@NNpB/;U \8Pdtp" v IC؁aNgd#[Y;vtw^Z䞪ﻪG\t% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% P ; K<{.p=seV,4 IV}_OXK XK a 0 `|MK2DFeUcȆï p2/EK]J9qFŹ_J1[  ~o%knV|UIOZ>6 7%gW#p3 `F?<+r:'?3/]I "|e''K)|~Yk_}{C` Hпњy/?Ë~k%)gUi_xPtH4ߒ~x` .6e EߒހYifI"#[41O ʄ8䟗 ߥu A7Ҁ4gX1C(p1ZtПX9ںԳ2? 8ݒ^ݭB!sрs.Et| \iDf;M4`A8otFf${@5jJ8 L:W"F%y7j/€4LߣiԟygR{p^z}REٌCI/{7@ܸrf9`MJ$B^sޟ,%_`K$83:c? ` ij__:j'ʣ^G Ȱ3hzC}{L_C}r?㼏l" Dݹ~p7`N$<~{FWGJ!}sͷ?}<_py_;!4ˋiGpܟo?٘ C;Kߵ&c3`Ko _uWW_-oE.U[r,qgM[ߐOmAX]?E}973`2xj^4ď?߶$'ms:,cۑka79Y( q^ž4Ŕ_g-L^CVvn;'<<{}mx𹋳YcuRʨXaG `c t:R75` `{Xpz>!8ﴠ` tz_:9\~J0v} ]W(MQsך`;} Zohi [|f>~^Я>Qo~ЀRcCÔhAX1J7q/`Z )?d(QT,rF |"Oifo} 7YKiۆ?1!omK\n6Ko~'~7b6ɀE-R;%Xz5n6/~i_.n\kK‘ ONCn=p_)',AV~n;=rS oSnz41Vu^jQswޓkT,O=h$݊rU}~. @ڟ9.r-PMC1wtݿ̃^6sF_xh=\Ojhot݄~!ͷSD?2P~0KRԬ9 u My) Y 9d r!5=ceyBG}`׾6g2hUXV m]ez =)if2@2G7^gKX7fϖ @NjaR@@Wwg$MXyuwF2`30!Ug`,g`_~bVsR2@`t3e`3"X+ Ä y_K$9&z)<7e蟑 2H__5%A⬔rƛɤMc/D hsv2@]^jڌ1tqVgi&n;'@eGMqaukh90(|5qvF?^@Y!=5 &ڹ(uM0otC`(8R/tAFOgcgF?-:β￐u6P=!0tiCݟ(~:%re #_p{]>p R.ʳVYX4ʫ' @Q_CO^Y8?v?O|Oc샻޽<~kpЪUgݬT"#:,]G_AUcEUe8 ٝW+DZ$|! @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PJB @(% PM IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/render-2d-tests-expected.png0000644000175000017500000001673611676112355031510 0ustar chrysnchrysnPNG  IHDR{CIDATx;,Y3q0 D`9!!b8!/XD9%$~ #Ȇ,n` sOUU]U>^]U]Ƌ=?x3d @ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@ * Bl{ &@r'֯x7^x/@}5B ~ \C`HaaZ3iC 88TɼCS Xߝ]<:C#;/Az扷C`Hzx3:#v^z@ }M͒}JirI X__@oY pLCC2֗ٺ󙀡q0lnT a0V yӤ$6 Ao/`o5י`.?T߬ Y9n&xKA,-| #usZ EXW0Xy"vܼ_v; k\PswV}6CUM?Ll_ч +Wq,``ioՏFדH,[ɭ Jkcq>)~z5IO5+oaO`߭4ݿ?0uggO, vgsw溛 !@U8{C}GO|/{#w9;%?s^ Kj^ jZA n?)]8$.˷l߿^?Um}; M>mԧ8O 5}S*4, wo(~YC9^?_ݜgNNaл%^K ]^u)G_o=/}2Xk uoL#_,؃o} }0hAw'{,|>=:C|gzl6xXӟm/g& 4ap OA6pobs$"ItD\ߖ?tG7 _Ǻs%o}=q$ƇsnA~K=6K1**@0 ChWjo~eZD߽oO`B{Q _B6 {vi'=W9gb`R C6GqN oӡ[#ğՍinGe 4%wy0mUg>'؃eb``OێU|/]7KDw?ls&mpS >`nVu?;ݰ˟ 2Y] Пqo ~!pp!`0LC4d 3-(I{[[9+ 蚬vZhI7oc?5M+'G;9 >z=OǫMa0;Ǜݦ \E*뿅{~ɷ;]@K?7G_h7PK@1^ln/ G]ڰwn;'8?:Q8 @MoEC:1Юgg>KY';VjhTj8&@ʣ}10EvQ^7'0&}T Pijx'uhl8ۊVcBë)[l>\G@ &Vd}ms&`nѬ]o 3nέ@8a q L~x|T;* c;.2ڂ#-A7m@,n wz.`{{u1+SIu@bԮdÄ?m{Iy~ 8[F䭰hW Lޤ e@ᓀ?mw-ڧvUb#?{m m[\" B1mb`..L=>oku{|1Чr5lS7[@[}*GX3't񨣿8V5 pWF{ G 210aHdO n%V'}WIZ{rFshӾ}*Ӛ6[hkӾ20,gV,)ڊ#_+}J> ljGmb񯞾;>9Y415,_L76#1G`: e@#Qd@t\`?랓\UokωO <_.NffbVtd@cÐH0ZFumP=ƃY1Jb`啳Xptj\?W}UoJp)60 TN$'F9BF`aݱI."0QJ4G0Ub<&`OsJYcK`?nB0$3r] s:F)Fq:Y >QF(' bw/@r FuY0D X#pSI4 `.ɾМIY#$Pfџ\nsl_Y WCF̢`Q@!X@k.i5 wGl1ϬG诤`F}VFV+zYV\+b  >Z ɬ.ik kj,0knѿ2؏cŖ?_ ,o0`n"@u02˸FS,;LnѿҷK w10;%`%}&|xϥ3 3bnu+c+s#F#zU]+jȇ# `m :2y2_;37zGsr@PN/`7`7bඑ3F#yg߮<v} .Vo78V?/|˓@yO>;iQ(H,\ !/@H=1U?`' 5V9bPFN*C2^nD!'F)Tfccw8\K{ 2{Y@xUx%q\ $q1p60Oz@/Kp ʻ 1˶=3ٷmZl㾏Oˀ$l_oˡ~T. b4OgWߢJPTژK Tג2lnJUU< OaWӊ?q6{t1ڹj1b`U3W'? 7xO`! ,a}ѿ?6|b`>NFn# zP,=$ { w19iMt?ED8% bz:进ʉ (hP@ gO/ª`UnL F@ ]{0{ z{s' [zo u`;MG3C)ok9؎W9`_:12`h{*K[ŀ{x FvQGm ;yY/jwFv}?m/P} o"O+;^ TF}#@51`o<aB7X_`0oO\H@, FM U}Ā?ܱPA<ŀxsܡZPmkQ ' T@X|y,=X0F8z1X!ЃJ,>0{0G,>0)z0n>ac0P,>X|;X|ك`^>`>o}nǿ/}Q[ӿ,;xϧ7Cv20xӦwpv2𬓧wJv2]wbv2pSdȻ 1L40 ;5V2}ـM9<`sq`*L `sMndҌӿ';L4;jd Xiw`'`'M: =U ӿ[7;L42\6Fv2<Ҝ]);ӿ`ЀM PxodLcdL @鿆'p4C 0sp#26pS27e@ @Nj LiH2o~(8 ט~1w$/wp27zL}"4 d`$2ZLB2L@LD`l200`l_8 0?5x ӿ `y3֥l2.NfNa$21 of]ʀpo$2ak @0\"2%Ld@L?$$a2c@Gx @L?Q#20?5'L?-\j&8i ~L?Yd`d`2[^KL?FNaF%1GA~&ܚ ~&!C^#Bf9 wf,2`p.7ӏP΀gX X8Ѽw۟?~.᏿[Zw_qM+ˀgp ~!Mӏ-Lt Ϥ0D S&{kL?dZ;%% K8,4 2%OWe"l2oY}-, Ods=O(w\ !%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q @D P"Q%@D @%%Q $QUW!tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/polyhedron-tests-expected.png0000644000175000017500000001537111653126251032076 0ustar chrysnchrysnPNG  IHDR{CIDATxAh#Raϩ甁G4|˵6O~wzݲo= N3l_nH{{v[4tx9$m| FJͨG%$UI}>vr$pxOj$@H (DR H@P (DR H@P (DjWJKXM{TJ@) 0+ԇi@H (J("QA)@M .1?J("QA)~(q ")@P @sѿ @P =n@ J("QA)~.q8P. p@P (DM (@P HumC 5@ (PDP㶹vѿLK@JL.qh-5 sѿ4DL-qtj,5 J("U5sѿ4bR H@P (R#P(:_˜J("ymcbR H@P (jis@mR5@L @J-q۰$5!(~R !v@]FJ("QA)PKCoj!5@P @J@>vK &E&R H@P E {68@ (@P @Juvѿ4i,q"NR H@P {6>`670Pd鿛fw>} ^i3(`Ej:P[ @FJKcPj@鿛|_+2[Ot7:,i U~:9L(A/}e(QzGGq~wDaRw9/OVkc9 `mF?Q_vו nvMXqzGO{,Ƿ'̕+uS-# 7_c6Pjof[übUBA(BOL4Wg~su/_r&鿛+ﭥF+s;sw}ysEj]z+iy[Fq'[?'mv,j6VjKs0ꀉ?~SvI^*a9?r'g OVhދ_~7_dwڙ͎$Gy.X􏬷F8-#Rc|΋?MO~/9y柲#I^>m^*aQ@m`zGK^ے鿛:`TvIγӿ}柲c%L5-[%NOV"~|5,JDPr~]ș; Ws`Lv+AInO) f@sw~hSLe=O%?u_~__w^<;}uVdksH}zGj,&ɣ(/Ƿ_nJMw0H;4W}뻳a2?]Nί?y4o4w>(/[zAvLuӗ|7L?*5 niywZQLy>/XZջm#K[IןՔu:`'&"OP$ݶmɸRGj;?#;l?~4EiR#Xcn_*e^_e%$΋i,y׽/ӖX!7ߎyG ;g/g.aQiANHٹr~ɣi͝튏nG)OzG뀇7WB3S(΋g/*gk_V:AqJ/ 7: %{4ëۿQO6zFof}Bs @ 8.V;*|w~ݯ^Tr5~ܨ{3NhnrgNί l\7o /uϤEىf564p_t shJ}u@3H lttr~ɣ3N ,3:@oRd5PY?]; 3/;1]WOc8sޒ5L`)O-V;耤y__t~5^۵Y/u;5Y lV8 ڱ{i1Oί?yTHcv@O `ϊ@ cuR_bOjpѿ݉ugklA􇵵3~VƹgA~޷{i=Oί?yTބC"|UCgoW6gj W\~rܿ~ξ=ߛxZsg;G=6i_BĴUԅ~IXbgfۺ_/9g^x\Vv`ߺ͝m; L ~=GĦw(@y_ml+cp_ZG50C7퇉op͝혫ZJ*FOf|O7p3j[3گ )m7ysg tr~]KA0AS%PUwge896SU6 *n޶ <[ R#Pa-5+S7oۆ @l ePpxQn޶ aaR#aqLaCݼm)ͦjK a?31^BܼmրUJV1^ yۖ+D?`YԀ5J%-֫1^yۖAR#(3]C4ë u=O#5 7-?TJc82Jr-j@*R#I(@P @J(@P @J(@P @J(@P @J(@P @J(@P @J(P (@P @J(@P @J(@P @J(@P @J(@P @J(@P @J(@P @J(@P @J(@P @J(@P @J˗&!n0tEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/cube-tests-expected.png0000644000175000017500000000706611653126251030633 0ustar chrysnchrysnPNG  IHDR{C IDATx=n#Gbþ l0a8bg6fdb9 V!)OU}ZkPŪM?==}sHJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB @#*|__$>==}s PqO#PX$!I@ˌ z@$dEL$FۣAJ*%pŗ Frz P(==}s e]#^Jl|k߭|?WJ@Er( e??G?|Jr?~4O/_;}}Wʱ{y69G? }@k2F^C8&2P{ >pM? }`*G tŔj=vJJ>#8f }`! %eKpc>P=F(\c@we~w{ (s!J,9vS|=n}Ә~:8x S#9}G>@>04I"=7`v`m( e{p>%]z >i6)=mJvV0+w >GdƟp0?wJ3j9og&7" 3`<"MS *!G.qSJJ-}StUvn4"JA kJV-7\xk)훨}c~$_9bre0ܛv꼯 7k^Y-'v&~tG]J^E`:3R”Cʮ 3\ЗF\^CڧoN Н#@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @(@(%@%@H" I  P $PJ$JB DB @ T%PtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/throwntogethertest/ifelse-tests-expected.png0000644000175000017500000001160711653126251031160 0ustar chrysnchrysnPNG  IHDR{C2IDATxݭnYI4b㢲G2)X҂HeEK]gue^9GU̙7O:* $JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JOϿӘSg8@"ƅ+D'0G|ϙk;$s,ioݎHj9=K uKm@ҟ#F]='#soJz}\Ms2θ'0g.ٽY-ઙ}t3wރCG$ Nco$H ?>uҿtAv;tɌqDU:iLEk왻x.6Sdf9%>g>s׌#w)Է?J^/1!.ߍj7v7nă0T5𓴙*?ƍ/?wVpڎtFU}3x =+ wi[qUz0'@ikUٻ?]|V^$S@ͷew?~obQ~OlN9A?xj;C~m~ '8BȲIZl \mvmQqRO0?>|eQl|0Mm>;Ӹy~~r k(zy5 hWv߽vs;Ffu嵏?F Kp]_+GE; ^Pvq 9=psG1.gـ|.Cx}g/Srw-Y=;m &8^v@o&. BۂdFȵSmhH//JʣݩF*/CiWA.ᅨG*SӶq_&FH%P^Tb0ӿ^nt 揟v1:Z~  t9}ۧGkd_dDvW%HdO')%rڜ_@{ݿ)a}+ݿ5 @y3x 6%_IZ c?>54$͸A݌rJ>V %lvof)dwvop9 .#ɍ1{Ì:^MMr&'8KڣGH f %,\<^* dor+ݟ^ry~~R2r^;;{lD`GK0_vMJ^`/]yw' Ƽ/d̲o0GYvP /?^ϱ =݀%o>@a ?rJ`G5*e3I+.& (AyL @F@)('3n- {6'e )uw%=|]/|ӟ3j8Y(8v?; w$ݶ ۗ(YWϻ+럣Fh+So'^nd2)NӤ1Ơ}]})2O_89NLӬv Źf_o:REz.'Is_tQ?s99wzy5ţ}D&qE23\3拴hEr\{nh&XwτʀOF?zWieڔ . e=2Φ 2dg!Sv~:/?f.\sh˾RM?ooOٗ )xo}RI=&>:'wzy[;.M9\~ 8Ԛ2̀ψoȦ$gGcSr7gF3m|D2+'L/?tٛ tYQesJg:v2vMGK`ʙ~/F5*%{]Ϭ0鑁G@ݗJ%ng]Y9 \뷏;~48Au #\Z/!ZL?4Mj _qHG]t oa$uyTF~L?)K"mh?'f#3%Y.'#Z/3.i6 S:}v &_ӏd` =|]/gysO5z(~Ӭvၾҗ@L?7hyNL?1 ;hPr ºu1Yyx3aKiۅ0[Gp,2Or T@P@ǕC]?3ipz^:Jaa(üL׀v$==n? źΔa}I=u C00Q^@13.2r@T^ozgՃ00zܗGR|L?* $gaaFNК|Tg8,[touSq̔'}~qK瞊 чuI9T8$PL?ͻр P>d霿8M$ iEӄKJeA.YL x.:9/ă :{v4̊}ITo3@䮨oqIPj@nRd &(\C =L&m6@PT){ا}\9`[^z=.ntbg' .!`tbdy~~*n@ӬL?P{x:tfg!@ bʾ-I x]:f0.5SC}׀,jG𒁙` ߺt&̀fwTqB@:jGÉ0@`.5in []:gY2prL?8A׀ } Gp.; 0T!t xL?'Э#IH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JH (JHRMtEXtLodePNG20110908IENDB`openscad-2013.01+dfsg.orig/tests/regression/cgalstlsanitytest/0000755000175000017500000000000012110740367024034 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/regression/cgalstlsanitytest/normal-nan-expected.txt0000644000175000017500000000000011676153366030441 0ustar chrysnchrysnopenscad-2013.01+dfsg.orig/tests/imageutils.h0000644000175000017500000000041411653126251020407 0ustar chrysnchrysn#ifndef IMAGEUTILS_H_ #define IMAGEUTILS_H_ #include bool write_png(const char *filename, unsigned char *pixels, int width, int height); void flip_image(const unsigned char *src, unsigned char *dst, size_t pixelsize, size_t width, size_t height); #endif openscad-2013.01+dfsg.orig/tests/OffscreenContextWGL.cc0000644000175000017500000001447211701151225022235 0ustar chrysnchrysn/* Create an OpenGL context without creating an OpenGL Window. for Windows. For more info: http://www.nullterminator.net/opengl32.html by Blaine Hodge http://msdn.microsoft.com/en-us/library/ee418815(v=vs.85).aspx http://www.cprogramming.com/tutorial/wgl_wiggle_functions.html by RoD ( which includes robot.cc by Steven Billington ) http://blogs.msdn.com/b/oldnewthing/archive/2006/12/04/1205831.aspx by Tom */ #include #include #include "OffscreenContext.h" #include "printutils.h" #include "imageutils.h" #include "system-gl.h" #include "fbo.h" #include // must be included after glew.h #include #include #include using namespace std; struct OffscreenContext { HWND window; HDC dev_context; HGLRC openGLContext; int width; int height; fbo_t *fbo; }; void offscreen_context_init(OffscreenContext &ctx, int width, int height) { ctx.window = (HWND)NULL; ctx.dev_context = (HDC)NULL; ctx.openGLContext = (HGLRC)NULL; ctx.width = width; ctx.height = height; ctx.fbo = NULL; } string get_os_info() { OSVERSIONINFO osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); SYSTEM_INFO si; GetSystemInfo(&si); map archs; archs[PROCESSOR_ARCHITECTURE_AMD64] = "amd64"; archs[PROCESSOR_ARCHITECTURE_IA64] = "itanium"; archs[PROCESSOR_ARCHITECTURE_INTEL] = "x86"; archs[PROCESSOR_ARCHITECTURE_UNKNOWN] = "unknown"; stringstream out; out << "OS info: " << "Microsoft(TM) Windows(TM) " << osvi.dwMajorVersion << " " << osvi.dwMinorVersion << " " << osvi.dwBuildNumber << " " << osvi.szCSDVersion; if (archs.find(si.wProcessorArchitecture) != archs.end()) out << " " << archs[si.wProcessorArchitecture]; out << "\n"; out << "Machine: " << si.dwProcessorType; return out.str(); } string offscreen_context_getinfo(OffscreenContext *ctx) { stringstream out; out << "GL context creator: WGL\n" << "PNG generator: lodepng\n" << get_os_info(); return out.str(); } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { return DefWindowProc( hwnd, message, wparam, lparam ); } bool create_wgl_dummy_context(OffscreenContext &ctx) { // this function alters ctx->window and ctx->openGLContext // and ctx->dev_context if successfull // create window HINSTANCE inst = GetModuleHandle(0); WNDCLASS wc; ZeroMemory( &wc, sizeof( wc ) ); wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.hInstance = inst; wc.lpszClassName = (LPCWSTR)"OpenSCAD"; RegisterClass( &wc ); HWND window = CreateWindow( (LPCWSTR)"OpenSCAD", (LPCWSTR)"OpenSCAD", WS_CAPTION | WS_POPUPWINDOW, //| WS_VISIBLE, 0, 0, ctx.width, ctx.height, NULL, NULL, inst, NULL ); if ( window==NULL ) { cerr << "MS GDI - CreateWindow failed\n"; return false; } // create WGL context, make current PIXELFORMATDESCRIPTOR pixformat; int chosenformat; HDC dev_context = GetDC( window ); if ( dev_context == NULL ) { cerr << "MS GDI - GetDC failed\n"; return false; } ZeroMemory( &pixformat, sizeof( pixformat ) ); pixformat.nSize = sizeof( pixformat ); pixformat.nVersion = 1; pixformat.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pixformat.iPixelType = PFD_TYPE_RGBA; pixformat.cGreenBits = 8; pixformat.cRedBits = 8; pixformat.cBlueBits = 8; pixformat.cAlphaBits = 8; pixformat.cDepthBits = 24; pixformat.cStencilBits = 8; chosenformat = ChoosePixelFormat( dev_context, &pixformat ); if (chosenformat==0) { cerr << "MS GDI - ChoosePixelFormat failed\n"; return false; } bool spfok = SetPixelFormat( dev_context, chosenformat, &pixformat ); if (!spfok) { cerr << "MS GDI - SetPixelFormat failed\n"; return false; } HGLRC gl_render_context = wglCreateContext( dev_context ); if ( gl_render_context == NULL ) { cerr << "MS WGL - wglCreateContext failed\n"; ReleaseDC( ctx.window, ctx.dev_context ); return false; } bool mcok = wglMakeCurrent( dev_context, gl_render_context ); if (!mcok) { cerr << "MS WGL - wglMakeCurrent failed\n"; return false; } ctx.window = window; ctx.dev_context = dev_context; ctx.openGLContext = gl_render_context; return true; } OffscreenContext *create_offscreen_context(int w, int h) { OffscreenContext *ctx = new OffscreenContext; offscreen_context_init( *ctx, w, h ); // Before an FBO can be setup, a WGL context must be created. // This call alters ctx->window and ctx->openGLContext // and ctx->dev_context if successfull if (!create_wgl_dummy_context( *ctx )) { return NULL; } GLenum err = glewInit(); // must come after Context creation and before FBO calls. if (GLEW_OK != err) { cerr << "Unable to init GLEW: " << glewGetErrorString(err) << "\n"; return NULL; } //cerr << glew_dump(0); ctx->fbo = fbo_new(); if (!fbo_init(ctx->fbo, w, h)) { return NULL; } return ctx; } bool teardown_offscreen_context(OffscreenContext *ctx) { if (ctx) { fbo_unbind(ctx->fbo); fbo_delete(ctx->fbo); wglMakeCurrent( NULL, NULL ); wglDeleteContext( ctx->openGLContext ); ReleaseDC( ctx->window, ctx->dev_context ); return true; } return false; } /*! Capture framebuffer from OpenGL and write it to the given filename as PNG. */ bool save_framebuffer(OffscreenContext *ctx, const char *filename) { wglSwapLayerBuffers( ctx->dev_context, WGL_SWAP_MAIN_PLANE ); if (!ctx || !filename) return false; int samplesPerPixel = 4; // R, G, B and A vector pixels(ctx->width * ctx->height * samplesPerPixel); glReadPixels(0, 0, ctx->width, ctx->height, GL_RGBA, GL_UNSIGNED_BYTE, &pixels[0]); // Flip it vertically - images read from OpenGL buffers are upside-down int rowBytes = samplesPerPixel * ctx->width; unsigned char *flippedBuffer = (unsigned char *)malloc(rowBytes * ctx->height); if (!flippedBuffer) { std::cerr << "Unable to allocate flipped buffer for corrected image."; return 1; } flip_image(&pixels[0], flippedBuffer, samplesPerPixel, ctx->width, ctx->height); bool writeok = write_png(filename, flippedBuffer, ctx->width, ctx->height); free(flippedBuffer); return writeok; } void bind_offscreen_context(OffscreenContext *ctx) { if (ctx) fbo_bind(ctx->fbo); } openscad-2013.01+dfsg.orig/tests/OffscreenContext.h0000644000175000017500000000066311667754403021544 0ustar chrysnchrysn#ifndef OFFSCREENCONTEXT_H_ #define OFFSCREENCONTEXT_H_ #include // for error output #include struct OffscreenContext *create_offscreen_context(int w, int h); void bind_offscreen_context(OffscreenContext *ctx); bool teardown_offscreen_context(OffscreenContext *ctx); bool save_framebuffer(OffscreenContext *ctx, const char *filename); std::string offscreen_context_getinfo(OffscreenContext *ctx); #endif openscad-2013.01+dfsg.orig/tests/fbo.h0000644000175000017500000000070711656125275017027 0ustar chrysnchrysn#ifndef FBO_H_ #define FBO_H_ #include "system-gl.h" #include // size_t struct fbo_t { GLuint fbo_id; GLuint old_fbo_id; GLuint renderbuf_id; GLuint depthbuf_id; }; fbo_t *fbo_new(); bool fbo_init(fbo_t *fbo, size_t width, size_t height); bool fbo_resize(fbo_t *fbo, size_t width, size_t height); void fbo_delete(fbo_t *fbo); GLuint fbo_bind(fbo_t *fbo); void fbo_unbind(fbo_t *fbo); bool REPORTGLERROR(const char * task); #endif openscad-2013.01+dfsg.orig/tests/CSGTextRenderer.h0000644000175000017500000000216111640436733021222 0ustar chrysnchrysn#ifndef CSGTEXTRENDERER_H_ #define CSGTEXTRENDERER_H_ #include "visitor.h" #include "CSGTextCache.h" #include #include using std::string; using std::map; using std::list; class CSGTextRenderer : public Visitor { public: CSGTextRenderer(CSGTextCache &cache) : cache(cache) {} virtual ~CSGTextRenderer() {} virtual Response visit(State &state, const AbstractNode &node); virtual Response visit(State &state, const AbstractIntersectionNode &node); virtual Response visit(State &state, const CsgNode &node); virtual Response visit(State &state, const TransformNode &node); virtual Response visit(State &state, const AbstractPolyNode &node); private: enum CsgOp {UNION, INTERSECTION, DIFFERENCE, MINKOWSKI}; void addToParent(const State &state, const AbstractNode &node); bool isCached(const AbstractNode &node); void process(string &target, const string &src, CSGTextRenderer::CsgOp op); void applyToChildren(const AbstractNode &node, CSGTextRenderer::CsgOp op); string currindent; typedef list ChildList; map visitedchildren; CSGTextCache &cache; }; #endif openscad-2013.01+dfsg.orig/tests/imageutils-lodepng.cc0000644000175000017500000000123011653126251022170 0ustar chrysnchrysn#include "lodepng.h" #include bool write_png(const char *filename, unsigned char *pixels, int width, int height) { //encoder.settings.zlibsettings.windowSize = 2048; //LodePNG_Text_add(&encoder.infoPng.text, "Comment", "Created with LodePNG"); size_t dataout_size = -1; unsigned char *dataout = (unsigned char *)malloc(width*height*4); LodePNG_encode(&dataout, &dataout_size, pixels, width, height, LCT_RGBA, 8); //LodePNG_saveFile(dataout, dataout_size, "blah2.png"); FILE *f = fopen(filename, "wb"); if (!f) { free(dataout); return false; } fwrite(dataout, 1, dataout_size, f); fclose(f); free(dataout); return true; } openscad-2013.01+dfsg.orig/tests/throwntogethertest.cc0000644000175000017500000000016511655360470022375 0ustar chrysnchrysn#include "csgtestcore.h" int main(int argc, char* argv[]) { return csgtestcore(argc, argv, TEST_THROWNTOGETHER); } openscad-2013.01+dfsg.orig/tests/tests-common.cc0000644000175000017500000000133412020712021021015 0ustar chrysnchrysn#include "tests-common.h" #include "openscad.h" #include "module.h" #include "handle_dep.h" #include "boosty.h" #include #include Module *parsefile(const char *filename) { Module *root_module = NULL; handle_dep(filename); std::ifstream ifs(filename); if (!ifs.is_open()) { fprintf(stderr, "Can't open input file `%s'!\n", filename); } else { std::string text((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); text += "\n" + commandline_commands; std::string pathname = boosty::stringy(fs::path(filename).parent_path()); root_module = parse(text.c_str(), pathname.c_str(), false); if (root_module) { root_module->handleDependencies(); } } return root_module; } openscad-2013.01+dfsg.orig/tests/OffscreenView.cc0000644000175000017500000001017112004276777021162 0ustar chrysnchrysn#include #include "OffscreenView.h" #include "system-gl.h" #include "renderer.h" #include #include #include #include #include #define FAR_FAR_AWAY 100000.0 OffscreenView::OffscreenView(size_t width, size_t height) : orthomode(false), showaxes(false), showfaces(true), showedges(false), object_rot(35, 0, 25), camera_eye(0, 0, 0), camera_center(0, 0, 0) { for (int i = 0; i < 10; i++) this->shaderinfo[i] = 0; this->ctx = create_offscreen_context(width, height); if ( this->ctx == NULL ) throw -1; initializeGL(); resizeGL(width, height); } OffscreenView::~OffscreenView() { teardown_offscreen_context(this->ctx); } void OffscreenView::setRenderer(Renderer* r) { this->renderer = r; } void OffscreenView::initializeGL() { glEnable(GL_DEPTH_TEST); glDepthRange(-FAR_FAR_AWAY, +FAR_FAR_AWAY); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_position0[] = {-1.0, -1.0, +1.0, 0.0}; GLfloat light_position1[] = {+1.0, +1.0, -1.0, 0.0}; glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position0); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT1, GL_POSITION, light_position1); glEnable(GL_LIGHT1); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } void OffscreenView::resizeGL(int w, int h) { this->width = w; this->height = h; glViewport(0, 0, w, h); w_h_ratio = sqrt((double)w / (double)h); } void OffscreenView::setupPerspective() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); double dist = (this->camera_center - this->camera_eye).norm(); gluPerspective(45, w_h_ratio, 0.1*dist, 100*dist); } void OffscreenView::setupOrtho(bool offset) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (offset) glTranslated(-0.8, -0.8, 0); double l = (this->camera_center - this->camera_eye).norm() / 10; glOrtho(-w_h_ratio*l, +w_h_ratio*l, -(1/w_h_ratio)*l, +(1/w_h_ratio)*l, -FAR_FAR_AWAY, +FAR_FAR_AWAY); } void OffscreenView::paintGL() { glEnable(GL_LIGHTING); if (orthomode) setupOrtho(); else setupPerspective(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClearColor(1.0f, 1.0f, 0.92f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); gluLookAt(this->camera_eye[0], this->camera_eye[1], this->camera_eye[2], this->camera_center[0], this->camera_center[1], this->camera_center[2], 0.0, 0.0, 1.0); // glRotated(object_rot[0], 1.0, 0.0, 0.0); // glRotated(object_rot[1], 0.0, 1.0, 0.0); // glRotated(object_rot[2], 0.0, 0.0, 1.0); // Large gray axis cross inline with the model // FIXME: This is always gray - adjust color to keep contrast with background if (showaxes) { glLineWidth(1); glColor3d(0.5, 0.5, 0.5); glBegin(GL_LINES); double l = 3*(this->camera_center - this->camera_eye).norm(); glVertex3d(-l, 0, 0); glVertex3d(+l, 0, 0); glVertex3d(0, -l, 0); glVertex3d(0, +l, 0); glVertex3d(0, 0, -l); glVertex3d(0, 0, +l); glEnd(); } glDepthFunc(GL_LESS); glCullFace(GL_BACK); glDisable(GL_CULL_FACE); glLineWidth(2); glColor3d(1.0, 0.0, 0.0); if (this->renderer) { this->renderer->draw(showfaces, showedges); } } bool OffscreenView::save(const char *filename) { return save_framebuffer(this->ctx, filename); } std::string OffscreenView::getInfo() { std::stringstream out; GLint rbits, gbits, bbits, abits, dbits, sbits; glGetIntegerv(GL_RED_BITS, &rbits); glGetIntegerv(GL_GREEN_BITS, &gbits); glGetIntegerv(GL_BLUE_BITS, &bbits); glGetIntegerv(GL_ALPHA_BITS, &abits); glGetIntegerv(GL_DEPTH_BITS, &dbits); glGetIntegerv(GL_STENCIL_BITS, &sbits); out << glew_dump(false) << "FBO: RGBA(" << rbits << gbits << bbits << abits << "), depth(" << dbits << "), stencil(" << sbits << ")\n" << offscreen_context_getinfo(this->ctx); return out.str(); } void OffscreenView::setCamera(const Eigen::Vector3d &pos, const Eigen::Vector3d ¢er) { this->camera_eye = pos; this->camera_center = center; } openscad-2013.01+dfsg.orig/tests/echotest.cc0000644000175000017500000000616411777162366020246 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "builtin.h" #include "printutils.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; static void outfile_handler(const std::string &msg, void *userdata) { std::ostream *str = static_cast(userdata); *str << msg << std::endl; } int main(int argc, char **argv) { #ifdef _MSC_VER _set_output_format(_TWO_DIGIT_EXPONENT); #endif if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfile = argv[2]; int rc = 0; std::ofstream ofile(outfile); if (!ofile.good()) { std::cerr << "Unable to open output file\n"; return 0; } set_output_handler(&outfile_handler, &ofile); Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; AbstractNode *root_node; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); delete root_node; delete root_module; Builtins::instance(true); ofile.close(); return rc; } openscad-2013.01+dfsg.orig/tests/imageutils-macosx.cc0000644000175000017500000000507011653126251022040 0ustar chrysnchrysn#include #include bool write_png(const char *filename, unsigned char *pixels, int width, int height) { size_t rowBytes = width * 4; // CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big; // BGRA int bitsPerComponent = 8; CGContextRef contextRef = CGBitmapContextCreate(pixels, width, height, bitsPerComponent, rowBytes, colorSpace, bitmapInfo); if (!contextRef) { std::cerr << "Unable to create CGContextRef."; return false; } CGImageRef imageRef = CGBitmapContextCreateImage(contextRef); if (!imageRef) { std::cerr << "Unable to create CGImageRef."; return false; } CFStringRef fname = CFStringCreateWithCString(kCFAllocatorDefault, filename, kCFStringEncodingUTF8); CFURLRef fileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, fname, kCFURLPOSIXPathStyle, false); if (!fileURL) { std::cerr << "Unable to create file URL ref."; return false; } CGDataConsumerRef dataconsumer = CGDataConsumerCreateWithURL(fileURL); CFIndex fileImageIndex = 1; CFMutableDictionaryRef fileDict = NULL; CFStringRef fileUTType = kUTTypePNG; // Create an image destination opaque reference for authoring an image file CGImageDestinationRef imageDest = CGImageDestinationCreateWithDataConsumer(dataconsumer, fileUTType, fileImageIndex, fileDict); if (!imageDest) { std::cerr << "Unable to create CGImageDestinationRef."; return false; } CFIndex capacity = 1; CFMutableDictionaryRef imageProps = CFDictionaryCreateMutable(kCFAllocatorDefault, capacity, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CGImageDestinationAddImage(imageDest, imageRef, imageProps); CGImageDestinationFinalize(imageDest); CFRelease(imageDest); CFRelease(dataconsumer); CFRelease(fileURL); CFRelease(fname); CFRelease(imageProps); CGColorSpaceRelease(colorSpace); CGImageRelease(imageRef); return true; } openscad-2013.01+dfsg.orig/tests/modulecachetest.cc0000644000175000017500000000630111777162366021572 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; int main(int argc, char **argv) { #ifdef _MSC_VER _set_output_format(_TWO_DIGIT_EXPONENT); #endif if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfilename = argv[2]; int rc = 0; Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; AbstractNode *root_node; root_module = parsefile(filename); if (!root_module) { fprintf(stderr, "Error: Unable to parse input file\n"); exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); delete root_node; delete root_module; fs::current_path(original_path); fprintf(stderr, "Second parse\n"); root_module = parsefile(filename); if (!root_module) { fprintf(stderr, "Error: Unable to parse second time\n"); exit(1); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); delete root_node; delete root_module; Builtins::instance(true); return rc; } openscad-2013.01+dfsg.orig/tests/csgtestcore.h0000644000175000017500000000026311653126251020573 0ustar chrysnchrysn#ifndef CSGTESTCORE_H_ #define CSGTESTCORE_H_ enum test_type_e { TEST_THROWNTOGETHER, TEST_OPENCSG }; int csgtestcore(int argc, char *argv[], test_type_e test_type); #endif openscad-2013.01+dfsg.orig/tests/fbo.cc0000644000175000017500000001764311667754403017177 0ustar chrysnchrysn#include "fbo.h" #include "system-gl.h" #include #include using namespace std; fbo_t *fbo_new() { fbo_t *fbo = new fbo_t; fbo->fbo_id = 0; fbo->old_fbo_id = 0; fbo->renderbuf_id = 0; fbo->depthbuf_id = 0; return fbo; } bool use_ext() { // do we need to use the EXT or ARB version? if (!glewIsSupported("GL_ARB_framebuffer_object") && glewIsSupported("GL_EXT_framebuffer_object")) { return true; } else { return false; } } bool check_fbo_status() { /* This code is based on user V-man code from http://www.opengl.org/wiki/GL_EXT_framebuffer_multisample See also: http://www.songho.ca/opengl/gl_fbo.html */ GLenum status; bool result = false; if (use_ext()) status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); else status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (report_glerror("checking framebuffer status")) return false; if (status == GL_FRAMEBUFFER_COMPLETE) result = true; else if (status == GL_FRAMEBUFFER_UNSUPPORTED) cerr << "GL_FRAMEBUFFER_UNSUPPORTED\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT\n"; else if (status == GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT) cerr << "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT\n"; else cerr << "Unknown Code: glCheckFramebufferStatusEXT returned %i\n",status; return result; } bool fbo_ext_init(fbo_t *fbo, size_t width, size_t height) { // Generate and bind FBO glGenFramebuffersEXT(1, &fbo->fbo_id); if (report_glerror("glGenFramebuffersEXT")) return false; glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo->fbo_id); if (report_glerror("glBindFramebufferEXT")) return false; // Generate depth and render buffers glGenRenderbuffersEXT(1, &fbo->depthbuf_id); glGenRenderbuffersEXT(1, &fbo->renderbuf_id); // Create buffers with correct size if (!fbo_resize(fbo, width, height)) return false; // Attach render and depth buffers glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, fbo->renderbuf_id); if (report_glerror("specifying color render buffer EXT")) return false; if (!check_fbo_status()) { cerr << "Problem with OpenGL EXT framebuffer after specifying color render buffer.\n"; return false; } if (glewIsSupported("GL_EXT_packed_depth_stencil")) { glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fbo->depthbuf_id); if (report_glerror("specifying depth render buffer EXT")) return false; glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fbo->depthbuf_id); if (report_glerror("specifying stencil render buffer EXT")) return false; if (!check_fbo_status()) { cerr << "Problem with OpenGL EXT framebuffer after specifying depth render buffer.\n"; return false; } } else { cerr << "Warning: Cannot create stencil buffer (GL_EXT_packed_depth_stencil not supported)\n"; glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fbo->depthbuf_id); if (report_glerror("specifying depth render buffer EXT")) return false; if (!check_fbo_status()) { cerr << "Problem with OpenGL EXT framebuffer after specifying depth stencil render buffer.\n"; return false; } } return true; } bool fbo_arb_init(fbo_t *fbo, size_t width, size_t height) { // Generate and bind FBO glGenFramebuffers(1, &fbo->fbo_id); if (report_glerror("glGenFramebuffers")) return false; glBindFramebuffer(GL_FRAMEBUFFER, fbo->fbo_id); if (report_glerror("glBindFramebuffer")) return false; // Generate depth and render buffers glGenRenderbuffers(1, &fbo->depthbuf_id); glGenRenderbuffers(1, &fbo->renderbuf_id); // Create buffers with correct size if (!fbo_resize(fbo, width, height)) return false; // Attach render and depth buffers glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, fbo->renderbuf_id); if (report_glerror("specifying color render buffer")) return false; if (!check_fbo_status()) { cerr << "Problem with OpenGL framebuffer after specifying color render buffer.\n"; return false; } //glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, // to prevent Mesa's software renderer from crashing, do this in two stages. // ie. instead of using GL_DEPTH_STENCIL_ATTACHMENT, do DEPTH then STENCIL. glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, fbo->depthbuf_id); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fbo->depthbuf_id); if (report_glerror("specifying depth stencil render buffer")) return false; if (!check_fbo_status()) { cerr << "Problem with OpenGL framebuffer after specifying depth render buffer.\n"; return false; } return true; } bool fbo_init(fbo_t *fbo, size_t width, size_t height) { /* Some OpenGL drivers include the framebuffer functions but not with core or ARB names, only with the EXT name. This has been worked-around by deciding at runtime, using GLEW, which version needs to be used. See also: http://www.opengl.org/wiki/Framebuffer_Object http://stackoverflow.com/questions/6912988/glgenframebuffers-or-glgenframebuffersex http://www.devmaster.net/forums/showthread.php?t=10967 */ bool result = false; if (glewIsSupported("GL_ARB_framebuffer_object")) result = fbo_arb_init(fbo, width, height); else if (use_ext()) result = fbo_ext_init(fbo, width, height); else cerr << "Framebuffer Object extension not found by GLEW\n"; return result; } bool fbo_resize(fbo_t *fbo, size_t width, size_t height) { if (use_ext()) { glBindRenderbufferEXT(GL_RENDERBUFFER, fbo->depthbuf_id); if (glewIsSupported("GL_EXT_packed_depth_stencil")) { glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); if (report_glerror("creating EXT depth stencil render buffer")) return false; } else { glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); if (report_glerror("creating EXT depth render buffer")) return false; } glBindRenderbufferEXT(GL_RENDERBUFFER, fbo->renderbuf_id); glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_RGBA8, width, height); if (report_glerror("creating EXT color render buffer")) return false; } else { glBindRenderbuffer(GL_RENDERBUFFER, fbo->renderbuf_id); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, width, height); if (report_glerror("creating color render buffer")) return false; glBindRenderbuffer(GL_RENDERBUFFER, fbo->depthbuf_id); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); if (report_glerror("creating depth stencil render buffer")) return false; } return true; } void fbo_delete(fbo_t *fbo) { delete fbo; } GLuint fbo_bind(fbo_t *fbo) { glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint *)&fbo->old_fbo_id); if (use_ext()) glBindFramebufferEXT(GL_FRAMEBUFFER, fbo->fbo_id); else glBindFramebuffer(GL_FRAMEBUFFER, fbo->fbo_id); return fbo->old_fbo_id; } void fbo_unbind(fbo_t *fbo) { if (use_ext()) glBindFramebufferEXT(GL_FRAMEBUFFER, fbo->old_fbo_id); else glBindFramebuffer(GL_FRAMEBUFFER, fbo->old_fbo_id); } openscad-2013.01+dfsg.orig/tests/lodepng.h0000644000175000017500000025377311653126251017716 0ustar chrysnchrysn#ifndef LODEPNG_H_ #define LODEPNG_H_ /* LodePNG version 20110908 Copyright (c) 2005-2011 Lode Vandevenne This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef LODEPNG_H #define LODEPNG_H #include /*for size_t*/ #ifdef __cplusplus #include #include #endif /*__cplusplus*/ /* ////////////////////////////////////////////////////////////////////////// */ /* Code Sections */ /* ////////////////////////////////////////////////////////////////////////// */ /* The following #defines are used to create code sections. They can be disabled to disable code sections, which can give faster compile time and smaller binary. */ /*deflate&zlib encoder and deflate&zlib decoder. If this is disabled, you need to implement the dummy LodePNG_zlib_compress and LodePNG_zlib_decompress functions in the #else belonging to this #define in the source file.*/ #define LODEPNG_COMPILE_ZLIB /*png encoder and png decoder*/ #define LODEPNG_COMPILE_PNG /*deflate&zlib decoder and png decoder*/ #define LODEPNG_COMPILE_DECODER /*deflate&zlib encoder and png encoder*/ #define LODEPNG_COMPILE_ENCODER /*the optional built in harddisk file loading and saving functions*/ #define LODEPNG_COMPILE_DISK /*any code or struct datamember related to chunks other than IHDR, IDAT, PLTE, tRNS, IEND*/ #define LODEPNG_COMPILE_ANCILLARY_CHUNKS /*handling of unknown chunks*/ #define LODEPNG_COMPILE_UNKNOWN_CHUNKS /*ability to convert error numerical codes to English text string*/ #define LODEPNG_COMPILE_ERROR_TEXT /* ////////////////////////////////////////////////////////////////////////// */ /* Simple Functions */ /* ////////////////////////////////////////////////////////////////////////// */ /* This are the simple C and C++ functions, which cover basic usage. Further on in the header file are the more advanced functions allowing custom behaviour. */ #ifdef LODEPNG_COMPILE_PNG /*constants for the PNG color types. "LCT" = "LodePNG Color Type"*/ #define LCT_GREY 0 /*PNG color type greyscale*/ #define LCT_RGB 2 /*PNG color type RGB*/ #define LCT_PALETTE 3 /*PNG color type palette*/ #define LCT_GREY_ALPHA 4 /*PNG color type greyscale with alpha*/ #define LCT_RGBA 6 /*PNG color type RGB with alpha*/ #ifdef LODEPNG_COMPILE_DECODER /* Converts PNG data in memory to raw pixel data. out: Output parameter. Pointer to buffer that will contain the raw pixel data. Its size is w * h * (bytes per pixel), bytes per pixel depends on colorType and bitDepth. Must be freed after usage with free(*out). w: Output parameter. Pointer to width of pixel data. h: Output parameter. Pointer to height of pixel data. in: Memory buffer with the PNG file. insize: size of the in buffer. colorType: the desired color type for the raw output image. See explanation on PNG color types. bitDepth: the desired bit depth for the raw output image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned LodePNG_decode(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize, unsigned colorType, unsigned bitDepth); /*Same as LodePNG_decode, but uses colorType = 6 and bitDepth = 8 by default (32-bit RGBA)*/ unsigned LodePNG_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize); /*Same as LodePNG_decode, but uses colorType = 2 and bitDepth = 8 by default (24-bit RGB)*/ unsigned LodePNG_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize); #ifdef LODEPNG_COMPILE_DISK /* Load PNG from disk, from file with given name. out: Output parameter. Pointer to buffer that will contain the raw pixel data. Its size is w * h * (bytes per pixel), bytes per pixel depends on colorType and bitDepth. Must be freed after usage with free(*out). w: Output parameter. Pointer to width of pixel data. h: Output parameter. Pointer to height of pixel data. filename: Path on disk of the PNG file. colorType: the desired color type for the raw output image. See explanation on PNG color types. bitDepth: the desired bit depth for the raw output image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned LodePNG_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, unsigned colorType, unsigned bitDepth); /*Same as LodePNG_decode_file, but uses colorType = 6 and bitDepth = 8 by default (32-bit RGBA)*/ unsigned LodePNG_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename); /*Same as LodePNG_decode_file, but uses colorType = 2 and bitDepth = 8 by default (24-bit RGB)*/ unsigned LodePNG_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename); #endif /*LODEPNG_COMPILE_DISK*/ #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER /* Converts raw pixel data into a PNG image in memory. The colorType and bitDepth of the output PNG image cannot be chosen, they are automatically determined by the colorType, bitDepth and content of the input pixel data. out: Output parameter. Pointer to buffer that will contain the raw pixel data. Must be freed after usage with free(*out). outsize: Output parameter. Pointer to the size in bytes of the out buffer. image: The raw pixel data to encode. The size of this buffer should be w * h * (bytes per pixel), bytes per pixel depends on colorType and bitDepth. w: width of the raw pixel data in pixels. h: height of the raw pixel data in pixels. colorType: the color type of the raw input image. See explanation on PNG color types. bitDepth: the bit depth of the raw input image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned LodePNG_encode(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth); /*Same as LodePNG_encode, but uses colorType = 6 and bitDepth = 8 by default (32-bit RGBA).*/ unsigned LodePNG_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h); /*Same as LodePNG_encode, but uses colorType = 2 and bitDepth = 8 by default (24-bit RGB).*/ unsigned LodePNG_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h); #ifdef LODEPNG_COMPILE_DISK /* Converts raw pixel data into a PNG file on disk. Same as LodePNG_encode, but outputs to disk instead of memory buffer. filename: path to file on disk to write the PNG image to. image: The raw pixel data to encode. The size of this buffer should be w * h * (bytes per pixel), bytes per pixel depends on colorType and bitDepth. w: width of the raw pixel data in pixels. h: height of the raw pixel data in pixels. colorType: the color type of the raw input image. See explanation on PNG color types. bitDepth: the bit depth of the raw input image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned LodePNG_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, unsigned colorType, unsigned bitDepth); /*Same as LodePNG_encode_file, but uses colorType = 6 and bitDepth = 8 by default (32-bit RGBS).*/ unsigned LodePNG_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h); /*Same as LodePNG_encode_file, but uses colorType = 2 and bitDepth = 8 by default (24-bit RGB).*/ unsigned LodePNG_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h); #endif /*LODEPNG_COMPILE_DISK*/ #endif /*LODEPNG_COMPILE_ENCODER*/ #ifdef __cplusplus namespace LodePNG { #ifdef LODEPNG_COMPILE_DECODER /* Converts PNG data in memory to raw pixel data. out: Output parameter, std::vector containing the raw pixel data. Its size will be w * h * (bytes per pixel), where bytes per pixel is 4 if the default colorType=6 and bitDepth=8 is used. The pixels are 32-bit RGBA bit in that case. w: Output parameter, width of the image in pixels. h: Output parameter, height of the image in pixels. in: Memory buffer with the PNG file. insize: size of the in buffer. colorType: the desired color type for the raw output image. See explanation on PNG color types. bitDepth: the desired bit depth for the raw output image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, size_t insize, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); /* Same as the decode function that takes a unsigned char buffer, but instead of giving a pointer and a size, this takes the input buffer as an std::vector. */ unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::vector& in, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); #ifdef LODEPNG_COMPILE_DISK /* Converts PNG file from disk to raw pixel data in memory. out: Output parameter, std::vector containing the raw pixel data. Its size will be w * h * (bytes per pixel), where bytes per pixel is 4 if the default colorType=6 and bitDepth=8 is used. The pixels are 32-bit RGBA bit in that case. w: Output parameter, width of the image in pixels. h: Output parameter, height of the image in pixels. filename: Path to PNG file on disk. colorType: the desired color type for the raw output image. See explanation on PNG color types. bitDepth: the desired bit depth for the raw output image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); #endif //LODEPNG_COMPILE_DISK #endif //LODEPNG_COMPILE_DECODER #ifdef LODEPNG_COMPILE_ENCODER /* Converts 32-bit RGBA raw pixel data into a PNG image in memory. out: Output parameter, std::vector containing the PNG image data. in: Memory buffer with raw pixel data. The size of this buffer should be w * h * (bytes per pixel), With the default colorType=6 and bitDepth=8, bytes per pixel should be 4 and the data is a 32-bit RGBA pixel buffer. w: Width of the image in pixels. h: Height of the image in pixels. colorType: the color type of the raw input image. See explanation on PNG color types. bitDepth: the bit depth of the raw input image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); /* Same as the encode function that takes a unsigned char buffer, but instead of giving a pointer and a size, this takes the input buffer as an std::vector. */ unsigned encode(std::vector& out, const std::vector& in, unsigned w, unsigned h, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); #ifdef LODEPNG_COMPILE_DISK /* Converts 32-bit RGBA raw pixel data into a PNG file on disk. filename: Path to the file to write the PNG image to. in: Memory buffer with raw pixel data. The size of this buffer should be w * h * (bytes per pixel), With the default colorType=6 and bitDepth=8, bytes per pixel should be 4 and the data is a 32-bit RGBA pixel buffer. w: Width of the image in pixels. h: Height of the image in pixels. colorType: the color type of the raw input image. See explanation on PNG color types. bitDepth: the bit depth of the raw input image. See explanation on PNG color types. Return value: LodePNG error code (0 means no error). */ unsigned encode(const std::string& filename, const unsigned char* in, unsigned w, unsigned h, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); /* Same as the encode function that takes a unsigned char buffer, but instead of giving a pointer and a size, this takes the input buffer as an std::vector. */ unsigned encode(const std::string& filename, const std::vector& in, unsigned w, unsigned h, unsigned colorType = LCT_RGBA, unsigned bitDepth = 8); #endif //LODEPNG_COMPILE_DISK #endif //LODEPNG_COMPILE_ENCODER } //namespace LodePNG #endif /*__cplusplus*/ #endif /*LODEPNG_COMPILE_PNG*/ #ifdef LODEPNG_COMPILE_ERROR_TEXT /* Returns a textual description of the error code, in English. The numerical value of the code itself is not included in this description. */ const char* LodePNG_error_text(unsigned code); #endif /*LODEPNG_COMPILE_ERROR_TEXT*/ /* ////////////////////////////////////////////////////////////////////////// */ /* Inflate & Deflate Setting Structs */ /* ////////////////////////////////////////////////////////////////////////// */ /* These structs contain settings for the decompression and compression of the PNG files. Typically you won't need these directly. */ #ifdef LODEPNG_COMPILE_DECODER typedef struct LodePNG_DecompressSettings { unsigned ignoreAdler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ } LodePNG_DecompressSettings; extern const LodePNG_DecompressSettings LodePNG_defaultDecompressSettings; void LodePNG_DecompressSettings_init(LodePNG_DecompressSettings* settings); #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER /* Compression settings. Tweaking these settings tweaks the balance between speed and compression ratio. */ typedef struct LodePNG_CompressSettings /*deflate = compress*/ { /*LZ77 related settings*/ unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ unsigned useLZ77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ unsigned windowSize; /*the maximum is 32768, higher gives more compression but is slower. Typical value: 2048.*/ } LodePNG_CompressSettings; extern const LodePNG_CompressSettings LodePNG_defaultCompressSettings; void LodePNG_CompressSettings_init(LodePNG_CompressSettings* settings); #endif /*LODEPNG_COMPILE_ENCODER*/ #ifdef LODEPNG_COMPILE_PNG /* ////////////////////////////////////////////////////////////////////////// */ /* PNG and Raw Image Information Structs */ /* ////////////////////////////////////////////////////////////////////////// */ /* Info about the color type of an image. The same LodePNG_InfoColor struct is used for both the PNG and raw image type, even though they are two totally different things. */ typedef struct LodePNG_InfoColor { /*header (IHDR)*/ unsigned colorType; /*color type, see PNG standard or documentation further in this header file*/ unsigned bitDepth; /*bits per sample, see PNG standard or documentation further in this header file*/ /* palette (PLTE and tRNS) This is a dynamically allocated unsigned char array with the colors of the palette, including alpha. The value palettesize indicates the amount of colors in the palette. The allocated size of the buffer is 4 * palettesize bytes, in order RGBARGBARGBA... When encoding a PNG, to store your colors in the palette of the LodePNG_InfoRaw, first use LodePNG_InfoColor_clearPalette, then for each color use LodePNG_InfoColor_addPalette. If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. When decoding, by default you can ignore this palette, since LodePNG already fills the palette colors in the pixels of the raw RGBA output. */ unsigned char* palette; /*palette in RGBARGBA... order*/ size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ /* transparent color key (tRNS) This color uses the same bit depth as the bitDepth value in this struct, which can be 1-bit to 16-bit. For greyscale PNGs, r, g and b will all 3 be set to the same. When decoding, by default you can ignore this information, since LodePNG sets pixels with this key to transparent already in the raw RGBA output. */ unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ unsigned key_r; /*red/greyscale component of color key*/ unsigned key_g; /*green component of color key*/ unsigned key_b; /*blue component of color key*/ } LodePNG_InfoColor; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_InfoColor_init(LodePNG_InfoColor* info); void LodePNG_InfoColor_cleanup(LodePNG_InfoColor* info); /*return value is error code (0 means no error)*/ unsigned LodePNG_InfoColor_copy(LodePNG_InfoColor* dest, const LodePNG_InfoColor* source); void LodePNG_InfoColor_clearPalette(LodePNG_InfoColor* info); /*add 1 color to the palette*/ unsigned LodePNG_InfoColor_addPalette(LodePNG_InfoColor* info, unsigned char r, unsigned char g, unsigned char b, unsigned char a); /*additional color info*/ /*get the total amount of bits per pixel, based on colorType and bitDepth in the struct*/ unsigned LodePNG_InfoColor_getBpp(const LodePNG_InfoColor* info); /*get the amount of color channels used, based on colorType in the struct. If a palette is used, it counts as 1 channel.*/ unsigned LodePNG_InfoColor_getChannels(const LodePNG_InfoColor* info); /*is it a greyscale type? (only colorType 0 or 4)*/ unsigned LodePNG_InfoColor_isGreyscaleType(const LodePNG_InfoColor* info); /*has it got an alpha channel? (only colorType 2 or 6)*/ unsigned LodePNG_InfoColor_isAlphaType(const LodePNG_InfoColor* info); /*has it got a palette? (only colorType 3)*/ unsigned LodePNG_InfoColor_isPaletteType(const LodePNG_InfoColor* info); /*only returns true if there is a palette and there is a value in the palette with alpha < 255. Loops through the palette to check this.*/ unsigned LodePNG_InfoColor_hasPaletteAlpha(const LodePNG_InfoColor* info); /* Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). Returns false if the image can only have opaque pixels. In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, or if "key_defined" is true. */ unsigned LodePNG_InfoColor_canHaveAlpha(const LodePNG_InfoColor* info); #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /* The information of a Time chunk in PNG. To make the encoder add a time chunk, set time_defined to 1 and fill in the correct values in all the time parameters. LodePNG will not fill the current time in these values itself, all it does is copy them over into the chunk bytes. */ typedef struct LodePNG_Time { unsigned year; /*2 bytes used (0-65535)*/ unsigned char month; /*1-12*/ unsigned char day; /*1-31*/ unsigned char hour; /*0-23*/ unsigned char minute; /*0-59*/ unsigned char second; /*0-60 (to allow for leap seconds)*/ } LodePNG_Time; /* Info about text chunks in a PNG file. The arrays can contain multiple keys and strings. The amount of keys and strings is the same. The amount of strings ends when the pointer to the string is a null pointer. They keyword of text chunks gives a short description what the actual text represents. There are a few standard standard keywords recognised by many programs: Title, Author, Description, Copyright, Creation Time, Software, Disclaimer, Warning, Source, Comment. It's allowed to use other keys. A keyword is minimum 1 character and maximum 79 characters long. It's discouraged to use a single line length longer than 79 characters for texts. */ typedef struct LodePNG_Text /*non-international text*/ { /*Don't allocate these text buffers yourself. Use the init/cleanup functions correctly and use LodePNG_Text_add and LodePNG_Text_clear.*/ size_t num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ char** keys; /*the keyword of a text chunk (e.g. "Comment")*/ char** strings; /*the actual text*/ } LodePNG_Text; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_Text_init(LodePNG_Text* text); void LodePNG_Text_cleanup(LodePNG_Text* text); /*return value is error code (0 means no error)*/ unsigned LodePNG_Text_copy(LodePNG_Text* dest, const LodePNG_Text* source); /*Use these functions instead of allocating the char**s manually*/ void LodePNG_Text_clear(LodePNG_Text* text); /*use this to clear the texts again after you filled them in*/ unsigned LodePNG_Text_add(LodePNG_Text* text, const char* key, const char* str); /*push back both texts at once*/ /* Info about international text chunks in a PNG file. The arrays can contain multiple keys and strings. The amount of keys, lengtags, transkeys and strings is the same. The amount of strings ends when the pointer to the string is a null pointer. A keyword is minimum 1 character and maximum 79 characters long. It's discouraged to use a single line length longer than 79 characters for texts. */ typedef struct LodePNG_IText /*international text*/ { /*Don't allocate these text buffers yourself. Use the init/cleanup functions correctly and use LodePNG_IText_add and LodePNG_IText_clear.*/ /*the amount of international texts in this PNG*/ size_t num; /*the English keyword of the text chunk (e.g. "Comment")*/ char** keys; /*the language tag for this text's international language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ char** langtags; /*keyword translated to the international language - UTF-8 string*/ char** transkeys; /*the actual international text - UTF-8 string*/ char** strings; } LodePNG_IText; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_IText_init(LodePNG_IText* text); void LodePNG_IText_cleanup(LodePNG_IText* text); /*return value is error code (0 means no error)*/ unsigned LodePNG_IText_copy(LodePNG_IText* dest, const LodePNG_IText* source); /*Use these functions instead of allocating the char**s manually*/ void LodePNG_IText_clear(LodePNG_IText* text); /*use this to clear the itexts again after you filled them in*/ unsigned LodePNG_IText_add(LodePNG_IText* text, const char* key, const char* langtag, const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS /* Unknown chunks read from the PNG, or extra chunks the user wants to have added in the encoded PNG. */ typedef struct LodePNG_UnknownChunks { /*There are 3 buffers, one for each position in the PNG where unknown chunks can appear each buffer contains all unknown chunks for that position consecutively The 3 buffers are the unknown chunks between certain critical chunks: 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND Do not allocate or traverse this data yourself. Use the chunk traversing functions declared later, such as LodePNG_chunk_next and LodePNG_append_chunk, to read/write this struct. */ unsigned char* data[3]; size_t datasize[3]; /*size in bytes of the unknown chunks, given for protection*/ } LodePNG_UnknownChunks; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_UnknownChunks_init(LodePNG_UnknownChunks* chunks); void LodePNG_UnknownChunks_cleanup(LodePNG_UnknownChunks* chunks); /*return value is error code (0 means no error)*/ unsigned LodePNG_UnknownChunks_copy(LodePNG_UnknownChunks* dest, const LodePNG_UnknownChunks* src); #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ /* Information about the PNG image, except pixels and sometimes except width and height. */ typedef struct LodePNG_InfoPng { /*header (IHDR), palette (PLTE) and transparency (tRNS)*/ /* Note: width and height are only used as information of a decoded PNG image. When encoding one, you don't have to specify width and height in an LodePNG_Info struct, but you give them as parameters of the encode function. The rest of the LodePNG_Info struct IS used by the encoder though! */ unsigned width; /*width of the image in pixels (ignored by encoder, but filled in by decoder)*/ unsigned height; /*height of the image in pixels (ignored by encoder, but filled in by decoder)*/ unsigned compressionMethod; /*compression method of the original file. Always 0.*/ unsigned filterMethod; /*filter method of the original file*/ unsigned interlaceMethod; /*interlace method of the original file*/ LodePNG_InfoColor color; /*color type and bits, palette and transparency of the PNG file*/ #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /* suggested background color (bKGD) This color uses the same bit depth as the bitDepth value in this struct, which can be 1-bit to 16-bit. For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding the encoder writes the red one. For palette PNGs: When decoding, the RGB value will be stored, not a palette index. But when encoding, specify the index of the palette in background_r, the other two are then ignored. The decoder does not use this background color to edit the color of pixels. */ unsigned background_defined; /*is a suggested background color given?*/ unsigned background_r; /*red component of suggested background color*/ unsigned background_g; /*green component of suggested background color*/ unsigned background_b; /*blue component of suggested background color*/ /*non-international text chunks (tEXt and zTXt)*/ LodePNG_Text text; /*international text chunks (iTXt)*/ LodePNG_IText itext; /*time chunk (tIME)*/ unsigned char time_defined; /*if 0, no tIME chunk was or will be generated in the PNG image*/ LodePNG_Time time; /*phys chunk (pHYs)*/ unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ unsigned phys_x; /*pixels per unit in x direction*/ unsigned phys_y; /*pixels per unit in y direction*/ unsigned char phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS /*unknown chunks*/ LodePNG_UnknownChunks unknown_chunks; #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } LodePNG_InfoPng; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_InfoPng_init(LodePNG_InfoPng* info); void LodePNG_InfoPng_cleanup(LodePNG_InfoPng* info); /*return value is error code (0 means no error)*/ unsigned LodePNG_InfoPng_copy(LodePNG_InfoPng* dest, const LodePNG_InfoPng* source); /* Contains user-chosen information about the raw image data, which is independent of the PNG image With raw images, I mean the image data in the form of the simple raw buffer to which the compressed PNG data is decoded, or from which a PNG image can be encoded. */ typedef struct LodePNG_InfoRaw { LodePNG_InfoColor color; /*color info of the raw image, note that the same struct as for PNG data is used.*/ } LodePNG_InfoRaw; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_InfoRaw_init(LodePNG_InfoRaw* info); void LodePNG_InfoRaw_cleanup(LodePNG_InfoRaw* info); /*return value is error code (0 means no error)*/ unsigned LodePNG_InfoRaw_copy(LodePNG_InfoRaw* dest, const LodePNG_InfoRaw* source); /* Converts raw buffer from one color type to another color type, based on LodePNG_InfoColor structs to describe the input and output color type. See the reference manual at the end of this header file to see which color conversions are supported. return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel of the output color type (LodePNG_InfoColor_getBpp) */ unsigned LodePNG_convert(unsigned char* out, const unsigned char* in, LodePNG_InfoColor* infoOut, LodePNG_InfoColor* infoIn, unsigned w, unsigned h); #ifdef LODEPNG_COMPILE_DECODER /* ////////////////////////////////////////////////////////////////////////// */ /* LodePNG Decoder */ /* ////////////////////////////////////////////////////////////////////////// */ /* Settings for the decoder. This contains settings for the PNG and the Zlib decoder, but not the Info settings from the Info structs. */ typedef struct LodePNG_DecodeSettings { LodePNG_DecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ unsigned ignoreCrc; /*ignore CRC checksums*/ unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS unsigned readTextChunks; /*if false but rememberUnknownChunks is true, they're stored in the unknown chunks*/ #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ #ifdef LODEPNG_COMPILE_UNKNOWN_CHUNKS /*store all bytes from unknown chunks in the InfoPng (off by default, useful for a png editor)*/ unsigned rememberUnknownChunks; #endif /*LODEPNG_COMPILE_UNKNOWN_CHUNKS*/ } LodePNG_DecodeSettings; void LodePNG_DecodeSettings_init(LodePNG_DecodeSettings* settings); /* The LodePNG_Decoder struct has most input and output parameters the decoder uses, such as the settings, the info of the PNG and the raw data, and the error. Only the pixel buffer is not contained in this struct. */ typedef struct LodePNG_Decoder { LodePNG_DecodeSettings settings; /*the decoding settings*/ LodePNG_InfoRaw infoRaw; /*specifies the format in which you would like to get the raw pixel buffer*/ LodePNG_InfoPng infoPng; /*info of the PNG image obtained after decoding*/ unsigned error; } LodePNG_Decoder; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_Decoder_init(LodePNG_Decoder* decoder); void LodePNG_Decoder_cleanup(LodePNG_Decoder* decoder); void LodePNG_Decoder_copy(LodePNG_Decoder* dest, const LodePNG_Decoder* source); /* Decode based on a LodePNG_Decoder. This function allocates the out buffer and stores the size in *outsize. This buffer needs to be freed after usage. Other information about the PNG file, such as the size, colorType and extra chunks are stored in the infoPng field of the LodePNG_Decoder. */ void LodePNG_Decoder_decode(LodePNG_Decoder* decoder, unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize); /* Read the PNG header, but not the actual data. This returns only the information that is in the header chunk of the PNG, such as width, height and color type. The information is placed in the infoPng field of the LodePNG_Decoder. */ void LodePNG_Decoder_inspect(LodePNG_Decoder* decoder, const unsigned char* in, size_t insize); #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER /* ////////////////////////////////////////////////////////////////////////// */ /* LodePNG Encoder */ /* ////////////////////////////////////////////////////////////////////////// */ /*Settings for the encoder.*/ typedef struct LodePNG_EncodeSettings { LodePNG_CompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ /*Brute-force-search PNG filters by compressing each filter for each scanline. This gives better compression, at the cost of being super slow. Don't enable this for normal image saving, compression can take minutes instead of seconds. This is experimental. If enabled, compression still isn't as good as some other PNG encoders and optimizers, except for some images. If you enable this, also consider setting zlibsettings.windowSize to 32768, and consider using a less than 24-bit per pixel colorType if the image has <= 256 colors, for optimal compression. Default: 0 (false)*/ unsigned bruteForceFilters; /*automatically use color type without alpha instead of given one, if given image is opaque*/ unsigned autoLeaveOutAlphaChannel; /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). If colortype is 3, PLTE is _always_ created.*/ unsigned force_palette; #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS /*add LodePNG version as text chunk*/ unsigned add_id; /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ unsigned text_compression; #endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ } LodePNG_EncodeSettings; void LodePNG_EncodeSettings_init(LodePNG_EncodeSettings* settings); /* This struct has most input and output parameters the encoder uses, such as the settings, the info of the PNG and the raw data, and the error. Only the pixel buffer is not contained in this struct. */ typedef struct LodePNG_Encoder { /*compression settings of the encoder*/ LodePNG_EncodeSettings settings; /*the info specified by the user is not changed by the encoder. The encoder will try to generate a PNG close to the given info.*/ LodePNG_InfoPng infoPng; /*put the properties of the input raw image in here*/ LodePNG_InfoRaw infoRaw; /*error value filled in if error happened, or 0 if all went ok*/ unsigned error; } LodePNG_Encoder; /*init, cleanup and copy functions to use with this struct*/ void LodePNG_Encoder_init(LodePNG_Encoder* encoder); void LodePNG_Encoder_cleanup(LodePNG_Encoder* encoder); void LodePNG_Encoder_copy(LodePNG_Encoder* dest, const LodePNG_Encoder* source); /*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ void LodePNG_Encoder_encode(LodePNG_Encoder* encoder, unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h); #endif /*LODEPNG_COMPILE_ENCODER*/ /* ////////////////////////////////////////////////////////////////////////// */ /* Chunk Traversing Utilities */ /* ////////////////////////////////////////////////////////////////////////// */ /* LodePNG_chunk functions: These functions need as input a large enough amount of allocated memory. These functions can be used on raw PNG data, but they are exposed in the API because they are needed if you want to traverse the unknown chunks stored in the LodePNG_UnknownChunks struct, or add new ones to it. */ /*get the length of the data of the chunk. Total chunk length has 12 bytes more.*/ unsigned LodePNG_chunk_length(const unsigned char* chunk); /*puts the 4-byte type in null terminated string*/ void LodePNG_chunk_type(char type[5], const unsigned char* chunk); /*check if the type is the given type*/ unsigned char LodePNG_chunk_type_equals(const unsigned char* chunk, const char* type); /* These functions get properties of PNG chunks gotten from capitalization of chunk type name, as defined by the PNG standard. */ /* properties of PNG chunks gotten from capitalization of chunk type name, as defined by the standard 0: ancillary chunk, 1: it's one of the critical chunk types */ unsigned char LodePNG_chunk_critical(const unsigned char* chunk); /*0: public, 1: private*/ unsigned char LodePNG_chunk_private(const unsigned char* chunk); /*0: the chunk is unsafe to copy, 1: the chunk is safe to copy*/ unsigned char LodePNG_chunk_safetocopy(const unsigned char* chunk); /*get pointer to the data of the chunk*/ unsigned char* LodePNG_chunk_data(unsigned char* chunk); /*get pointer to the data of the chunk*/ const unsigned char* LodePNG_chunk_data_const(const unsigned char* chunk); /*returns 0 if the crc is correct, 1 if it's incorrect*/ unsigned LodePNG_chunk_check_crc(const unsigned char* chunk); /*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ void LodePNG_chunk_generate_crc(unsigned char* chunk); /*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ unsigned char* LodePNG_chunk_next(unsigned char* chunk); const unsigned char* LodePNG_chunk_next_const(const unsigned char* chunk); /* Appends chunk to the data in out. The given chunk should already have its chunk header. The out variable and outlength are updated to reflect the new reallocated buffer. Returns error code (0 if it went ok) */ unsigned LodePNG_append_chunk(unsigned char** out, size_t* outlength, const unsigned char* chunk); /* Appends new chunk to out. The chunk to append is given by giving its length, type and data separately. The type is a 4-letter string. The out variable and outlength are updated to reflect the new reallocated buffer. Returne error code (0 if it went ok) */ unsigned LodePNG_create_chunk(unsigned char** out, size_t* outlength, unsigned length, const char* type, const unsigned char* data); #endif /*LODEPNG_COMPILE_PNG*/ #ifdef LODEPNG_COMPILE_ZLIB /* ////////////////////////////////////////////////////////////////////////// */ /* Zlib encoder and decoder */ /* ////////////////////////////////////////////////////////////////////////// */ /* This zlib part can be used independently to zlib compress and decompress a buffer. It cannot be used to create gzip files however, and it only supports the part of zlib that is required for PNG, it does not support dictionaries. */ #ifdef LODEPNG_COMPILE_DECODER /*Decompresses Zlib data. Reallocates the out buffer and appends the data. The data must be according to the zlib specification. Either, *out must be NULL and *outsize must be 0, or, *out must be a valid buffer and *outsize its size in bytes. out must be freed by user after usage.*/ unsigned LodePNG_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodePNG_DecompressSettings* settings); #endif /*LODEPNG_COMPILE_DECODER*/ #ifdef LODEPNG_COMPILE_ENCODER /*Compresses data with Zlib. Reallocates the out buffer and appends the data. The data is output in the format of the zlib specification. Either, *out must be NULL and *outsize must be 0, or, *out must be a valid buffer and *outsize its size in bytes. out must be freed by user after usage.*/ unsigned LodePNG_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, size_t insize, const LodePNG_CompressSettings* settings); #endif /*LODEPNG_COMPILE_ENCODER*/ #endif /*LODEPNG_COMPILE_ZLIB*/ #ifdef LODEPNG_COMPILE_DISK /* Load a file from disk into buffer. The function allocates the out buffer, and after usage you are responsible for freeing it. out: output parameter, contains pointer to loaded buffer. outsize: output parameter, size of the allocated out buffer filename: the path to the file to load return value: error code (0 means ok) */ unsigned LodePNG_loadFile(unsigned char** out, size_t* outsize, const char* filename); /* Save a file from buffer to disk. Warning, if it exists, this function overwrites the file without warning! buffer: the buffer to write buffersize: size of the buffer to write filename: the path to the file to save to return value: error code (0 means ok) */ unsigned LodePNG_saveFile(const unsigned char* buffer, size_t buffersize, const char* filename); #endif /*LODEPNG_COMPILE_DISK*/ #ifdef __cplusplus /* ////////////////////////////////////////////////////////////////////////// */ /* LodePNG C++ wrapper */ /* ////////////////////////////////////////////////////////////////////////// */ //The LodePNG C++ wrapper uses classes with handy constructors and destructors //instead of manual init and cleanup functions, and uses std::vectors instead of //manually allocated memory buffers. namespace LodePNG { #ifdef LODEPNG_COMPILE_ZLIB //The C++ wrapper for the zlib part #ifdef LODEPNG_COMPILE_DECODER //Zlib-decompress an unsigned char buffer unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, const LodePNG_DecompressSettings& settings = LodePNG_defaultDecompressSettings); //Zlib-decompress an std::vector unsigned decompress(std::vector& out, const std::vector& in, const LodePNG_DecompressSettings& settings = LodePNG_defaultDecompressSettings); #endif //LODEPNG_COMPILE_DECODER #ifdef LODEPNG_COMPILE_ENCODER //Zlib-compress an unsigned char buffer unsigned compress(std::vector& out, const unsigned char* in, size_t insize, const LodePNG_CompressSettings& settings = LodePNG_defaultCompressSettings); //Zlib-compress an std::vector unsigned compress(std::vector& out, const std::vector& in, const LodePNG_CompressSettings& settings = LodePNG_defaultCompressSettings); #endif //LODEPNG_COMPILE_ENCODER #endif //LODEPNG_COMPILE_ZLIB #ifdef LODEPNG_COMPILE_PNG #ifdef LODEPNG_COMPILE_DECODER /* Class to decode a PNG image. Before decoding, settings can be set and after decoding, extra information about the PNG can be retrieved. Extends from the C-struct LodePNG_Decoder to add constructors and destructors to initialize/cleanup it automatically. Beware, no virtual destructor is used. */ class Decoder : public LodePNG_Decoder { public: Decoder(); ~Decoder(); void operator=(const LodePNG_Decoder& other); //decode PNG buffer to raw out buffer. Width and height can be retrieved with getWidth() and //getHeight() and error should be checked with hasError() and getError() void decode(std::vector& out, const unsigned char* in, size_t insize); //decode PNG buffer to raw out buffer. Width and height can be retrieved with getWidth() and //getHeight() and error should be checked with hasError() and getError() void decode(std::vector& out, const std::vector& in); //inspect functions: get only the info from the PNG header. The info can then be retrieved with //the functions of this class. void inspect(const unsigned char* in, size_t insize); //inspect functions: get only the info from the PNG header. The info can then be retrieved with //the functions of this class. void inspect(const std::vector& in); //error checking after decoding bool hasError() const; unsigned getError() const; //convenient access to some InfoPng parameters after decoding unsigned getWidth() const; //width of image in pixels unsigned getHeight() const; //height of image in pixels unsigned getBpp(); //bits per pixel unsigned getChannels(); //amount of channels unsigned isGreyscaleType(); //is it a greyscale type? (colorType 0 or 4) unsigned isAlphaType(); //has it an alpha channel? (colorType 2 or 6) //getters and setters for the decoding settings const LodePNG_DecodeSettings& getSettings() const; LodePNG_DecodeSettings& getSettings(); void setSettings(const LodePNG_DecodeSettings& info); //getters and setters for the PNG image info, after decoding this describes information of the PNG image const LodePNG_InfoPng& getInfoPng() const; LodePNG_InfoPng& getInfoPng(); void setInfoPng(const LodePNG_InfoPng& info); void swapInfoPng(LodePNG_InfoPng& info); //faster than copying with setInfoPng //getters and setters for the raw image info, this determines in what format //you get the pixel buffer from the decoder const LodePNG_InfoRaw& getInfoRaw() const; LodePNG_InfoRaw& getInfoRaw(); void setInfoRaw(const LodePNG_InfoRaw& info); }; #endif //LODEPNG_COMPILE_DECODER #ifdef LODEPNG_COMPILE_ENCODER /* Class to encode a PNG image. Before encoding, settings can be set. Extends from the C-struct LodePNG_Enoder to add constructors and destructors to initialize/cleanup it automatically. Beware, no virtual destructor is used. */ class Encoder : public LodePNG_Encoder { public: Encoder(); ~Encoder(); void operator=(const LodePNG_Encoder& other); //encoding image to PNG buffer void encode(std::vector& out, const unsigned char* image, unsigned w, unsigned h); //encoding image to PNG buffer void encode(std::vector& out, const std::vector& image, unsigned w, unsigned h); //error checking after decoding bool hasError() const; unsigned getError() const; //convenient direct access to some parameters of the InfoPng void clearPalette(); void addPalette(unsigned char r, unsigned char g, unsigned char b, unsigned char a); //add 1 color to the palette #ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS void clearText(); void addText(const std::string& key, const std::string& str); //push back both texts at once void clearIText(); void addIText(const std::string& key, const std::string& langtag, const std::string& transkey, const std::string& str); #endif //LODEPNG_COMPILE_ANCILLARY_CHUNKS //getters and setters for the encoding settings const LodePNG_EncodeSettings& getSettings() const; LodePNG_EncodeSettings& getSettings(); void setSettings(const LodePNG_EncodeSettings& info); //getters and setters for the PNG image info, this describes what color type //and other settings the resulting PNG should have const LodePNG_InfoPng& getInfoPng() const; LodePNG_InfoPng& getInfoPng(); void setInfoPng(const LodePNG_InfoPng& info); void swapInfoPng(LodePNG_InfoPng& info); //faster than copying with setInfoPng //getters and setters for the raw image info, this describes how the encoder //should interpret the input pixel buffer const LodePNG_InfoRaw& getInfoRaw() const; LodePNG_InfoRaw& getInfoRaw(); void setInfoRaw(const LodePNG_InfoRaw& info); }; #endif //LODEPNG_COMPILE_ENCODER #ifdef LODEPNG_COMPILE_DISK /* Load a file from disk into an std::vector. If the vector is empty, then either the file doesn't exist or is an empty file. */ void loadFile(std::vector& buffer, const std::string& filename); /* Save the binary data in an std::vector to a file on disk. The file is overwritten without warning. */ void saveFile(const std::vector& buffer, const std::string& filename); #endif //LODEPNG_COMPILE_DISK #endif //LODEPNG_COMPILE_PNG } //namespace LodePNG #endif /*end of __cplusplus wrapper*/ /* TODO: [.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often [.] check compatibility with vareous compilers - done but needs to be redone for every newer version [ ] LZ77 encoder more like the one described in zlib - to make sure it's patentfree [X] converting color to 16-bit per channel types [ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) [ ] make sure encoder generates no chunks with size > (2^31)-1 [ ] partial decoding (stream processing) [ ] let the "isFullyOpaque" function check color keys and transparent palettes too [X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" [ ] don't stop decoding on errors like 69, 57, 58 (make warnings) [ ] make option to choose if the raw image with non multiple of 8 bits per scanline should have padding bits or not [ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes */ #endif /*LODEPNG_H inclusion guard*/ /* LodePNG Documentation --------------------- This documentations contains background information and examples. For the function and class documentation, see the comments in the declarations above. 0. table of contents -------------------- 1. about 1.1. supported features 1.2. features not supported 2. C and C++ version 3. security 4. decoding 5. encoding 6. color conversions 6.1. PNG color types 6.2. Default Behaviour of LodePNG 6.3. Color Conversions 6.4. More Notes 7. error values 8. chunks and PNG editing 9. compiler support 10. examples 10.1. decoder C++ example 10.2. encoder C++ example 10.3. decoder C example 11. changes 12. contact information 1. about -------- PNG is a file format to store raster images losslessly with good compression, supporting different color types. It can be implemented in a patent-free way. LodePNG is a PNG codec according to the Portable Network Graphics (PNG) Specification (Second Edition) - W3C Recommendation 10 November 2003. The specifications used are: *) Portable Network Graphics (PNG) Specification (Second Edition): http://www.w3.org/TR/2003/REC-PNG-20031110 *) RFC 1950 ZLIB Compressed Data Format version 3.3: http://www.gzip.org/zlib/rfc-zlib.html *) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: http://www.gzip.org/zlib/rfc-deflate.html The most recent version of LodePNG can currently be found at http://members.gamedev.net/lode/projects/LodePNG/ LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds extra functionality. LodePNG exists out of two files: -lodepng.h: the header file for both C and C++ -lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage If you want to start using LodePNG right away without reading this doc, get the files lodepng_examples.c or lodepng_examples.cpp to see how to use it in code, or check the (smaller) examples in chapter 13 here. LodePNG is simple but only supports the basic requirements. To achieve simplicity, the following design choices were made: There are no dependencies on any external library. To decode PNGs, there's a Decoder struct or class that can convert any PNG file data into an RGBA image buffer with a single function call. To encode PNGs, there's an Encoder struct or class that can convert image data into PNG file data with a single function call. To read and write files, there are simple functions to convert the files to/from buffers in memory. This all makes LodePNG suitable for loading textures in games, demoscene productions, saving a screenshot, images in programs that require them for simple usage, ... It's less suitable for full fledged image editors, loading PNGs over network (it requires all the image data to be available before decoding can begin), life-critical systems, ... LodePNG has a standards conformant decoder and encoder, and supports the ability to make a somewhat conformant editor. 1.1. supported features ----------------------- The following features are supported by the decoder: *) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, or the same color type as the PNG *) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image *) Adam7 interlace and deinterlace for any color type *) loading the image from harddisk or decoding it from a buffer from other sources than harddisk *) support for alpha channels, including RGBA color model, translucent palettes and color keying *) zlib decompression (inflate) *) zlib compression (deflate) *) CRC32 and ADLER32 checksums *) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. *) the following chunks are supported (generated/interpreted) by both encoder and decoder: IHDR: header information PLTE: color palette IDAT: pixel data IEND: the final chunk tRNS: transparency for palettized images tEXt: textual information zTXt: compressed textual information iTXt: international textual information bKGD: suggested background color pHYs: physical dimensions tIME: modification time 1.2. features not supported --------------------------- The following features are _not_ supported: *) some features needed to make a conformant PNG-Editor might be still missing. *) partial loading/stream processing. All data must be available and is processed in one call. *) The following public chunks are not supported but treated as unknown chunks by LodePNG cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT 2. C and C++ version -------------------- The C version uses buffers allocated with alloc that you need to free() yourself. On top of that, you need to use init and cleanup functions for each struct whenever using a struct from the C version to avoid exploits and memory leaks. The C++ version has constructors and destructors that take care of these things, and uses std::vectors in the interface for storing data. Both the C and the C++ version are contained in this file! The C++ code depends on the C code, the C code works on its own. These files work without modification for both C and C++ compilers because all the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers ignore it, and the C code is made to compile both with strict ISO C90 and C++. To use the C++ version, you need to rename the source file to lodepng.cpp (instead of lodepng.c), and compile it with a C++ compiler. To use the C version, you need to rename the source file to lodepng.c (instead of lodepng.cpp), and compile it with a C compiler. 3. Security ----------- As with most software, even if carefully designed, it's always possible that LodePNG may contain possible exploits. If you discover a possible exploit, please let me know, and it will be fixed. When using LodePNG, care has to be taken with the C version of LodePNG, as well as the C-style structs when working with C++. The following conventions are used for all C-style structs: -if a struct has a corresponding init function, always call the init function when making a new one, to avoid exploits -if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks -if a struct has a corresponding copy function, use the copy function instead of "=". The destination must also be inited already! 4. Decoding ----------- Decoding converts a PNG compressed image to a raw pixel buffer. Most documentation on using the decoder is at its declarations in the header above. For C, simple decoding can be done with functions such as LodePNG_decode32, and more advanced decoding can be done with the struct LodePNG_Decoder and its functions. For C++, simple decoding can be done with the LodePNG::decode functions and advanced decoding with the LodePNG::Decoder class. The Decoder contains 3 components: *) LodePNG_InfoPng: it stores information about the PNG (the input) in an LodePNG_InfoPng struct, don't modify this one yourself *) Settings: you can specify a few other settings for the decoder to use *) LodePNG_InfoRaw: here you can say what type of raw image (the output) you want to get Some of the parameters described below may be inside the sub-struct "LodePNG_InfoColor color". In the C and C++ version, when using Info structs outside of the decoder or encoder, you need to use their init and cleanup functions, but normally you use the ones in the decoder that are already handled in the init and cleanup functions of the decoder itself. =LodePNG_InfoPng= This contains information such as the original color type of the PNG image, text comments, suggested background color, etc... More details about the LodePNG_InfoPng struct are at its declaration documentation. Because the dimensions of the image are important, there are shortcuts to get them in the C++ version: use decoder.getWidth() and decoder.getHeight(). In the C version, use decoder.infoPng.width and decoder.infoPng.height. =LodePNG_InfoRaw= In the LodePNG_InfoRaw struct of the Decoder, you can specify which color type you want the resulting raw image to be. If this is different from the colorType of the PNG, then the decoder will automatically convert the result to your LodePNG_InfoRaw settings. Not all combinations of color conversions are supported though, see a different section for information about the color modes and supported conversions. Palette of LodePNG_InfoRaw isn't used by the Decoder, when converting from palette color to palette color, the values of the pixels are left untouched so that the colors will change if the palette is different. Color key of LodePNG_InfoRaw is not used by the Decoder. If setting color_convert is false then LodePNG_InfoRaw is completely ignored, but it will be modified to match the color type of the PNG so will be overwritten. By default, 32-bit color is used for the result. =Settings= The Settings can be used to ignore the errors created by invalid CRC and Adler32 chunks, and to disable the decoding of tEXt chunks. There's also a setting color_convert, true by default. If false, no conversion is done, the resulting data will be as it was in the PNG (after decompression) and you'll have to puzzle the colors of the pixels together yourself using the color type information in the LodePNG_InfoPng. 5. Encoding ----------- Encoding converts a raw pixel buffer to a PNG compressed image. Most documentation on using the encoder is at its declarations in the header above. For C, simple encoding can be done with functions such as LodePNG_encode32, and more advanced decoding can be done with the struct LodePNG_Encoder and its functions. For C++, simple encoding can be done with the LodePNG::encode functions and advanced decoding with the LodePNG::Encoder class. Like the decoder, the encoder can also give errors. However it gives less errors since the encoder input is trusted, the decoder input (a PNG image that could be forged by anyone) is not trusted. Like the Decoder, the Encoder has 3 components: *) LodePNG_InfoRaw: here you say what color type of the raw image (the input) has *) Settings: you can specify a few settings for the encoder to use *) LodePNG_InfoPng: the same LodePNG_InfoPng struct as created by the Decoder. For the encoder, with this you specify how you want the PNG (the output) to be. Some of the parameters described below may be inside the sub-struct "LodePNG_InfoColor color". In the C and C++ version, when using Info structs outside of the decoder or encoder, you need to use their init and cleanup functions, but normally you use the ones in the encoder that are already handled in the init and cleanup functions of the decoder itself. =LodePNG_InfoPng= The Decoder class stores information about the PNG image in an LodePNG_InfoPng object. With the Encoder you can do the opposite: you give it an LodePNG_InfoPng object, and it'll try to match the LodePNG_InfoPng you give as close as possible in the PNG it encodes. For example in the LodePNG_InfoPng you can specify the color type you want to use, possible tEXt chunks you want the PNG to contain, etc... For an explanation of all the values in LodePNG_InfoPng see a further section. Not all PNG color types are supported by the Encoder. The encoder will not always exactly match the LodePNG_InfoPng struct you give, it tries as close as possible. Some things are ignored by the encoder. The width and height of LodePNG_InfoPng are ignored as well, because instead the width and height of the raw image you give in the input are used. In fact the encoder currently uses only the following settings from it: -colorType and bitDepth: the ones it supports -text chunks, that you can add to the LodePNG_InfoPng with "addText" -the color key, if applicable for the given color type -the palette, if you encode to a PNG with colorType 3 -the background color: it'll add a bKGD chunk to the PNG if one is given -the interlaceMethod: None (0) or Adam7 (1) When encoding to a PNG with colorType 3, the encoder will generate a PLTE chunk. If the palette contains any colors for which the alpha channel is not 255 (so there are translucent colors in the palette), it'll add a tRNS chunk. =LodePNG_InfoRaw= You specify the color type of the raw image that you give to the input here, including a possible transparent color key and palette you happen to be using in your raw image data. By default, 32-bit color is assumed, meaning your input has to be in RGBA format with 4 bytes (unsigned chars) per pixel. =Settings= The following settings are supported (some are in sub-structs): *) autoLeaveOutAlphaChannel: when this option is enabled, when you specify a PNG color type with alpha channel (not to be confused with the color type of the raw image you specify!!), but the encoder detects that all pixels of the given image are opaque, then it'll automatically use the corresponding type without alpha channel, resulting in a smaller PNG image. *) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, 2 = dynamic huffman tree (best compression) *) useLZ77: whether or not to use LZ77 for compressed block types *) windowSize: the window size used by the LZ77 encoder (1 - 32768) *) force_palette: if colorType is 2 or 6, you can make the encoder write a PLTE chunk if force_palette is true. This can used as suggested palette to convert to by viewers that don't support more than 256 colors (if those still exist) *) add_id: add text chunk "Encoder: LodePNG " to the image. *) text_compression: default 0. If 1, it'll store texts as zTXt instead of tEXt chunks. zTXt chunks use zlib compression on the text. This gives a smaller result on large texts but a larger result on small texts (such as a single program name). It's all tEXt or all zTXt though, there's no separate setting per text yet. 6. color conversions -------------------- In LodePNG, the color mode (bits, channels and palette) used in the PNG image, and the color mode used in the raw data, are separate and independently configurable. Therefore, LodePNG needs to do conversions from one color mode to another. Not all possible conversions are supported (e.g. converting to a palette or a lower bit depth isn't supported). This section will explain which conversions are supported and how to configure this. This explains for example when LodePNG uses the settings in LodePNG_InfoPng, LodePNG_InfoRaw and Settings. 6.1. PNG color types -------------------- A PNG image can have many color types, ranging from 1-bit color to 64-bit color, as well as palettized color modes. After the zlib decompression and unfiltering in the PNG image is done, the raw pixel data will have that color type and thus a certain amount of bits per pixel. If you want the output raw image after decoding to have another color type, a conversion is done by LodePNG. The PNG specification mentions the following color types: 0: greyscale, bit depths 1, 2, 4, 8, 16 2: RGB, bit depths 8 and 16 3: palette, bit depths 1, 2, 4 and 8 4: greyscale with alpha, bit depths 8 and 16 6: RGBA, bit depths 8 and 16 Bit depth is the amount of bits per pixel per color channel. So the total amount of bits per pixel = amount of channels * bitDepth. 6.2. Default Behaviour of LodePNG --------------------------------- By default, the Decoder will convert the data from the PNG to 32-bit RGBA color, no matter what color type the PNG has, so that the result can be used directly as a texture in OpenGL etc... without worries about what color type the original image has. The Encoder assumes by default that the raw input you give it is a 32-bit RGBA buffer and will store the PNG as either 32 bit or 24 bit depending on whether or not any translucent pixels were detected in it. To get the default behaviour, don't change the values of LodePNG_InfoRaw and LodePNG_InfoPng of the encoder, and don't change the values of LodePNG_InfoRaw of the decoder. 6.3. Color Conversions ---------------------- As explained in the sections about the Encoder and Decoder, you can specify color types and bit depths in LodePNG_InfoPng and LodePNG_InfoRaw, to change the default behaviour explained above. (for the Decoder you can only specify the LodePNG_InfoRaw, because the LodePNG_InfoPng contains what the PNG file has). To avoid some confusion: -the Decoder converts from PNG to raw image -the Encoder converts from raw image to PNG -the color type and bit depth in LodePNG_InfoRaw, are those of the raw image -the color type and bit depth in LodePNG_InfoPng, are those of the PNG -if the color type of the LodePNG_InfoRaw and PNG image aren't the same, a conversion between the color types is done if the color types are supported. If it is not supported, an error is returned. If the types are the same, no conversion is done and this is supported for any color type. Supported color conversions: -It's possible to load PNGs from any colortype and to save PNGs of any colorType. -Both encoder and decoder use the same converter. So both encoder and decoder suport the same color types at the input and the output. So the decoder supports any type of PNG image and can convert it to certain types of raw image, while the encoder supports any type of raw data but only certain color types for the output PNG. -The converter can convert from _any_ input color type, to 24-bit RGB or 32-bit RGBA (8 bits per channel) -The converter can convert from _any_ input color type, to 48-bit RGB or 64-bit RGBA (16 bits per channel) -The converter can convert from greyscale input color type, to 8-bit greyscale or greyscale with alpha -The converter can convert from greyscale input color type, to 16-bit greyscale or greyscale with alpha -If both color types are the same, conversion from anything to anything is possible -Color types that are invalid according to the PNG specification are not allowed -When converting from a type with alpha channel to one without, the alpha channel information is discarded -When converting from a type without alpha channel to one with, the result will be opaque except pixels that have the same color as the color key of the input if one was given -When converting from 16-bit bitDepth to 8-bit bitDepth, the 16-bit precision information is lost, only the most significant byte is kept -When converting from 8-bit bitDepth to 16-bit bitDepth, the 8-bit byte is duplicated, so that 0 stays 0, and the 8-bit maximum 255 is converted to the 16-bit maximum 65535. Something similar happens at bit level for converting very low bit depths to 8 or 16 bit. -Converting from color to greyscale or to palette is not supported on purpose: there are multiple possible algorithms to do this color reduction, LodePNG does not want to pick one and leaves this choice to the user instead, because it's beyond the scope of PNG encoding. -Converting from a palette to a palette, only keeps the indices, it ignores the colors defined in the palette without giving an error No conversion needed...: -If the color type of the PNG image and raw image are the same, then no conversion is done, and all color types are supported. -In the encoder, you can make it save a PNG with any color by giving the LodePNG_InfoRaw and LodePNG_InfoPng the same color type. -In the decoder, you can make it store the pixel data in the same color type as the PNG has, by setting the color_convert setting to false. Settings in infoRaw are then ignored. The function LodePNG_convert does this, which is available in the interface but normally isn't needed since the encoder and decoder already call it. 6.4. More Notes --------------- In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines have a bit amount that isn't a multiple of 8, then padding bits are used so that each scanline starts at a fresh byte. But that is NOT true for the LodePNG input and output! The raw input image you give to the encoder, and the raw output image you get from the decoder will NOT have these padding bits, e.g. in the case of a 1-bit image with a width of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, not the first bit of a new byte. 7. error values --------------- All functions in LodePNG that return an error code, return 0 if everything went OK, or one of the code defined by LodePNG if there was an error. The meaning of the LodePNG error values can be retrieved with the function LodePNG_error_text: given the numerical error code, it returns a description of the error in English as a string. Check the implementation of LodePNG_error_text to see the meaning of each error code. 8. chunks and PNG editing ------------------------- If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG editor that should follow the rules about handling of unknown chunks, or if you program is able to read other types of chunks than the ones handled by LodePNG, then that's possible with the chunk functions of LodePNG. A PNG chunk has the following layout: 4 bytes length 4 bytes type name length bytes data 4 bytes CRC 8.1. iterating through chunks ----------------------------- If you have a buffer containing the PNG image data, then the first chunk (the IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the signature of the PNG and are not part of a chunk. But if you start at byte 8 then you have a chunk, and can check the following things of it. NOTE: none of these functions check for memory buffer boundaries. To avoid exploits, always make sure the buffer contains all the data of the chunks. When using LodePNG_chunk_next, make sure the returned value is within the allocated memory. unsigned LodePNG_chunk_length(const unsigned char* chunk): Get the length of the chunk's data. The total chunk length is this length + 12. void LodePNG_chunk_type(char type[5], const unsigned char* chunk): unsigned char LodePNG_chunk_type_equals(const unsigned char* chunk, const char* type): Get the type of the chunk or compare if it's a certain type unsigned char LodePNG_chunk_critical(const unsigned char* chunk): unsigned char LodePNG_chunk_private(const unsigned char* chunk): unsigned char LodePNG_chunk_safetocopy(const unsigned char* chunk): Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). Check if the chunk is private (public chunks are part of the standard, private ones not). Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your program doesn't handle that type of unknown chunk. unsigned char* LodePNG_chunk_data(unsigned char* chunk): const unsigned char* LodePNG_chunk_data_const(const unsigned char* chunk): Get a pointer to the start of the data of the chunk. unsigned LodePNG_chunk_check_crc(const unsigned char* chunk): void LodePNG_chunk_generate_crc(unsigned char* chunk): Check if the crc is correct or generate a correct one. unsigned char* LodePNG_chunk_next(unsigned char* chunk): const unsigned char* LodePNG_chunk_next_const(const unsigned char* chunk): Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these functions do no boundary checking of the allocated data whatsoever, so make sure there is enough data available in the buffer to be able to go to the next chunk. unsigned LodePNG_append_chunk(unsigned char** out, size_t* outlength, const unsigned char* chunk): unsigned LodePNG_create_chunk(unsigned char** out, size_t* outlength, unsigned length, const char* type, const unsigned char* data): These functions are used to create new chunks that are appended to the data in *out that has length *outlength. The append function appends an existing chunk to the new data. The create function creates a new chunk with the given parameters and appends it. Type is the 4-letter name of the chunk. 8.2. chunks in infoPng ---------------------- The LodePNG_InfoPng struct contains a struct LodePNG_UnknownChunks in it. This struct has 3 buffers (each with size) to contain 3 types of unknown chunks: the ones that come before the PLTE chunk, the ones that come between the PLTE and the IDAT chunks, and the ones that come after the IDAT chunks. It's necessary to make the distionction between these 3 cases because the PNG standard forces to keep the ordering of unknown chunks compared to the critical chunks, but does not force any other ordering rules. infoPng.unknown_chunks.data[0] is the chunks before PLTE infoPng.unknown_chunks.data[1] is the chunks after PLTE, before IDAT infoPng.unknown_chunks.data[2] is the chunks after IDAT The chunks in these 3 buffers can be iterated through and read by using the same way described in the previous subchapter. When using the decoder to decode a PNG, you can make it store all unknown chunks if you set the option settings.rememberUnknownChunks to 1. By default, this option is off and is 0. The encoder will always encode unknown chunks that are stored in the infoPng. If you need it to add a particular chunk that isn't known by LodePNG, you can use LodePNG_append_chunk or LodePNG_create_chunk to the chunk data in infoPng.unknown_chunks.data[x]. Chunks that are known by LodePNG should not be added in that way. E.g. to make LodePNG add a bKGD chunk, set background_defined to true and add the correct parameters there and LodePNG will generate the chunk. 9. compiler support ------------------- No libraries other than the current standard C library are needed to compile LodePNG. For the C++ version, only the standard C++ library is needed on top. Add the files lodepng.c(pp) and lodepng.h to your project, include lodepng.h where needed, and your program can read/write PNG files. Use optimization! For both the encoder and decoder, compiling with the best optimizations makes a large difference. Make sure that LodePNG is compiled with the same compiler of the same version and with the same settings as the rest of the program, or the interfaces with std::vectors and std::strings in C++ can be incompatible resulting in bad things. CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. *) gcc and g++ LodePNG is developed in gcc so this compiler is natively supported. It gives no warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ version 4.5.1 on Linux. *) Mingw and Bloodshed DevC++ The Mingw compiler (a port of gcc) used by Bloodshed DevC++ for Windows is fully supported by LodePNG. *) Visual Studio 2005 and Visual C++ 2005 Express Edition Versions 20070604 up to 20080107 have been tested on VS2005 and work. Visual studio may give warnings about 'fopen' being deprecated. A multiplatform library can't support the proposed Visual Studio alternative however. If you're using LodePNG in VS2005 and don't want to see the deprecated warnings, put this on top of lodepng.h before the inclusions: #define _CRT_SECURE_NO_DEPRECATE *) Visual Studio 6.0 The C++ version of LodePNG was not supported by Visual Studio 6.0 because Visual Studio 6.0 doesn't follow the C++ standard and implements it incorrectly. The current C version of LodePNG has not been tested in VS6 but may work now. *) Comeau C/C++ Vesion 20070107 compiles without problems on the Comeau C/C++ Online Test Drive at http://www.comeaucomputing.com/tryitout in both C90 and C++ mode. *) Compilers on Macintosh LodePNG has been reported to work both with the gcc and LLVM for Macintosh, both for C and C++. *) Other Compilers If you encounter problems on other compilers, I'm happy to help out make LodePNG support the compiler if it supports the ISO C90 and C++ standard well enough and the required modification doesn't require using non standard or less good C/C++ code or headers. 10. examples ------------ This decoder and encoder example show the most basic usage of LodePNG (using the classes, not the simple functions, which would be trivial) More complex examples can be found in: -lodepng_examples.c: 9 different examples in C, such as showing the image with SDL, ... -lodepng_examples.cpp: the same examples in C++ using the C++ wrapper of LodePNG These files can be found on the LodePNG website or searched for on the internet. 10.1. decoder C++ example ------------------------- //////////////////////////////////////////////////////////////////////////////// #include "lodepng.h" #include int main(int argc, char *argv[]) { const char* filename = argc > 1 ? argv[1] : "test.png"; //load and decode std::vector buffer, image; //buffer will contain the PNG file, image will contain the raw pixels LodePNG::loadFile(buffer, filename); //load the image file with given filename LodePNG::Decoder decoder; decoder.decode(image, buffer.size() ? &buffer[0] : 0, (unsigned)buffer.size()); //decode the png //if there's an error, display it if(decoder.hasError()) std::cout << "error " << decoder.getError() << ": "<< LodePNG_error_text(decoder.getError()) << std::endl; int width = decoder.getWidth(); //get the width in pixels int height = decoder.getHeight(); //get the height in pixels //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... } //alternative version using the "simple" function int main(int argc, char *argv[]) { const char* filename = argc > 1 ? argv[1] : "test.png"; //load and decode std::vector image; unsigned width, height; unsigned error = LodePNG::decode(image, width, height, filename); //if there's an error, display it if(error != 0) std::cout << "error " << error << ": " << LodePNG_error_text(error) << std::endl; //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... } //////////////////////////////////////////////////////////////////////////////// 10.2. encoder C++ example ------------------------- //////////////////////////////////////////////////////////////////////////////// #include "lodepng.h" #include //saves image to filename given as argument. Warning, this overwrites the file without warning! int main(int argc, char *argv[]) { //check if user gave a filename if(argc <= 1) { std::cout << "please provide a filename to save to\n"; return 0; } //generate some image std::vector image; image.resize(512 * 512 * 4); for(unsigned y = 0; y < 512; y++) for(unsigned x = 0; x < 512; x++) { image[4 * 512 * y + 4 * x + 0] = 255 * !(x & y); image[4 * 512 * y + 4 * x + 1] = x ^ y; image[4 * 512 * y + 4 * x + 2] = x | y; image[4 * 512 * y + 4 * x + 3] = 255; } //encode and save, using the Encoder class std::vector buffer; LodePNG::Encoder encoder; encoder.encode(buffer, image, 512, 512); LodePNG::saveFile(buffer, argv[1]); //the same as the 4 lines of code above, but in 1 call without the class: //LodePNG::encode(argv[1], image, 512, 512); } //////////////////////////////////////////////////////////////////////////////// 10.3. Decoder C example ----------------------- This example loads the PNG from a file into a pixel buffer in 1 function call #include "lodepng.h" int main(int argc, char *argv[]) { unsigned error; unsigned char* image; size_t width, height; if(argc <= 1) return 0; error = LodePNG_decode32_file(&image, &width, &height, filename); if(error != 0) printf("error %u: %s\n", error, LodePNG_error_text(error)); //use image here free(image); } 11. changes ----------- The version number of LodePNG is the date of the change given in the format yyyymmdd. Some changes aren't backwards compatible. Those are indicated with a (!) symbol. *) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. *) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. A bug with the PNG filtertype heuristic was fixed, so that it chooses much better ones (it's quite significant). A setting to do an experimental, slow, brute force search for PNG filter types is added. *) 17 aug 2011 (!): changed some C zlib related function names. *) 16 aug 2011: made the code less wide (max 120 characters per line). *) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. *) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. *) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman to optimize long sequences of zeros. *) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and LodePNG_InfoColor_canHaveAlpha functions for convenience. *) 7 nov 2010: added LodePNG_error_text function to get error code description. *) 30 okt 2010: made decoding slightly faster *) 26 okt 2010: (!) changed some C function and struct names (more consistent). Reorganized the documentation and the declaration order in the header. *) 08 aug 2010: only changed some comments and external samples. *) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. *) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. *) 02 sep 2008: fixed bug where it could create empty tree that linux apps could read by ignoring the problem but windows apps couldn't. *) 06 jun 2008: added more error checks for out of memory cases. *) 26 apr 2008: added a few more checks here and there to ensure more safety. *) 06 mar 2008: crash with encoding of strings fixed *) 02 feb 2008: support for international text chunks added (iTXt) *) 23 jan 2008: small cleanups, and #defines to divide code in sections *) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. *) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. *) 17 jan 2008: ability to encode and decode compressed zTXt chunks added Also vareous fixes, such as in the deflate and the padding bits code. *) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved filtering code of encoder. *) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A C++ wrapper around this provides an interface almost identical to before. Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code are together in these files but it works both for C and C++ compilers. *) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks *) 30 aug 2007: bug fixed which makes this Borland C++ compatible *) 09 aug 2007: some VS2005 warnings removed again *) 21 jul 2007: deflate code placed in new namespace separate from zlib code *) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images *) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing invalid std::vector element [0] fixed, and level 3 and 4 warnings removed *) 02 jun 2007: made the encoder add a tag with version by default *) 27 may 2007: zlib and png code separated (but still in the same file), simple encoder/decoder functions added for more simple usage cases *) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), moved some examples from here to lodepng_examples.cpp *) 12 may 2007: palette decoding bug fixed *) 24 apr 2007: changed the license from BSD to the zlib license *) 11 mar 2007: very simple addition: ability to encode bKGD chunks. *) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding palettized PNG images. Plus little interface change with palette and texts. *) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. Fixed a bug where the end code of a block had length 0 in the Huffman tree. *) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented and supported by the encoder, resulting in smaller PNGs at the output. *) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. *) 24 jan 2007: gave encoder an error interface. Added color conversion from any greyscale type to 8-bit greyscale with or without alpha. *) 21 jan 2007: (!) Totally changed the interface. It allows more color types to convert to and is more uniform. See the manual for how it works now. *) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: encode/decode custom tEXt chunks, separate classes for zlib & deflate, and at last made the decoder give errors for incorrect Adler32 or Crc. *) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. *) 29 dec 2006: Added support for encoding images without alpha channel, and cleaned out code as well as making certain parts faster. *) 28 dec 2006: Added "Settings" to the encoder. *) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. Removed some code duplication in the decoder. Fixed little bug in an example. *) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. Fixed a bug of the decoder with 16-bit per color. *) 15 okt 2006: Changed documentation structure *) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the given image buffer, however for now it's not compressed. *) 08 sep 2006: (!) Changed to interface with a Decoder class *) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different way. Renamed decodePNG to decodePNGGeneric. *) 29 jul 2006: (!) Changed the interface: image info is now returned as a struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. *) 28 jul 2006: Cleaned the code and added new error checks. Corrected terminology "deflate" into "inflate". *) 23 jun 2006: Added SDL example in the documentation in the header, this example allows easy debugging by displaying the PNG and its transparency. *) 22 jun 2006: (!) Changed way to obtain error value. Added loadFile function for convenience. Made decodePNG32 faster. *) 21 jun 2006: (!) Changed type of info vector to unsigned. Changed position of palette in info vector. Fixed an important bug that happened on PNGs with an uncompressed block. *) 16 jun 2006: Internally changed unsigned into unsigned where needed, and performed some optimizations. *) 07 jun 2006: (!) Renamed functions to decodePNG and placed them in LodePNG namespace. Changed the order of the parameters. Rewrote the documentation in the header. Renamed files to lodepng.cpp and lodepng.h *) 22 apr 2006: Optimized and improved some code *) 07 sep 2005: (!) Changed to std::vector interface *) 12 aug 2005: Initial release (C++, decoder only) 12. contact information ----------------------- Feel free to contact me with suggestions, problems, comments, ... concerning LodePNG. If you encounter a PNG image that doesn't work properly with this decoder, feel free to send it and I'll use it to find and fix the problem. My email address is (puzzle the account and domain together with an @ symbol): Domain: gmail dot com. Account: lode dot vandevenne. Copyright (c) 2005-2011 Lode Vandevenne */ #endif openscad-2013.01+dfsg.orig/tests/csgtermtest.cc0000644000175000017500000000757311777162366021001 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "PolySetEvaluator.h" #include "CSGTermEvaluator.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include "csgterm.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::cout; int main(int argc, char **argv) { if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfilename = argv[2]; int rc = 0; Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy( fs::current_path() ); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; const AbstractNode *root_node; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); Tree tree(root_node); // cout << tree.getString(*root_node) << "\n"; std::vector > highlights; std::vector > background; PolySetEvaluator psevaluator(tree); CSGTermEvaluator evaluator(tree, &psevaluator); shared_ptr root_term = evaluator.evaluateCSGTerm(*root_node, highlights, background); // cout << "Stored terms: " << evaluator.stored_term.size() << "\n"; // for (map::iterator iter = evaluator.stored_term.begin(); // iter != evaluator.stored_term.end(); // iter++) { // cout << iter->first << ":" << (iter->second ? iter->second->label : "NULL") << "\n"; // } // if (evaluator.background) cout << "Background terms: " << evaluator.background->size() << "\n"; // if (evaluator.highlights) cout << "Highlights terms: " << evaluator.highlights->size() << "\n"; current_path(original_path); std::ofstream outfile; outfile.open(outfilename); if (root_term) { outfile << root_term->dump() << "\n"; } else { outfile << "No top-level CSG object\n"; } outfile.close(); delete root_node; delete root_module; Builtins::instance(true); return rc; } openscad-2013.01+dfsg.orig/tests/opencsgtest.cc0000644000175000017500000000015611653623140020742 0ustar chrysnchrysn#include "csgtestcore.h" int main(int argc, char* argv[]) { return csgtestcore(argc, argv, TEST_OPENCSG); } openscad-2013.01+dfsg.orig/tests/test_cmdline_tool.py0000755000175000017500000002203711720162277022167 0ustar chrysnchrysn#!/usr/bin/env python # # Regression test driver for cmd-line tools # # Usage: test_cmdline_tool.py [] # # If the -g option is given or the TEST_GENERATE environment variable is set to 1, # *-expected. files will be generated instead of running the tests. # # Any generated output is written to the file `basename # Any warning or errors are written to stderr. # # Returns 0 on passed test # 1 on error # 2 on invalid cmd-line options # # Author: Marius Kintel # import sys import os import glob import subprocess import re import getopt import shutil import platform import string def initialize_environment(): if not options.generate: options.generate = bool(os.getenv("TEST_GENERATE")) return True def init_expected_filename(testname, cmd): global expecteddir, expectedfilename expecteddir = os.path.join(options.regressiondir, os.path.split(cmd)[1]) expectedfilename = os.path.join(expecteddir, testname + "-expected." + options.suffix) expectedfilename = os.path.normpath( expectedfilename ) def verify_test(testname, cmd): global expectedfilename if not options.generate: if not os.path.isfile(expectedfilename): print >> sys.stderr, "Error: test '%s' is missing expected output in %s" % (testname, expectedfilename) return False return True def execute_and_redirect(cmd, params, outfile): retval = -1 try: proc = subprocess.Popen([cmd] + params, stdout=outfile, stderr=subprocess.STDOUT) out = proc.communicate()[0] retval = proc.wait() except: print >> sys.stderr, "Error running subprocess: ", sys.exc_info()[1] print >> sys.stderr, " cmd:", cmd print >> sys.stderr, " params:", params print >> sys.stderr, " outfile:", outfile if outfile == subprocess.PIPE: return (retval, out) else: return retval def get_normalized_text(filename): try: f = open(filename) text = f.read() except: text = '' return text.strip("\r\n").replace("\r\n", "\n") + "\n" def compare_text(expected, actual): return get_normalized_text(expected) == get_normalized_text(actual) def compare_default(resultfilename): print >> sys.stderr, 'diff text compare: ' print >> sys.stderr, ' expected textfile: ', expectedfilename print >> sys.stderr, ' actual textfile: ', resultfilename if not compare_text(expectedfilename, resultfilename): if resultfilename: execute_and_redirect("diff", [expectedfilename, resultfilename], sys.stderr) return False return True def compare_png(resultfilename): compare_method = 'pixel' #args = [expectedfilename, resultfilename, "-alpha", "Off", "-compose", "difference", "-composite", "-threshold", "10%", "-blur", "2", "-threshold", "30%", "-format", "%[fx:w*h*mean]", "info:"] args = [expectedfilename, resultfilename, "-alpha", "Off", "-compose", "difference", "-composite", "-threshold", "10%", "-morphology", "Erode", "Square", "-format", "%[fx:w*h*mean]", "info:"] # for systems with older imagemagick that doesnt support '-morphology' # http://www.imagemagick.org/Usage/morphology/#alturnative if options.comparator == 'old': args = [expectedfilename, resultfilename, "-alpha", "Off", "-compose", "difference", "-composite", "-threshold", "10%", "-gaussian-blur","3x65535", "-threshold", "99.99%", "-format", "%[fx:w*h*mean]", "info:"] if options.comparator == 'ncc': # for systems where imagemagick crashes when using the above comparators args = [expectedfilename, resultfilename, "-alpha", "Off", "-compose", "difference", "-metric", "NCC", "tmp.png"] options.convert_exec = 'compare' compare_method = 'NCC' msg = 'ImageMagick image comparison: ' + options.convert_exec + ' '+ ' '.join(args[2:]) msg += '\n expected image: ' + expectedfilename + '\n' print >> sys.stderr, msg if not resultfilename: print >> sys.stderr, "Error: OpenSCAD did not generate an image to test" return False print >> sys.stderr, ' actual image: ', resultfilename (retval, output) = execute_and_redirect(options.convert_exec, args, subprocess.PIPE) print "Imagemagick return", retval, "output:", output if retval == 0: if compare_method=='pixel': pixelerr = int(float(output.strip())) if pixelerr < 32: return True else: print >> sys.stderr, pixelerr, ' pixel errors' elif compare_method=='NCC': thresh = 0.95 ncc_err = float(output.strip()) if ncc_err > thresh or ncc_err==0.0: return True else: print >> sys.stderr, ncc_err, ' Images differ: NCC comparison < ', thresh return False def compare_with_expected(resultfilename): if not options.generate: if "compare_" + options.suffix in globals(): return globals()["compare_" + options.suffix](resultfilename) else: return compare_default(resultfilename) return True def run_test(testname, cmd, args): cmdname = os.path.split(options.cmd)[1] outputdir = os.path.join(os.getcwd(), cmdname + "-output") actualfilename = os.path.join(outputdir, testname + "-actual." + options.suffix) actualfilename = os.path.normpath(actualfilename) if options.generate: if not os.path.exists(expecteddir): os.makedirs(expecteddir) outputname = expectedfilename else: if not os.path.exists(outputdir): os.makedirs(outputdir) outputname = actualfilename outputname = os.path.normpath( outputname ) outfile = open(outputname, "wb") try: if os.path.isfile(cmd+'.exe') and options.mingw_cross_env: cmdline = ['wine']+[cmd+'.exe'] + args + [outputname] else: cmdline = [cmd] + args + [outputname] proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE) errtext = proc.communicate()[1] if errtext != None and len(errtext) > 0: print >> sys.stderr, "Error output: " + errtext outfile.close() if proc.returncode != 0: print >> sys.stderr, "Error: %s failed with return code %d" % (cmdname, proc.returncode) return None return outputname except OSError, err: print >> sys.stderr, "Error: %s \"%s\"" % (err.strerror, cmd) return None class Options: def __init__(self): self.__dict__['options'] = {} def __setattr__(self, name, value): self.options[name] = value def __getattr__(self, name): return self.options[name] def usage(): print >> sys.stderr, "Usage: " + sys.argv[0] + " [] " print >> sys.stderr, "Options:" print >> sys.stderr, " -g, --generate Generate expected output for the given tests" print >> sys.stderr, " -s, --suffix= Write -expected and -actual files with the given suffix instead of .txt" print >> sys.stderr, " -t, --test= Specify test name instead of deducting it from the argument" print >> sys.stderr, " -c, --convexec= Path to ImageMagick 'convert' executable" print >> sys.stderr, " -x, --mingw-cross-env Mingw-cross-env cross compilation" if __name__ == '__main__': # Handle command-line arguments try: opts, args = getopt.getopt(sys.argv[1:], "gs:c:t:m:x", ["generate", "convexec=", "suffix=", "test=", "comparator=", "mingw-cross-env"]) except getopt.GetoptError, err: usage() sys.exit(2) global options options = Options() options.regressiondir = os.path.join(os.path.split(sys.argv[0])[0], "regression") options.generate = False options.suffix = "txt" for o, a in opts: if o in ("-g", "--generate"): options.generate = True elif o in ("-s", "--suffix"): if a[0] == '.': options.suffix = a[1:] else: options.suffix = a elif o in ("-t", "--test"): options.testname = a elif o in ("-c", "--convexec"): options.convert_exec = os.path.normpath( a ) elif o in ("-m", "--comparator"): options.comparator = a elif o in ("-x", "--mingw-cross-env"): options.mingw_cross_env = True # and if len(args) < 2: usage() sys.exit(2) options.cmd = args[0] # If only one test file, we can usually deduct the test name from the file if len(args) == 2: basename = os.path.splitext(args[1])[0] path, options.testname = os.path.split(basename) if not hasattr(options, "testname"): print >> sys.stderr, "Test name cannot be deducted from arguments. Specify test name using the -t option" sys.exit(2) # Initialize and verify run-time environment if not initialize_environment(): sys.exit(1) init_expected_filename(options.testname, options.cmd) # Verify test environment verification = verify_test(options.testname, options.cmd) resultfile = run_test(options.testname, options.cmd, args[1:]) if not verification or not compare_with_expected(resultfile): exit(1) openscad-2013.01+dfsg.orig/tests/bboxhelp.cc0000644000175000017500000000067411653126251020215 0ustar chrysnchrysn/* Work around bugs in MSVC compiler with Eigen AlignmentBox bbox.min and bbox.max will fail with Syntax Errors if placed inside of cgalpngtest.cc */ #include "linalg.h" Vector3d getBoundingCenter(BoundingBox bbox) { Vector3d center = (bbox.min() + bbox.max()) / 2; return center; // Vector3d(0,0,0); } double getBoundingRadius(BoundingBox bbox) { double radius = (bbox.max() - bbox.min()).norm() / 2; return radius; // 0; } openscad-2013.01+dfsg.orig/tests/OffscreenView.h0000644000175000017500000000157011667754403021030 0ustar chrysnchrysn#ifndef OFFSCREENVIEW_H_ #define OFFSCREENVIEW_H_ #include "OffscreenContext.h" #include #include #include #ifndef _MSC_VER #include #endif class OffscreenView { public: OffscreenView(size_t width, size_t height); ~OffscreenView(); void setRenderer(class Renderer* r); void setCamera(const Eigen::Vector3d &pos, const Eigen::Vector3d ¢er); void initializeGL(); void resizeGL(int w, int h); void setupPerspective(); void setupOrtho(bool offset=false); void paintGL(); bool save(const char *filename); std::string getInfo(); GLint shaderinfo[11]; OffscreenContext *ctx; size_t width; size_t height; private: Renderer *renderer; double w_h_ratio; Eigen::Vector3d object_rot; Eigen::Vector3d camera_eye; Eigen::Vector3d camera_center; bool orthomode; bool showaxes; bool showfaces; bool showedges; }; #endif openscad-2013.01+dfsg.orig/tests/imageutils.cc0000644000175000017500000000063711653126251020554 0ustar chrysnchrysn#include "imageutils.h" #include void flip_image(const unsigned char *src, unsigned char *dst, size_t pixelsize, size_t width, size_t height) { size_t rowBytes = pixelsize * width; for (size_t i = 0 ; i < height ; i++) { memmove(dst + (height - i - 1) * rowBytes, src + i * rowBytes, rowBytes); } } #ifdef __APPLE__ #include "imageutils-macosx.cc" #else #include "imageutils-lodepng.cc" #endif openscad-2013.01+dfsg.orig/tests/CSGTextRenderer.cc0000644000175000017500000001105012000421643021336 0ustar chrysnchrysn#include "CSGTextRenderer.h" #include #include #include #include "visitor.h" #include "state.h" #include "module.h" // FIXME: Temporarily for ModuleInstantiation #include "csgnode.h" #include "transformnode.h" #include #include #include bool CSGTextRenderer::isCached(const AbstractNode &node) { return this->cache.contains(node); } /*! Modifies target by applying op to target and src: target = target [op] src */ void CSGTextRenderer::process(string &target, const string &src, CSGTextRenderer::CsgOp op) { // if (target.dim != 2 && target.dim != 3) { // assert(false && "Dimension of Nef polyhedron must be 2 or 3"); // } switch (op) { case UNION: target += "+" + src; break; case INTERSECTION: target += "*" + src; break; case DIFFERENCE: target += "-" + src; break; case MINKOWSKI: target += "M" + src; break; } } void CSGTextRenderer::applyToChildren(const AbstractNode &node, CSGTextRenderer::CsgOp op) { std::stringstream stream; stream << node.name() << node.index(); string N = stream.str(); if (this->visitedchildren[node.index()].size() > 0) { // FIXME: assert that cache contains nodes in code below bool first = true; for (ChildList::const_iterator iter = this->visitedchildren[node.index()].begin(); iter != this->visitedchildren[node.index()].end(); iter++) { const AbstractNode *chnode = *iter; assert(this->cache.contains(*chnode)); // FIXME: Don't use deep access to modinst members if (chnode->modinst->tag_background) continue; if (first) { N += "(" + this->cache[*chnode]; // if (N.dim != 0) first = false; // FIXME: when can this happen? first = false; } else { process(N, this->cache[*chnode], op); } chnode->progress_report(); } N += ")"; } this->cache.insert(node, N); } /* Typical visitor behavior: o In prefix: Check if we're cached -> prune o In postfix: Check if we're cached -> don't apply operator to children o In postfix: addToParent() */ Response CSGTextRenderer::visit(State &state, const AbstractNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { if (!isCached(node)) applyToChildren(node, UNION); addToParent(state, node); } return ContinueTraversal; } Response CSGTextRenderer::visit(State &state, const AbstractIntersectionNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { if (!isCached(node)) applyToChildren(node, INTERSECTION); addToParent(state, node); } return ContinueTraversal; } Response CSGTextRenderer::visit(State &state, const CsgNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { if (!isCached(node)) { CsgOp op; switch (node.type) { case CSG_TYPE_UNION: op = UNION; break; case CSG_TYPE_DIFFERENCE: op = DIFFERENCE; break; case CSG_TYPE_INTERSECTION: op = INTERSECTION; break; } applyToChildren(node, op); } addToParent(state, node); } return ContinueTraversal; } Response CSGTextRenderer::visit(State &state, const TransformNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { if (!isCached(node)) { // First union all children applyToChildren(node, UNION); // FIXME: Then apply transform } addToParent(state, node); } return ContinueTraversal; } // FIXME: RenderNode: Union over children + some magic // FIXME: CgaladvNode: Iterate over children. Special operation // FIXME: Subtypes of AbstractPolyNode: // ProjectionNode // DxfLinearExtrudeNode // DxfRotateExtrudeNode // (SurfaceNode) // (PrimitiveNode) Response CSGTextRenderer::visit(State &state, const AbstractPolyNode &node) { if (state.isPrefix() && isCached(node)) return PruneTraversal; if (state.isPostfix()) { if (!isCached(node)) { // FIXME: Manage caching // FIXME: Will generate one single Nef polyhedron (no csg ops necessary) string N = node.name(); this->cache.insert(node, N); // std::cout << "Insert: " << N << "\n"; // std::cout << "Node: " << cacheid.toStdString() << "\n\n"; } addToParent(state, node); } return ContinueTraversal; } /*! Adds ourself to out parent's list of traversed children. Call this for _every_ node which affects output during the postfix traversal. */ void CSGTextRenderer::addToParent(const State &state, const AbstractNode &node) { assert(state.isPostfix()); this->visitedchildren.erase(node.index()); if (state.parent()) { this->visitedchildren[state.parent()->index()].push_back(&node); } } openscad-2013.01+dfsg.orig/tests/dumptest.cc0000644000175000017500000001025412014547110020243 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and * Marius Kintel * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests-common.h" #include "openscad.h" #include "parsersettings.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include #ifndef _MSC_VER #include #endif #include #include #include #include #include namespace fs = boost::filesystem; #include "boosty.h" std::string commandline_commands; std::string currentdir; QString examplesdir; using std::string; string dumptree(const Tree &tree, const AbstractNode &node) { std::stringstream str; const std::vector &children = node.getChildren(); for (std::vector::const_iterator iter = children.begin(); iter != children.end(); iter++) { str << tree.getString(**iter) << "\n"; } return str.str(); } int main(int argc, char **argv) { #ifdef _MSC_VER _set_output_format(_TWO_DIGIT_EXPONENT); #endif if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; const char *outfilename = argv[2]; int rc = 0; Builtins::instance()->initialize(); QCoreApplication app(argc, argv); fs::path original_path = fs::current_path(); currentdir = boosty::stringy(fs::current_path()); parser_init(QCoreApplication::instance()->applicationDirPath().toStdString()); add_librarydir(boosty::stringy(fs::path(QCoreApplication::instance()->applicationDirPath().toStdString()) / "../libraries")); Context root_ctx; register_builtin(root_ctx); AbstractModule *root_module; ModuleInstantiation root_inst; AbstractNode *root_node; root_module = parsefile(filename); if (!root_module) { exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); Tree tree; tree.setRoot(root_node); string dumpstdstr = dumptree(tree, *root_node); string dumpstdstr_cached = dumptree(tree, *root_node); if (dumpstdstr != dumpstdstr_cached) { fprintf(stderr, "Error: Dump cached failed\n"); exit(1); } fs::current_path(original_path); std::ofstream outfile; outfile.open(outfilename); outfile << dumpstdstr << "\n"; outfile.close(); delete root_node; delete root_module; root_module = parsefile(outfilename); if (!root_module) { fprintf(stderr, "Error: Unable to read back dumped file\n"); exit(1); } if (fs::path(filename).has_parent_path()) { fs::current_path(fs::path(filename).parent_path()); } AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); tree.setRoot(root_node); string readbackstr = dumptree(tree, *root_node); if (dumpstdstr != readbackstr) { fprintf(stderr, "Error: Readback is different from original dump:\n"); fprintf(stderr, "Original:\n%s", dumpstdstr.c_str()); fprintf(stderr, "Readback:\n%s", readbackstr.c_str()); exit(1); } delete root_node; delete root_module; Builtins::instance(true); return rc; } openscad-2013.01+dfsg.orig/tests/OffscreenContext.mm0000644000175000017500000001013712014546344021711 0ustar chrysnchrysn#include "OffscreenContext.h" #include "imageutils.h" #include "fbo.h" #include #include #import // for NSOpenGL... #include #include #define REPORTGLERROR(task) { GLenum tGLErr = glGetError(); if (tGLErr != GL_NO_ERROR) { std::cout << "OpenGL error " << tGLErr << " while " << task << "\n"; } } struct OffscreenContext { NSOpenGLContext *openGLContext; NSAutoreleasePool *pool; int width; int height; fbo_t *fbo; }; std::string offscreen_context_getinfo(OffscreenContext *ctx) { std::stringstream out; struct utsname name; uname(&name); SInt32 majorVersion,minorVersion,bugFixVersion; Gestalt(gestaltSystemVersionMajor, &majorVersion); Gestalt(gestaltSystemVersionMinor, &minorVersion); Gestalt(gestaltSystemVersionBugFix, &bugFixVersion); const char *arch = "unknown"; if (sizeof(int*) == 4) arch = "32-bit"; else if (sizeof(int*) == 8) arch = "64-bit"; out << "GL context creator: Cocoa / CGL\n" << "PNG generator: Core Foundation\n" << "OS info: Mac OS X " << majorVersion << "." << minorVersion << "." << bugFixVersion << " (" << name.machine << " kernel)\n" << "Machine: " << arch << "\n"; return out.str(); } OffscreenContext *create_offscreen_context(int w, int h) { OffscreenContext *ctx = new OffscreenContext; ctx->width = w; ctx->height = h; ctx->pool = [NSAutoreleasePool new]; // Create an OpenGL context just so that OpenGL calls will work. // Will not be used for actual rendering. NSOpenGLPixelFormatAttribute attributes[] = { NSOpenGLPFAPixelBuffer, NSOpenGLPFANoRecovery, NSOpenGLPFADepthSize, 24, NSOpenGLPFAStencilSize, 8, // Took out the acceleration requirement to be able to run the tests // in a non-accelerated VM. // NSOpenGLPFAAccelerated, (NSOpenGLPixelFormatAttribute) 0 }; NSOpenGLPixelFormat *pixFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attributes] autorelease]; // Create and make current the OpenGL context to render with (with color and depth buffers) ctx->openGLContext = [[NSOpenGLContext alloc] initWithFormat:pixFormat shareContext:nil]; if (!ctx->openGLContext) { std::cerr << "Unable to create NSOpenGLContext\n"; return NULL; } [ctx->openGLContext makeCurrentContext]; // glewInit must come after Context creation and before FBO calls. GLenum err = glewInit(); if (GLEW_OK != err) { std::cerr << "Unable to init GLEW: " << glewGetErrorString(err) << std::endl; return NULL; } glew_dump(); ctx->fbo = fbo_new(); if (!fbo_init(ctx->fbo, w, h)) { return NULL; } return ctx; } bool teardown_offscreen_context(OffscreenContext *ctx) { fbo_unbind(ctx->fbo); fbo_delete(ctx->fbo); /* * Cleanup */ [ctx->openGLContext clearDrawable]; [ctx->openGLContext release]; [ctx->pool release]; return true; } /*! Capture framebuffer from OpenGL and write it to the given filename as PNG. */ bool save_framebuffer(OffscreenContext *ctx, const char *filename) { if (!ctx || !filename) return false; // Read pixels from OpenGL int samplesPerPixel = 4; // R, G, B and A int rowBytes = samplesPerPixel * ctx->width; unsigned char *bufferData = (unsigned char *)malloc(rowBytes * ctx->height); if (!bufferData) { std::cerr << "Unable to allocate buffer for image extraction."; return 1; } glReadPixels(0, 0, ctx->width, ctx->height, GL_RGBA, GL_UNSIGNED_BYTE, bufferData); REPORTGLERROR("reading pixels from framebuffer"); // Flip it vertically - images read from OpenGL buffers are upside-down unsigned char *flippedBuffer = (unsigned char *)malloc(rowBytes * ctx->height); if (!flippedBuffer) { std::cout << "Unable to allocate flipped buffer for corrected image."; return 1; } flip_image(bufferData, flippedBuffer, samplesPerPixel, ctx->width, ctx->height); bool writeok = write_png(filename, flippedBuffer, ctx->width, ctx->height); free(flippedBuffer); free(bufferData); return writeok; } void bind_offscreen_context(OffscreenContext *ctx) { fbo_bind(ctx->fbo); } openscad-2013.01+dfsg.orig/openscad.pro0000644000175000017500000002153612076022154017254 0ustar chrysnchrysn# Environment variables which can be set to specify library locations: # MPIRDIR # MPFRDIR # BOOSTDIR # CGALDIR # EIGENDIR # GLEWDIR # OPENCSGDIR # OPENSCAD_LIBRARIES # # Please see the 'Buildling' sections of the OpenSCAD user manual # for updated tips & workarounds. # # http://en.wikibooks.org/wiki/OpenSCAD_User_Manual isEmpty(QT_VERSION) { error("Please use qmake for Qt 4 (probably qmake-qt4)") } # Auto-include config_.pri if the VARIANT variable is give on the # command-line, e.g. qmake VARIANT=mybuild !isEmpty(VARIANT) { message("Variant: $${VARIANT}") exists(config_$${VARIANT}.pri) { message("Including config_$${VARIANT}.pri") include(config_$${VARIANT}.pri) } } # Populate VERSION, VERSION_YEAR, VERSION_MONTH, VERSION_DATE from system date include(version.pri) # for debugging link problems (use nmake -f Makefile.Release > log.txt) win32 { # QMAKE_LFLAGS += -VERBOSE } debug: DEFINES += DEBUG TEMPLATE = app INCLUDEPATH += src # Handle custom library location. # Used when manually installing 3rd party libraries OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES) !isEmpty(OPENSCAD_LIBDIR) { QMAKE_INCDIR_QT = $$OPENSCAD_LIBDIR/include $$QMAKE_INCDIR_QT QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib $$QMAKE_LIBDIR } else { macx { # Default to MacPorts on Mac OS X QMAKE_INCDIR = /opt/local/include QMAKE_LIBDIR = /opt/local/lib } } macx { # add CONFIG+=deploy to the qmake command-line to make a deployment build deploy { message("Building deployment version") CONFIG += x86 x86_64 } TARGET = OpenSCAD ICON = icons/OpenSCAD.icns QMAKE_INFO_PLIST = Info.plist APP_RESOURCES.path = Contents/Resources APP_RESOURCES.files = OpenSCAD.sdef QMAKE_BUNDLE_DATA += APP_RESOURCES LIBS += -framework Carbon } else { TARGET = openscad } win32 { RC_FILE = openscad_win32.rc } CONFIG += qt QT += opengl # see http://fedoraproject.org/wiki/UnderstandingDSOLinkChange # and https://github.com/openscad/openscad/pull/119 # ( QT += opengl does not automatically link glu on some DSO systems. ) unix:!macx { QMAKE_LIBS_OPENGL *= -lGLU QMAKE_LIBS_OPENGL *= -lX11 } netbsd* { QMAKE_LFLAGS += -L/usr/X11R7/lib QMAKE_LFLAGS += -Wl,-R/usr/X11R7/lib QMAKE_LFLAGS += -Wl,-R/usr/pkg/lib !isEmpty(OPENSCAD_LIBDIR) { QMAKE_CFLAGS = -I$$OPENSCAD_LIBDIR/include $$QMAKE_CFLAGS QMAKE_CXXFLAGS = -I$$OPENSCAD_LIBDIR/include $$QMAKE_CXXFLAGS QMAKE_LFLAGS = -L$$OPENSCAD_LIBDIR/lib $$QMAKE_LFLAGS QMAKE_LFLAGS = -Wl,-R$$OPENSCAD_LIBDIR/lib $$QMAKE_LFLAGS } } # Prevent LD_LIBRARY_PATH problems when running the openscad binary # on systems where uni-build-dependencies.sh was used. # Will not affect 'normal' builds. !isEmpty(OPENSCAD_LIBDIR) { unix:!macx { QMAKE_LFLAGS = -Wl,-R$$OPENSCAD_LIBDIR/lib $$QMAKE_LFLAGS # need /lib64 beause GLEW installs itself there on 64 bit machines QMAKE_LFLAGS = -Wl,-R$$OPENSCAD_LIBDIR/lib64 $$QMAKE_LFLAGS } } # See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs. *g++* { QMAKE_CXXFLAGS *= -fno-strict-aliasing } *clang* { # disable enormous amount of warnings about CGAL QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions # might want to actually turn this on once in a while QMAKE_CXXFLAGS_WARN_ON += -Wno-sign-compare } CONFIG(skip-version-check) { # force the use of outdated libraries DEFINES += OPENSCAD_SKIP_VERSION_CHECK } # Application configuration macx:CONFIG += mdi CONFIG += cgal CONFIG += opencsg CONFIG += boost CONFIG += eigen #Uncomment the following line to enable QCodeEdit #CONFIG += qcodeedit mdi { DEFINES += ENABLE_MDI } DEFINES += USE_PROGRESSWIDGET include(common.pri) # mingw has to come after other items so OBJECT_DIRS will work properly CONFIG(mingw-cross-env) { include(mingw-cross-env.pri) } win32 { FLEXSOURCES = src/lexer.l BISONSOURCES = src/parser.y } else { LEXSOURCES += src/lexer.l YACCSOURCES += src/parser.y } RESOURCES = openscad.qrc FORMS += src/MainWindow.ui \ src/Preferences.ui \ src/OpenCSGWarningDialog.ui \ src/AboutDialog.ui \ src/ProgressWidget.ui HEADERS += src/version_check.h \ src/ProgressWidget.h \ src/parsersettings.h \ src/renderer.h \ src/rendersettings.h \ src/ThrownTogetherRenderer.h \ src/CGAL_renderer.h \ src/OGL_helper.h \ src/GLView.h \ src/MainWindow.h \ src/Preferences.h \ src/OpenCSGWarningDialog.h \ src/AboutDialog.h \ src/builtin.h \ src/context.h \ src/csgterm.h \ src/csgtermnormalizer.h \ src/dxfdata.h \ src/dxfdim.h \ src/dxftess.h \ src/export.h \ src/expression.h \ src/function.h \ src/grid.h \ src/highlighter.h \ src/module.h \ src/node.h \ src/csgnode.h \ src/linearextrudenode.h \ src/rotateextrudenode.h \ src/projectionnode.h \ src/cgaladvnode.h \ src/importnode.h \ src/transformnode.h \ src/colornode.h \ src/rendernode.h \ src/openscad.h \ src/handle_dep.h \ src/polyset.h \ src/printutils.h \ src/value.h \ src/progress.h \ src/editor.h \ src/visitor.h \ src/state.h \ src/traverser.h \ src/nodecache.h \ src/nodedumper.h \ src/ModuleCache.h \ src/PolySetCache.h \ src/PolySetEvaluator.h \ src/CSGTermEvaluator.h \ src/Tree.h \ src/mathc99.h \ src/memory.h \ src/linalg.h \ src/system-gl.h \ src/stl-utils.h \ src/svg.h SOURCES += src/version_check.cc \ src/ProgressWidget.cc \ src/mathc99.cc \ src/linalg.cc \ src/handle_dep.cc \ src/value.cc \ src/expr.cc \ src/func.cc \ src/module.cc \ src/node.cc \ src/context.cc \ src/csgterm.cc \ src/csgtermnormalizer.cc \ src/polyset.cc \ src/csgops.cc \ src/transform.cc \ src/color.cc \ src/primitives.cc \ src/projection.cc \ src/cgaladv.cc \ src/surface.cc \ src/control.cc \ src/render.cc \ src/dxfdata.cc \ src/dxfdim.cc \ src/linearextrude.cc \ src/rotateextrude.cc \ src/printutils.cc \ src/progress.cc \ src/parsersettings.cc \ src/stl-utils.cc \ \ src/nodedumper.cc \ src/traverser.cc \ src/PolySetEvaluator.cc \ src/ModuleCache.cc \ src/PolySetCache.cc \ src/Tree.cc \ \ src/rendersettings.cc \ src/highlighter.cc \ src/Preferences.cc \ src/OpenCSGWarningDialog.cc \ src/editor.cc \ src/glview.cc \ \ src/builtin.cc \ src/export.cc \ src/import.cc \ src/renderer.cc \ src/ThrownTogetherRenderer.cc \ src/dxftess.cc \ src/dxftess-glu.cc \ src/dxftess-cgal.cc \ src/CSGTermEvaluator.cc \ src/svg.cc \ \ src/openscad.cc \ src/mainwin.cc opencsg { HEADERS += src/OpenCSGRenderer.h SOURCES += src/OpenCSGRenderer.cc } cgal { HEADERS += src/cgal.h \ src/cgalfwd.h \ src/cgalutils.h \ src/CGALEvaluator.h \ src/CGALCache.h \ src/PolySetCGALEvaluator.h \ src/CGALRenderer.h \ src/CGAL_Nef_polyhedron.h \ src/cgalworker.h SOURCES += src/cgalutils.cc \ src/CGALEvaluator.cc \ src/PolySetCGALEvaluator.cc \ src/CGALCache.cc \ src/CGALRenderer.cc \ src/CGAL_Nef_polyhedron.cc \ src/CGAL_Nef_polyhedron_DxfData.cc \ src/cgaladv_minkowski2.cc \ src/cgalworker.cc } macx { HEADERS += src/AppleEvents.h \ src/EventFilter.h SOURCES += src/AppleEvents.cc } isEmpty(PREFIX):PREFIX = /usr/local target.path = $$PREFIX/bin/ INSTALLS += target examples.path = $$PREFIX/share/openscad/examples/ examples.files = examples/* INSTALLS += examples libraries.path = $$PREFIX/share/openscad/libraries/ libraries.files = libraries/* INSTALLS += libraries applications.path = $$PREFIX/share/applications applications.files = icons/openscad.desktop INSTALLS += applications icons.path = $$PREFIX/share/pixmaps icons.files = icons/openscad.png INSTALLS += icons openscad-2013.01+dfsg.orig/common.pri0000644000175000017500000000034312014547135016736 0ustar chrysnchrysnOBJECTS_DIR = objects MOC_DIR = objects UI_DIR = objects RCC_DIR = objects include(win32.pri) include(flex.pri) include(bison.pri) include(cgal.pri) include(opencsg.pri) include(glew.pri) include(eigen.pri) include(boost.pri) openscad-2013.01+dfsg.orig/test-code/0000755000175000017500000000000012110740367016620 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/test-code/nef_polyhedron_2-bug.cc0000644000175000017500000000771111516152336023146 0ustar chrysnchrysn#include #include #include #include #include #include #include typedef CGAL::Lazy_exact_nt FT; typedef CGAL::Simple_cartesian Kernel; typedef CGAL::Bounded_kernel Extended_kernel; // typedef CGAL::Exact_predicates_inexact_constructions_kernel MyKernel; // typedef CGAL::Bounded_kernel > MyKernel; typedef CGAL::Extended_cartesian MyKernel; typedef CGAL::Nef_polyhedron_2 Nef_polyhedron; typedef Nef_polyhedron::Point Point; typedef Nef_polyhedron::Explorer Explorer; typedef Explorer::Vertex_const_iterator Vertex_const_iterator; typedef Explorer::Face_const_iterator Face_const_iterator; typedef Explorer::Hole_const_iterator Hole_const_iterator; typedef Explorer::Halfedge_around_face_const_circulator Halfedge_around_face_const_circulator; typedef Explorer::Vertex_const_handle Vertex_const_handle; typedef Explorer::Vertex_handle Vertex_handle; typedef Explorer::Halfedge_const_handle Halfedge_const_handle; void print(const Nef_polyhedron &RST) { // CGAL::set_pretty_mode(std::cout); // std::cout << RST << std::endl; Explorer explorer = RST.explorer(); explorer.print_statistics(); CGAL::Object_index VI(explorer.vertices_begin(), explorer.vertices_end(), 'v'); for (Vertex_const_iterator vit = explorer.vertices_begin(); vit!=explorer.vertices_end(); ++vit) { std::cout << VI(vit, true); if (explorer.is_standard(vit)) std::cout << " [ " << to_double(explorer.point(vit).x()) << ", " << to_double(explorer.point(vit).y()) << " ]"; std::cout << "\n"; } for (Face_const_iterator fit = explorer.faces_begin(); fit != explorer.faces_end(); fit++) { std::cout << "explorer.mark(explorer.faces_begin()) " << ((explorer.mark(fit))? "is part of polygon" : "is not part of polygon") << std::endl; if (fit->halfedge() == Halfedge_const_handle()) std::cout << "X\n"; else { Halfedge_around_face_const_circulator hafc = explorer.face_cycle(fit), done(hafc); do { Vertex_const_handle vh = explorer.target(hafc); std::cout << VI(vh, true) << " "; if (explorer.is_standard(vh)) std::cout << "[" << to_double(explorer.point(vh).x()) << ", " << to_double(explorer.point(vh).y()) << "], " ; hafc++; } while(hafc != done); std::cout << std::endl; } if (fit->fc_begin() == fit->fc_end()) { std::cout << "Y\n"; } else { for (Hole_const_iterator hit = explorer.holes_begin(fit); hit != explorer.holes_end(fit); hit++){ std::cout << "Hole: "; Halfedge_around_face_const_circulator hafc(hit), done(hit); do{ Vertex_const_handle vh = explorer.target(hafc); std::cout << VI(vh, true) << " "; if (explorer.is_standard(vh)) std::cout << "[" << to_double(explorer.point(vh).x()) << ", " << to_double(explorer.point(vh).y()) << "], " ; hafc++; }while(hafc != done); std::cout << std::endl; } } } } int main() { Point tris[15] = { Point(45,100), Point(45,50), Point(60,80), Point(140,0), Point(45,50), Point(0,0), Point(0,140), Point(0,0), Point(50,140), Point(45,100), Point(50,140), Point(0,0), Point(45,100), Point(0,0), Point(45,50), }; std::list > polylines; polylines.push_back(std::make_pair(tris+0, tris+3)); polylines.push_back(std::make_pair(tris+3, tris+6)); polylines.push_back(std::make_pair(tris+6, tris+9)); polylines.push_back(std::make_pair(tris+9, tris+12)); polylines.push_back(std::make_pair(tris+12, tris+15)); Nef_polyhedron RST(polylines.begin(), polylines.end(), Nef_polyhedron::POLYGONS); print(RST); Nef_polyhedron N; for (std::list >::const_iterator iter = polylines.begin(); iter != polylines.end(); iter++) { N += Nef_polyhedron(iter->first, iter->second, Nef_polyhedron::INCLUDED); } print(N); return 0; } openscad-2013.01+dfsg.orig/test-code/exportdxf.pro0000644000175000017500000000557311640436735021407 0ustar chrysnchrysnDEFINES += OPENSCAD_VERSION=test TEMPLATE = app OBJECTS_DIR = cgal-objects MOC_DIR = cgal-objects UI_DIR = cgal-objects RCC_DIR = cgal-objects INCLUDEPATH += ../src macx { macx { DEPLOYDIR = $$(MACOSX_DEPLOY_DIR) !isEmpty(DEPLOYDIR) { INCLUDEPATH += $$DEPLOYDIR/include LIBS += -L$$DEPLOYDIR/lib } } CONFIG -= app_bundle LIBS += -framework Carbon } CONFIG += qt QT += opengl CONFIG += cgal include(../cgal.pri) include(../eigen2.pri) LEXSOURCES += ../src/lexer.l YACCSOURCES += ../src/parser.y HEADERS += ../src/builtin.h \ ../src/cgal.h \ ../src/context.h \ ../src/csgterm.h \ ../src/dxfdata.h \ ../src/dxfdim.h \ ../src/dxftess.h \ ../src/export.h \ ../src/expression.h \ ../src/function.h \ ../src/grid.h \ ../src/module.h \ ../src/node.h \ ../src/dxflinextrudenode.h \ ../src/dxfrotextrudenode.h \ ../src/projectionnode.h \ ../src/importnode.h \ ../src/csgnode.h \ ../src/transformnode.h \ ../src/rendernode.h \ ../src/openscad.h \ ../src/polyset.h \ ../src/printutils.h \ ../src/value.h \ ../src/progress.h \ ../src/traverser.h \ ../src/csgnode.h \ ../src/visitor.h \ ../src/nodedumper.h \ ../src/CGALRenderer.h \ ../src/nodecache.h \ ../src/importnode.h \ ../src/state.h \ ../src/PolySetRenderer.h \ ../src/PolySetCGALRenderer.h \ ../src/myqhash.h \ ../src/Tree.h SOURCES += exportdxf.cc \ ../src/export.cc \ ../src/value.cc \ ../src/expr.cc \ ../src/func.cc \ ../src/module.cc \ ../src/node.cc \ ../src/context.cc \ ../src/csgterm.cc \ ../src/polyset.cc \ ../src/csgops.cc \ ../src/transform.cc \ ../src/primitives.cc \ ../src/projection.cc \ ../src/cgaladv.cc \ ../src/cgaladv_minkowski2.cc \ ../src/cgaladv_minkowski3.cc \ ../src/surface.cc \ ../src/control.cc \ ../src/render.cc \ ../src/import.cc \ ../src/dxfdata.cc \ ../src/nef2dxf.cc \ ../src/dxftess.cc \ ../src/dxftess-glu.cc \ ../src/dxftess-cgal.cc \ ../src/dxfdim.cc \ ../src/dxflinextrude.cc \ ../src/dxfrotextrude.cc \ ../src/printutils.cc \ ../src/progress.cc \ ../src/nodedumper.cc \ ../src/CGALRenderer.cc \ ../src/traverser.cc \ ../src/PolySetRenderer.cc \ ../src/PolySetCGALRenderer.cc \ ../src/qhash.cc \ ../src/Tree.cc openscad-2013.01+dfsg.orig/test-code/exportdxf.cc0000644000175000017500000001130411640436735021161 0ustar chrysnchrysn/* * OpenSCAD (www.openscad.at) * Copyright (C) 2009 Clifford Wolf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * As a special exception, you have permission to link this program * with the CGAL library and distribute executables, as long as you * follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from CGAL. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "myqhash.h" #include "openscad.h" #include "node.h" #include "module.h" #include "context.h" #include "value.h" #include "export.h" #include "builtin.h" #include "Tree.h" #include "CGALRenderer.h" #include "PolySetCGALRenderer.h" #include #include #include #include #include #include #include QString commandline_commands; const char *make_command = NULL; QSet dependencies; QString currentdir; QString examplesdir; QString librarydir; using std::string; void handle_dep(QString filename) { if (filename.startsWith("/")) dependencies.insert(filename); else dependencies.insert(QDir::currentPath() + QString("/") + filename); if (!QFile(filename).exists() && make_command) { char buffer[4096]; snprintf(buffer, 4096, "%s '%s'", make_command, filename.replace("'", "'\\''").toUtf8().data()); system(buffer); // FIXME: Handle error } } // FIXME: enforce some maximum cache size (old version had 100K vertices as limit) QHash cache; void cgalTree(Tree &tree) { assert(tree.root()); CGALRenderer renderer(cache, tree); Traverser render(renderer, *tree.root(), Traverser::PRE_AND_POSTFIX); render.execute(); } int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } const char *filename = argv[1]; int rc = 0; initialize_builtin_functions(); initialize_builtin_modules(); QApplication app(argc, argv, false); QDir original_path = QDir::current(); currentdir = QDir::currentPath(); QDir libdir(QApplication::instance()->applicationDirPath()); #ifdef Q_WS_MAC libdir.cd("../Resources"); // Libraries can be bundled if (!libdir.exists("libraries")) libdir.cd("../../.."); #elif defined(Q_OS_UNIX) if (libdir.cd("../share/openscad/libraries")) { librarydir = libdir.path(); } else if (libdir.cd("../../share/openscad/libraries")) { librarydir = libdir.path(); } else if (libdir.cd("../../libraries")) { librarydir = libdir.path(); } else #endif if (libdir.cd("libraries")) { librarydir = libdir.path(); } Context root_ctx; root_ctx.functions_p = &builtin_functions; root_ctx.modules_p = &builtin_modules; root_ctx.set_variable("$fn", Value(0.0)); root_ctx.set_variable("$fs", Value(1.0)); root_ctx.set_variable("$fa", Value(12.0)); root_ctx.set_variable("$t", Value(0.0)); Value zero3; zero3.type = Value::VECTOR; zero3.vec.append(new Value(0.0)); zero3.vec.append(new Value(0.0)); zero3.vec.append(new Value(0.0)); root_ctx.set_variable("$vpt", zero3); root_ctx.set_variable("$vpr", zero3); AbstractModule *root_module; ModuleInstantiation root_inst; AbstractNode *root_node; QFileInfo fileInfo(filename); handle_dep(filename); FILE *fp = fopen(filename, "rt"); if (!fp) { fprintf(stderr, "Can't open input file `%s'!\n", filename); exit(1); } else { QString text; char buffer[513]; int ret; while ((ret = fread(buffer, 1, 512, fp)) > 0) { buffer[ret] = 0; text += buffer; } fclose(fp); root_module = parse((text+commandline_commands).toAscii().data(), fileInfo.absolutePath().toLocal8Bit(), false); if (!root_module) { exit(1); } } QDir::setCurrent(fileInfo.absolutePath()); AbstractNode::resetIndexCounter(); root_node = root_module->evaluate(&root_ctx, &root_inst); Tree tree; tree.setRoot(root_node); cgalTree(tree); CGAL_Nef_polyhedron N = cache[tree.getString(*root_node)]; QDir::setCurrent(original_path.absolutePath()); QTextStream outstream(stdout); export_dxf(&N, outstream, NULL); PolySetRenderer::setRenderer(NULL); destroy_builtin_functions(); destroy_builtin_modules(); return rc; } openscad-2013.01+dfsg.orig/COPYING0000644000175000017500000004371612076022153015774 0ustar chrysnchrysn ********************************************************************* As a special exception, you have permission to link this program with the CGAL library and distribute executables, as long as you follow the requirements of the GNU GPL in regard to all of the software in the executable aside from CGAL. ********************************************************************* GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. openscad-2013.01+dfsg.orig/patches/0000755000175000017500000000000012110740367016360 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/patches/OpenCSG-1.3.0-MacOSX-port.patch0000644000175000017500000013630011616015104023343 0ustar chrysnchrysndiff -ru OpenCSG-1.3.0/Makefile OpenCSG-1.3.0-mac/Makefile --- OpenCSG-1.3.0/Makefile 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/Makefile 2010-05-09 02:50:55.000000000 +0200 @@ -1,10 +1,130 @@ -SUBDIRS = glew src example +############################################################################# +# Makefile for building: opencsg +# Generated by qmake (2.01a) (Qt 4.6.2) on: Sun May 9 02:45:47 2010 +# Project: opencsg.pro +# Template: subdirs +# Command: /usr/bin/qmake -macx CONFIG+=x86\ x86_64 -o Makefile opencsg.pro +############################################################################# -all: - for X in $(SUBDIRS); do make -C $$X ; done +first: make_default +MAKEFILE = Makefile +QMAKE = /usr/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = $(COPY_FILE) +INSTALL_PROGRAM = $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +SUBTARGETS = \ + sub-src -clean: - for X in $(SUBDIRS); do make -C $$X clean; done +src/$(MAKEFILE): + @$(CHK_DIR_EXISTS) src/ || $(MKDIR) src/ + cd src/ && $(QMAKE) /Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/src/OpenCSG-1.3.0-patched/src/src.pro -macx CONFIG+=x86\ x86_64 -o $(MAKEFILE) +sub-src-qmake_all: FORCE + @$(CHK_DIR_EXISTS) src/ || $(MKDIR) src/ + cd src/ && $(QMAKE) /Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/src/OpenCSG-1.3.0-patched/src/src.pro -macx CONFIG+=x86\ x86_64 -o $(MAKEFILE) +sub-src: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) +sub-src-make_default: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) +sub-src-make_first: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) first +sub-src-all: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) all +sub-src-clean: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) clean +sub-src-distclean: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) distclean +sub-src-install_subtargets: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) install +sub-src-uninstall_subtargets: src/$(MAKEFILE) FORCE + cd src/ && $(MAKE) -f $(MAKEFILE) uninstall + +Makefile: opencsg.pro /usr/local/Qt4.6/mkspecs/macx-g++/qmake.conf /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/dwarf2.prf \ + /usr/local/Qt4.6/mkspecs/features/debug.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf + $(QMAKE) -macx CONFIG+=x86\ x86_64 -o Makefile opencsg.pro +/usr/local/Qt4.6/mkspecs/common/unix.conf: +/usr/local/Qt4.6/mkspecs/common/mac.conf: +/usr/local/Qt4.6/mkspecs/common/mac-g++.conf: +/usr/local/Qt4.6/mkspecs/qconfig.pri: +/usr/local/Qt4.6/mkspecs/features/qt_functions.prf: +/usr/local/Qt4.6/mkspecs/features/qt_config.prf: +/usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf: +/usr/local/Qt4.6/mkspecs/features/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/mac/dwarf2.prf: +/usr/local/Qt4.6/mkspecs/features/debug.prf: +/usr/local/Qt4.6/mkspecs/features/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86.prf: +/usr/local/Qt4.6/mkspecs/features/warn_on.prf: +/usr/local/Qt4.6/mkspecs/features/qt.prf: +/usr/local/Qt4.6/mkspecs/features/unix/thread.prf: +/usr/local/Qt4.6/mkspecs/features/moc.prf: +/usr/local/Qt4.6/mkspecs/features/mac/rez.prf: +/usr/local/Qt4.6/mkspecs/features/mac/sdk.prf: +/usr/local/Qt4.6/mkspecs/features/resources.prf: +/usr/local/Qt4.6/mkspecs/features/uic.prf: +/usr/local/Qt4.6/mkspecs/features/yacc.prf: +/usr/local/Qt4.6/mkspecs/features/lex.prf: +/usr/local/Qt4.6/mkspecs/features/include_source_dir.prf: +qmake: qmake_all FORCE + @$(QMAKE) -macx CONFIG+=x86\ x86_64 -o Makefile opencsg.pro + +qmake_all: sub-src-qmake_all FORCE + +make_default: sub-src-make_default FORCE +make_first: sub-src-make_first FORCE +all: sub-src-all FORCE +clean: sub-src-clean FORCE +distclean: sub-src-distclean FORCE + -$(DEL_FILE) Makefile +install_subtargets: sub-src-install_subtargets FORCE +uninstall_subtargets: sub-src-uninstall_subtargets FORCE + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all +install: install_subtargets FORCE + +uninstall: uninstall_subtargets FORCE + +FORCE: -distclean: - for X in $(SUBDIRS); do make -C $$X distclean; done diff -ru OpenCSG-1.3.0/RenderTexture/RenderTexture.h OpenCSG-1.3.0-mac/RenderTexture/RenderTexture.h --- OpenCSG-1.3.0/RenderTexture/RenderTexture.h 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/RenderTexture/RenderTexture.h 2010-05-09 02:51:07.000000000 +0200 @@ -294,8 +294,8 @@ bool _BindDepthBuffer( ) const; protected: // data - int _iWidth; // width of the pbuffer - int _iHeight; // height of the pbuffer + GLint _iWidth; // width of the pbuffer + GLint _iHeight; // height of the pbuffer bool _bIsTexture; bool _bIsDepthTexture; @@ -342,8 +342,8 @@ // Texture stuff GLenum _iTextureTarget; - unsigned int _iTextureID; - unsigned int _iDepthTextureID; + GLuint _iTextureID; + GLuint _iDepthTextureID; unsigned short* _pPoorDepthTexture; // [Redge] diff -ru OpenCSG-1.3.0/example/Makefile OpenCSG-1.3.0-mac/example/Makefile --- OpenCSG-1.3.0/example/Makefile 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/example/Makefile 2010-05-09 02:51:11.000000000 +0200 @@ -1,106 +1,206 @@ ############################################################################# -# Makefile for building: opencsgexample -# Generated by qmake (1.06c) (Qt 3.2.0) on: Thu Apr 22 16:05:34 2004 +# Makefile for building: opencsgexample.app/Contents/MacOS/opencsgexample +# Generated by qmake (2.01a) (Qt 4.6.2) on: Sun May 9 02:43:57 2010 # Project: example.pro # Template: app -# Command: $(QMAKE) -o Makefile example.pro +# Command: /usr/bin/qmake -macx CONFIG+=x86\ x86_64 -o Makefile example.pro ############################################################################# ####### Compiler, tools and options -CC = gcc -CXX = g++ -LEX = flex -YACC = yacc -CFLAGS = -pipe -Wall -W -O2 -CXXFLAGS = -pipe -Wall -W -O2 -LEXFLAGS = -YACCFLAGS= -d -INCPATH = -I. -I../glew/include -I../include -I/usr/X11R6/include -I/usr/X11R6/include -LINK = g++ -LFLAGS = -LIBS = $(SUBLIBS) -L/usr/X11R6/lib -L/usr/X11R6/lib -L../lib -lopencsg -lglut -L../glew/lib -lGLEW -lGLU -lGL -lXmu -lXext -lX11 -lm -AR = ar cqs -RANLIB = -MOC = $(QTDIR)/bin/moc -UIC = $(QTDIR)/bin/uic -QMAKE = qmake -TAR = tar -cf -GZIP = gzip -9f -COPY = cp -f -COPY_FILE= $(COPY) -COPY_DIR = $(COPY) -r -DEL_FILE = rm -f -SYMLINK = ln -sf -DEL_DIR = rmdir -MOVE = mv -f +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -O2 -Wall -W -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -W -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 $(DEFINES) +INCPATH = -I/usr/local/Qt4.6/mkspecs/macx-g++ -I. -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/include -I../include -I/opt/local/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -F/Library/Frameworks +LINK = g++ +LFLAGS = -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 +LIBS = $(SUBLIBS) -F/Library/Frameworks -L/Library/Frameworks -L../lib -lopencsg -lGLEW -framework GLUT -L/opt/local/lib -framework OpenGL -framework AGL -framework QtGui -framework QtCore +AR = ar cq +RANLIB = ranlib -s +QMAKE = /usr/bin/qmake +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = cp -f +COPY_DIR = cp -f -R +STRIP = +INSTALL_FILE = $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = $(COPY_FILE) +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f CHK_DIR_EXISTS= test -d -MKDIR = mkdir -p +MKDIR = mkdir -p +export MACOSX_DEPLOYMENT_TARGET = 10.4 ####### Output directory -OBJECTS_DIR = ./ +OBJECTS_DIR = ./ ####### Files -HEADERS = displaylistPrimitive.h -SOURCES = displaylistPrimitive.cpp \ - main.cpp -OBJECTS = displaylistPrimitive.o \ +SOURCES = displaylistPrimitive.cpp \ + main.cpp +OBJECTS = displaylistPrimitive.o \ main.o -FORMS = -UICDECLS = -UICIMPLS = -SRCMOC = -OBJMOC = -DIST = example.pro -QMAKE_TARGET = opencsgexample -DESTDIR = -TARGET = opencsgexample +DIST = /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/release.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/opengl.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf \ + example.pro +QMAKE_TARGET = opencsgexample +DESTDIR = +TARGET = opencsgexample.app/Contents/MacOS/opencsgexample + +####### Custom Compiler Variables +QMAKE_COMP_QMAKE_OBJECTIVE_CFLAGS = -pipe \ + -O2 \ + -Wall \ + -W \ + -arch \ + x86_64 \ + -Xarch_x86_64 \ + -mmacosx-version-min=10.5 \ + -arch \ + i386 + first: all ####### Implicit rules -.SUFFIXES: .c .o .cpp .cc .cxx .C +.SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o: - $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules -all: Makefile $(TARGET) - -$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) - $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) $(OBJCOMP) - -mocables: $(SRCMOC) -uicables: $(UICDECLS) $(UICIMPLS) - -$(MOC): - ( cd $(QTDIR)/src/moc ; $(MAKE) ) +all: Makefile opencsgexample.app/Contents/PkgInfo opencsgexample.app/Contents/Resources/empty.lproj opencsgexample.app/Contents/Info.plist $(TARGET) +$(TARGET): $(OBJECTS) + @$(CHK_DIR_EXISTS) opencsgexample.app/Contents/MacOS/ || $(MKDIR) opencsgexample.app/Contents/MacOS/ + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: example.pro /usr/local/Qt4.6/mkspecs/macx-g++/qmake.conf /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/release.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/opengl.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf \ + /Library/Frameworks/QtGui.framework/QtGui.prl \ + /Library/Frameworks/QtCore.framework/QtCore.prl + $(QMAKE) -macx CONFIG+=x86\ x86_64 -o Makefile example.pro +/usr/local/Qt4.6/mkspecs/common/unix.conf: +/usr/local/Qt4.6/mkspecs/common/mac.conf: +/usr/local/Qt4.6/mkspecs/common/mac-g++.conf: +/usr/local/Qt4.6/mkspecs/qconfig.pri: +/usr/local/Qt4.6/mkspecs/features/qt_functions.prf: +/usr/local/Qt4.6/mkspecs/features/qt_config.prf: +/usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf: +/usr/local/Qt4.6/mkspecs/features/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/release.prf: +/usr/local/Qt4.6/mkspecs/features/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf: +/usr/local/Qt4.6/mkspecs/features/warn_on.prf: +/usr/local/Qt4.6/mkspecs/features/unix/opengl.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86.prf: +/usr/local/Qt4.6/mkspecs/features/qt.prf: +/usr/local/Qt4.6/mkspecs/features/unix/thread.prf: +/usr/local/Qt4.6/mkspecs/features/moc.prf: +/usr/local/Qt4.6/mkspecs/features/mac/rez.prf: +/usr/local/Qt4.6/mkspecs/features/mac/sdk.prf: +/usr/local/Qt4.6/mkspecs/features/resources.prf: +/usr/local/Qt4.6/mkspecs/features/uic.prf: +/usr/local/Qt4.6/mkspecs/features/yacc.prf: +/usr/local/Qt4.6/mkspecs/features/lex.prf: +/usr/local/Qt4.6/mkspecs/features/include_source_dir.prf: +/Library/Frameworks/QtGui.framework/QtGui.prl: +/Library/Frameworks/QtCore.framework/QtCore.prl: +qmake: FORCE + @$(QMAKE) -macx CONFIG+=x86\ x86_64 -o Makefile example.pro + +opencsgexample.app/Contents/PkgInfo: + @$(CHK_DIR_EXISTS) opencsgexample.app/Contents || $(MKDIR) opencsgexample.app/Contents + @$(DEL_FILE) opencsgexample.app/Contents/PkgInfo + @echo "APPL????" >opencsgexample.app/Contents/PkgInfo +opencsgexample.app/Contents/Resources/empty.lproj: + @$(CHK_DIR_EXISTS) opencsgexample.app/Contents/Resources || $(MKDIR) opencsgexample.app/Contents/Resources + @touch opencsgexample.app/Contents/Resources/empty.lproj + +opencsgexample.app/Contents/Info.plist: + @$(CHK_DIR_EXISTS) opencsgexample.app/Contents || $(MKDIR) opencsgexample.app/Contents + @$(DEL_FILE) opencsgexample.app/Contents/Info.plist + @sed -e "s,@ICON@,,g" -e "s,@EXECUTABLE@,opencsgexample,g" -e "s,@TYPEINFO@,????,g" /usr/local/Qt4.6/mkspecs/macx-g++/Info.plist.app >opencsgexample.app/Contents/Info.plist dist: - @mkdir -p .tmp/opencsgexample && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/opencsgexample/ && ( cd `dirname .tmp/opencsgexample` && $(TAR) opencsgexample.tar opencsgexample && $(GZIP) opencsgexample.tar ) && $(MOVE) `dirname .tmp/opencsgexample`/opencsgexample.tar.gz . && $(DEL_FILE) -r .tmp/opencsgexample - -mocclean: + @$(CHK_DIR_EXISTS) .tmp/opencsgexample1.0.0 || $(MKDIR) .tmp/opencsgexample1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/opencsgexample1.0.0/ && $(COPY_FILE) --parents displaylistPrimitive.h .tmp/opencsgexample1.0.0/ && $(COPY_FILE) --parents displaylistPrimitive.cpp main.cpp .tmp/opencsgexample1.0.0/ && (cd `dirname .tmp/opencsgexample1.0.0` && $(TAR) opencsgexample1.0.0.tar opencsgexample1.0.0 && $(COMPRESS) opencsgexample1.0.0.tar) && $(MOVE) `dirname .tmp/opencsgexample1.0.0`/opencsgexample1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/opencsgexample1.0.0 -uiclean: -yaccclean: -lexclean: -clean: +clean:compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core @@ -108,20 +208,50 @@ ####### Sub-libraries distclean: clean - -$(DEL_FILE) $(TARGET) $(TARGET) + -$(DEL_FILE) -r opencsgexample.app + -$(DEL_FILE) Makefile -FORCE: +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_rez_source_make_all: +compiler_rez_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: ####### Compile displaylistPrimitive.o: displaylistPrimitive.cpp displaylistPrimitive.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o displaylistPrimitive.o displaylistPrimitive.cpp main.o: main.cpp displaylistPrimitive.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp ####### Install -install: all +install: FORCE -uninstall: +uninstall: FORCE + +FORCE: diff -ru OpenCSG-1.3.0/example/example.pro OpenCSG-1.3.0-mac/example/example.pro --- OpenCSG-1.3.0/example/example.pro 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/example/example.pro 2010-05-09 02:51:14.000000000 +0200 @@ -2,9 +2,16 @@ TARGET = opencsgexample CONFIG += opengl warn_on release -INCLUDEPATH += ../glew/include ../include - -LIBS += -L../lib -lopencsg -lglut -L../glew/lib -lGLEW +INCLUDEPATH += ../include +LIBS += -L../lib -lopencsg -lGLEW +macx { + INCLUDEPATH += /opt/local/include + LIBS += -framework GLUT -L/opt/local/lib +} +else { + INCLUDEPATH += ../glew/include + LIBS += -lglut -L../glew/lib +} HEADERS = displaylistPrimitive.h SOURCES = displaylistPrimitive.cpp main.cpp diff -ru OpenCSG-1.3.0/example/main.cpp OpenCSG-1.3.0-mac/example/main.cpp --- OpenCSG-1.3.0/example/main.cpp 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/example/main.cpp 2010-05-09 02:51:20.000000000 +0200 @@ -22,7 +22,11 @@ // #include +#ifdef __APPLE__ +#include +#else #include +#endif #include #include "displaylistPrimitive.h" #include diff -ru OpenCSG-1.3.0/opencsg.pro OpenCSG-1.3.0-mac/opencsg.pro --- OpenCSG-1.3.0/opencsg.pro 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/opencsg.pro 2010-05-09 02:51:23.000000000 +0200 @@ -1,2 +1,2 @@ TEMPLATE = subdirs -SUBDIRS = src example +SUBDIRS = src diff -ru OpenCSG-1.3.0/src/Makefile OpenCSG-1.3.0-mac/src/Makefile --- OpenCSG-1.3.0/src/Makefile 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/Makefile 2010-05-09 02:51:27.000000000 +0200 @@ -1,65 +1,50 @@ ############################################################################# -# Makefile for building: libopencsg.so.1.3.0 -# Generated by qmake (1.07a) (Qt 3.3.8b) on: Fri Jan 29 22:15:11 2010 +# Makefile for building: libopencsg.1.3.0.dylib +# Generated by qmake (2.01a) (Qt 4.6.2) on: Sun May 9 02:45:47 2010 # Project: src.pro # Template: lib -# Command: $(QMAKE) -o Makefile src.pro +# Command: /usr/bin/qmake -macx CONFIG+=x86\ x86_64 -o Makefile src.pro ############################################################################# ####### Compiler, tools and options -CC = gcc -CXX = g++ -LEX = flex -YACC = yacc -CFLAGS = -pipe -Wall -W -O2 -fPIC -CXXFLAGS = -pipe -Wall -W -O2 -fPIC -LEXFLAGS = -YACCFLAGS= -d -INCPATH = -I. -I../include -I../glew/include -I.. -I/usr/X11R6/include -LINK = g++ -LFLAGS = -shared -Wl,-soname,libopencsg.so.1 -Wl,-rpath,../lib -LIBS = $(SUBLIBS) -L/usr/X11R6/lib -lGLU -lGL -lXmu -AR = ar cqs -RANLIB = -QMAKE = qmake -TAR = tar -cf -GZIP = gzip -9f -COPY = cp -f -COPY_FILE= $(COPY) -COPY_DIR = $(COPY) -r -DEL_FILE = rm -f -SYMLINK = ln -sf -DEL_DIR = rmdir -MOVE = mv -f +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -O2 -Wall -W -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -W -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 -fPIC $(DEFINES) +INCPATH = -I/usr/local/Qt4.6/mkspecs/macx-g++ -I. -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/include -I../include -I.. -I../../../deploy/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -F/Library/Frameworks +LINK = g++ +LFLAGS = -headerpad_max_install_names -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -arch i386 -single_module -dynamiclib -compatibility_version 1.3 -current_version 1.3.0 -install_name /Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/libopencsg.1.dylib +LIBS = $(SUBLIBS) -F/Library/Frameworks -L/Library/Frameworks -L/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib -lGLEW -framework OpenGL -framework AGL -framework QtGui -framework QtCore +AR = ar cq +RANLIB = ranlib -s +QMAKE = /usr/bin/qmake +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = cp -f +COPY_DIR = cp -f -R +STRIP = +INSTALL_FILE = $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = $(COPY_FILE) +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f CHK_DIR_EXISTS= test -d -MKDIR = mkdir -p +MKDIR = mkdir -p +export MACOSX_DEPLOYMENT_TARGET = 10.4 ####### Output directory -OBJECTS_DIR = ./ +OBJECTS_DIR = ./ ####### Files -HEADERS = ../include/opencsg.h \ - opencsgConfig.h \ - area.h \ - batch.h \ - context.h \ - channelManager.h \ - frameBufferObject.h \ - frameBufferObjectExt.h \ - occlusionQuery.h \ - offscreenBuffer.h \ - opencsgRender.h \ - openglHelper.h \ - pBufferTexture.h \ - primitiveHelper.h \ - scissorMemo.h \ - settings.h \ - stencilManager.h \ - ../RenderTexture/RenderTexture.h -SOURCES = area.cpp \ +SOURCES = area.cpp \ batch.cpp \ context.cpp \ channelManager.cpp \ @@ -69,16 +54,14 @@ offscreenBuffer.cpp \ opencsgRender.cpp \ openglHelper.cpp \ - pBufferTexture.cpp \ primitive.cpp \ primitiveHelper.cpp \ renderGoldfeather.cpp \ renderSCS.cpp \ scissorMemo.cpp \ settings.cpp \ - stencilManager.cpp \ - ../RenderTexture/RenderTexture.cpp -OBJECTS = area.o \ + stencilManager.cpp +OBJECTS = area.o \ batch.o \ context.o \ channelManager.o \ @@ -88,81 +71,171 @@ offscreenBuffer.o \ opencsgRender.o \ openglHelper.o \ - pBufferTexture.o \ primitive.o \ primitiveHelper.o \ renderGoldfeather.o \ renderSCS.o \ scissorMemo.o \ settings.o \ - stencilManager.o \ - RenderTexture.o -FORMS = -UICDECLS = -UICIMPLS = -SRCMOC = -OBJMOC = -DIST = src.pro -QMAKE_TARGET = opencsg -DESTDIR = ../lib/ -TARGET = libopencsg.so.1.3.0 -TARGETA = ../lib/libopencsg.a -TARGETD = libopencsg.so.1.3.0 -TARGET0 = libopencsg.so -TARGET1 = libopencsg.so.1 -TARGET2 = libopencsg.so.1.3 + stencilManager.o +DIST = /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/release.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/opengl.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf \ + src.pro +QMAKE_TARGET = opencsg +DESTDIR = +TARGET = libopencsg.1.3.0.dylib +TARGETA = libopencsg.a +TARGETD = libopencsg.1.3.0.dylib +TARGET0 = libopencsg.dylib +TARGET1 = libopencsg.1.dylib +TARGET2 = libopencsg.1.3.dylib + +####### Custom Compiler Variables +QMAKE_COMP_QMAKE_OBJECTIVE_CFLAGS = -pipe \ + -O2 \ + -Wall \ + -W \ + -arch \ + x86_64 \ + -Xarch_x86_64 \ + -mmacosx-version-min=10.5 \ + -arch \ + i386 + first: all ####### Implicit rules -.SUFFIXES: .c .o .cpp .cc .cxx .C +.SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o: - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o: - $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules -all: Makefile ../lib/$(TARGET) +all: Makefile $(TARGET) -../lib/$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS) $(OBJCOMP) - test -d ../lib/ || mkdir -p ../lib/ +$(TARGET): $(OBJECTS) $(SUBLIBS) $(OBJCOMP) -$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) - $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) $(OBJCOMP) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP) -ln -s $(TARGET) $(TARGET0) -ln -s $(TARGET) $(TARGET1) -ln -s $(TARGET) $(TARGET2) - -$(DEL_FILE) ../lib/$(TARGET) - -$(DEL_FILE) ../lib/$(TARGET0) - -$(DEL_FILE) ../lib/$(TARGET1) - -$(DEL_FILE) ../lib/$(TARGET2) - -$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) ../lib/ staticlib: $(TARGETA) -$(TARGETA): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(OBJCOMP) +$(TARGETA): $(OBJECTS) $(OBJCOMP) -$(DEL_FILE) $(TARGETA) - $(AR) $(TARGETA) $(OBJECTS) $(OBJMOC) + $(AR) $(TARGETA) $(OBJECTS) + $(RANLIB) $(TARGETA) + +Makefile: src.pro /usr/local/Qt4.6/mkspecs/macx-g++/qmake.conf /usr/local/Qt4.6/mkspecs/common/unix.conf \ + /usr/local/Qt4.6/mkspecs/common/mac.conf \ + /usr/local/Qt4.6/mkspecs/common/mac-g++.conf \ + /usr/local/Qt4.6/mkspecs/qconfig.pri \ + /usr/local/Qt4.6/mkspecs/features/qt_functions.prf \ + /usr/local/Qt4.6/mkspecs/features/qt_config.prf \ + /usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf \ + /usr/local/Qt4.6/mkspecs/features/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf \ + /usr/local/Qt4.6/mkspecs/features/release.prf \ + /usr/local/Qt4.6/mkspecs/features/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/default_post.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf \ + /usr/local/Qt4.6/mkspecs/features/warn_on.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/opengl.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/x86.prf \ + /usr/local/Qt4.6/mkspecs/features/qt.prf \ + /usr/local/Qt4.6/mkspecs/features/unix/thread.prf \ + /usr/local/Qt4.6/mkspecs/features/moc.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/rez.prf \ + /usr/local/Qt4.6/mkspecs/features/mac/sdk.prf \ + /usr/local/Qt4.6/mkspecs/features/resources.prf \ + /usr/local/Qt4.6/mkspecs/features/uic.prf \ + /usr/local/Qt4.6/mkspecs/features/yacc.prf \ + /usr/local/Qt4.6/mkspecs/features/lex.prf \ + /usr/local/Qt4.6/mkspecs/features/include_source_dir.prf \ + /Library/Frameworks/QtGui.framework/QtGui.prl \ + /Library/Frameworks/QtCore.framework/QtCore.prl + $(QMAKE) -macx CONFIG+=x86\ x86_64 -o Makefile src.pro +/usr/local/Qt4.6/mkspecs/common/unix.conf: +/usr/local/Qt4.6/mkspecs/common/mac.conf: +/usr/local/Qt4.6/mkspecs/common/mac-g++.conf: +/usr/local/Qt4.6/mkspecs/qconfig.pri: +/usr/local/Qt4.6/mkspecs/features/qt_functions.prf: +/usr/local/Qt4.6/mkspecs/features/qt_config.prf: +/usr/local/Qt4.6/mkspecs/features/exclusive_builds.prf: +/usr/local/Qt4.6/mkspecs/features/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_pre.prf: +/usr/local/Qt4.6/mkspecs/features/release.prf: +/usr/local/Qt4.6/mkspecs/features/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/default_post.prf: +/usr/local/Qt4.6/mkspecs/features/mac/objective_c.prf: +/usr/local/Qt4.6/mkspecs/features/warn_on.prf: +/usr/local/Qt4.6/mkspecs/features/unix/opengl.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86_64.prf: +/usr/local/Qt4.6/mkspecs/features/mac/x86.prf: +/usr/local/Qt4.6/mkspecs/features/qt.prf: +/usr/local/Qt4.6/mkspecs/features/unix/thread.prf: +/usr/local/Qt4.6/mkspecs/features/moc.prf: +/usr/local/Qt4.6/mkspecs/features/mac/rez.prf: +/usr/local/Qt4.6/mkspecs/features/mac/sdk.prf: +/usr/local/Qt4.6/mkspecs/features/resources.prf: +/usr/local/Qt4.6/mkspecs/features/uic.prf: +/usr/local/Qt4.6/mkspecs/features/yacc.prf: +/usr/local/Qt4.6/mkspecs/features/lex.prf: +/usr/local/Qt4.6/mkspecs/features/include_source_dir.prf: +/Library/Frameworks/QtGui.framework/QtGui.prl: +/Library/Frameworks/QtCore.framework/QtCore.prl: +qmake: FORCE + @$(QMAKE) -macx CONFIG+=x86\ x86_64 -o Makefile src.pro dist: - @mkdir -p .tmp/opencsg && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/opencsg/ && ( cd `dirname .tmp/opencsg` && $(TAR) opencsg.tar opencsg && $(GZIP) opencsg.tar ) && $(MOVE) `dirname .tmp/opencsg`/opencsg.tar.gz . && $(DEL_FILE) -r .tmp/opencsg + @$(CHK_DIR_EXISTS) .tmp/opencsg1.3.0 || $(MKDIR) .tmp/opencsg1.3.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/opencsg1.3.0/ && $(COPY_FILE) --parents ../include/opencsg.h opencsgConfig.h area.h batch.h context.h channelManager.h frameBufferObject.h frameBufferObjectExt.h occlusionQuery.h offscreenBuffer.h opencsgRender.h openglHelper.h primitiveHelper.h scissorMemo.h settings.h stencilManager.h .tmp/opencsg1.3.0/ && $(COPY_FILE) --parents area.cpp batch.cpp context.cpp channelManager.cpp frameBufferObject.cpp frameBufferObjectExt.cpp occlusionQuery.cpp offscreenBuffer.cpp opencsgRender.cpp openglHelper.cpp primitive.cpp primitiveHelper.cpp renderGoldfeather.cpp renderSCS.cpp scissorMemo.cpp settings.cpp stencilManager.cpp .tmp/opencsg1.3.0/ && (cd `dirname .tmp/opencsg1.3.0` && $(TAR) opencsg1.3.0.tar opencsg1.3.0 && $(COMPRESS) opencsg1.3.0.tar) && $(MOVE) `dirname .tmp/opencsg1.3.0`/opencsg1.3.0.tar.gz . && $(DEL_FILE) -r .tmp/opencsg1.3.0 + -yaccclean: -lexclean: -clean: +clean:compiler_clean -$(DEL_FILE) $(OBJECTS) -$(DEL_FILE) *~ core *.core @@ -170,44 +243,77 @@ ####### Sub-libraries distclean: clean - -$(DEL_FILE) ../lib/$(TARGET) $(TARGET) - -$(DEL_FILE) ../lib/$(TARGET0) ../lib/$(TARGET1) ../lib/$(TARGET2) $(TARGETA) - - -FORCE: + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) $(TARGET0) $(TARGET1) $(TARGET2) $(TARGETA) + -$(DEL_FILE) Makefile + + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_rez_source_make_all: +compiler_rez_source_clean: +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: ####### Compile area.o: area.cpp opencsgConfig.h \ area.h \ openglHelper.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o area.o area.cpp batch.o: batch.cpp opencsgConfig.h \ batch.h \ primitiveHelper.h \ area.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o batch.o batch.cpp context.o: context.cpp opencsgConfig.h \ context.h \ offscreenBuffer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o context.o context.cpp channelManager.o: channelManager.cpp opencsgConfig.h \ channelManager.h \ offscreenBuffer.h \ openglHelper.h \ - settings.h \ - area.h + area.h \ + settings.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o channelManager.o channelManager.cpp frameBufferObject.o: frameBufferObject.cpp opencsgConfig.h \ frameBufferObject.h \ offscreenBuffer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o frameBufferObject.o frameBufferObject.cpp frameBufferObjectExt.o: frameBufferObjectExt.cpp opencsgConfig.h \ frameBufferObjectExt.h \ offscreenBuffer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o frameBufferObjectExt.o frameBufferObjectExt.cpp occlusionQuery.o: occlusionQuery.cpp opencsgConfig.h \ occlusionQuery.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o occlusionQuery.o occlusionQuery.cpp offscreenBuffer.o: offscreenBuffer.cpp opencsgConfig.h \ context.h \ @@ -215,27 +321,28 @@ frameBufferObject.h \ frameBufferObjectExt.h \ pBufferTexture.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o offscreenBuffer.o offscreenBuffer.cpp opencsgRender.o: opencsgRender.cpp opencsgConfig.h \ opencsgRender.h \ primitiveHelper.h \ - settings.h \ - area.h + area.h \ + settings.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o opencsgRender.o opencsgRender.cpp openglHelper.o: openglHelper.cpp opencsgConfig.h \ openglHelper.h \ area.h - -pBufferTexture.o: pBufferTexture.cpp opencsgConfig.h \ - pBufferTexture.h \ - offscreenBuffer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o openglHelper.o openglHelper.cpp primitive.o: primitive.cpp opencsgConfig.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o primitive.o primitive.cpp primitiveHelper.o: primitiveHelper.cpp opencsgConfig.h \ openglHelper.h \ - primitiveHelper.h \ - area.h + area.h \ + primitiveHelper.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o primitiveHelper.o primitiveHelper.cpp renderGoldfeather.o: renderGoldfeather.cpp opencsgConfig.h \ opencsgRender.h \ @@ -243,10 +350,11 @@ channelManager.h \ occlusionQuery.h \ openglHelper.h \ + area.h \ primitiveHelper.h \ scissorMemo.h \ - stencilManager.h \ - area.h + stencilManager.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o renderGoldfeather.o renderGoldfeather.cpp renderSCS.o: renderSCS.cpp opencsgConfig.h \ opencsgRender.h \ @@ -254,29 +362,57 @@ channelManager.h \ occlusionQuery.h \ openglHelper.h \ + area.h \ primitiveHelper.h \ - scissorMemo.h \ - area.h + scissorMemo.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o renderSCS.o renderSCS.cpp scissorMemo.o: scissorMemo.cpp opencsgConfig.h \ openglHelper.h \ - scissorMemo.h \ area.h \ + scissorMemo.h \ channelManager.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o scissorMemo.o scissorMemo.cpp settings.o: settings.cpp opencsgConfig.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o settings.o settings.cpp stencilManager.o: stencilManager.cpp opencsgConfig.h \ area.h \ openglHelper.h \ stencilManager.h - -RenderTexture.o: ../RenderTexture/RenderTexture.cpp ../RenderTexture/RenderTexture.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o RenderTexture.o ../RenderTexture/RenderTexture.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o stencilManager.o stencilManager.cpp ####### Install -install: all +install_target: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/ || $(MKDIR) $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/ + -$(INSTALL_PROGRAM) "$(TARGET)" "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET)" + -$(SYMLINK) "$(TARGET)" "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET0)" + -$(SYMLINK) "$(TARGET)" "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET1)" + -$(SYMLINK) "$(TARGET)" "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET2)" + +uninstall_target: FORCE + -$(DEL_FILE) "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET)" + -$(DEL_FILE) "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET0)" + -$(DEL_FILE) "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET1)" + -$(DEL_FILE) "$(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/$(TARGET2)" + -$(DEL_DIR) $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/lib/ + + +install_headers: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/include/ || $(MKDIR) $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/include/ + -$(INSTALL_FILE) /Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/src/OpenCSG-1.3.0-patched/include/opencsg.h $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/include/ + -uninstall: +uninstall_headers: FORCE + -$(DEL_FILE) -r $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/include/opencsg.h + -$(DEL_DIR) $(INSTALL_ROOT)/Users/kintel/code/metalab/checkout/OpenSCAD/libraries-tmp/deploy/include/ + + +install: install_target install_headers FORCE + +uninstall: uninstall_target uninstall_headers FORCE + +FORCE: diff -ru OpenCSG-1.3.0/src/channelManager.cpp OpenCSG-1.3.0-mac/src/channelManager.cpp --- OpenCSG-1.3.0/src/channelManager.cpp 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/channelManager.cpp 2010-05-09 02:51:32.000000000 +0200 @@ -23,7 +23,7 @@ #include #ifdef _WIN32 #include -#else +#elif !defined(__APPLE__) #include #endif @@ -170,9 +170,11 @@ #ifdef WIN32 && WGLEW_ARB_pbuffer && WGLEW_ARB_pixel_format -#else +#elif !defined(__APPLE__) && GLXEW_SGIX_pbuffer && GLXEW_SGIX_fbconfig +#else + && false #endif ) { newOffscreenType = OpenCSG::PBuffer; diff -ru OpenCSG-1.3.0/src/frameBufferObject.h OpenCSG-1.3.0-mac/src/frameBufferObject.h --- OpenCSG-1.3.0/src/frameBufferObject.h 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/frameBufferObject.h 2010-05-09 02:51:36.000000000 +0200 @@ -79,11 +79,11 @@ /// Texture stuff GLenum textureTarget; - unsigned int textureID; - unsigned int depthID; + GLuint textureID; + GLuint depthID; - unsigned int framebufferID; - int oldFramebufferID; + GLuint framebufferID; + GLint oldFramebufferID; bool initialized; }; diff -ru OpenCSG-1.3.0/src/occlusionQuery.cpp OpenCSG-1.3.0-mac/src/occlusionQuery.cpp --- OpenCSG-1.3.0/src/occlusionQuery.cpp 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/occlusionQuery.cpp 2010-05-09 02:51:40.000000000 +0200 @@ -57,7 +57,7 @@ } unsigned int OcclusionQueryARB::getQueryResult() { - unsigned int fragmentCount; + GLuint fragmentCount; glGetQueryObjectuivARB(mQueryObject, GL_QUERY_RESULT_ARB, &fragmentCount); return fragmentCount; } @@ -94,7 +94,7 @@ } unsigned int OcclusionQueryNV::getQueryResult() { - unsigned int fragmentCount; + GLuint fragmentCount; glGetOcclusionQueryuivNV(mQueryObject, GL_PIXEL_COUNT_NV, &fragmentCount); return fragmentCount; } diff -ru OpenCSG-1.3.0/src/openglHelper.cpp OpenCSG-1.3.0-mac/src/openglHelper.cpp --- OpenCSG-1.3.0/src/openglHelper.cpp 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/openglHelper.cpp 2010-05-09 02:51:44.000000000 +0200 @@ -29,13 +29,13 @@ GLfloat projection[16]; GLfloat modelview[16]; - int canvasPos[4]; + GLint canvasPos[4]; - int stencilBits = 0; + GLint stencilBits = 0; int stencilMax = 0; int stencilMask = 0; - int scissorPos[4]; + GLint scissorPos[4]; void scissor(const PCArea& area) { const int dx = area.maxx - area.minx; diff -ru OpenCSG-1.3.0/src/openglHelper.h OpenCSG-1.3.0-mac/src/openglHelper.h --- OpenCSG-1.3.0/src/openglHelper.h 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/openglHelper.h 2010-05-09 02:51:48.000000000 +0200 @@ -36,17 +36,17 @@ // copy of the projection matrix during CSG computation extern GLfloat modelview[16]; // copy of the modelview matrix during CSG computation - extern int canvasPos[4]; + extern GLint canvasPos[4]; // copy of the viewport size during CSG computation - extern int stencilBits; + extern GLint stencilBits; // number of stencil bits in the pbuffer extern int stencilMax; // the number where the stencil value would "wrap around" to zero extern int stencilMask; // stencilMax - 1 - extern int scissorPos[4]; + extern GLint scissorPos[4]; // copy of the scissor settings for CSG computation void scissor(const PCArea& area); diff -ru OpenCSG-1.3.0/src/pBufferTexture.h OpenCSG-1.3.0-mac/src/pBufferTexture.h --- OpenCSG-1.3.0/src/pBufferTexture.h 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/pBufferTexture.h 2010-05-09 02:51:53.000000000 +0200 @@ -22,7 +22,7 @@ #ifndef __OpenCSG__pbuffer_texture_h__ #define __OpenCSG__pbuffer_texture_h__ - +#ifndef __APPLE__ #include "opencsgConfig.h" #include "offscreenBuffer.h" @@ -84,5 +84,27 @@ } // namespace OpenGL } // namespace OpenCSG +#else + +namespace OpenCSG { + namespace OpenGL { + class PBufferTexture : public OffscreenBuffer { + virtual bool Initialize(int , int , bool , bool ) {return false;} + virtual bool IsInitialized() const {return false;} + virtual bool Reset() {return false;} + virtual bool Resize(int, int) {return false;} + virtual bool BeginCapture() {return false;} + virtual bool EndCapture() {return false;} + virtual void Bind() const {} + virtual void EnableTextureTarget() const {} + virtual void DisableTextureTarget() const {} + virtual unsigned int GetTextureTarget() const {return 0;} + virtual int GetWidth() const {return 0;} + virtual int GetHeight() const {return 0;} + virtual bool haveSeparateContext() const {return false;} + }; + } +} +#endif // __APPLE__ #endif // __OpenCSG__frame_buffer_object_h__ diff -ru OpenCSG-1.3.0/src/src.pro OpenCSG-1.3.0-mac/src/src.pro --- OpenCSG-1.3.0/src/src.pro 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-mac/src/src.pro 2010-05-09 02:51:57.000000000 +0200 @@ -1,10 +1,31 @@ TEMPLATE = lib TARGET = opencsg VERSION = 1.3.0 -DESTDIR = ../lib CONFIG += opengl warn_on release -INCLUDEPATH += ../include ../glew/include ../ +INCLUDEPATH += ../include ../ + +# Optionally specify deployment location using the +# MACOSX_DEPLOY_DIR env. variable +DEPLOYDIR = $$(MACOSX_DEPLOY_DIR) + +!isEmpty(DEPLOYDIR) { + message("Deploy") + INSTALLDIR = $$(MACOSX_DEPLOY_DIR) + INCLUDEPATH += $$(MACOSX_DEPLOY_DIR)/include + LIBS += -L$$(MACOSX_DEPLOY_DIR)/lib -lGLEW + CONFIG += absolute_library_soname + headers.files = ../include/opencsg.h + headers.path = $$INSTALLDIR/include + INSTALLS += target headers + target.path = $$INSTALLDIR/lib +} +else { + DESTDIR = ../lib + INCLUDEPATH += ../glew/include + INSTALLS += target + target.path = $$DESTDIR +} HEADERS = ../include/opencsg.h \ opencsgConfig.h \ @@ -18,12 +39,11 @@ offscreenBuffer.h \ opencsgRender.h \ openglHelper.h \ - pBufferTexture.h \ primitiveHelper.h \ scissorMemo.h \ settings.h \ - stencilManager.h \ - ../RenderTexture/RenderTexture.h + stencilManager.h + SOURCES = area.cpp \ batch.cpp \ context.cpp \ @@ -34,12 +54,18 @@ offscreenBuffer.cpp \ opencsgRender.cpp \ openglHelper.cpp \ - pBufferTexture.cpp \ primitive.cpp \ primitiveHelper.cpp \ renderGoldfeather.cpp \ renderSCS.cpp \ scissorMemo.cpp \ settings.cpp \ - stencilManager.cpp \ - ../RenderTexture/RenderTexture.cpp + stencilManager.cpp + +!macx { + HEADERS += ../RenderTexture/RenderTexture.h \ + pBufferTexture.h + + SOURCES += ../RenderTexture/RenderTexture.cpp \ + pBufferTexture.cpp +} openscad-2013.01+dfsg.orig/patches/OpenCSG-1.1.1-MacOSX-port.patch0000644000175000017500000002162011516152336023350 0ustar chrysnchrysndiff -ru OpenCSG-1.1.1/RenderTexture/RenderTexture.h OpenCSG-1.1.1-mac/RenderTexture/RenderTexture.h --- OpenCSG-1.1.1/RenderTexture/RenderTexture.h 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/RenderTexture/RenderTexture.h 2009-12-09 03:15:26.000000000 +0100 @@ -294,8 +294,8 @@ bool _BindDepthBuffer( ) const; protected: // data - int _iWidth; // width of the pbuffer - int _iHeight; // height of the pbuffer + GLint _iWidth; // width of the pbuffer + GLint _iHeight; // height of the pbuffer bool _bIsTexture; bool _bIsDepthTexture; @@ -342,8 +342,8 @@ // Texture stuff GLenum _iTextureTarget; - unsigned int _iTextureID; - unsigned int _iDepthTextureID; + GLuint _iTextureID; + GLuint _iDepthTextureID; unsigned short* _pPoorDepthTexture; // [Redge] diff -ru OpenCSG-1.1.1/example/example.pro OpenCSG-1.1.1-mac/example/example.pro --- OpenCSG-1.1.1/example/example.pro 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/example/example.pro 2009-12-09 03:15:26.000000000 +0100 @@ -2,9 +2,16 @@ TARGET = opencsgexample CONFIG += opengl warn_on release -INCLUDEPATH += ../glew/include ../include - -LIBS += -L../lib -lopencsg -lglut -L../glew/lib -lGLEW +INCLUDEPATH += ../include +LIBS += -L../lib -lopencsg -lGLEW +macx { + INCLUDEPATH += /opt/local/include + LIBS += -framework GLUT -L/opt/local/lib +} +else { + INCLUDEPATH += ../glew/include + LIBS += -lglut -L../glew/lib +} HEADERS = displaylistPrimitive.h SOURCES = displaylistPrimitive.cpp main.cpp diff -ru OpenCSG-1.1.1/example/main.cpp OpenCSG-1.1.1-mac/example/main.cpp --- OpenCSG-1.1.1/example/main.cpp 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/example/main.cpp 2009-12-09 03:15:26.000000000 +0100 @@ -22,7 +22,11 @@ // #include +#ifdef __APPLE__ +#include +#else #include +#endif #include #include "displaylistPrimitive.h" #include diff -ru OpenCSG-1.1.1/opencsg.pro OpenCSG-1.1.1-mac/opencsg.pro --- OpenCSG-1.1.1/opencsg.pro 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/opencsg.pro 2009-12-09 03:15:26.000000000 +0100 @@ -1,2 +1,4 @@ TEMPLATE = subdirs SUBDIRS = src example +# On Mac we get glew from MacPorts +!macx:SUBDIRS += glew diff -ru OpenCSG-1.1.1/src/channelManager.cpp OpenCSG-1.1.1-mac/src/channelManager.cpp --- OpenCSG-1.1.1/src/channelManager.cpp 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/channelManager.cpp 2009-12-09 03:15:26.000000000 +0100 @@ -23,7 +23,7 @@ #include #ifdef _WIN32 #include -#else +#elif !defined(__APPLE__) #include #endif @@ -160,9 +160,11 @@ #ifdef WIN32 if ( WGLEW_ARB_pbuffer && WGLEW_ARB_pixel_format -#else +#elif !defined(__APPLE__) if ( GLXEW_SGIX_pbuffer && GLXEW_SGIX_fbconfig +#else + if ( false #endif ) { newOffscreenType = OpenCSG::PBuffer; diff -ru OpenCSG-1.1.1/src/frameBufferObject.h OpenCSG-1.1.1-mac/src/frameBufferObject.h --- OpenCSG-1.1.1/src/frameBufferObject.h 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/frameBufferObject.h 2009-12-09 03:15:26.000000000 +0100 @@ -77,10 +77,10 @@ /// Texture stuff GLenum textureTarget; - unsigned int textureID; - unsigned int depthID; + GLuint textureID; + GLuint depthID; - unsigned int framebufferID; + GLuint framebufferID; bool initialized; }; diff -ru OpenCSG-1.1.1/src/occlusionQuery.cpp OpenCSG-1.1.1-mac/src/occlusionQuery.cpp --- OpenCSG-1.1.1/src/occlusionQuery.cpp 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/occlusionQuery.cpp 2009-12-09 03:15:26.000000000 +0100 @@ -57,7 +57,7 @@ } unsigned int OcclusionQueryARB::getQueryResult() { - unsigned int fragmentCount; + GLuint fragmentCount; glGetQueryObjectuivARB(mQueryObject, GL_QUERY_RESULT_ARB, &fragmentCount); return fragmentCount; } @@ -94,7 +94,7 @@ } unsigned int OcclusionQueryNV::getQueryResult() { - unsigned int fragmentCount; + GLuint fragmentCount; glGetOcclusionQueryuivNV(mQueryObject, GL_PIXEL_COUNT_NV, &fragmentCount); return fragmentCount; } diff -ru OpenCSG-1.1.1/src/openglHelper.cpp OpenCSG-1.1.1-mac/src/openglHelper.cpp --- OpenCSG-1.1.1/src/openglHelper.cpp 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/openglHelper.cpp 2009-12-09 03:15:26.000000000 +0100 @@ -29,13 +29,13 @@ GLfloat projection[16]; GLfloat modelview[16]; - int canvasPos[4]; + GLint canvasPos[4]; - int stencilBits = 0; + GLint stencilBits = 0; int stencilMax = 0; int stencilMask = 0; - int scissorPos[4]; + GLint scissorPos[4]; void scissor(const PCArea& area) { const int dx = area.maxx - area.minx; diff -ru OpenCSG-1.1.1/src/openglHelper.h OpenCSG-1.1.1-mac/src/openglHelper.h --- OpenCSG-1.1.1/src/openglHelper.h 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/openglHelper.h 2009-12-09 03:15:26.000000000 +0100 @@ -36,17 +36,17 @@ // copy of the projection matrix during CSG computation extern GLfloat modelview[16]; // copy of the modelview matrix during CSG computation - extern int canvasPos[4]; + extern GLint canvasPos[4]; // copy of the viewport size during CSG computation - extern int stencilBits; + extern GLint stencilBits; // number of stencil bits in the pbuffer extern int stencilMax; // the number where the stencil value would "wrap around" to zero extern int stencilMask; // stencilMax - 1 - extern int scissorPos[4]; + extern GLint scissorPos[4]; // copy of the scissor settings for CSG computation void scissor(const PCArea& area); diff -ru OpenCSG-1.1.1/src/pBufferTexture.h OpenCSG-1.1.1-mac/src/pBufferTexture.h --- OpenCSG-1.1.1/src/pBufferTexture.h 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/pBufferTexture.h 2009-12-09 03:15:34.000000000 +0100 @@ -22,7 +22,7 @@ #ifndef __OpenCSG__pbuffer_texture_h__ #define __OpenCSG__pbuffer_texture_h__ - +#ifndef __APPLE__ #include "opencsgConfig.h" #include "offscreenBuffer.h" @@ -81,5 +81,26 @@ } // namespace OpenGL } // namespace OpenCSG +#else + +namespace OpenCSG { + namespace OpenGL { + class PBufferTexture : public OffscreenBuffer { + virtual bool Initialize(int , int , bool , bool ) {return false;} + virtual bool Reset() {return false;} + virtual bool Resize(int, int) {return false;} + virtual bool BeginCapture() {return false;} + virtual bool EndCapture() {return false;} + virtual void Bind() const {} + virtual void EnableTextureTarget() const {} + virtual void DisableTextureTarget() const {} + virtual unsigned int GetTextureTarget() const {return 0;} + virtual int GetWidth() const {return 0;} + virtual int GetHeight() const {return 0;} + virtual bool haveSeparateContext() const {return false;} + }; + } +} +#endif // __APPLE__ #endif // __OpenCSG__frame_buffer_object_h__ Only in OpenCSG-1.1.1-mac/src: pBufferTexture.h~ diff -ru OpenCSG-1.1.1/src/src.pro OpenCSG-1.1.1-mac/src/src.pro --- OpenCSG-1.1.1/src/src.pro 2009-07-19 21:05:09.000000000 +0200 +++ OpenCSG-1.1.1-mac/src/src.pro 2009-12-09 03:15:26.000000000 +0100 @@ -4,7 +4,15 @@ DESTDIR = ../lib CONFIG += opengl warn_on release -INCLUDEPATH += ../include ../glew/include ../ +INCLUDEPATH += ../include ../ + +macx { + INCLUDEPATH += /opt/local/include + LIBS += -L/opt/local/lib -lglew +} +else { +INCLUDEPATH += ../glew/include +} HEADERS = ../include/opencsg.h \ opencsgConfig.h \ @@ -16,12 +24,11 @@ offscreenBuffer.h \ opencsgRender.h \ openglHelper.h \ - pBufferTexture.h \ primitiveHelper.h \ scissorMemo.h \ settings.h \ - stencilManager.h \ - ../RenderTexture/RenderTexture.h + stencilManager.h + SOURCES = area.cpp \ batch.cpp \ channelManager.cpp \ @@ -30,12 +37,19 @@ offscreenBuffer.cpp \ opencsgRender.cpp \ openglHelper.cpp \ - pBufferTexture.cpp \ primitive.cpp \ primitiveHelper.cpp \ renderGoldfeather.cpp \ renderSCS.cpp \ scissorMemo.cpp \ settings.cpp \ - stencilManager.cpp \ - ../RenderTexture/RenderTexture.cpp + stencilManager.cpp + +!macx { + HEADERS += ../RenderTexture/RenderTexture.h \ + pBufferTexture.h + + SOURCES += ../RenderTexture/RenderTexture.cpp \ + pBufferTexture.cpp +} + openscad-2013.01+dfsg.orig/patches/OpenCSG-1.3.0-FBO.patch0000644000175000017500000000643411616014605021706 0ustar chrysnchrysndiff -ru OpenCSG-1.3.0/src/frameBufferObject.cpp OpenCSG-1.3.0-fbofix/src/frameBufferObject.cpp --- OpenCSG-1.3.0/src/frameBufferObject.cpp 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-fbofix/src/frameBufferObject.cpp 2011-08-02 01:33:31.000000000 +0200 @@ -57,6 +57,7 @@ glGenRenderbuffers(1, &depthID); glGenTextures(1, &textureID); + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFramebufferID); glBindFramebuffer(GL_FRAMEBUFFER, framebufferID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_INT, 0); @@ -76,7 +77,7 @@ return false; } - glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, oldFramebufferID); glBindTexture(GL_TEXTURE_2D, 0); textureTarget = GL_TEXTURE_2D; @@ -133,7 +134,7 @@ // Unbinds frame buffer texture. bool FrameBufferObject::EndCapture() { - glBindFramebuffer(GL_FRAMEBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, oldFramebufferID); return true; } diff -ru OpenCSG-1.3.0/src/frameBufferObject.h OpenCSG-1.3.0-fbofix/src/frameBufferObject.h --- OpenCSG-1.3.0/src/frameBufferObject.h 2011-08-02 17:30:01.000000000 +0200 +++ OpenCSG-1.3.0-fbofix/src/frameBufferObject.h 2011-08-02 01:32:58.000000000 +0200 @@ -83,6 +83,7 @@ unsigned int depthID; unsigned int framebufferID; + int oldFramebufferID; bool initialized; }; diff -ru OpenCSG-1.3.0/src/frameBufferObjectExt.cpp OpenCSG-1.3.0-fbofix/src/frameBufferObjectExt.cpp --- OpenCSG-1.3.0/src/frameBufferObjectExt.cpp 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-fbofix/src/frameBufferObjectExt.cpp 2011-08-02 01:33:46.000000000 +0200 @@ -58,6 +58,7 @@ glGenRenderbuffersEXT(1, &depthID); glGenTextures(1, &textureID); + glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &oldFramebufferID); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebufferID); glBindTexture(GL_TEXTURE_2D, textureID); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_INT, 0); @@ -77,7 +78,7 @@ return false; } - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, oldFramebufferID); glBindTexture(GL_TEXTURE_2D, 0); textureTarget = GL_TEXTURE_2D; @@ -134,7 +135,7 @@ // Unbinds frame buffer texture. bool FrameBufferObjectExt::EndCapture() { - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, oldFramebufferID); return true; } diff -ru OpenCSG-1.3.0/src/frameBufferObjectExt.h OpenCSG-1.3.0-fbofix/src/frameBufferObjectExt.h --- OpenCSG-1.3.0/src/frameBufferObjectExt.h 2010-02-06 21:35:10.000000000 +0100 +++ OpenCSG-1.3.0-fbofix/src/frameBufferObjectExt.h 2011-08-02 01:33:08.000000000 +0200 @@ -83,6 +83,7 @@ unsigned int depthID; unsigned int framebufferID; + int oldFramebufferID; bool initialized; }; openscad-2013.01+dfsg.orig/patches/OpenCSG-1.3.2-MacOSX-port.patch0000644000175000017500000000351512006350460023347 0ustar chrysnchrysndiff --git a/example/example.pro b/example/example.pro index 8891a28..5cb5e81 100644 --- a/example/example.pro +++ b/example/example.pro @@ -2,9 +2,16 @@ TEMPLATE = app TARGET = opencsgexample CONFIG += opengl warn_on release -INCLUDEPATH += ../glew/include ../include - -LIBS += -L../lib -lopencsg -lglut -L../glew/lib -lGLEW +INCLUDEPATH += ../include +LIBS += -L../lib -lopencsg -lGLEW +macx { + INCLUDEPATH += /opt/local/include + LIBS += -framework GLUT -L/opt/local/lib +} +else { + INCLUDEPATH += ../glew/include + LIBS += -lglut -L../glew/lib +} HEADERS = displaylistPrimitive.h SOURCES = displaylistPrimitive.cpp main.cpp diff --git a/opencsg.pro b/opencsg.pro index b56e622..5cf2d6d 100644 --- a/opencsg.pro +++ b/opencsg.pro @@ -1,2 +1,2 @@ TEMPLATE = subdirs -SUBDIRS = src example +SUBDIRS = src diff --git a/src/src.pro b/src/src.pro index 4843a12..04d3f4d 100644 --- a/src/src.pro +++ b/src/src.pro @@ -1,10 +1,32 @@ TEMPLATE = lib TARGET = opencsg VERSION = 1.3.2 -DESTDIR = ../lib CONFIG += opengl warn_on release -INCLUDEPATH += ../include ../glew/include ../ +INCLUDEPATH += ../include ../ +CONFIG -= qt + +# Optionally specify deployment location using the +# OPENSCAD_LIBRARIES env. variable +OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES) + +!isEmpty(OPENSCAD_LIBDIR) { + message("Deploy") + INSTALLDIR = $$OPENSCAD_LIBDIR + INCLUDEPATH += $$OPENSCAD_LIBDIR/include + LIBS += -L$$OPENSCAD_LIBDIR/lib -lGLEW + CONFIG += absolute_library_soname + headers.files = ../include/opencsg.h + headers.path = $$INSTALLDIR/include + INSTALLS += target headers + target.path = $$INSTALLDIR/lib +} +else { + DESTDIR = ../lib + INCLUDEPATH += ../glew/include + INSTALLS += target + target.path = $$DESTDIR +} HEADERS = ../include/opencsg.h \ opencsgConfig.h \ openscad-2013.01+dfsg.orig/patches/OpenCSG-1.2.0-MacOSX-port.patch0000644000175000017500000002224611516152336023355 0ustar chrysnchrysndiff -ru OpenCSG-1.2.0/RenderTexture/RenderTexture.h OpenCSG-1.2.0-mac/RenderTexture/RenderTexture.h --- OpenCSG-1.2.0/RenderTexture/RenderTexture.h 2010-01-02 20:56:12.000000000 +0100 +++ OpenCSG-1.2.0-mac/RenderTexture/RenderTexture.h 2010-01-24 23:30:24.000000000 +0100 @@ -294,8 +294,8 @@ bool _BindDepthBuffer( ) const; protected: // data - int _iWidth; // width of the pbuffer - int _iHeight; // height of the pbuffer + GLint _iWidth; // width of the pbuffer + GLint _iHeight; // height of the pbuffer bool _bIsTexture; bool _bIsDepthTexture; @@ -342,8 +342,8 @@ // Texture stuff GLenum _iTextureTarget; - unsigned int _iTextureID; - unsigned int _iDepthTextureID; + GLuint _iTextureID; + GLuint _iDepthTextureID; unsigned short* _pPoorDepthTexture; // [Redge] diff -ru OpenCSG-1.2.0/example/example.pro OpenCSG-1.2.0-mac/example/example.pro --- OpenCSG-1.2.0/example/example.pro 2010-01-02 20:56:12.000000000 +0100 +++ OpenCSG-1.2.0-mac/example/example.pro 2010-01-24 23:30:24.000000000 +0100 @@ -2,9 +2,16 @@ TARGET = opencsgexample CONFIG += opengl warn_on release -INCLUDEPATH += ../glew/include ../include - -LIBS += -L../lib -lopencsg -lglut -L../glew/lib -lGLEW +INCLUDEPATH += ../include +LIBS += -L../lib -lopencsg -lGLEW +macx { + INCLUDEPATH += /opt/local/include + LIBS += -framework GLUT -L/opt/local/lib +} +else { + INCLUDEPATH += ../glew/include + LIBS += -lglut -L../glew/lib +} HEADERS = displaylistPrimitive.h SOURCES = displaylistPrimitive.cpp main.cpp diff -ru OpenCSG-1.2.0/example/main.cpp OpenCSG-1.2.0-mac/example/main.cpp --- OpenCSG-1.2.0/example/main.cpp 2010-01-02 21:03:19.000000000 +0100 +++ OpenCSG-1.2.0-mac/example/main.cpp 2010-01-24 23:30:24.000000000 +0100 @@ -22,7 +22,11 @@ // #include +#ifdef __APPLE__ +#include +#else #include +#endif #include #include "displaylistPrimitive.h" #include diff -ru OpenCSG-1.2.0/opencsg.pro OpenCSG-1.2.0-mac/opencsg.pro --- OpenCSG-1.2.0/opencsg.pro 2010-01-02 20:56:12.000000000 +0100 +++ OpenCSG-1.2.0-mac/opencsg.pro 2010-01-24 23:30:24.000000000 +0100 @@ -1,2 +1,4 @@ TEMPLATE = subdirs SUBDIRS = src example +# On Mac we get glew from MacPorts +!macx:SUBDIRS += glew diff -ru OpenCSG-1.2.0/src/channelManager.cpp OpenCSG-1.2.0-mac/src/channelManager.cpp --- OpenCSG-1.2.0/src/channelManager.cpp 2010-01-02 21:03:04.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/channelManager.cpp 2010-01-24 23:30:24.000000000 +0100 @@ -23,7 +23,7 @@ #include #ifdef _WIN32 #include -#else +#elif !defined(__APPLE__) #include #endif @@ -170,9 +170,11 @@ #ifdef WIN32 if ( WGLEW_ARB_pbuffer && WGLEW_ARB_pixel_format -#else +#elif !defined(__APPLE__) if ( GLXEW_SGIX_pbuffer && GLXEW_SGIX_fbconfig +#else + if ( false #endif ) { newOffscreenType = OpenCSG::PBuffer; Only in OpenCSG-1.2.0-mac/src: channelManager.cpp.orig diff -ru OpenCSG-1.2.0/src/frameBufferObject.h OpenCSG-1.2.0-mac/src/frameBufferObject.h --- OpenCSG-1.2.0/src/frameBufferObject.h 2010-01-02 21:03:01.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/frameBufferObject.h 2010-01-24 23:30:24.000000000 +0100 @@ -77,10 +77,10 @@ /// Texture stuff GLenum textureTarget; - unsigned int textureID; - unsigned int depthID; + GLuint textureID; + GLuint depthID; - unsigned int framebufferID; + GLuint framebufferID; bool initialized; }; Only in OpenCSG-1.2.0-mac/src: frameBufferObject.h.orig diff -ru OpenCSG-1.2.0/src/occlusionQuery.cpp OpenCSG-1.2.0-mac/src/occlusionQuery.cpp --- OpenCSG-1.2.0/src/occlusionQuery.cpp 2010-01-02 21:03:04.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/occlusionQuery.cpp 2010-01-24 23:30:24.000000000 +0100 @@ -57,7 +57,7 @@ } unsigned int OcclusionQueryARB::getQueryResult() { - unsigned int fragmentCount; + GLuint fragmentCount; glGetQueryObjectuivARB(mQueryObject, GL_QUERY_RESULT_ARB, &fragmentCount); return fragmentCount; } @@ -94,7 +94,7 @@ } unsigned int OcclusionQueryNV::getQueryResult() { - unsigned int fragmentCount; + GLuint fragmentCount; glGetOcclusionQueryuivNV(mQueryObject, GL_PIXEL_COUNT_NV, &fragmentCount); return fragmentCount; } diff -ru OpenCSG-1.2.0/src/openglHelper.cpp OpenCSG-1.2.0-mac/src/openglHelper.cpp --- OpenCSG-1.2.0/src/openglHelper.cpp 2010-01-02 21:03:04.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/openglHelper.cpp 2010-01-24 23:30:24.000000000 +0100 @@ -29,13 +29,13 @@ GLfloat projection[16]; GLfloat modelview[16]; - int canvasPos[4]; + GLint canvasPos[4]; - int stencilBits = 0; + GLint stencilBits = 0; int stencilMax = 0; int stencilMask = 0; - int scissorPos[4]; + GLint scissorPos[4]; void scissor(const PCArea& area) { const int dx = area.maxx - area.minx; diff -ru OpenCSG-1.2.0/src/openglHelper.h OpenCSG-1.2.0-mac/src/openglHelper.h --- OpenCSG-1.2.0/src/openglHelper.h 2010-01-02 21:03:01.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/openglHelper.h 2010-01-24 23:30:24.000000000 +0100 @@ -36,17 +36,17 @@ // copy of the projection matrix during CSG computation extern GLfloat modelview[16]; // copy of the modelview matrix during CSG computation - extern int canvasPos[4]; + extern GLint canvasPos[4]; // copy of the viewport size during CSG computation - extern int stencilBits; + extern GLint stencilBits; // number of stencil bits in the pbuffer extern int stencilMax; // the number where the stencil value would "wrap around" to zero extern int stencilMask; // stencilMax - 1 - extern int scissorPos[4]; + extern GLint scissorPos[4]; // copy of the scissor settings for CSG computation void scissor(const PCArea& area); diff -ru OpenCSG-1.2.0/src/pBufferTexture.h OpenCSG-1.2.0-mac/src/pBufferTexture.h --- OpenCSG-1.2.0/src/pBufferTexture.h 2010-01-02 21:03:01.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/pBufferTexture.h 2010-01-24 23:30:24.000000000 +0100 @@ -22,7 +22,7 @@ #ifndef __OpenCSG__pbuffer_texture_h__ #define __OpenCSG__pbuffer_texture_h__ - +#ifndef __APPLE__ #include "opencsgConfig.h" #include "offscreenBuffer.h" @@ -81,5 +81,26 @@ } // namespace OpenGL } // namespace OpenCSG +#else + +namespace OpenCSG { + namespace OpenGL { + class PBufferTexture : public OffscreenBuffer { + virtual bool Initialize(int , int , bool , bool ) {return false;} + virtual bool Reset() {return false;} + virtual bool Resize(int, int) {return false;} + virtual bool BeginCapture() {return false;} + virtual bool EndCapture() {return false;} + virtual void Bind() const {} + virtual void EnableTextureTarget() const {} + virtual void DisableTextureTarget() const {} + virtual unsigned int GetTextureTarget() const {return 0;} + virtual int GetWidth() const {return 0;} + virtual int GetHeight() const {return 0;} + virtual bool haveSeparateContext() const {return false;} + }; + } +} +#endif // __APPLE__ #endif // __OpenCSG__frame_buffer_object_h__ diff -ru OpenCSG-1.2.0/src/src.pro OpenCSG-1.2.0-mac/src/src.pro --- OpenCSG-1.2.0/src/src.pro 2010-01-02 20:56:12.000000000 +0100 +++ OpenCSG-1.2.0-mac/src/src.pro 2010-01-24 23:31:57.000000000 +0100 @@ -1,10 +1,19 @@ TEMPLATE = lib TARGET = opencsg VERSION = 1.2.0 -DESTDIR = ../lib +DESTDIR = $$(PWD)/lib CONFIG += opengl warn_on release -INCLUDEPATH += ../include ../glew/include ../ +INCLUDEPATH += ../include ../ + +macx { + INCLUDEPATH += /opt/local/include + LIBS += -L/opt/local/lib -lglew + CONFIG += absolute_library_soname +} +else { +INCLUDEPATH += ../glew/include +} HEADERS = ../include/opencsg.h \ opencsgConfig.h \ @@ -17,12 +26,11 @@ offscreenBuffer.h \ opencsgRender.h \ openglHelper.h \ - pBufferTexture.h \ primitiveHelper.h \ scissorMemo.h \ settings.h \ - stencilManager.h \ - ../RenderTexture/RenderTexture.h + stencilManager.h + SOURCES = area.cpp \ batch.cpp \ channelManager.cpp \ @@ -32,12 +40,21 @@ offscreenBuffer.cpp \ opencsgRender.cpp \ openglHelper.cpp \ - pBufferTexture.cpp \ primitive.cpp \ primitiveHelper.cpp \ renderGoldfeather.cpp \ renderSCS.cpp \ scissorMemo.cpp \ settings.cpp \ - stencilManager.cpp \ - ../RenderTexture/RenderTexture.cpp + stencilManager.cpp + +!macx { + HEADERS += ../RenderTexture/RenderTexture.h \ + pBufferTexture.h + + SOURCES += ../RenderTexture/RenderTexture.cpp \ + pBufferTexture.cpp +} + +INSTALLS += target +target.path = $$DESTDIR Only in OpenCSG-1.2.0-mac/src: src.pro.orig openscad-2013.01+dfsg.orig/patches/CGAL-OGL_helper-colors.patch0000644000175000017500000000516711641217140023371 0ustar chrysnchrysn--- OGL_helper.h 2011-09-29 23:02:04.000000000 +0200 +++ ../src/OGL_helper.h 2011-09-29 23:01:27.000000000 +0200 @@ -263,7 +263,7 @@ enum { SNC_BOUNDARY, SNC_SKELETON }; class Polyhedron : public OGL_base_object { - + protected: std::list vertices_; std::list edges_; std::list halffacets_; @@ -356,11 +356,17 @@ Bbox_3 bbox() const { return bbox_; } Bbox_3& bbox() { return bbox_; } + virtual CGAL::Color getVertexColor(Vertex_iterator v) const + { + CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR), + ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish + CGAL::Color c = v->mark() ? ct : cf; + return c; + } + void draw(Vertex_iterator v) const { // CGAL_NEF_TRACEN("drawing vertex "<<*v); - CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR), - ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish - CGAL::Color c = v->mark() ? ct : cf; + CGAL::Color c = getVertexColor(v); glPointSize(10); glColor3ub(c.red(), c.green(), c.blue()); glBegin(GL_POINTS); @@ -372,12 +378,18 @@ glEnd(); } + virtual CGAL::Color getEdgeColor(Edge_iterator e) const + { + CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), + ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish + CGAL::Color c = e->mark() ? ct : cf; + return c; + } + void draw(Edge_iterator e) const { // CGAL_NEF_TRACEN("drawing edge "<<*e); Double_point p = e->source(), q = e->target(); - CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), - ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish - CGAL::Color c = e->mark() ? ct : cf; + CGAL::Color c = getEdgeColor(e); glLineWidth(5); glColor3ub(c.red(),c.green(),c.blue()); glBegin(GL_LINE_STRIP); @@ -386,6 +398,14 @@ glEnd(); } + virtual CGAL::Color getFacetColor(Halffacet_iterator f) const + { + CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), + ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish + CGAL::Color c = (f->mark() ? ct : cf); + return c; + } + void draw(Halffacet_iterator f) const { // CGAL_NEF_TRACEN("drawing facet "<<(f->debug(),"")); GLUtesselator* tess_ = gluNewTess(); @@ -403,9 +423,7 @@ GLU_TESS_WINDING_POSITIVE); DFacet::Coord_const_iterator cit; - CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), - ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish - CGAL::Color c = (f->mark() ? ct : cf); + CGAL::Color c = getFacetColor(f); glColor3ub(c.red(),c.green(),c.blue()); gluTessBeginPolygon(tess_,f->normal()); // CGAL_NEF_TRACEN(" "); openscad-2013.01+dfsg.orig/patches/CGAL-OGL_helper-tesscombine.patch0000644000175000017500000000242711641217140024377 0ustar chrysnchrysn--- ../../libraries/install/include/CGAL/Nef_3/OGL_helper.h 2010-06-09 21:00:52.000000000 +0200 +++ OGL_helper.h 2011-09-29 23:09:47.000000000 +0200 @@ -243,6 +243,22 @@ glVertex3dv(pc); } + inline void CGAL_GLU_TESS_CALLBACK combineCallback(GLdouble coords[3], GLvoid *[4], GLfloat [4], GLvoid **dataOut) + { static std::list pcache; + if (dataOut) { + GLdouble *n = new GLdouble[3]; + n[0] = coords[0]; + n[1] = coords[1]; + n[2] = coords[2]; + pcache.push_back(n); + *dataOut = n; + } else { + for (std::list::const_iterator i = pcache.begin(); i != pcache.end(); i++) + delete[] *i; + pcache.clear(); + } + } + enum { SNC_AXES}; enum { SNC_BOUNDARY, SNC_SKELETON }; @@ -376,6 +392,8 @@ GLUtesselator* tess_ = gluNewTess(); gluTessCallback(tess_, GLenum(GLU_TESS_VERTEX_DATA), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &vertexCallback); + gluTessCallback(tess_, GLenum(GLU_TESS_COMBINE), + (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &combineCallback); gluTessCallback(tess_, GLenum(GLU_TESS_BEGIN), (GLvoid (CGAL_GLU_TESS_CALLBACK *)(CGAL_GLU_TESS_DOTS)) &beginCallback); gluTessCallback(tess_, GLenum(GLU_TESS_END), openscad-2013.01+dfsg.orig/patches/CGAL-Valgrind-Enable-Hack.patch0000644000175000017500000000136511516152336023712 0ustar chrysnchrysn--- CGAL-3.4/include/CGAL/Interval_nt.h +++ CGAL-3.4/include/CGAL/Interval_nt.h @@ -149,11 +149,13 @@ // The macros CGAL_IA_MUL and CGAL_IA_DIV stop constant propagation only // on the second argument, so if -fno-rounding-math, the compiler optimizes // the 2 negations and we get wrong rounding. +#if 0 typename Interval_nt<>::Internal_protector P; CGAL_assertion_msg(-CGAL_IA_MUL(-1.1, 10.1) != CGAL_IA_MUL(1.1, 10.1), "Wrong rounding: did you forget the -frounding-math option if you use GCC?"); CGAL_assertion_msg(-CGAL_IA_DIV(-1, 10) != CGAL_IA_DIV(1, 10), "Wrong rounding: did you forget the -frounding-math option if you use GCC?"); +#endif } }; openscad-2013.01+dfsg.orig/setenv_mjau.sh0000644000175000017500000000072012076022154017602 0ustar chrysnchrysnexport OPENSCAD_LIBRARIES=$PWD/../libraries/install export DYLD_LIBRARY_PATH=$OPENSCAD_LIBRARIES/lib export QMAKESPEC=macx-g++ #export OPENCSGDIR=$PWD/../OpenCSG-1.3.0 #export CGALDIR=$PWD/../install/CGAL-3.6 #export QCODEEDITDIR=$PWD/../qcodeedit-2.2.3/install #export DYLD_LIBRARY_PATH=$OPENCSGDIR/lib:$QCODEEDITDIR/lib # Own own Qt export PATH=$OPENSCAD_LIBRARIES/bin:$PATH # ccache: export PATH=/opt/local/libexec/ccache:$PATH export CCACHE_BASEDIR=$PWD/.. openscad-2013.01+dfsg.orig/examples/0000755000175000017500000000000012110740366016546 5ustar chrysnchrysnopenscad-2013.01+dfsg.orig/examples/example010.dat0000644000175000017500000011523011516152336021121 0ustar chrysnchrysn# Created by Octave 3.1.54, Sat Jul 25 03:55:47 2009 CEST # name: d # type: matrix # rows: 46 # columns: 46 4.546487134128409 3.049135365122645 1.430224191212503 -0.2457055078678564 -1.91183970371809 -3.501754883740146 -4.952066146974032 -6.204954160076457 -7.210470231681788 -7.928527609104572 -8.330499610668049 -8.400360881165891 -8.135326272203333 -7.545961877274642 -6.655763794958727 -5.500221413615028 -4.125402561462865 -2.586116927645778 -0.9437309728873401 0.7362785576448079 2.386934985545012 3.942431847980459 5.340756393700049 6.526161835734216 7.451389799872247 8.079554366909637 8.385612597846531 8.357362916838071 7.995931549519037 7.315727623941807 6.343868724111537 5.119099797486346 3.690248516188934 2.114278671803671 0.4540192087657636 -1.224340567385163 -2.853889748744539 -4.369663351791345 -5.71123226627233 -6.825112373132667 -7.666896787563758 -8.203026221366581 -8.412126885869672 -8.285862597434599 -7.829267114791266 -7.060543458962299 5.035828673073257 3.377315902755755 1.584160205132016 -0.2721509607637287 -2.117612326675841 -3.878651171635513 -5.48506043417364 -6.872797646310392 -7.986538104655897 -8.781880491747168 -9.227117016458916 -9.304497503575988 -9.01093703726527 -8.358138946934957 -7.372128232423011 -6.09221402938029 -4.569422478079272 -2.864462472223704 -1.045305386934624 0.815524725479631 2.643842440626112 4.366758500792109 5.915585679634834 7.228577125140624 8.25338801176127 8.949162363424968 9.288161852373825 9.256871638758197 8.856539164652959 8.103124422478512 7.026663680467649 5.670072031436031 4.087432503458046 2.34183994020634 0.5028856086418853 -1.356117185191807 -3.161055866327164 -4.839973225360668 -6.325936125317769 -7.559703914604285 -8.492090164840738 -9.085923578545179 -9.317529891462899 -9.17767569077386 -8.67193652212408 -7.820474610215396 5.324407614299007 3.570853513082628 1.674940750779526 -0.2877466136759709 -2.238962428681152 -4.100917877109334 -5.799382670971877 -7.266644378753076 -8.444207906375773 -9.285127512010241 -9.755878384655105 -9.837693172558298 -9.52731017830761 -8.837103392413644 -7.794589181356518 -6.441329296887258 -4.831273940141129 -3.028610937368119 -1.105206773856724 0.8622584960466719 2.795348240726728 4.616996272280487 6.254579232232685 7.64281185566189 8.726349688693348 9.461995497225455 9.820421404336635 9.787338100188716 9.364064511717672 8.567475221178798 7.429327729803009 5.99499638643935 4.321663455453438 2.476039440296261 0.5317035462487614 -1.4338296903001 -3.342200661807952 -5.117328639853587 -6.688444873692612 -7.992913917025852 -8.978730705585699 -9.60659383493706 -9.851472383449366 -9.703603816152382 -9.168883186197988 -8.268628117693945 5.400719226082497 3.622032462322777 1.698946694274643 -0.2918707171379004 -2.271052164109463 -4.159693928017514 -5.882501821688773 -7.370792931037254 -8.565233786107424 -9.418205799283712 -9.895703668109622 -9.97869105938673 -9.663859527706666 -8.963760412729174 -7.906304456877885 -6.53364909211736 -4.900517756176106 -3.07201824177415 -1.121047054386814 0.8746167413903643 2.835412327701047 4.683168972167305 6.344222448307544 7.752351795785409 8.851419341126077 9.59760872960501 9.961171745040346 9.927614277296112 9.498274156714555 8.690267819042166 7.535807927150502 6.080919153820417 4.383603323277566 2.511527061495859 0.5393241413542663 -1.454379930367366 -3.39010246382654 -5.190672310139893 -6.784306431561657 -8.107471664674037 -9.107417587122166 -9.744279510489891 -9.992667759626542 -9.842679878873495 -9.300295411722241 -8.387137515284946 5.261721205277139 3.528812407274513 1.655220994405354 -0.2843588561588514 -2.212602216474262 -4.052636108688901 -5.731104188082895 -7.181091229043116 -8.344790823945194 -9.175809942206806 -9.641018474015334 -9.721870023257994 -9.41514129380829 -8.733060592170913 -7.702820323490013 -6.365492916166737 -4.774393393750382 -2.992953873194801 -1.092194726527053 0.852106777267553 2.762437472830941 4.562638503728103 6.180941535720031 7.552829933771732 8.623610836697077 9.350595588940964 9.704801602564489 9.672107801566185 9.253817584620604 8.466606862686255 7.341859243059576 5.924414863988718 4.270782759862838 2.446888024335571 0.5254435848797225 -1.416948632172156 -3.302851578699326 -5.057080255534608 -6.609699101121306 -7.898810101657983 -8.873020469578222 -9.493491511811653 -9.735487005914017 -9.589359355196404 -9.06093420796045 -8.171278207284479 4.91295496433882 3.294909737359715 1.545506856841021 -0.2655105049310103 -2.06594280073829 -3.784012476539642 -5.351225516043248 -6.705102080990831 -7.7916673851425 -8.567603498676819 -9.001976297355174 -9.077468708436898 -8.791071087722237 -8.154201204569132 -7.19224905145976 -5.943564625123038 -4.457929033185433 -2.794569878503285 -1.019800041540425 0.7956260049135155 2.579332953294609 4.260210036383667 5.771245989192293 7.052200576631698 8.052006181586624 8.730803709656549 9.061531645466804 9.031004909888981 8.640440507537887 7.905409008638012 6.855213799524476 5.531722849102 3.987699565046725 2.284699283246702 0.4906152508091408 -1.32302806345222 -3.083926423880241 -4.721878369680736 -6.171583925630922 -7.375247906025503 -8.284884026347463 -8.864227965002353 -9.090183107381513 -8.953741335000977 -8.460342150758638 -7.629655823119084 4.368324712698232 2.929649413905326 1.374178238023352 -0.2360770877384193 -1.836920764996389 -3.364532208092634 -4.75801036944758 -5.961801672142627 -6.927914755722455 -7.61783374029087 -8.004053733098379 -8.071177361819418 -7.816528619197737 -7.250259547011087 -6.394945506202153 -5.284685168478457 -3.96374110987594 -2.484775201531057 -0.9067491470627086 0.7074261344866228 2.29339856846624 3.787940438758798 5.131469077295334 6.270422237007184 7.159393449591173 7.762942238112459 8.057007016981043 8.029864351438505 7.682596333906389 7.029047444376102 6.095272614680437 4.918498500582482 3.545639372485864 2.031426791520294 0.4362276349147517 -1.176362540898928 -2.742054854433646 -4.198430093976552 -5.487427174584921 -6.55765785032041 -7.366455401449627 -7.881575621917326 -8.082482294089306 -7.961165902943748 -7.522462950159604 -6.783863138057164 3.649543139808145 2.44759321336187 1.148065469325888 -0.1972320220420281 -1.534666495092764 -2.810918657904327 -3.975108364192017 -4.980823044179203 -5.787968027290999 -6.36436499014402 -6.687034804755113 -6.743113643859221 -6.530365821108268 -6.05727292083076 -5.342695664029783 -4.415121990955059 -3.311531336824084 -2.075920378435365 -0.7575490255040018 0.5910234164900096 1.916033619950813 3.164657609377909 4.287116686573691 5.238661950254811 5.981358293533024 6.485596756915665 6.731274944084161 6.708598440998452 6.418471288276723 5.872459939948812 5.092332145434113 4.109189138064303 2.962225727056051 1.697167724153914 0.3644489998122177 -0.9827991560666609 -2.290866210995255 -3.50760365933783 -4.584504018666033 -5.478634670009056 -6.15434944589027 -6.584709730536586 -6.752558417479561 -6.651203909247942 -6.284686890242273 -5.667619237398981 2.785265798733263 1.867959195228706 0.8761829532964909 -0.1505239380284582 -1.171229914949966 -2.145242651192145 -3.033731332635951 -3.801274719340386 -4.417273278600766 -4.857169091755243 -5.103424900904859 -5.146223264043962 -4.983857945492241 -4.622801938126964 -4.077449405583663 -3.369541832375409 -2.527301259514483 -1.584305160797028 -0.5781478148826403 0.4510584599601819 1.462282457401677 2.415209867765704 3.271850482337386 3.99805274309953 4.564865257579304 4.949690999504721 5.137188180933072 5.119881880922376 4.898462047040874 4.481755989334729 3.886376463332679 3.136059371907682 2.260717489732352 1.295247935347975 0.2781409331724952 -0.750054670284097 -1.748347960970855 -2.676940135684732 -3.498811154761955 -4.181195614235898 -4.696888999096009 -5.025332241452506 -5.153431345695215 -5.076079404778086 -4.796360196487312 -4.325425242952448 1.809948699677379 1.213855538667884 0.5693697878743604 -0.09781493961144824 -0.7611000941278394 -1.394042589681589 -1.971409006340514 -2.470181567057512 -2.870475783804629 -3.156333189361605 -3.316357551044089 -3.344169202537879 -3.238659381062657 -3.004034430245145 -2.649648106472589 -2.189628674143088 -1.642315656348354 -1.029528695961759 -0.37569767533284 0.2931112260290228 0.950234707775073 1.569475330361154 2.126145924291543 2.598053789661878 2.966385449071229 3.216456681596708 3.338297936342937 3.327051786975494 3.183166581980383 2.912378570424738 2.5254832158083 2.037904815000729 1.469081580199606 0.8416906987509336 0.180744265251656 -0.4874078717316904 -1.136128594973583 -1.739555456394979 -2.273631731254591 -2.717065483848913 -3.052178409798129 -3.26561061425464 -3.348853228751029 -3.298587632934588 -3.116817757488257 -2.810790193738072 0.7624746575887673 0.5113592923230357 0.2398576457599462 -0.0412063682250215 -0.3206276143430717 -0.5872664492762099 -0.8304928241031526 -1.04061007080476 -1.209241477818354 -1.32966424309348 -1.397077490994629 -1.408793668062789 -1.364345687290786 -1.265505549408286 -1.116213698804572 -0.9224219304455371 -0.6918561105903662 -0.4337081708841666 -0.1582696550500929 0.1234785724820486 0.4003040989885004 0.6611707643009137 0.895678637685649 1.094478630263245 1.249645213679287 1.354992385909446 1.406320287639134 1.401582637400947 1.340968310359362 1.226893808453956 1.063906922092792 0.8585054241002257 0.6188780240193119 0.3545779101032878 0.07614189384674533 -0.2053296594378249 -0.4786153671558212 -0.7328201905434427 -0.9578097854819362 -1.144614526816829 -1.285787099007545 -1.375699397096658 -1.410766901494015 -1.389591581461206 -1.31301763018535 -1.184097809460741 -0.3153968429699904 -0.2115232353191719 -0.09921686377634671 0.01704497102832257 0.132627276626609 0.2429221512353662 0.3435324862595468 0.4304472651360086 0.5002014699063924 0.5500142205486248 0.5778996398878249 0.5827460242524682 0.5643601635915864 0.5234750441497907 0.46172062661877 0.3815588647481526 0.286185555018652 0.1794029303213007 0.0654680769307238 -0.05107678209061699 -0.1655853709921119 -0.2734925936870061 -0.3704965297273865 -0.452729938296945 -0.5169144328985401 -0.5604911802782915 -0.5817229130325473 -0.5797631889770021 -0.5546901361254837 -0.5075033379725885 -0.4400839832541203 -0.3551198688886271 -0.2559982459960941 -0.1466707808848774 -0.03149601458619469 0.08493439842261759 0.1979787449923144 0.3031303037572243 0.3961970138943235 0.4734685993594334 0.5318644858846474 0.5690566137530826 0.5835622501931699 0.5748031012552267 0.5431283665663152 0.4898008178430777 -1.380694466691827 -0.9259729990693727 -0.4343359100507957 0.07461678107528391 0.5805947366067604 1.063426212162366 1.503862240474527 1.884344026970699 2.189702963502988 2.407765352887697 2.529837735795723 2.5510534715422 2.470566755693045 2.291586339618643 2.021247607702515 1.670328112082959 1.25281790565982 0.7853618028335425 0.2865958032807762 -0.2235958665434362 -0.7248734747661234 -1.197252665020412 -1.6219011696696 -1.981889592889172 -2.262866332254524 -2.453629731840534 -2.546574656894428 -2.537995686558978 -2.428234837308953 -2.22166792783356 -1.926530128954008 -1.55458765335044 -1.120668673792816 -0.6420721706855765 -0.1378782763090046 0.3718123898439437 0.8666800693356641 1.32699594943008 1.734408688598593 2.072676026595801 2.328312312120061 2.491126133174475 2.554626616502324 2.516282198220691 2.377621549283654 2.144172632195354 -2.390948159060002 -1.603507141423449 -0.7521393542177419 0.1292138555276426 1.00541571661104 1.84153482584592 2.604237752873515 3.263117938841503 3.791907909952001 4.169526478750082 4.380919184542068 4.417658467236295 4.278279647569251 3.968339319245766 3.500193825082827 2.89250664861418 2.169504359897848 1.360010778619294 0.4962978593593797 -0.3872008893947277 -1.255263160571735 -2.073282050748716 -2.808645728182195 -3.432037563627176 -3.918604891831163 -4.248949808870655 -4.409902505366961 -4.395046305226375 -4.20497347826705 -3.847261628290367 -3.336171597929878 -2.692078933858195 -1.940661578039921 -1.111876169216943 -0.2387637662554357 0.6438673946040369 1.500829594281713 2.29795845417703 3.003474962131552 3.58925240135922 4.031937673885623 4.3138823148693 4.423846081201991 4.357445064530748 4.117326463849724 3.713063050030014 -3.30588229339968 -2.217114514208372 -1.039957375845013 0.1786595813180147 1.390153944766803 2.546227257322191 3.600790524212898 4.511801635854819 5.2429414540886 5.765061741606376 6.057347210190657 6.108145360569123 5.915431030789019 5.486887133033441 4.839598360157432 3.99937007289772 2.999699521573657 1.880440416423686 0.6862140859437864 -0.535369434668916 -1.735609465377321 -2.86665622373352 -3.883418444706294 -4.745361027124189 -5.418121040243312 -5.874877665357591 -6.097421457202605 -6.076880297075037 -5.814073096207792 -5.31947714836337 -4.612810433194559 -3.722245522619361 -2.683286429282323 -1.537353173609781 -0.3301304983038976 0.8902534381823263 2.075145779445412 3.177308606983185 4.152802166937654 4.962736609421381 5.57482240410846 5.964657621913146 6.116700762897727 6.02489034683103 5.69288656527711 5.133925361308007 -4.089021333016357 -2.742332527821242 -1.286315578672616 0.2209827133941487 1.719471122029165 3.149409643133779 4.453791140303494 5.580614039459991 6.484955467509192 7.130762185529173 7.492287917633426 7.555119773743378 7.316752846033308 6.786690071700684 5.986063380848329 4.946791233116909 3.710306129423557 2.325902828898148 0.8487731223953848 -0.6621944900388012 -2.146762497830699 -3.545745859334898 -4.803371522675512 -5.869501921322429 -6.701633800650617 -7.266592688575257 -7.541855457065665 -7.516448248184021 -7.191383967171353 -6.579621901111978 -5.705551073052852 -4.604017928618686 -3.31893711818922 -1.901540758369277 -0.4083359691720135 1.101147886537466 2.566732450883808 3.929989492206033 5.136570254273005 6.138372169686898 6.895456557448895 7.377640852136887 7.565701887542177 7.452142263644087 7.041489244289306 6.35011426946898 -4.709143995738668 -3.158222397480602 -1.481392438582083 0.254495962038536 1.980238411761126 3.627035005010469 5.129233158380877 6.426944971957868 7.468434770900569 8.212181643536248 8.628534749081897 8.700895403097618 8.426378814655045 7.815929093848203 6.89388294466016 5.696999437374171 4.272994540441402 2.678638835395257 0.9774942529155544 -0.7626199407663925 -2.472330883996379 -4.083477796772693 -5.531829335951035 -6.759644296201945 -7.717973569654379 -8.368611592358691 -8.685619479556678 -8.656359127161986 -8.281997053088212 -7.577457891860837 -6.57082939653611 -5.302242668622715 -3.822272257705642 -2.189919913751454 -0.4702623735279068 1.268143043529455 2.955991599298102 4.525994098173628 5.915559494955271 7.069290202300532 7.941190617715322 8.496500823077938 8.713082352883248 8.582300785000461 8.109369967835956 7.313144160650595 -5.141527947914094 -3.448203906499507 -1.617410856769451 0.2778632597848961 2.162059845019839 3.960061927008222 5.600188836664843 7.017053889821449 8.154171147984922 8.966207334453294 9.420789129000436 9.499793789993564 9.200071650912507 8.533571687614522 7.52686515037404 6.220086251984656 4.665332143345871 2.924585964458808 1.067245772233472 -0.8326421410420161 -2.699335239708387 -4.458414360612515 -6.039750570299125 -7.380300984282985 -8.426622087910019 -9.137000360635794 -9.48311526245501 -9.451168284460866 -9.042433051851468 -8.273204548512339 -7.1741494874307 -5.789083725623066 -4.173225464184948 -2.390993872864271 -0.513440901049977 1.384581339232713 3.227404690819291 4.941561602047335 6.458714046201143 7.718377942983702 8.670334467929564 9.276632118461686 9.513099720536216 9.37031005707512 8.853955701361743 7.984622072107995 -5.368935405835869 -3.600716407202944 -1.68894820813253 0.2901530262118541 2.257686775031992 4.135213676674213 5.847882658448798 7.327415012691896 8.514826453374175 9.362778633449111 9.837466375364958 9.919965376815327 9.606986662953039 8.911007707438348 7.859774994939016 6.495197856345744 4.871677676002062 3.053939080184086 1.11444957050123 -0.8694695267085139 -2.818725617658153 -4.655608013234817 -6.306886008944467 -7.706728362007201 -8.799327775264402 -9.541125758006334 -9.902549165539984 -9.869189187144494 -9.442375779884992 -8.639124647421326 -7.491458877599298 -6.045132282992935 -4.357805340781697 -2.496746451483471 -0.5361501601036421 1.445820746239842 3.370151341981964 5.160124638846803 6.744380050075756 8.059758311830187 9.05381944373006 9.686933365387848 9.933859822653556 9.784754636897503 9.245562161347152 8.337778298482458 -5.382300351782382 -3.609679707468892 -1.693152524221641 0.2908753071145678 2.263306857866227 4.145507506472566 5.862439852701268 7.345655222001519 8.536022498156086 9.386085494285842 9.861954881263999 9.944659248324436 9.630901433341164 8.933189970277535 7.879340413410047 6.511366418956426 4.883804793183958 3.061541282044484 1.117223781242091 -0.8716339061148982 -2.825742300234944 -4.667197265990103 -6.322585804942894 -7.725912799925885 -8.82123203210352 -9.564876580168589 -9.927199682695818 -9.893756660964112 -9.465880782714354 -8.660630108971949 -7.510107442983564 -6.060180492757929 -4.368653270291459 -2.502961628021068 -0.5374848041936438 1.449419842645591 3.378540694267371 5.172969790010383 6.761168904475835 8.079821550822126 9.076357209288462 9.711047147921935 9.958588281749131 9.809111926925592 9.26857723401821 8.358533615477349 -5.181089967534271 -3.474736468801078 -1.629856192221796 0.2800013074327352 2.178696038555143 3.990533033893282 5.64328007002529 7.071047338165455 8.216914262913187 9.035198745970977 9.493278367245317 9.572890937789841 9.270862555648927 8.599234139312866 7.58478139429494 6.267947350248265 4.701230024998847 2.947089494241964 1.075457805428347 -0.8390489922843309 -2.720105554446849 -4.492720091943021 -6.086224056971523 -7.437089475039214 -8.491461604830073 -9.207305956793 -9.556084075592718 -9.52389127826568 -9.112010990051067 -8.336863578276587 -7.229351724130582 -5.83362843028209 -4.2053367799973 -2.409391623001631 -0.5173916252718265 1.395235143833869 3.252238290674027 4.979584959896401 6.508411290756739 7.777767801934123 8.737049255013993 9.348012125649753 9.586299252193967 9.442410878869843 8.922083381055785 8.046060574101277 -4.773325876155424 -3.201266452287175 -1.501582637146705 0.2579645392187804 2.007227483459789 3.676468602107865 5.199140519357471 6.514539110936956 7.570223585980346 8.324107135872664 8.746134802496814 8.819481674569811 8.541223643761541 7.922453979666336 6.987841076151081 5.774645000337366 4.331232051306271 2.715146548382711 0.9908167207155332 -0.773013842903595 -2.506026783992408 -4.139132345428268 -5.607223762039341 -6.851772861875711 -7.823163399728696 -8.482669100254197 -8.803997552362862 -8.774338404679673 -8.394874073827912 -7.680732605209696 -6.660384565575114 -5.374508011369955 -3.874366782992262 -2.219766777248058 -0.4766716749741102 1.285426822756593 2.996279409462914 4.587679791420381 5.996183857354676 7.165638994948616 8.049422718295403 8.612301359286031 8.831834722770459 8.699270706324162 8.219894218952904 7.412816488448197 -4.175264345195113 -2.800172044501049 -1.3134457208466 0.2256435388803507 1.755737102771503 3.215834968923976 4.547727643019533 5.698316767172359 6.621731983896433 7.281159642506184 7.650310443197156 7.714467508468514 7.471073098587216 6.929830580599756 6.112317585708757 5.05112577720909 3.78856152372123 2.374959277779841 0.8666749000507603 -0.676161070992536 -2.192040633885014 -3.620530454088728 -4.904681150332459 -5.993297686728825 -6.842980357299839 -7.419854995298554 -7.700923429341156 -7.674980347925095 -7.343060019838303 -6.718395061126436 -5.825888892449073 -4.701122918285288 -3.388938008620714 -1.941646834964742 -0.4169483292196312 1.12437259065492 2.620868323502963 4.012878306921188 5.244907495612248 6.267838773715967 7.040891099220648 7.533245315416116 7.725272813416223 7.609318062853523 7.190003813716571 6.484046801895833 -3.410748200600429 -2.287443613754537 -1.072945868473995 0.1843268427061244 1.434251024344538 2.626996143683169 3.715011216738866 4.654920515979006 5.409252823698197 5.947935291220925 6.249492348477882 6.301901867214561 6.103074445306729 5.660936704629639 4.993115281657762 4.126234109092623 3.094853003682659 1.940089875389279 0.7079814860717643 -0.5523518909306521 -1.790664741088856 -2.957589438789203 -4.00660437877821 -4.895888645756584 -5.589989282298683 -6.061234686386791 -6.290837790860787 -6.269645044499783 -5.998501335223617 -5.488216307077675 -4.759133413836612 -3.840318889699831 -2.768402970257767 -1.586119560592286 -0.3406025693357043 0.9184931715267248 2.140971488113207 3.278096027694826 4.284533223282468 5.120159599884286 5.751661370836673 6.153862553350843 6.310728655499175 6.216005920808633 5.873470645796447 5.296778630944794 -2.510256288486159 -1.683522024573375 -0.7896710502018139 0.1356616169901937 1.05558588361779 1.933427272159427 2.734189016642643 3.425947273264703 3.981123823303499 4.377585529669897 4.59952671523833 4.638099285316098 4.491765473256983 4.166359146364736 3.674853228013503 3.036842508131333 2.277762460760673 1.427875211974583 0.5210630844078612 -0.4065221840245499 -1.317900695834841 -2.176738665778339 -2.948796934213331 -3.60329597434807 -4.114142974843539 -4.460972077860914 -4.629956301545421 -4.614358778159311 -4.414801331739156 -4.03923968793379 -3.502646304328436 -2.826413465809092 -2.037500441671404 -1.16735870462873 -0.2506780598459248 0.6759963281225712 1.575720875718599 2.412626404474485 3.153348131966858 3.768355820403181 4.233131054014477 4.529144710919736 4.644595660743251 4.574881238442103 4.322780738036853 3.898344610929531 -1.509688379721747 -1.012483724933438 -0.4749145391091887 0.08158799070985261 0.6348378648050846 1.162778756577268 1.644363328685269 2.060392323967141 2.394279979236409 2.632715247320912 2.766192466508119 2.789390321280759 2.701383986374111 2.505681996640854 2.210086372838312 1.826381579681559 1.369864716423261 0.8587356697792575 0.3133715418782656 -0.2444857204963248 -0.7925961087140347 -1.309108191258972 -1.773430261348203 -2.167051263300292 -2.474278769910309 -2.682864590002175 -2.784493065159446 -2.775112588784801 -2.655097130869491 -2.429231328989921 -2.106519739906278 -1.699827856300014 -1.225369200180058 -0.7020589409250443 -0.150759807170451 0.4065496443459431 0.9476512444838604 1.450972979990634 1.896449001595198 2.26631958609706 2.545839160486248 2.723864161406895 2.793297293862669 2.75137047797148 2.59975520357519 2.344495893214314 -0.4489339593550001 -0.3010808942575579 -0.141224684021771 0.02426170870570256 0.1887808636693288 0.3457739213309235 0.4889820639017611 0.612696034656969 0.7119837479845479 0.7828869160746246 0.8225788533633334 0.829477167566125 0.8033068446646229 0.7451112128476809 0.657210348308904 0.5431085811302354 0.4073547887001401 0.2553610463269413 0.09318686487506814 -0.07270238281121608 -0.2356932159204538 -0.3892877042838959 -0.5273625203459285 -0.6444130569104365 -0.7357728784589211 -0.7977997572088324 -0.8280208772415469 -0.825231417869619 -0.7895425860355593 -0.7223771828419703 -0.6264128809614945 -0.5054754742772395 -0.3643863555536506 -0.2087703027217771 -0.04483123673317359 0.1208951091908324 0.2818017486179796 0.4314738416045685 0.5639444341208273 0.6739323416782621 0.757052693489469 0.8099917434291753 0.8306389786351164 0.8181712589957502 0.7730856331489335 0.69717952272126 0.6297180412781989 0.4223250815566671 0.1980953535573332 -0.03403181106229467 -0.2648022347684586 -0.4850158290061779 -0.6858933726973768 -0.8594265120808325 -0.9986970285048157 -1.09815264597303 -1.153828382867369 -1.163504623252803 -1.126795605960306 -1.045164803667328 -0.9218665788603957 -0.761816442672515 -0.5713950889660844 -0.3581940162040492 -0.1307128783625411 0.1019793694509399 0.3306060216189227 0.5460524549925905 0.7397295001538707 0.903915864495442 1.03206595579104 1.119070834301707 1.161461890080995 1.157549125507695 1.107488530157902 1.013275861992868 0.8786670827870677 0.7090286197848682 0.5111234231810415 0.2928413486382201 0.06288461363950699 -0.1695791324611385 -0.3952822936884582 -0.6052267972518273 -0.7910428183123687 -0.9453224584867627 -1.061915075378811 -1.13617248928231 -1.165134291437744 -1.14764586618743 -1.08440442185818 -0.9779311952654839 1.683265170795829 1.12889428909309 0.5295179545161437 -0.09096858991682827 -0.7078285037378014 -1.296469528796759 -1.833424404988772 -2.297286435859161 -2.669562906038411 -2.93541232744681 -3.084236122589167 -3.110101156393801 -3.011976271584753 -2.793773397668383 -2.464191594648746 -2.036370248956716 -1.527365247576704 -0.9574690136555669 -0.3494015116281765 0.2725955260675967 0.8837250403639841 1.459623226056689 1.977330839833961 2.416208512855347 2.758759577256071 2.991327603080867 3.104640837050949 3.094181838108516 2.960367573536122 2.708532795786939 2.348717362739231 1.895265980245349 1.366256323976739 0.7827783395423258 0.1680934529102542 -0.4532927892397816 -1.056607678330947 -1.617798953605395 -2.114493689859416 -2.526890235369443 -2.838547641258541 -3.037041110245732 -3.114457334104856 -3.067709972291675 -2.898662694601847 -2.614054882537336 2.669705829804243 1.790458043755305 0.8398303456189292 -0.1442787381593636 -1.122635883945128 -2.056237079720395 -2.907862591958544 -3.643560798946349 -4.234001734801155 -4.655646382654547 -4.891685100973239 -4.932707770921118 -4.777078948101876 -4.431003062566172 -3.908277067764701 -3.229740399552937 -2.422444173646198 -1.518572743000832 -0.5541606092254262 0.4323441592848651 1.401612730505363 2.315003425205354 3.136102238758166 3.832174552594589 4.375470160145175 4.744329580005311 4.924047551108387 4.907459285079375 4.695226103737553 4.295809074282484 3.725131693245221 3.005945066931102 2.166920896606633 1.241508428248773 0.2666009366630344 -0.7189350929595494 -1.675809449156724 -2.565874570938535 -3.353646370662466 -4.007718872631197 -4.502016270236361 -4.816832486081088 -4.939616791099661 -4.865474162519273 -4.597360432970828 -4.145964450769626 3.54971374212228 2.380641886330078 1.116661351079797 -0.1918369484093717 -1.492687314141955 -2.73402894710691 -3.866373473677969 -4.844577890900531 -5.62964427556248 -6.19027450832758 -6.50411803098649 -6.558662892681309 -6.351734561902528 -5.89158261819819 -5.196551867470355 -4.294350992454181 -3.22094789497706 -2.019135769216056 -0.736827072087785 0.5748565952123353 1.863622544126233 3.078091743206837 4.169847137965979 5.095363886047989 5.817744555343825 6.308190108172687 6.547148028033732 6.525091816737419 6.242900785825731 5.711825001195826 4.953036778474351 3.996786609606501 2.881197171203133 1.65074349372734 0.3544798823789649 -0.9559157232538983 -2.228201985567143 -3.41165686621379 -4.459099753710306 -5.328772405529383 -5.986003717453734 -6.404591951090286 -6.567849314495497 -6.46926725177881 -6.112775918687044 -5.51258749969712 4.288205769311382 2.875917049446775 1.34897459230178 -0.231747224902796 -1.803230011571154 -3.302823708099532 -4.670744246048903 -5.852456950294104 -6.800850664426962 -7.47811592389443 -7.857252300035656 -7.923144821967909 -7.673166562777629 -7.117283366806719 -6.277656542887673 -5.187759362894486 -3.891042588024042 -2.439202224064016 -0.890118564778289 0.6944513127535784 2.25133560791381 3.718466256886861 5.037353390496664 6.155417140715221 7.02808383407551 7.620563003372249 7.909234373801725 7.882589528780094 7.541690714195699 6.900128490017602 5.983479917557116 4.828288882746387 3.480609206727212 1.994168625333327 0.4282268338104019 -1.154787010228619 -2.691763140310978 -4.121427168338916 -5.386782901080704 -6.437384598532856 -7.23134808638331 -7.737020545868154 -7.93424241176944 -7.815151070663276 -7.384494318505103 -6.659441080987506 4.855740564693871 3.256538475283084 1.527508473464183 -0.2624184708600041 -2.041883618860373 -3.739945310513147 -5.288907184715668 -6.627017019575332 -7.700928598626055 -8.46782845613504 -8.897142714875848 -8.971755970131976 -8.688693626872098 -8.059240487467115 -7.108490862230847 -5.874348138457536 -4.406013691981442 -2.762025383586276 -1.007923839222646 0.7863604479231795 2.549295025514206 4.210597255203638 5.704036259636104 6.970073338524186 7.958235588743649 8.629128099704545 8.956004504118614 8.925833271260007 8.539817232971965 7.813345630556984 6.775380594289642 5.467302514677827 3.941260336876582 2.258092546810274 0.4849017327257366 -1.307620583246664 -3.048012193000405 -4.66688917517789 -6.099712013161457 -7.289358581934639 -8.188401426947269 -8.760998547062469 -8.984322302035931 -8.849469478495738 -8.361816232963735 -7.540803761460487 5.229692306937458 3.507331988711279 1.645145412121301 -0.2826279204933955 -2.199133769801996 -4.027967095476507 -5.696218084039577 -7.137378833047617 -8.293994811283408 -9.119955389607474 -9.582332126231357 -9.662691519780038 -9.357829894821458 -8.679901122296229 -7.655932083036974 -6.326745191317807 -4.74533093401977 -2.974735307140072 -1.085546370884799 0.8469198735379744 2.745622095213007 4.534865028263448 6.143317203231159 7.506854707664531 8.571117604153223 9.293677089490007 9.645726997162825 9.613232208310484 9.197488187621289 8.415069337243999 7.297168227677697 5.888352048419835 4.244785854760888 2.431993444268991 0.5222451297532001 -1.408323450046034 -3.282746618113592 -5.026297037822943 -6.569464856031814 -7.85072884157588 -8.819009042613789 -9.43570318311505 -9.676225613788761 -9.530987464336391 -9.005778921451114 -8.121538392346379 5.395152720151853 3.618299243775675 1.697195594753702 -0.2915698868206932 -2.26871139710953 -4.155406543328425 -5.876438743808457 -7.363195875747651 -8.556405624029034 -9.408498481379727 -9.885504194511661 -9.968406050920841 -9.653899015204164 -8.95452149039132 -7.898155451383183 -6.526914878599211 -4.895466806476436 -3.068851921318294 -1.119891594379443 0.8737152764050196 2.832489876287216 4.678342043240527 6.337683476291875 7.744361468860196 8.842296208410893 9.587716501611499 9.950904793681877 9.917381913524109 9.488484312582518 8.681310784741999 7.528040791374196 6.07465156776076 4.379085155812245 2.508938437703814 0.5387682614972115 -1.452880905113711 -3.386608294868589 -5.185322298967513 -6.777313866237354 -8.099115316710975 -9.098030597743653 -9.734236109340088 -9.982368345415507 -9.832535056744142 -9.290709623719028 -8.378492916525859 5.345525419802729 3.585016326194277 1.681583944833682 -0.2888878818624344 -2.247842660347122 -4.117183045441479 -5.822384335036501 -7.295465534789873 -8.477699545843972 -9.321954428933225 -9.794572406069209 -9.876711689935791 -9.565097646490701 -8.872153344291123 -7.825504285953553 -6.466877066541816 -4.850435865897734 -3.040623093715808 -1.109590274028466 0.86567840836979 2.806435224432541 4.635308324315644 6.279386308869567 7.673124977038238 8.760960366318479 9.49952391260276 9.859371417972785 9.826156897953913 9.401204510644819 8.601455766712713 7.458794124825067 6.018773898766608 4.338804150703687 2.485859973040466 0.5338124028368944 -1.439516583325327 -3.35545658596765 -5.137625123282998 -6.714972759646662 -8.02461562240514 -9.014342383437267 -9.644695760044115 -9.890545552295466 -9.742090504798149 -9.205249051818882 -8.301423367986789 5.082788889746999 3.408810120860735 1.598932849578142 -0.2746888286927486 -2.137359530194382 -3.914820452055196 -5.536209836422897 -6.936888005132817 -8.061014339694061 -8.863773470533452 -9.313161924357349 -9.391264001639069 -9.094966019022742 -8.436080442052933 -7.440874959449751 -6.149025273252079 -4.612033353781187 -2.891174218607906 -1.055053090966565 0.8231296739990461 2.668496856398217 4.407479490061577 5.970749825062005 7.295985206327845 8.330352681230107 9.032615282679755 9.374776016874794 9.343194015093491 8.939128352084104 8.178687850727879 7.092188874105124 5.722946707767992 4.125548715994828 2.363678115836767 0.5075751282179191 -1.368763278017028 -3.190533411739751 -4.885107046646795 -6.384926879450768 -7.630199826372963 -8.571280784705591 -9.170651826392648 -9.40441791942675 -9.263259547370208 -8.752804249065901 -7.893402266422392 4.617417606324923 3.096705413130865 1.452537347334307 -0.2495387987538081 -1.941666620400823 -3.5563863211758 -5.029324122151516 -6.301758641327084 -7.322961929822302 -8.052221835118193 -8.460465066103314 -8.531416253444307 -8.262246797201303 -7.663687634181376 -6.759601429351459 -5.586031246689127 -4.189763625962253 -2.626463351031946 -0.958454270580386 0.7477653570618542 2.424173939628084 4.00393835714458 5.42407838751986 6.627977529253878 7.567640122689131 8.205604785502139 8.516437879800469 8.48774747100499 8.120677355176557 7.429861459476516 6.442840433670812 5.198963691333348 3.747820672901074 2.147263871172282 0.4611024349828368 -1.24344170019649 -2.89841373869619 -4.437835167907522 -5.800334113373086 -6.931592041751236 -7.786509269328339 -8.331002944088237 -8.54336582146739 -8.41513166369451 -7.951412761973714 -7.170696125567001 3.967964454042534 2.661144832798496 1.248233764798917 -0.2144404443737696 -1.668565589735227 -3.056170290497144 -4.321935126079993 -5.415398046841001 -6.292966136751218 -6.919653525392167 -7.270476164205151 -7.331447861665553 -7.100137868602942 -6.585767784499835 -5.808843921420753 -4.800339782061639 -3.600461243939888 -2.257043677934734 -0.8236449030035197 0.6425899950486453 2.083206857808219 3.440772837086368 4.661166061336456 5.695733303881148 6.503229633525916 7.051462719809843 7.318576239632341 7.293921219883536 6.978480578397405 6.384829938119489 5.536636276704745 4.467714398803897 3.220678846510804 1.845244992047145 0.3962470427578658 -1.068548025696312 -2.490743456364277 -3.813640805422481 -4.984500330207981 -5.956643556328476 -6.691314201133876 -7.15922326440309 -7.341716688355996 -7.231519036070902 -6.833023540195608 -6.162116958625413 3.160321080613384 2.119492805710582 0.9941670410904191 -0.1707930261825025 -1.328944114470087 -2.434114394639413 -3.442244215186624 -4.313142621504115 -5.012089642410857 -5.511220465838168 -5.790636320954395 -5.839197779363776 -5.654968848964071 -5.245294155842311 -4.626506137210002 -3.823273918671509 -2.867619834034114 -1.797642795911458 -0.6559994123056947 0.5117965977428373 1.659188892506926 2.740434562000088 3.71242775344765 4.536418165608486 5.179555901001853 5.616201087656102 5.8289460598929 5.809309347024744 5.558073802826458 5.085255395625619 4.409703903252567 3.558351431882195 2.565138717949963 1.469662018096385 0.3155945313679901 -0.8510547134099066 -1.983775092422612 -3.037408618664727 -3.969950248377854 -4.74422248959062 -5.329357551403209 -5.702027945401628 -5.847376479006589 -5.759608564857086 -5.442223232722587 -4.907873634227967 2.22668567867006 1.493343288905311 0.7004660147291653 -0.1203366290059004 -0.9363418310866921 -1.715018039159572 -2.425321890063545 -3.038935810756489 -3.531396950591077 -3.883072437973098 -4.079942080996805 -4.114157308252927 -3.984354066603155 -3.695707201674252 -3.259724153093075 -2.693786189182488 -2.020455470643085 -1.266575568405079 -0.4622012951650975 0.3605994851525819 1.16902430193471 1.930843808868214 2.615686666272127 3.196250350568365 3.649389619738685 3.95703924108492 4.10693419504852 4.093098642835834 3.916084164252973 3.582947767959545 3.106970550803082 2.507128222398642 1.807334603467782 1.035488257270811 0.2223602619286077 -0.5996325353583019 -1.397719875710371 -2.140084535377989 -2.797130778047369 -3.342664243452604 -3.75493623385838 -4.017510766006725 -4.11991982190273 -4.058080675658289 -3.834458658889454 -3.457968875724721 1.204279345431145 0.8076588876886379 0.3788396188089894 -0.06508279017502479 -0.5064105536953812 -0.9275493265108165 -1.311709634729428 -1.643576219150494 -1.909918606318715 -2.100118565749699 -2.206593425271613 -2.225098368236168 -2.15489566096309 -1.998784063853906 -1.762987253646724 -1.456905705064642 -1.092741923553445 -0.6850139698967194 -0.249976670946797 0.1950264090267705 0.6322544015138652 1.044276406206742 1.414666405988919 1.728658120402314 1.973733690651419 2.140122727131086 2.221191824027839 2.213709012276733 2.117972607968906 1.937799319430418 1.680372087105609 1.355953722388659 0.9774777617194828 0.5600328473000009 0.1202611905445145 -0.3243049003718474 -0.755941978313681 -1.157442035093003 -1.512798530452724 -1.807844522315121 -2.030817458056102 -2.172828110359468 -2.228214962658407 -2.194769915935083 -2.073826318660405 -1.870205810398125 0.133862195013134 0.08977567533482943 0.04211008278445129 -0.007234305880492386 -0.05629028559915311 -0.1031021492652438 -0.1458036555977758 -0.1826924302916663 -0.2122978343091302 -0.2334395936172461 -0.2452748529890788 -0.2473317779817941 -0.2395283654869346 -0.2221757129355783 -0.1959656158254859 -0.1619429880176926 -0.1214642043182845 -0.07614302609516824 -0.02778626570485129 0.0216782454144859 0.07027851329880706 0.1160769986345782 0.1572478603369399 0.1921497460719863 0.2193912277947304 0.237886273594353 0.2468975443593155 0.2460657891609279 0.2354241674541947 0.2153969271149841 0.1867824910160091 0.1507216264264608 0.1086519662208858 0.06225069499319062 0.01336768499954474 -0.03604825241086339 -0.08402705975448951 -0.1286559733884243 -0.1681557793607642 -0.2009517450562382 -0.2257363988162215 -0.2415216547078018 -0.2476782043918371 -0.2439606056605409 -0.2305170674437688 -0.2078835411866856 -0.9418916186934663 -0.6316866098910525 -0.2962982493546524 0.05090258736032291 0.396074098549645 0.7254553853138876 1.025915055172518 1.285474729243588 1.493786582409802 1.64254587845149 1.725822053672573 1.740295149760155 1.685388170045718 1.563290082541485 1.378868552693453 1.139475884920871 0.8546559094405842 0.5357634998735836 0.1955118902661149 -0.1525341614328149 -0.4944991574648012 -0.8167500325709951 -1.106439661282354 -1.352019032270644 -1.54369767098508 -1.67383395497704 -1.737239761272558 -1.731387300463223 -1.656509891692994 -1.515592660960215 -1.314253533564164 -1.060519265151764 -0.7645054402998314 -0.4380131960795705 -0.09405874796218745 0.2536455256169031 0.5912377525143929 0.90525919597775 1.183190812008062 1.413952344138135 1.588344058292062 1.699413507151409 1.742732702290064 1.716574644099477 1.621982171813179 1.462726388797417 -1.980095185873649 -1.327965543382954 -0.6228941053151842 0.1070101550754859 0.8326482582733674 1.525091302987413 2.156733770155261 2.702394067873998 3.140318442004222 3.453048229699637 3.628115881200739 3.658542001700102 3.54311359778859 3.286432435674765 2.898731583287855 2.395467450151741 1.796703589112747 1.126310825801873 0.4110156041456203 -0.3206655126131722 -1.039562707302622 -1.717015817381742 -2.326016925178589 -2.842287078339433 -3.24524421504243 -3.518823705852006 -3.652118799799595 -3.639815442126497 -3.482404128877647 -3.186160352372156 -2.762894417128001 -2.229480600290467 -1.607184427452228 -0.9208148832552137 -0.1977353554622115 0.5332272569630683 1.242931781349151 1.903084537910887 2.487367319476658 2.972486615356378 3.339102250105779 3.572598415289946 3.663666355642739 3.608675479763801 3.409818100340678 3.075022033560224 -2.939358606544735 -1.971302681297775 -0.9246571389528138 0.1588515655978607 1.23602735951325 2.263926643114734 3.201570315688885 4.011577482915883 4.661655715163819 5.125888444753457 5.385768177727149 5.430934329229159 5.259586267329132 4.878555098534946 4.303031333133039 3.555959287479722 2.667122366513022 1.671955693384779 0.6101334229225803 -0.476012941724182 -1.543182172530108 -2.548829599910208 -3.45286323443881 -4.219242107950363 -4.817413113206347 -5.223529059864967 -5.421399386705929 -5.403135628214004 -5.169465902805643 -4.729705885045418 -4.101387419098447 -3.309559579428456 -2.385790043245842 -1.366906586834864 -0.2935288783299538 0.7915509002700281 1.845074042359564 2.82503990484805 3.692380341259188 4.412517225444294 4.956740972354244 5.303355098597096 5.438541192763665 5.356909811883925 5.06171534151083 4.564726253638137 openscad-2013.01+dfsg.orig/examples/example016.stl0000644000175000017500000001452411516152336021165 0ustar chrysnchrysnSTL File created by NetFabb - http://www.netfabb.com UNITS=MM?'!B9*@BA@B9*@?BA@'!B9*@'!BM5A@?`BM5A@BA@'!BM5A@?:;Ak@BA@`BM5A@?BA@:;Ak@LA@?LA@:;Ak@A@?A@:;Ak@'AA@?'AA@:;Ak@HAM5A@?RAM5A@'AA@HAM5A@?RAM5A@RA9*@'AA@?'AA@RA9*@'A9*@RAM5ApARAM5A@HAM5ApAHAM5ApARAM5A@HAM5A@itѾHAM5ApAHAM5A@:;AkpAitѾ:;AkpAHAM5A@:;Ak@Wj?l˾:;AkpA:;Ak@`BM5ApAWj?l˾`BM5ApA:;Ak@`BM5A@`BM5ApA`BM5A@'!BM5ApA'!BM5ApA`BM5A@'!BM5A@'!BM5ApA'!BM5A@'!B9*pA'!B9*pA'!BM5A@'!B9*@?'!B9*pA'!B9*@B9*pA?B9*pA'!B9*@B9*@?B9*pAB9*@BApA?B9*@BA@BApA iM>BApABA@LApA iM>LApABA@LA@?LApALA@ApA?ApALA@A@(7j?>ApAA@'AApA(7j?>'AApAA@'AA@'AApA'AA@'A9*pA'A9*pA'AA@'A9*@?'A9*pA'A9*@RA9*pA?RA9*pA'A9*@RA9*@?RA9*pARA9*@RAM5ApA?RAM5ApARA9*@RAM5A@?΅6BkpA΅6Bk΅6BKtApA?΅6BKtApA΅6Bk΅6BKtA:zAkpA:zAk΅6BkpA΅6BkpA:zAk΅6Bk:zAKtApA:zAKtA:zAkpA:zAkpA:zAKtA:zAk?΅6BKtApA΅6BKtA:zAKtApA?:zAKtApA΅6BKtA:zAKtA?RA9*pARAM5ApA:zAKtApA?:zAkpARA9*pA:zAKtApA?:zAkpA'A9*pARA9*pA?:zAkpA΅6BkpA'A9*pA?'A9*pA΅6BkpAB9*pA?LApAB9*pABApA?LApA'A9*pAB9*pA?LApAApA'A9*pA?'A9*pAApA'AApA?:;AkpA`BM5ApAHAM5ApA?HAM5ApA`BM5ApA΅6BKtApA?:zAKtApAHAM5ApA΅6BKtApA?:zAKtApARAM5ApAHAM5ApA?`BM5ApA'!BM5ApA΅6BKtApA?΅6BKtApA'!BM5ApA'!B9*pA?΅6BkpA'!B9*pAB9*pA?΅6BkpA΅6BKtApA'!B9*pA:zAKtA΅6BKtA:zAk:zAk΅6BKtA΅6Bk?B [@9*@.@9*@B [@A@?B [@A@.@9*@.@M5A@?@M5A@B [@A@.@M5A@?@M5A@A,Bk@B [@A@?B [@A@A,Bk@@?@A,Bk@T@?T@A,Bk@YA@?YA@A,Bk@oM5A@?[HM5A@YA@oM5A@?[HM5A@[H9*@YA@?YA@[H9*@Y9*@[HM5ApA[HM5A@oM5ApAoM5ApA[HM5A@oM5A@itѾoM5ApAoM5A@A,BkpAitѾA,BkpAoM5A@A,Bk@Wj?j˾A,BkpAA,Bk@@M5ApAWj?j˾@M5ApAA,Bk@@M5A@@M5ApA@M5A@.@M5ApA.@M5ApA@M5A@.@M5A@.@M5ApA.@M5A@.@9*pA.@9*pA.@M5A@.@9*@?.@9*pA.@9*@B [@9*pA?B [@9*pA.@9*@B [@9*@?B [@9*pAB [@9*@B [@ApA?B [@ApAB [@9*@B [@A@ iM>B [@ApAB [@A@pA iM>pAB [@A@@?pA@TpA?TpA@T@(7j?>TpAT@YApA(7j?>YApAT@YA@YApAYA@Y9*pAY9*pAYA@Y9*@?Y9*pAY9*@[H9*pA?[H9*pAY9*@[H9*@?[H9*pA[H9*@[HM5ApA?[HM5ApA[H9*@[HM5A@?9AkpA9Ak9AKtApA?9AKtApA9Ak9AKtA%ukpA%uk9AkpA9AkpA%uk9Ak%uKtApA%uKtA%ukpA%ukpA%uKtA%uk?9AKtApA9AKtA%uKtApA?%uKtApA9AKtA%uKtA?[H9*pA[HM5ApA%uKtApA?%ukpA[H9*pA%uKtApA?%ukpAY9*pA[H9*pA?%ukpA9AkpAY9*pA?Y9*pA9AkpAB [@9*pA?pAB [@9*pAB [@ApA?pAY9*pAB [@9*pA?pATpAY9*pA?Y9*pATpAYApA?A,BkpA@M5ApAoM5ApA?oM5ApA@M5ApA9AKtApA?%uKtApAoM5ApA9AKtApA?%uKtApA[HM5ApAoM5ApA?@M5ApA.@M5ApA9AKtApA?9AKtApA.@M5ApA.@9*pA?9AkpA.@9*pAB [@9*pA?9AkpA9AKtApA.@9*pA%uKtA9AKtA%uk%uk9AKtA9Akopenscad-2013.01+dfsg.orig/examples/example020.scad0000644000175000017500000000367211516152336021272 0ustar chrysnchrysn module screw(type = 2, r1 = 15, r2 = 20, n = 7, h = 100, t = 8) { linear_extrude(height = h, twist = 360*t/n, convexity = t) difference() { circle(r2); for (i = [0:n-1]) { if (type == 1) rotate(i*360/n) polygon([ [ 2*r2, 0 ], [ r2, 0 ], [ r1*cos(180/n), r1*sin(180/n) ], [ r2*cos(360/n), r2*sin(360/n) ], [ 2*r2*cos(360/n), 2*r2*sin(360/n) ], ]); if (type == 2) rotate(i*360/n) polygon([ [ 2*r2, 0 ], [ r2, 0 ], [ r1*cos(90/n), r1*sin(90/n) ], [ r1*cos(180/n), r1*sin(180/n) ], [ r2*cos(270/n), r2*sin(270/n) ], [ 2*r2*cos(270/n), 2*r2*sin(270/n) ], ]); } } } module nut(type = 2, r1 = 16, r2 = 21, r3 = 30, s = 6, n = 7, h = 100/5, t = 8/5) { difference() { cylinder($fn = s, r = r3, h = h); translate([ 0, 0, -h/2 ]) screw(type, r1, r2, n, h*2, t*2); } } module spring(r1 = 100, r2 = 10, h = 100, hr = 12) { stepsize = 1/16; module segment(i1, i2) { alpha1 = i1 * 360*r2/hr; alpha2 = i2 * 360*r2/hr; len1 = sin(acos(i1*2-1))*r2; len2 = sin(acos(i2*2-1))*r2; if (len1 < 0.01) polygon([ [ cos(alpha1)*r1, sin(alpha1)*r1 ], [ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ], [ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ] ]); if (len2 < 0.01) polygon([ [ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ], [ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ], [ cos(alpha2)*r1, sin(alpha2)*r1 ], ]); if (len1 >= 0.01 && len2 >= 0.01) polygon([ [ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ], [ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ], [ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ], [ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ] ]); } linear_extrude(height = 100, twist = 180*h/hr, $fn = (hr/r2)/stepsize, convexity = 5) { for (i = [ stepsize : stepsize : 1+stepsize/2 ]) segment(i-stepsize, min(i, 1)); } } translate([ -30, 0, 0 ]) screw(); translate([ 30, 0, 0 ]) nut(); spring(); openscad-2013.01+dfsg.orig/examples/example002.scad0000644000175000017500000000064211516152336021264 0ustar chrysnchrysn module example002() { intersection() { difference() { union() { cube([30, 30, 30], center = true); translate([0, 0, -25]) cube([15, 15, 50], center = true); } union() { cube([50, 10, 10], center = true); cube([10, 50, 10], center = true); cube([10, 10, 50], center = true); } } translate([0, 0, 5]) cylinder(h = 50, r1 = 20, r2 = 5, center = true); } } example002(); openscad-2013.01+dfsg.orig/examples/example011.scad0000644000175000017500000000027311516152336021264 0ustar chrysnchrysnpolyhedron( points = [ [10, 0, 0], [0, 10, 0], [-10, 0, 0], [0, -10, 0], [0, 0, 10] ], triangles = [ [0, 1, 2, 3], [4, 1, 0], [4, 2, 1], [4, 3, 2], [4, 0, 3] ] ); openscad-2013.01+dfsg.orig/examples/example005.scad0000644000175000017500000000067611516152336021276 0ustar chrysnchrysn module example005() { translate([0, 0, -120]) { difference() { cylinder(h = 50, r = 100); translate([0, 0, 10]) cylinder(h = 50, r = 80); translate([100, 0, 35]) cube(50, center = true); } for (i = [0:5]) { echo(360*i/6, sin(360*i/6)*80, cos(360*i/6)*80); translate([sin(360*i/6)*80, cos(360*i/6)*80, 0 ]) cylinder(h = 200, r=10); } translate([0, 0, 200]) cylinder(h = 80, r1 = 120, r2 = 0); } } example005(); openscad-2013.01+dfsg.orig/examples/example009.scad0000644000175000017500000000213111664231414021265 0ustar chrysnchrysn bodywidth = dxf_dim(file = "example009.dxf", name = "bodywidth"); fanwidth = dxf_dim(file = "example009.dxf", name = "fanwidth"); platewidth = dxf_dim(file = "example009.dxf", name = "platewidth"); fan_side_center = dxf_cross(file = "example009.dxf", layer = "fan_side_center"); fanrot = dxf_dim(file = "example009.dxf", name = "fanrot"); % linear_extrude(height = bodywidth, center = true, convexity = 10) import(file = "example009.dxf", layer = "body"); % for (z = [+(bodywidth/2 + platewidth/2), -(bodywidth/2 + platewidth/2)]) { translate([0, 0, z]) linear_extrude(height = platewidth, center = true, convexity = 10) import(file = "example009.dxf", layer = "plate"); } intersection() { linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot) import(file = "example009.dxf", layer = "fan_top"); // NB! We have to use the deprecated module here since the "fan_side" // layer contains an open polyline, which is not yet supported // by the import() module. rotate_extrude(file = "example009.dxf", layer = "fan_side", origin = fan_side_center, convexity = 10); } openscad-2013.01+dfsg.orig/examples/example015.scad0000644000175000017500000000072711664172101021270 0ustar chrysnchrysn module shape() { difference() { translate([ -35, -35 ]) intersection() { union() { difference() { square(100, true); square(50, true); } translate([ 50, 50 ]) square(15, true); } rotate(45) translate([ 0, -15 ]) square([ 100, 30 ]); } rotate(-45) scale([ 0.7, 1.3 ]) circle(5); } import(file = "example009.dxf", layer = "body", convexity = 6, scale=2); } // linear_extrude(convexity = 10, center = true) shape(); openscad-2013.01+dfsg.orig/examples/example007.scad0000644000175000017500000000227511664231414021274 0ustar chrysnchrysn module cutout() { intersection() { rotate(90, [1, 0, 0]) translate([0, 0, -50]) linear_extrude(height = 100, convexity = 1) import(file = "example007.dxf", layer = "cutout1"); rotate(90, [0, 0, 1]) rotate(90, [1, 0, 0]) translate([0, 0, -50]) linear_extrude(height = 100, convexity = 2) import(file = "example007.dxf", layer = "cutout2"); } } module clip() { difference() { // NB! We have to use the deprecated module here since the "dorn" // layer contains an open polyline, which is not yet supported // by the import() module. rotate_extrude( file = "example007.dxf", layer="dorn", convexity = 3); for (r = [0, 90]) rotate(r, [0, 0, 1]) cutout(); } } module cutview() { difference() { difference() { translate([0, 0, -10]) clip(); rotate(20, [0, 0, 1]) rotate(-20, [0, 1, 0]) translate([18, 0, 0]) cube(30, center = true); } # render(convexity = 5) intersection() { translate([0, 0, -10]) clip(); rotate(20, [0, 0, 1]) rotate(-20, [0, 1, 0]) translate([18, 0, 0]) cube(30, center = true); } } } translate([0, 0, -10]) clip(); // cutview(); openscad-2013.01+dfsg.orig/examples/example019.scad0000644000175000017500000000040411516152336021270 0ustar chrysnchrysn function get_cylinder_h(p) = lookup(p, [ [ -200, 5 ], [ -50, 20 ], [ -20, 18 ], [ +80, 25 ], [ +150, 2 ] ]); for (i = [-100:5:+100]) { // echo(i, get_cylinder_h(i)); translate([ i, 0, -30 ]) cylinder(r1 = 6, r2 = 2, h = get_cylinder_h(i)*3); } openscad-2013.01+dfsg.orig/examples/example003.scad0000644000175000017500000000054611516152336021270 0ustar chrysnchrysn module example003() { difference() { union() { cube([30, 30, 30], center = true); cube([40, 15, 15], center = true); cube([15, 40, 15], center = true); cube([15, 15, 40], center = true); } union() { cube([50, 10, 10], center = true); cube([10, 50, 10], center = true); cube([10, 10, 50], center = true); } } } example003(); openscad-2013.01+dfsg.orig/examples/example016.scad0000644000175000017500000000131011664172101021256 0ustar chrysnchrysn // example016.stl is derived from Mblock.stl // (c) 2009 Will Langford licensed under // the Creative Commons - GNU GPL license. // http://www.thingiverse.com/thing:753 // // Jonas Pfeil converted the file to binary // STL and duplicated its content. module blk1() { cube([ 65, 28, 28 ], center = true); } module blk2() { difference() { translate([ 0, 0, 7.5 ]) cube([ 60, 28, 14 ], center = true); cube([ 8, 32, 32 ], center = true); } } module chop() { translate([ -14, 0, 0 ]) import(file = "example016.stl", convexity = 12); } difference() { blk1(); for (alpha = [0, 90, 180, 270]) { rotate(alpha, [ 1, 0, 0]) render(convexity = 12) difference() { blk2(); chop(); } } } openscad-2013.01+dfsg.orig/examples/example008.scad0000644000175000017500000000137611701151225021267 0ustar chrysnchrysn difference() { intersection() { translate([ -25, -25, -25]) linear_extrude(height = 50, convexity = 3) import(file = "example008.dxf", layer = "G"); rotate(90, [1, 0, 0]) translate([ -25, -125, -25]) linear_extrude(height = 50, convexity = 3) import(file = "example008.dxf", layer = "E"); rotate(90, [0, 1, 0]) translate([ -125, -125, -25]) linear_extrude(height = 50, convexity = 3) import(file = "example008.dxf", layer = "B"); } intersection() { translate([ -125, -25, -26]) linear_extrude(height = 52, convexity = 1) import(file = "example008.dxf", layer = "X"); rotate(90, [0, 1, 0]) translate([ -125, -25, -26]) linear_extrude(height = 52, convexity = 1) import(file = "example008.dxf", layer = "X"); } }openscad-2013.01+dfsg.orig/examples/example023.scad0000644000175000017500000000141311745120721021261 0ustar chrysnchrysn// Example combining MCAD/fonts.scad with search() function. use thisFont=8bit_polyfont(); x_shift=thisFont[0][0]; y_shift=thisFont[0][1]; hours=["one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve"]; module clock_hour_words(word_offset=20.0,word_height=2.0) { for(i=[0:(len(hours)-1)]) assign( hourHandAngle=(i+1)*360/len(hours), theseIndicies=search(hours[i],thisFont[2],1,1) ) { rotate(90-hourHandAngle) translate([word_offset,0]) for( j=[0:(len(theseIndicies)-1)] ) translate([j*x_shift,-y_shift/2]) { linear_extrude(height=word_height) polygon(points=thisFont[2][theseIndicies[j]][6][0],paths=thisFont[2][theseIndicies[j]][6][1]); } } } clock_hour_words(word_offset=16.0,word_height=5.0); openscad-2013.01+dfsg.orig/examples/example012.scad0000644000175000017500000000043611664172101021262 0ustar chrysnchrysn // example012.stl is Mblock.stl, (c) 2009 Will Langford // licensed under the Creative Commons - GNU GPL license. // http://www.thingiverse.com/thing:753 difference() { sphere(20); translate([ -2.92, 0.5, +20 ]) rotate([180, 0, 180]) import("example012.stl", convexity = 5); } openscad-2013.01+dfsg.orig/examples/example013.dxf0000644000175000017500000003227411516152336021143 0ustar chrysnchrysn999 dxflib 2.0.4.8 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $DIMGAP 40 0.625 9 $DIMEXO 40 0.625 9 $INSUNITS 70 4 9 $DIMTXT 40 2.5 9 $PLIMMAX 10 210.0 20 297.0 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 1 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 BLOCK_RECORD 5 43 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 sub1 340 0 0 BLOCK_RECORD 5 44 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 sub2 340 0 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 45 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 sub1 70 0 10 0.0 20 0.0 30 0.0 3 sub1 1 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 0.0 30 0.0 11 -10.0 21 10.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 10.0 30 0.0 11 0.0 21 20.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 20.0 30 0.0 11 10.0 21 10.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 10.0 20 10.0 30 0.0 11 10.0 21 0.0 31 0.0 0 ENDBLK 5 4A 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 4B 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 sub2 70 0 10 0.0 20 0.0 30 0.0 3 sub2 1 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -10.0 20 0.0 30 0.0 11 -20.0 21 10.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 10.0 30 0.0 11 -20.0 21 20.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 -20.0 20 20.0 30 0.0 11 0.0 21 10.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 0.0 20 10.0 30 0.0 11 20.0 21 20.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 20.0 30 0.0 11 20.0 21 10.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 0 62 256 370 -1 6 ByLayer 10 20.0 20 10.0 30 0.0 11 10.0 21 0.0 31 0.0 0 ENDBLK 5 52 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 INSERT 5 53 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 sub1 10 0.0 20 10.0 30 0.0 44 1.0 45 1.0 0 INSERT 5 54 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 sub1 10 0.0 20 -10.0 30 0.0 50 180.0 44 1.0 45 1.0 0 INSERT 5 55 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 sub2 10 -10.0 20 0.0 30 0.0 50 90.0 44 1.0 45 1.0 0 INSERT 5 56 100 AcDbEntity 100 AcDbBlockReference 8 0 62 256 370 -1 6 ByLayer 2 sub2 10 10.0 20 0.0 30 0.0 50 270.0 44 1.0 45 1.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 57 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 57 100 AcDbDictionary 281 1 3 DIMASSOC 350 59 3 HIDETEXT 350 58 0 DICTIONARYVAR 5 58 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 59 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/examples/example017.scad0000644000175000017500000000752611516152336021302 0ustar chrysnchrysn // To render the DXF file from the command line: // openscad -x example017.dxf -D'mode="parts"' example017.scad // mode = "parts"; // mode = "exploded"; mode = "assembled"; thickness = 6; locklen1 = 15; locklen2 = 10; boltlen = 15; midhole = 10; inner1_to_inner2 = 50; total_height = 80; module shape_tripod() { x1 = 0; x2 = x1 + thickness; x3 = x2 + locklen1; x4 = x3 + thickness; x5 = x4 + inner1_to_inner2; x6 = x5 - thickness; x7 = x6 - locklen2; x8 = x7 - thickness; x9 = x8 - thickness; x10 = x9 - thickness; y1 = 0; y2 = y1 + thickness; y3 = y2 + thickness; y4 = y3 + thickness; y5 = y3 + total_height - 3*thickness; y6 = y5 + thickness; union() { difference() { polygon([ [ x1, y2 ], [ x2, y2 ], [ x2, y1 ], [ x3, y1 ], [ x3, y2 ], [ x4, y2 ], [ x4, y1 ], [ x5, y1 ], [ x5 + thickness, y3 ], [ x5, y4 ], [ x5, y5 ], [ x6, y5 ], [ x6, y6 ], [ x7, y6 ], [ x7, y5 ], [ x8, y5 ], [ x8, y6 ], [ x9, y5 ], [ x9, y4 ], [ x10, y3 ], [ x2, y3 ] ]); translate([ x10, y4 ]) circle(thickness); translate([ x5 + thickness, y4 ]) circle(thickness); } translate([ x5, y1 ]) square([ boltlen - thickness, thickness*2 ]); translate([ x5 + boltlen - thickness, y2 ]) circle(thickness); translate([ x2, y2 ]) intersection() { circle(thickness); translate([ -thickness*2, 0 ]) square(thickness*2); } translate([ x8, y5 ]) intersection() { circle(thickness); translate([ -thickness*2, 0 ]) square(thickness*2); } } } module shape_inner_disc() { difference() { circle(midhole + boltlen + 2*thickness + locklen2); for (alpha = [ 0, 120, 240 ]) rotate(alpha) translate([ 0, midhole + boltlen + thickness + locklen2/2 ]) square([ thickness, locklen2 ], true); circle(midhole + boltlen); } } module shape_outer_disc() { difference() { circle(midhole + boltlen + inner1_to_inner2 + 2*thickness + locklen1); for (alpha = [ 0, 120, 240 ]) rotate(alpha) translate([ 0, midhole + boltlen + inner1_to_inner2 + thickness + locklen1/2 ]) square([ thickness, locklen1 ], true); circle(midhole + boltlen + inner1_to_inner2); } } module parts() { tripod_x_off = locklen1 - locklen2 + inner1_to_inner2; tripod_y_off = max(midhole + boltlen + inner1_to_inner2 + 4*thickness + locklen1, total_height); shape_inner_disc(); shape_outer_disc(); for (s = [ [1,1], [-1,1], [1,-1] ]) scale(s) translate([ tripod_x_off, -tripod_y_off ]) shape_tripod(); } module exploded() { translate([ 0, 0, total_height + 2*thickness ]) linear_extrude(height = thickness, convexity = 4) shape_inner_disc(); linear_extrude(height = thickness, convexity = 4) shape_outer_disc(); color([ 0.7, 0.7, 1 ]) for (alpha = [ 0, 120, 240 ]) rotate(alpha) translate([ 0, thickness*2 + locklen1 + inner1_to_inner2 + boltlen + midhole, 1.5*thickness ]) rotate([ 90, 0, -90 ]) linear_extrude(height = thickness, convexity = 10, center = true) shape_tripod(); } module bottle() { r = boltlen + midhole; h = total_height - thickness*2; rotate_extrude(convexity = 2) { square([ r, h ]); translate([ 0, h ]) intersection() { square([ r, r ]); scale([ 1, 0.7 ]) circle(r); } translate([ 0, h+r ]) intersection() { translate([ 0, -r/2 ]) square([ r/2, r ]); circle(r/2); } } } module assembled() { translate([ 0, 0, total_height - thickness ]) linear_extrude(height = thickness, convexity = 4) shape_inner_disc(); linear_extrude(height = thickness, convexity = 4) shape_outer_disc(); color([ 0.7, 0.7, 1 ]) for (alpha = [ 0, 120, 240 ]) rotate(alpha) translate([ 0, thickness*2 + locklen1 + inner1_to_inner2 + boltlen + midhole, 0 ]) rotate([ 90, 0, -90 ]) linear_extrude(height = thickness, convexity = 10, center = true) shape_tripod(); % translate([ 0, 0, thickness*2]) bottle(); } if (mode == "parts") parts(); if (mode == "exploded") exploded(); if (mode == "assembled") assembled(); openscad-2013.01+dfsg.orig/examples/example004.scad0000644000175000017500000000014511516152336021264 0ustar chrysnchrysn module example004() { difference() { cube(30, center = true); sphere(20); } } example004(); openscad-2013.01+dfsg.orig/examples/example008.dxf0000644000175000017500000004305411516152336021145 0ustar chrysnchrysn999 dxflib 2.0.4.8 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $DIMGAP 40 0.625 9 $DIMEXO 40 0.625 9 $INSUNITS 70 4 9 $DIMTXT 40 2.5 9 $PLIMMAX 10 210.0 20 297.0 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 5 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 43 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 G 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 44 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 E 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 45 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 B 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 46 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 X 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 20.0 20 30.0 30 0.0 11 20.0 21 20.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 20.0 20 20.0 30 0.0 11 40.0 21 20.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 40.0 20 20.0 30 0.0 11 40.0 21 10.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 40.0 20 10.0 30 0.0 11 10.0 21 10.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 10.0 20 10.0 30 0.0 11 10.0 21 40.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 10.0 20 40.0 30 0.0 11 50.0 21 40.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 50.0 20 40.0 30 0.0 11 50.0 21 50.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 0.0 20 100.0 30 0.0 11 50.0 21 100.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 50.0 20 100.0 30 0.0 11 50.0 21 110.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 50.0 20 110.0 30 0.0 11 10.0 21 110.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 10.0 20 110.0 30 0.0 11 10.0 21 120.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 10.0 20 120.0 30 0.0 11 30.0 21 120.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 30.0 20 120.0 30 0.0 11 30.0 21 130.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 30.0 20 130.0 30 0.0 11 10.0 21 130.0 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 10.0 20 130.0 30 0.0 11 10.0 21 140.0 31 0.0 0 LINE 5 56 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 10.0 20 140.0 30 0.0 11 50.0 21 140.0 31 0.0 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 50.0 20 140.0 30 0.0 11 50.0 21 150.0 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 50.0 20 150.0 30 0.0 11 0.0 21 150.0 31 0.0 0 LINE 5 59 100 AcDbEntity 100 AcDbLine 8 E 62 256 370 -1 6 ByLayer 10 0.0 20 150.0 30 0.0 11 0.0 21 100.0 31 0.0 0 LINE 5 5A 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 100.0 20 100.0 30 0.0 11 100.0 21 150.0 31 0.0 0 LINE 5 5B 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 110.0 20 140.0 30 0.0 11 140.0 21 140.0 31 0.0 0 LINE 5 5C 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 140.0 20 140.0 30 0.0 11 140.0 21 130.0 31 0.0 0 LINE 5 5D 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 140.0 20 130.0 30 0.0 11 110.0 21 130.0 31 0.0 0 LINE 5 5E 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 110.0 20 130.0 30 0.0 11 110.0 21 140.0 31 0.0 0 LINE 5 5F 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 110.0 20 120.0 30 0.0 11 110.0 21 110.0 31 0.0 0 LINE 5 60 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 110.0 20 110.0 30 0.0 11 140.0 21 110.0 31 0.0 0 LINE 5 61 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 140.0 20 110.0 30 0.0 11 140.0 21 120.0 31 0.0 0 LINE 5 62 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 140.0 20 120.0 30 0.0 11 110.0 21 120.0 31 0.0 0 LINE 5 63 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 150.0 20 145.0 30 0.0 11 145.0 21 150.0 31 0.0 0 LINE 5 64 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 150.0 20 105.0 30 0.0 11 145.0 21 100.0 31 0.0 0 LINE 5 65 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 150.0 20 120.0 30 0.0 11 150.0 21 105.0 31 0.0 0 LINE 5 66 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 145.0 20 100.0 30 0.0 11 100.0 21 100.0 31 0.0 0 LINE 5 67 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 100.0 20 150.0 30 0.0 11 145.0 21 150.0 31 0.0 0 LINE 5 68 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 150.0 20 145.0 30 0.0 11 150.0 21 130.0 31 0.0 0 LINE 5 69 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 45.0 20 30.0 30 0.0 11 20.0 21 30.0 31 0.0 0 LINE 5 6A 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 50.0 20 5.0 30 0.0 11 50.0 21 25.0 31 0.0 0 LINE 5 6B 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 5.0 20 0.0 30 0.0 11 45.0 21 0.0 31 0.0 0 LINE 5 6C 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 0.0 20 45.0 30 0.0 11 0.0 21 5.0 31 0.0 0 LINE 5 6D 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 50.0 20 50.0 30 0.0 11 5.0 21 50.0 31 0.0 0 LINE 5 6E 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 5.0 20 50.0 30 0.0 11 0.0 21 45.0 31 0.0 0 LINE 5 6F 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 0.0 20 5.0 30 0.0 11 5.0 21 0.0 31 0.0 0 LINE 5 70 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 45.0 20 0.0 30 0.0 11 50.0 21 5.0 31 0.0 0 LINE 5 71 100 AcDbEntity 100 AcDbLine 8 G 62 256 370 -1 6 ByLayer 10 50.0 20 25.0 30 0.0 11 45.0 21 30.0 31 0.0 0 LINE 5 72 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 150.0 20 130.0 30 0.0 11 145.0 21 125.0 31 0.0 0 LINE 5 73 100 AcDbEntity 100 AcDbLine 8 B 62 256 370 -1 6 ByLayer 10 145.0 20 125.0 30 0.0 11 150.0 21 120.0 31 0.0 0 LINE 5 74 100 AcDbEntity 100 AcDbLine 8 X 62 256 370 -1 6 ByLayer 10 115.0 20 35.0 30 0.0 11 115.0 21 15.0 31 0.0 0 LINE 5 75 100 AcDbEntity 100 AcDbLine 8 X 62 256 370 -1 6 ByLayer 10 115.0 20 15.0 30 0.0 11 135.0 21 15.0 31 0.0 0 LINE 5 76 100 AcDbEntity 100 AcDbLine 8 X 62 256 370 -1 6 ByLayer 10 135.0 20 15.0 30 0.0 11 135.0 21 35.0 31 0.0 0 LINE 5 77 100 AcDbEntity 100 AcDbLine 8 X 62 256 370 -1 6 ByLayer 10 135.0 20 35.0 30 0.0 11 115.0 21 35.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 78 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 78 100 AcDbDictionary 281 1 3 DIMASSOC 350 7A 3 HIDETEXT 350 79 0 DICTIONARYVAR 5 79 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 7A 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/examples/example006.scad0000644000175000017500000000214612034705077021273 0ustar chrysnchrysn module example006() { module edgeprofile() { render(convexity = 2) difference() { cube([20, 20, 150], center = true); translate([-10, -10, 0]) cylinder(h = 80, r = 10, center = true); translate([-10, -10, +40]) sphere(r = 10); translate([-10, -10, -40]) sphere(r = 10); } } difference() { cube(100, center = true); for (rot = [ [0, 0, 0], [1, 0, 0], [0, 1, 0] ]) { rotate(90, rot) for (p = [[+1, +1, 0], [-1, +1, 90], [-1, -1, 180], [+1, -1, 270]]) { translate([ p[0]*50, p[1]*50, 0 ]) rotate(p[2], [0, 0, 1]) edgeprofile(); } } for (i = [ [ 0, 0, [ [0, 0] ] ], [ 90, 0, [ [-20, -20], [+20, +20] ] ], [ 180, 0, [ [-20, -25], [-20, 0], [-20, +25], [+20, -25], [+20, 0], [+20, +25] ] ], [ 270, 0, [ [0, 0], [-25, -25], [+25, -25], [-25, +25], [+25, +25] ] ], [ 0, 90, [ [-25, -25], [0, 0], [+25, +25] ] ], [ 0, -90, [ [-25, -25], [+25, -25], [-25, +25], [+25, +25] ] ] ]) { rotate(i[0], [0, 0, 1]) rotate(i[1], [1, 0, 0]) translate([0, -50, 0]) for (j = i[2]) translate([j[0], 0, j[1]]) sphere(10); } } } example006(); openscad-2013.01+dfsg.orig/examples/example021.scad0000644000175000017500000000133711516152336021267 0ustar chrysnchrysn module thing() { $fa = 30; difference() { sphere(r = 25); cylinder(h = 62.5, r1 = 12.5, r2 = 6.25, center = true); rotate(90, [ 1, 0, 0 ]) cylinder(h = 62.5, r1 = 12.5, r2 = 6.25, center = true); rotate(90, [ 0, 1, 0 ]) cylinder(h = 62.5, r1 = 12.5, r2 = 6.25, center = true); } } module demo_proj() { linear_extrude(center = true, height = 0.5) projection(cut = false) thing(); % thing(); } module demo_cut() { for (i=[-20:5:+20]) { rotate(-30, [ 1, 1, 0 ]) translate([ 0, 0, -i ]) linear_extrude(center = true, height = 0.5) projection(cut = true) translate([ 0, 0, i ]) rotate(+30, [ 1, 1, 0 ]) thing(); } % thing(); } translate([ -30, 0, 0 ]) demo_proj(); translate([ +30, 0, 0 ]) demo_cut(); openscad-2013.01+dfsg.orig/examples/example001.scad0000644000175000017500000000061511675717426021300 0ustar chrysnchrysn module example001() { function r_from_dia(d) = d / 2; module rotcy(rot, r, h) { rotate(90, rot) cylinder(r = r, h = h, center = true); } difference() { sphere(r = r_from_dia(size)); rotcy([0, 0, 0], cy_r, cy_h); rotcy([1, 0, 0], cy_r, cy_h); rotcy([0, 1, 0], cy_r, cy_h); } size = 50; hole = 25; cy_r = r_from_dia(hole); cy_h = r_from_dia(size * 2.5); } example001(); openscad-2013.01+dfsg.orig/examples/example018.scad0000644000175000017500000000065411516152336021276 0ustar chrysnchrysn module step(len, mod) { for (i = [0:$children-1]) translate([ len*(i - ($children-1)/2), 0, 0 ]) child((i+mod) % $children); } for (i = [1:4]) { translate([0, -250+i*100, 0]) step(100, i) { sphere(30); cube(60, true); cylinder(r = 30, h = 50, center = true); union() { cube(45, true); rotate([45, 0, 0]) cube(50, true); rotate([0, 45, 0]) cube(50, true); rotate([0, 0, 45]) cube(50, true); } } } openscad-2013.01+dfsg.orig/examples/example007.dxf0000644000175000017500000003347111516152336021146 0ustar chrysnchrysn999 dxflib 2.0.4.8 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $DIMGAP 40 0.625 9 $INSUNITS 70 4 9 $DIMEXO 40 0.625 9 $DIMTXT 40 2.5 9 $DIMSTYLE 2 Standard 9 $PLIMMIN 10 0.0 20 0.0 9 $PLIMMAX 10 210.0 20 297.0 9 $DIMEXE 40 1.25 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 4 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 43 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 cutout1 70 0 62 6 6 CONTINUOUS 370 0 390 F 0 LAYER 5 44 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 cutout2 70 0 62 5 6 CONTINUOUS 370 0 390 F 0 LAYER 5 45 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 dorn 70 0 62 3 6 CONTINUOUS 370 0 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 46 100 AcDbEntity 100 AcDbLine 8 cutout1 62 256 370 -1 6 ByLayer 10 2.0 20 31.0 30 0.0 11 -2.0 21 31.0 31 0.0 0 LINE 5 47 100 AcDbEntity 100 AcDbLine 8 cutout1 62 256 370 -1 6 ByLayer 10 -2.0 20 31.0 30 0.0 11 -2.0 21 3.0 31 0.0 0 LINE 5 48 100 AcDbEntity 100 AcDbLine 8 cutout1 62 256 370 -1 6 ByLayer 10 -2.0 20 3.0 30 0.0 11 2.0 21 3.0 31 0.0 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 cutout1 62 256 370 -1 6 ByLayer 10 2.0 20 3.0 30 0.0 11 2.0 21 31.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 11.0 20 31.0 30 0.0 11 11.0 21 15.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 -11.0 20 31.0 30 0.0 11 11.0 21 31.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 11.0 20 15.0 30 0.0 11 6.0 21 12.0 31 0.0 0 LINE 5 4D 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 6.0 20 12.0 30 0.0 11 6.0 21 3.0 31 0.0 0 LINE 5 4E 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 6.0 20 3.0 30 0.0 11 -6.0 21 3.0 31 0.0 0 LINE 5 4F 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 -6.0 20 3.0 30 0.0 11 -6.0 21 12.0 31 0.0 0 LINE 5 50 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 -6.0 20 12.0 30 0.0 11 -11.0 21 15.0 31 0.0 0 LINE 5 51 100 AcDbEntity 100 AcDbLine 8 cutout2 62 256 370 -1 6 ByLayer 10 -11.0 20 31.0 30 0.0 11 -11.0 21 15.0 31 0.0 0 LINE 5 52 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 0.0 20 30.0 30 0.0 11 8.0 21 15.0 31 0.0 0 LINE 5 53 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 8.0 20 15.0 30 0.0 11 5.0 21 12.0 31 0.0 0 LINE 5 54 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 5.0 20 12.0 30 0.0 11 5.0 21 2.0 31 0.0 0 LINE 5 55 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 5.0 20 2.0 30 0.0 11 7.0 21 2.0 31 0.0 0 LINE 5 56 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 7.0 20 2.0 30 0.0 11 7.0 21 11.0 31 0.0 0 LINE 5 57 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 7.0 20 11.0 30 0.0 11 11.0 21 11.0 31 0.0 0 LINE 5 58 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 11.0 20 11.0 30 0.0 11 11.0 21 0.0 31 0.0 0 LINE 5 59 100 AcDbEntity 100 AcDbLine 8 dorn 62 256 370 -1 6 ByLayer 10 11.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 5A 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 5A 100 AcDbDictionary 281 1 3 DIMASSOC 350 5C 3 HIDETEXT 350 5B 0 DICTIONARYVAR 5 5B 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 5C 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/examples/example014.scad0000644000175000017500000000021711516152336021265 0ustar chrysnchrysn intersection_for(i = [ [0, 0, 0], [10, 20, 300], [200, 40, 57], [20, 88, 57] ]) rotate(i) cube([100, 20, 20], center = true); openscad-2013.01+dfsg.orig/examples/example012.stl0000644000175000017500000004255711516152336021170 0ustar chrysnchrysnsolid ascii facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex 3.422440e+000 -1.067730e+001 5.000000e+000 vertex 6.347434e+000 -1.067730e+001 5.000000e+000 vertex 3.422440e+000 8.281660e+000 5.000000e+000 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 3.422440e+000 8.281660e+000 5.000000e+000 vertex 6.347434e+000 -1.067730e+001 5.000000e+000 vertex 6.347434e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 2.280978e+000 1.133150e+001 5.000000e+000 vertex 3.422440e+000 8.281660e+000 5.000000e+000 vertex 6.347434e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 2.280978e+000 1.133150e+001 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex 3.422440e+000 8.281660e+000 5.000000e+000 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 3.422440e+000 8.281660e+000 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex -2.320538e+000 -4.613285e+000 5.000000e+000 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -2.320538e+000 -4.613285e+000 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex -4.104071e+000 -4.613285e+000 5.000000e+000 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -4.104071e+000 -4.613285e+000 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex -9.793542e+000 8.281660e+000 5.000000e+000 endloop endfacet facet normal -0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -9.793542e+000 8.281660e+000 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex -8.527233e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -1.252235e+001 1.133150e+001 5.000000e+000 vertex -9.793542e+000 8.281660e+000 5.000000e+000 vertex -8.527233e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -1.252235e+001 1.133150e+001 5.000000e+000 vertex -1.252235e+001 -1.067730e+001 5.000000e+000 vertex -9.793542e+000 8.281660e+000 5.000000e+000 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -9.793542e+000 8.281660e+000 5.000000e+000 vertex -1.252235e+001 -1.067730e+001 5.000000e+000 vertex -9.793542e+000 -1.067730e+001 5.000000e+000 endloop endfacet facet normal 0.000000e+000 -1.000000e+000 0.000000e+000 outer loop vertex -1.252235e+001 1.133150e+001 1.500000e+001 vertex -1.252235e+001 1.133150e+001 5.000000e+000 vertex -8.527233e+000 1.133150e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -1.000000e+000 -0.000000e+000 outer loop vertex -8.527233e+000 1.133150e+001 1.500000e+001 vertex -1.252235e+001 1.133150e+001 5.000000e+000 vertex -8.527233e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal -9.124922e-001 -4.090940e-001 -0.000000e+000 outer loop vertex -8.527233e+000 1.133150e+001 1.500000e+001 vertex -8.527233e+000 1.133150e+001 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 1.500000e+001 endloop endfacet facet normal -9.124922e-001 -4.090940e-001 0.000000e+000 outer loop vertex -3.033951e+000 -9.213713e-001 1.500000e+001 vertex -8.527233e+000 1.133150e+001 5.000000e+000 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 endloop endfacet facet normal 9.174094e-001 -3.979447e-001 0.000000e+000 outer loop vertex -3.033951e+000 -9.213713e-001 1.500000e+001 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex 2.280978e+000 1.133150e+001 1.500000e+001 endloop endfacet facet normal 9.174094e-001 -3.979447e-001 0.000000e+000 outer loop vertex 2.280978e+000 1.133150e+001 1.500000e+001 vertex -3.033951e+000 -9.213713e-001 5.000000e+000 vertex 2.280978e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal 0.000000e+000 -1.000000e+000 0.000000e+000 outer loop vertex 2.280978e+000 1.133150e+001 1.500000e+001 vertex 2.280978e+000 1.133150e+001 5.000000e+000 vertex 6.347434e+000 1.133150e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -1.000000e+000 -0.000000e+000 outer loop vertex 6.347434e+000 1.133150e+001 1.500000e+001 vertex 2.280978e+000 1.133150e+001 5.000000e+000 vertex 6.347434e+000 1.133150e+001 5.000000e+000 endloop endfacet facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 outer loop vertex 6.347434e+000 1.133150e+001 1.500000e+001 vertex 6.347434e+000 1.133150e+001 5.000000e+000 vertex 6.347434e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 outer loop vertex 6.347434e+000 -1.067730e+001 1.500000e+001 vertex 6.347434e+000 1.133150e+001 5.000000e+000 vertex 6.347434e+000 -1.067730e+001 5.000000e+000 endloop endfacet facet normal 0.000000e+000 1.000000e+000 0.000000e+000 outer loop vertex 6.347434e+000 -1.067730e+001 1.500000e+001 vertex 6.347434e+000 -1.067730e+001 5.000000e+000 vertex 3.422440e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 1.000000e+000 0.000000e+000 outer loop vertex 3.422440e+000 -1.067730e+001 1.500000e+001 vertex 6.347434e+000 -1.067730e+001 5.000000e+000 vertex 3.422440e+000 -1.067730e+001 5.000000e+000 endloop endfacet facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 outer loop vertex 3.422440e+000 -1.067730e+001 1.500000e+001 vertex 3.422440e+000 -1.067730e+001 5.000000e+000 vertex 3.422440e+000 8.281660e+000 1.500000e+001 endloop endfacet facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 outer loop vertex 3.422440e+000 8.281660e+000 1.500000e+001 vertex 3.422440e+000 -1.067730e+001 5.000000e+000 vertex 3.422440e+000 8.281660e+000 5.000000e+000 endloop endfacet facet normal -9.134987e-001 4.068417e-001 0.000000e+000 outer loop vertex 3.422440e+000 8.281660e+000 1.500000e+001 vertex 3.422440e+000 8.281660e+000 5.000000e+000 vertex -2.320538e+000 -4.613285e+000 1.500000e+001 endloop endfacet facet normal -9.134987e-001 4.068417e-001 0.000000e+000 outer loop vertex -2.320538e+000 -4.613285e+000 1.500000e+001 vertex 3.422440e+000 8.281660e+000 5.000000e+000 vertex -2.320538e+000 -4.613285e+000 5.000000e+000 endloop endfacet facet normal -4.979881e-016 1.000000e+000 0.000000e+000 outer loop vertex -2.320538e+000 -4.613285e+000 1.500000e+001 vertex -2.320538e+000 -4.613285e+000 5.000000e+000 vertex -4.104071e+000 -4.613285e+000 1.500000e+001 endloop endfacet facet normal -4.979881e-016 1.000000e+000 0.000000e+000 outer loop vertex -4.104071e+000 -4.613285e+000 1.500000e+001 vertex -2.320538e+000 -4.613285e+000 5.000000e+000 vertex -4.104071e+000 -4.613285e+000 5.000000e+000 endloop endfacet facet normal 9.149041e-001 4.036714e-001 0.000000e+000 outer loop vertex -4.104071e+000 -4.613285e+000 1.500000e+001 vertex -4.104071e+000 -4.613285e+000 5.000000e+000 vertex -9.793542e+000 8.281660e+000 1.500000e+001 endloop endfacet facet normal 9.149041e-001 4.036714e-001 0.000000e+000 outer loop vertex -9.793542e+000 8.281660e+000 1.500000e+001 vertex -4.104071e+000 -4.613285e+000 5.000000e+000 vertex -9.793542e+000 8.281660e+000 5.000000e+000 endloop endfacet facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 outer loop vertex -9.793542e+000 8.281660e+000 1.500000e+001 vertex -9.793542e+000 8.281660e+000 5.000000e+000 vertex -9.793542e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 outer loop vertex -9.793542e+000 -1.067730e+001 1.500000e+001 vertex -9.793542e+000 8.281660e+000 5.000000e+000 vertex -9.793542e+000 -1.067730e+001 5.000000e+000 endloop endfacet facet normal 0.000000e+000 1.000000e+000 0.000000e+000 outer loop vertex -9.793542e+000 -1.067730e+001 1.500000e+001 vertex -9.793542e+000 -1.067730e+001 5.000000e+000 vertex -1.252235e+001 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 1.000000e+000 0.000000e+000 outer loop vertex -1.252235e+001 -1.067730e+001 1.500000e+001 vertex -9.793542e+000 -1.067730e+001 5.000000e+000 vertex -1.252235e+001 -1.067730e+001 5.000000e+000 endloop endfacet facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 outer loop vertex -1.252235e+001 -1.067730e+001 1.500000e+001 vertex -1.252235e+001 -1.067730e+001 5.000000e+000 vertex -1.252235e+001 1.133150e+001 1.500000e+001 endloop endfacet facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 outer loop vertex -1.252235e+001 1.133150e+001 1.500000e+001 vertex -1.252235e+001 -1.067730e+001 5.000000e+000 vertex -1.252235e+001 1.133150e+001 5.000000e+000 endloop endfacet facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 outer loop vertex 1.156780e+001 -1.469280e+001 1.500000e+001 vertex 1.156780e+001 -1.469280e+001 0.000000e+000 vertex 1.156780e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 outer loop vertex 1.156780e+001 1.530720e+001 1.500000e+001 vertex 1.156780e+001 -1.469280e+001 0.000000e+000 vertex 1.156780e+001 1.530720e+001 0.000000e+000 endloop endfacet facet normal 1.184238e-016 -1.000000e+000 0.000000e+000 outer loop vertex -1.843220e+001 -1.469280e+001 1.500000e+001 vertex -1.843220e+001 -1.469280e+001 0.000000e+000 vertex 1.156780e+001 -1.469280e+001 1.500000e+001 endloop endfacet facet normal 1.184238e-016 -1.000000e+000 0.000000e+000 outer loop vertex 1.156780e+001 -1.469280e+001 1.500000e+001 vertex -1.843220e+001 -1.469280e+001 0.000000e+000 vertex 1.156780e+001 -1.469280e+001 0.000000e+000 endloop endfacet facet normal -1.000000e+000 -1.184238e-016 -0.000000e+000 outer loop vertex -1.843220e+001 1.530720e+001 1.500000e+001 vertex -1.843220e+001 1.530720e+001 0.000000e+000 vertex -1.843220e+001 -1.469280e+001 1.500000e+001 endloop endfacet facet normal -1.000000e+000 -1.184238e-016 0.000000e+000 outer loop vertex -1.843220e+001 -1.469280e+001 1.500000e+001 vertex -1.843220e+001 1.530720e+001 0.000000e+000 vertex -1.843220e+001 -1.469280e+001 0.000000e+000 endloop endfacet facet normal 0.000000e+000 1.000000e+000 0.000000e+000 outer loop vertex 1.156780e+001 1.530720e+001 1.500000e+001 vertex 1.156780e+001 1.530720e+001 0.000000e+000 vertex -1.843220e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 1.000000e+000 0.000000e+000 outer loop vertex -1.843220e+001 1.530720e+001 1.500000e+001 vertex 1.156780e+001 1.530720e+001 0.000000e+000 vertex -1.843220e+001 1.530720e+001 0.000000e+000 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -1.252235e+001 -1.067730e+001 1.500000e+001 vertex -1.252235e+001 1.133150e+001 1.500000e+001 vertex -1.843220e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -1.843220e+001 -1.469280e+001 1.500000e+001 vertex -1.252235e+001 -1.067730e+001 1.500000e+001 vertex -1.843220e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -1.843220e+001 -1.469280e+001 1.500000e+001 vertex -9.793542e+000 -1.067730e+001 1.500000e+001 vertex -1.252235e+001 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -1.843220e+001 -1.469280e+001 1.500000e+001 vertex 1.156780e+001 -1.469280e+001 1.500000e+001 vertex -9.793542e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal -0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -9.793542e+000 -1.067730e+001 1.500000e+001 vertex 1.156780e+001 -1.469280e+001 1.500000e+001 vertex 3.422440e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -2.320538e+000 -4.613285e+000 1.500000e+001 vertex 3.422440e+000 -1.067730e+001 1.500000e+001 vertex 3.422440e+000 8.281660e+000 1.500000e+001 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -2.320538e+000 -4.613285e+000 1.500000e+001 vertex -9.793542e+000 -1.067730e+001 1.500000e+001 vertex 3.422440e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -2.320538e+000 -4.613285e+000 1.500000e+001 vertex -4.104071e+000 -4.613285e+000 1.500000e+001 vertex -9.793542e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -9.793542e+000 -1.067730e+001 1.500000e+001 vertex -4.104071e+000 -4.613285e+000 1.500000e+001 vertex -9.793542e+000 8.281660e+000 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex -3.033951e+000 -9.213713e-001 1.500000e+001 vertex 2.280978e+000 1.133150e+001 1.500000e+001 vertex -8.527233e+000 1.133150e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -8.527233e+000 1.133150e+001 1.500000e+001 vertex 2.280978e+000 1.133150e+001 1.500000e+001 vertex 1.156780e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -1.843220e+001 1.530720e+001 1.500000e+001 vertex -8.527233e+000 1.133150e+001 1.500000e+001 vertex 1.156780e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal -0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex -1.843220e+001 1.530720e+001 1.500000e+001 vertex -1.252235e+001 1.133150e+001 1.500000e+001 vertex -8.527233e+000 1.133150e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 2.280978e+000 1.133150e+001 1.500000e+001 vertex 6.347434e+000 1.133150e+001 1.500000e+001 vertex 1.156780e+001 1.530720e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 1.156780e+001 1.530720e+001 1.500000e+001 vertex 6.347434e+000 1.133150e+001 1.500000e+001 vertex 6.347434e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 0.000000e+000 1.000000e+000 outer loop vertex 1.156780e+001 -1.469280e+001 1.500000e+001 vertex 6.347434e+000 -1.067730e+001 1.500000e+001 vertex 3.422440e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 outer loop vertex 1.156780e+001 -1.469280e+001 1.500000e+001 vertex 1.156780e+001 1.530720e+001 1.500000e+001 vertex 6.347434e+000 -1.067730e+001 1.500000e+001 endloop endfacet facet normal 0.000000e+000 -0.000000e+000 -1.000000e+000 outer loop vertex -1.843220e+001 1.530720e+001 0.000000e+000 vertex 1.156780e+001 1.530720e+001 0.000000e+000 vertex -1.843220e+001 -1.469280e+001 0.000000e+000 endloop endfacet facet normal 0.000000e+000 0.000000e+000 -1.000000e+000 outer loop vertex -1.843220e+001 -1.469280e+001 0.000000e+000 vertex 1.156780e+001 1.530720e+001 0.000000e+000 vertex 1.156780e+001 -1.469280e+001 0.000000e+000 endloop endfacet endsolidopenscad-2013.01+dfsg.orig/examples/example010.scad0000644000175000017500000000046011516152336021261 0ustar chrysnchrysn // example010.dat generated using octave: // d = (sin(1:0.2:10)' * cos(1:0.2:10)) * 10; // save("example010.dat", "d"); intersection() { surface(file = "example010.dat", center = true, convexity = 5); rotate(45, [0, 0, 1]) surface(file = "example010.dat", center = true, convexity = 5); } openscad-2013.01+dfsg.orig/examples/example022.scad0000644000175000017500000000222111516152336021261 0ustar chrysnchrysn// size is a vector [w, h, d] module roundedBox(size, radius, sidesonly) { rot = [ [0,0,0], [90,0,90], [90,90,0] ]; if (sidesonly) { cube(size - [2*radius,0,0], true); cube(size - [0,2*radius,0], true); for (x = [radius-size[0]/2, -radius+size[0]/2], y = [radius-size[1]/2, -radius+size[1]/2]) { translate([x,y,0]) cylinder(r=radius, h=size[2], center=true); } } else { cube([size[0], size[1]-radius*2, size[2]-radius*2], center=true); cube([size[0]-radius*2, size[1], size[2]-radius*2], center=true); cube([size[0]-radius*2, size[1]-radius*2, size[2]], center=true); for (axis = [0:2]) { for (x = [radius-size[axis]/2, -radius+size[axis]/2], y = [radius-size[(axis+1)%3]/2, -radius+size[(axis+1)%3]/2]) { rotate(rot[axis]) translate([x,y,0]) cylinder(h=size[(axis+2)%3]-2*radius, r=radius, center=true); } } for (x = [radius-size[0]/2, -radius+size[0]/2], y = [radius-size[1]/2, -radius+size[1]/2], z = [radius-size[2]/2, -radius+size[2]/2]) { translate([x,y,z]) sphere(radius); } } } translate([-15,0,0])roundedBox([20,30,40], 5, true); translate([15,0,0]) roundedBox([20,30,40], 5, false); openscad-2013.01+dfsg.orig/examples/example009.dxf0000644000175000017500000005467411516152336021160 0ustar chrysnchrysn999 dxflib 2.0.4.8 0 SECTION 2 HEADER 9 $ACADVER 1 AC1015 9 $HANDSEED 5 FFFF 9 $DIMASZ 40 2.5 9 $DIMGAP 40 0.625 9 $DIMEXO 40 0.625 9 $INSUNITS 70 4 9 $DIMTXT 40 2.5 9 $DIMSTYLE 2 Standard 9 $PLIMMAX 10 210.0 20 297.0 9 $PLIMMIN 10 0.0 20 0.0 9 $DIMEXE 40 1.25 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 VPORT 5 8 100 AcDbSymbolTable 70 1 0 VPORT 5 30 100 AcDbSymbolTableRecord 100 AcDbViewportTableRecord 2 *Active 70 0 10 0.0 20 0.0 11 1.0 21 1.0 12 286.3055555555554861 22 148.5 13 0.0 23 0.0 14 10.0 24 10.0 15 10.0 25 10.0 16 0.0 26 0.0 36 1.0 17 0.0 27 0.0 37 0.0 40 297.0 41 1.92798353909465 42 50.0 43 0.0 44 0.0 50 0.0 51 0.0 71 0 72 100 73 1 74 3 75 1 76 1 77 0 78 0 281 0 65 1 110 0.0 120 0.0 130 0.0 111 1.0 121 0.0 131 0.0 112 0.0 122 1.0 132 0.0 79 0 146 0.0 0 ENDTAB 0 TABLE 2 LTYPE 5 5 100 AcDbSymbolTable 70 21 0 LTYPE 5 14 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByBlock 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 15 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 ByLayer 70 0 3 72 65 73 0 40 0.0 0 LTYPE 5 16 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CONTINUOUS 70 0 3 Solid line 72 65 73 0 40 0.0 0 LTYPE 5 31 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT 70 0 3 Dot . . . . . . . . . . . . . . . . . . . . . . 72 65 73 2 40 6.3499999999999996 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 32 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOT2 70 0 3 Dot (.5x) ..................................... 72 65 73 2 40 3.1749999999999998 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 33 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DOTX2 70 0 3 Dot (2x) . . . . . . . . . . . . . 72 65 73 2 40 12.6999999999999993 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 34 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED 70 0 3 Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ 72 65 73 2 40 19.0500000000000007 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 35 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHED2 70 0 3 Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 72 65 73 2 40 9.5250000000000004 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 36 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHEDX2 70 0 3 Dashed (2x) ____ ____ ____ ____ ____ ___ 72 65 73 2 40 38.1000000000000014 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 37 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT 70 0 3 Dash dot __ . __ . __ . __ . __ . __ . __ . __ 72 65 73 4 40 25.3999999999999986 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 38 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOT2 70 0 3 Dash dot (.5x) _._._._._._._._._._._._._._._. 72 65 73 4 40 12.6999999999999993 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 39 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DASHDOTX2 70 0 3 Dash dot (2x) ____ . ____ . ____ . ___ 72 65 73 4 40 50.7999999999999972 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3A 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE 70 0 3 Divide ____ . . ____ . . ____ . . ____ . . ____ 72 65 73 6 40 31.75 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3B 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDE2 70 0 3 Divide (.5x) __..__..__..__..__..__..__..__.._ 72 65 73 6 40 15.875 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3C 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 DIVIDEX2 70 0 3 Divide (2x) ________ . . ________ . . _ 72 65 73 6 40 63.5 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 3D 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER 70 0 3 Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ 72 65 73 4 40 50.7999999999999972 49 31.75 74 0 49 -6.3499999999999996 74 0 49 6.3499999999999996 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 3E 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTER2 70 0 3 Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ 72 65 73 4 40 28.5749999999999993 49 19.0500000000000007 74 0 49 -3.1749999999999998 74 0 49 3.1749999999999998 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 3F 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 CENTERX2 70 0 3 Center (2x) ________ __ ________ __ _____ 72 65 73 4 40 101.5999999999999943 49 63.5 74 0 49 -12.6999999999999993 74 0 49 12.6999999999999993 74 0 49 -12.6999999999999993 74 0 0 LTYPE 5 40 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER 70 0 3 Border __ __ . __ __ . __ __ . __ __ . __ __ . 72 65 73 6 40 44.4500000000000028 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 12.6999999999999993 74 0 49 -6.3499999999999996 74 0 49 0.0 74 0 49 -6.3499999999999996 74 0 0 LTYPE 5 41 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDER2 70 0 3 Border (.5x) __.__.__.__.__.__.__.__.__.__.__. 72 65 73 6 40 22.2250000000000014 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 6.3499999999999996 74 0 49 -3.1749999999999998 74 0 49 0.0 74 0 49 -3.1749999999999998 74 0 0 LTYPE 5 42 100 AcDbSymbolTableRecord 100 AcDbLinetypeTableRecord 2 BORDERX2 70 0 3 Border (2x) ____ ____ . ____ ____ . ___ 72 65 73 6 40 88.9000000000000057 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 25.3999999999999986 74 0 49 -12.6999999999999993 74 0 49 0.0 74 0 49 -12.6999999999999993 74 0 0 ENDTAB 0 TABLE 2 LAYER 5 2 100 AcDbSymbolTable 70 7 0 LAYER 5 10 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 0 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 43 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 plate 70 0 62 7 6 CONTINUOUS 370 0 390 F 0 LAYER 5 44 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 body 70 0 62 3 6 CONTINUOUS 370 0 390 F 0 LAYER 5 45 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 fan_top 70 0 62 1 6 CONTINUOUS 370 0 390 F 0 LAYER 5 46 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 fan_side 70 0 62 1 6 CONTINUOUS 370 0 390 F 0 LAYER 5 47 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 fan_side_center 70 0 62 2 6 CONTINUOUS 370 0 390 F 0 LAYER 5 48 100 AcDbSymbolTableRecord 100 AcDbLayerTableRecord 2 dim 70 0 62 2 6 CONTINUOUS 370 0 390 F 0 ENDTAB 0 TABLE 2 STYLE 5 3 100 AcDbSymbolTable 70 1 0 STYLE 5 11 100 AcDbSymbolTableRecord 100 AcDbTextStyleTableRecord 2 Standard 70 0 40 0.0 41 0.75 50 0.0 71 0 42 2.5 3 txt 4 0 ENDTAB 0 TABLE 2 VIEW 5 6 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 UCS 5 7 100 AcDbSymbolTable 70 0 0 ENDTAB 0 TABLE 2 APPID 5 9 100 AcDbSymbolTable 70 1 0 APPID 5 12 100 AcDbSymbolTableRecord 100 AcDbRegAppTableRecord 2 ACAD 70 0 0 ENDTAB 0 TABLE 2 DIMSTYLE 5 A 100 AcDbSymbolTable 70 1 100 AcDbDimStyleTable 71 0 0 DIMSTYLE 105 27 100 AcDbSymbolTableRecord 100 AcDbDimStyleTableRecord 2 Standard 41 2.5 42 0.625 43 3.75 44 1.25 70 0 73 0 74 0 77 1 78 8 140 2.5 141 2.5 143 0.03937007874016 147 0.625 171 3 172 1 271 2 272 2 274 3 278 44 283 0 284 8 340 11 0 ENDTAB 0 TABLE 2 BLOCK_RECORD 5 1 100 AcDbSymbolTable 70 1 0 BLOCK_RECORD 5 1F 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Model_Space 340 22 0 BLOCK_RECORD 5 1B 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space 340 1E 0 BLOCK_RECORD 5 23 100 AcDbSymbolTableRecord 100 AcDbBlockTableRecord 2 *Paper_Space0 340 26 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 5 20 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Model_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Model_Space 1 0 ENDBLK 5 21 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 BLOCK 5 1C 100 AcDbEntity 67 1 8 0 100 AcDbBlockBegin 2 *Paper_Space 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space 1 0 ENDBLK 5 1D 100 AcDbEntity 67 1 8 0 100 AcDbBlockEnd 0 BLOCK 5 24 100 AcDbEntity 8 0 100 AcDbBlockBegin 2 *Paper_Space0 70 0 10 0.0 20 0.0 30 0.0 3 *Paper_Space0 1 0 ENDBLK 5 25 100 AcDbEntity 8 0 100 AcDbBlockEnd 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 5 49 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 -20.0 20 20.0 30 0.0 11 20.0 21 20.0 31 0.0 0 LINE 5 4A 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 -20.0 20 -20.0 30 0.0 11 -20.0 21 20.0 31 0.0 0 LINE 5 4B 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 20.0 20 20.0 30 0.0 11 20.0 21 -20.0 31 0.0 0 LINE 5 4C 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 20.0 20 -20.0 30 0.0 11 -20.0 21 -20.0 31 0.0 0 CIRCLE 5 4D 100 AcDbEntity 100 AcDbCircle 8 body 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 18.0 0 CIRCLE 5 4E 100 AcDbEntity 100 AcDbCircle 8 plate 62 256 370 -1 6 ByLayer 10 -16.0 20 16.0 30 0.0 40 3.0 0 CIRCLE 5 4F 100 AcDbEntity 100 AcDbCircle 8 plate 62 256 370 -1 6 ByLayer 10 16.0 20 16.0 30 0.0 40 3.0 0 CIRCLE 5 50 100 AcDbEntity 100 AcDbCircle 8 plate 62 256 370 -1 6 ByLayer 10 16.0 20 -16.0 30 0.0 40 3.0 0 CIRCLE 5 51 100 AcDbEntity 100 AcDbCircle 8 plate 62 256 370 -1 6 ByLayer 10 -16.0 20 -16.0 30 0.0 40 3.0 0 CIRCLE 5 52 100 AcDbEntity 100 AcDbCircle 8 body 62 256 370 -1 6 ByLayer 10 -16.0 20 16.0 30 0.0 40 3.0 0 CIRCLE 5 53 100 AcDbEntity 100 AcDbCircle 8 body 62 256 370 -1 6 ByLayer 10 16.0 20 16.0 30 0.0 40 3.0 0 CIRCLE 5 54 100 AcDbEntity 100 AcDbCircle 8 body 62 256 370 -1 6 ByLayer 10 16.0 20 -16.0 30 0.0 40 3.0 0 CIRCLE 5 55 100 AcDbEntity 100 AcDbCircle 8 body 62 256 370 -1 6 ByLayer 10 -16.0 20 -16.0 30 0.0 40 3.0 0 ARC 5 56 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 16.0 20 16.0 30 0.0 40 4.0 100 AcDbArc 50 270.0 51 180.0 0 ARC 5 57 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 20.0 100 AcDbArc 50 53.1301023541559729 51 126.8698976458440342 0 ARC 5 58 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 -16.0 20 16.0 30 0.0 40 4.0 100 AcDbArc 50 360.0 51 270.0 0 ARC 5 59 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 20.0 100 AcDbArc 50 323.1301023541560085 51 36.8698976458440058 0 ARC 5 5A 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 16.0 20 -16.0 30 0.0 40 4.0 100 AcDbArc 50 180.0 51 90.0000000000000568 0 ARC 5 5B 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 20.0 100 AcDbArc 50 233.13010235415598 51 306.8698976458439915 0 ARC 5 5C 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 20.0 100 AcDbArc 50 143.1301023541560085 51 216.8698976458439915 0 ARC 5 5D 100 AcDbEntity 8 body 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 -16.0 20 -16.0 30 0.0 40 4.0 100 AcDbArc 50 90.0 51 0.0 0 LINE 5 5E 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 1.0000000000000002 20 4.8989794855663567 30 0.0 11 1.0000000000000011 21 17.9722007556114285 31 0.0 0 ARC 5 5F 100 AcDbEntity 8 plate 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 5.0 100 AcDbArc 50 341.5369590328155027 51 78.4630409671845115 0 ARC 5 60 100 AcDbEntity 8 plate 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 18.0 100 AcDbArc 50 333.1847385367203742 51 86.8152614632795974 0 LINE 5 61 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 4.7426406871192839 20 -1.5834643389987413 30 0.0 11 16.064382416273375 21 -8.1200749740212839 31 0.0 0 LINE 5 62 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 -0.9999999999999997 20 4.8989794855663558 30 0.0 11 -0.9999999999999989 21 17.9722007556114249 31 0.0 0 ARC 5 63 100 AcDbEntity 8 plate 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 5.0 100 AcDbArc 50 101.5369590328154885 51 198.4630409671844973 0 ARC 5 64 100 AcDbEntity 8 plate 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 18.0 100 AcDbArc 50 93.1847385367204026 51 206.8152614632795689 0 LINE 5 65 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 -4.7426406871192857 20 -1.583464338998738 30 0.0 11 -16.0643824162733821 21 -8.1200749740212697 31 0.0 0 ARC 5 66 100 AcDbEntity 8 plate 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 5.0 100 AcDbArc 50 221.5369590328154459 51 318.4630409671844973 0 LINE 5 67 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 3.742640687119283 20 -3.3155151465676189 30 0.0 11 15.064382416273375 21 -9.8521257815901606 31 0.0 0 ARC 5 68 100 AcDbEntity 8 plate 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 18.0 100 AcDbArc 50 213.1847385367203742 51 326.8152614632795121 0 LINE 5 69 100 AcDbEntity 100 AcDbLine 8 plate 62 256 370 -1 6 ByLayer 10 -3.7426406871192861 20 -3.3155151465676154 30 0.0 11 -15.0643824162733804 21 -9.8521257815901464 31 0.0 0 CIRCLE 5 6A 100 AcDbEntity 100 AcDbCircle 8 plate 62 256 370 -1 6 ByLayer 10 0.0 20 0.0 30 0.0 40 2.0 0 ARC 5 6B 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 17.1172427686236901 100 AcDbArc 50 83.290163192243071 51 96.7098368077569432 0 LINE 5 6C 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 2.0 20 17.0 30 0.0 11 2.0 21 6.0827625302982185 31 0.0 0 ARC 5 6D 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 6.4031242374328485 100 AcDbArc 50 18.2007602645333293 51 71.7992397354666707 0 LINE 5 6E 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 6.0827625302982193 20 2.0 30 0.0 11 17.0 21 2.0 31 0.0 0 ARC 5 6F 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 17.1172427686236901 100 AcDbArc 50 353.2901631922430852 51 6.7098368077569503 0 LINE 5 70 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 6.0827625302982193 20 -2.0 30 0.0 11 17.0 21 -2.0 31 0.0 0 ARC 5 71 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 6.4031242374328485 100 AcDbArc 50 288.2007602645333577 51 341.7992397354666423 0 ARC 5 72 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 6.4031242374328485 100 AcDbArc 50 198.2007602645333009 51 251.7992397354666707 0 LINE 5 73 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 2.0 20 -6.0827625302982193 30 0.0 11 2.0 21 -17.0 31 0.0 0 LINE 5 74 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 -2.0 20 -6.0827625302982193 30 0.0 11 -2.0 21 -17.0 31 0.0 0 ARC 5 75 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 17.1172427686236901 100 AcDbArc 50 263.2901631922430852 51 276.7098368077569148 0 LINE 5 76 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 -2.0 20 6.0827625302982193 30 0.0 11 -2.0 21 17.0 31 0.0 0 ARC 5 77 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 6.4031242374328485 100 AcDbArc 50 108.2007602645333293 51 161.7992397354666991 0 LINE 5 78 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 -6.0827625302982193 20 -2.0 30 0.0 11 -17.0 21 -2.0 31 0.0 0 LINE 5 79 100 AcDbEntity 100 AcDbLine 8 fan_top 62 256 370 -1 6 ByLayer 10 -6.0827625302982193 20 2.0 30 0.0 11 -17.0 21 2.0 31 0.0 0 ARC 5 7A 100 AcDbEntity 8 fan_top 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 0.0 20 0.0 30 0.0 40 17.1172427686236901 100 AcDbArc 50 173.2901631922430568 51 186.7098368077569432 0 LINE 5 7B 100 AcDbEntity 100 AcDbLine 8 fan_side 62 256 370 -1 6 ByLayer 10 0.0 20 -30.0 30 0.0 11 6.0 21 -30.0 31 0.0 0 LINE 5 7C 100 AcDbEntity 100 AcDbLine 8 fan_side 62 256 370 -1 6 ByLayer 10 6.0 20 -30.0 30 0.0 11 6.0 21 -35.0 31 0.0 0 LINE 5 7D 100 AcDbEntity 100 AcDbLine 8 fan_side 62 256 370 -1 6 ByLayer 10 0.0 20 -50.0 30 0.0 11 6.0 21 -50.0 31 0.0 0 LINE 5 7E 100 AcDbEntity 100 AcDbLine 8 fan_side 62 256 370 -1 6 ByLayer 10 6.0 20 -50.0 30 0.0 11 6.0 21 -45.0 31 0.0 0 CIRCLE 5 7F 100 AcDbEntity 100 AcDbCircle 8 fan_side_center 62 256 370 -1 6 ByLayer 10 0.0 20 -40.0 30 0.0 40 3.0 0 LINE 5 80 100 AcDbEntity 100 AcDbLine 8 fan_side_center 62 256 370 -1 6 ByLayer 10 -3.0 20 -37.0 30 0.0 11 3.0 21 -43.0 31 0.0 0 LINE 5 81 100 AcDbEntity 100 AcDbLine 8 fan_side_center 62 256 370 -1 6 ByLayer 10 -3.0 20 -43.0 30 0.0 11 3.0 21 -37.0 31 0.0 0 DIMENSION 5 82 100 AcDbEntity 8 dim 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -10.0 20 -51.0 30 0.0 11 -11.875 21 -40.0 31 0.0 70 0 71 5 72 1 41 1.0 42 0.0 1 bodywidth 3 Standard 100 AcDbAlignedDimension 13 0.0 23 -29.0 33 0.0 14 0.0 24 -51.0 34 0.0 50 90.0 100 AcDbRotatedDimension 0 DIMENSION 5 83 100 AcDbEntity 8 dim 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -15.0 20 -27.0 30 0.0 11 -17.0 21 -48.0 31 0.0 70 0 71 5 72 1 41 1.0 42 0.0 1 platewidth 3 Standard 100 AcDbAlignedDimension 13 0.0 23 -29.0 33 0.0 14 0.0 24 -27.0 34 0.0 50 90.0 100 AcDbRotatedDimension 0 CIRCLE 5 84 100 AcDbEntity 100 AcDbCircle 8 fan_top 62 256 370 -1 6 ByLayer 10 0.0000000000000005 20 0.0 30 0.0 40 1.5 0 LINE 5 85 100 AcDbEntity 100 AcDbLine 8 dim 62 256 370 -1 6 ByLayer 10 6.0 20 -4.0 30 0.0 11 6.0 21 -29.0 31 0.0 0 ARC 5 86 100 AcDbEntity 8 fan_side 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 13.0238095238095237 20 -37.4333333333333371 30 0.0 40 7.4333714650801985 100 AcDbArc 50 339.8005183485309999 51 160.8918335353623945 0 ARC 5 87 100 AcDbEntity 8 fan_side 62 256 370 -1 6 ByLayer 100 AcDbCircle 10 13.0238095238095237 20 -42.5666666666666629 30 0.0 40 7.4333714650801985 100 AcDbArc 50 199.1081664646376055 51 20.1994816514690321 0 LINE 5 88 100 AcDbEntity 100 AcDbLine 8 dim 62 256 370 -1 6 ByLayer 10 17.0 20 -3.0 30 0.0 11 17.0 21 -30.0 31 0.0 0 DIMENSION 5 89 100 AcDbEntity 8 dim 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 -5.0 20 -50.0 30 0.0 11 -6.875 21 -40.0 31 0.0 70 0 71 5 72 1 41 1.0 42 0.0 1 fanwidth 3 Standard 100 AcDbAlignedDimension 13 0.0 23 -30.0 33 0.0 14 0.0 24 -50.0 34 0.0 50 90.0 100 AcDbRotatedDimension 0 DIMENSION 5 8A 100 AcDbEntity 8 dim 62 256 370 -1 6 ByLayer 100 AcDbDimension 10 18.0 20 0.0 30 0.0 11 0.0 21 0.0 31 0.0 70 2 71 5 72 1 41 1.0 42 0.0 1 fanrot 3 Standard 100 AcDb2LineAngularDimension 13 2.6843774609657962 23 4.2183074386605375 33 0.0 14 9.6637588594768662 24 15.1859067791779339 34 0.0 15 5.0 25 0.0 35 0.0 16 26.0 26 15.0 36 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 100 AcDbDictionary 280 0 281 1 3 ACAD_GROUP 350 D 3 ACAD_LAYOUT 350 1A 3 ACAD_MLINESTYLE 350 17 3 ACAD_PLOTSETTINGS 350 19 3 ACAD_PLOTSTYLENAME 350 E 3 AcDbVariableDictionary 350 8B 0 DICTIONARY 5 D 100 AcDbDictionary 280 0 281 1 0 ACDBDICTIONARYWDFLT 5 E 100 AcDbDictionary 281 1 3 Normal 350 F 100 AcDbDictionaryWithDefault 340 F 0 ACDBPLACEHOLDER 5 F 0 DICTIONARY 5 17 100 AcDbDictionary 280 0 281 1 3 Standard 350 18 0 MLINESTYLE 5 18 100 AcDbMlineStyle 2 STANDARD 70 0 3 62 256 51 90.0 52 90.0 71 2 49 0.5 62 256 6 BYLAYER 49 -0.5 62 256 6 BYLAYER 0 DICTIONARY 5 19 100 AcDbDictionary 280 0 281 1 0 DICTIONARY 5 1A 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 0 LAYOUT 5 1E 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout1 70 1 71 1 10 0.0 20 0.0 11 420.0 21 297.0 12 0.0 22 0.0 32 0.0 14 100000000000000000000.0 24 100000000000000000000.0 34 100000000000000000000.0 15 -100000000000000000000.0 25 -100000000000000000000.0 35 -100000000000000000000.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1B 0 LAYOUT 5 22 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 1712 72 0 73 0 74 0 7 75 0 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Model 70 1 71 0 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 1F 0 LAYOUT 5 26 100 AcDbPlotSettings 1 2 C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 4 6 40 0.0 41 0.0 42 0.0 43 0.0 44 0.0 45 0.0 46 0.0 47 0.0 48 0.0 49 0.0 140 0.0 141 0.0 142 1.0 143 1.0 70 688 72 0 73 0 74 5 7 75 16 147 1.0 148 0.0 149 0.0 100 AcDbLayout 1 Layout2 70 1 71 2 10 0.0 20 0.0 11 12.0 21 9.0 12 0.0 22 0.0 32 0.0 14 0.0 24 0.0 34 0.0 15 0.0 25 0.0 35 0.0 146 0.0 13 0.0 23 0.0 33 0.0 16 1.0 26 0.0 36 0.0 17 0.0 27 1.0 37 0.0 76 0 330 23 0 DICTIONARY 5 8B 100 AcDbDictionary 281 1 3 DIMASSOC 350 8D 3 HIDETEXT 350 8C 0 DICTIONARYVAR 5 8C 100 DictionaryVariables 280 0 1 2 0 DICTIONARYVAR 5 8D 100 DictionaryVariables 280 0 1 1 0 ENDSEC 0 EOF openscad-2013.01+dfsg.orig/examples/example013.scad0000644000175000017500000000052511664231414021265 0ustar chrysnchrysn intersection() { linear_extrude(height = 100, center = true, convexity= 3) import(file = "example013.dxf"); rotate([0, 90, 0]) linear_extrude(height = 100, center = true, convexity= 3) import(file = "example013.dxf"); rotate([90, 0, 0]) linear_extrude(height = 100, center = true, convexity= 3) import(file = "example013.dxf"); }openscad-2013.01+dfsg.orig/README.md0000644000175000017500000002036012076022153016206 0ustar chrysnchrysn# What is OpenSCAD? [![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=openscad&url=http://openscad.org&title=OpenSCAD&language=&tags=github&category=software) OpenSCAD is a software for creating solid 3D CAD objects. It is free software and available for Linux/UNIX, MS Windows and Mac OS X. Unlike most free software for creating 3D models (such as the famous application Blender) it does not focus on the artistic aspects of 3D modeling but instead on the CAD aspects. Thus it might be the application you are looking for when you are planning to create 3D models of machine parts but pretty sure is not what you are looking for when you are more interested in creating computer-animated movies. OpenSCAD is not an interactive modeler. Instead it is something like a 3D-compiler that reads in a script file that describes the object and renders the 3D model from this script file (see examples below). This gives you (the designer) full control over the modeling process and enables you to easily change any step in the modeling process or make designs that are defined by configurable parameters. OpenSCAD provides two main modeling techniques: First there is constructive solid geometry (aka CSG) and second there is extrusion of 2D outlines. As data exchange format format for this 2D outlines Autocad DXF files are used. In addition to 2D paths for extrusion it is also possible to read design parameters from DXF files. Besides DXF files OpenSCAD can read and create 3D models in the STL and OFF file formats. # Getting started You can download the latest binaries of OpenSCAD at . Install binaries as you would any other software. When you open OpenSCAD, you'll see three frames within the window. The left frame is where you'll write code to model 3D objects. The right frame is where you'll see the 3D rendering of your model. Let's make a tree! Type the following code into the left frame: cylinder(h = 30, r = 8); Then render the 3D model by hitting F5. Now you can see a cylinder for the trunk in our tree. Now let's add the bushy/leafy part of the tree represented by a sphere. To do so, we will union a cylinder and a sphere. union() { cylinder(h = 30, r = 8); sphere(20); } But, it's not quite right! The bushy/leafy are around the base of the tree. We need to move the sphere up the z-axis. union() { cylinder(h = 30, r = 8); translate([0, 0, 40]) sphere(20); } And that's it! You made your first 3D model! There are other primitive shapes that you can combine with other set operations (union, intersection, difference) and transformations (rotate, scale, translate) to make complex models! Check out all the other language features in the [OpenSCAD Manual](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual). # Documentation Have a look at the OpenSCAD Homepage (http://openscad.org/) for documentation. ## Building OpenSCAD To build OpenSCAD from source, follow the instructions for the platform applicable to you below. ### Prerequisites To build OpenSCAD, you need some libraries and tools. The version numbers in brackets specify the versions which have been used for development. Other versions may or may not work as well. If you're using a newer version of Ubuntu, you can install these libraries from aptitude. If you're using Mac, or an older Linux/BSD, there are build scripts that download and compile the libraries from source. Follow the instructions for the platform you're compiling on below. * [Qt4 (4.4 - 4.7)](http://www.qt.nokia.com/) * [CGAL (3.6 - 4.0.2)](http://www.cgal.org/) * [GMP (5.0.x)](http://www.gmplib.org/) * [cmake (2.6 - 2.8, required by CGAL and the test framework)](http://www.cmake.org/) * [MPFR (3.x)](http://www.mpfr.org/) * [boost (1.35 - 1.47)](http://www.boost.org/) * [OpenCSG (1.3.2)](http://www.opencsg.org/) * [GLEW (1.5.4 ->)](http://glew.sourceforge.net/) * [Eigen (2.0.13->3.1.1)](http://eigen.tuxfamily.org/) * [GCC C++ Compiler (4.2 ->)](http://gcc.gnu.org/) * [Bison (2.4)](http://www.gnu.org/software/bison/) * [Flex (2.5.35)](http://flex.sourceforge.net/) ### Getting the source code Install git (http://git-scm.com/) onto your system. Then run a clone: git clone git://github.com/openscad/openscad.git This will download the latest sources into a directory named 'openscad'. To pull the MCAD library (http://reprap.org/wiki/MCAD), do the following: cd openscad git submodule init git submodule update ### Building for Mac OS X First, make sure that you have XCode installed to get GCC. Then after you've cloned this git repository, run the script that sets up the environment variables. source setenv_mjau.sh Then run the script to compile all the prerequisite libraries above: ./scripts/macosx-build-dependencies.sh We currently don't use [MacPorts](http://www.macports.org) or [brew](http://mxcl.github.com/homebrew/) to install the prerequisite libraries because CGAL doesn't exist on brew and opencsg doesn't exist on ports. And more importantly, there are some patches to GMP in the compilation process. After that, follow the Compilation instructions below. ### Building for Linux/BSD First, make sure that you have git installed (often packaged as 'git-core' or 'scmgit'). Once you've cloned this git repository, download and install the dependency packages listed above using your system's package manager. A convenience script is provided that can help with this process on some systems: ./scripts/uni-get-dependencies.sh After installing dependencies, check their versions. You can run this script to help you: ./scripts/check-dependencies.sh Take care that you don't have old local copies anywhere (/usr/local/). If all dependencies are present and of a high enough version, skip ahead to the Compilation instructions. ### Building for Linux/BSD on systems with older or missing dependencies If some of your system dependency libraries are missing or old, then you can download and build newer versions into $HOME/openscad_deps by following this process. First, run the script that sets up the environment variables. source ./scripts/setenv-unibuild.sh Then run the script to compile all the prerequisite libraries above: ./scripts/uni-build-dependencies.sh This may take an hour or more, depending on your network and system. It is recommended to have at least 1 gigabyte of free disk space. As a special timesaver if you are only missing CGAL and OpenCSG, you can do this instead: ./scripts/uni-build-dependencies.sh opencsg ./scripts/uni-build-dependencies.sh cgal Note that huge dependencies like gcc or qt are not included here, only the smaller ones (boost, CGAL, opencsg, etc). After the build, again check dependencies. ./scripts/check-dependencies.sh After that, follow the Compilation instructions below. ### Building for Windows OpenSCAD for Windows is usually cross-compiled from Linux. If you wish to attempt an MSVC build on Windows, please see this site: http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Windows To cross-build, first make sure that you have development tools installed to get GCC. Then after you've cloned this git repository, start a new clean shell and run the script that sets up the environment variables. source ./scripts/setenv-mingw-xbuild.sh Then run the script to download & compile all the prerequisite libraries above: ./scripts/mingw-x-build-dependencies.sh Note that this process can take several hours, as it uses the http://mxe.cc system to cross-build many libraries. After it is complete, build OpenSCAD and package it to an installer: ./scripts/release-common.sh mingw32 ### Compilation First, run 'qmake' from Qt4 to generate a Makefile. On some systems you need to run 'qmake4', 'qmake-qt4' or something alike to run the qt4 version of the tool. Then run make. Finally you might run 'make install' as root or simply copy the 'openscad' binary (OpenSCAD.app on Mac OS X) to the bin directory of your choice. If you had problems compiling from source, raise a new issue in the [issue tracker on the github page](https://github.com/openscad/openscad/issues). This site and it's subpages can also be helpful: http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_OpenSCAD_from_Sources