Monthly Archives: September 2013

IPC – some notes on drinking fountains

Drinking Fountain

The Drinking Fountain Diaries | David Tracy

Chapter I
It’s a hot summer day, the sun is baking my brains, and my water bottle is empty. As I wander through the park, I keep my eyes peeled for a water source; one of those vendors with a cart, a kiosk, , nothing. I continue to walk, and the longer I walk, the more my thirst takes over. Things are getting desperate; I need water, and at this point, even a pond will do! Suddenly, in the distance, something catches my eye. An iron bollard topped by a concave dish presents itself to me as a divine gift. Frantically, I search for some way to activate the fountain. I spot a circular button underneath the dish. I press it and a spurt of water emerges from the spigot followed by a barely existent stream of water. The water pressure is so weak that I might have to put my mouth on the spigot … screw it.

Chapter II
It’s a Wednesday morning at the office and I’m recovering from a late night out with friends. Cottonmouthed, muscles aching, head throbbing, holding back nausea, I make my way to the drinking fountain seeking liquid salvation. I arrive at my destination lightly press the the gray bar mounted to the front of the fountain. Magically, the fountain’s internal chiller activates, and an eruption of ice cold water delivers me from evil. My life is saved.

The End

Drinking fountains are perhaps one of the oldest pieces of interactive technology in use and have taken on many forms throughout their long history. Though Crawford wouldn’t consider these devices to be highly interactive, or interactive at all, they’re important to us. As illustrated in my memoir above, their public presence accommodates a public need for fresh and free drinking water, in my case for very thirsty people on very hot days and for people with hangovers. In fact, in the United States, drinking fountains are required in all public places. (This could be taken to mean that water is a universal right, though in many places, this doesn’t seem to be the case.)

Through their various physical incarnations, their primary function has always stayed the same.  This is how a drinking fountain works: I’m thirsty, I see a drinking fountain, I push a button, water appears, and I drink it. The fountain responds to my action. Pretty simple right? Below are some of my observations on drinking fountains and suggestions for how water fountains could be better.

the ancient outdoor drinking fountain

As I sit eating on a slice of pizza on a park bench in Washington Square Park, I casually monitor the water fountain across from me. The body of the fountain is a nice looking toned down piece of throw back art nouveau cast iron topped by a bronze bowl, spigot and drain. The button to open the spigot is concealed beneath the bowl of the fountain. It’s a simple button that requires just a couple pounds of pressure to activate.

Five minutes, no use. This is pretty good pizza, I would call it deep dish, but I think I heard it called Sicilian, exotic. Ten minutes, a sip from a passerby. I’m stuffed. Twenty minutes, several gulps by man on crutches, he first fumbles to find the push button to open the spigot, then struggles to lean over to reach the spigot. I get up to toss my paper plate and napkin in the trash receptacle. Thirty minutes, a water bottle is refilled, a nice consistent water pressure makes this easy. I could use a sip, but I’ll stay put for now. Forty-five minutes, someone uses the fountain to wash the their lunch remains from their hands. What a concept! I follow suit. All in, the interactions range from five to thirty seconds.

The fountain’s simple function lends it alternate uses besides drinking; drinking bottle refill, hand washing, face washing, spitting, bird bathing, bacteria breeding, disease transmission. Whatever novel form it takes, the drinking fountain is stuck as a universal device to accommodate the general population.

After I rinse my hands, I lean over to take a sip from the ancient cast iron apparatus. Not very cold, but good to cleanse my palette of the Sicilian slice I just devoured. As I drink, leaned over, I feel the contents of my stomach turn, then the sudden urge to vomit. I quickly stand upright. I’m too tall for this drinking fountain! Discrimination! Design crime! Call the police!

Of course, the mounting height of the spigot and the fountains dish is mounted at the best height for the most people. As much as I would love a drinking fountain spigot mounted at 5′-9″ this would exclude most of the population from interacting with such a device. Not to mention those disabled and bound to a wheelchair. This may be the lowest common design denominator for spigot mounting height; a low water-fountain will accommodate the wheelchair bound as well as the able bodied, though it might occasionally induce the urge to vomit. Aside form that, the mounting height of the spigot presents problems for people who are able bodied but may have limited mobility, like that man on crutches. He would be well served by a fountain with a higher spigot. Maybe the spigot wouldn’t have to move but the water pressure could be regulated to provide a higher stream of water. The shape of the basin would have to adjust to accommodate the variable heights in turn.

The same man fumbled to find the button to activate the spigot. He figured it out only a few seconds. Should he have been able to immediately figure out the button’s location? Is it ok that he needed a few seconds? Is this bad design? In the case of the drinking fountain, it’s hard to say, these public devices are elements of life that we familiarize ourselves with from an early age. With this in mind, most of us have a frame of reference for how a fountain works and should be able to find the button after a few short seconds. The button’s location is clearly an aesthetic decision by the design, who determined that a little functional ambiguity was worth the concealed appearance. The fountain’s appearance allows it to fit into the aesthetic context and serve as a functional piece of sculpture.

The woman who refilled her water bottle was able to do so because the fountain’s water pressure was strong and consistent. While this has little to do with the fountain’s design, it illuminates a larger piece of infrastructure, public water. The public water system is a complicated beast, which might be considered extremely interactive. Water is drawn from lakes and reservoirs and expelled into an amazing wastewater treatment system. The fountain is but a node in this system. The disappointment and despair of low water pressure on a hot summer day …

Water fountains are great things and they’re disgusting things. People spit in them, rinse food down them, birds shit in them, and all that crap partially sits in the drain, and festers in a dry drain on a hot day. Not to mention the microbes that can grow in and around the spigot. The activator button or push panel is touched by thousands of people with varying levels of filth on their hands. Perhaps this is all ok, we don’t necessarily touch any of that gunk in the basin or put our mouths on the spigot, but we do have to trust that our municipal water is clean and chemical and disease free. Perhaps the most problematic part of the water fountain is the actuator (button or push panel). Maybe if there was a small infrared sensor on body of the fountain that activated the spigot, contamination would be eliminated. This sensor would require a low voltage connection, perhaps powered by a small solar cell … or a gigantic wind turbine.

 

ICM – Lonely Pong

This project started as a collaboration between myself and Seiya Kobayashi. Once we had the bones of the system in place, we split up to make our own games. 

I decided to make a pong game for solo play. Some of the functionality includes:

The ball is bound by the left, right, and top of the game window
If the ball touches the left, right, or top edge of the game window, it changes direction
The ball size shrinks each time it hits the paddle
The ball speed increases each time the ball hits the paddle
The paddle size shrinks each time the ball hits it
If the paddle gets too small, the size can be reset by clicking the mouse (up to 5 times)
The score increases each time the ball hits the paddle
The game ends if the ball crosses the line over

lonelypong01

 

//the ball, size, and speed
float ballX;
float ballY;
float ballR = 20;
float speedX = 3;
float speedY = 3;

//paddle position
float padX;
float padY;
float padW;
float padH = 5;

//general parameters
int lives = 5;
int score = 0;
int textFade = 100;
int gameState = 0;

void setup() {
size(500, 500);
ballX = random(10, width – 10);
ballY = random(10, height – 10);
padY = height – (height*.1);
padW = width/10;
smooth();
ellipseMode(RADIUS);
rectMode(RADIUS);
}

void draw() {

if (lives > 0) {

gameState = 0;

println(lives);

textAlign(CENTER);
textSize(25);
fill(0, 174, 239, textFade);
text(“WELCOME TO LONELY PONG!!!”, width/2, height/2);
textFade -= .5;

fill(0, 30); //black background
rect(0, 0, width, height);

fill(236, 0, 140);

//score
textAlign(LEFT);
textSize(25);
text(score, 35, 35);

// lives left
textAlign(CENTER);
textSize(25);
text(lives, mouseX, padY + 35);

//boundary line
for (int i = 0; i < width; i += width/100) {
ellipse(i, padY, 1, 1);
}

//if the ball drops below the line, subtract one life
if (ballY > padY) {
lives = 0;
}

padX = mouseX;
noStroke();

//draw the ball
fill(0, 174, 239);
ellipse(ballX, ballY, ballR, ballR);
ballX += speedX;
ballY += speedY;

//constrain within the window
if (ballX-ballR < 0 || ballX+ballR > width) {
speedX = -speedX;
}
if (ballY-ballR < 0 || ballY+ballR > height) {
speedY = -speedY;
}

//draw the bar
fill(236, 0, 140);
rect(padX, padY, padW, padH);

//bounce on the bar
if ((ballX + ballR > padX – padW) && (ballX + ballR < padX + padW) && (ballY + ballR > padY – padH) && (ballY + ballR < padY + padH)) {
speedY = – speedY;
score += 10;
if ( ballR > 2 ) {
ballR –;
}
if (padW > 5) {
padW -= 2;

if (speedX < 10) {
if (speedX > 0 ) {
speedX += .2;
}
else if (speedX < 0) {
speedX -= .2;
}

if (speedY > 0 ) {
speedY += .2;
}
else if (speedY < 0) {
speedY -= .2;
}
}
}
}
}

else {
gameState = 1;

textAlign(CENTER);
textSize(50);
fill(0, 174, 239);
text(“GAME OVER”, width/2, height/2);
textSize(15);
text(“SCORE: ” + score, width/2, (height/2) + 25);

//Reset the game

rect(width/2, height/2 + 50, 50, 10);
fill(0);
text(“AGAIN?”, width/2, height/2 + 56 );
if ((mousePressed == true)
&& ((mouseX > width/2 -50) && (mouseX < width/2 + 50)) && ((mouseY > height/2 – 40) && (mouseY < height/2 + 60))) {
gameState = 0;
score = 0;
lives = 6;
speedX = 3;
speedY = 3;
ballX = width/2;
ballY = height/2;
}
}
}

