DIRECTORY CSG, CSGGraphics, CoordSys, Graphics, GraphicsColor, IO, Matrix3d, Rope, Shading, SV2d, SVArtwork, SVBoundBox, SVPolygon3d, SVVector3d; DisplayList3d: DEFINITIONS = BEGIN versionRope: Rope.ROPE; Artwork: TYPE = REF ArtworkObj; ArtworkObj: TYPE = SVArtwork.ArtworkObj; BoundHedron: TYPE = SVBoundBox.BoundHedron; Classification: TYPE = REF ClassificationObj; ClassificationObj: TYPE = CSG.ClassificationObj; Color: TYPE = GraphicsColor.Color; CoordSysList: TYPE = CoordSys.CoordSysList; CoordSysObj: TYPE = CoordSys.CoordSysObj; CoordSystem: TYPE = REF CoordSysObj; CSGTree: TYPE = REF CSGTreeObj; CSGTreeObj: TYPE = CSG.CSGTreeObj; Camera: TYPE = REF CameraObj; CameraObj: TYPE = CSGGraphics.CameraObj; DrawStyle: TYPE = CSGGraphics.DrawStyle; -- {wire, shaded, rayCast, normals} FrameBox: TYPE = CSGGraphics.FrameBox; Matrix4by4: TYPE = Matrix3d.Matrix4by4; Plane: TYPE = SVPolygon3d.Plane; Point2d: TYPE = SV2d.Point2d; Point3d: TYPE = Matrix3d.Point3d; PointSetOp: TYPE = CSG.PointSetOp; -- {union, intersection, difference} Poly3d: TYPE = SVPolygon3d.Poly3d; Primitive: TYPE = REF PrimitiveObj; PrimitiveObj: TYPE = CSG.PrimitiveObj; Ray: TYPE = REF RayObj; RayObj: TYPE = CSG.RayObj; Vector: TYPE = SVVector3d.Vector; Database: TYPE = REF DatabaseObj; DatabaseObj: TYPE = RECORD [scenes: LIST OF Scene]; Scene: TYPE = REF SceneObj; SceneObj: TYPE = RECORD [ name: Rope.ROPE, worldCS: CoordSystem, -- a name for the identity matrix coordSystems: CoordSysList, lightSources: LightSourceList, masterObjects: MasterObjectList, assembly: Assembly, cameras: FileCameraList, cameraOrder: LIST OF Rope.ROPE, backgroundColor: Color, shadows: BOOL, dirty: BOOL]; Assembly: TYPE = REF AssemblyObj; AssemblyObj: TYPE = RECORD [ name: Rope.ROPE, coordSys: CoordSystem, artwork: Artwork, scalars: Vector, visible: BOOL, isTool: BOOL, object: REF ANY -- a MasterObject or an assembly list ]; AssemblyList: TYPE = REF AssemblyListObj; AssemblyListObj: TYPE = RECORD [ list: LIST OF Assembly, pointSetOp: PointSetOp]; LightSourceList: TYPE = Shading.LightSourceList; -- LIST OF LightSource; LightSource: TYPE = REF LightSourceObj; LightSourceObj: TYPE = Shading.LightSourceObj; FileCamera: TYPE = REF FileCameraObj; FileCameraObj: TYPE = RECORD [ name: Rope.ROPE, origin: Point3d, focusPoint: Point3d, slant: REAL, -- the slant of the camera counter-clockwise from horizontal in degrees. resolution: REAL, focalLength: REAL, frame: FrameBox, clippingPlanes: LIST OF Plane, visibleAssemblies: LIST OF Rope.ROPE]; FileCameraList: TYPE = LIST OF FileCamera; MasterObjectClass: TYPE = REF MasterObjectClassObj; MasterObjectClassObj: TYPE = RECORD [ name: Rope.ROPE, filein: FileinProc, fileout: FileoutProc, rayCast: RayCastProc, rayCastNoBBoxes: RayCastNoBBoxesProc, getHedron: BoundHedronProc, preprocess: PreprocessProc, lineDraw: LineDrawProc, normalsDraw: NormalsDrawProc, countSurf: CountPlanarSurfacesProc, getSurf: GetPlanarSurfacesProc, drawSurf: DrawPlanarSurfaceProc, drawSubBoxes: DrawSubBoxesProc]; MasterObjectClassList: TYPE = LIST OF MasterObjectClass; MasterObject: TYPE = REF MasterObjectRec; MasterObjectRec: TYPE = RECORD [ name: Rope.ROPE, class: MasterObjectClass, mainBody: REF ANY _ NIL, -- information independent of imaging style lineBody: REF ANY, shadeBody: REF ANY, rayCastBody: REF ANY ]; MasterObjectList: TYPE = LIST OF MasterObject; FileoutProc: TYPE = PROC [f: IO.STREAM, mo: MasterObject]; FileinProc: TYPE = PROC [f: IO.STREAM, name: Rope.ROPE] RETURNS [mo: MasterObject]; RayCastProc: TYPE = CSG.RayCastProc; RayCastNoBBoxesProc: TYPE = CSG.RayCastNoBBoxesProc; BoundHedronProc: TYPE = PROC [mo: MasterObject] RETURNS [hedron: BoundHedron]; PreprocessProc: TYPE = PROC [prim: Primitive, camera: Camera]; LineDrawProc: TYPE = PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem]; NormalsDrawProc: TYPE = PROC[dc: Graphics.Context, data: REF ANY, camera: Camera, localCS: CoordSystem]; CountPlanarSurfacesProc: TYPE = PROC [masterObject: MasterObject] RETURNS [len: NAT]; GetPlanarSurfacesProc: TYPE = PROC [assembly: Assembly, camera: CoordSystem] RETURNS [PlanarSurfaceList]; PlanarSurface: TYPE = REF PlanarSurfaceObj; PlanarSurfaceObj: TYPE = RECORD [ whichSurface: REF ANY, assembly: Assembly, mo: MasterObject, normal: Vector, depth: REAL]; -- in camera coords which the master object calculates (for now) PlanarSurfaceList: TYPE = LIST OF PlanarSurface; DrawPlanarSurfaceProc: TYPE = PROC [dc: Graphics.Context, ps: PlanarSurface, lightSources: LightSourceList, camera: Camera]; DrawSubBoxesProc: TYPE = PROC [dc: Graphics.Context, prim: Primitive, screenCS: CoordSystem]; NoOpRayCast: RayCastProc; NoOpRayCastNoBBoxes: RayCastNoBBoxesProc; NoOpPreprocess: PreprocessProc; NoOpLineDraw: LineDrawProc; NoOpNormalsDraw: NormalsDrawProc; NoOpCountPlanarSurfaces: CountPlanarSurfacesProc; NoOpGetPlanarSurfaces: GetPlanarSurfacesProc; NoOpDrawPlanarSurface: DrawPlanarSurfaceProc; NoOpDrawSubBoxes: DrawSubBoxesProc; RegisterMasterObjectClass: PROC [ name: Rope.ROPE, filein: FileinProc, fileout: FileoutProc, rayCast: RayCastProc, rayCastNoBBoxes: RayCastNoBBoxesProc, getHedron: BoundHedronProc, preprocess: PreprocessProc, lineDraw: LineDrawProc, normalsDraw: NormalsDrawProc, countSurf: CountPlanarSurfacesProc, getSurf: GetPlanarSurfacesProc, drawSurf: DrawPlanarSurfaceProc, drawSubBoxes: DrawSubBoxesProc] RETURNS [moClass: MasterObjectClass]; RegisterMasterObject: PROC [mo: MasterObject]; CreateScene: PROC [name: Rope.ROPE] RETURNS [scene: Scene]; CreateEmptyScene: PROC [name: Rope.ROPE] RETURNS [scene: Scene]; CreateMasterObject: PROC [ name: Rope.ROPE, class: MasterObjectClass, mainBody: REF ANY, lineBody: REF ANY, shadeBody: REF ANY, rayCastBody: REF ANY] RETURNS [mo: MasterObject]; CopyMasterObject: PROC [mo: MasterObject] RETURNS [copy: MasterObject]; CreatePrimitiveAssembly: PROC [name: Rope.ROPE, object: Rope.ROPE, size: Vector, scene: Scene, artwork: Artwork _ NIL, isTool: BOOL _ FALSE] RETURNS [assembly: Assembly, masterObjectFound: BOOL]; CreateClusterAssembly: PROC [name: Rope.ROPE, pointSetOp: PointSetOp, isTool: BOOL _ FALSE] RETURNS [assembly: Assembly]; CreateLightSource: PROC [name: Rope.ROPE, position: Point3d, color: Color] RETURNS [ls: LightSource]; CreateFileCamera: PROC [name: Rope.ROPE, origin: Point3d, focusPoint: Point3d, slant: REAL, resolution: REAL, focalLength: REAL, clippingPlanes: LIST OF Plane, visibleAssemblies: LIST OF Rope.ROPE] RETURNS [fileCamera: FileCamera]; CameraFromFileCamera: PROC [fileCamera: FileCamera, worldCS: CoordSystem, screenCS: CoordSystem, style: DrawStyle] RETURNS [camera: Camera]; InitialCameraList: PROC [] RETURNS [cameras: FileCameraList]; NameAlreadyPresent: SAFE SIGNAL; AddMasterObjectToScene: PROC [mo: MasterObject, scene: Scene]; AddLightSourceToScene: PROC [ls: LightSource, scene: Scene]; AddCameraToScene: PROC [fileCamera: FileCamera, scene: Scene]; AddCameraOrderNameToScene: PROC [name: Rope.ROPE, scene: Scene]; AddCoordSysToScene: PROC [cs: CoordSystem, scene: Scene]; AddAssemblyToScene: PROC [assembly: Assembly, scene: Scene, mat: Matrix4by4]; AddSubassemblyToAssembly: PROC [subassembly: Assembly, assembly: Assembly, scene: Scene, mat: Matrix4by4]; AttemptToAddSubassemblyToPrimitive: SIGNAL; RenameAssembly: PROC [assem: Assembly, newName: Rope.ROPE, scene: Scene]; CopyAssemblyAndSons: PROC [assembly: Assembly, scene: Scene, prefix: Rope.ROPE] RETURNS [copy: Assembly]; MoveSubassembly: PROC [assem: Assembly, to: Assembly, scene: Scene]; MoveToFrontOfAssembly: PROC [subassembly: Assembly, assembly: Assembly, scene: Scene]; MergeAssemblyIntoScene: PROC [newAssembly: Assembly, fromScene: Scene, parentAssembly: Assembly, toScene: Scene] RETURNS [copyAssembly: Assembly]; MergeSceneIntoScene: PROC [fromScene: Scene, toScene: Scene] RETURNS [success: BOOL]; SetArtworkAssembly: PROC [assembly: Assembly, artwork: Artwork, scene: Scene]; FindSceneFromName: PROC [name: Rope.ROPE] RETURNS [scene: Scene]; DatabaseEmpty: SIGNAL; SceneNotFound: SIGNAL; FindAssemblyFromName: PROC [name: Rope.ROPE, scene: Scene] RETURNS [assembly: Assembly, superAssembly: Assembly]; AssemblyNotFound: SIGNAL; AssemblyNameIsPresent: PROC [name: Rope.ROPE, scene: Scene] RETURNS [BOOL]; AnyNamesAlreadyPresent: PROC [assembly: Assembly, scene: Scene] RETURNS [BOOL]; NewNamesAlreadyPresent: PROC [assembly: Assembly, scene: Scene, prefix: Rope.ROPE] RETURNS [BOOL]; FindClassFromName: PROC [name: Rope.ROPE] RETURNS [moClass: MasterObjectClass, success: BOOL]; FindObjectFromName: PROC [name: Rope.ROPE, scene: Scene] RETURNS [object: MasterObject, success: BOOL]; ObjectNameIsPresent: PROC [name: Rope.ROPE, scene: Scene] RETURNS [BOOL]; CoordSysNameIsPresent: PROC [name: Rope.ROPE, scene: Scene] RETURNS [BOOL]; FindLightFromName: PROC [name: Rope.ROPE, scene: Scene] RETURNS [light: LightSource, success: BOOL]; LightSourceNameIsPresent: PROC [name: Rope.ROPE, scene: Scene] RETURNS [BOOL]; FindFileCameraFromName: PROC [name: Rope.ROPE, scene: Scene] RETURNS [fileCamera: FileCamera, success: BOOL]; FileCameraNameIsPresent: PROC [name: Rope.ROPE, scene: Scene] RETURNS [BOOL]; UniqueNameFrom: PROC [name: Rope.ROPE, scene: Scene] RETURNS [unique: Rope.ROPE]; GetSceneGenerator: PROC RETURNS [g: SceneGenerator]; SceneGenerator: TYPE = REF SceneGeneratorObj; SceneGeneratorObj: TYPE = RECORD [currentPtr: LIST OF Scene]; NextScene: PROC [g: SceneGenerator] RETURNS [scene: Scene]; GetCoordSysGenerator: PROC [scene: Scene] RETURNS [g: CoordSysGenerator]; CoordSysGenerator: TYPE = REF CoordSysGeneratorObj; CoordSysGeneratorObj: TYPE = RECORD[currentPtr: LIST OF CoordSystem]; NextCoordSys: PROC [g: CoordSysGenerator] RETURNS [cs: CoordSystem]; GetAssemblyGenerator: PROC [scene: Scene] RETURNS [g: AssemblyGenerator]; AssemblyGenerator: TYPE = REF AssemblyGeneratorObj; AssemblyGeneratorObj: TYPE = RECORD[currentPtr: LIST OF Assembly]; NextAssembly: PROC [g: AssemblyGenerator] RETURNS [a: Assembly]; GetLightSourceGenerator: PROC [scene: Scene] RETURNS [g: LightSourceGenerator]; LightSourceGenerator: TYPE = REF LightSourceGeneratorObj; LightSourceGeneratorObj: TYPE = RECORD [currentPtr: LightSourceList]; NextLight: PROC [g: LightSourceGenerator] RETURNS [ls: LightSource]; GetMasterObjectClassGenerator: PROC [scene: Scene] RETURNS [g: MasterObjectClassGenerator]; MasterObjectClassGenerator: TYPE = REF MasterObjectClassGeneratorObj; MasterObjectClassGeneratorObj: TYPE = RECORD [ currentPtr: MasterObjectClassList]; NextClass: PROC [g: MasterObjectClassGenerator] RETURNS [moClass: MasterObjectClass]; MasterObjectsOfScene: PROC [scene: Scene] RETURNS [l: MasterObjectList]; MasterObjectsOfAssembly: PROC [assembly: Assembly, scene: Scene] RETURNS [l: MasterObjectList]; ListOfPrimAssemblies: PROC [assembly: Assembly, scene: Scene] RETURNS [primList: LIST OF Assembly]; DeleteMasterObjectNamed: PROC [moName: Rope.ROPE, scene: Scene] RETURNS [found: BOOL]; DeleteMasterObjectIfUnused: PROC [mo: MasterObject, scene: Scene] RETURNS [found: BOOL]; DeleteCoordSysNamed: PROC [csName: Rope.ROPE, scene: Scene]; DeleteLightSourceNamed: PROC [lsName: Rope.ROPE, scene: Scene]; ClearScene: PROC [scene: Scene]; ClearCoordSystems: PROC [scene: Scene]; ClearMasterObjects: PUBLIC PROC [scene: Scene]; DeleteSubassemblyFromAssembly: PROC [subassembly: Assembly, assembly: Assembly, scene: Scene _ NIL] RETURNS [success: BOOL]; DrawScene: PROC [dc: Graphics.Context, scene: Scene, camera: Camera]; DrawAssembly: PROC [dc: Graphics.Context, assembly: Assembly, scene: Scene, camera: Camera]; SceneToTree: PROC [scene: Scene, camera: Camera] RETURNS [tree: CSGTree]; ListTree: PROC [outHandle: IO.STREAM, tree: CSGTree]; END. ŽDisplayList3d.mesa Last edited by Bier on December 18, 1982 1:17 am Author: Eric Bier on August 12, 1983 11:25 am Used for version stamps and initial greeting. Exported by DisplayList3dImplA. Introduction Contents: The Solidviews System is involved with the creation and manipulation of three dimensional scenes. A scene is a list of lightsources, a list of cameras, and a tree of assemblies. Intermediate nodes in this tree are cluster assemblies. The leaves of this tree are primitive assemblies. Each cluster assembly specifies a point set operation describing how its children should be combined. Each primitive assembly refers to a master object (a shape) and a triplet of scalars describing how this master object should be scaled before being displayed. All assemblies (cluster or primitive) refer to a coordinate system which describes how the object should be positioned and oriented with respect to its parent coordinate system (from which we can derive how it will be positioned in the scene's master coordinate system known as WORLD). Each master object is an instance of a class of shapes called a master object class. This interface provides procedures which: Set Up the System The set of master object classes is established at load time. It is independent of scene, since it is assumed that each artist will want to have all available classes at his disposal for all scenes. Thus, each program which implements a master object class must register it at load time. Those classes which have only one instance (such as spheres, cylinders, blocks, and cones) should register these at load time as well. Create Entities Scenes, Master Objects, Primitive Assemblies, Cluster Assemblies, Light Sources. Build the Scene Tree Add Master Objects, Light Sources, Coordinate Systems, and Assemblies to the scene. Add assemblies as children of other assemblies. Restructure the Tree Rename assemblies. Copy assemblies. Move assemblies to other nodes. Change the order of assemblies within nodes. Add assemblies from other scenes. Add entire other scenes. Change the surface appearance of a Primitive Assembly. Delete Parts of the Scene Tree Delete Master Objects, Coordinate Systems, and Light Sources from the scene. Delete Assemblies from their parents. Delete all assemblies from the scene. Delete all Coordinate Systems from the scene. Find Scene Entities from their Names Find scenes from the global scene database. In scenes find: Assemblies, Master Objects, Master Object Classes, Light Sources from their names. Also some facilities for generate a unique assembly name by adding a number to a given assembly name. Get Generators of Scene Entities GetGenerator and Next procedures for Scenes, Coordinate Systems, Assemblies, Light Sources, Master Object Classes, Master Objects. Also a procedure which returns a list of primitive assemblies. Draw Parts of the Scene Tree Draw the entire scene. Draw an assembly and all of its children. Convert a Scene Tree to a Ray Tracing Tree Given a camera postion we can produce a view dependent tree representing the givne scene. Also provides a procedure for printing a text form of the resulting tree. Imported Types DisplayList Types Databases, Scenes, Assemblies, and Lightsources The assembly mentioned above is known throughout the system as "sceneAssembly". Translation, scaling and rotation of this assembly effects the entire scene. Master Object Class Types Master Object Types each object type will have its own way of describing its surfaces The normal is a surface normal given in local coordinates by each assembly. It is converted to camera coordinates before it is passed back to master object class code for drawing. Noop Procedures A master object can use these entries if it doesn't implement one of these procedures Set Up the System Creates a MasterObjectClass and adds it to a global list at load time. Adds a MasterObject to a global list at load time. It is later added to the default scene at viewer startup (CreateScene) time. Create Entities Creates scene and adds scene to database. Includes default coordinate systems (WORLD, CAMERA, and SCENE), one default light source, five default master objects (cube, sphere, cone, cylinder, and torus) and seven default cameras (Top, Bottom, Left, Right, Front, UpLeft, and UpRight). Like create scene, but includes only the 3 default coordinate systems. No light sources, master objects or cameras. Object must be on the master object list of scene. Use AddMasterObjectToScene below. A conversion from the viewer-independent to the viewer-dependent type of camera. An initial list of cameras provided with a new scene (or an old scene which was made before named file cameras were introduced). Build the Scene Tree Any of the procedures below may signal NameAlreadyPresent. Adds the named object to the scene's master object list. Add LightSource "ls" to the given scene. Add FileCamera "fileCamera" to the given scene. The names of those cameras which should open automatically with the pic file is loaded are added to the scene in order. Add assembly to the top level list of assemblies in the scene. Automatically makes coordsys of subassembly refer to coordsys of super assembly, and adds coordsys to scene. Restructure the Tree Creates a new assembly tree with copied master objects at the leaves May SIGNAL NameAlreadyPresent or AttemptToAddSubassemblyToPrimitive if there is a failure for either of these reasons. Moves subassembly to the first position of assembly's assemblylist. Makes a list of all of the masterobjects needed. Compares this list to the list of masterobjects available in the new scene, subtracting any that are available. Copies those that are still needed and adds them to the new scene. Makes a copy of the newAssembly tree (without changing names) but refering to master objects in the new scene. Wires up the new assembly to its parent. Takes all of the assemblies from fromScene which are directly under sceneAssembly and adds them to the sceneAssembly of toScene. Makes sure that all assemblies in fromScene have names unique in toScene first. Find Scene Entities from their Names Looks for named scene in the global database Finds the named assembly and its immediate superior in current scene. superAssembly is NIL if assembly is top level Is an assembly with this name present in current scene? Returns TRUE iff one or more of: assembly's name or the names of all of assembly's children is currently found in scene. Like AnyNamesAlreadyPresent except that assembly's name and the name of each of assembly's children is concatenated with prefix before being tested for presence in the scene. Get Generators of Scene Entities Scene Generator gets a generator of the scenes in the database CoordSystem Generator gets a generator of the assemblies in the current scene Assembly Generator gets a generator of the assemblies in the current scene LightSource Generator gets a generator of the lightsources in the current scene. MasterObjectClass Generator MasterObject Generator List of Primitive Assemblies Returns a list of the leaves of the tree whose root is the given assembly. A good start for any function interested in modifying all of the primitive assemblies of a given subassembly of the scene (including the whole scene, of course). Delete Parts of the Scene Tree Removes all assemblies from scene. Leaves light sources for now. Removes all but WORLD, and SCREEN from current scene. Removes all but "block", "sphere", "cone", and "cylinder" from current scene. Deletes subAssembly from assembly. If subassembly is not a son of assembly, returns FALSE and does nothing Draw Parts of the Scene Tree Draw given scene. Draw an assembly and all of its children. Convert a Scene Tree to a Ray Tracing Tree Ê?– "Cedar" style˜Ihead1– "Cedar" stylešÏc™Jšœ0™0š.™.šÏk ˜ J– "Cedar" stylešžœ˜Jšœ ˜ Jšœ ˜ Jšœ ˜ Jšœ˜Jšžœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ J˜ Jšœ ˜ Jšœ ˜ —J– "Cedar" stylešœž œ˜Jšžœ˜šœžœ˜Ibody– "Cedar" stylešN™N——š ™ L– "Cedar" stylešœdÐbiœŸ œ ŸœŸ œ'ŸÏiŸ œŸ  Ÿ œ%ŸœVŸ œ¡ŸœŸœ™¥L– "Cedar" stylešœ)™)head– "Cedar" style™L– "Cedar" style™ª—– "Cedar" stylešœ™L– "Cedar" style™Q—– "Cedar" style™L– "Cedar" style™ƒ—– "Cedar" style™L– "Cedar" style™ä—– "Cedar" style™L– "Cedar" style™È—– "Cedar" style™$L– "Cedar" style™÷—– "Cedar" style™ L– "Cedar" style™Â—– "Cedar" style™L– "Cedar" style™A—– "Cedar" style™*L– "Cedar" stylešœ¤™¤——– "Cedar" styleš™J– "Cedar" stylešœ žœžœ ˜Jšœ žœ˜(Jšœ žœ˜+Jšœžœžœ˜-Jšœžœžœ˜0Jšœžœ˜"Jšœžœ˜+Jšœ žœ˜)Jšœ žœžœ ˜$Jšœ žœžœ ˜Jšœ žœžœ ˜"Jšœžœžœ ˜Jšœ žœ˜(Jšœ žœ#˜LJšœ žœ˜&J˜J˜Jšœ žœ˜'Jšœžœ˜ Jšœ žœ˜Jšœ žœ˜!Jšœ žœžœ $˜GJšœžœ˜"Jšœ žœžœ˜#Jšœžœžœ˜&Jšœžœžœ˜Jšœžœžœ˜Jšœžœ˜!—– "Cedar" styleš™head2– "Cedar" styleš/™/J– "Cedar" stylešœ žœžœ ˜!Jš œ žœžœ žœžœ ˜4J– "Cedar" stylešœžœžœ ˜Jšœ žœžœžœ"œ¢žœžœžœ'žœ žœ˜ÖL– "Cedar" stylešž™žJ– "Cedar" stylešœ žœžœ ˜!Jšœ žœžœžœIžœ žœ žœžœ&œ˜ÅJ– "Cedar" stylešœžœžœ˜)Jš œžœžœ žœžœ$˜SJ– "Cedar" stylešœžœ˜HJšœ žœžœ˜'Jšœžœ˜.Jšœ žœžœ˜%šœžœžœ˜Jšœ žœ˜Jšœ˜Jšœ˜JšœžœH˜UIprocšœ žœ˜Ošœ žœ˜Ošœ˜Ošœžœžœ˜Ošœžœžœžœ˜&—Jšœžœžœžœ ˜*—– "Cedar" styleš™J– "Cedar" stylešœžœžœ˜3šœžœžœ˜%JšÏbœžœ˜Jš¡œ ˜Jš¡œ˜Jš¡œ˜Jš¡œ˜%Jš¡ œ˜Jš¡ œ˜Jš¡œ˜Jš¡ œ˜Jš¡ œ˜#Jš¡œ˜Jš¡œ˜ Jš¡ œ˜ —Jšœžœžœžœ˜8—– "Cedar" styleš™J– "Cedar" stylešœžœžœ˜)šœžœžœ˜ Jš¡œžœ˜Jš¡œ˜Jš ¡œžœžœžœ+˜DJš¡œžœžœ˜Jš¡ œžœžœ˜Jš¡ œžœž˜Jšœ˜—Jšœžœžœžœ˜/J– "Cedar" styleš Ïn œžœžœžœžœ˜:J– "Cedar" styleš¢ œžœžœžœžœ žœžœ˜SJ– "Cedar" styleš¡ œžœžœ ˜$J– "Cedar" styleš¡œžœžœ˜4Jš¢œžœžœžœ˜NJš¢œžœžœ#˜>J– "Cedar" styleš ¢ œžœžœžœžœ(˜eJ– "Cedar" styleš ¢œžœžœžœžœ(˜hJ– "Cedar" styleš ¢œžœžœžœžœ˜U– "Cedar" styleš¢œžœžœ+žœ˜jJ– "Cedar" stylešœžœžœ˜+Jšœžœžœ˜!Jšœžœžœ˜JšœA™AJšœ˜Jšœ˜Jšœ˜Jšœ žœ@˜RL– "Cedar" stylešµ™µJ– "Cedar" stylešœžœžœžœ˜1—J– "Cedar" styleš¢œžœžœZ˜|J– "Cedar" styleš¢œžœžœ@˜]– "Cedar" styleš™L– "Cedar" stylešV™VJšœ˜Jš¡œ˜)Jšœ˜Jšœ˜Jšœ!˜!Jšœ1˜1Jšœ-˜-Jšœ-˜-Jšœ#˜#———– "Cedar" styleš™– "Cedar" styleš¢œžœ˜!Jš¡œžœ˜Jš¡œ ˜Jš¡œ˜Jš¡œ˜Jš¡œ˜%Jš¡ œ˜Jš¡ œ˜Jš¡œ˜Jš¡ œ˜Jš¡ œ˜#Jš¡œ˜Jš¡œ˜ Jš¡ œ˜—šžœ˜%L– "Cedar" stylešG™G—– "Cedar" styleš¢œžœ˜.L– "Cedar" styleš€™€——– "Cedar" styleš™– "Cedar" styleš¢ œžœ žœžœ˜;L– "Cedar" styleš™—– "Cedar" styleš¢œžœ žœžœ˜@L– "Cedar" stylešu™u—– "Cedar" styleš¢œžœ˜Jš¡œžœ˜Jš¡œ˜Jš¡œžœžœ˜Jš¡œžœžœ˜Jš¡ œžœžœ˜Jš¡ œžœžœ˜—Jšžœ˜Jš¢œžœžœ˜LJš¢œžœ žœžœ1žœ žœžœ˜Œšžœ)žœ˜6L– "Cedar" stylešV™V—J– "Cedar" styleš ¢œžœ žœ"žœžœ˜[Jšžœ˜Jš¢œžœ žœ"˜JJšžœ˜Jš¢œžœ žœ/žœžœžœžœžœžœžœžœžœ˜èJš¢œžœYžœ˜ŒJ™Qš¢œžœžœ˜=J™€——– "Cedar" styleš™– "Cedar" styleš:™:J– "Cedar" styleš¡œžœžœ˜!—– "Cedar" styleš¢œžœ"˜>J– "Cedar" styleš9™9—– "Cedar" styleš¢œžœ!˜J– "Cedar" stylešœ œ ™0—– "Cedar" styleš¢œžœ žœ˜@J– "Cedar" style™x—J– "Cedar" styleš¢œžœ"˜:– "Cedar" styleš¢œžœ5˜MJ– "Cedar" styleš?™?—– "Cedar" styleš¢œžœL˜jJ– "Cedar" stylešœl™mJ– "Cedar" styleš¡"œžœ˜+——– "Cedar" styleš™J– "Cedar" styleš¢œžœ!žœ˜IJš¢œžœ1žœ˜Ošžœ˜J– "Cedar" styleš»™»—J– "Cedar" styleš¢œžœ/˜D– "Cedar" styleš¢œžœ;˜VJ– "Cedar" stylešC™C—š¢œžœUžœ˜’J™ÿ—J– "Cedar" styleš¢œžœ#˜<šžœ žœ˜J– "Cedar" stylešÑ™Ñ—J– "Cedar" styleš¢œžœ6˜N—– "Cedar" styleš$™$– "Cedar" styleš¢œžœ žœžœ˜AJ– "Cedar" stylešœ+™,J– "Cedar" styleš¡ œžœ˜J– "Cedar" styleš¡ œžœ˜—J– "Cedar" styleš¢œžœ žœ˜:šžœ/˜6J– "Cedar" stylešs™sJ– "Cedar" styleš¡œžœ˜—– "Cedar" styleš ¢œžœ žœžœžœ˜KJ– "Cedar" stylešœ6™7—– "Cedar" styleš¢œžœ$žœžœ˜OJšœx™x—š ¢œžœ1žœžœžœ˜bJš¯™¯—Jš¢œžœ žœ˜)Jšžœ'žœ˜5JšÐbnœžœ žœ˜8Jšžœ!žœ˜.J– "Cedar" styleš ¢œžœ žœžœžœ˜JJ– "Cedar" style˜Jš ¢œžœ žœžœžœ˜LJš¢œžœ žœ˜7Jšžœžœ˜,Jš ¢œžœ žœžœžœ˜OJš ¢œžœ žœžœ#žœ˜mJš ¢œžœ žœžœžœ˜NJ– "Cedar" styleš¢œžœ žœ˜4Jšžœžœ˜—– "Cedar" styleš ™ – "Cedar" styleš™J– "Cedar" styleš¢œžœžœ˜4Jšœ.™.Jšœžœžœ˜-Jš œžœžœžœžœ˜=J– "Cedar" styleš¢ œžœžœ˜;—– "Cedar" styleš™J– "Cedar" styleš¢œžœžœ˜IJšœ7™7Jšœžœžœ˜3Jš œžœžœ žœžœ˜EJ– "Cedar" styleš¢ œžœžœ˜D—– "Cedar" styleš™J– "Cedar" styleš¢œžœžœ˜IJšœ7™7Jšœžœžœ˜3Jš œžœžœ žœžœ ˜BJ– "Cedar" styleš¢ œžœžœ˜@—– "Cedar" styleš™J– "Cedar" styleš¢œžœžœ˜OJšœ:™:Jšœžœžœ˜9Jšœžœžœ˜EJ– "Cedar" styleš¢ œžœžœ˜D—– "Cedar" styleš™J– "Cedar" styleš¢œžœžœ"˜\Jšœžœžœ˜Ešœžœžœ˜.Jšœ#˜#—J– "Cedar" styleš¢ œžœ ˜/Jšžœ˜%—– "Cedar" styleš™J– "Cedar" styleš¢œžœ˜)Jšžœ˜Jš¢œžœ$žœ˜_—– "Cedar" styleš™– "Cedar" styleš ¢œžœ$žœ žœžœ ˜cJ– "Cedar" styleší™í———– "Cedar" styleš™J– "Cedar" styleš¢œžœžœ˜?Jšžœ žœ˜Jš¢œžœ!˜AJšžœ žœ˜Jš¢œžœžœ˜