void mouseClicked() {
ballR = 20;
lives = lives – 1;
padW = width/10;
}

design meets disability

Over the past several years, a fashion phenomenon has swept over the NBA’s top talent. Russell Westbrook, Dwayne Wade, Kevin Durant, Carmelo Anthony, Dwight Howard, Lebron James, and many others have begun to show up to post-game conferences wearing empty frames. The glassless glasses signify that an enabling aide like glasses has completely shifted from functional appliance to aesthetic fashion accessory, a striking contrast to the stigma of glasses of the last century. Perhaps the mass appeal of frames on super star athletes is that they project an (oftentimes false) image of disability on the athlete, humanizing them and allowing consumers and fans to connect to their brand.

Glasses are perhaps the easiest example of design for disability to comment upon, since visual impairment is so prevalent. In Design Meets Disability, Graham Pullin makes a case for nurturing the natural tensions within design culture between pragmatists and artists. Though Pullin focuses on design of objects for the disabled, his argument is easily expanded to all design disciplines; good design comes from a process in which constraints are simultaneously taken seriously and playfully challenged.

Traditionally, design for disability has focused on enabling ability while attracting as little attention as possible. However, the term disability can be qualified on many levels based on the general presence of the disability itself. For example, visual impairment as a disability affects an enormous percentage of the population and for this very reason, it is almost not even considered a disability anymore. A disability such as amputation however, is far less common and has a larger potential to alienate its subject thus presenting a more difficult challenge of projecting a positive image without invisibility. Regardless of the type of disability, Pullin demonstrates through the examples of eye wear, hear-wear, and prosthetics, populations of people with disabilities can be every bit as diverse as society in general. This diversity carries with it the added dimension of taste, which requires a range of styles.

Perhaps we are approaching a point where we can overcome the technical limitations of industrial manufacture to accommodate taste at a new level. Custom circuitry and on-demand 3D printing could enable disability designers to create design systems instead of products in which the end-user has control of the outcome. A rough example of this type of system is Nervous System‘s custom jewelry interfaces, cell-cycle and radiolaria. These systems allow the end-user to modify the object within a system of parameters and constraints to make a piece of jewelry that suits their individual taste while upholding principles of good design. In this scenario, the role of the designer actually remains unchanged since the same rigor of respecting and exploring the constraints is still present in the system. What’s different is the mode of manufacture.

ICM – Assignment 02

For this assignment, I wanted to explore simple motion with referenced vector based PShapes. I’ve always loved the look of Japanese wood block prints, and an iconic example of one is The Great Wave off Kanagawa. I decided to try and break a couple of the layers of the original image apart in illustrator to generate some vector geometry. This vector geometry could then be referenced into processing to reinterpret the image with motion. The result is below.

Screen Shot 2013-09-18 at 1.29.04 PM

Screen Shot 2013-09-18 at 2.00.25 AM

Source code (and files) here:

PShape wave01;
PShape wave02;
PShape wave03;
PShape fuji01;

float wave01Start = 0;
float wave02Start = 0;
float wave03Start = 0;
float wave04Start = 400;
float wave05Start = 700;
float wave06Start = 300;
float wave07Start = 300;

float moonMove = 200;

float r01 = random(1, 5);
float r02 = random(1, 5);

void setup() {
size(920, 506);
colorMode(HSB, 360);
smooth();
wave01 = loadShape(“wave01.svg”);
wave02 = loadShape(“wave02.svg”);
wave03 = loadShape(“wave03.svg”);
fuji01 = loadShape(“fuji01.svg”);
}

void draw() {
background (360, 200, map(mouseY, 0, height, 60, 360));

//mount fuji
shape(fuji01, 200, -50);

//bigwave in the background
shape(wave01, wave04Start, -125);
wave04Start = wave04Start + random(3, 7);
println(wave04Start);
if (wave04Start > width) {
wave04Start = wave04Start – (width+400);
}

//smaller wave in the background 01
shape(wave02, wave06Start, 1-map(mouseY, 0, height, 30, 45));
//shape(wave02, (wave02Start – wave02.width*2), map(mouseY, 0, height, 0, 15));
wave06Start = wave06Start + r02;
if (wave06Start > wave02.width) {
wave06Start = wave06Start – ((wave02.width*2));
}

//mirrored wave in the background 01
shape(wave03, (wave07Start – wave03.width), 1-map(mouseY, 0, height, 30, 45));
wave07Start = wave07Start + r02;
if (wave07Start > wave03.width*2) {
wave07Start = wave07Start – ((wave03.width*2));
}

//bigwave in the foreground 01
shape(wave01, wave01Start, -75);
wave01Start = wave01Start + random(1, 5);
if (wave01Start > width) {
wave01Start = wave01Start – (width + wave01.width-300);
}

//smaller wave in the background 02
shape(wave02, wave02Start, map(mouseY, 0, height, 0, 15));
//shape(wave02, (wave02Start – wave02.width*2), map(mouseY, 0, height, 0, 15));
wave02Start = wave02Start + r01;
if (wave02Start > wave02.width) {
wave02Start = wave02Start – (wave02.width*2);
}

 

//mirrored wave in the background 02
shape(wave03, (wave03Start – wave03.width), map(mouseY, 0, height, 0, 15));
wave03Start = wave03Start + r01;
if (wave03Start > wave03.width*2) {
wave03Start = wave03Start – (wave03.width*2);
}

//bigwave in the foreground 02
shape(wave01, wave05Start, 50);
wave05Start = wave05Start + random(1, 5);
if (wave05Start > width) {
wave05Start = wave05Start – (width + wave01.width-300);
}

fill(0, (map(mouseY, 0, height-100, 0, 250)));
rect(0, 0, width, height);

//the moon
fill(50, 115, (map(mouseY, 0, height, 300, 360)));
ellipse(moonMove, 50, 25, 25);
moonMove = moonMove + .25;
}

CL:V/S – Response: The Machine Stops

the machine stops. em forster. 1909.

“Above her, beneath her, and around her, the Machine hummed eternally; she did not notice the noise, for she had been born with it in her ear.”

The most interesting part of E.M. Forster’s short story, The Machine Stops, is the fact that it was written in 1909. Forster began exploring themes in newly industrialized, twentieth century Britain that we are still coming to terms with over a century later. His tale brings to mind Plato’s Allegory of the Cave, modern day North Korea, natural ecology, 1984, The Giver, Farenheit 451, and the Matrix, just to name a few. It also predates all of those, well, except for Plato.

Forster draws from the available material of his time to project his future aesthetic; mechanized armchairs, zeppelins (at least that’s what I pictured …), knobs, buttons, and nozzles, giant automated worms. Perhaps this work serves as a precedent to steam punk. Forster uses his aesthetic to paint a grim picture of a future void of human connection, in which his humans have executed their fantasy of becoming one with a machine that ultimately destroys them.

Though his story is a pessimistic prophecy, Forster divines several themes that remain important today.

a world of proxies

Forster’s story is ultimately an environmental catastrophe tale, through which his subjects’ detachment from the processes they are embedded in leads to their destruction. Our tendency to disconnect from our environment and to experience it only as something outside of is accountable for our strained relationship with our environment and is literally destroying our world and its mending apparatus. The devices and technology that we are increasingly dependent upon have the same alienating effect on the social level … obliterating space and isolating people. 

“Year by year it was served with increased efficiency and decreased intelligence. The better a man knew his own duties upon it, the less he understood the duties of his neighbour, and in all the world there was not one who understood the monster as a whole. Those master brains had perished.”

networks and hierarchies

We think of our newly networked world as having the ability to overcome the traditional hierarchies embedded in our society. However, networks blur into hierarchies and hierarchies easily succumb to networks. The Machine succumbs to its own inefficiencies as pieces begin to break down. What started as an automated network to augment the lives of its users evolved into a hulking committee based hierarchical machine that ends up controlling the lives of Forster’s subjects. 

“Cannot you see, cannot all you lecturers see, that it is we that are dying, and that down here the only thing that really lives in the Machine? We created the Machine, to do our will, but we cannot make it do our will now. It was robbed us of the sense of space and of the sense of touch, it has blurred every human relation and narrowed down love to a carnal act, it has paralysed our bodies and our wills, and now it compels us to worship it. The Machine develops – but not on our lies. The Machine proceeds – but not to our goal. “

 

IPC Reading Response – Week 01

This week’s readings, A Brief Rant on the Future of Interaction Design by Bret Victor, and Chapter 1 and 2 of The Art of Interactive Design by Chris Crawford, deal with different aspects of interactivity. Victor’s Rant deals with the potentials of human capability and quality of interactivity while Crawford reflects on a more theoretical side of interactivity.

On an abstract level, Crawford’s definition of interactivity as a cyclic process in which two actors alternately listen, think, and speak, resonates clearly in contrast to many of the common aspects of everyday life that are considered interactive. In this sense, it’s not about whether or not the process takes place, its the the quality of the interactive process; good interaction occurs when listening, thinking, and speaking are firing on all cylinders. Crawford places the quality of interactivity on a graded scale instead of in a binary system, since interactivity can be a highly subjective depending on the actors engaged.

Like Crawford, I would define physical interaction as a feedback-loop between two actors, one in which a clear path of communication is opened, through a variety of sensory experiences. A good physical interaction transcends the traditional boundaries between object and subject. The object is no longer a passenger on our journey. In A Brief Rant on the Future of Interaction Design, Bret Victor pleas for inspired exploration of human capabilities as they relate to interactivity; to overcome the Pictures Under Glass paradigm, a paradigm of permanent numbness. Victor makes a compelling argument for the use of our entire body (all 300 joints and 600 muscles of it) to explore interactivity in a three dimensional world. 

The altered relationship with objects that Victor pleas for may help us reestablish our connection with our surroundings and reclaim reality … or maybe it will just alienate us in new and unforeseen ways.

It has always been the tendency of people to isolate ourselves from our surroundings. This self-imposed alienation is functional, it protects us from things that want to eat us, freeze us, or generally kill us. The psyche that accompanies our isolation is one of thresholds, between inside and outside, and is responsible for the current state of our relationship with our environment. The environment is seen as separate from us.

Our relationship with technology continues our removal from the physical world. The objects we interact with continue to dematerialize yet dominate our existences; our phones want to disappear into thin air to become projections of our body, Google Glass wants to be our eyeballs … perhaps this is alludes to a destructive subconscious fantasy to become pure data. 

 

ICM – Week 01 – Self Portrait

Screen Shot 2013-09-11 at 1.41.15 AM

 

The process for this one was a bit messy … I think I got a little overzealous. I wanted to create a vector based drawing translation of a raster image using only a couple processing primitives, the triangle and the ellipse.

First I took a (crappy) picture of myself while I was on an airplane back to Chicago. I then used Photoshop to grayscale the image, gaussian blur it, and posterize it to reduce the amount of values in the image to 4 levels of gray.

process01

I then a used a few manual drafting methods in Rhinoceros to describe the different regions of the image. Including manual circle packing and meshing through closed poly-curves vertices. I also had to flip my coordinate system in Rhino to accommodate Processing’s default coordinate system.

ICM Capture01 ICM Capture02 ICM Capture03

Now that the shapes were in cartesian space, I needed a way to extract the circle center-points, radii, and mesh vertices. Once the data was extracted and sorted using Grasshopper, I needed a way to automate the conversion of the data into something that Processing could read. I exported the list data from Grasshopper to a CSV file, and then imported into excel. Using a simple Concatenate function, I was able to convert my data from Grasshopper into something that Processing could handle. The resulting values were simple copied and pasted into the processing editor, section by section.

=CONCATENATE(“triangle(“,A1,”, “,B1,”, “, A2,”, “, B2,”, “,A3,”, “,B3,”);”)

process02

 

Source Code below:

size(640,420);
colorMode(RGB, 100);
background(0);
strokeWeight(.25);
stroke(0,0,255);

//face01
fill(35,0,60);
ellipse(359.658091, 154.900137, 3.862398, 3.862398);
ellipse(362.025198, 154.111102, 3.862398, 3.862398);
ellipse(364.786823, 153.815213, 3.862398, 3.862398);
ellipse(364.786823, 155.491914, 3.862398, 3.862398);
ellipse(363.011493, 156.872727, 3.862398, 3.862398);
ellipse(360.644386, 155.985062, 3.862398, 3.862398);
ellipse(358.08002, 154.998767, 3.862398, 3.862398);
ellipse(101.860322, 112.993504, 3.862398, 3.862398);
ellipse(211.385854, 88.287211, 3.862398, 3.862398);
ellipse(367.799948, 139.941157, 8.09483, 8.09483);
ellipse(368.895831, 135.801155, 8.09483, 8.09483);
ellipse(371.818186, 131.539388, 8.09483, 8.09483);
ellipse(374.009951, 129.834682, 8.09483, 8.09483);
ellipse(374.49701, 133.244095, 8.09483, 8.09483);
ellipse(374.375246, 137.505862, 8.09483, 8.09483);
ellipse(373.157598, 141.767629, 8.09483, 8.09483);
ellipse(370.235244, 144.202924, 8.09483, 8.09483);
ellipse(151.114809, 120.221546, 8.09483, 8.09483);
ellipse(150.993045, 125.457431, 8.09483, 8.09483);
ellipse(149.410103, 129.353904, 8.09483, 8.09483);
ellipse(146.000689, 128.014492, 8.09483, 8.09483);
ellipse(99.33111, 102.967417, 8.09483, 8.09483);
ellipse(99.782091, 108.529512, 8.09483, 8.09483);
ellipse(96.625227, 103.268071, 8.09483, 8.09483);
ellipse(319.300361, 60.214284, 8.09483, 8.09483);
ellipse(321.766097, 59.22799, 8.09483, 8.09483);
ellipse(325.809905, 58.438954, 8.09483, 8.09483);
ellipse(328.4729, 56.466365, 8.09483, 8.09483);
ellipse(327.881124, 52.915704, 8.09483, 8.09483);
ellipse(325.908534, 50.449968, 8.09483, 8.09483);
ellipse(322.949651, 46.800678, 8.09483, 8.09483);
ellipse(311.114115, 42.165093, 8.09483, 8.09483);
ellipse(301.941575, 42.066464, 8.09483, 8.09483);
ellipse(289.317004, 40.98154, 8.09483, 8.09483);
ellipse(278.763652, 39.600727, 8.09483, 8.09483);
ellipse(265.941822, 37.924026, 8.09483, 8.09483);
ellipse(257.262429, 36.937732, 8.09483, 8.09483);
ellipse(234.905829, 36.125269, 8.09483, 8.09483);
ellipse(230.112437, 37.563287, 8.09483, 8.09483);
ellipse(227.635851, 39.560533, 8.09483, 8.09483);
ellipse(226.836953, 42.516458, 8.09483, 8.09483);
ellipse(229.313538, 44.433815, 8.09483, 8.09483);
ellipse(232.908582, 46.191392, 8.09483, 8.09483);
ellipse(240.289236, 90.25889, 8.09483, 8.09483);
ellipse(247.686446, 86.116453, 8.09483, 8.09483);
ellipse(243.839897, 90.653408, 8.09483, 8.09483);
ellipse(242.754973, 95.683511, 8.09483, 8.09483);
ellipse(342.831871, 88.661818, 8.09483, 8.09483);
ellipse(336.416458, 85.683234, 8.09483, 8.09483);
ellipse(330.68841, 83.392015, 8.09483, 8.09483);
ellipse(324.731241, 82.017284, 8.09483, 8.09483);
ellipse(317.170219, 82.017284, 8.09483, 8.09483);
ellipse(93.080843, 418.96398, 8.09483, 8.09483);
ellipse(97.740976, 405.735215, 8.09483, 8.09483);
ellipse(105.557974, 390.251547, 8.09483, 8.09483);
ellipse(110.969741, 375.66984, 8.09483, 8.09483);
ellipse(115.629874, 360.78748, 8.09483, 8.09483);
ellipse(120.740988, 344.702505, 8.09483, 8.09483);
ellipse(127.35537, 329.218837, 8.09483, 8.09483);
ellipse(132.616811, 315.388764, 8.09483, 8.09483);
ellipse(137.577598, 302.460653, 8.09483, 8.09483);
ellipse(140.133154, 287.72862, 8.09483, 8.09483);
ellipse(140.584135, 272.545606, 8.09483, 8.09483);
ellipse(141.185443, 255.708996, 8.09483, 8.09483);
ellipse(139.720644, 240.891237, 8.09483, 8.09483);
ellipse(137.293472, 223.091377, 8.09483, 8.09483);
ellipse(136.842492, 207.908363, 8.09483, 8.09483);
ellipse(136.692165, 189.418157, 8.09483, 8.09483);
ellipse(184.843337, 162.088876, 8.09483, 8.09483);
ellipse(172.540298, 160.091629, 8.09483, 8.09483);
ellipse(209.513245, 166.65363, 8.09483, 8.09483);
ellipse(199.862631, 163.127444, 8.09483, 8.09483);
ellipse(340.571098, 103.599073, 8.09483, 8.09483);
ellipse(333.889903, 106.93967, 8.09483, 8.09483);
ellipse(327.02312, 107.310847, 8.09483, 8.09483);
ellipse(320.156337, 106.93967, 8.09483, 8.09483);
ellipse(313.660732, 104.527016, 8.09483, 8.09483);
ellipse(309.948957, 96.917878, 8.09483, 8.09483);
ellipse(311.433667, 90.422273, 8.09483, 8.09483);
ellipse(316.258974, 86.710498, 8.09483, 8.09483);
ellipse(323.868112, 86.524909, 8.09483, 8.09483);
ellipse(329.806951, 87.638442, 8.09483, 8.09483);
ellipse(335.003436, 90.051095, 8.09483, 8.09483);
ellipse(340.756686, 92.649338, 8.09483, 8.09483);
ellipse(346.881115, 87.638442, 8.09483, 8.09483);
ellipse(340.571098, 83.741079, 8.09483, 8.09483);
ellipse(334.44667, 80.58607, 8.09483, 8.09483);
ellipse(329.064596, 77.987828, 8.09483, 8.09483);
ellipse(321.641047, 76.874295, 8.09483, 8.09483);
ellipse(314.774264, 76.503118, 8.09483, 8.09483);
ellipse(236.837205, 86.6096, 8.09483, 8.09483);
ellipse(234.568728, 92.330109, 8.09483, 8.09483);
ellipse(228.256442, 95.78214, 8.09483, 8.09483);
ellipse(218.590755, 95.683511, 8.09483, 8.09483);
ellipse(213.757911, 93.217774, 8.09483, 8.09483);
ellipse(208.43192, 93.020515, 8.09483, 8.09483);
ellipse(203.10593, 94.00681, 8.09483, 8.09483);
ellipse(198.273086, 92.527368, 8.09483, 8.09483);
ellipse(193.83476, 88.680819, 8.09483, 8.09483);
ellipse(193.341613, 83.650716, 8.09483, 8.09483);
ellipse(187.522475, 94.894475, 8.09483, 8.09483);
ellipse(187.719734, 89.469855, 8.09483, 8.09483);
ellipse(188.015622, 84.73564, 8.09483, 8.09483);
ellipse(190.481358, 81.382239, 8.09483, 8.09483);
ellipse(193.242983, 79.606908, 8.09483, 8.09483);
ellipse(230.115135, 74.532627, 8.09483, 8.09483);
ellipse(223.70422, 73.250444, 8.09483, 8.09483);
ellipse(218.378229, 73.84222, 8.09483, 8.09483);
ellipse(213.644015, 75.223033, 8.09483, 8.09483);
ellipse(210.685131, 73.94085, 8.09483, 8.09483);
ellipse(234.454831, 69.009377, 8.09483, 8.09483);
ellipse(228.832952, 67.924453, 8.09483, 8.09483);
ellipse(223.309702, 67.825823, 8.09483, 8.09483);
ellipse(218.476859, 67.727194, 8.09483, 8.09483);
ellipse(213.446756, 68.220341, 8.09483, 8.09483);
ellipse(209.698836, 69.601154, 8.09483, 8.09483);
ellipse(206.641323, 71.672372, 8.09483, 8.09483);
ellipse(94.438982, 50.959623, 20.953076, 20.953076);
ellipse(81.360544, 34.874648, 20.953076, 20.953076);
ellipse(72.491259, 21.194902, 20.953076, 20.953076);
ellipse(100.600785, 63.34047, 20.953076, 20.953076);
ellipse(108.792317, 77.999001, 20.953076, 20.953076);
ellipse(132.073513, 93.088665, 20.953076, 20.953076);
ellipse(123.450848, 77.567868, 20.953076, 20.953076);
ellipse(117.414982, 64.202737, 20.953076, 20.953076);
ellipse(110.085717, 48.250806, 20.953076, 20.953076);
ellipse(101.463052, 33.161142, 20.953076, 20.953076);
ellipse(91.97812, 23.67621, 20.953076, 20.953076);
ellipse(86.373387, 11.604479, 20.953076, 20.953076);
ellipse(83.845527, 4.751353, 20.953076, 20.953076);
ellipse(66.092224, 5.145871, 20.953076, 20.953076);
ellipse(139.481988, 6.590227, 20.953076, 20.953076);
ellipse(142.046354, 13.39566, 20.953076, 20.953076);
ellipse(145.104409, 22.231187, 20.953076, 20.953076);
ellipse(147.898153, 31.310854, 20.953076, 20.953076);
ellipse(150.691896, 41.787392, 20.953076, 20.953076);
ellipse(154.184075, 54.01002, 20.953076, 20.953076);
ellipse(156.977819, 64.835776, 20.953076, 20.953076);
ellipse(158.025473, 74.264661, 20.953076, 20.953076);
ellipse(150.342678, 81.947455, 20.953076, 20.953076);
ellipse(146.501281, 94.519301, 20.953076, 20.953076);
ellipse(145.104409, 103.24975, 20.953076, 20.953076);
ellipse(144.405973, 115.12316, 20.953076, 20.953076);
ellipse(143.358319, 118.964557, 20.953076, 20.953076);
ellipse(134.278653, 113.027852, 20.953076, 20.953076);
ellipse(126.945076, 107.789583, 20.953076, 20.953076);
ellipse(120.659153, 100.805224, 20.953076, 20.953076);
ellipse(113.674794, 93.471647, 20.953076, 20.953076);
ellipse(97.610769, 92.773212, 20.953076, 20.953076);
ellipse(93.070936, 86.487289, 20.953076, 20.953076);
ellipse(87.832667, 76.709186, 20.953076, 20.953076);
ellipse(81.895962, 66.581866, 20.953076, 20.953076);
ellipse(76.657692, 55.75611, 20.953076, 20.953076);
ellipse(70.022552, 44.930354, 20.953076, 20.953076);
ellipse(64.784282, 34.803033, 20.953076, 20.953076);
ellipse(58.498359, 23.628059, 20.953076, 20.953076);
ellipse(53.26009, 14.897611, 20.953076, 20.953076);
ellipse(48.371039, 5.468726, 20.953076, 20.953076);
ellipse(45.577296, -1.166415, 20.953076, 20.953076);
ellipse(209.146588, 102.905683, 20.953076, 20.953076);
ellipse(316.766037, 115.968231, 20.953076, 20.953076);
ellipse(332.346325, 117.801206, 20.953076, 20.953076);
ellipse(246.567809, 142.807308, 20.953076, 20.953076);
ellipse(259.856878, 134.55892, 20.953076, 20.953076);
ellipse(266.501413, 129.289116, 20.953076, 20.953076);
ellipse(272.229461, 136.621017, 20.953076, 20.953076);
ellipse(282.769068, 145.098527, 20.953076, 20.953076);
ellipse(299.724087, 139.828723, 20.953076, 20.953076);
ellipse(303.160916, 125.164922, 20.953076, 20.953076);
ellipse(302.931794, 111.417609, 20.953076, 20.953076);
ellipse(300.411453, 99.961514, 20.953076, 20.953076);
ellipse(297.203747, 90.338395, 20.953076, 20.953076);
ellipse(288.955359, 80.715275, 20.953076, 20.953076);
ellipse(273.37507, 85.297713, 20.953076, 20.953076);
ellipse(271.312973, 96.066442, 20.953076, 20.953076);
ellipse(268.105266, 81.860885, 20.953076, 20.953076);
ellipse(269.250876, 92.400492, 20.953076, 20.953076);
ellipse(268.56351, 102.023611, 20.953076, 20.953076);
ellipse(235.79908, 112.563218, 20.953076, 20.953076);
ellipse(234.882592, 121.957216, 20.953076, 20.953076);
ellipse(233.278739, 130.434726, 20.953076, 20.953076);
ellipse(270.882584, 182.895257, 20.953076, 20.953076);
ellipse(282.338679, 192.060133, 20.953076, 20.953076);
ellipse(280.734826, 203.516227, 20.953076, 20.953076);
ellipse(273.173803, 208.556909, 20.953076, 20.953076);
ellipse(261.94683, 208.786031, 20.953076, 20.953076);
ellipse(253.46932, 201.45413, 20.953076, 20.953076);
ellipse(187.54129, 425.053663, 20.953076, 20.953076);
ellipse(187.999534, 413.82669, 20.953076, 20.953076);
ellipse(190.519874, 400.766742, 20.953076, 20.953076);
ellipse(192.123728, 387.477672, 20.953076, 20.953076);
ellipse(194.414947, 374.875968, 20.953076, 20.953076);
ellipse(196.706165, 365.940215, 20.953076, 20.953076);
ellipse(197.851775, 357.004461, 20.953076, 20.953076);
ellipse(201.059481, 346.235732, 20.953076, 20.953076);
ellipse(204.038066, 335.925247, 20.953076, 20.953076);
ellipse(209.536991, 326.989493, 20.953076, 20.953076);
ellipse(215.265039, 319.428471, 20.953076, 20.953076);
ellipse(224.429914, 315.075155, 20.953076, 20.953076);
ellipse(238.864594, 317.595495, 20.953076, 20.953076);
ellipse(246.88386, 322.177933, 20.953076, 20.953076);
ellipse(256.277857, 323.552665, 20.953076, 20.953076);
ellipse(264.068002, 326.302127, 20.953076, 20.953076);
ellipse(273.232877, 328.593346, 20.953076, 20.953076);
ellipse(281.939509, 332.488418, 20.953076, 20.953076);
ellipse(286.980191, 336.841734, 20.953076, 20.953076);
ellipse(289.729653, 332.946662, 20.953076, 20.953076);
ellipse(294.770335, 319.886714, 20.953076, 20.953076);
ellipse(300.498382, 313.242179, 20.953076, 20.953076);
ellipse(303.476967, 307.514132, 20.953076, 20.953076);
ellipse(307.142917, 299.494866, 20.953076, 20.953076);
ellipse(310.121502, 289.871747, 20.953076, 20.953076);
ellipse(311.267111, 278.873896, 20.953076, 20.953076);
ellipse(314.933061, 267.646923, 20.953076, 20.953076);
ellipse(316.766037, 258.252926, 20.953076, 20.953076);
ellipse(317.22428, 248.629806, 20.953076, 20.953076);
ellipse(317.453402, 235.569858, 20.953076, 20.953076);
ellipse(322.264962, 223.426398, 20.953076, 20.953076);
ellipse(327.076522, 215.17801, 20.953076, 20.953076);
ellipse(329.367741, 210.137328, 20.953076, 20.953076);
ellipse(332.117203, 201.88894, 20.953076, 20.953076);
ellipse(334.408422, 191.349333, 20.953076, 20.953076);
ellipse(337.616129, 180.580604, 20.953076, 20.953076);
ellipse(340.365591, 170.728363, 20.953076, 20.953076);
ellipse(342.885932, 163.854706, 20.953076, 20.953076);
ellipse(347.010126, 153.085977, 20.953076, 20.953076);
ellipse(347.010126, 143.462858, 20.953076, 20.953076);
ellipse(347.010126, 134.527104, 20.953076, 20.953076);
ellipse(345.864517, 129.257301, 20.953076, 20.953076);
ellipse(344.948029, 122.612766, 20.953076, 20.953076);
ellipse(346.551883, 112.302281, 20.953076, 20.953076);
ellipse(348.155736, 107.261599, 20.953076, 20.953076);
ellipse(349.301345, 98.325845, 20.953076, 20.953076);
ellipse(349.759589, 102.908283, 20.953076, 20.953076);
ellipse(303.332472, 80.506771, 20.953076, 20.953076);
ellipse(295.41221, 68.626376, 20.953076, 20.953076);
ellipse(303.049606, 58.160315, 20.953076, 20.953076);
ellipse(312.384201, 54.765916, 20.953076, 20.953076);
ellipse(315.212867, 49.391452, 20.953076, 20.953076);
ellipse(306.444004, 48.542853, 20.953076, 20.953076);
ellipse(294.846476, 47.411387, 20.953076, 20.953076);
ellipse(282.683216, 46.562787, 20.953076, 20.953076);
ellipse(271.368554, 44.299855, 20.953076, 20.953076);
ellipse(259.48816, 44.016988, 20.953076, 20.953076);
ellipse(250.719297, 42.036922, 20.953076, 20.953076);
ellipse(241.384702, 41.754056, 20.953076, 20.953076);
ellipse(242.233301, 44.865588, 20.953076, 20.953076);
ellipse(251.002164, 50.240052, 20.953076, 20.953076);
ellipse(259.205293, 61.83758, 20.953076, 20.953076);
ellipse(255.245162, 73.435108, 20.953076, 20.953076);
ellipse(240.253236, 76.263773, 20.953076, 20.953076);
ellipse(243.364768, 79.941038, 20.953076, 20.953076);
ellipse(235.161638, 100.590295, 20.953076, 20.953076);
ellipse(221.584044, 103.41896, 20.953076, 20.953076);
ellipse(195.042575, 99.059134, 20.953076, 20.953076);
ellipse(192.947267, 110.234109, 20.953076, 20.953076);
ellipse(192.248831, 118.615339, 20.953076, 20.953076);
ellipse(195.741011, 124.202826, 20.953076, 20.953076);
ellipse(202.376151, 128.74266, 20.953076, 20.953076);
ellipse(212.154254, 133.282493, 20.953076, 20.953076);
ellipse(222.98001, 139.219198, 20.953076, 20.953076);
ellipse(230.662805, 143.759031, 20.953076, 20.953076);
ellipse(235.551856, 145.155903, 20.953076, 20.953076);
ellipse(249.520574, 150.394172, 20.953076, 20.953076);
ellipse(255.108061, 161.219928, 20.953076, 20.953076);
ellipse(257.552586, 170.99803, 20.953076, 20.953076);
ellipse(259.298676, 178.680825, 20.953076, 20.953076);
ellipse(245.679176, 191.601889, 20.953076, 20.953076);
ellipse(234.85342, 186.36362, 20.953076, 20.953076);
ellipse(224.027664, 178.331607, 20.953076, 20.953076);
ellipse(220.535484, 176.2363, 20.953076, 20.953076);
ellipse(202.725369, 172.74412, 20.953076, 20.953076);
ellipse(215.646433, 173.442556, 20.953076, 20.953076);
ellipse(191.899613, 166.807415, 20.953076, 20.953076);
ellipse(179.327767, 169.251941, 20.953076, 20.953076);
ellipse(164.660614, 163.664454, 20.953076, 20.953076);
ellipse(155.930165, 178.331607, 20.953076, 20.953076);
ellipse(143.707537, 181.474569, 20.953076, 20.953076);
ellipse(141.961448, 198.586248, 20.953076, 20.953076);
ellipse(143.358319, 213.951837, 20.953076, 20.953076);
ellipse(144.405973, 230.015863, 20.953076, 20.953076);
ellipse(147.898153, 247.127542, 20.953076, 20.953076);
ellipse(147.898153, 263.540785, 20.953076, 20.953076);
ellipse(146.850499, 280.652464, 20.953076, 20.953076);
ellipse(145.104409, 296.018054, 20.953076, 20.953076);
ellipse(141.61223, 310.335989, 20.953076, 20.953076);
ellipse(136.723178, 324.304707, 20.953076, 20.953076);
ellipse(130.437255, 339.321078, 20.953076, 20.953076);
ellipse(124.849768, 355.385104, 20.953076, 20.953076);
ellipse(119.611499, 370.750693, 20.953076, 20.953076);
ellipse(114.37323, 385.068629, 20.953076, 20.953076);
ellipse(108.436525, 399.735782, 20.953076, 20.953076);
ellipse(101.452166, 414.402936, 20.953076, 20.953076);
ellipse(96.213897, 428.022435, 20.953076, 20.953076);

//face0201
noStroke();
fill(74,0,126);
triangle(92.9823, -1.187134, 145.581787, -1.485992, 98.062927, 13.158173);
triangle(98.062927, 13.158173, 149.765808, 15.250183, 111.511658, 37.664734);
triangle(111.511658, 37.664734, 154.547546, 29.894348, 121.672913, 60.079285);
triangle(121.672913, 60.079285, 163.812256, 66.355347, 122.569519, 69.045105);
triangle(122.569519, 69.045105, 153.352112, 83.390411, 129.443298, 82.792694);
triangle(129.443298, 82.792694, 153.352112, 83.390411, 134.523926, 95.643677);
triangle(134.523926, 95.643677, 153.053284, 98.931152, 138.707947, 107.000397);
triangle(138.707947, 107.000397, 148.570374, 109.989014, 142.892029, 110.586731);
triangle(148.570374, 109.989014, 138.707947, 107.000397, 153.053284, 98.931152);
triangle(153.053284, 98.931152, 134.523926, 95.643677, 153.352112, 83.390411);
triangle(153.352112, 83.390411, 122.569519, 69.045105, 157.237305, 80.102936);
triangle(157.237305, 80.102936, 163.812256, 66.355347, 162.915649, 77.413208);
triangle(163.812256, 66.355347, 121.672913, 60.079285, 159.927063, 46.032837);
triangle(159.927063, 46.032837, 121.672913, 60.079285, 154.547546, 29.894348);
triangle(154.547546, 29.894348, 111.511658, 37.664734, 149.765808, 15.250183);
triangle(149.765808, 15.250183, 98.062927, 13.158173, 145.581787, -1.485992);
triangle(163.812256, 66.355347, 157.237305, 80.102936, 122.569519, 69.045105);

//face0202
triangle(253.441345, 59.084961, 269.520142, 41.241455, 248.931458, 53.986816);
triangle(248.931458, 53.986816, 249.71582, 40.457123, 244.42157, 49.084747);
triangle(244.42157, 49.084747, 244.42157, 42.417938, 242.264648, 45.555267);
triangle(244.42157, 42.417938, 244.42157, 49.084747, 249.71582, 40.457123);
triangle(249.71582, 40.457123, 248.931458, 53.986816, 269.520142, 41.241455);
triangle(269.520142, 41.241455, 264.029846, 68.889069, 278.539917, 42.025787);
triangle(278.539917, 42.025787, 295.795166, 67.712585, 288.344055, 43.398376);
triangle(288.344055, 43.398376, 303.246338, 62.810516, 303.246338, 44.770935);
triangle(303.246338, 44.770935, 310.893555, 59.477112, 309.128784, 45.751343);
triangle(309.128784, 45.751343, 310.893555, 59.477112, 314.61908, 48.888672);
triangle(314.61908, 48.888672, 310.893555, 59.477112, 315.403442, 55.359406);
triangle(310.893555, 59.477112, 303.246338, 44.770935, 303.246338, 62.810516);
triangle(303.246338, 62.810516, 288.344055, 43.398376, 295.795166, 67.712585);
triangle(295.795166, 67.712585, 278.539917, 42.025787, 286.38324, 75.163727);
triangle(286.38324, 75.163727, 266.774963, 73.595062, 278.539917, 79.673615);
triangle(278.539917, 79.673615, 267.36322, 79.477539, 273.441772, 82.810944);
triangle(273.441772, 82.810944, 267.36322, 79.477539, 270.500549, 83.007019);
triangle(267.36322, 79.477539, 278.539917, 79.673615, 266.774963, 73.595062);
triangle(266.774963, 73.595062, 286.38324, 75.163727, 264.029846, 68.889069);
triangle(264.029846, 68.889069, 269.520142, 41.241455, 257.559082, 64.379181);
triangle(257.559082, 64.379181, 269.520142, 41.241455, 253.441345, 59.084961);
triangle(264.029846, 68.889069, 286.38324, 75.163727, 278.539917, 42.025787);

//face0203
triangle(196.152161, 109.128601, 198.216919, 128.82312, 191.863831, 114.369904);
triangle(207.27002, 103.728485, 198.216919, 128.82312, 196.152161, 109.128601);
triangle(220.61145, 99.916656, 210.28772, 135.493866, 207.27002, 103.728485);
triangle(227.599854, 98.963684, 237.447083, 112.146301, 220.61145, 99.916656);
triangle(234.270569, 99.757813, 237.288269, 104.840271, 227.599854, 98.963684);
triangle(237.447083, 112.146301, 227.599854, 98.963684, 237.288269, 104.840271);
triangle(236.811829, 125.80542, 220.61145, 99.916656, 237.447083, 112.146301);
triangle(235.382385, 136.12915, 219.817322, 139.782166, 236.811829, 125.80542);
triangle(235.223511, 142.641052, 226.646912, 144.546967, 235.382385, 136.12915);
triangle(231.72937, 145.817596, 226.646912, 144.546967, 235.223511, 142.641052);
triangle(219.817322, 139.782166, 235.382385, 136.12915, 226.646912, 144.546967);
triangle(210.28772, 135.493866, 236.811829, 125.80542, 219.817322, 139.782166);
triangle(198.216919, 128.82312, 207.27002, 103.728485, 210.28772, 135.493866);
triangle(191.705017, 123.264191, 191.863831, 114.369904, 198.216919, 128.82312);
triangle(220.61145, 99.916656, 236.811829, 125.80542, 210.28772, 135.493866);

//face0204
triangle(98.5401, 411.355133, 193.445435, 427.035187, 91.185547, 426.629944);
triangle(105.894592, 395.23175, 193.445435, 427.035187, 98.5401, 411.355133);
triangle(115.229187, 369.490906, 198.683716, 393.859497, 105.894592, 395.23175);
triangle(125.978149, 338.658447, 201.128235, 369.763458, 115.229187, 369.490906);
triangle(134.464111, 318.857788, 201.128235, 369.763458, 125.978149, 338.658447);
triangle(140.687195, 299.905731, 210.906311, 337.635406, 134.464111, 318.857788);
triangle(141.818665, 269.921875, 217.890686, 322.968262, 140.687195, 299.905731);
triangle(142.384399, 243.898163, 227.668762, 318.428406, 141.818665, 269.921875);
triangle(140.970032, 224.097504, 237.427551, 181.384659, 142.384399, 243.898163);
triangle(142.950134, 211.085648, 237.427551, 181.384659, 140.970032, 224.097504);
triangle(142.101501, 191.850723, 151.436096, 180.536057, 142.950134, 211.085648);
triangle(143.798706, 182.516129, 151.436096, 180.536057, 142.101501, 191.850723);
triangle(156.52771, 173.464386, 176.045532, 165.544128, 151.436096, 180.536057);
triangle(160.204956, 162.998322, 171.236755, 161.866852, 156.52771, 173.464386);
triangle(165.013733, 159.038208, 171.236755, 161.866852, 160.204956, 162.998322);
triangle(176.045532, 165.544128, 156.52771, 173.464386, 171.236755, 161.866852);
triangle(185.097229, 162.715454, 201.220642, 165.544128, 176.045532, 165.544128);
triangle(192.451782, 160.735413, 201.220642, 165.544128, 185.097229, 162.715454);
triangle(209.423767, 167.241333, 142.950134, 211.085648, 201.220642, 165.544128);
triangle(219.889832, 167.807068, 229.224426, 175.161591, 209.423767, 167.241333);
triangle(237.427551, 181.384659, 142.950134, 211.085648, 229.224426, 175.161591);
triangle(245.064941, 184.779053, 252.136597, 192.69931, 237.427551, 181.384659);
triangle(260.339722, 202.59964, 142.384399, 243.898163, 252.136597, 192.69931);
triangle(267.977112, 206.276917, 233.256287, 318.777649, 260.339722, 202.59964);
triangle(276.180237, 202.882507, 319.513123, 237.759079, 267.977112, 206.276917);
triangle(282.969055, 199.770981, 319.513123, 237.759079, 276.180237, 202.882507);
triangle(284.949097, 197.790909, 325.100586, 228.679413, 282.969055, 199.770981);
triangle(282.40332, 193.265045, 342.21228, 178.741241, 284.949097, 197.790909);
triangle(271.371521, 189.587784, 288.060669, 143.763397, 282.40332, 193.265045);
triangle(261.754089, 184.213318, 288.060669, 143.763397, 271.371521, 189.587784);
triangle(255.531006, 178.555984, 251.85376, 170.635727, 261.754089, 184.213318);
triangle(251.005127, 159.88681, 288.060669, 143.763397, 251.85376, 170.635727);
triangle(249.59082, 149.137878, 280.989014, 136.691742, 251.005127, 159.88681);
triangle(248.459351, 142.066193, 255.248108, 131.317291, 249.59082, 149.137878);
triangle(265.99707, 124.528473, 274.200195, 129.620087, 255.248108, 131.317291);
triangle(280.989014, 136.691742, 255.248108, 131.317291, 274.200195, 129.620087);
triangle(288.060669, 143.763397, 251.005127, 159.88681, 280.989014, 136.691742);
triangle(294.566589, 141.217621, 282.40332, 193.265045, 288.060669, 143.763397);
triangle(298.243835, 133.863068, 348.148987, 164.423309, 294.566589, 141.217621);
triangle(297.395264, 121.416962, 322.570374, 110.66803, 298.243835, 133.863068);
triangle(297.960999, 112.082367, 307.012695, 104.444946, 297.395264, 121.416962);
triangle(301.638245, 105.576416, 307.012695, 104.444946, 297.960999, 112.082367);
triangle(322.570374, 110.66803, 297.395264, 121.416962, 307.012695, 104.444946);
triangle(338.410889, 118.871155, 298.243835, 133.863068, 322.570374, 110.66803);
triangle(347.745483, 125.377075, 352.554199, 135.277405, 338.410889, 118.871155);
triangle(348.148987, 164.423309, 298.243835, 133.863068, 352.554199, 135.277405);
triangle(342.21228, 178.741241, 294.566589, 141.217621, 348.148987, 164.423309);
triangle(339.069275, 195.503708, 284.949097, 197.790909, 342.21228, 178.741241);
triangle(331.037292, 216.456787, 284.949097, 197.790909, 339.069275, 195.503708);
triangle(325.100586, 228.679413, 284.949097, 197.790909, 331.037292, 216.456787);
triangle(319.513123, 237.759079, 282.969055, 199.770981, 325.100586, 228.679413);
triangle(323.005249, 248.934052, 321.957642, 261.50589, 319.513123, 237.759079);
triangle(317.068542, 280.712891, 267.977112, 206.276917, 321.957642, 261.50589);
triangle(314.274841, 299.919861, 260.146057, 328.555725, 317.068542, 280.712891);
triangle(309.385803, 311.094849, 299.607666, 321.920593, 314.274841, 299.919861);
triangle(288.781921, 329.254181, 260.146057, 328.555725, 299.607666, 321.920593);
triangle(277.257751, 333.095581, 260.146057, 328.555725, 288.781921, 329.254181);
triangle(242.335938, 324.714355, 233.256287, 318.777649, 260.146057, 328.555725);
triangle(227.668762, 318.428406, 260.339722, 202.59964, 233.256287, 318.777649);
triangle(217.890686, 322.968262, 141.818665, 269.921875, 227.668762, 318.428406);
triangle(210.906311, 337.635406, 140.687195, 299.905731, 217.890686, 322.968262);
triangle(201.128235, 369.763458, 134.464111, 318.857788, 210.906311, 337.635406);
triangle(198.683716, 393.859497, 115.229187, 369.490906, 201.128235, 369.763458);
triangle(194.842285, 419.70163, 105.894592, 395.23175, 198.683716, 393.859497);
triangle(193.445435, 427.035187, 105.894592, 395.23175, 194.842285, 419.70163);
triangle(142.384399, 243.898163, 260.339722, 202.59964, 227.668762, 318.428406);
triangle(237.427551, 181.384659, 252.136597, 192.69931, 142.384399, 243.898163);
triangle(151.436096, 180.536057, 176.045532, 165.544128, 142.950134, 211.085648);
triangle(201.220642, 165.544128, 142.950134, 211.085648, 176.045532, 165.544128);
triangle(209.423767, 167.241333, 229.224426, 175.161591, 142.950134, 211.085648);
triangle(267.977112, 206.276917, 317.068542, 280.712891, 233.256287, 318.777649);
triangle(319.513123, 237.759079, 321.957642, 261.50589, 267.977112, 206.276917);
triangle(282.40332, 193.265045, 294.566589, 141.217621, 342.21228, 178.741241);
triangle(261.754089, 184.213318, 251.85376, 170.635727, 288.060669, 143.763397);
triangle(249.59082, 149.137878, 255.248108, 131.317291, 280.989014, 136.691742);
triangle(338.410889, 118.871155, 352.554199, 135.277405, 298.243835, 133.863068);
triangle(314.274841, 299.919861, 299.607666, 321.920593, 260.146057, 328.555725);
triangle(260.146057, 328.555725, 233.256287, 318.777649, 317.068542, 280.712891);

//face0205
triangle(297.855896, 91.770599, 306.381042, 90.842133, 299.712891, 95.568939);
triangle(296.167786, 87.887878, 306.381042, 90.842133, 297.855896, 91.770599);
triangle(293.804382, 84.342773, 298.109131, 78.09668, 296.167786, 87.887878);
triangle(294.564026, 79.784821, 298.109131, 78.09668, 293.804382, 84.342773);
triangle(321.658691, 78.012268, 311.698669, 84.089569, 298.109131, 78.09668);
triangle(328.580078, 79.700409, 331.449951, 84.596008, 321.658691, 78.012268);
triangle(331.449951, 81.304138, 331.449951, 84.596008, 328.580078, 79.700409);
triangle(333.138062, 83.751953, 331.449951, 84.596008, 331.449951, 81.304138);
triangle(311.698669, 84.089569, 321.658691, 78.012268, 331.449951, 84.596008);
triangle(309.335266, 85.102448, 298.109131, 78.09668, 311.698669, 84.089569);
triangle(307.731567, 87.381439, 298.109131, 78.09668, 309.335266, 85.102448);
triangle(306.381042, 90.842133, 296.167786, 87.887878, 307.731567, 87.381439);
triangle(305.368164, 95.737732, 299.712891, 95.568939, 306.381042, 90.842133);
triangle(304.270874, 97.594696, 300.725769, 97.510284, 305.368164, 95.737732);
triangle(302.076294, 98.438782, 300.725769, 97.510284, 304.270874, 97.594696);
triangle(299.712891, 95.568939, 305.368164, 95.737732, 300.725769, 97.510284);
triangle(298.109131, 78.09668, 307.731567, 87.381439, 296.167786, 87.887878);

//face0206
triangle(350.235352, 94.820251, 348.209595, 97.521271, 353.189575, 97.43689);
triangle(353.189575, 97.43689, 348.209595, 100.391113, 353.696045, 101.404022);
triangle(353.696045, 101.404022, 348.209595, 100.391113, 351.501465, 103.851807);
triangle(351.501465, 103.851807, 348.209595, 100.391113, 348.884827, 103.767395);
triangle(348.209595, 100.391113, 353.189575, 97.43689, 348.209595, 97.521271);
//face0301
stroke(0,0,255);
strokeWeight(.25);
fill(131,0,222);
triangle(133.703735, 22.045776, 141.350952, -0.699799, 126.252563, -0.895874);
triangle(142.135254, 45.771759, 151.743286, 34.791138, 133.703735, 22.045776);
triangle(149.978516, 67.536896, 158.017944, 60.085754, 142.135254, 45.771759);
triangle(153.900269, 73.615448, 160.763062, 72.63504, 149.978516, 67.536896);
triangle(157.037598, 74.791962, 160.763062, 72.63504, 153.900269, 73.615448);
triangle(158.017944, 60.085754, 149.978516, 67.536896, 160.763062, 72.63504);
triangle(156.645386, 49.69339, 142.135254, 45.771759, 158.017944, 60.085754);
triangle(151.743286, 34.791138, 142.135254, 45.771759, 156.645386, 49.69339);
triangle(145.664795, 14.202484, 133.703735, 22.045776, 151.743286, 34.791138);
triangle(141.350952, -0.699799, 133.703735, 22.045776, 145.664795, 14.202484);

//face0302
triangle(263.321289, 48.580933, 261.574219, 58.904663, 273.168457, 48.739746);
triangle(273.168457, 48.739746, 270.150757, 63.510651, 286.351196, 50.169189);
triangle(286.351196, 50.169189, 291.910034, 63.351837, 296.198364, 50.169189);
triangle(296.198364, 50.169189, 299.057251, 58.110535, 300.010254, 53.663391);
triangle(299.057251, 58.110535, 296.198364, 50.169189, 291.910034, 63.351837);
triangle(291.910034, 63.351837, 286.351196, 50.169189, 281.268677, 68.910767);
triangle(281.268677, 68.910767, 270.150757, 63.510651, 275.86853, 69.228424);
triangle(270.150757, 63.510651, 273.168457, 48.739746, 261.574219, 58.904663);
triangle(261.574219, 58.904663, 263.321289, 48.580933, 256.809326, 54.298706);
triangle(256.809326, 54.298706, 263.321289, 48.580933, 257.126953, 50.010376);
triangle(270.150757, 63.510651, 281.268677, 68.910767, 286.351196, 50.169189);

//face0303
triangle(210.359253, 115.4823, 222.124268, 116.658813, 220.359497, 110.384186);
triangle(220.359497, 110.384186, 225.261597, 111.364594, 224.085083, 109.403748);
triangle(225.261597, 111.364594, 220.359497, 110.384186, 222.124268, 116.658813);
triangle(222.124268, 116.658813, 210.359253, 115.4823, 220.751709, 121.168701);
triangle(220.751709, 121.168701, 214.869141, 127.051178, 222.320313, 126.07077);
triangle(214.869141, 127.051178, 210.359253, 115.4823, 208.006348, 123.913849);
triangle(208.006348, 123.913849, 210.359253, 115.4823, 205.65332, 119.207886);
triangle(210.359253, 115.4823, 214.869141, 127.051178, 220.751709, 121.168701);

//face0304
triangle(96.721436, 426.746674, 188.710815, 427.957062, 104.22583, 411.253723);
triangle(104.22583, 411.253723, 189.194946, 422.631348, 113.182739, 390.677185);
triangle(113.182739, 390.677185, 191.857788, 401.812744, 122.623779, 365.743225);
triangle(122.623779, 365.743225, 200.57251, 354.123535, 140.053345, 320.716919);
triangle(140.053345, 320.716919, 209.287354, 328.463379, 145.863159, 302.076965);
triangle(145.863159, 302.076965, 219.938721, 316.601593, 146.105225, 274.480164);
triangle(146.105225, 274.480164, 219.938721, 316.601593, 149.010132, 252.693237);
triangle(149.010132, 252.693237, 231.074219, 309.339294, 151.188843, 240.589386);
triangle(151.188843, 240.589386, 150.220581, 217.592072, 147.073486, 231.390457);
triangle(150.220581, 217.592072, 178.301514, 192.173965, 159.177368, 201.130829);
triangle(159.177368, 201.130829, 178.301514, 192.173965, 168.860474, 194.352661);
triangle(178.301514, 192.173965, 229.863892, 184.185425, 181.932617, 188.542816);
triangle(181.932617, 188.542816, 201.056763, 173.291962, 182.658813, 177.165192);
triangle(182.658813, 177.165192, 195.246826, 168.450409, 185.07959, 169.660797);
triangle(185.07959, 169.660797, 195.246826, 168.450409, 188.46875, 167.482117);
triangle(195.246826, 168.450409, 182.658813, 177.165192, 201.056763, 173.291962);
triangle(201.056763, 173.291962, 181.932617, 188.542816, 207.834839, 174.50235);
triangle(207.834839, 174.50235, 223.085693, 177.649338, 216.307617, 173.291962);
triangle(223.085693, 177.649338, 207.834839, 174.50235, 229.863892, 184.185425);
triangle(229.863892, 184.185425, 243.662231, 191.689819, 236.884155, 186.848282);
triangle(243.662231, 191.689819, 229.863892, 184.185425, 253.345337, 202.099136);
triangle(267.143799, 213.960907, 296.192993, 251.72493, 272.711548, 213.718826);
triangle(272.711548, 213.718826, 287.236206, 205.972366, 278.763428, 207.908981);
triangle(287.236206, 205.972366, 311.685913, 222.433609, 293.530151, 201.614975);
triangle(293.530151, 201.614975, 316.527466, 199.67836, 294.256348, 196.047211);
triangle(294.256348, 196.047211, 314.59082, 187.816589, 291.109375, 191.9319);
triangle(291.109375, 191.9319, 292.077759, 174.018188, 285.057495, 188.542816);
triangle(285.057495, 188.542816, 283.12085, 176.196884, 276.342651, 185.395813);
triangle(276.342651, 185.395813, 277.311035, 171.113266, 266.175415, 179.343887);
triangle(266.175415, 179.343887, 273.437744, 160.703949, 257.702759, 173.534027);
triangle(257.702759, 173.534027, 273.437744, 160.703949, 255.281982, 162.156403);
triangle(255.281982, 162.156403, 273.437744, 160.703949, 257.702759, 152.473328);
triangle(257.702759, 152.473328, 271.985352, 151.262939, 260.123535, 148.842163);
triangle(260.123535, 148.842163, 272.469482, 134.801697, 256.734497, 141.82193);
triangle(256.734497, 141.82193, 272.469482, 134.801697, 259.639404, 134.559631);
triangle(259.639404, 134.559631, 272.469482, 134.801697, 265.691284, 131.412628);
triangle(272.469482, 134.801697, 273.921875, 147.631775, 276.342651, 141.337769);
triangle(273.921875, 147.631775, 260.123535, 148.842163, 271.985352, 151.262939);
triangle(271.985352, 151.262939, 257.702759, 152.473328, 273.437744, 160.703949);
triangle(273.437744, 160.703949, 266.175415, 179.343887, 277.311035, 171.113266);
triangle(277.311035, 171.113266, 276.342651, 185.395813, 283.12085, 176.196884);
triangle(283.12085, 176.196884, 285.057495, 188.542816, 292.077759, 174.018188);
triangle(292.077759, 174.018188, 317.49585, 182.975037, 296.677124, 164.093018);
triangle(296.677124, 164.093018, 301.276611, 142.548157, 293.530151, 157.799011);
triangle(293.530151, 157.799011, 293.530151, 149.56839, 290.141113, 153.683716);
triangle(293.530151, 149.56839, 293.530151, 157.799011, 301.276611, 142.548157);
triangle(301.276611, 142.548157, 330.083862, 125.602783, 304.907837, 131.654694);
triangle(304.907837, 131.654694, 330.083862, 125.602783, 306.360229, 121.245392);
triangle(306.360229, 121.245392, 313.864624, 114.467224, 307.086426, 115.435547);
triangle(313.864624, 114.467224, 306.360229, 121.245392, 330.083862, 125.602783);
triangle(330.083862, 125.602783, 343.882202, 152.473328, 341.21936, 131.89679);
triangle(341.21936, 131.89679, 343.882202, 152.473328, 344.850464, 138.190765);
triangle(343.882202, 152.473328, 301.276611, 142.548157, 337.104004, 171.597412);
triangle(337.104004, 171.597412, 320.158691, 182.975037, 333.4729, 180.554276);
triangle(333.4729, 180.554276, 324.273926, 184.427505, 330.567993, 184.669586);
triangle(330.567993, 184.669586, 324.273926, 184.427505, 327.905151, 186.12204);
triangle(324.273926, 184.427505, 333.4729, 180.554276, 320.158691, 182.975037);
triangle(320.158691, 182.975037, 337.104004, 171.597412, 317.49585, 182.975037);
triangle(317.49585, 182.975037, 292.077759, 174.018188, 314.59082, 187.816589);
triangle(314.59082, 187.816589, 294.256348, 196.047211, 316.527466, 199.67836);
triangle(316.527466, 199.67836, 293.530151, 201.614975, 316.769531, 209.845596);
triangle(316.769531, 209.845596, 293.530151, 201.614975, 311.685913, 222.433609);
triangle(311.685913, 222.433609, 287.236206, 205.972366, 303.697388, 238.894852);
triangle(303.697388, 238.894852, 272.711548, 213.718826, 298.855835, 245.915085);
triangle(298.855835, 245.915085, 272.711548, 213.718826, 296.192993, 251.72493);
triangle(296.192993, 251.72493, 237.368286, 307.644745, 300.066284, 256.808533);
triangle(300.066284, 256.808533, 316.043335, 257.292725, 308.781006, 252.209091);
triangle(308.781006, 252.209091, 316.043335, 257.292725, 314.833008, 252.935318);
triangle(316.043335, 257.292725, 300.066284, 256.808533, 315.075073, 270.122803);
triangle(315.075073, 270.122803, 300.066284, 256.808533, 310.233521, 279.805878);
triangle(310.233521, 279.805878, 300.066284, 256.808533, 308.296875, 290.699341);
triangle(308.296875, 290.699341, 299.824219, 313.212524, 307.570679, 303.529419);
triangle(299.824219, 313.212524, 264.723022, 321.20105, 289.899048, 321.20105);
triangle(289.899048, 321.20105, 264.723022, 321.20105, 277.311035, 325.07428);
triangle(264.723022, 321.20105, 300.066284, 256.808533, 253.829468, 318.780273);
triangle(253.829468, 318.780273, 237.368286, 307.644745, 244.630615, 315.391205);
triangle(244.630615, 315.391205, 237.368286, 307.644745, 239.789063, 311.76004);
triangle(231.074219, 309.339294, 149.010132, 252.693237, 219.938721, 316.601593);
triangle(219.938721, 316.601593, 145.863159, 302.076965, 209.287354, 328.463379);
triangle(209.287354, 328.463379, 140.053345, 320.716919, 200.57251, 354.123535);
triangle(200.57251, 354.123535, 122.623779, 365.743225, 195.973145, 377.605011);
triangle(195.973145, 377.605011, 122.623779, 365.743225, 191.857788, 401.812744);
triangle(191.857788, 401.812744, 113.182739, 390.677185, 189.194946, 422.631348);
triangle(189.194946, 422.631348, 104.22583, 411.253723, 188.710815, 427.957062);
triangle(151.188843, 240.589386, 178.301514, 192.173965, 150.220581, 217.592072);
triangle(178.301514, 192.173965, 253.345337, 202.099136, 229.863892, 184.185425);
triangle(229.863892, 184.185425, 207.834839, 174.50235, 181.932617, 188.542816);
triangle(272.711548, 213.718826, 303.697388, 238.894852, 287.236206, 205.972366);
triangle(314.59082, 187.816589, 292.077759, 174.018188, 291.109375, 191.9319);
triangle(260.123535, 148.842163, 273.921875, 147.631775, 272.469482, 134.801697);
triangle(317.49585, 182.975037, 337.104004, 171.597412, 296.677124, 164.093018);
triangle(296.677124, 164.093018, 337.104004, 171.597412, 301.276611, 142.548157);
triangle(301.276611, 142.548157, 343.882202, 152.473328, 330.083862, 125.602783);
triangle(237.368286, 307.644745, 253.829468, 318.780273, 300.066284, 256.808533);
triangle(300.066284, 256.808533, 264.723022, 321.20105, 308.296875, 290.699341);
triangle(308.296875, 290.699341, 264.723022, 321.20105, 299.824219, 313.212524);
triangle(253.345337, 202.099136, 178.301514, 192.173965, 151.188843, 240.589386);
triangle(253.345337, 202.099136, 250.741455, 214.637115, 262.544312, 210.813904);
triangle(262.544312, 210.813904, 255.370239, 223.512314, 256.506348, 229.71727);
triangle(235.509155, 295.454468, 235.035889, 294.359985, 231.074219, 309.339294);
triangle(231.074219, 309.339294, 241.47168, 261.514893, 241.423828, 259.503967);
triangle(255.370239, 223.512314, 262.544312, 210.813904, 254.44812, 218.476074);
triangle(254.44812, 218.476074, 262.544312, 210.813904, 250.887085, 214.787888);
triangle(250.887085, 214.787888, 262.544312, 210.813904, 250.741455, 214.637115);
triangle(241.47168, 261.514893, 238.227417, 281.792938, 241.702759, 271.22226);
triangle(238.227417, 281.792938, 241.47168, 261.514893, 236.996826, 285.536255);
triangle(236.996826, 285.536255, 231.074219, 309.339294, 235.643799, 291.624634);
triangle(235.643799, 291.624634, 231.074219, 309.339294, 235.035889, 294.359985);
triangle(231.074219, 309.339294, 236.996826, 285.536255, 241.47168, 261.514893);
triangle(262.544312, 210.813904, 256.970459, 232.251846, 267.143799, 213.960907);
triangle(267.143799, 213.960907, 257.053711, 234.338821, 257.357056, 244.753235);
triangle(239.236206, 301.767731, 238.908569, 301.720673, 237.368286, 307.644745);
triangle(257.053711, 234.338821, 267.143799, 213.960907, 256.997192, 232.397934);
triangle(256.997192, 232.397934, 267.143799, 213.960907, 256.970459, 232.251846);
triangle(237.368286, 307.644745, 238.173218, 301.615051, 231.074219, 309.339294);
triangle(231.074219, 309.339294, 238.173218, 301.615051, 235.509155, 295.454468);
triangle(256.506348, 229.71727, 256.970459, 232.251846, 262.544312, 210.813904);
triangle(238.908569, 301.720673, 238.173218, 301.615051, 237.368286, 307.644745);
triangle(231.074219, 309.339294, 241.423828, 259.503967, 151.188843, 240.589386);
triangle(151.188843, 240.589386, 248.957764, 212.789688, 253.345337, 202.099136);
triangle(253.345337, 202.099136, 248.957764, 212.789688, 250.741455, 214.637115);
triangle(248.957764, 212.789688, 151.188843, 240.589386, 244.644043, 219.652573);
triangle(244.644043, 219.652573, 151.188843, 240.589386, 244.055786, 228.476288);
triangle(244.055786, 228.476288, 151.188843, 240.589386, 244.117065, 229.948349);
triangle(244.117065, 229.948349, 243.957275, 240.525681, 244.447876, 237.888245);
triangle(243.957275, 240.525681, 151.188843, 240.589386, 242.062744, 250.70871);
triangle(242.062744, 250.70871, 151.188843, 240.589386, 241.310547, 254.751328);
triangle(241.310547, 254.751328, 151.188843, 240.589386, 241.423828, 259.503967);
triangle(151.188843, 240.589386, 243.957275, 240.525681, 244.117065, 229.948349);
triangle(237.368286, 307.644745, 240.650513, 301.970917, 239.236206, 301.767731);
triangle(257.357056, 244.753235, 296.192993, 251.72493, 267.143799, 213.960907);
triangle(296.192993, 251.72493, 240.650513, 301.970917, 237.368286, 307.644745);
triangle(257.358887, 244.815201, 296.192993, 251.72493, 257.357056, 244.753235);
triangle(257.585449, 252.594421, 296.192993, 251.72493, 257.358887, 244.815201);
triangle(256.534546, 254.823608, 296.192993, 251.72493, 257.585449, 252.594421);
triangle(251.812988, 264.838928, 296.192993, 251.72493, 256.534546, 254.823608);
triangle(251.114746, 266.32019, 296.192993, 251.72493, 251.812988, 264.838928);
triangle(248.302612, 274.590942, 248.173462, 285.536255, 251.114746, 266.32019);
triangle(247.78125, 276.124329, 248.173462, 285.536255, 248.302612, 274.590942);
triangle(245.820435, 292.39917, 296.192993, 251.72493, 248.173462, 285.536255);
triangle(244.665527, 294.891357, 296.192993, 251.72493, 245.820435, 292.39917);
triangle(242.094971, 300.438538, 296.192993, 251.72493, 244.665527, 294.891357);
triangle(240.650513, 301.970917, 296.192993, 251.72493, 242.094971, 300.438538);
triangle(251.114746, 266.32019, 248.173462, 285.536255, 296.192993, 251.72493);