STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228066
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2560 · P5120

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/60987157?noj=FRM60987157-27DC" width="1" height="1"></div>

559555_feignIGF.swf

This is the info page for
Flash #241417

(Click the ID number above for more basic data on this flash file.)


Text
ZERO / NINE

ONE / NINE

TWO / NINE

THREE / NINE

FOUR / NINE

FIVE / NINE

SIX / NINE

SEVEN / NINE

EIGHT / NINE

NINE / NINE

GOODNIGHT, DARLING.

BEGIN NEW GAME

BEGIN NEW GAME

ActionScript [AS3]

Section 1
//Symbol13_5 (feignIGF_fla.Symbol13_5) package feignIGF_fla { import flash.display.*; public dynamic class Symbol13_5 extends MovieClip { public function Symbol13_5(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package feignIGF_fla
Section 2
//Symbol2_3 (feignIGF_fla.Symbol2_3) package feignIGF_fla { import flash.display.*; public dynamic class Symbol2_3 extends MovieClip { public var cntr2:MovieClip; public var cntr:MovieClip; public var ttl:MovieClip; public function Symbol2_3(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package feignIGF_fla
Section 3
//Symbol3_4 (feignIGF_fla.Symbol3_4) package feignIGF_fla { import flash.display.*; public dynamic class Symbol3_4 extends MovieClip { public function Symbol3_4(){ addFrameScript(0, frame1); } function frame1(){ stop(); } } }//package feignIGF_fla
Section 4
//testModel (org.ascollada.testModel) package org.ascollada { import org.papervision3d.core.proto.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.core.geom.*; public class testModel extends TriangleMesh3D { private var fa:Array; private var ve:Array; public function testModel(_arg1:MaterialObject3D, _arg2:uint=0){ super(_arg1, new Array(), new Array()); ve = this.geometry.vertices; fa = this.geometry.faces; switch (_arg2){ case 0: v(0.644, 0.248, -0.963); v(1.286, -2.664, -0.796); v(-1.302, -2.664, -1.028); v(1.019, 0.049, 0.268); v(0.821, -2.681, 0.295); v(-1.151, -3.016, 0.294); v(-0.965, -0.194, 0.663); v(0.694, -1.844, -0.51); v(-0.716, -1.896, -0.536); v(0.873, 0.921, 0.037); v(1.149, 1.022, -0.411); v(-1.028, 0.217, -0.572); v(1.652, -0.136, -0.304); v(1.623, -0.05, -1.099); v(1.38, 0.608, -0.723); v(1.394, 0.57, -0.251); v(-1.693, 0.192, -0.332); v(-1.524, 0.096, 0.268); v(-1.336, 0.728, 0.184); v(-1.441, 0.85, -0.109); v(0.663, -1.748, 0.101); v(-0.772, -1.503, 0.26); v(-0.86, 1.042, -0.215); v(-0.679, 0.876, 0.314); v(0.42, 0.791, 0.408); v(-0.114, 0.67, 0.424); v(0.598, 1.192, -0.238); v(-0.404, 1.2, -0.193); v(0.791, -0.981, 0.78); v(-0.678, -1.248, 0.898); v(-0.495, -0.254, 0.631); v(0.579, -0.265, 0.572); v(1.026, -0.859, 0.068); v(-0.988, -0.839, 0.178); v(-0.011, -1.896, -0.536); v(-1.185, -1.894, 0.174); v(-1.818, -1.9, 0.287); v(-1.713, -1.973, -0.313); v(-1.24, -1.946, -0.542); v(1.272, -1.462, -1.899); v(1.551, -1.791, -1.862); v(1.789, -1.72, -1.29); v(1.089, -1.701, -1.331); v(1.487, -3.466, -1.859); v(1.678, -3.45, -1.995); v(1.708, -3.369, -1.471); v(1.51, -3.366, -1.455); v(-1.514, -3.398, 0.818); v(-1.785, -3.332, 0.826); v(-1.794, -3.602, 0.369); v(-1.302, -3.622, 0.058); v(0.994, -3.288, 0.374); v(-1.302, -3.962, -1.213); v(1.311, -3.725, -0.678); v(0, -3.798, 0.058); v(0, -3.798, -1.462); v(0.674, -5.774, 0.899); v(0.068, -5.724, 1.113); v(0.153, -6.176, 0.287); v(0.745, -6.181, 0.287); v(-0.8, -6.114, -0.405); v(-0.686, -6.186, -1.39); v(0.016, -6.109, -0.405); v(-0.533, -8.689, -1.551); v(-0.47, -8.271, -2.082); v(-0.07, -8.835, -1.631); v(0.555, -8.762, 1.112); v(0.12, -8.758, 1.112); v(0.454, -8.322, 0.612); v(1.057, -4.798, -0.526); v(-0.9, -4.798, -1.122); v(0.207, -4.953, -0.513); v(0.008, -4.953, -0.875); v(0.109, -6.951, -1.803); v(0.01, -7.068, 0.106); v(-0.215, -8.267, -2.082); v(0.18, -8.317, 0.612); v(-0.756, -6.955, -1.803); v(0.875, -7.072, 0.106); v(-0.316, 1.422, 0.037); v(0.35, 1.416, 0.001); v(-0.541, 1.256, 0.522); v(-0.161, 1.045, 0.607); v(-0.372, 2.072, 1.613); v(-0.928, 2.207, 1.272); v(-0.19, 2.594, 1.523); v(-0.747, 2.729, 1.182); v(-0.811, 1.416, 0.724); v(-0.254, 1.167, 1.065); v(-0.487, 2.996, 0.698); v(0.203, 2.829, 1.12); v(-0.215, 2.889, 0.24); v(0.341, 2.568, 0.529); v(-0.181, 2.116, 0.017); v(0.236, 1.961, 0.221); v(-0.871, 2.62, 0.642); v(0.286, 2.34, 1.351); v(0.223, 1.644, 0.97); v(-0.759, 1.882, 0.368); v(-0.71, 1.14, 1.101); v(-0.137, 3.059, 0.969); v(-0.622, 1.57, 1.498); v(-0.9, 1.637, 1.328); v(-1.275, -4.789, 0.623); v(-1.515, -4.351, 1.014); v(-1.628, -4.662, 0.39); v(-1.52, -3.641, 0.479); v(1.166, -4.575, -2.035); v(1.611, -4.131, -2.189); v(1.646, -4.231, -1.524); v(1.183, -4.457, -1.746); v(0.592, -9.178, 0.51); v(0.55, -9.203, 1.331); v(0.115, -9.284, 1.331); v(0.175, -9.173, 0.517); v(-0.607, -8.905, -2.083); v(-0.21, -8.901, -2.296); v(-0.065, -9.21, -1.75); v(-0.528, -9.214, -1.75); v(-0.776, -9.124, -0.648); v(-0.771, -9.215, -0.648); v(-0.065, -9.211, -0.318); v(-0.07, -8.964, -0.317); v(0.12, -9.14, 2.239); v(0.115, -9.301, 2.239); v(0.789, -9.305, 1.908); v(0.793, -9.214, 1.908); v(-1.265, -3.89, 0.721); v(1.293, -3.775, -1.601); v(1.389, -4.516, -2.112); v(-0.082, -6.245, -1.187); f2(22, 27, 11); f2(29, 30, 6); f2(33, 6, 11); f2(8, 34, 2); f2(34, 7, 1); f2(34, 8, 11); f2(54, 51, 4); f2(53, 55, 1); f2(55, 52, 2); f2(69, 53, 51); f2(52, 70, 50); f2(55, 71, 54); f2(61, 77, 60); f2(68, 78, 66); f2(91, 95, 89); f2(95, 84, 86); f2(98, 93, 79); f2(89, 100, 91); f2(83, 101, 88); f2(81, 99, 87); f2(103, 104, 105); f2(106, 105, 49); f2(25, 24, 82); f2(27, 81, 79); f2(58, 74, 57); f2(39, 13, 40); f2(47, 127, 106); f2(103, 127, 104); f2(128, 46, 43); f2(128, 110, 109); f2(129, 107, 43); f2(129, 108, 109); f2(109, 110, 129); f2(110, 107, 129); f2(47, 106, 35); f2(106, 38, 35); f2(38, 106, 37); f2(106, 49, 37); f2(56, 51, 54); f2(56, 54, 57); f2(9, 15, 10); f2(15, 14, 10); f2(12, 15, 3); f2(15, 9, 3); f2(13, 14, 12); f2(14, 15, 12); f2(23, 18, 6); f2(18, 17, 6); f2(19, 18, 22); f2(18, 23, 22); f2(16, 19, 11); f2(19, 22, 11); f2(16, 17, 18); f2(16, 18, 19); f2(4, 20, 21); f2(4, 21, 5); f2(27, 0, 11); f2(26, 0, 27); f2(28, 29, 20); f2(29, 21, 20); f2(30, 31, 25); f2(31, 24, 25); f2(28, 31, 30); f2(28, 30, 29); f2(36, 35, 6); f2(36, 6, 17); f2(37, 36, 17); f2(37, 17, 16); f2(11, 38, 16); f2(38, 37, 16); f2(6, 35, 38); f2(6, 38, 11); f2(12, 41, 13); f2(41, 40, 13); f2(3, 42, 12); f2(42, 41, 12); f2(42, 0, 39); f2(3, 0, 42); f2(44, 43, 40); f2(43, 39, 40); f2(45, 44, 40); f2(45, 40, 41); f2(42, 46, 41); f2(46, 45, 41); f2(39, 43, 42); f2(43, 46, 42); f2(48, 47, 36); f2(47, 35, 36); f2(37, 49, 36); f2(49, 48, 36); f2(5, 2, 50); f2(2, 52, 50); f2(4, 51, 1); f2(51, 53, 1); f2(50, 60, 54); f2(60, 62, 54); f2(60, 63, 62); f2(63, 65, 62); f2(67, 66, 56); f2(67, 56, 57); f2(10, 26, 9); f2(26, 24, 9); f2(25, 27, 23); f2(27, 22, 23); f2(24, 26, 80); f2(24, 80, 82); f2(26, 27, 80); f2(27, 79, 80); f2(86, 84, 85); f2(84, 83, 85); f2(92, 94, 91); f2(94, 93, 91); f2(48, 104, 127); f2(48, 127, 47); f2(105, 104, 49); f2(104, 48, 49); f2(44, 108, 43); f2(108, 129, 43); f2(45, 109, 44); f2(109, 108, 44); f2(45, 46, 128); f2(45, 128, 109); f2(107, 110, 128); f2(107, 128, 43); f2(112, 111, 66); f2(111, 68, 66); f2(76, 114, 67); f2(114, 113, 67); f2(111, 114, 68); f2(114, 76, 68); f2(111, 112, 114); f2(112, 113, 114); f2(75, 116, 64); f2(116, 115, 64); f2(117, 116, 65); f2(116, 75, 65); f2(64, 115, 63); f2(115, 118, 63); f2(116, 117, 115); f2(117, 118, 115); f2(120, 119, 63); f2(120, 63, 118); f2(121, 120, 117); f2(120, 118, 117); f2(65, 122, 121); f2(65, 121, 117); f2(63, 119, 65); f2(119, 122, 65); f2(120, 121, 119); f2(121, 122, 119); f2(124, 123, 113); f2(123, 67, 113); f2(112, 125, 113); f2(125, 124, 113); f2(66, 126, 112); f2(126, 125, 112); f2(123, 126, 67); f2(126, 66, 67); f2(123, 124, 126); f2(124, 125, 126); f2(105, 106, 127); f2(105, 127, 103); f2(88, 99, 81); f2(88, 81, 82); f2(99, 102, 87); f2(102, 84, 87); f2(83, 84, 102); f2(83, 102, 101); f2(88, 101, 99); f2(101, 102, 99); f2(91, 100, 92); f2(100, 90, 92); f2(86, 85, 100); f2(85, 90, 100); f2(80, 94, 97); f2(94, 96, 97); f2(83, 88, 97); f2(83, 97, 96); f2(90, 85, 96); f2(85, 83, 96); f2(90, 96, 92); f2(96, 94, 92); f2(84, 95, 98); f2(84, 98, 87); f2(91, 93, 95); f2(93, 98, 95); f2(79, 93, 80); f2(93, 94, 80); f2(95, 86, 89); f2(86, 100, 89); f2(82, 80, 97); f2(82, 97, 88); f2(81, 87, 98); f2(81, 98, 79); f2(82, 81, 25); f2(81, 27, 25); f2(66, 78, 56); f2(78, 59, 56); f2(60, 77, 63); f2(77, 64, 63); f2(76, 74, 68); f2(74, 78, 68); f2(58, 59, 74); f2(59, 78, 74); f2(67, 57, 74); f2(67, 74, 76); f2(65, 75, 73); f2(73, 77, 61); f2(75, 64, 73); f2(64, 77, 73); f2(62, 72, 54); f2(72, 55, 54); f2(54, 71, 57); f2(71, 58, 57); f2(61, 70, 72); f2(52, 55, 70); f2(55, 72, 70); f2(50, 70, 60); f2(70, 61, 60); f2(51, 56, 69); f2(56, 59, 69); f2(53, 69, 55); f2(69, 71, 55); f2(59, 58, 71); f2(59, 71, 69); f2(4, 5, 54); f2(5, 50, 54); f2(21, 29, 33); f2(29, 6, 33); f2(28, 20, 32); f2(20, 7, 32); f2(11, 0, 34); f2(0, 7, 34); f2(32, 0, 3); f2(7, 0, 32); f2(11, 8, 33); f2(8, 21, 33); f2(31, 28, 32); f2(31, 32, 3); f2(9, 24, 3); f2(24, 31, 3); f2(23, 6, 30); f2(23, 30, 25); f2(39, 0, 13); f2(0, 14, 13); f2(26, 10, 14); f2(14, 0, 26); f2(2, 5, 8); f2(5, 21, 8); f2(1, 7, 4); f2(7, 20, 4); f2(34, 1, 55); f2(34, 55, 2); f2(73, 130, 65); f2(130, 62, 65); f2(130, 73, 61); f2(72, 62, 130); f2(72, 130, 61); x = 0; y = 25; z = 0; rotationX = 0; rotationY = 70; rotationZ = 0; break; case 1: v(1.39, -3.108, -1.332); v(-1.302, -3.108, -1.332); v(1.217, -2.875, 0.279); v(-1.151, -2.875, 0.279); v(0.694, -1.896, -1.092); v(-0.716, -1.896, -1.092); v(0.828, -0.209, 0.788); v(0.828, 0.146, 0.252); v(1.665, -0.958, 1.188); v(1.665, -0.958, 0.632); v(1.396, -0.258, 0.789); v(1.398, -0.484, 1.038); v(-1.676, -0.958, 0.632); v(-1.676, -0.958, 1.188); v(-1.2, -0.477, 1.038); v(-1.212, -0.348, 0.789); v(0.809, -2.371, 0.072); v(-0.772, -2.371, 0.072); v(-0.706, 0.146, 0.456); v(-0.706, -0.209, 0.788); v(0.061, -0.654, 0.858); v(0.51, 0.278, 0.715); v(-0.361, 0.346, 0.944); v(0.761, -2.298, 0.704); v(-0.724, -2.298, 0.704); v(-1, -0.947, 0.959); v(1, -0.947, 0.959); v(1, -0.647, -0.11); v(-1, -0.647, -0.11); v(-0.011, -1.896, -1.092); v(-1.177, -2.407, 1.784); v(-1.722, -2.179, 1.865); v(-1.676, -3.109, 1.827); v(-1.192, -3.109, 1.621); v(1.199, -2.874, 1.539); v(1.797, -3.085, 1.745); v(1.556, -2.607, 2.17); v(1.174, -2.713, 2.09); v(0.628, -3.409, 2.579); v(0.619, -3.387, 2.524); v(0.803, -3.024, 2.86); v(0.807, -3.032, 2.572); v(-0.288, -2.678, 2.532); v(-0.421, -2.675, 2.768); v(-0.483, -3.202, 2.74); v(-0.305, -3.095, 2.529); v(-1.302, -3.172, -0.281); v(1.39, -3.172, -0.281); v(-1.302, -3.821, -1.213); v(1.39, -3.821, -1.213); v(0, -3.798, 0.058); v(0, -3.798, -1.272); v(1.713, -3.059, 2.083); v(0.946, -3.054, 2.083); v(-1.914, -3.059, 2.083); v(-1.099, -3.054, 2.083); v(-0.533, -5.257, 0.532); v(-0.47, -4.827, -0.605); v(-0.07, -5.253, 0.532); v(0.555, -5.257, 0.532); v(0.12, -5.253, 0.532); v(0.454, -4.827, -0.605); v(0.917, -4.453, -0.282); v(-0.9, -4.453, -0.282); v(0.021, -4.609, -0.282); v(-0.514, -3.946, 1.277); v(0.444, -3.946, 1.277); v(-0.215, -4.823, -0.605); v(0.18, -4.823, -0.605); v(-1.711, -3.951, 1.277); v(1.685, -3.951, 1.277); v(-0.18, 0.232, 1.65); v(0.406, 0.302, 1.406); v(0.67, 0.207, 1.242); v(1.156, -0.575, 2.144); v(0.608, -0.952, 2.112); v(1.091, -0.526, 2.698); v(0.542, -0.904, 2.667); v(0.253, -0.369, 1.295); v(0.802, 0.008, 1.327); v(0.178, -0.551, 3.008); v(0.857, -0.084, 3.047); v(-0.029, -0.089, 2.853); v(0.52, 0.289, 2.884); v(-0.223, 0.242, 2.274); v(0.325, 0.619, 2.306); v(0.013, -0.756, 2.536); v(1.154, 0.029, 2.602); v(0.875, 0.375, 1.763); v(-0.093, -0.291, 1.708); v(0.81, -0.454, 1.175); v(0.543, -0.352, 3.109); v(1.005, -0.603, 1.592); v(0.73, -0.792, 1.576); v(0.504, -3.246, 2.951); v(0.132, -2.909, 3.009); v(-0.001, -3.487, 3.058); v(0.531, -3.556, 2.971); v(-0.422, -3.382, 2.512); v(-0.023, -3.511, 2.809); v(0.163, -2.955, 2.797); v(-0.249, -3.122, 2.508); v(0.592, -5.722, -0.008); v(0.684, -6.248, 0.604); v(0.249, -6.244, 0.604); v(0.175, -5.717, -0.001); v(-0.607, -5.722, 0.212); v(-0.21, -5.717, -0.002); v(-0.142, -6.244, 0.604); v(-0.669, -6.248, 0.604); v(-0.84, -6.035, 0.99); v(-0.835, -6.126, 0.989); v(-0.267, -6.121, 1.32); v(-0.272, -5.875, 1.32); v(0.307, -5.873, 1.32); v(0.302, -6.12, 1.32); v(0.845, -6.124, 0.99); v(0.85, -6.033, 0.99); v(-1.78, -4.1, 2.495); v(1.573, -4.1, 2.495); v(-1.141, -4.096, 2.495); v(0.972, -4.096, 2.495); v(0.739, -5.922, 0.722); v(0.185, -5.84, 0.887); v(-0.717, -5.923, 0.722); v(-0.175, -5.841, 0.887); v(0, -0.461, -0.419); f2(4, 0, 29); f2(51, 48, 1); f2(64, 51, 50); f2(82, 86, 80); f2(86, 75, 77); f2(87, 83, 81); f2(89, 84, 71); f2(80, 91, 82); f2(93, 75, 78); f2(0, 49, 51); f2(1, 5, 29); f2(3, 46, 50); f2(118, 54, 69); f2(52, 119, 70); f2(120, 67, 65); f2(120, 58, 67); f2(121, 66, 68); f2(60, 121, 68); f2(18, 126, 28); f2(14, 13, 25); f2(25, 26, 20); f2(39, 38, 34); f2(39, 34, 35); f2(3, 1, 46); f2(47, 0, 2); f2(7, 21, 6); f2(20, 22, 19); f2(22, 18, 19); f2(21, 72, 73); f2(39, 99, 38); f2(99, 98, 38); f2(102, 61, 59); f2(68, 105, 60); f2(107, 67, 58); f2(57, 106, 56); f2(71, 84, 85); f2(20, 78, 89); f2(50, 65, 64); f2(50, 64, 66); f2(5, 17, 28); f2(27, 16, 4); f2(4, 29, 126); f2(4, 126, 27); f2(9, 27, 10); f2(27, 7, 10); f2(5, 28, 126); f2(5, 126, 29); f2(12, 15, 28); f2(15, 18, 28); f2(8, 11, 26); f2(11, 6, 26); f2(27, 34, 26); f2(34, 37, 26); f2(27, 26, 16); f2(26, 23, 16); f2(30, 33, 25); f2(33, 28, 25); f2(24, 25, 17); f2(25, 28, 17); f2(21, 20, 6); f2(20, 26, 6); f2(22, 20, 89); f2(22, 89, 71); f2(21, 73, 78); f2(21, 78, 20); f2(16, 0, 4); f2(2, 0, 16); f2(3, 17, 1); f2(17, 5, 1); f2(14, 25, 19); f2(25, 20, 19); f2(49, 62, 51); f2(62, 64, 51); f2(52, 70, 47); f2(70, 62, 47); f2(63, 69, 46); f2(69, 54, 46); f2(48, 51, 63); f2(51, 64, 63); f2(67, 57, 65); f2(57, 69, 65); f2(68, 66, 61); f2(66, 70, 61); f2(73, 72, 79); f2(72, 88, 79); f2(82, 84, 86); f2(84, 89, 86); f2(86, 89, 75); f2(89, 78, 75); f2(79, 88, 74); f2(88, 87, 74); f2(83, 87, 85); f2(87, 88, 85); f2(75, 93, 92); f2(75, 92, 74); f2(114, 115, 117); f2(115, 116, 117); f2(103, 116, 104); f2(116, 115, 104); f2(111, 112, 110); f2(112, 113, 110); f2(112, 111, 108); f2(111, 109, 108); f2(107, 108, 106); f2(108, 109, 106); f2(67, 107, 57); f2(107, 106, 57); f2(102, 103, 104); f2(102, 104, 105); f2(102, 105, 61); f2(105, 68, 61); f2(98, 99, 101); f2(99, 100, 101); f2(98, 101, 38); f2(101, 41, 38); f2(101, 100, 41); f2(100, 40, 41); f2(40, 100, 39); f2(100, 99, 39); f2(95, 96, 94); f2(96, 97, 94); f2(42, 94, 45); f2(94, 97, 45); f2(97, 96, 45); f2(96, 44, 45); f2(96, 95, 44); f2(95, 43, 44); f2(43, 95, 42); f2(95, 94, 42); f2(85, 84, 83); f2(84, 82, 83); f2(77, 75, 76); f2(75, 74, 76); f2(21, 22, 72); f2(22, 71, 72); f2(54, 55, 46); f2(55, 50, 46); f2(52, 47, 53); f2(47, 50, 53); f2(42, 45, 30); f2(45, 33, 30); f2(45, 44, 33); f2(44, 32, 33); f2(44, 43, 32); f2(43, 31, 32); f2(42, 30, 43); f2(30, 31, 43); f2(34, 38, 37); f2(38, 41, 37); f2(41, 40, 37); f2(40, 36, 37); f2(40, 39, 36); f2(39, 35, 36); f2(26, 37, 8); f2(37, 36, 8); f2(36, 35, 8); f2(35, 9, 8); f2(27, 9, 34); f2(9, 35, 34); f2(28, 33, 12); f2(33, 32, 12); f2(32, 31, 12); f2(31, 13, 12); f2(31, 30, 13); f2(30, 25, 13); f2(23, 26, 24); f2(26, 25, 24); f2(23, 24, 16); f2(24, 17, 16); f2(2, 16, 3); f2(16, 17, 3); f2(13, 14, 12); f2(14, 15, 12); f2(14, 19, 15); f2(19, 18, 15); f2(10, 11, 9); f2(11, 8, 9); f2(11, 10, 6); f2(10, 7, 6); f2(70, 66, 62); f2(66, 64, 62); f2(69, 63, 65); f2(63, 64, 65); f2(27, 126, 7); f2(126, 21, 7); f2(21, 126, 18); f2(21, 18, 22); f2(119, 59, 70); f2(59, 61, 70); f2(57, 56, 69); f2(56, 118, 69); f2(108, 125, 112); f2(125, 113, 112); f2(109, 111, 124); f2(111, 110, 124); f2(56, 124, 125); f2(56, 125, 58); f2(110, 113, 125); f2(110, 125, 124); f2(104, 115, 123); f2(115, 114, 123); f2(103, 122, 116); f2(122, 117, 116); f2(117, 122, 123); f2(117, 123, 114); f2(59, 60, 123); f2(59, 123, 122); f2(54, 118, 55); f2(118, 120, 55); f2(56, 58, 120); f2(56, 120, 118); f2(59, 119, 121); f2(59, 121, 60); f2(52, 53, 119); f2(53, 121, 119); f2(74, 92, 79); f2(92, 90, 79); f2(78, 90, 93); f2(90, 92, 93); f2(81, 76, 87); f2(76, 74, 87); f2(82, 91, 83); f2(91, 81, 83); f2(86, 77, 80); f2(77, 91, 80); f2(77, 76, 91); f2(76, 81, 91); f2(120, 65, 55); f2(65, 50, 55); f2(121, 53, 66); f2(53, 50, 66); f2(124, 56, 106); f2(124, 106, 109); f2(125, 108, 107); f2(125, 107, 58); f2(123, 60, 105); f2(123, 105, 104); f2(122, 103, 102); f2(122, 102, 59); f2(79, 90, 78); f2(79, 78, 73); f2(88, 72, 85); f2(72, 71, 85); f2(47, 2, 50); f2(2, 3, 50); f2(62, 49, 47); f2(49, 0, 47); f2(63, 46, 48); f2(46, 1, 48); f2(51, 1, 29); f2(29, 0, 51); x = 0; y = 3; z = 0; rotationX = 0; rotationY = 70; rotationZ = 0; break; case 3: v(1.39, -3.413, -1.332); v(-1.302, -3.413, -1.332); v(1.298, -1.366, 0.415); v(1.217, -3.211, 0.046); v(-1.151, -3.211, 0.046); v(-0.868, -1.418, 0.335); v(0.694, -2.45, -0.78); v(-0.716, -2.45, -0.78); v(0.828, -0.573, 0.104); v(1, -0.757, -0.794); v(1.665, -1.648, -0.129); v(1.396, -0.983, -0.432); v(1.398, -0.983, 0.008); v(-1.47, -1.382, -0.059); v(-1.2, -0.933, 0.347); v(0.809, -2.674, 0.42); v(-0.772, -2.674, 0.42); v(-1, -0.714, -0.553); v(-0.706, -0.53, 0.371); v(0.179, -0.814, 0.124); v(-0.114, -0.814, 0.124); v(0.761, -2.146, 1.095); v(-0.724, -2.146, 1.095); v(-0.529, -1.269, 0.616); v(0.547, -1.269, 0.616); v(1.027, -0.826, -0.138); v(-0.991, -0.826, -0.138); v(-0.011, -2.119, -0.78); v(-0.673, -3.521, 1.284); v(-0.967, -3.232, 1.518); v(-1.269, -3.184, 1.356); v(-1.185, -3.544, 0.849); v(1.223, -3.544, 0.57); v(1.306, -3.138, 1.021); v(1.023, -3.004, 1.137); v(0.732, -3.354, 0.918); v(0.401, -4.644, 2.276); v(0.557, -4.489, 2.498); v(0.063, -4.301, 2.436); v(0.028, -4.47, 2.206); v(-0.2, -4.484, 2.33); v(-0.268, -4.389, 2.574); v(-0.742, -4.626, 2.533); v(-0.557, -4.699, 2.313); v(-1.302, -3.482, -0.091); v(1.39, -3.482, -0.091); v(-1.302, -4.127, -1.213); v(1.419, -4.45, -0.906); v(0, -3.798, 0.058); v(0, -4.103, -1.272); v(0.84, -5.023, 2.682); v(0.074, -4.373, 2.406); v(-0.794, -5.036, 2.689); v(0.022, -4.373, 2.406); v(-1.13, -5.395, -0.383); v(-1.04, -4.779, -0.168); v(-0.67, -5.394, -0.437); v(1.01, -5.381, -0.387); v(0.578, -5.39, -0.438); v(0.871, -4.767, -0.182); v(0.917, -4.69, -0.529); v(-0.9, -4.69, -0.529); v(0.021, -4.845, -0.529); v(0.039, -4.919, 1.609); v(-0.786, -4.779, -0.195); v(0.598, -4.773, -0.212); v(-1.047, -4.926, 1.608); v(1.18, -4.914, 1.602); v(-0.408, 0.021, -0.34); v(0.416, 0.02, -0.345); v(-0.252, -0.659, 0.456); v(0.415, -0.659, 0.456); v(0.333, -0.249, 1.867); v(-0.333, -0.249, 1.867); v(0.333, 0.161, 2.034); v(-0.333, 0.161, 2.034); v(-0.333, -0.648, 0.881); v(0.333, -0.648, 0.881); v(-0.418, 0.701, 1.76); v(0.407, 0.701, 1.76); v(-0.333, 0.812, 1.232); v(0.333, 0.812, 1.232); v(-0.333, 0.446, 0.669); v(0.333, 0.446, 0.669); v(-0.692, 0.26, 1.608); v(0.694, 0.26, 1.608); v(0.622, -0.151, 0.851); v(-0.554, -0.151, 0.851); v(0, -0.94, 0.792); v(0, 0.709, 1.872); v(0.167, -0.699, 1.555); v(-0.167, -0.699, 1.555); v(-0.232, -5.486, 2.377); v(-0.156, -4.996, 2.77); v(-0.71, -5.208, 2.807); v(-0.476, -5.681, 2.384); v(0.356, -5.52, 2.567); v(0.531, -5.037, 2.837); v(-0.019, -4.843, 2.779); v(0.1, -5.36, 2.489); v(1.086, -4.591, -0.808); v(1.12, -4.977, -1.298); v(0.688, -4.986, -1.349); v(0.672, -4.608, -0.856); v(-1.255, -4.822, -0.778); v(-0.863, -4.609, -0.838); v(-0.776, -4.983, -1.346); v(-1.236, -4.984, -1.292); v(-1.561, -5.31, -1.942); v(-1.569, -5.214, -2.05); v(-0.863, -5.109, -2.114); v(-0.864, -5.315, -2.088); v(0.805, -5.322, -2.083); v(0.8, -5.116, -2.111); v(1.47, -5.206, -2.051); v(1.462, -5.3, -1.942); v(-0.664, -5.761, 2.227); v(0.697, -5.75, 2.221); v(-0.024, -5.756, 2.229); v(0.097, -5.755, 2.228); f2(22, 23, 5); f2(26, 5, 17); f2(6, 0, 27); f2(27, 9, 6); f2(48, 45, 3); f2(49, 46, 1); f2(62, 49, 48); f2(80, 84, 78); f2(84, 73, 75); f2(85, 81, 79); f2(116, 52, 66); f2(50, 117, 67); f2(53, 118, 63); f2(119, 51, 63); f2(10, 11, 12); f2(17, 14, 18); f2(69, 17, 68); f2(17, 31, 13); f2(31, 30, 13); f2(2, 32, 35); f2(47, 0, 45); f2(9, 69, 8); f2(68, 17, 18); f2(19, 69, 71); f2(20, 70, 68); f2(72, 90, 77); f2(89, 79, 81); f2(70, 76, 87); f2(44, 61, 66); f2(44, 66, 52); f2(45, 50, 67); f2(0, 47, 49); f2(16, 22, 26); f2(22, 5, 26); f2(15, 25, 2); f2(27, 7, 17); f2(1, 7, 27); f2(4, 16, 7); f2(6, 15, 3); f2(55, 66, 64); f2(66, 63, 64); f2(63, 67, 65); f2(67, 59, 65); f2(25, 15, 6); f2(6, 9, 25); f2(7, 16, 26); f2(7, 26, 17); f2(3, 4, 48); f2(4, 44, 48); f2(47, 60, 49); f2(60, 62, 49); f2(46, 49, 61); f2(49, 62, 61); f2(62, 63, 48); f2(63, 51, 48); f2(53, 63, 48); f2(84, 75, 78); f2(75, 89, 78); f2(82, 83, 68); f2(83, 69, 68); f2(80, 82, 84); f2(82, 87, 84); f2(84, 87, 73); f2(87, 76, 73); f2(79, 74, 85); f2(74, 72, 85); f2(77, 86, 72); f2(86, 85, 72); f2(81, 85, 83); f2(85, 86, 83); f2(75, 74, 89); f2(74, 79, 89); f2(73, 91, 90); f2(73, 90, 72); f2(71, 88, 70); f2(88, 76, 70); f2(113, 114, 112); f2(114, 115, 112); f2(115, 57, 112); f2(57, 58, 112); f2(57, 115, 101); f2(115, 114, 101); f2(114, 113, 101); f2(113, 102, 101); f2(113, 112, 102); f2(112, 58, 102); f2(110, 111, 109); f2(111, 108, 109); f2(108, 111, 54); f2(111, 56, 54); f2(56, 111, 106); f2(111, 110, 106); f2(109, 107, 110); f2(107, 106, 110); f2(109, 108, 107); f2(108, 54, 107); f2(106, 107, 105); f2(107, 104, 105); f2(55, 104, 54); f2(104, 107, 54); f2(106, 105, 56); f2(105, 64, 56); f2(64, 105, 55); f2(105, 104, 55); f2(100, 101, 103); f2(101, 102, 103); f2(100, 103, 59); f2(103, 65, 59); f2(65, 103, 58); f2(103, 102, 58); f2(101, 100, 57); f2(100, 59, 57); f2(96, 97, 99); f2(97, 98, 99); f2(96, 99, 36); f2(99, 39, 36); f2(99, 98, 39); f2(98, 38, 39); f2(38, 98, 37); f2(98, 97, 37); f2(37, 97, 36); f2(97, 96, 36); f2(93, 94, 92); f2(94, 95, 92); f2(40, 92, 43); f2(92, 95, 43); f2(95, 94, 43); f2(94, 42, 43); f2(94, 93, 42); f2(93, 41, 42); f2(41, 93, 40); f2(93, 92, 40); f2(81, 83, 80); f2(83, 82, 80); f2(73, 72, 74); f2(73, 74, 75); f2(19, 71, 70); f2(19, 70, 20); f2(52, 53, 44); f2(53, 48, 44); f2(50, 45, 51); f2(45, 48, 51); f2(40, 43, 28); f2(43, 31, 28); f2(31, 43, 30); f2(43, 42, 30); f2(30, 42, 29); f2(42, 41, 29); f2(40, 28, 41); f2(28, 29, 41); f2(32, 36, 35); f2(36, 39, 35); f2(39, 38, 35); f2(38, 34, 35); f2(38, 37, 34); f2(37, 33, 34); f2(37, 36, 33); f2(36, 32, 33); f2(35, 34, 2); f2(28, 31, 5); f2(31, 17, 5); f2(29, 14, 30); f2(14, 13, 30); f2(29, 28, 14); f2(28, 5, 14); f2(21, 24, 22); f2(24, 23, 22); f2(23, 24, 20); f2(24, 19, 20); f2(21, 22, 15); f2(22, 16, 15); f2(3, 15, 4); f2(15, 16, 4); f2(14, 17, 13); f2(8, 12, 9); f2(12, 11, 9); f2(67, 63, 60); f2(63, 62, 60); f2(66, 61, 63); f2(61, 62, 63); f2(63, 65, 58); f2(63, 58, 119); f2(63, 118, 56); f2(63, 56, 64); f2(67, 117, 57); f2(67, 57, 59); f2(66, 55, 54); f2(66, 54, 116); f2(52, 116, 118); f2(52, 118, 53); f2(54, 56, 116); f2(56, 118, 116); f2(57, 117, 58); f2(117, 119, 58); f2(50, 51, 119); f2(50, 119, 117); f2(73, 76, 91); f2(76, 88, 91); f2(91, 88, 90); f2(88, 77, 90); f2(78, 89, 80); f2(89, 81, 80); f2(82, 68, 70); f2(82, 70, 87); f2(83, 86, 71); f2(83, 71, 69); f2(88, 71, 77); f2(71, 86, 77); f2(47, 45, 60); f2(45, 67, 60); f2(61, 44, 46); f2(44, 1, 46); f2(24, 21, 2); f2(21, 15, 2); f2(68, 18, 20); f2(18, 23, 20); f2(69, 19, 8); f2(19, 24, 8); f2(14, 5, 23); f2(14, 23, 18); f2(2, 34, 10); f2(2, 10, 12); f2(10, 9, 11); f2(32, 9, 10); f2(69, 9, 17); f2(9, 27, 17); f2(12, 8, 2); f2(8, 24, 2); f2(44, 4, 7); f2(44, 7, 1); f2(45, 0, 3); f2(0, 6, 3); f2(49, 1, 27); f2(27, 0, 49); f2(25, 9, 2); f2(9, 32, 2); f2(10, 34, 33); f2(10, 33, 32); x = 0; y = 3; z = 0; rotationX = 0; rotationY = 160; rotationZ = 0; break; case 4: v(1, 0.102, -1.151); v(1.279, -3.05, -1.332); v(-1.146, -2.637, -1.332); v(1, 0.102, -0.081); v(1.27, -3.053, 0.294); v(-0.792, 0.513, 0.02); v(0.694, -1.642, -0.833); v(0.828, 0.895, -0.253); v(0.828, 0.895, -0.789); v(1.665, 0.102, -0.39); v(1.665, 0.102, -0.946); v(1.396, 0.802, -0.789); v(1.398, 0.802, -0.54); v(-1.469, -0.105, -0.527); v(-1.469, 0.293, -0.138); v(-1.2, 0.809, -0.252); v(-1.212, 0.712, -0.501); v(-0.772, -1.503, 0.26); v(-0.706, 0.895, -0.253); v(0.179, 0.719, -0.081); v(-0.114, 0.719, -0.081); v(0.414, 1.142, -0.789); v(-0.591, 1.025, -0.789); v(-0.529, -0.17, 0.244); v(0.547, -0.17, 0.244); v(1.027, -0.826, -0.138); v(-0.792, -0.252, -0.958); v(-0.716, -1.642, -0.833); v(-0.724, -1.178, 0.685); v(-1.449, -1.167, 0.909); v(-1.311, -1.584, 0.727); v(1.259, -2.342, -0.085); v(1.465, -1.93, 0.581); v(1.045, -1.673, 0.65); v(0.995, -1.763, 0.163); v(-0.716, -2.982, 0.202); v(-0.359, -2.781, 0.682); v(-0.556, -2.303, 0.564); v(-0.508, -2.351, 0.284); v(0.724, -1.083, 0.646); v(0.99, -1.118, 0.993); v(0.946, -1.624, 0.837); v(0.809, -1.503, 0.26); v(-1.311, -3.283, 0.058); v(1.352, -3.678, 0.058); v(-1.36, -3.619, -1.213); v(1.302, -4.014, -1.213); v(0, -3.798, 0.058); v(0, -3.798, -1.272); v(1.08, -6.141, 0.871); v(0.342, -6.091, 1.07); v(0.092, -6.147, 0.398); v(0.83, -6.197, 0.198); v(-0.697, -6.114, -0.091); v(-0.697, -6.486, -0.955); v(0.118, -6.482, -0.955); v(0.118, -6.109, -0.091); v(-0.43, -8.53, -0.347); v(-0.367, -8.271, -0.847); v(0.033, -8.526, -0.347); v(0.566, -8.58, 0.579); v(0.132, -8.549, 0.579); v(0.315, -7.951, 0.155); v(0.917, -4.798, -0.875); v(-0.9, -4.798, -0.875); v(0.034, -4.953, -0.875); v(0.008, -4.953, -0.875); v(-0.076, -7.162, -1.166); v(0.089, -6.791, 0.07); v(-0.112, -8.267, -0.847); v(0.051, -7.93, 0.227); v(-0.598, -7.166, -1.166); v(0.513, -6.822, -0.044); v(-0.412, 1.399, -0.618); v(-0.109, 1.399, -0.856); v(0.47, 1.244, -0.56); v(0.818, 2.473, -0.383); v(0.514, 2.473, 0.211); v(0.526, 2.928, -0.532); v(0.223, 2.928, 0.062); v(0.097, 1.309, -0.13); v(0.622, 1.431, -0.483); v(-0.351, 3.001, -0.136); v(0.025, 3.001, -0.871); v(-0.638, 2.786, -0.378); v(-0.335, 2.786, -0.972); v(-0.698, 1.936, -0.408); v(-0.395, 1.936, -1.002); v(-0.225, 2.63, 0.235); v(0.406, 2.63, -0.999); v(0.372, 1.684, -0.934); v(-0.163, 1.684, 0.113); v(0.757, 1.311, -0.039); v(-0.161, 3.16, -0.508); v(0.919, 1.963, -0.144); v(0.768, 1.963, 0.153); v(1.019, -1.084, 0.037); v(0.838, -1.659, -0.105); v(0.818, -1.239, -0.398); v(-0.96, -3.423, 0.039); v(-0.826, -3.221, 0.624); v(-1.072, -2.705, 0.294); v(0.582, -8.922, -0.158); v(0.538, -8.953, 0.562); v(0.105, -8.922, 0.562); v(0.166, -8.893, -0.15); v(-0.504, -8.905, -0.847); v(-0.107, -8.901, -1.061); v(0.038, -8.901, -0.347); v(-0.425, -8.905, -0.347); v(-0.673, -8.815, 0.45); v(-0.668, -8.906, 0.449); v(0.038, -8.902, 0.78); v(0.033, -8.656, 0.78); v(0.121, -8.728, 1.699); v(0.102, -8.974, 1.688); v(0.775, -9.004, 1.357); v(0.785, -8.913, 1.361); f2(1, 6, 4); f2(27, 2, 101); f2(42, 4, 6); f2(101, 17, 27); f2(7, 19, 3); f2(20, 18, 5); f2(8, 0, 21); f2(28, 23, 5); f2(23, 20, 5); f2(19, 24, 3); f2(24, 39, 3); f2(25, 0, 3); f2(6, 0, 25); f2(27, 1, 2); f2(27, 6, 1); f2(26, 0, 27); f2(27, 0, 6); f2(25, 39, 42); f2(6, 25, 42); f2(25, 3, 39); f2(26, 17, 28); f2(5, 26, 28); f2(26, 27, 17); f2(47, 4, 101); f2(43, 47, 101); f2(47, 44, 4); f2(48, 2, 1); f2(46, 48, 1); f2(48, 45, 2); f2(46, 63, 48); f2(63, 52, 51); f2(63, 44, 49); f2(52, 63, 49); f2(63, 46, 44); f2(64, 53, 43); f2(45, 64, 43); f2(64, 54, 53); f2(54, 64, 55); f2(64, 45, 48); f2(65, 50, 47); f2(48, 65, 47); f2(65, 51, 50); f2(66, 47, 56); f2(55, 66, 56); f2(66, 48, 47); f2(51, 65, 63); f2(65, 48, 63); f2(48, 66, 64); f2(66, 55, 64); f2(55, 67, 54); f2(67, 69, 58); f2(59, 69, 56); f2(50, 70, 61); f2(70, 68, 62); f2(68, 51, 52); f2(71, 57, 53); f2(54, 71, 53); f2(71, 58, 57); f2(72, 49, 60); f2(62, 72, 60); f2(72, 52, 49); f2(58, 71, 67); f2(71, 54, 67); f2(52, 72, 68); f2(72, 62, 68); f2(81, 75, 74); f2(73, 86, 74); f2(87, 74, 86); f2(88, 79, 82); f2(84, 88, 82); f2(88, 77, 79); f2(77, 88, 80); f2(88, 84, 86); f2(89, 83, 78); f2(76, 89, 78); f2(89, 85, 83); f2(85, 89, 87); f2(89, 76, 81); f2(87, 90, 74); f2(90, 81, 74); f2(81, 90, 89); f2(90, 87, 89); f2(80, 91, 73); f2(91, 86, 73); f2(86, 91, 88); f2(91, 80, 88); f2(93, 79, 78); f2(83, 93, 78); f2(93, 82, 79); f2(93, 85, 84); f2(82, 93, 84); f2(93, 83, 85); f2(94, 76, 77); f2(76, 94, 81); f2(94, 92, 81); f2(92, 95, 80); f2(95, 77, 80); f2(77, 95, 94); f2(95, 92, 94); f2(81, 92, 75); f2(80, 75, 92); f2(114, 115, 117); f2(115, 116, 117); f2(61, 114, 117); f2(61, 117, 60); f2(60, 117, 103); f2(117, 116, 103); f2(103, 116, 104); f2(116, 115, 104); f2(104, 115, 114); f2(104, 114, 61); f2(110, 111, 112); f2(110, 112, 113); f2(57, 110, 59); f2(110, 113, 59); f2(59, 113, 108); f2(113, 112, 108); f2(108, 112, 111); f2(108, 111, 109); f2(109, 111, 110); f2(109, 110, 57); f2(106, 107, 108); f2(106, 108, 109); f2(58, 106, 57); f2(106, 109, 57); f2(59, 108, 107); f2(59, 107, 69); f2(69, 107, 58); f2(107, 106, 58); f2(102, 103, 105); f2(103, 104, 105); f2(62, 102, 105); f2(62, 105, 70); f2(70, 105, 61); f2(105, 104, 61); f2(60, 103, 102); f2(60, 102, 62); f2(99, 100, 101); f2(35, 99, 101); f2(35, 101, 38); f2(38, 101, 37); f2(37, 101, 36); f2(101, 100, 36); f2(36, 100, 35); f2(100, 99, 35); f2(98, 96, 97); f2(39, 98, 42); f2(42, 98, 97); f2(42, 97, 41); f2(41, 97, 96); f2(41, 96, 40); f2(40, 96, 39); f2(96, 98, 39); f2(84, 85, 87); f2(84, 87, 86); f2(78, 79, 77); f2(78, 77, 76); f2(20, 19, 75); f2(20, 75, 80); f2(21, 22, 74); f2(22, 73, 74); f2(22, 20, 80); f2(22, 80, 73); f2(19, 21, 75); f2(21, 74, 75); f2(18, 20, 22); f2(7, 8, 21); f2(7, 21, 19); f2(51, 68, 50); f2(68, 70, 50); f2(56, 69, 67); f2(56, 67, 55); f2(50, 61, 60); f2(50, 60, 49); f2(53, 57, 56); f2(57, 59, 56); f2(43, 53, 47); f2(53, 56, 47); f2(47, 50, 49); f2(47, 49, 44); f2(1, 4, 44); f2(1, 44, 46); f2(101, 2, 43); f2(2, 45, 43); f2(28, 42, 30); f2(42, 41, 30); f2(30, 41, 29); f2(41, 40, 29); f2(29, 40, 39); f2(29, 39, 28); f2(31, 35, 34); f2(35, 38, 34); f2(34, 38, 33); f2(38, 37, 33); f2(33, 37, 36); f2(33, 36, 32); f2(32, 36, 35); f2(32, 35, 31); f2(0, 31, 34); f2(0, 34, 3); f2(3, 34, 9); f2(34, 33, 9); f2(9, 33, 10); f2(33, 32, 10); f2(31, 0, 10); f2(31, 10, 32); f2(28, 30, 26); f2(26, 30, 13); f2(13, 30, 29); f2(13, 29, 14); f2(14, 29, 28); f2(14, 28, 5); f2(28, 39, 24); f2(28, 24, 23); f2(20, 23, 24); f2(20, 24, 19); f2(39, 28, 42); f2(28, 17, 42); f2(0, 26, 22); f2(0, 22, 21); f2(4, 42, 101); f2(42, 17, 101); f2(13, 14, 16); f2(14, 15, 16); f2(26, 13, 16); f2(26, 16, 22); f2(22, 16, 15); f2(22, 15, 18); f2(18, 15, 5); f2(15, 14, 5); f2(9, 10, 11); f2(9, 11, 12); f2(3, 9, 12); f2(3, 12, 7); f2(7, 12, 8); f2(12, 11, 8); f2(10, 0, 11); f2(0, 8, 11); x = 0; y = 25; z = 0; rotationX = 0; rotationY = 80; rotationZ = 0; break; case 5: v(0.773, -0.139, -1.172); v(1.39, -3.108, -1.332); v(-1.302, -3.108, -1.332); v(1.044, -0.446, -0.183); v(1.217, -2.875, -0.186); v(-1.151, -2.306, -0.526); v(-0.881, -0.784, 0.002); v(0.694, -1.896, -1.576); v(-0.894, -1.896, -1.584); v(0.759, 0.321, -0.053); v(0.624, 0.475, -0.548); v(-1.087, -0.555, -1.139); v(1.754, -0.552, -0.206); v(1.613, -0.53, -0.743); v(1.327, 0.13, -0.479); v(1.391, 0.12, -0.238); v(-1.657, -0.641, 0.265); v(-1.208, -0.349, 1.125); v(-1.257, -0.019, 0.619); v(-1.322, -0.042, 0.146); v(0.809, -1.909, -0.22); v(-0.772, -1.996, -0.458); v(-0.853, 0.216, -0.223); v(-0.717, 0.062, 0.271); v(0.426, -0.112, 0.066); v(0.006, -0.116, 0.158); v(0.202, 0.509, -0.676); v(-0.588, 0.5, -0.208); v(0.761, -1.447, 0.205); v(-0.724, -1.682, 0.205); v(-0.476, -0.932, -0.055); v(0.594, -0.823, -0.055); v(1.027, -0.826, -0.138); v(-0.991, -0.826, -0.138); v(-0.011, -1.896, -1.576); v(-1.027, -0.644, 2.152); v(-1.469, -0.957, 2.244); v(-1.244, -1.341, 2.076); v(-0.865, -1.363, 1.713); v(1.749, -2.756, -0.679); v(2.213, -2.709, -0.378); v(2.401, -2.528, 0.047); v(1.708, -2.598, -0.032); v(2.479, -4.594, 0.215); v(2.572, -4.361, 0.262); v(2.191, -4.593, 0.271); v(0.402, -1.406, 2.624); v(0.395, -1.394, 2.894); v(-0.086, -1.735, 2.897); v(0, -1.644, 2.628); v(-1.514, -2.625, 0.058); v(1.142, -3.545, 0.637); v(-1.302, -3.821, -1.213); v(1.39, -4.128, -1.109); v(0, -3.798, 0.058); v(0, -3.798, -1.272); v(0.925, -4.052, 2.308); v(0.178, -3.878, 2.304); v(-0.022, -4.496, 2.006); v(0.724, -4.67, 2.01); v(-1.386, -1.495, 2.107); v(-1.67, -2.592, 1.357); v(-0.571, -2.97, 1.497); v(-0.669, -1.489, 2.042); v(-0.533, -4.418, 2.908); v(-0.47, -4.374, 2.405); v(-0.07, -4.414, 2.908); v(0.638, -4.478, 4.682); v(0.26, -4.263, 4.679); v(0.454, -4.795, 3.887); v(0.995, -4.807, -0.399); v(-0.9, -4.43, 0.317); v(0.034, -4.774, -0.875); v(0.008, -4.816, -0.644); v(-0.384, -3.456, 1.654); v(0.178, -4.853, 2.801); v(-0.25, -4.354, 2.408); v(0.102, -4.667, 3.885); v(-0.906, -3.46, 1.656); v(0.673, -4.84, 2.656); v(-0.492, 0.698, 0.041); v(0.15, 0.81, -0.463); v(0.115, 0.256, 0.179); v(0.491, 0.09, 0.168); v(1.399, 1.042, 0.23); v(1.235, 0.875, 0.855); v(1.459, 1.577, 0.389); v(1.295, 1.41, 1.013); v(0.402, 0.324, 0.488); v(0.566, 0.491, -0.136); v(0.889, 1.855, 1.116); v(1.092, 2.062, 0.343); v(0.507, 1.985, 0.96); v(0.671, 2.152, 0.335); v(-0.093, 1.458, 0.661); v(0.071, 1.624, 0.037); v(0.783, 1.341, 1.243); v(1.124, 1.71, -0.048); v(0.63, 1.126, -0.245); v(0.202, 0.737, 0.782); v(0.637, 0.104, 0.135); v(1.095, 2.067, 0.78); v(1.171, 0.518, 0.208); v(1.089, 0.434, 0.52); v(0.785, -2.57, 2.645); v(0.672, -1.979, 2.863); v(0.204, -2.331, 2.966); v(0.008, -2.223, 2.651); v(3.458, -4.652, 0.654); v(3.164, -4.362, 0.49); v(2.455, -4.361, 0.758); v(3.282, -4.651, 1.185); v(0.304, -5.15, 4.369); v(0.493, -4.727, 4.922); v(0.115, -4.511, 4.92); v(-0.056, -4.939, 4.372); v(-0.607, -4.9, 2.413); v(-0.21, -4.898, 2.199); v(-0.065, -4.997, 2.913); v(-0.528, -5.002, 2.913); v(-0.543, -4.903, 3.754); v(-0.539, -4.993, 3.754); v(0.203, -4.985, 3.994); v(0.198, -4.739, 3.992); v(0.341, -4.118, 5.626); v(0.245, -4.28, 5.784); v(0.852, -4.576, 5.534); v(0.89, -4.517, 5.475); v(-0.578, -1.259, 1.204); v(-1.637, -1.229, 1.162); f2(22, 27, 11); f2(10, 0, 26); f2(29, 30, 6); f2(24, 31, 3); f2(32, 0, 3); f2(33, 6, 11); f2(8, 34, 2); f2(34, 7, 1); f2(34, 0, 7); f2(32, 28, 20); f2(50, 54, 5); f2(54, 51, 4); f2(53, 55, 1); f2(55, 52, 2); f2(70, 53, 51); f2(55, 72, 54); f2(73, 55, 54); f2(73, 62, 71); f2(57, 77, 68); f2(69, 79, 67); f2(92, 96, 90); f2(96, 85, 87); f2(97, 93, 91); f2(95, 98, 81); f2(98, 89, 81); f2(99, 94, 80); f2(90, 101, 92); f2(84, 102, 89); f2(82, 83, 100); f2(82, 100, 88); f2(108, 109, 111); f2(45, 111, 110); f2(104, 105, 106); f2(104, 106, 107); f2(63, 74, 62); f2(5, 2, 50); f2(37, 48, 36); f2(6, 35, 11); f2(35, 38, 11); f2(16, 37, 36); f2(17, 35, 6); f2(20, 21, 5); f2(3, 12, 15); f2(64, 60, 61); f2(54, 128, 73); f2(46, 49, 38); f2(45, 110, 42); f2(110, 41, 42); f2(55, 73, 52); f2(73, 71, 52); f2(60, 129, 61); f2(129, 50, 61); f2(63, 128, 60); f2(128, 129, 60); f2(54, 50, 128); f2(50, 129, 128); f2(13, 0, 14); f2(0, 10, 14); f2(9, 15, 14); f2(9, 14, 10); f2(13, 14, 12); f2(14, 15, 12); f2(23, 18, 6); f2(18, 17, 6); f2(19, 18, 23); f2(19, 23, 22); f2(16, 19, 22); f2(16, 22, 11); f2(16, 17, 18); f2(16, 18, 19); f2(11, 27, 26); f2(26, 0, 11); f2(28, 29, 20); f2(29, 21, 20); f2(30, 31, 25); f2(31, 24, 25); f2(28, 31, 30); f2(28, 30, 29); f2(11, 38, 16); f2(38, 37, 16); f2(0, 13, 39); f2(13, 40, 39); f2(12, 41, 40); f2(12, 40, 13); f2(3, 42, 12); f2(42, 41, 12); f2(39, 42, 3); f2(3, 0, 39); f2(44, 43, 40); f2(43, 39, 40); f2(110, 44, 41); f2(44, 40, 41); f2(39, 43, 45); f2(39, 45, 42); f2(38, 49, 37); f2(49, 48, 37); f2(4, 51, 53); f2(4, 53, 1); f2(57, 56, 51); f2(57, 51, 54); f2(60, 64, 63); f2(64, 66, 63); f2(68, 67, 56); f2(68, 56, 57); f2(58, 75, 57); f2(75, 77, 57); f2(10, 26, 9); f2(26, 24, 9); f2(25, 27, 23); f2(27, 22, 23); f2(24, 26, 83); f2(26, 81, 83); f2(25, 82, 27); f2(82, 80, 27); f2(26, 27, 81); f2(27, 80, 81); f2(24, 83, 82); f2(24, 82, 25); f2(87, 85, 86); f2(85, 84, 86); f2(93, 95, 94); f2(93, 94, 92); f2(47, 105, 46); f2(105, 104, 46); f2(106, 105, 48); f2(105, 47, 48); f2(107, 106, 48); f2(107, 48, 49); f2(46, 104, 107); f2(46, 107, 49); f2(44, 109, 43); f2(109, 108, 43); f2(108, 111, 43); f2(111, 45, 43); f2(113, 112, 67); f2(112, 69, 67); f2(77, 115, 68); f2(115, 114, 68); f2(112, 115, 77); f2(112, 77, 69); f2(112, 113, 115); f2(113, 114, 115); f2(76, 117, 65); f2(117, 116, 65); f2(118, 117, 76); f2(118, 76, 66); f2(65, 116, 64); f2(116, 119, 64); f2(117, 118, 116); f2(118, 119, 116); f2(121, 120, 119); f2(120, 64, 119); f2(122, 121, 118); f2(121, 119, 118); f2(66, 123, 118); f2(123, 122, 118); f2(64, 120, 66); f2(120, 123, 66); f2(121, 122, 120); f2(122, 123, 120); f2(125, 124, 114); f2(124, 68, 114); f2(113, 126, 114); f2(126, 125, 114); f2(67, 127, 113); f2(127, 126, 113); f2(124, 127, 68); f2(127, 67, 68); f2(124, 125, 126); f2(124, 126, 127); f2(111, 109, 110); f2(109, 44, 110); f2(100, 103, 88); f2(103, 85, 88); f2(84, 85, 103); f2(84, 103, 102); f2(89, 102, 100); f2(102, 103, 100); f2(92, 101, 93); f2(101, 91, 93); f2(87, 86, 101); f2(86, 91, 101); f2(93, 97, 95); f2(97, 98, 95); f2(84, 89, 98); f2(84, 98, 97); f2(91, 86, 97); f2(86, 84, 97); f2(85, 96, 99); f2(85, 99, 88); f2(92, 94, 96); f2(94, 99, 96); f2(80, 94, 95); f2(80, 95, 81); f2(96, 87, 90); f2(87, 101, 90); f2(81, 89, 83); f2(89, 100, 83); f2(82, 88, 99); f2(82, 99, 80); f2(67, 79, 56); f2(79, 59, 56); f2(65, 64, 78); f2(64, 61, 78); f2(77, 75, 69); f2(75, 79, 69); f2(58, 59, 75); f2(59, 79, 75); f2(66, 76, 74); f2(66, 74, 63); f2(62, 74, 78); f2(62, 78, 61); f2(76, 65, 74); f2(65, 78, 74); f2(62, 73, 128); f2(62, 128, 63); f2(54, 72, 58); f2(54, 58, 57); f2(62, 61, 50); f2(62, 50, 71); f2(51, 56, 59); f2(51, 59, 70); f2(53, 70, 72); f2(53, 72, 55); f2(59, 58, 70); f2(58, 72, 70); f2(71, 50, 52); f2(50, 2, 52); f2(47, 46, 35); f2(46, 38, 35); f2(48, 47, 35); f2(48, 35, 36); f2(16, 36, 17); f2(36, 35, 17); f2(21, 29, 33); f2(29, 6, 33); f2(0, 34, 11); f2(34, 8, 11); f2(11, 8, 21); f2(11, 21, 33); f2(0, 32, 7); f2(32, 20, 7); f2(31, 28, 32); f2(31, 32, 3); f2(23, 6, 30); f2(23, 30, 25); f2(24, 3, 9); f2(3, 15, 9); f2(2, 5, 8); f2(5, 21, 8); f2(1, 7, 20); f2(1, 20, 4); f2(54, 4, 20); f2(54, 20, 5); f2(34, 1, 55); f2(34, 55, 2); x = 0; y = 3; z = 0; rotationX = 0; rotationY = 0xFF; rotationZ = 0; break; case 8: v(1.22, -0.297, 0.295); v(1.39, -3.108, -1.332); v(-1.302, -3.108, -1.332); v(1.217, -2.875, 0.294); v(-1.151, -2.875, -0.079); v(1.183, -1.873, -0.703); v(1.049, -0.04, 1.192); v(1.129, -0.01, 0.669); v(1.711, -0.977, 1.551); v(1.795, -1.063, 1.008); v(1.623, -0.285, 0.909); v(1.587, -0.287, 1.349); v(-1.223, -0.825, 0.445); v(-0.988, -1.088, 1.216); v(-0.837, -0.265, 1.102); v(1.064, -2.213, 0.332); v(-0.46, -2.213, -0.086); v(-0.925, -0.226, 0.852); v(-0.314, -0.104, 1.284); v(0.295, -0.736, 1.223); v(0.062, -0.709, 1.047); v(0.694, 0.022, 1.199); v(0.042, 0.096, 0.707); v(1.109, -2.331, 0.757); v(-0.555, -2.22, 0.443); v(-0.274, -0.914, 0.99); v(0.907, -0.611, 1.229); v(-0.713, -0.957, -0.208); v(-0.177, -2.032, -0.909); v(-1.093, -2.037, 1.515); v(-1.553, -2.154, 1.224); v(-1.139, -2.711, 1.143); v(-0.855, -2.685, 1.34); v(1.643, -3.146, 2.595); v(1.887, -3.315, 2.556); v(1.373, -2.04, 2.025); v(0.922, -0.881, 2.164); v(1.127, -1.073, 2.531); v(0.989, -0.415, 1.944); v(-1.734, -3.037, 3.015); v(-1.898, -2.941, 3.208); v(-2.295, -3.24, 3.02); v(-2.034, -3.299, 2.89); v(-1.811, -3.291, 0.044); v(1.846, -3.396, 0.164); v(-1.302, -3.821, -1.213); v(1.39, -3.821, -1.213); v(0, -3.798, 0.058); v(0, -3.798, -1.272); v(1.898, -3.118, 2.917); v(1.31, -3.425, 2.25); v(-1.989, -3.074, 2.704); v(-1.082, -3.663, 2.075); v(0.828, -5.11, 0.932); v(0.465, -5.067, 0.683); v(0.735, -4.534, 1.015); v(-0.972, -4.702, 2.264); v(-0.92, -4.273, 2.218); v(-0.443, -4.685, 2.047); v(1.268, -4.798, -0.875); v(-1.187, -4.64, -0.875); v(0.021, -4.953, -0.875); v(-0.84, -4.135, 1.372); v(1.35, -4.123, 2.245); v(0.357, -4.769, 0.63); v(-0.408, -4.415, 2.019); v(-2.18, -4.236, 2.083); v(2.237, -4.113, 2.31); v(0.329, 0.317, 1.435); v(0.791, -0.163, 1.403); v(-0.106, 0.073, 1.513); v(0.352, -0.601, 1.652); v(0.673, -0.373, 2.879); v(0.212, 0.106, 2.911); v(1.061, -0.012, 3.062); v(0.599, 0.468, 3.093); v(-0.124, -0.152, 1.934); v(0.338, -0.632, 1.903); v(0.915, 0.908, 2.811); v(1.487, 0.314, 2.772); v(1.087, 0.982, 2.421); v(1.549, 0.502, 2.389); v(0.749, 0.705, 1.688); v(1.211, 0.225, 1.657); v(0.401, 0.802, 2.683); v(1.362, -0.195, 2.617); v(0.893, -0.495, 1.848); v(0.078, 0.352, 1.904); v(-0.13, -0.626, 2.006); v(1.275, 0.667, 2.921); v(0.219, -0.56, 2.585); v(-0.012, -0.32, 2.601); v(-1.786, -4.018, 3.416); v(-1.803, -3.518, 3.486); v(-2.306, -3.799, 3.339); v(-1.993, -4.243, 3.352); v(1.279, 0.024, 2.449); v(1.327, -0.464, 2.604); v(1.455, -0.624, 2.055); v(1.307, -0.13, 2.178); v(-0.797, -4.848, 1.484); v(-1.255, -4.693, 2.019); v(-1.203, -4.263, 1.973); v(-0.751, -4.436, 1.445); v(0.775, -5.045, 0.355); v(0.51, -4.772, 0.323); v(1.102, -4.438, 0.694); v(1.194, -5.014, 0.611); v(1.674, -5.051, 1.033); v(1.714, -5.025, 0.955); v(1.861, -4.336, 1.24); v(1.751, -4.401, 1.451); v(-1.741, -4.092, 2.979); v(-1.927, -4.084, 2.818); v(-1.794, -4.802, 2.643); v(-1.726, -4.807, 2.703); v(-0.975, -3.43, 2.873); v(-1.939, -4.078, 3.012); v(1.662, -4.256, 3.105); v(1.389, -3.413, 2.152); v(1.318, -1.599, 0.593); v(1.902, -2.164, 2.044); v(1.285, -0.976, 2.277); f2(120, 23, 15); f2(27, 28, 16); f2(43, 47, 4); f2(47, 44, 3); f2(48, 45, 2); f2(48, 61, 47); f2(50, 65, 57); f2(67, 58, 63); f2(84, 73, 75); f2(85, 81, 79); f2(83, 86, 69); f2(72, 90, 77); f2(77, 88, 71); f2(38, 99, 98); f2(20, 19, 71); f2(52, 64, 62); f2(32, 42, 31); f2(12, 31, 30); f2(20, 25, 26); f2(20, 26, 19); f2(15, 16, 4); f2(0, 7, 10); f2(56, 118, 49); f2(118, 67, 49); f2(44, 49, 67); f2(40, 39, 29); f2(70, 76, 87); f2(29, 25, 13); f2(25, 14, 13); f2(8, 121, 9); f2(121, 34, 9); f2(52, 51, 116); f2(51, 117, 116); f2(21, 22, 68); f2(21, 68, 69); f2(84, 78, 80); f2(78, 89, 80); f2(119, 34, 33); f2(34, 37, 33); f2(61, 63, 47); f2(63, 50, 47); f2(12, 13, 17); f2(13, 14, 17); f2(12, 17, 27); f2(17, 22, 27); f2(8, 11, 26); f2(11, 6, 26); f2(23, 120, 26); f2(120, 0, 26); f2(20, 18, 25); f2(18, 14, 25); f2(98, 122, 36); f2(98, 36, 38); f2(34, 121, 37); f2(121, 122, 37); f2(35, 36, 122); f2(35, 122, 121); f2(2, 4, 28); f2(4, 16, 28); f2(25, 29, 32); f2(25, 32, 27); f2(15, 5, 120); f2(5, 0, 120); f2(120, 9, 119); f2(9, 34, 119); f2(33, 35, 119); f2(35, 120, 119); f2(67, 118, 58); f2(118, 56, 58); f2(55, 116, 53); f2(116, 117, 53); f2(52, 116, 55); f2(52, 55, 64); f2(67, 63, 59); f2(63, 61, 59); f2(66, 60, 62); f2(60, 61, 62); f2(6, 11, 10); f2(6, 10, 7); f2(9, 10, 11); f2(9, 11, 8); f2(22, 0, 27); f2(7, 0, 22); f2(23, 24, 15); f2(24, 16, 15); f2(23, 26, 25); f2(23, 25, 24); f2(27, 32, 12); f2(32, 31, 12); f2(26, 35, 8); f2(35, 121, 8); f2(26, 0, 120); f2(26, 120, 35); f2(39, 42, 32); f2(39, 32, 29); f2(4, 2, 43); f2(2, 45, 43); f2(3, 44, 1); f2(44, 46, 1); f2(50, 49, 44); f2(50, 44, 47); f2(43, 51, 52); f2(43, 52, 47); f2(19, 21, 69); f2(19, 69, 71); f2(68, 22, 18); f2(68, 18, 70); f2(75, 73, 74); f2(73, 72, 74); f2(81, 83, 82); f2(81, 82, 80); f2(40, 93, 39); f2(93, 92, 39); f2(94, 93, 41); f2(93, 40, 41); f2(95, 94, 42); f2(94, 41, 42); f2(39, 92, 42); f2(92, 95, 42); f2(93, 94, 92); f2(94, 95, 92); f2(37, 97, 36); f2(97, 96, 36); f2(97, 37, 122); f2(97, 122, 98); f2(96, 99, 38); f2(96, 38, 36); f2(96, 97, 99); f2(97, 98, 99); f2(101, 100, 56); f2(100, 58, 56); f2(65, 103, 57); f2(103, 102, 57); f2(100, 103, 58); f2(103, 65, 58); f2(100, 101, 103); f2(101, 102, 103); f2(64, 105, 54); f2(105, 104, 54); f2(106, 105, 55); f2(105, 64, 55); f2(54, 104, 53); f2(104, 107, 53); f2(105, 106, 104); f2(106, 107, 104); f2(109, 108, 107); f2(108, 53, 107); f2(110, 109, 106); f2(109, 107, 106); f2(55, 111, 106); f2(111, 110, 106); f2(53, 108, 55); f2(108, 111, 55); f2(109, 110, 108); f2(110, 111, 108); f2(113, 112, 102); f2(112, 57, 102); f2(101, 114, 102); f2(114, 113, 102); f2(56, 115, 101); f2(115, 114, 101); f2(112, 115, 57); f2(115, 56, 57); f2(112, 113, 115); f2(113, 114, 115); f2(71, 88, 76); f2(71, 76, 70); f2(88, 91, 76); f2(91, 73, 76); f2(72, 73, 91); f2(72, 91, 90); f2(77, 90, 88); f2(90, 91, 88); f2(80, 89, 81); f2(89, 79, 81); f2(75, 74, 89); f2(74, 79, 89); f2(82, 68, 87); f2(68, 70, 87); f2(81, 85, 83); f2(85, 86, 83); f2(72, 77, 86); f2(72, 86, 85); f2(79, 74, 85); f2(74, 72, 85); f2(73, 84, 87); f2(73, 87, 76); f2(80, 82, 84); f2(82, 87, 84); f2(68, 82, 83); f2(68, 83, 69); f2(84, 75, 78); f2(75, 89, 78); f2(71, 69, 86); f2(71, 86, 77); f2(71, 70, 18); f2(71, 18, 20); f2(117, 51, 66); f2(51, 43, 66); f2(54, 53, 66); f2(53, 117, 66); f2(58, 65, 63); f2(65, 50, 63); f2(64, 54, 62); f2(54, 66, 62); f2(47, 52, 62); f2(47, 62, 61); f2(45, 48, 60); f2(48, 61, 60); f2(45, 60, 43); f2(60, 66, 43); f2(46, 44, 59); f2(44, 67, 59); f2(46, 59, 48); f2(59, 61, 48); f2(2, 1, 48); f2(1, 46, 48); f2(42, 41, 30); f2(42, 30, 31); f2(41, 40, 30); f2(40, 29, 30); f2(35, 33, 37); f2(35, 37, 36); f2(12, 30, 13); f2(30, 29, 13); f2(16, 24, 27); f2(24, 25, 27); f2(27, 0, 5); f2(27, 5, 28); f2(2, 28, 1); f2(28, 5, 1); f2(6, 7, 21); f2(7, 22, 21); f2(26, 6, 21); f2(26, 21, 19); f2(22, 17, 18); f2(17, 14, 18); f2(9, 0, 10); f2(120, 0, 9); f2(1, 5, 3); f2(5, 15, 3); f2(47, 3, 15); f2(47, 15, 4); f2(57, 56, 50); f2(56, 49, 50); x = 0; y = -7; z = 0; rotationX = 0; rotationY = -10; rotationZ = 0; break; case 10: v(-1.606, 0.574, -0.637); v(0.966, 0.247, -0.825); v(0.685, -2.028, -1.189); v(-2.445, -0.442, 0.782); v(0.151, -0.047, 0.114); v(-0.064, -1.783, 0.26); v(-1.888, -1.709, -0.081); v(-0.71, -1.822, -0.854); v(-2.517, 0.003, 0.085); v(-2.414, 0.501, -0.317); v(-1.888, -1.709, -1.151); v(-1.988, 0.023, 1.119); v(-1.466, 0.019, 0.926); v(-1.819, 0.592, 0.05); v(-2.082, 0.334, 0.427); v(-2.845, -1.969, -0.438); v(-3.227, -1.192, -0.39); v(-3.011, -1.03, -0.54); v(-2.916, -1.244, -0.789); v(-0.104, -0.36, 0.26); v(-0.299, -1.929, 0.26); v(-2.602, -1.021, -0.789); v(-2.602, -1.021, -0.253); v(-2.355, -0.456, -0.081); v(-2.71, 0.121, -0.789); v(-2.811, -0.694, -0.789); v(-0.813, -0.32, 0.685); v(-1.223, -1.766, 0.685); v(-1.524, -0.976, 0.244); v(-2.319, -0.164, -0.081); v(-0.749, -0.061, -0.138); v(-0.974, -1.874, -0.138); v(-0.537, -0.422, -0.854); v(-3.417, -1.983, 0.488); v(-4.372, -1.401, 0.506); v(-4.316, -2.024, 0.571); v(-3.793, -2.054, 0.526); v(-1.032, -1.777, 2.551); v(-1.054, -1.272, 2.582); v(-1.663, -1.645, 2.152); v(-1.286, -1.928, 1.975); v(-2.393, -1.812, 2.912); v(-2.31, -1.57, 3.091); v(-2.36, -1.43, 2.581); v(-2.396, -1.706, 2.509); v(-4.043, -1.716, 2.481); v(-4.054, -1.446, 2.49); v(-4.594, -1.568, 2.485); v(-4.451, -1.736, 2.566); v(0.563, -2.013, 0.245); v(0.855, 0.343, 0.245); v(1.311, -2.105, -0.834); v(1.745, 0.233, -0.611); v(1.018, -0.758, 0.353); v(1.468, -0.813, -0.897); v(0.583, -1.093, 3.224); v(0.607, -1.792, 2.91); v(1.264, -1.495, 2.305); v(1.24, -0.796, 2.619); v(2.335, -1.726, 2.686); v(2.678, -1.769, 1.811); v(2.774, -0.959, 1.811); v(2.431, -0.917, 2.686); v(4.758, -1.871, 2.357); v(4.493, -1.971, 1.865); v(4.81, -1.411, 2.357); v(2.94, -1.526, 3.718); v(2.952, -1.922, 3.539); v(2.881, -1.391, 3.165); v(1.995, 0.045, 0.56); v(2.156, -1.805, -0.183); v(2.415, -0.91, -0.13); v(3.419, -1.235, 1.579); v(1.97, -1.379, 2.408); v(4.52, -1.717, 1.865); v(2.887, -1.641, 3.051); v(3.359, -1.754, 1.579); v(1.958, -0.978, 2.589); v(-3.13, -0.938, -0.567); v(-3.443, -0.349, -0.567); v(-2.658, -0.687, -0.167); v(-2.97, -0.099, -0.167); v(-3.583, -0.423, 0.92); v(-3.27, -1.012, 0.92); v(-4.077, -0.685, 0.96); v(-3.764, -1.274, 0.96); v(-2.688, -0.703, 0.084); v(-3, -0.114, 0.084); v(-4.114, -1.556, 0.545); v(-4.501, -0.827, 0.545); v(-4.215, -1.514, 0.127); v(-4.528, -0.925, 0.127); v(-3.676, -1.228, -0.47); v(-3.989, -0.639, -0.47); v(-3.575, -1.579, 0.523); v(-4.225, -0.355, 0.523); v(-3.549, -0.079, -0.083); v(-2.998, -1.118, -0.083); v(-2.581, -0.269, 0.254); v(-4.418, -1.244, 0.647); v(-3.046, -0.327, 0.746); v(-2.89, -0.622, 0.746); v(-4.373, -1.794, 3.486); v(-4.132, -1.534, 3.127); v(-4.719, -1.46, 3.181); v(-4.666, -1.81, 3.593); v(-3.352, -1.857, 3.345); v(-2.897, -1.618, 3.354); v(-2.97, -1.462, 2.793); v(-3.309, -1.784, 3.044); v(3.399, -1.243, 3.009); v(3.634, -1.485, 3.329); v(3.579, -1.916, 3.309); v(3.353, -1.656, 2.994); v(5.197, -2, 1.955); v(5.151, -1.595, 1.764); v(5.46, -1.558, 2.338); v(5.421, -1.991, 2.498); v(5.686, -1.984, 3.294); v(5.767, -2.002, 3.255); v(5.981, -1.253, 3.29); v(5.763, -1.198, 3.391); v(4.365, -2.053, 4.143); v(4.502, -2.063, 3.939); v(4.315, -1.352, 3.788); v(4.264, -1.346, 3.863); v(-1.159, -0.661, 0.669); f2(8, 29, 3); f2(21, 25, 10); f2(27, 28, 6); f2(32, 0, 30); f2(7, 32, 2); f2(32, 7, 10); f2(30, 26, 19); f2(53, 50, 4); f2(52, 54, 1); f2(54, 51, 2); f2(54, 71, 53); f2(76, 64, 63); f2(77, 58, 55); f2(90, 94, 88); f2(94, 83, 85); f2(95, 91, 89); f2(93, 96, 79); f2(97, 92, 78); f2(88, 99, 90); f2(82, 100, 87); f2(87, 98, 81); f2(57, 73, 56); f2(36, 48, 35); f2(47, 46, 34); f2(36, 35, 15); f2(16, 34, 33); f2(16, 17, 18); f2(10, 18, 21); f2(22, 17, 6); f2(12, 0, 13); f2(33, 36, 15); f2(10, 25, 24); f2(3, 40, 39); f2(11, 38, 12); f2(65, 74, 72); f2(69, 71, 52); f2(71, 54, 52); f2(53, 71, 57); f2(53, 57, 56); f2(125, 66, 67); f2(125, 67, 122); f2(33, 15, 6); f2(15, 10, 6); f2(8, 14, 9); f2(14, 13, 9); f2(11, 14, 3); f2(14, 8, 3); f2(12, 13, 14); f2(12, 14, 11); f2(18, 17, 21); f2(17, 22, 21); f2(4, 19, 5); f2(19, 20, 5); f2(26, 27, 20); f2(26, 20, 19); f2(28, 29, 23); f2(26, 29, 28); f2(26, 28, 27); f2(35, 34, 16); f2(35, 16, 15); f2(0, 12, 37); f2(12, 38, 37); f2(42, 41, 37); f2(42, 37, 38); f2(43, 42, 38); f2(43, 38, 39); f2(40, 44, 39); f2(44, 43, 39); f2(37, 41, 44); f2(37, 44, 40); f2(46, 45, 34); f2(45, 33, 34); f2(45, 48, 36); f2(45, 36, 33); f2(56, 55, 53); f2(55, 50, 53); f2(49, 59, 53); f2(59, 62, 53); f2(59, 63, 65); f2(59, 65, 62); f2(67, 66, 56); f2(66, 55, 56); f2(61, 62, 72); f2(62, 65, 72); f2(9, 24, 29); f2(9, 29, 8); f2(23, 25, 22); f2(25, 21, 22); f2(29, 24, 81); f2(24, 79, 81); f2(23, 80, 25); f2(80, 78, 25); f2(24, 25, 79); f2(25, 78, 79); f2(29, 81, 80); f2(29, 80, 23); f2(85, 83, 84); f2(83, 82, 84); f2(91, 93, 92); f2(91, 92, 90); f2(46, 103, 45); f2(103, 102, 45); f2(104, 103, 47); f2(103, 46, 47); f2(105, 104, 48); f2(104, 47, 48); f2(45, 102, 48); f2(102, 105, 48); f2(103, 104, 102); f2(104, 105, 102); f2(42, 107, 41); f2(107, 106, 41); f2(43, 108, 42); f2(108, 107, 42); f2(109, 108, 44); f2(108, 43, 44); f2(106, 109, 41); f2(109, 44, 41); f2(106, 107, 109); f2(107, 108, 109); f2(75, 113, 67); f2(113, 112, 67); f2(110, 113, 68); f2(113, 75, 68); f2(110, 111, 113); f2(111, 112, 113); f2(74, 115, 114); f2(74, 114, 64); f2(116, 115, 65); f2(115, 74, 65); f2(64, 114, 63); f2(114, 117, 63); f2(115, 116, 114); f2(116, 117, 114); f2(119, 118, 117); f2(118, 63, 117); f2(120, 119, 116); f2(119, 117, 116); f2(65, 121, 116); f2(121, 120, 116); f2(63, 118, 65); f2(118, 121, 65); f2(119, 120, 118); f2(120, 121, 118); f2(123, 122, 112); f2(122, 67, 112); f2(111, 124, 112); f2(124, 123, 112); f2(66, 125, 111); f2(125, 124, 111); f2(122, 123, 125); f2(123, 124, 125); f2(81, 98, 80); f2(98, 86, 80); f2(98, 101, 86); f2(101, 83, 86); f2(82, 83, 100); f2(83, 101, 100); f2(87, 100, 98); f2(100, 101, 98); f2(90, 99, 91); f2(99, 89, 91); f2(85, 84, 99); f2(84, 89, 99); f2(91, 95, 93); f2(95, 96, 93); f2(82, 87, 96); f2(82, 96, 95); f2(89, 84, 95); f2(84, 82, 95); f2(83, 94, 97); f2(83, 97, 86); f2(90, 92, 94); f2(92, 97, 94); f2(78, 92, 93); f2(78, 93, 79); f2(94, 85, 88); f2(85, 99, 88); f2(81, 79, 96); f2(81, 96, 87); f2(80, 86, 97); f2(80, 97, 78); f2(55, 66, 77); f2(66, 68, 77); f2(63, 59, 76); f2(59, 60, 76); f2(75, 73, 68); f2(73, 77, 68); f2(57, 58, 77); f2(57, 77, 73); f2(67, 56, 73); f2(67, 73, 75); f2(61, 72, 60); f2(72, 76, 60); f2(74, 64, 76); f2(74, 76, 72); f2(53, 62, 61); f2(53, 61, 71); f2(60, 70, 71); f2(60, 71, 61); f2(51, 54, 70); f2(54, 71, 70); f2(49, 70, 60); f2(49, 60, 59); f2(50, 55, 58); f2(50, 58, 69); f2(58, 57, 69); f2(57, 71, 69); f2(4, 5, 53); f2(5, 49, 53); f2(69, 52, 50); f2(52, 1, 50); f2(70, 49, 51); f2(49, 2, 51); f2(48, 47, 35); f2(47, 34, 35); f2(3, 39, 11); f2(39, 38, 11); f2(20, 27, 31); f2(27, 6, 31); f2(7, 31, 10); f2(31, 6, 10); f2(0, 3, 26); f2(0, 26, 30); f2(29, 26, 3); f2(22, 6, 28); f2(22, 28, 23); f2(5, 20, 31); f2(5, 31, 7); f2(4, 32, 30); f2(4, 30, 19); f2(16, 18, 15); f2(18, 10, 15); f2(33, 6, 17); f2(33, 17, 16); f2(32, 10, 24); f2(24, 0, 32); f2(9, 0, 24); f2(13, 0, 9); f2(7, 2, 5); f2(2, 49, 5); f2(32, 4, 1); f2(4, 50, 1); f2(32, 1, 54); f2(32, 54, 2); f2(110, 68, 66); f2(110, 66, 111); f2(40, 126, 37); f2(126, 0, 37); f2(0, 126, 3); f2(126, 40, 3); x = 0; y = -40; z = 0; rotationX = 0; rotationY = -30; rotationZ = 0; break; case 11: v(1.57, 0.275, -0.117); v(1.356, -2.822, -1.579); v(-1.251, -2.985, -1.04); v(1.023, 0.025, 0.768); v(1.141, -3.258, -0.004); v(-1.202, -2.891, 0.211); v(1.072, -1.847, -0.655); v(0.802, 0.815, 0.647); v(1.076, 0.94, 0.204); v(-0.08, 0.258, -1.375); v(1.671, -0.164, 1.28); v(1.996, 0.04, 0.804); v(1.542, 0.625, 0.456); v(1.416, 0.567, 0.663); v(-0.746, 0.17, -1.562); v(-1.05, -0.168, -0.941); v(-0.724, 0.598, -0.704); v(-0.579, 0.644, -1.014); v(0.876, -1.718, 0.385); v(-0.688, -1.455, 0.157); v(-0.186, 0.969, -0.802); v(-0.477, 0.663, -0.187); v(0.889, 1.027, 0.001); v(0.192, 1.156, -0.413); v(0.87, -1.262, 1.004); v(-0.552, -0.94, 0.67); v(0.033, 0.636, 0.271); v(0.282, 0.59, 0.419); v(1.16, -1.012, 0.094); v(-0.644, -0.173, -0.319); v(-0.64, -1.541, -0.899); v(-0.737, -1.133, -1.706); v(-1.349, -1.012, -2.027); v(-0.895, -1.01, -2.302); v(-0.521, -1.023, -2.154); v(1.768, -1.79, 1.468); v(1.961, -1.868, 1.762); v(1.808, -1.436, 1.958); v(1.479, -1.218, 1.433); v(0.454, -2, 1.035); v(0.414, -2.125, 1.318); v(0.292, -1.608, 1.312); v(0.392, -1.587, 1.043); v(-1.286, -3.044, -2.253); v(-1.496, -2.981, -2.411); v(-1.165, -2.905, -2.82); v(-1.031, -3.02, -2.582); v(-1.024, -3.6, 0.706); v(1.214, -4.338, -0.554); v(-1.35, -4.313, -0.68); v(1.275, -3.687, -1.696); v(-0.138, -3.87, -0.161); v(-0.12, -3.67, -1.476); v(0.48, -6.213, -2.34); v(-0.282, -6.139, -2.337); v(-0.233, -5.614, -2.77); v(0.53, -5.685, -2.774); v(-0.792, -5.408, 1.487); v(-0.906, -5.878, 0.462); v(-0.291, -5.922, 0.465); v(0.141, -5.483, 1.485); v(-0.811, -7.954, 0.181); v(-0.73, -7.514, -0.167); v(-0.348, -7.965, 0.187); v(-0.042, -6.443, -4.747); v(-0.473, -6.389, -4.74); v(0.037, -5.749, -4.283); v(0.717, -4.571, -2.143); v(-1.143, -4.945, 0.028); v(-0.172, -4.598, -2.253); v(-0.248, -5.124, 0.151); v(-0.28, -6.432, -0.005); v(-0.099, -5.483, -3.468); v(-0.475, -7.518, -0.163); v(-0.233, -5.798, -4.29); v(-0.791, -6.331, 0.002); v(0.339, -5.525, -3.473); v(0.116, 1.569, 0.481); v(0.531, 1.352, -0.237); v(0.864, 1.198, 0.701); v(0.911, 1.195, 0.036); v(1.623, 2.268, 0.082); v(1.577, 2.271, 0.747); v(1.435, 2.796, 0.066); v(1.388, 2.799, 0.731); v(1.08, 1.331, 0.716); v(1.126, 1.328, 0.051); v(0.826, 3.035, 0.776); v(0.884, 3.032, -0.048); v(0.422, 2.93, 0.663); v(0.469, 2.927, -0.002); v(0.124, 2.131, 0.646); v(0.17, 2.128, -0.02); v(0.975, 2.602, 1.062); v(1.071, 2.596, -0.321); v(0.805, 1.687, -0.262); v(0.723, 1.692, 0.911); v(1.378, 1.125, 0.404); v(0.899, 3.186, 0.361); v(1.662, 1.724, 0.254); v(1.639, 1.725, 0.586); v(-1.077, -3.911, -2.826); v(-1.411, -3.575, -2.653); v(-1.123, -3.452, -3.158); v(-0.895, -3.938, -3.079); v(-0.223, -2.334, 0.515); v(-0.072, -2.458, 1.056); v(-0.222, -1.891, 1.043); v(0.086, -2.052, 0.538); v(0.085, -5.69, -5.1); v(-0.007, -6.394, -5.104); v(-0.42, -6.259, -5.086); v(-0.329, -5.645, -5.093); v(-0.883, -8.086, -0.43); v(-0.482, -8.007, -0.619); v(-0.369, -8.483, 0.2); v(-0.832, -8.47, 0.209); v(-1.058, -8.32, 1.004); v(-1.057, -8.411, 1.009); v(-0.344, -8.412, 1.324); v(-0.34, -8.166, 1.309); v(-0.737, -7.252, -5.073); v(-0.758, -7.273, -5.317); v(-0.017, -7.168, -5.379); v(-0.007, -7.161, -5.289); v(2.234, -1.263, 1.372); v(2.217, -1.281, 1.818); f2(1, 6, 4); f2(30, 2, 5); f2(18, 4, 6); f2(5, 19, 30); f2(7, 27, 3); f2(26, 21, 29); f2(20, 23, 9); f2(8, 0, 22); f2(25, 26, 29); f2(27, 24, 3); f2(28, 0, 3); f2(6, 0, 28); f2(30, 29, 9); f2(30, 1, 2); f2(30, 6, 1); f2(9, 0, 30); f2(30, 0, 6); f2(28, 24, 18); f2(6, 28, 18); f2(28, 3, 24); f2(29, 19, 25); f2(29, 30, 19); f2(51, 4, 5); f2(47, 51, 5); f2(51, 48, 4); f2(52, 2, 1); f2(50, 52, 1); f2(52, 49, 2); f2(50, 67, 52); f2(67, 56, 55); f2(67, 48, 53); f2(56, 67, 53); f2(67, 50, 48); f2(68, 57, 47); f2(49, 68, 47); f2(68, 58, 57); f2(58, 68, 59); f2(68, 49, 52); f2(69, 54, 51); f2(52, 69, 51); f2(69, 55, 54); f2(70, 51, 60); f2(59, 70, 60); f2(70, 52, 51); f2(55, 69, 67); f2(69, 52, 67); f2(52, 70, 68); f2(70, 59, 68); f2(59, 71, 58); f2(71, 73, 62); f2(63, 73, 60); f2(54, 74, 65); f2(74, 72, 66); f2(72, 55, 56); f2(75, 61, 57); f2(58, 75, 57); f2(75, 62, 61); f2(76, 53, 64); f2(66, 76, 64); f2(76, 56, 53); f2(62, 75, 71); f2(75, 58, 71); f2(56, 76, 72); f2(76, 66, 72); f2(79, 85, 77); f2(86, 80, 78); f2(93, 84, 87); f2(89, 93, 87); f2(93, 82, 84); f2(82, 93, 85); f2(93, 89, 91); f2(94, 88, 83); f2(81, 94, 83); f2(94, 90, 88); f2(90, 94, 92); f2(94, 81, 86); f2(92, 95, 78); f2(95, 86, 78); f2(86, 95, 94); f2(95, 92, 94); f2(85, 96, 77); f2(96, 91, 77); f2(91, 96, 93); f2(96, 85, 93); f2(98, 84, 83); f2(88, 98, 83); f2(98, 87, 84); f2(98, 90, 89); f2(87, 98, 89); f2(98, 88, 90); f2(99, 81, 82); f2(81, 99, 86); f2(99, 97, 86); f2(97, 100, 85); f2(100, 82, 85); f2(82, 100, 99); f2(100, 97, 99); f2(86, 97, 80); f2(79, 80, 97); f2(79, 97, 85); f2(121, 122, 124); f2(122, 123, 124); f2(65, 121, 124); f2(65, 124, 64); f2(64, 124, 110); f2(124, 123, 110); f2(110, 123, 111); f2(123, 122, 111); f2(111, 122, 121); f2(111, 121, 65); f2(117, 118, 119); f2(117, 119, 120); f2(61, 117, 63); f2(117, 120, 63); f2(63, 120, 115); f2(120, 119, 115); f2(115, 119, 118); f2(115, 118, 116); f2(116, 118, 117); f2(116, 117, 61); f2(113, 114, 115); f2(113, 115, 116); f2(62, 113, 61); f2(113, 116, 61); f2(63, 115, 114); f2(63, 114, 73); f2(73, 114, 62); f2(114, 113, 62); f2(109, 110, 112); f2(110, 111, 112); f2(66, 109, 112); f2(66, 112, 74); f2(74, 112, 65); f2(112, 111, 65); f2(64, 110, 109); f2(64, 109, 66); f2(39, 105, 108); f2(39, 108, 42); f2(42, 108, 107); f2(42, 107, 41); f2(41, 107, 40); f2(107, 106, 40); f2(40, 106, 39); f2(106, 105, 39); f2(101, 102, 103); f2(101, 103, 104); f2(43, 101, 46); f2(101, 104, 46); f2(46, 104, 103); f2(46, 103, 45); f2(45, 103, 102); f2(45, 102, 44); f2(44, 102, 43); f2(102, 101, 43); f2(89, 90, 92); f2(89, 92, 91); f2(83, 84, 82); f2(83, 82, 81); f2(26, 27, 80); f2(26, 80, 79); f2(22, 23, 78); f2(23, 77, 78); f2(27, 22, 80); f2(22, 78, 80); f2(21, 26, 23); f2(21, 23, 20); f2(7, 8, 22); f2(7, 22, 27); f2(55, 72, 54); f2(72, 74, 54); f2(60, 73, 71); f2(60, 71, 59); f2(54, 65, 64); f2(54, 64, 53); f2(57, 61, 60); f2(61, 63, 60); f2(51, 54, 53); f2(51, 53, 48); f2(1, 4, 48); f2(1, 48, 50); f2(31, 43, 46); f2(31, 46, 34); f2(34, 46, 33); f2(46, 45, 33); f2(33, 45, 32); f2(45, 44, 32); f2(32, 44, 43); f2(32, 43, 31); f2(35, 39, 38); f2(39, 42, 38); f2(37, 41, 40); f2(37, 40, 36); f2(36, 40, 39); f2(36, 39, 35); f2(0, 35, 38); f2(0, 38, 3); f2(3, 38, 10); f2(38, 37, 10); f2(29, 31, 9); f2(31, 34, 9); f2(9, 34, 14); f2(34, 33, 14); f2(14, 33, 32); f2(14, 32, 15); f2(15, 32, 31); f2(15, 31, 29); f2(25, 24, 27); f2(25, 27, 26); f2(24, 25, 18); f2(25, 19, 18); f2(0, 9, 23); f2(0, 23, 22); f2(4, 18, 5); f2(18, 19, 5); f2(14, 15, 17); f2(15, 16, 17); f2(9, 14, 17); f2(9, 17, 20); f2(20, 17, 16); f2(20, 16, 21); f2(21, 16, 29); f2(16, 15, 29); f2(10, 11, 12); f2(10, 12, 13); f2(3, 10, 13); f2(3, 13, 7); f2(7, 13, 8); f2(13, 12, 8); f2(11, 0, 12); f2(0, 8, 12); f2(47, 57, 60); f2(47, 60, 51); f2(5, 2, 49); f2(5, 49, 47); f2(0, 125, 35); f2(125, 36, 35); f2(125, 0, 11); f2(37, 126, 10); f2(126, 11, 10); f2(11, 126, 125); f2(36, 125, 126); f2(36, 126, 37); f2(38, 42, 41); f2(38, 41, 37); f2(105, 106, 107); f2(105, 107, 108); f2(26, 79, 77); f2(26, 77, 23); f2(77, 91, 92); f2(77, 92, 78); x = 0; y = 20; z = 0; rotationX = 0; rotationY = 80; rotationZ = 0; break; default: v(1, 0.102, -1.151); v(1.39, -3.108, -1.332); v(-1.302, -3.108, -1.332); v(1, 0.102, -0.081); v(1.217, -2.875, 0.294); v(-1.151, -2.875, 0.294); v(-1, 0.102, -0.081); v(0.694, -1.896, -0.536); v(-0.716, -1.896, -0.536); v(0.828, 0.895, -0.253); v(0.828, 0.895, -0.789); v(-1, 0.102, -1.151); v(1.665, 0.102, -0.39); v(1.665, 0.102, -0.946); v(1.396, 0.802, -0.789); v(1.398, 0.802, -0.54); v(-1.676, 0.102, -0.946); v(-1.676, 0.102, -0.39); v(-1.2, 0.809, -0.54); v(-1.212, 0.712, -0.789); v(0.809, -1.503, 0.26); v(-0.772, -1.503, 0.26); v(-0.706, 0.895, -0.789); v(-0.706, 0.895, -0.253); v(0.179, 0.719, -0.081); v(-0.114, 0.719, -0.081); v(0.414, 1.142, -0.789); v(-0.407, 1.142, -0.789); v(0.761, -1.178, 0.685); v(-0.724, -1.178, 0.685); v(-0.529, -0.17, 0.244); v(0.547, -0.17, 0.244); v(1.027, -0.826, -0.138); v(-0.991, -0.826, -0.138); v(-0.011, -1.896, -0.536); v(-1.177, -1.872, -0.579); v(-1.815, -1.872, -0.5); v(-1.676, -2.034, -0.925); v(-1.192, -2.034, -1.131); v(1.199, -2.034, -1.131); v(1.665, -2.034, -0.925); v(1.871, -1.872, -0.5); v(1.174, -1.872, -0.579); v(1.53, -3.91, -0.163); v(1.818, -3.91, -0.285); v(1.818, -3.748, 0.221); v(1.53, -3.748, 0.221); v(-1.477, -3.749, 0.221); v(-1.748, -3.749, 0.221); v(-1.748, -3.91, -0.285); v(-1.477, -3.91, -0.163); v(-1.302, -3.482, 0.058); v(1.39, -3.482, 0.058); v(-1.302, -3.821, -1.213); v(1.39, -3.821, -1.213); v(0, -3.798, 0.058); v(0, -3.798, -1.272); v(0.834, -6.114, 0.152); v(0.068, -6.109, 0.152); v(0.068, -6.482, -0.712); v(0.834, -6.486, -0.712); v(-0.8, -6.114, 0.152); v(-0.8, -6.486, -0.712); v(0.016, -6.482, -0.712); v(0.016, -6.109, 0.152); v(-0.533, -8.53, -0.105); v(-0.47, -8.271, -0.605); v(-0.07, -8.526, -0.105); v(0.555, -8.53, -0.105); v(0.12, -8.526, -0.105); v(0.454, -8.271, -0.605); v(0.917, -4.798, -0.875); v(-0.9, -4.798, -0.875); v(0.034, -4.953, -0.875); v(0.008, -4.953, -0.875); v(-0.179, -7.162, -0.924); v(0.19, -7.162, -0.924); v(-0.215, -8.267, -0.605); v(0.18, -8.267, -0.605); v(-0.701, -7.166, -0.924); v(0.63, -7.166, -0.924); v(-0.333, 1.399, -0.591); v(0.333, 1.399, -0.591); v(-0.333, 1.244, 0.059); v(0.333, 1.244, 0.059); v(0.333, 2.473, 0.449); v(-0.333, 2.473, 0.449); v(0.333, 2.928, 0.122); v(-0.333, 2.928, 0.122); v(-0.333, 1.431, 0.23); v(0.333, 1.431, 0.23); v(-0.418, 3.001, -0.479); v(0.407, 3.001, -0.479); v(-0.333, 2.786, -0.845); v(0.333, 2.786, -0.845); v(-0.333, 1.936, -0.912); v(0.333, 1.936, -0.912); v(-0.692, 2.63, -0.198); v(0.694, 2.63, -0.198); v(0.622, 1.684, -0.199); v(-0.554, 1.684, -0.199); v(0, 1.311, 0.551); v(0, 3.16, -0.479); v(0.167, 1.963, 0.648); v(-0.167, 1.963, 0.648); v(-1.448, -4.8, 0.087); v(-1.685, -4.391, 0.264); v(-1.785, -4.553, -0.299); v(-1.448, -4.962, -0.181); v(1.478, -4.962, -0.181); v(1.766, -4.553, -0.299); v(1.766, -4.391, 0.264); v(1.478, -4.8, 0.087); v(0.592, -8.905, -0.825); v(0.55, -8.905, -0.104); v(0.115, -8.901, -0.104); v(0.175, -8.901, -0.818); v(-0.607, -8.905, -0.605); v(-0.21, -8.901, -0.818); v(-0.065, -8.901, -0.105); v(-0.528, -8.905, -0.105); v(-0.776, -8.815, 0.692); v(-0.771, -8.906, 0.692); v(-0.065, -8.902, 1.022); v(-0.07, -8.656, 1.022); v(0.12, -8.654, 1.022); v(0.115, -8.9, 1.023); v(0.789, -8.905, 0.692); v(0.793, -8.814, 0.692); f2(1, 7, 4); f2(8, 2, 5); f2(20, 4, 7); f2(5, 21, 8); f2(9, 24, 3); f2(25, 23, 6); f2(22, 27, 11); f2(10, 0, 26); f2(29, 30, 6); f2(30, 25, 6); f2(24, 31, 3); f2(31, 28, 3); f2(32, 0, 3); f2(7, 0, 32); f2(8, 33, 11); f2(33, 6, 11); f2(34, 1, 2); f2(8, 34, 2); f2(34, 7, 1); f2(11, 0, 34); f2(34, 0, 7); f2(34, 8, 11); f2(32, 28, 20); f2(7, 32, 20); f2(32, 3, 28); f2(33, 21, 29); f2(6, 33, 29); f2(33, 8, 21); f2(55, 4, 5); f2(51, 55, 5); f2(55, 52, 4); f2(56, 2, 1); f2(54, 56, 1); f2(56, 53, 2); f2(54, 71, 56); f2(71, 60, 59); f2(71, 52, 57); f2(60, 71, 57); f2(71, 54, 52); f2(72, 61, 51); f2(53, 72, 51); f2(72, 62, 61); f2(62, 72, 63); f2(72, 53, 56); f2(73, 58, 55); f2(56, 73, 55); f2(73, 59, 58); f2(74, 55, 64); f2(63, 74, 64); f2(74, 56, 55); f2(59, 73, 71); f2(73, 56, 71); f2(56, 74, 72); f2(74, 63, 72); f2(63, 75, 62); f2(75, 77, 66); f2(67, 77, 64); f2(58, 78, 69); f2(78, 76, 70); f2(76, 59, 60); f2(79, 65, 61); f2(62, 79, 61); f2(79, 66, 65); f2(80, 57, 68); f2(70, 80, 68); f2(80, 60, 57); f2(66, 79, 75); f2(79, 62, 75); f2(60, 80, 76); f2(80, 70, 76); f2(83, 89, 81); f2(90, 84, 82); f2(81, 95, 82); f2(96, 82, 95); f2(97, 88, 91); f2(93, 97, 91); f2(97, 86, 88); f2(86, 97, 89); f2(97, 93, 95); f2(98, 92, 87); f2(85, 98, 87); f2(98, 94, 92); f2(94, 98, 96); f2(98, 85, 90); f2(96, 99, 82); f2(99, 90, 82); f2(90, 99, 98); f2(99, 96, 98); f2(89, 100, 81); f2(100, 95, 81); f2(95, 100, 97); f2(100, 89, 97); f2(102, 88, 87); f2(92, 102, 87); f2(102, 91, 88); f2(102, 94, 93); f2(91, 102, 93); f2(102, 92, 94); f2(103, 85, 86); f2(85, 103, 90); f2(103, 101, 90); f2(101, 104, 89); f2(104, 86, 89); f2(86, 104, 103); f2(104, 101, 103); f2(90, 101, 84); f2(83, 84, 101); f2(83, 101, 89); f2(125, 126, 128); f2(126, 127, 128); f2(69, 125, 128); f2(69, 128, 68); f2(68, 128, 114); f2(128, 127, 114); f2(114, 127, 115); f2(127, 126, 115); f2(115, 126, 125); f2(115, 125, 69); f2(121, 122, 123); f2(121, 123, 124); f2(65, 121, 67); f2(121, 124, 67); f2(67, 124, 119); f2(124, 123, 119); f2(119, 123, 122); f2(119, 122, 120); f2(120, 122, 121); f2(120, 121, 65); f2(117, 118, 119); f2(117, 119, 120); f2(66, 117, 65); f2(117, 120, 65); f2(67, 119, 118); f2(67, 118, 77); f2(77, 118, 66); f2(118, 117, 66); f2(113, 114, 116); f2(114, 115, 116); f2(70, 113, 116); f2(70, 116, 78); f2(78, 116, 69); f2(116, 115, 69); f2(68, 114, 113); f2(68, 113, 70); f2(109, 110, 112); f2(110, 111, 112); f2(43, 109, 112); f2(43, 112, 46); f2(46, 112, 111); f2(46, 111, 45); f2(45, 111, 44); f2(111, 110, 44); f2(44, 110, 43); f2(110, 109, 43); f2(105, 106, 107); f2(105, 107, 108); f2(47, 105, 50); f2(105, 108, 50); f2(50, 108, 107); f2(50, 107, 49); f2(49, 107, 106); f2(49, 106, 48); f2(48, 106, 47); f2(106, 105, 47); f2(93, 94, 96); f2(93, 96, 95); f2(87, 88, 86); f2(87, 86, 85); f2(25, 24, 84); f2(25, 84, 83); f2(26, 27, 82); f2(27, 81, 82); f2(27, 25, 83); f2(27, 83, 81); f2(24, 26, 84); f2(26, 82, 84); f2(23, 25, 27); f2(23, 27, 22); f2(9, 10, 26); f2(9, 26, 24); f2(59, 76, 58); f2(76, 78, 58); f2(64, 77, 75); f2(64, 75, 63); f2(58, 69, 68); f2(58, 68, 57); f2(61, 65, 64); f2(65, 67, 64); f2(51, 61, 55); f2(61, 64, 55); f2(55, 58, 57); f2(55, 57, 52); f2(1, 4, 52); f2(1, 52, 54); f2(5, 2, 51); f2(2, 53, 51); f2(35, 47, 50); f2(35, 50, 38); f2(38, 50, 37); f2(50, 49, 37); f2(37, 49, 36); f2(49, 48, 36); f2(36, 48, 47); f2(36, 47, 35); f2(39, 43, 42); f2(43, 46, 42); f2(42, 46, 41); f2(46, 45, 41); f2(41, 45, 44); f2(41, 44, 40); f2(40, 44, 43); f2(40, 43, 39); f2(0, 39, 42); f2(0, 42, 3); f2(3, 42, 12); f2(42, 41, 12); f2(12, 41, 13); f2(41, 40, 13); f2(39, 0, 13); f2(39, 13, 40); f2(6, 35, 11); f2(35, 38, 11); f2(11, 38, 16); f2(38, 37, 16); f2(16, 37, 36); f2(16, 36, 17); f2(17, 36, 35); f2(17, 35, 6); f2(29, 28, 31); f2(29, 31, 30); f2(25, 30, 31); f2(25, 31, 24); f2(28, 29, 20); f2(29, 21, 20); f2(0, 11, 27); f2(0, 27, 26); f2(4, 20, 5); f2(20, 21, 5); f2(16, 17, 19); f2(17, 18, 19); f2(11, 16, 19); f2(11, 19, 22); f2(22, 19, 18); f2(22, 18, 23); f2(23, 18, 6); f2(18, 17, 6); f2(12, 13, 14); f2(12, 14, 15); f2(3, 12, 15); f2(3, 15, 9); f2(9, 15, 10); f2(15, 14, 10); f2(13, 0, 14); f2(0, 10, 14); x = 0; y = 25; z = 0; rotationX = 0; rotationY = 0; rotationZ = 0; break; }; scaleX = 1; scaleY = 1; scaleZ = 1; } public function f(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number, _arg9:Number, _arg10:Number, _arg11:Number, _arg12:Number):void{ var _local13:Triangle3D = new Triangle3D(this, [ve[_arg1], ve[_arg2], ve[_arg3]], null, [new NumberUV(_arg4, _arg5), new NumberUV(_arg6, _arg7), new NumberUV(_arg8, _arg9)]); _local13.faceNormal = new Number3D(_arg10, _arg11, _arg12); fa.push(_local13); } public function v(_arg1:Number, _arg2:Number, _arg3:Number):void{ ve.push(new Vertex3D(_arg1, _arg2, _arg3)); } public function f2(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:MaterialObject3D=null):void{ var _local5:NumberUV = new NumberUV(1, 1); var _local6:Triangle3D = new Triangle3D(this, [ve[_arg1], ve[_arg2], ve[_arg3]], _arg4, [_local5, _local5, _local5]); fa.push(_local6); } } }//package org.ascollada
Section 5
//Camera3D (org.papervision3d.cameras.Camera3D) package org.papervision3d.cameras { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import flash.utils.*; import org.papervision3d.core.culling.*; public class Camera3D extends CameraObject3D { protected var _focusFix:Matrix3D; protected var _prevUseProjection:Boolean; protected var _prevZoom:Number; protected var _prevOrtho:Boolean; protected var _prevWidth:Number; protected var _prevHeight:Number; protected var _prevFocus:Number; protected var _projection:Matrix3D; protected var _prevOrthoProjection:Boolean; public function Camera3D(_arg1:Number=60, _arg2:Number=10, _arg3:Number=5000, _arg4:Boolean=false, _arg5:Boolean=false){ super(_arg2, 40); this.fov = _arg1; _prevFocus = 0; _prevZoom = 0; _prevOrtho = false; _prevUseProjection = false; _useCulling = _arg4; _useProjectionMatrix = _arg5; _far = _arg3; _focusFix = Matrix3D.IDENTITY; } public function update(_arg1:Rectangle):void{ if (!_arg1){ throw (new Error(("Camera3D#update: Invalid viewport rectangle! " + _arg1))); }; this.viewport = _arg1; _prevFocus = this.focus; _prevZoom = this.zoom; _prevWidth = this.viewport.width; _prevHeight = this.viewport.height; if (_prevOrtho != this.ortho){ if (this.ortho){ _prevOrthoProjection = this.useProjectionMatrix; this.useProjectionMatrix = true; } else { this.useProjectionMatrix = _prevOrthoProjection; }; }; this.useProjectionMatrix = this._useProjectionMatrix; _prevOrtho = this.ortho; _prevUseProjection = _useProjectionMatrix; this.useCulling = _useCulling; } public function get projection():Matrix3D{ return (_projection); } override public function set near(_arg1:Number):void{ if (_arg1 > 0){ this.focus = _arg1; this.update(this.viewport); }; } override public function orbit(_arg1:Number, _arg2:Number, _arg3:Boolean=true, _arg4:DisplayObject3D=null):void{ var _local8:Number; var _local11:Number; _arg4 = ((_arg4) || (_target)); _arg4 = ((_arg4) || (DisplayObject3D.ZERO)); if (_arg3){ _arg1 = (_arg1 * (Math.PI / 180)); _arg2 = (_arg2 * (Math.PI / 180)); }; var _local5:Number = (_arg4.world.n14 - this.x); var _local6:Number = (_arg4.world.n24 - this.y); var _local7:Number = (_arg4.world.n34 - this.z); _local8 = Math.sqrt((((_local5 * _local5) + (_local6 * _local6)) + (_local7 * _local7))); var _local9:Number = (Math.cos(_arg2) * Math.sin(_arg1)); var _local10:Number = (Math.sin(_arg2) * Math.sin(_arg1)); _local11 = Math.cos(_arg1); this.x = (_arg4.world.n14 + (_local9 * _local8)); this.y = (_arg4.world.n24 + (_local11 * _local8)); this.z = (_arg4.world.n34 + (_local10 * _local8)); this.lookAt(_arg4); } override public function set useCulling(_arg1:Boolean):void{ super.useCulling = _arg1; if (_useCulling){ if (!this.culler){ this.culler = new FrustumCuller(); }; FrustumCuller(this.culler).initialize(this.fov, (this.viewport.width / this.viewport.height), (this.focus / this.zoom), _far); } else { this.culler = null; }; } override public function projectFaces(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{ var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; var _local21:Number; var _local22:Number; var _local23:Number; var _local24:Vertex3D; var _local25:Vertex3DInstance; var _local26:Number; var _local34:Array; var _local36:Triangle3D; var _local4:Matrix3D = _arg2.view; var _local5:Number = _local4.n11; var _local6:Number = _local4.n12; var _local7:Number = _local4.n13; var _local8:Number = _local4.n21; var _local9:Number = _local4.n22; var _local10:Number = _local4.n23; var _local11:Number = _local4.n31; var _local12:Number = _local4.n32; var _local13:Number = _local4.n33; var _local14:Number = _local4.n41; var _local15:Number = _local4.n42; var _local16:Number = _local4.n43; var _local27:int; var _local28:Number = _arg3.camera.focus; var _local29:Number = (_local28 * _arg3.camera.zoom); var _local30:Number = (viewport.width / 2); var _local31:Number = (viewport.height / 2); var _local32:Number = _arg3.camera.far; var _local33:Number = (_local32 - _local28); var _local35:Number = getTimer(); for each (_local36 in _arg1) { _local34 = _local36.vertices; _local27 = _local34.length; while ((_local24 = _local34[--_local27])) { if (_local24.timestamp == _local35){ } else { _local24.timestamp = _local35; _local17 = _local24.x; _local18 = _local24.y; _local19 = _local24.z; _local22 = ((((_local17 * _local11) + (_local18 * _local12)) + (_local19 * _local13)) + _local4.n34); _local25 = _local24.vertex3DInstance; if (_useProjectionMatrix){ _local23 = ((((_local17 * _local14) + (_local18 * _local15)) + (_local19 * _local16)) + _local4.n44); _local22 = (_local22 / _local23); if ((_local25.visible = (((_local22 > 0)) && ((_local22 < 1))))){ _local20 = (((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14) / _local23); _local21 = (((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24) / _local23); _local25.x = (_local20 * _local30); _local25.y = (_local21 * _local31); _local25.z = (_local22 * _local23); }; } else { if ((_local25.visible = ((_local28 + _local22) > 0))){ _local20 = ((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14); _local21 = ((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24); _local26 = (_local29 / (_local28 + _local22)); _local25.x = (_local20 * _local26); _local25.y = (_local21 * _local26); _local25.z = _local22; }; }; }; }; }; return (0); } override public function set orthoScale(_arg1:Number):void{ super.orthoScale = _arg1; this.useProjectionMatrix = this.useProjectionMatrix; _prevOrtho = !(this.ortho); this.update(this.viewport); } override public function transformView(_arg1:Matrix3D=null):void{ if (((((((((((!((ortho == _prevOrtho))) || (!((_prevUseProjection == _useProjectionMatrix))))) || (!((focus == _prevFocus))))) || (!((zoom == _prevZoom))))) || (!((viewport.width == _prevWidth))))) || (!((viewport.height == _prevHeight))))){ update(viewport); }; if (_target){ lookAt(_target); } else { if (_transformDirty){ updateTransform(); }; }; if (_useProjectionMatrix){ super.transformView(); this.eye.calculateMultiply4x4(_projection, this.eye); } else { _focusFix.copy(this.transform); _focusFix.n14 = (_focusFix.n14 + (focus * this.transform.n13)); _focusFix.n24 = (_focusFix.n24 + (focus * this.transform.n23)); _focusFix.n34 = (_focusFix.n34 + (focus * this.transform.n33)); super.transformView(_focusFix); }; if ((culler is FrustumCuller)){ FrustumCuller(culler).transform.copy(this.transform); }; } override public function set far(_arg1:Number):void{ if (_arg1 > this.focus){ _far = _arg1; this.update(this.viewport); }; } override public function projectVertices(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{ var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; var _local21:Number; var _local22:Number; var _local23:Number; var _local24:Vertex3D; var _local25:Vertex3DInstance; var _local26:Number; var _local4:Matrix3D = _arg2.view; var _local5:Number = _local4.n11; var _local6:Number = _local4.n12; var _local7:Number = _local4.n13; var _local8:Number = _local4.n21; var _local9:Number = _local4.n22; var _local10:Number = _local4.n23; var _local11:Number = _local4.n31; var _local12:Number = _local4.n32; var _local13:Number = _local4.n33; var _local14:Number = _local4.n41; var _local15:Number = _local4.n42; var _local16:Number = _local4.n43; var _local27:int = _arg1.length; var _local28:Number = _arg3.camera.focus; var _local29:Number = (_local28 * _arg3.camera.zoom); var _local30:Number = (viewport.width / 2); var _local31:Number = (viewport.height / 2); var _local32:Number = _arg3.camera.far; var _local33:Number = (_local32 - _local28); while ((_local24 = _arg1[--_local27])) { _local17 = _local24.x; _local18 = _local24.y; _local19 = _local24.z; _local22 = ((((_local17 * _local11) + (_local18 * _local12)) + (_local19 * _local13)) + _local4.n34); _local25 = _local24.vertex3DInstance; if (_useProjectionMatrix){ _local23 = ((((_local17 * _local14) + (_local18 * _local15)) + (_local19 * _local16)) + _local4.n44); _local22 = (_local22 / _local23); if ((_local25.visible = (((_local22 > 0)) && ((_local22 < 1))))){ _local20 = (((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14) / _local23); _local21 = (((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24) / _local23); _local25.x = (_local20 * _local30); _local25.y = (_local21 * _local31); _local25.z = (_local22 * _local23); }; } else { if ((_local25.visible = ((_local28 + _local22) > 0))){ _local20 = ((((_local17 * _local5) + (_local18 * _local6)) + (_local19 * _local7)) + _local4.n14); _local21 = ((((_local17 * _local8) + (_local18 * _local9)) + (_local19 * _local10)) + _local4.n24); _local26 = (_local29 / (_local28 + _local22)); _local25.x = (_local20 * _local26); _local25.y = (_local21 * _local26); _local25.z = _local22; }; }; }; return (0); } override public function set useProjectionMatrix(_arg1:Boolean):void{ var _local2:Number; var _local3:Number; if (_arg1){ if (this.ortho){ _local2 = (viewport.width / 2); _local3 = (viewport.height / 2); _projection = createOrthoMatrix(-(_local2), _local2, -(_local3), _local3, -(_far), _far); _projection = Matrix3D.multiply(_orthoScaleMatrix, _projection); } else { _projection = createPerspectiveMatrix(fov, (viewport.width / viewport.height), this.focus, this.far); }; } else { if (this.ortho){ _arg1 = true; }; }; super.useProjectionMatrix = _arg1; } public static function createPerspectiveMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Matrix3D{ var _local5:Number = ((_arg1 / 2) * (Math.PI / 180)); var _local6:Number = Math.tan(_local5); var _local7:Number = (1 / _local6); return (new Matrix3D([(_local7 / _arg2), 0, 0, 0, 0, _local7, 0, 0, 0, 0, -(((_arg3 + _arg4) / (_arg3 - _arg4))), (((2 * _arg4) * _arg3) / (_arg3 - _arg4)), 0, 0, 1, 0])); } public static function createOrthoMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):Matrix3D{ var _local7:Number = ((_arg2 + _arg1) / (_arg2 - _arg1)); var _local8:Number = ((_arg4 + _arg3) / (_arg4 - _arg3)); var _local9:Number = ((_arg6 + _arg5) / (_arg6 - _arg5)); var _local10:Matrix3D = new Matrix3D([(2 / (_arg2 - _arg1)), 0, 0, _local7, 0, (2 / (_arg4 - _arg3)), 0, _local8, 0, 0, (-2 / (_arg6 - _arg5)), _local9, 0, 0, 0, 1]); _local10.calculateMultiply(Matrix3D.scaleMatrix(1, 1, -1), _local10); return (_local10); } } }//package org.papervision3d.cameras
Section 6
//CameraType (org.papervision3d.cameras.CameraType) package org.papervision3d.cameras { public class CameraType { public static var TARGET:String = "Target"; public static var DEBUG:String = "Debug"; public static var FREE:String = "Free"; public static var SPRING:String = "Spring"; } }//package org.papervision3d.cameras
Section 7
//DebugCamera3D (org.papervision3d.cameras.DebugCamera3D) package org.papervision3d.cameras { import org.papervision3d.view.*; import flash.display.*; import flash.geom.*; import flash.events.*; import flash.text.*; import flash.ui.*; public class DebugCamera3D extends Camera3D { protected var keyLeft:Boolean;// = false protected var targetRotationX:Number;// = 0 protected var targetRotationY:Number;// = 0 protected var sideFactor:Number;// = 0 protected var _propertiesDisplay:Sprite; protected var viewport3D:Viewport3D; protected var fovText:TextField; protected var xText:TextField; protected var yText:TextField; protected var zText:TextField; protected var startPoint:Point; protected var startRotationX:Number; protected var startRotationY:Number; protected var keyBackward:Boolean;// = false protected var farText:TextField; protected var keyForward:Boolean;// = false protected var rotationXText:TextField; protected var rotationZText:TextField; protected var rotationYText:TextField; protected var forwardFactor:Number;// = 0 protected var nearText:TextField; protected var viewportStage:Stage; protected var _inertia:Number;// = 3 protected var keyRight:Boolean;// = false public function DebugCamera3D(_arg1:Viewport3D, _arg2:Number=90, _arg3:Number=10, _arg4:Number=5000){ super(_arg2, _arg3, _arg4, true); this.viewport3D = _arg1; this.viewport = _arg1.sizeRectangle; this.focus = ((this.viewport.height / 2) / Math.tan(((_arg2 / 2) * (Math.PI / 180)))); this.zoom = (this.focus / _arg3); this.focus = _arg3; this.far = _arg4; displayProperties(); checkStageReady(); } protected function keyDownHandler(_arg1:KeyboardEvent):void{ switch (_arg1.keyCode){ case "W".charCodeAt(): case Keyboard.UP: keyForward = true; keyBackward = false; break; case "S".charCodeAt(): case Keyboard.DOWN: keyBackward = true; keyForward = false; break; case "A".charCodeAt(): case Keyboard.LEFT: keyLeft = true; keyRight = false; break; case "D".charCodeAt(): case Keyboard.RIGHT: keyRight = true; keyLeft = false; break; case "Q".charCodeAt(): rotationZ--; break; case "E".charCodeAt(): rotationZ++; break; case "F".charCodeAt(): fov--; break; case "R".charCodeAt(): fov++; break; case "G".charCodeAt(): near = (near - 10); break; case "T".charCodeAt(): near = (near + 10); break; case "H".charCodeAt(): far = (far - 10); break; case "Y".charCodeAt(): far = (far + 10); break; }; } public function set inertia(_arg1:Number):void{ _inertia = _arg1; } protected function setupEvents():void{ viewportStage = viewport3D.containerSprite.stage; viewportStage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); viewportStage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); viewportStage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); viewportStage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); viewportStage.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler); } protected function displayProperties():void{ _propertiesDisplay = new Sprite(); _propertiesDisplay.graphics.beginFill(0); _propertiesDisplay.graphics.drawRect(0, 0, 100, 100); _propertiesDisplay.graphics.endFill(); _propertiesDisplay.x = 0; _propertiesDisplay.y = 0; var _local1:TextFormat = new TextFormat("_sans", 9); xText = new TextField(); yText = new TextField(); zText = new TextField(); rotationXText = new TextField(); rotationYText = new TextField(); rotationZText = new TextField(); fovText = new TextField(); nearText = new TextField(); farText = new TextField(); var _local2:Array = [xText, yText, zText, rotationXText, rotationYText, rotationZText, fovText, nearText, farText]; var _local3 = 10; var _local4:Number = 0; while (_local4 < _local2.length) { _local2[_local4].width = 100; _local2[_local4].selectable = false; _local2[_local4].textColor = 0xFFFF00; _local2[_local4].text = ""; _local2[_local4].defaultTextFormat = _local1; _local2[_local4].y = (_local3 * _local4); _propertiesDisplay.addChild(_local2[_local4]); _local4++; }; viewport3D.addChild(_propertiesDisplay); } protected function onEnterFrameHandler(_arg1:Event):void{ if (keyForward){ forwardFactor = (forwardFactor + 50); }; if (keyBackward){ forwardFactor = (forwardFactor + -50); }; if (keyLeft){ sideFactor = (sideFactor + -50); }; if (keyRight){ sideFactor = (sideFactor + 50); }; var _local2:Number = (this.rotationX + ((targetRotationX - this.rotationX) / _inertia)); var _local3:Number = (this.rotationY + ((targetRotationY - this.rotationY) / _inertia)); this.rotationX = (Math.round((_local2 * 10)) / 10); this.rotationY = (Math.round((_local3 * 10)) / 10); forwardFactor = (forwardFactor + ((0 - forwardFactor) / _inertia)); sideFactor = (sideFactor + ((0 - sideFactor) / _inertia)); if (forwardFactor > 0){ this.moveForward(forwardFactor); } else { this.moveBackward(-(forwardFactor)); }; if (sideFactor > 0){ this.moveRight(sideFactor); } else { this.moveLeft(-(sideFactor)); }; xText.text = ("x:" + int(x)); yText.text = ("y:" + int(y)); zText.text = ("z:" + int(z)); rotationXText.text = ("rotationX:" + int(_local2)); rotationYText.text = ("rotationY:" + int(_local3)); rotationZText.text = ("rotationZ:" + int(rotationZ)); fovText.text = ("fov:" + Math.round(fov)); nearText.text = ("near:" + Math.round(near)); farText.text = ("far:" + Math.round(far)); } protected function mouseUpHandler(_arg1:MouseEvent):void{ viewportStage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } protected function keyUpHandler(_arg1:KeyboardEvent):void{ switch (_arg1.keyCode){ case "W".charCodeAt(): case Keyboard.UP: keyForward = false; break; case "S".charCodeAt(): case Keyboard.DOWN: keyBackward = false; break; case "A".charCodeAt(): case Keyboard.LEFT: keyLeft = false; break; case "D".charCodeAt(): case Keyboard.RIGHT: keyRight = false; break; }; } public function get propsDisplay():Sprite{ return (_propertiesDisplay); } public function get inertia():Number{ return (_inertia); } protected function onAddedToStageHandler(_arg1:Event):void{ setupEvents(); } protected function mouseMoveHandler(_arg1:MouseEvent):void{ targetRotationY = (startRotationY - ((startPoint.x - viewportStage.mouseX) / 2)); targetRotationX = (startRotationX + ((startPoint.y - viewportStage.mouseY) / 2)); } protected function mouseDownHandler(_arg1:MouseEvent):void{ viewportStage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); startPoint = new Point(viewportStage.mouseX, viewportStage.mouseY); startRotationY = this.rotationY; startRotationX = this.rotationX; } public function set propsDisplay(_arg1:Sprite):void{ _propertiesDisplay = _arg1; } private function checkStageReady():void{ if (viewport3D.containerSprite.stage == null){ viewport3D.containerSprite.addEventListener(Event.ADDED_TO_STAGE, onAddedToStageHandler); } else { setupEvents(); }; } } }//package org.papervision3d.cameras
Section 8
//SpringCamera3D (org.papervision3d.cameras.SpringCamera3D) package org.papervision3d.cameras { import org.papervision3d.objects.*; import org.papervision3d.core.math.*; public class SpringCamera3D extends Camera3D { public var _camTarget:DisplayObject3D; private var _velocity:Number3D; private var _stretch:Number3D; public var damping:Number;// = 4 public var stiffness:Number;// = 1 public var lookOffset:Number3D; private var _lookAtPosition:Number3D; public var positionOffset:Number3D; private var _acceleration:Number3D; private var _targetTransform:Matrix3D; private var _desiredPosition:Number3D; private var _force:Number3D; private var _xPosition:Number3D; private var _dv:Number3D; private var _xLookOffset:Number3D; public var mass:Number;// = 40 private var _xPositionOffset:Number3D; private var _xLookAtObject:DisplayObject3D; private var _zrot:Number;// = 0 public function SpringCamera3D(_arg1:Number=60, _arg2:Number=10, _arg3:Number=5000, _arg4:Boolean=false, _arg5:Boolean=false){ positionOffset = new Number3D(0, 5, -50); lookOffset = new Number3D(0, 2, 10); _velocity = new Number3D(); _dv = new Number3D(); _stretch = new Number3D(); _force = new Number3D(); _acceleration = new Number3D(); _desiredPosition = new Number3D(); _lookAtPosition = new Number3D(); _targetTransform = new Matrix3D(); _xPositionOffset = new Number3D(); _xLookOffset = new Number3D(); _xPosition = new Number3D(); _xLookAtObject = new DisplayObject3D(); super(_arg1, _arg2, _arg3, _arg4, _arg5); } override public function transformView(_arg1:Matrix3D=null):void{ super.transformView(_arg1); if (_camTarget != null){ _targetTransform.n31 = _camTarget.transform.n31; _targetTransform.n32 = _camTarget.transform.n32; _targetTransform.n33 = _camTarget.transform.n33; _targetTransform.n21 = _camTarget.transform.n21; _targetTransform.n22 = _camTarget.transform.n22; _targetTransform.n23 = _camTarget.transform.n23; _targetTransform.n11 = _camTarget.transform.n11; _targetTransform.n12 = _camTarget.transform.n12; _targetTransform.n13 = _camTarget.transform.n13; _xPositionOffset.x = positionOffset.x; _xPositionOffset.y = positionOffset.y; _xPositionOffset.z = positionOffset.z; Matrix3D.multiplyVector(_targetTransform, _xPositionOffset); _xLookOffset.x = lookOffset.x; _xLookOffset.y = lookOffset.y; _xLookOffset.z = lookOffset.z; Matrix3D.multiplyVector(_targetTransform, _xLookOffset); _desiredPosition.x = (_camTarget.x + _xPositionOffset.x); _desiredPosition.y = (_camTarget.y + _xPositionOffset.y); _desiredPosition.z = (_camTarget.z + _xPositionOffset.z); _lookAtPosition.x = (_camTarget.x + _xLookOffset.x); _lookAtPosition.y = (_camTarget.y + _xLookOffset.y); _lookAtPosition.z = (_camTarget.z + _xLookOffset.z); _stretch.x = ((x - _desiredPosition.x) * -(stiffness)); _stretch.y = ((y - _desiredPosition.y) * -(stiffness)); _stretch.z = ((z - _desiredPosition.z) * -(stiffness)); _dv.x = (_velocity.x * damping); _dv.y = (_velocity.y * damping); _dv.z = (_velocity.z * damping); _force.x = (_stretch.x - _dv.x); _force.y = (_stretch.y - _dv.y); _force.z = (_stretch.z - _dv.z); _acceleration.x = (_force.x * (1 / mass)); _acceleration.y = (_force.y * (1 / mass)); _acceleration.z = (_force.z * (1 / mass)); _velocity.plusEq(_acceleration); _xPosition.x = (x + _velocity.x); _xPosition.y = (y + _velocity.y); _xPosition.z = (z + _velocity.z); x = _xPosition.x; y = _xPosition.y; z = _xPosition.z; _xLookAtObject.x = _lookAtPosition.x; _xLookAtObject.y = _lookAtPosition.y; _xLookAtObject.z = _lookAtPosition.z; lookAt(_xLookAtObject); if (Math.abs(_zrot) > 0){ this.rotationZ = _zrot; }; }; } override public function get target():DisplayObject3D{ return (_camTarget); } public function get zrot():Number{ return (_zrot); } override public function set target(_arg1:DisplayObject3D):void{ _camTarget = _arg1; } public function set zrot(_arg1:Number):void{ _zrot = _arg1; if (_zrot < 0.001){ _arg1 = 0; }; } } }//package org.papervision3d.cameras
Section 9
//Clipping (org.papervision3d.core.clipping.draw.Clipping) package org.papervision3d.core.clipping.draw { import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; public class Clipping { public var minX:Number;// = -1000000 public var minY:Number;// = -1000000 private var zeroPoint:Point; private var globalPoint:Point; private var rectangleClipping:RectangleClipping; public var maxX:Number;// = 1000000 public var maxY:Number;// = 1000000 public function Clipping(){ zeroPoint = new Point(0, 0); super(); } public function rect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{ return (true); } public function screen(_arg1:Sprite):Clipping{ if (!rectangleClipping){ rectangleClipping = new RectangleClipping(); }; switch (_arg1.stage.align){ case StageAlign.TOP_LEFT: zeroPoint.x = 0; zeroPoint.y = 0; globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.maxX = ((rectangleClipping.minX = globalPoint.x) + _arg1.stage.stageWidth); rectangleClipping.maxY = ((rectangleClipping.minY = globalPoint.y) + _arg1.stage.stageHeight); break; case StageAlign.TOP_RIGHT: zeroPoint.x = _arg1.stage.stageWidth; zeroPoint.y = 0; globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.minX = ((rectangleClipping.maxX = globalPoint.x) - _arg1.stage.stageWidth); rectangleClipping.maxY = ((rectangleClipping.minY = globalPoint.y) + _arg1.stage.stageHeight); break; case StageAlign.BOTTOM_LEFT: zeroPoint.x = 0; zeroPoint.y = _arg1.stage.stageHeight; globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.maxX = ((rectangleClipping.minX = globalPoint.x) + _arg1.stage.stageWidth); rectangleClipping.minY = ((rectangleClipping.maxY = globalPoint.y) - _arg1.stage.stageHeight); break; case StageAlign.BOTTOM_RIGHT: zeroPoint.x = _arg1.stage.stageWidth; zeroPoint.y = _arg1.stage.stageHeight; globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.minX = ((rectangleClipping.maxX = globalPoint.x) - _arg1.stage.stageWidth); rectangleClipping.minY = ((rectangleClipping.maxY = globalPoint.y) - _arg1.stage.stageHeight); break; case StageAlign.TOP: zeroPoint.x = (_arg1.stage.stageWidth / 2); zeroPoint.y = 0; globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.minX = (globalPoint.x - (_arg1.stage.stageWidth / 2)); rectangleClipping.maxX = (globalPoint.x + (_arg1.stage.stageWidth / 2)); rectangleClipping.maxY = ((rectangleClipping.minY = globalPoint.y) + _arg1.stage.stageHeight); break; case StageAlign.BOTTOM: zeroPoint.x = (_arg1.stage.stageWidth / 2); zeroPoint.y = _arg1.stage.stageHeight; globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.minX = (globalPoint.x - (_arg1.stage.stageWidth / 2)); rectangleClipping.maxX = (globalPoint.x + (_arg1.stage.stageWidth / 2)); rectangleClipping.minY = ((rectangleClipping.maxY = globalPoint.y) - _arg1.stage.stageHeight); break; case StageAlign.LEFT: zeroPoint.x = 0; zeroPoint.y = (_arg1.stage.stageHeight / 2); globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.maxX = ((rectangleClipping.minX = globalPoint.x) + _arg1.stage.stageWidth); rectangleClipping.minY = (globalPoint.y - (_arg1.stage.stageHeight / 2)); rectangleClipping.maxY = (globalPoint.y + (_arg1.stage.stageHeight / 2)); break; case StageAlign.RIGHT: zeroPoint.x = _arg1.stage.stageWidth; zeroPoint.y = (_arg1.stage.stageHeight / 2); globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.minX = ((rectangleClipping.maxX = globalPoint.x) - _arg1.stage.stageWidth); rectangleClipping.minY = (globalPoint.y - (_arg1.stage.stageHeight / 2)); rectangleClipping.maxY = (globalPoint.y + (_arg1.stage.stageHeight / 2)); break; default: zeroPoint.x = (_arg1.stage.stageWidth / 2); zeroPoint.y = (_arg1.stage.stageHeight / 2); globalPoint = _arg1.globalToLocal(zeroPoint); rectangleClipping.minX = (globalPoint.x - (_arg1.stage.stageWidth / 2)); rectangleClipping.maxX = (globalPoint.x + (_arg1.stage.stageWidth / 2)); rectangleClipping.minY = (globalPoint.y - (_arg1.stage.stageHeight / 2)); rectangleClipping.maxY = (globalPoint.y + (_arg1.stage.stageHeight / 2)); }; return (rectangleClipping); } public function check(_arg1:RenderableListItem):Boolean{ return (true); } public function asRectangleClipping():RectangleClipping{ if (!rectangleClipping){ rectangleClipping = new RectangleClipping(); }; rectangleClipping.minX = -1000000; rectangleClipping.minY = -1000000; rectangleClipping.maxX = 1000000; rectangleClipping.maxY = 1000000; return (rectangleClipping); } } }//package org.papervision3d.core.clipping.draw
Section 10
//RectangleClipping (org.papervision3d.core.clipping.draw.RectangleClipping) package org.papervision3d.core.clipping.draw { import org.papervision3d.core.render.command.*; public class RectangleClipping extends Clipping { public function RectangleClipping(_arg1:Number=-1000000, _arg2:Number=-1000000, _arg3:Number=1000000, _arg4:Number=1000000){ this.minX = _arg1; this.maxX = _arg3; this.minY = _arg2; this.maxY = _arg4; } override public function check(_arg1:RenderableListItem):Boolean{ if (_arg1.maxX < minX){ return (false); }; if (_arg1.minX > maxX){ return (false); }; if (_arg1.maxY < minY){ return (false); }; if (_arg1.minY > maxY){ return (false); }; return (true); } override public function rect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Boolean{ if (this.maxX < _arg1){ return (false); }; if (this.minX > _arg3){ return (false); }; if (this.maxY < _arg2){ return (false); }; if (this.minY > _arg4){ return (false); }; return (true); } public function toString():String{ return ((((((((("{minX:" + minX) + " maxX:") + maxX) + " minY:") + minY) + " maxY:") + maxY) + "}")); } override public function asRectangleClipping():RectangleClipping{ return (this); } } }//package org.papervision3d.core.clipping.draw
Section 11
//DefaultClipping (org.papervision3d.core.clipping.DefaultClipping) package org.papervision3d.core.clipping { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; public class DefaultClipping { public function testFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:RenderSessionData):Boolean{ return (false); } public function clipFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:MaterialObject3D, _arg4:RenderSessionData, _arg5:Array):Number{ return (0); } public function setDisplayObject(_arg1:DisplayObject3D, _arg2:RenderSessionData):void{ } public function reset(_arg1:RenderSessionData):void{ } } }//package org.papervision3d.core.clipping
Section 12
//FrustumClipping (org.papervision3d.core.clipping.FrustumClipping) package org.papervision3d.core.clipping { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.core.log.*; import org.papervision3d.core.dyn.*; import org.papervision3d.core.math.util.*; public class FrustumClipping extends DefaultClipping { private var _wleft:Plane3D; private var _cnear:Plane3D; private var _cbottom:Plane3D; private var _world:Matrix3D; private var _ftl:Number3D; private var _wnear:Plane3D; private var _wbottom:Plane3D; private var _wright:Plane3D; private var _ftr:Number3D; private var _wfar:Plane3D; private var _ntl:Number3D; private var _camPos:Number3D; private var _ntr:Number3D; private var _planePoints:Array; private var _wplanes:Array; private var _planes:int; private var _cright:Plane3D; private var _cfar:Plane3D; private var _dynTriangles:DynamicTriangles; private var _nc:Number3D; private var _axisX:Number3D; private var _axisY:Number3D; private var _fc:Number3D; private var _wtop:Plane3D; private var _axisZi:Number3D; private var _matrix:Matrix3D; private var _axisZ:Number3D; private var _cleft:Plane3D; private var _ctop:Plane3D; private var _fbr:Number3D; private var _fbl:Number3D; private var _nbl:Number3D; private var _cplanes:Array; private var _nbr:Number3D; public static const ALL:int = 63; public static const RIGHT:int = 4; private static const OUTSIDE:uint = 0; public static const LEFT:int = 2; private static const TO_DEGREES:Number = 57.2957795130823; private static const IN_OUT:uint = 3; private static const TO_RADIANS:Number = 0.0174532925199433; private static const OUT_IN:uint = 2; public static const DEFAULT:int = 31; public static const NEAR:int = 1; public static const BOTTOM:int = 16; public static const TOP:int = 8; public static const FAR:int = 32; public static const NONE:int = 0; private static const INSIDE:uint = 1; public function FrustumClipping(_arg1:int=-1){ _cleft = Plane3D.fromCoefficients(0, 1, 0, 0); _cright = Plane3D.fromCoefficients(0, 1, 0, 0); _ctop = Plane3D.fromCoefficients(0, 1, 0, 0); _cbottom = Plane3D.fromCoefficients(0, 1, 0, 0); _cnear = Plane3D.fromCoefficients(0, 1, 0, 0); _cfar = Plane3D.fromCoefficients(0, 1, 0, 0); _wleft = Plane3D.fromCoefficients(0, 1, 0, 0); _wright = Plane3D.fromCoefficients(0, 1, 0, 0); _wtop = Plane3D.fromCoefficients(0, 1, 0, 0); _wbottom = Plane3D.fromCoefficients(0, 1, 0, 0); _wnear = Plane3D.fromCoefficients(0, 1, 0, 0); _wfar = Plane3D.fromCoefficients(0, 1, 0, 0); _nc = new Number3D(); _fc = new Number3D(); _ntl = new Number3D(); _ntr = new Number3D(); _nbr = new Number3D(); _nbl = new Number3D(); _ftl = new Number3D(); _ftr = new Number3D(); _fbr = new Number3D(); _fbl = new Number3D(); _camPos = new Number3D(); _axisX = new Number3D(); _axisY = new Number3D(); _axisZ = new Number3D(); _axisZi = new Number3D(); _matrix = Matrix3D.IDENTITY; _world = Matrix3D.IDENTITY; _dynTriangles = new DynamicTriangles(); this.planes = ((_arg1 < 0)) ? DEFAULT : _arg1; } override public function testFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:RenderSessionData):Boolean{ var _local5:Plane3D; var _local6:int; var _local4:int; while (_local4 < _wplanes.length) { _local5 = _wplanes[_local4]; _local6 = ClassificationUtil.classifyTriangle(_arg1, _local5); if ((((_local6 == ClassificationUtil.BACK)) || ((_local6 == ClassificationUtil.COINCIDING)))){ return (false); }; if (_local6 == ClassificationUtil.STRADDLE){ return (true); }; _local4++; }; return (false); } public function get planes():int{ return (_planes); } public function set planes(_arg1:int):void{ _planes = _arg1; _cplanes = new Array(); _wplanes = new Array(); _planePoints = new Array(); if ((_planes & NEAR)){ _cplanes.push(_cnear); _wplanes.push(_wnear); _planePoints.push(_nc); }; if ((_planes & FAR)){ _cplanes.push(_cfar); _wplanes.push(_wfar); _planePoints.push(_fc); }; if ((_planes & LEFT)){ _cplanes.push(_cleft); _wplanes.push(_wleft); _planePoints.push(_camPos); }; if ((_planes & RIGHT)){ _cplanes.push(_cright); _wplanes.push(_wright); _planePoints.push(_camPos); }; if ((_planes & TOP)){ _cplanes.push(_ctop); _wplanes.push(_wtop); _planePoints.push(_camPos); }; if ((_planes & BOTTOM)){ _cplanes.push(_cbottom); _wplanes.push(_wbottom); _planePoints.push(_camPos); }; } private function compareDistances(_arg1:Number, _arg2:Number):uint{ if ((((_arg1 < 0)) && ((_arg2 < 0)))){ return (OUTSIDE); }; if ((((_arg1 > 0)) && ((_arg2 > 0)))){ return (INSIDE); }; if ((((_arg1 > 0)) && ((_arg2 < 0)))){ return (IN_OUT); }; return (OUT_IN); } override public function clipFace(_arg1:Triangle3D, _arg2:DisplayObject3D, _arg3:MaterialObject3D, _arg4:RenderSessionData, _arg5:Array):Number{ var plane:Plane3D; var side:int; var k:int; var v1:Vertex3D; var v2:Vertex3D; var t1:NumberUV; var t2:NumberUV; var tri:Triangle3D; var triangle = _arg1; var object = _arg2; var material = _arg3; var renderSessionData = _arg4; var outputArray = _arg5; var points:Array = [triangle.v0, triangle.v1, triangle.v2]; var uvs:Array = [triangle.uv0, triangle.uv1, triangle.uv2]; var clipped:Boolean; var i:int; while (i < _wplanes.length) { plane = _wplanes[i]; side = ClassificationUtil.classifyPoints(points, plane); try { if (side == ClassificationUtil.STRADDLE){ points = clipPointsToPlane(triangle.instance, points, uvs, plane); clipped = true; }; } catch(e:Error) { PaperLogger.error(("FrustumClipping#clipFace : " + e.message)); }; i = (i + 1); }; if (!clipped){ outputArray.push(triangle); return (1); }; var v0:Vertex3D = points[0]; var t0:NumberUV = uvs[0]; var j = 1; while (j < points.length) { k = ((j + 1) % points.length); v1 = points[j]; v2 = points[k]; t1 = uvs[j]; t2 = uvs[k]; tri = _dynTriangles.getTriangle(triangle.instance, triangle.material, v0, v1, v2, t0, t1, t2); if (tri.faceNormal.modulo){ outputArray.push(tri); }; j = (j + 1); }; return (outputArray.length); } public function clipPointsToPlane(_arg1:DisplayObject3D, _arg2:Array, _arg3:Array, _arg4:Plane3D):Array{ var _local10:int; var _local11:Vertex3D; var _local12:Vertex3D; var _local13:NumberUV; var _local14:NumberUV; var _local15:Number; var _local16:Number; var _local17:Vertex3D; var _local18:NumberUV; var _local19:uint; var _local5:Array = new Array(); var _local6:Array = new Array(); var _local7:Number = _arg4.distance(_arg2[0]); var _local8:int; while (_local8 < _arg2.length) { _local10 = ((_local8 + 1) % _arg2.length); _local11 = _arg2[_local8]; _local12 = _arg2[_local10]; _local13 = _arg3[_local8]; _local14 = _arg3[_local10]; _local15 = _arg4.distance(_local12); _local16 = (_local7 / (_local7 - _local15)); _local19 = compareDistances(_local7, _local15); switch (_local19){ case INSIDE: _local5.push(_local12); _local6.push(_local14); break; case IN_OUT: _local17 = new Vertex3D(); _local17.x = (_local11.x + ((_local12.x - _local11.x) * _local16)); _local17.y = (_local11.y + ((_local12.y - _local11.y) * _local16)); _local17.z = (_local11.z + ((_local12.z - _local11.z) * _local16)); _local18 = new NumberUV(); _local18.u = (_local13.u + ((_local14.u - _local13.u) * _local16)); _local18.v = (_local13.v + ((_local14.v - _local13.v) * _local16)); _local6.push(_local18); _local5.push(_local17); _arg1.geometry.vertices.push(_local17); break; case OUT_IN: _local18 = new NumberUV(); _local18.u = (_local13.u + ((_local14.u - _local13.u) * _local16)); _local18.v = (_local13.v + ((_local14.v - _local13.v) * _local16)); _local6.push(_local18); _local6.push(_local14); _local17 = new Vertex3D(); _local17.x = (_local11.x + ((_local12.x - _local11.x) * _local16)); _local17.y = (_local11.y + ((_local12.y - _local11.y) * _local16)); _local17.z = (_local11.z + ((_local12.z - _local11.z) * _local16)); _local5.push(_local17); _local5.push(_local12); _arg1.geometry.vertices.push(_local17); break; default: break; }; _local7 = _local15; _local8++; }; var _local9:int; while (_local9 < _local6.length) { _arg3[_local9] = _local6[_local9]; _local9++; }; return (_local5); } override public function reset(_arg1:RenderSessionData):void{ var _local2:CameraObject3D = _arg1.camera; var _local3:Number = _arg1.viewPort.viewportWidth; var _local4:Number = _arg1.viewPort.viewportHeight; var _local5:Number = Math.tan(((_local2.fov / 2) * TO_RADIANS)); var _local6:Number = _local2.focus; _matrix.copy(_arg1.camera.transform); _axisX.reset(_matrix.n11, _matrix.n21, _matrix.n31); _axisY.reset(_matrix.n12, _matrix.n22, _matrix.n32); _axisZ.reset(_matrix.n13, _matrix.n23, _matrix.n33); _axisZi.reset(-(_axisZ.x), -(_axisZ.y), -(_axisZ.z)); var _local7:Number = ((2 * _local5) * _local6); var _local8:Number = (_local7 * (_local3 / _local4)); _camPos.reset(_local2.x, _local2.y, _local2.z); _nc.x = (_camPos.x + (_local6 * _axisZ.x)); _nc.y = (_camPos.y + (_local6 * _axisZ.y)); _nc.z = (_camPos.z + (_local6 * _axisZ.z)); _fc.x = (_camPos.x + (_local2.far * _axisZ.x)); _fc.y = (_camPos.y + (_local2.far * _axisZ.y)); _fc.z = (_camPos.z + (_local2.far * _axisZ.z)); _ntl.copyFrom(_nc); _nbl.copyFrom(_nc); _ntr.copyFrom(_nc); _nbr.copyFrom(_nc); _local7 = (_local7 / 2); _local8 = (_local8 / 2); _ntl.x = (_ntl.x - (_local8 * _axisX.x)); _ntl.y = (_ntl.y - (_local8 * _axisX.y)); _ntl.z = (_ntl.z - (_local8 * _axisX.z)); _ntl.x = (_ntl.x + (_local7 * _axisY.x)); _ntl.y = (_ntl.y + (_local7 * _axisY.y)); _ntl.z = (_ntl.z + (_local7 * _axisY.z)); _nbl.x = (_nbl.x - (_local8 * _axisX.x)); _nbl.y = (_nbl.y - (_local8 * _axisX.y)); _nbl.z = (_nbl.z - (_local8 * _axisX.z)); _nbl.x = (_nbl.x - (_local7 * _axisY.x)); _nbl.y = (_nbl.y - (_local7 * _axisY.y)); _nbl.z = (_nbl.z - (_local7 * _axisY.z)); _nbr.x = (_nbr.x + (_local8 * _axisX.x)); _nbr.y = (_nbr.y + (_local8 * _axisX.y)); _nbr.z = (_nbr.z + (_local8 * _axisX.z)); _nbr.x = (_nbr.x - (_local7 * _axisY.x)); _nbr.y = (_nbr.y - (_local7 * _axisY.y)); _nbr.z = (_nbr.z - (_local7 * _axisY.z)); _ntr.x = (_ntr.x + (_local8 * _axisX.x)); _ntr.y = (_ntr.y + (_local8 * _axisX.y)); _ntr.z = (_ntr.z + (_local8 * _axisX.z)); _ntr.x = (_ntr.x + (_local7 * _axisY.x)); _ntr.y = (_ntr.y + (_local7 * _axisY.y)); _ntr.z = (_ntr.z + (_local7 * _axisY.z)); if ((_planes & NEAR)){ _cnear.setNormalAndPoint(_axisZ, _nc); }; if ((_planes & FAR)){ _cfar.setNormalAndPoint(_axisZi, _fc); }; if ((_planes & LEFT)){ _cleft.setThreePoints(_camPos, _nbl, _ntl); }; if ((_planes & RIGHT)){ _cright.setThreePoints(_camPos, _ntr, _nbr); }; if ((_planes & TOP)){ _ctop.setThreePoints(_camPos, _ntl, _ntr); }; if ((_planes & BOTTOM)){ _cbottom.setThreePoints(_camPos, _nbr, _nbl); }; _dynTriangles.releaseAll(); } override public function setDisplayObject(_arg1:DisplayObject3D, _arg2:RenderSessionData):void{ var _local5:Plane3D; var _local6:Plane3D; _world.copy(_arg1.world); _world.invert(); var _local3:Number3D = new Number3D(); var _local4:int; while (_local4 < _cplanes.length) { _local5 = _cplanes[_local4]; _local6 = _wplanes[_local4]; _local3.copyFrom(_planePoints[_local4]); _local6.normal.copyFrom(_local5.normal); Matrix3D.multiplyVector3x3(_world, _local6.normal); Matrix3D.multiplyVector(_world, _local3); _local6.setNormalAndPoint(_local6.normal, _local3); _local4++; }; } } }//package org.papervision3d.core.clipping
Section 13
//DefaultLineCuller (org.papervision3d.core.culling.DefaultLineCuller) package org.papervision3d.core.culling { import org.papervision3d.core.geom.renderables.*; public class DefaultLineCuller implements ILineCuller { public function testLine(_arg1:Line3D):Boolean{ return (((_arg1.v0.vertex3DInstance.visible) && (_arg1.v1.vertex3DInstance.visible))); } } }//package org.papervision3d.core.culling
Section 14
//DefaultParticleCuller (org.papervision3d.core.culling.DefaultParticleCuller) package org.papervision3d.core.culling { import org.papervision3d.core.geom.renderables.*; public class DefaultParticleCuller implements IParticleCuller { public function testParticle(_arg1:Particle):Boolean{ if (_arg1.material.invisible == false){ if (_arg1.vertex3D.vertex3DInstance.visible == true){ return (true); }; }; return (false); } } }//package org.papervision3d.core.culling
Section 15
//DefaultTriangleCuller (org.papervision3d.core.culling.DefaultTriangleCuller) package org.papervision3d.core.culling { import org.papervision3d.core.proto.*; import org.papervision3d.core.geom.renderables.*; public class DefaultTriangleCuller implements ITriangleCuller { protected static var y2:Number; protected static var y1:Number; protected static var y0:Number; protected static var x0:Number; protected static var x1:Number; protected static var x2:Number; public function testFace(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean{ var _local5:MaterialObject3D; if (((((_arg2.visible) && (_arg3.visible))) && (_arg4.visible))){ _local5 = (_arg1.material) ? _arg1.material : _arg1.instance.material; if (_local5.invisible){ return (false); }; x0 = _arg2.x; y0 = _arg2.y; x1 = _arg3.x; y1 = _arg3.y; x2 = _arg4.x; y2 = _arg4.y; if (_local5.oneSide){ if (_local5.opposite){ if ((((x2 - x0) * (y1 - y0)) - ((y2 - y0) * (x1 - x0))) > 0){ return (false); }; } else { if ((((x2 - x0) * (y1 - y0)) - ((y2 - y0) * (x1 - x0))) < 0){ return (false); }; }; }; return (true); }; return (false); } } }//package org.papervision3d.core.culling
Section 16
//FrustumCuller (org.papervision3d.core.culling.FrustumCuller) package org.papervision3d.core.culling { import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; public class FrustumCuller implements IObjectCuller { private var _tang:Number; private var _near:Number; private var _ratio:Number; private var _fov:Number; private var _far:Number; private var _nh:Number; private var _fh:Number; private var _nw:Number; public var transform:Matrix3D; private var _sphereY:Number; private var _sphereX:Number; private var _fw:Number; public static const OUTSIDE:int = -1; public static const INSIDE:int = 1; public static const INTERSECT:int = 0; public function FrustumCuller(){ this.transform = Matrix3D.IDENTITY; this.initialize(); } public function get ratio():Number{ return (_ratio); } public function pointInFrustum(_arg1:Number, _arg2:Number, _arg3:Number):int{ var _local4:Matrix3D = this.transform; var _local5:Number = (_arg1 - _local4.n14); var _local6:Number = (_arg2 - _local4.n24); var _local7:Number = (_arg3 - _local4.n34); var _local8:Number = (((_local5 * _local4.n13) + (_local6 * _local4.n23)) + (_local7 * _local4.n33)); if ((((_local8 > _far)) || ((_local8 < _near)))){ return (OUTSIDE); }; var _local9:Number = (((_local5 * _local4.n12) + (_local6 * _local4.n22)) + (_local7 * _local4.n32)); var _local10:Number = (_local8 * _tang); if ((((_local9 > _local10)) || ((_local9 < -(_local10))))){ return (OUTSIDE); }; var _local11:Number = (((_local5 * _local4.n11) + (_local6 * _local4.n21)) + (_local7 * _local4.n31)); _local10 = (_local10 * _ratio); if ((((_local11 > _local10)) || ((_local11 < -(_local10))))){ return (OUTSIDE); }; return (INSIDE); } public function get fov():Number{ return (_fov); } public function set ratio(_arg1:Number):void{ this.initialize(_fov, _arg1, _near, _far); } public function set near(_arg1:Number):void{ this.initialize(_fov, _ratio, _arg1, _far); } public function set fov(_arg1:Number):void{ this.initialize(_arg1, _ratio, _near, _far); } public function get far():Number{ return (_far); } public function initialize(_arg1:Number=60, _arg2:Number=1.333, _arg3:Number=1, _arg4:Number=5000):void{ _fov = _arg1; _ratio = _arg2; _near = _arg3; _far = _arg4; var _local5:Number = (((Math.PI / 180) * _fov) * 0.5); _tang = Math.tan(_local5); _nh = (_near * _tang); _nw = (_nh * _ratio); _fh = (_far * _tang); _fw = (_fh * _ratio); var _local6:Number = Math.atan((_tang * _ratio)); _sphereX = (1 / Math.cos(_local6)); _sphereY = (1 / Math.cos(_local5)); } public function set far(_arg1:Number):void{ this.initialize(_fov, _ratio, _near, _arg1); } public function get near():Number{ return (_near); } public function sphereInFrustum(_arg1:DisplayObject3D, _arg2:BoundingSphere):int{ var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local3:Number = (_arg2.radius * Math.max(_arg1.scaleX, Math.max(_arg1.scaleY, _arg1.scaleZ))); var _local8:int = INSIDE; var _local9:Matrix3D = this.transform; var _local10:Number = (_arg1.world.n14 - _local9.n14); var _local11:Number = (_arg1.world.n24 - _local9.n24); var _local12:Number = (_arg1.world.n34 - _local9.n34); _local7 = (((_local10 * _local9.n13) + (_local11 * _local9.n23)) + (_local12 * _local9.n33)); if ((((_local7 > (_far + _local3))) || ((_local7 < (_near - _local3))))){ return (OUTSIDE); }; if ((((_local7 > (_far - _local3))) || ((_local7 < (_near + _local3))))){ _local8 = INTERSECT; }; _local6 = (((_local10 * _local9.n12) + (_local11 * _local9.n22)) + (_local12 * _local9.n32)); _local4 = (_sphereY * _local3); _local7 = (_local7 * _tang); if ((((_local6 > (_local7 + _local4))) || ((_local6 < (-(_local7) - _local4))))){ return (OUTSIDE); }; if ((((_local6 > (_local7 - _local4))) || ((_local6 < (-(_local7) + _local4))))){ _local8 = INTERSECT; }; _local5 = (((_local10 * _local9.n11) + (_local11 * _local9.n21)) + (_local12 * _local9.n31)); _local7 = (_local7 * _ratio); _local4 = (_sphereX * _local3); if ((((_local5 > (_local7 + _local4))) || ((_local5 < (-(_local7) - _local4))))){ return (OUTSIDE); }; if ((((_local5 > (_local7 - _local4))) || ((_local5 < (-(_local7) + _local4))))){ _local8 = INTERSECT; }; return (_local8); } public function testObject(_arg1:DisplayObject3D):int{ var _local2:int = INSIDE; if (((((!(_arg1.geometry)) || (!(_arg1.geometry.vertices)))) || (!(_arg1.geometry.vertices.length)))){ return (_local2); }; switch (_arg1.frustumTestMethod){ case FrustumTestMethod.BOUNDING_SPHERE: _local2 = sphereInFrustum(_arg1, _arg1.geometry.boundingSphere); break; case FrustumTestMethod.BOUNDING_BOX: _local2 = aabbInFrustum(_arg1, _arg1.geometry.aabb); break; case FrustumTestMethod.NO_TESTING: break; default: break; }; return (_local2); } public function aabbInFrustum(_arg1:DisplayObject3D, _arg2:AxisAlignedBoundingBox, _arg3:Boolean=true):int{ var _local4:Vertex3D; var _local5:Number3D; var _local6:int; var _local7:int; var _local8:Array = _arg2.getBoxVertices(); for each (_local4 in _local8) { _local5 = _local4.toNumber3D(); Matrix3D.multiplyVector(_arg1.world, _local5); if (pointInFrustum(_local5.x, _local5.y, _local5.z) == INSIDE){ _local6++; if (_arg3){ return (INSIDE); }; } else { _local7++; }; if (((_local6) && (_local7))){ return (INTERSECT); }; }; if (_local6){ return (((_local6 < 8)) ? INTERSECT : INSIDE); //unresolved jump }; return (OUTSIDE); } } }//package org.papervision3d.core.culling
Section 17
//FrustumTestMethod (org.papervision3d.core.culling.FrustumTestMethod) package org.papervision3d.core.culling { public class FrustumTestMethod { public static const BOUNDING_BOX:int = 1; public static const NO_TESTING:int = -1; public static const BOUNDING_SPHERE:int = 0; } }//package org.papervision3d.core.culling
Section 18
//ILineCuller (org.papervision3d.core.culling.ILineCuller) package org.papervision3d.core.culling { import org.papervision3d.core.geom.renderables.*; public interface ILineCuller { function testLine(_arg1:Line3D):Boolean; } }//package org.papervision3d.core.culling
Section 19
//IObjectCuller (org.papervision3d.core.culling.IObjectCuller) package org.papervision3d.core.culling { import org.papervision3d.objects.*; public interface IObjectCuller { function testObject(_arg1:DisplayObject3D):int; } }//package org.papervision3d.core.culling
Section 20
//IParticleCuller (org.papervision3d.core.culling.IParticleCuller) package org.papervision3d.core.culling { import org.papervision3d.core.geom.renderables.*; public interface IParticleCuller { function testParticle(_arg1:Particle):Boolean; } }//package org.papervision3d.core.culling
Section 21
//ITriangleCuller (org.papervision3d.core.culling.ITriangleCuller) package org.papervision3d.core.culling { import org.papervision3d.core.geom.renderables.*; public interface ITriangleCuller { function testFace(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean; } }//package org.papervision3d.core.culling
Section 22
//RectangleLineCuller (org.papervision3d.core.culling.RectangleLineCuller) package org.papervision3d.core.culling { import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.util.*; public class RectangleLineCuller implements ILineCuller { private var lineBoundsRect:Rectangle; private var rectIntersection:Rectangle; private var cullingRectangle:Rectangle; public function RectangleLineCuller(_arg1:Rectangle=null):void{ if (_arg1){ this.cullingRectangle = _arg1; }; lineBoundsRect = new Rectangle(); rectIntersection = new Rectangle(); } public function testLine(_arg1:Line3D):Boolean{ if (((!(_arg1.v0.vertex3DInstance.visible)) || (!(_arg1.v1.vertex3DInstance.visible)))){ return (false); }; var _local2:Number = _arg1.v0.vertex3DInstance.x; var _local3:Number = _arg1.v0.vertex3DInstance.y; var _local4:Number = _arg1.v1.vertex3DInstance.x; var _local5:Number = _arg1.v1.vertex3DInstance.y; lineBoundsRect.width = Math.abs((_local4 - _local2)); lineBoundsRect.height = Math.abs((_local5 - _local3)); if (_local2 < _local4){ lineBoundsRect.x = _local2; } else { lineBoundsRect.x = _local4; }; if (_local3 < _local5){ lineBoundsRect.y = _local3; } else { lineBoundsRect.y = _local5; }; if (cullingRectangle.containsRect(lineBoundsRect)){ return (true); }; if (!FastRectangleTools.intersects(lineBoundsRect, cullingRectangle)){ return (false); }; rectIntersection = FastRectangleTools.intersection(lineBoundsRect, cullingRectangle); var _local6:Number = ((_local5 - _local3) / (_local4 - _local2)); var _local7:Number = (_local3 - (_local6 * _local2)); var _local8:Number = ((cullingRectangle.top - _local7) / _local6); if ((((_local8 > rectIntersection.left)) && ((_local8 < rectIntersection.right)))){ return (true); }; _local8 = ((cullingRectangle.bottom - _local7) / _local6); if ((((_local8 > rectIntersection.left)) && ((_local8 < rectIntersection.right)))){ return (true); }; var _local9:Number = ((_local6 * cullingRectangle.left) + _local7); if ((((_local9 > rectIntersection.top)) && ((_local9 < rectIntersection.bottom)))){ return (true); }; _local9 = ((_local6 * cullingRectangle.right) + _local7); if ((((_local9 > rectIntersection.top)) && ((_local9 < rectIntersection.bottom)))){ return (true); }; return (false); } } }//package org.papervision3d.core.culling
Section 23
//RectangleParticleCuller (org.papervision3d.core.culling.RectangleParticleCuller) package org.papervision3d.core.culling { import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.util.*; public class RectangleParticleCuller implements IParticleCuller { public var cullingRectangle:Rectangle; private static var vInstance:Vertex3DInstance; private static var testPoint:Point; public function RectangleParticleCuller(_arg1:Rectangle=null){ this.cullingRectangle = _arg1; testPoint = new Point(); } public function testParticle(_arg1:Particle):Boolean{ vInstance = _arg1.vertex3D.vertex3DInstance; if (_arg1.material.invisible == false){ if (vInstance.visible){ if (FastRectangleTools.intersects(_arg1.renderRect, cullingRectangle)){ return (true); }; }; }; return (false); } } }//package org.papervision3d.core.culling
Section 24
//RectangleTriangleCuller (org.papervision3d.core.culling.RectangleTriangleCuller) package org.papervision3d.core.culling { import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.util.*; public class RectangleTriangleCuller extends DefaultTriangleCuller implements ITriangleCuller { public var cullingRectangle:Rectangle; private static const DEFAULT_RECT_X:Number = -((DEFAULT_RECT_W / 2)); private static const DEFAULT_RECT_W:Number = 640; private static const DEFAULT_RECT_H:Number = 480; private static const DEFAULT_RECT_Y:Number = -((DEFAULT_RECT_H / 2)); private static var hitRect:Rectangle = new Rectangle(); public function RectangleTriangleCuller(_arg1:Rectangle=null):void{ cullingRectangle = new Rectangle(DEFAULT_RECT_X, DEFAULT_RECT_Y, DEFAULT_RECT_W, DEFAULT_RECT_H); super(); if (_arg1){ this.cullingRectangle = _arg1; }; } override public function testFace(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean{ if (super.testFace(_arg1, _arg2, _arg3, _arg4)){ hitRect.x = Math.min(_arg4.x, Math.min(_arg3.x, _arg2.x)); hitRect.width = (Math.max(_arg4.x, Math.max(_arg3.x, _arg2.x)) + Math.abs(hitRect.x)); hitRect.y = Math.min(_arg4.y, Math.min(_arg3.y, _arg2.y)); hitRect.height = (Math.max(_arg4.y, Math.max(_arg3.y, _arg2.y)) + Math.abs(hitRect.y)); return (FastRectangleTools.intersects(cullingRectangle, hitRect)); }; return (false); } } }//package org.papervision3d.core.culling
Section 25
//ViewportObjectFilter (org.papervision3d.core.culling.ViewportObjectFilter) package org.papervision3d.core.culling { import org.papervision3d.objects.*; import flash.utils.*; public class ViewportObjectFilter implements IObjectCuller { protected var _mode:int; protected var objects:Dictionary; public function ViewportObjectFilter(_arg1:int):void{ this.mode = _arg1; init(); } public function addObject(_arg1:DisplayObject3D):void{ objects[_arg1] = _arg1; } public function get mode():int{ return (_mode); } public function set mode(_arg1:int):void{ _mode = _arg1; } public function removeObject(_arg1:DisplayObject3D):void{ delete objects[_arg1]; } private function init():void{ objects = new Dictionary(true); } public function testObject(_arg1:DisplayObject3D):int{ if (objects[_arg1]){ return ((1 - _mode)); }; return (mode); } public function destroy():void{ objects = null; } } }//package org.papervision3d.core.culling
Section 26
//UserData (org.papervision3d.core.data.UserData) package org.papervision3d.core.data { public class UserData { public var data; public function UserData(_arg1=null){ this.data = _arg1; } } }//package org.papervision3d.core.data
Section 27
//DynamicTriangles (org.papervision3d.core.dyn.DynamicTriangles) package org.papervision3d.core.dyn { import org.papervision3d.core.proto.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.materials.*; import org.papervision3d.materials.special.*; public class DynamicTriangles { private static const INIT_SIZE:int = 100; private static const GROW_SIZE:int = 300; private static var triangleCounter:int; private static var trianglePool:Array; public function DynamicTriangles(){ init(); } public function returnTriangle(_arg1:Triangle3D):void{ var _local2 = triangleCounter++; trianglePool[_local2] = _arg1; } public function returnAllTriangles():void{ triangleCounter = trianglePool.length; } public function releaseAll():void{ returnAllTriangles(); } public function getTriangle(_arg1:DisplayObject3D=null, _arg2:MaterialObject3D=null, _arg3:Vertex3D=null, _arg4:Vertex3D=null, _arg5:Vertex3D=null, _arg6:NumberUV=null, _arg7:NumberUV=null, _arg8:NumberUV=null):Triangle3D{ var _local9:int; var _local10:Triangle3D; var _local11:MaterialObject3D; if (triangleCounter == 0){ _local9 = GROW_SIZE; while (--_local9 > -1) { trianglePool.unshift(new Triangle3D(null, null, null, null)); }; triangleCounter = GROW_SIZE; return (getTriangle(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8)); //unresolved jump }; _local10 = Triangle3D(trianglePool[--triangleCounter]); if (_local10.material){ if ((((_local10.material is BitmapMaterial)) && (BitmapMaterial(_local10.material).uvMatrices))){ BitmapMaterial(_local10.material).uvMatrices[_local10.renderCommand] = null; }; if ((_local10.material is CompositeMaterial)){ for each (_local11 in CompositeMaterial(_local10.material).materials) { if ((((_local11 is BitmapMaterial)) && (BitmapMaterial(_local11).uvMatrices))){ BitmapMaterial(_local11).uvMatrices[_local10.renderCommand] = null; }; }; }; }; _local10.instance = _arg1; _local10.vertices = [_arg3, _arg4, _arg5]; _local10.uv = [_arg6, _arg7, _arg8]; _local10.updateVertices(); _local10.createNormal(); _local10.material = _arg2; return (_local10); } private static function init():void{ trianglePool = new Array(INIT_SIZE); var _local1:int = INIT_SIZE; while (--_local1 > -1) { trianglePool[_local1] = new Triangle3D(null, null, null, null); }; triangleCounter = INIT_SIZE; } } }//package org.papervision3d.core.dyn
Section 28
//AbstractRenderable (org.papervision3d.core.geom.renderables.AbstractRenderable) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.render.command.*; import org.papervision3d.objects.*; import org.papervision3d.core.data.*; public class AbstractRenderable implements IRenderable { public var _userData:UserData; public var instance:DisplayObject3D; public function set userData(_arg1:UserData):void{ _userData = _arg1; } public function get userData():UserData{ return (_userData); } public function getRenderListItem():IRenderListItem{ return (null); } } }//package org.papervision3d.core.geom.renderables
Section 29
//IRenderable (org.papervision3d.core.geom.renderables.IRenderable) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.render.command.*; public interface IRenderable { function getRenderListItem():IRenderListItem; } }//package org.papervision3d.core.geom.renderables
Section 30
//Line3D (org.papervision3d.core.geom.renderables.Line3D) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.render.command.*; import org.papervision3d.materials.special.*; import org.papervision3d.core.geom.*; public class Line3D extends AbstractRenderable implements IRenderable { public var size:Number; public var material:LineMaterial; public var cV:Vertex3D; public var renderCommand:RenderLine; public var v0:Vertex3D; public var v1:Vertex3D; public function Line3D(_arg1:Lines3D, _arg2:LineMaterial, _arg3:Number, _arg4:Vertex3D, _arg5:Vertex3D){ this.size = _arg3; this.material = _arg2; this.v0 = _arg4; this.v1 = _arg5; this.cV = _arg5; this.instance = _arg1; this.renderCommand = new RenderLine(this); } public function addControlVertex(_arg1:Number, _arg2:Number, _arg3:Number):void{ cV = new Vertex3D(_arg1, _arg2, _arg3); if (instance.geometry.vertices.indexOf(cV) == -1){ instance.geometry.vertices.push(cV); }; renderCommand.cV = cV.vertex3DInstance; } override public function getRenderListItem():IRenderListItem{ return (this.renderCommand); } } }//package org.papervision3d.core.geom.renderables
Section 31
//Particle (org.papervision3d.core.geom.renderables.Particle) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.render.command.*; import flash.geom.*; import org.papervision3d.materials.special.*; public class Particle extends AbstractRenderable implements IRenderable { public var size:Number; public var renderScale:Number; public var vertex3D:Vertex3D; public var renderRect:Rectangle; public var rotationZ:Number;// = 0 public var renderCommand:RenderParticle; public var drawMatrix:Matrix; public var material:ParticleMaterial; public function Particle(_arg1:ParticleMaterial, _arg2:Number=1, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0){ this.material = _arg1; this.size = _arg2; this.renderCommand = new RenderParticle(this); this.renderRect = new Rectangle(); vertex3D = new Vertex3D(_arg3, _arg4, _arg5); drawMatrix = new Matrix(); } public function updateRenderRect():void{ material.updateRenderRect(this); } public function set x(_arg1:Number):void{ vertex3D.x = _arg1; } public function set y(_arg1:Number):void{ vertex3D.y = _arg1; } public function set z(_arg1:Number):void{ vertex3D.z = _arg1; } public function get y():Number{ return (vertex3D.y); } public function get z():Number{ return (vertex3D.z); } override public function getRenderListItem():IRenderListItem{ return (renderCommand); } public function get x():Number{ return (vertex3D.x); } } }//package org.papervision3d.core.geom.renderables
Section 32
//Triangle3D (org.papervision3d.core.geom.renderables.Triangle3D) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.command.*; import org.papervision3d.objects.*; import org.papervision3d.core.math.*; import org.papervision3d.materials.*; import org.papervision3d.materials.special.*; public class Triangle3D extends AbstractRenderable implements IRenderable { public var _uvArray:Array; public var renderCommand:RenderTriangle; public var id:Number; public var material:MaterialObject3D; public var faceNormal:Number3D; public var screenZ:Number; public var uv0:NumberUV; public var uv1:NumberUV; public var _materialName:String; public var visible:Boolean; public var uv2:NumberUV; public var vertices:Array; public var v0:Vertex3D; public var v1:Vertex3D; public var v2:Vertex3D; private static var _totalFaces:Number = 0; public function Triangle3D(_arg1:DisplayObject3D, _arg2:Array, _arg3:MaterialObject3D=null, _arg4:Array=null){ this.instance = _arg1; faceNormal = new Number3D(); if (((_arg2) && ((_arg2.length == 3)))){ this.vertices = _arg2; v0 = _arg2[0]; v1 = _arg2[1]; v2 = _arg2[2]; createNormal(); } else { _arg2 = new Array(); v0 = (_arg2[0] = new Vertex3D()); v1 = (_arg2[1] = new Vertex3D()); v2 = (_arg2[2] = new Vertex3D()); }; this.material = _arg3; this.uv = _arg4; this.id = _totalFaces++; this.renderCommand = new RenderTriangle(this); } public function set uv(_arg1:Array):void{ if (((_arg1) && ((_arg1.length == 3)))){ uv0 = NumberUV(_arg1[0]); uv1 = NumberUV(_arg1[1]); uv2 = NumberUV(_arg1[2]); }; _uvArray = _arg1; } public function createNormal():void{ var _local1:Number3D = v0.getPosition(); var _local2:Number3D = v1.getPosition(); var _local3:Number3D = v2.getPosition(); _local2.minusEq(_local1); _local3.minusEq(_local1); faceNormal = Number3D.cross(_local2, _local3, faceNormal); faceNormal.normalize(); } override public function getRenderListItem():IRenderListItem{ return (renderCommand); } public function reset(_arg1:DisplayObject3D, _arg2:Array, _arg3:MaterialObject3D, _arg4:Array):void{ var _local5:MaterialObject3D; this.instance = _arg1; this.renderCommand.instance = _arg1; this.renderCommand.renderer = _arg3; this.vertices = _arg2; updateVertices(); this.material = _arg3; this.uv = _arg4; if ((_arg3 is BitmapMaterial)){ BitmapMaterial(_arg3).uvMatrices[this.renderCommand] = null; }; if ((_arg3 is CompositeMaterial)){ for each (_local5 in CompositeMaterial(_arg3).materials) { if ((_local5 is BitmapMaterial)){ BitmapMaterial(_local5).uvMatrices[this.renderCommand] = null; }; }; }; } public function get uv():Array{ return (_uvArray); } public function updateVertices():void{ v0 = vertices[0]; v1 = vertices[1]; v2 = vertices[2]; } } }//package org.papervision3d.core.geom.renderables
Section 33
//Triangle3DInstance (org.papervision3d.core.geom.renderables.Triangle3DInstance) package org.papervision3d.core.geom.renderables { import flash.display.*; import org.papervision3d.objects.*; import org.papervision3d.core.math.*; public class Triangle3DInstance { public var container:Sprite; public var instance:DisplayObject3D; public var visible:Boolean;// = false public var faceNormal:Number3D; public var screenZ:Number; public function Triangle3DInstance(_arg1:Triangle3D, _arg2:DisplayObject3D){ this.instance = _arg2; faceNormal = new Number3D(); } } }//package org.papervision3d.core.geom.renderables
Section 34
//VectorShapeRenderable (org.papervision3d.core.geom.renderables.VectorShapeRenderable) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.render.command.*; import org.papervision3d.objects.special.*; import org.papervision3d.materials.special.*; public class VectorShapeRenderable extends AbstractRenderable implements IRenderable { public var renderCommand:RenderVectorShape; public var material:VectorShapeMaterial; public function VectorShapeRenderable(_arg1:VectorShape3D, _arg2:RenderVectorShape){ this.instance = _arg1; this.renderCommand = _arg2; } override public function getRenderListItem():IRenderListItem{ return (this.renderCommand); } } }//package org.papervision3d.core.geom.renderables
Section 35
//Vertex3D (org.papervision3d.core.geom.renderables.Vertex3D) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.render.command.*; import org.papervision3d.core.math.*; import flash.utils.*; public class Vertex3D extends AbstractRenderable implements IRenderable { public var z:Number; public var vertex3DInstance:Vertex3DInstance; public var extra:Object; public var timestamp:Number; public var normal:Number3D; protected var position:Number3D; public var connectedFaces:Dictionary; public var x:Number; public var y:Number; private var persp:Number;// = 0 public function Vertex3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){ position = new Number3D(); super(); this.x = (position.x = _arg1); this.y = (position.y = _arg2); this.z = (position.z = _arg3); this.vertex3DInstance = new Vertex3DInstance(); this.normal = new Number3D(); this.connectedFaces = new Dictionary(); } public function perspective(_arg1:Number):Vertex3DInstance{ persp = (1 / (1 + (z / _arg1))); return (new Vertex3DInstance((x * persp), (y * persp), z)); } public function toNumber3D():Number3D{ return (new Number3D(x, y, z)); } public function clone():Vertex3D{ var _local1:Vertex3D = new Vertex3D(x, y, z); _local1.extra = extra; _local1.vertex3DInstance = vertex3DInstance.clone(); _local1.normal = normal.clone(); return (_local1); } public function getPosition():Number3D{ position.x = x; position.y = y; position.z = z; return (position); } public function calculateNormal():void{ var _local1:Triangle3D; var _local2:Number; var _local3:Number3D; _local2 = 0; normal.reset(); for each (_local1 in connectedFaces) { if (_local1.faceNormal){ _local2++; normal.plusEq(_local1.faceNormal); }; }; _local3 = getPosition(); _local3.x = (_local3.x / _local2); _local3.y = (_local3.y / _local2); _local3.z = (_local3.z / _local2); _local3.normalize(); normal.plusEq(_local3); normal.normalize(); } override public function getRenderListItem():IRenderListItem{ return (null); } public static function weighted(_arg1:Vertex3D, _arg2:Vertex3D, _arg3:Number, _arg4:Number):Vertex3D{ var _local5:Number = (_arg3 + _arg4); var _local6:Number = (_arg3 / _local5); var _local7:Number = (_arg4 / _local5); return (new Vertex3D(((_arg1.x * _local6) + (_arg2.x * _local7)), ((_arg1.y * _local6) + (_arg2.y * _local7)), ((_arg1.z * _local6) + (_arg2.z * _local7)))); } } }//package org.papervision3d.core.geom.renderables
Section 36
//Vertex3DInstance (org.papervision3d.core.geom.renderables.Vertex3DInstance) package org.papervision3d.core.geom.renderables { import org.papervision3d.core.math.*; public class Vertex3DInstance { public var y:Number; private var persp:Number;// = 0 public var normal:Number3D; public var visible:Boolean; public var extra:Object; public var x:Number; public var z:Number; public function Vertex3DInstance(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){ this.x = _arg1; this.y = _arg2; this.z = _arg3; this.visible = false; this.normal = new Number3D(); } public function deperspective(_arg1:Number):Vertex3D{ persp = (1 + (z / _arg1)); return (new Vertex3D((x * persp), (y * persp), z)); } public function distance(_arg1:Vertex3DInstance):Number{ return (Math.sqrt((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y))))); } public function clone():Vertex3DInstance{ var _local1:Vertex3DInstance = new Vertex3DInstance(x, y, z); _local1.visible = visible; _local1.extra = extra; return (_local1); } public function distanceSqr(_arg1:Vertex3DInstance):Number{ return ((((x - _arg1.x) * (x - _arg1.x)) + ((y - _arg1.y) * (y - _arg1.y)))); } public static function cross(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance):Number{ return (((_arg1.x * _arg2.y) - (_arg2.x * _arg1.y))); } public static function dot(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance):Number{ return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y))); } public static function subTo(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance):void{ _arg3.x = (_arg2.x - _arg1.x); _arg3.y = (_arg2.y - _arg1.y); } public static function median(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Number):Vertex3DInstance{ var _local4:Number = ((_arg1.z + _arg2.z) / 2); var _local5:Number = (_arg3 + _arg1.z); var _local6:Number = (_arg3 + _arg2.z); var _local7:Number = ((1 / (_arg3 + _local4)) / 2); return (new Vertex3DInstance((((_arg1.x * _local5) + (_arg2.x * _local6)) * _local7), (((_arg1.y * _local5) + (_arg2.y * _local6)) * _local7), _local4)); } public static function sub(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance):Vertex3DInstance{ return (new Vertex3DInstance((_arg2.x - _arg1.x), (_arg2.y - _arg1.y))); } } }//package org.papervision3d.core.geom.renderables
Section 37
//Lines3D (org.papervision3d.core.geom.Lines3D) package org.papervision3d.core.geom { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.log.*; import org.papervision3d.materials.special.*; import org.papervision3d.core.render.draw.*; public class Lines3D extends Vertices3D { private var _material:ILineDrawer; public var lines:Array; public function Lines3D(_arg1:LineMaterial=null, _arg2:String=null){ super(null, _arg2); if (!_arg1){ this.material = new LineMaterial(); } else { this.material = _arg1; }; init(); } private function init():void{ this.lines = new Array(); } public function removeAllLines():void{ while (lines.length > 0) { removeLine(lines[0]); }; } public function addLine(_arg1:Line3D):void{ lines.push(_arg1); _arg1.instance = this; if (geometry.vertices.indexOf(_arg1.v0) == -1){ geometry.vertices.push(_arg1.v0); }; if (geometry.vertices.indexOf(_arg1.v1) == -1){ geometry.vertices.push(_arg1.v1); }; if (_arg1.cV){ if (geometry.vertices.indexOf(_arg1.cV) == -1){ geometry.vertices.push(_arg1.cV); }; }; } public function addNewSegmentedLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number, _arg8:Number):Array{ var _local13:Line3D; var _local15:Vertex3D; var _local9:Number = ((_arg6 - _arg3) / _arg2); var _local10:Number = ((_arg7 - _arg4) / _arg2); var _local11:Number = ((_arg8 - _arg5) / _arg2); var _local12:Array = new Array(); var _local14:Vertex3D = new Vertex3D(_arg3, _arg4, _arg5); var _local16:Number = 0; while (_local16 <= _arg2) { _local15 = new Vertex3D((_arg3 + (_local9 * _local16)), (_arg4 + (_local10 * _local16)), (_arg5 + (_local11 * _local16))); _local13 = new Line3D(this, (material as LineMaterial), _arg1, _local14, _local15); addLine(_local13); _local12.push(_local13); _local14 = _local15; _local16++; }; return (_local12); } public function removeLine(_arg1:Line3D):void{ var _local2:int = lines.indexOf(_arg1); if (_local2 > -1){ lines.splice(_local2, 1); } else { PaperLogger.warning("Papervision3D Lines3D.removeLine : WARNING removal of non-existant line attempted. "); }; } override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ var _local3:Line3D; var _local4:Number; var _local5:RenderLine; super.project(_arg1, _arg2); for each (_local3 in lines) { if (_arg2.viewPort.lineCuller.testLine(_local3)){ _local5 = _local3.renderCommand; _local5.renderer = _local3.material; _local5.size = _local3.size; _local4 = (_local4 + (_local5.screenZ = ((_local3.v0.vertex3DInstance.z + _local3.v1.vertex3DInstance.z) / 2))); _local5.v0 = _local3.v0.vertex3DInstance; _local5.v1 = _local3.v1.vertex3DInstance; _arg2.renderer.addToRenderList(_local5); }; }; return ((_local4 / (lines.length + 1))); } public function addNewLine(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number):Line3D{ var _local8:Line3D = new Line3D(this, (material as LineMaterial), _arg1, new Vertex3D(_arg2, _arg3, _arg4), new Vertex3D(_arg5, _arg6, _arg7)); addLine(_local8); return (_local8); } } }//package org.papervision3d.core.geom
Section 38
//TriangleMesh3D (org.papervision3d.core.geom.TriangleMesh3D) package org.papervision3d.core.geom { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import flash.utils.*; import org.papervision3d.core.culling.*; import org.papervision3d.core.render.draw.*; public class TriangleMesh3D extends Vertices3D { private var _tri:RenderTriangle; private var _dtStore:Array; private var _dtActive:Array; public function TriangleMesh3D(_arg1:MaterialObject3D, _arg2:Array, _arg3:Array, _arg4:String=null){ _dtStore = new Array(); _dtActive = new Array(); super(_arg2, _arg4); this.geometry.faces = ((_arg3) || (new Array())); this.material = ((_arg1) || (MaterialObject3D.DEFAULT)); } public function projectTexture(_arg1:String="x", _arg2:String="y"):void{ var _local10:String; var _local11:Triangle3D; var _local12:Array; var _local13:Vertex3D; var _local14:Vertex3D; var _local15:Vertex3D; var _local16:NumberUV; var _local17:NumberUV; var _local18:NumberUV; var _local3:Array = this.geometry.faces; var _local4:Object = this.boundingBox(); var _local5:Number = _local4.min[_arg1]; var _local6:Number = _local4.size[_arg1]; var _local7:Number = _local4.min[_arg2]; var _local8:Number = _local4.size[_arg2]; var _local9:MaterialObject3D = this.material; for (_local10 in _local3) { _local11 = _local3[Number(_local10)]; _local12 = _local11.vertices; _local13 = _local12[0]; _local14 = _local12[1]; _local15 = _local12[2]; _local16 = new NumberUV(((_local13[_arg1] - _local5) / _local6), ((_local13[_arg2] - _local7) / _local8)); _local17 = new NumberUV(((_local14[_arg1] - _local5) / _local6), ((_local14[_arg2] - _local7) / _local8)); _local18 = new NumberUV(((_local15[_arg1] - _local5) / _local6), ((_local15[_arg2] - _local7) / _local8)); _local11.uv = [_local16, _local17, _local18]; }; } public function quarterFaces():void{ var _local4:Triangle3D; var _local6:Vertex3D; var _local7:Vertex3D; var _local8:Vertex3D; var _local9:Vertex3D; var _local10:Vertex3D; var _local11:Vertex3D; var _local12:NumberUV; var _local13:NumberUV; var _local14:NumberUV; var _local15:NumberUV; var _local16:NumberUV; var _local17:NumberUV; var _local18:Triangle3D; var _local19:Triangle3D; var _local20:Triangle3D; var _local21:Triangle3D; var _local1:Array = new Array(); var _local2:Array = new Array(); var _local3:Array = this.geometry.faces; var _local5:int = _local3.length; while ((_local4 = _local3[--_local5])) { _local6 = _local4.v0; _local7 = _local4.v1; _local8 = _local4.v2; _local9 = new Vertex3D(((_local6.x + _local7.x) / 2), ((_local6.y + _local7.y) / 2), ((_local6.z + _local7.z) / 2)); _local10 = new Vertex3D(((_local7.x + _local8.x) / 2), ((_local7.y + _local8.y) / 2), ((_local7.z + _local8.z) / 2)); _local11 = new Vertex3D(((_local8.x + _local6.x) / 2), ((_local8.y + _local6.y) / 2), ((_local8.z + _local6.z) / 2)); this.geometry.vertices.push(_local9, _local10, _local11); _local12 = _local4.uv[0]; _local13 = _local4.uv[1]; _local14 = _local4.uv[2]; _local15 = new NumberUV(((_local12.u + _local13.u) / 2), ((_local12.v + _local13.v) / 2)); _local16 = new NumberUV(((_local13.u + _local14.u) / 2), ((_local13.v + _local14.v) / 2)); _local17 = new NumberUV(((_local14.u + _local12.u) / 2), ((_local14.v + _local12.v) / 2)); _local18 = new Triangle3D(this, [_local6, _local9, _local11], _local4.material, [_local12, _local15, _local17]); _local19 = new Triangle3D(this, [_local9, _local7, _local10], _local4.material, [_local15, _local13, _local16]); _local20 = new Triangle3D(this, [_local11, _local10, _local8], _local4.material, [_local17, _local16, _local14]); _local21 = new Triangle3D(this, [_local9, _local10, _local11], _local4.material, [_local15, _local16, _local17]); _local2.push(_local18, _local19, _local20, _local21); }; this.geometry.faces = _local2; this.mergeVertices(); this.geometry.ready = true; } override public function set material(_arg1:MaterialObject3D):void{ var _local2:Triangle3D; super.material = _arg1; for each (_local2 in geometry.faces) { _local2.material = _arg1; }; } public function mergeVertices():void{ var _local3:Vertex3D; var _local4:Triangle3D; var _local5:Vertex3D; var _local1:Dictionary = new Dictionary(); var _local2:Array = new Array(); for each (_local3 in this.geometry.vertices) { for each (_local5 in _local1) { if ((((((_local3.x == _local5.x)) && ((_local3.y == _local5.y)))) && ((_local3.z == _local5.z)))){ _local1[_local3] = _local5; break; }; }; if (!_local1[_local3]){ _local1[_local3] = _local3; _local2.push(_local3); }; }; this.geometry.vertices = _local2; for each (_local4 in geometry.faces) { _local4.v0 = (_local4.vertices[0] = _local1[_local4.v0]); _local4.v1 = (_local4.vertices[1] = _local1[_local4.v1]); _local4.v2 = (_local4.vertices[2] = _local1[_local4.v2]); }; } override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ var _local5:Triangle3D; var _local6:Array; var _local7:Number; var _local8:Number; var _local9:ITriangleCuller; var _local10:Vertex3DInstance; var _local11:Vertex3DInstance; var _local12:Vertex3DInstance; var _local13:Triangle3DInstance; var _local14:Triangle3D; var _local15:MaterialObject3D; var _local16:RenderTriangle; _dtStore = []; _dtActive = new Array(); var _local3:int = this.geometry.vertices.length; var _local4:Array = []; if (((((((_arg2.clipping) && (this.useClipping))) && (!(this.culled)))) && ((_arg2.camera.useCulling) ? (cullTest == 0) : true))){ super.projectEmpty(_arg1, _arg2); _arg2.clipping.setDisplayObject(this, _arg2); for each (_local5 in this.geometry.faces) { if (_arg2.clipping.testFace(_local5, this, _arg2)){ _arg2.clipping.clipFace(_local5, this, _local15, _arg2, _local4); } else { _local4.push(_local5); }; }; super.project(_arg1, _arg2); _arg2.camera.projectFaces(_local4, this, _arg2); } else { super.project(_arg1, _arg2); _local4 = this.geometry.faces; }; if (!this.culled){ _local6 = this.geometry.faces; _local7 = 0; _local8 = 0; _local9 = _arg2.triangleCuller; for each (_local14 in _local4) { _local15 = (_local14.material) ? _local14.material : material; _local10 = _local14.v0.vertex3DInstance; _local11 = _local14.v1.vertex3DInstance; _local12 = _local14.v2.vertex3DInstance; if (_local9.testFace(_local14, _local10, _local11, _local12)){ _local16 = _local14.renderCommand; _local7 = (_local7 + (_local16.screenZ = setScreenZ(meshSort, _local10, _local11, _local12))); _local8++; _local16.renderer = (_local15 as ITriangleDrawer); _local16.v0 = _local10; _local16.v1 = _local11; _local16.v2 = _local12; _local16.uv0 = _local14.uv0; _local16.uv1 = _local14.uv1; _local16.uv2 = _local14.uv2; if (_arg2.quadrantTree){ if (_local16.create == null){ _local16.create = createRenderTriangle; }; _local16.update(); if ((((_local16.area < 0)) && (((_local14.material.doubleSided) || (((_local14.material.oneSide) && (_local14.material.opposite))))))){ _local16.area = -(_local16.area); }; }; _arg2.renderer.addToRenderList(_local16); } else { _arg2.renderStatistics.culledTriangles++; }; }; if (_local3){ while (this.geometry.vertices.length > _local3) { this.geometry.vertices.pop(); }; }; return ((this.screenZ = (_local7 / _local8))); } else { _arg2.renderStatistics.culledObjects++; }; return (!NULL!); } public function createRenderTriangle(_arg1:Triangle3D, _arg2:MaterialObject3D, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance, _arg5:Vertex3DInstance, _arg6:NumberUV, _arg7:NumberUV, _arg8:NumberUV):RenderTriangle{ if (_dtStore.length){ _dtActive.push((_tri = _dtStore.pop())); } else { _dtActive.push((_tri = new RenderTriangle(_arg1))); }; _tri.instance = this; _tri.triangle = _arg1; _tri.renderableInstance = _arg1; _tri.renderer = _arg2; _tri.create = createRenderTriangle; _tri.v0 = _arg3; _tri.v1 = _arg4; _tri.v2 = _arg5; _tri.uv0 = _arg6; _tri.uv1 = _arg7; _tri.uv2 = _arg8; _tri.update(); return (_tri); } protected function setScreenZ(_arg1:uint, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Number{ switch (_arg1){ case DisplayObject3D.MESH_SORT_CENTER: return ((((_arg2.z + _arg3.z) + _arg4.z) / 3)); case DisplayObject3D.MESH_SORT_FAR: return (Math.max(_arg2.z, _arg3.z, _arg4.z)); case DisplayObject3D.MESH_SORT_CLOSE: return (Math.min(_arg2.z, _arg3.z, _arg4.z)); }; return (0); } override public function clone():DisplayObject3D{ var _local1:DisplayObject3D = super.clone(); var _local2:TriangleMesh3D = new TriangleMesh3D(this.material, [], [], _local1.name); if (this.materials){ _local2.materials = this.materials.clone(); }; if (_local1.geometry){ _local2.geometry = _local1.geometry.clone(_local2); }; _local2.copyTransform(this); return (_local2); } } }//package org.papervision3d.core.geom
Section 39
//Vertices3D (org.papervision3d.core.geom.Vertices3D) package org.papervision3d.core.geom { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.core.culling.*; public class Vertices3D extends DisplayObject3D { public function Vertices3D(_arg1:Array, _arg2:String=null){ super(_arg2, new GeometryObject3D()); this.geometry.vertices = ((_arg1) || (new Array())); } override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ super.project(_arg1, _arg2); if (this.culled){ return (0); }; if ((_arg2.camera is IObjectCuller)){ return (projectFrustum(_arg1, _arg2)); }; if (((!(this.geometry)) || (!(this.geometry.vertices)))){ return (0); }; return (_arg2.camera.projectVertices(this.geometry.vertices, this, _arg2)); } public function projectEmpty(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ return (super.project(_arg1, _arg2)); } public function worldBoundingBox():Object{ var _local3:Number3D; var _local4:Vertex3D; var _local1:Array = this.geometry.vertices; var _local2:Object = new Object(); _local2.min = new Number3D(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE); _local2.max = new Number3D(-(Number.MAX_VALUE), -(Number.MAX_VALUE), -(Number.MAX_VALUE)); _local2.size = new Number3D(); for each (_local4 in _local1) { _local3 = _local4.getPosition(); Matrix3D.multiplyVector(this.world, _local3); _local2.min.x = Math.min(_local3.x, _local2.min.x); _local2.min.y = Math.min(_local3.y, _local2.min.y); _local2.min.z = Math.min(_local3.z, _local2.min.z); _local2.max.x = Math.max(_local3.x, _local2.max.x); _local2.max.y = Math.max(_local3.y, _local2.max.y); _local2.max.z = Math.max(_local3.z, _local2.max.z); }; _local2.size.x = (_local2.max.x - _local2.min.x); _local2.size.y = (_local2.max.y - _local2.min.y); _local2.size.z = (_local2.max.z - _local2.min.z); return (_local2); } public function boundingBox():Object{ var _local3:Vertex3D; var _local1:Array = this.geometry.vertices; var _local2:Object = new Object(); _local2.min = new Number3D(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE); _local2.max = new Number3D(-(Number.MAX_VALUE), -(Number.MAX_VALUE), -(Number.MAX_VALUE)); _local2.size = new Number3D(); for each (_local3 in _local1) { _local2.min.x = Math.min(_local3.x, _local2.min.x); _local2.min.y = Math.min(_local3.y, _local2.min.y); _local2.min.z = Math.min(_local3.z, _local2.min.z); _local2.max.x = Math.max(_local3.x, _local2.max.x); _local2.max.y = Math.max(_local3.y, _local2.max.y); _local2.max.z = Math.max(_local3.z, _local2.max.z); }; _local2.size.x = (_local2.max.x - _local2.min.x); _local2.size.y = (_local2.max.y - _local2.min.y); _local2.size.z = (_local2.max.z - _local2.min.z); return (_local2); } public function projectFrustum(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ return (0); } public function transformVertices(_arg1:Matrix3D):void{ geometry.transformVertices(_arg1); } override public function clone():DisplayObject3D{ var _local1:DisplayObject3D = super.clone(); var _local2:Vertices3D = new Vertices3D(null, _local1.name); _local2.material = _local1.material; if (_local1.materials){ _local2.materials = _local1.materials.clone(); }; if (this.geometry){ _local2.geometry = this.geometry.clone(_local2); }; _local2.copyTransform(this); return (_local2); } } }//package org.papervision3d.core.geom
Section 40
//PaperLoggerEvent (org.papervision3d.core.log.event.PaperLoggerEvent) package org.papervision3d.core.log.event { import flash.events.*; import org.papervision3d.core.log.*; public class PaperLoggerEvent extends Event { public var paperLogVO:PaperLogVO; public static const TYPE_LOGEVENT:String = "logEvent"; public function PaperLoggerEvent(_arg1:PaperLogVO){ super(TYPE_LOGEVENT); this.paperLogVO = _arg1; } } }//package org.papervision3d.core.log.event
Section 41
//AbstractPaperLogger (org.papervision3d.core.log.AbstractPaperLogger) package org.papervision3d.core.log { import org.papervision3d.core.log.event.*; public class AbstractPaperLogger implements IPaperLogger { public function registerWithPaperLogger(_arg1:PaperLogger):void{ _arg1.addEventListener(PaperLoggerEvent.TYPE_LOGEVENT, onLogEvent); } public function debug(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ } public function warning(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ } public function log(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ } public function fatal(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ } public function error(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ } protected function onLogEvent(_arg1:PaperLoggerEvent):void{ var _local2:PaperLogVO = _arg1.paperLogVO; switch (_local2.level){ case LogLevel.LOG: log(_local2.msg, _local2.object, _local2.arg); break; case LogLevel.INFO: info(_local2.msg, _local2.object, _local2.arg); break; case LogLevel.ERROR: error(_local2.msg, _local2.object, _local2.arg); break; case LogLevel.DEBUG: debug(_local2.msg, _local2.object, _local2.arg); break; case LogLevel.WARNING: warning(_local2.msg, _local2.object, _local2.arg); break; case LogLevel.FATAL: fatal(_local2.msg, _local2.object, _local2.arg); break; default: log(_local2.msg, _local2.object, _local2.arg); break; }; } public function unregisterFromPaperLogger(_arg1:PaperLogger):void{ _arg1.removeEventListener(PaperLoggerEvent.TYPE_LOGEVENT, onLogEvent); } public function info(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ } } }//package org.papervision3d.core.log
Section 42
//IPaperLogger (org.papervision3d.core.log.IPaperLogger) package org.papervision3d.core.log { public interface IPaperLogger { function debug(_arg1:String, _arg2:Object=null, _arg3:Array=null):void; function log(_arg1:String, _arg2:Object=null, _arg3:Array=null):void; function error(_arg1:String, _arg2:Object=null, _arg3:Array=null):void; function fatal(_arg1:String, _arg2:Object=null, _arg3:Array=null):void; function warning(_arg1:String, _arg2:Object=null, _arg3:Array=null):void; function info(_arg1:String, _arg2:Object=null, _arg3:Array=null):void; } }//package org.papervision3d.core.log
Section 43
//LogLevel (org.papervision3d.core.log.LogLevel) package org.papervision3d.core.log { public class LogLevel { public static const FATAL:int = 5; public static const ERROR:int = 4; public static const LOG:int = 0; public static const INFO:int = 1; public static const DEBUG:int = 2; public static const WARNING:int = 3; } }//package org.papervision3d.core.log
Section 44
//PaperLogger (org.papervision3d.core.log.PaperLogger) package org.papervision3d.core.log { import flash.events.*; import org.papervision3d.core.log.event.*; public class PaperLogger extends EventDispatcher { public var traceLogger:PaperTraceLogger; private static var instance:PaperLogger; public function PaperLogger(){ if (instance){ throw (new Error("Don't call the PaperLogger constructor directly")); }; traceLogger = new PaperTraceLogger(); registerLogger(traceLogger); } public function registerLogger(_arg1:AbstractPaperLogger):void{ _arg1.registerWithPaperLogger(this); } public function _debug(_arg1:String, _arg2:Object=null, ... _args):void{ var _local4:PaperLogVO = new PaperLogVO(LogLevel.DEBUG, _arg1, _arg2, _args); var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4); dispatchEvent(_local5); } public function _log(_arg1:String, _arg2:Object=null, ... _args):void{ var _local4:PaperLogVO = new PaperLogVO(LogLevel.LOG, _arg1, _arg2, _args); var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4); dispatchEvent(_local5); } public function _error(_arg1:String, _arg2:Object=null, ... _args):void{ var _local4:PaperLogVO = new PaperLogVO(LogLevel.ERROR, _arg1, _arg2, _args); var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4); dispatchEvent(_local5); } public function unregisterLogger(_arg1:AbstractPaperLogger):void{ _arg1.unregisterFromPaperLogger(this); } public function _info(_arg1:String, _arg2:Object=null, ... _args):void{ var _local4:PaperLogVO = new PaperLogVO(LogLevel.INFO, _arg1, _arg2, _args); var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4); dispatchEvent(_local5); } public function _warning(_arg1:String, _arg2:Object=null, ... _args):void{ var _local4:PaperLogVO = new PaperLogVO(LogLevel.WARNING, _arg1, _arg2, _args); var _local5:PaperLoggerEvent = new PaperLoggerEvent(_local4); dispatchEvent(_local5); } public static function debug(_arg1:String, _arg2:Object=null, ... _args):void{ getInstance()._debug(_arg1); } public static function log(_arg1:String, _arg2:Object=null, ... _args):void{ getInstance()._log(_arg1); } public static function error(_arg1:String, _arg2:Object=null, ... _args):void{ getInstance()._error(_arg1); } public static function getInstance():PaperLogger{ if (!instance){ instance = new (PaperLogger); }; return (instance); } public static function warning(_arg1:String, _arg2:Object=null, ... _args):void{ getInstance()._warning(_arg1); } public static function info(_arg1:String, _arg2:Object=null, ... _args):void{ getInstance()._info(_arg1); } } }//package org.papervision3d.core.log
Section 45
//PaperLogVO (org.papervision3d.core.log.PaperLogVO) package org.papervision3d.core.log { public class PaperLogVO { public var msg:String; public var level:int; public var arg:Array; public var object:Object; public function PaperLogVO(_arg1:int, _arg2:String, _arg3:Object, _arg4:Array){ this.level = _arg1; this.msg = _arg2; this.object = _arg3; this.arg = _arg4; } } }//package org.papervision3d.core.log
Section 46
//PaperTraceLogger (org.papervision3d.core.log.PaperTraceLogger) package org.papervision3d.core.log { public class PaperTraceLogger extends AbstractPaperLogger implements IPaperLogger { override public function warning(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ trace("WARNING:", _arg1, _arg3); } override public function log(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ trace("LOG:", _arg1, _arg3); } override public function error(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ trace("ERROR:", _arg1, _arg3); } override public function fatal(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ trace("FATAL:", _arg1, _arg3); } override public function info(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ trace("INFO:", _arg1, _arg3); } override public function debug(_arg1:String, _arg2:Object=null, _arg3:Array=null):void{ trace("DEBUG:", _arg1, _arg3); } } }//package org.papervision3d.core.log
Section 47
//AbstractLightShadeMaterial (org.papervision3d.core.material.AbstractLightShadeMaterial) package org.papervision3d.core.material { import org.papervision3d.core.proto.*; import org.papervision3d.materials.utils.*; import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; import org.papervision3d.core.math.*; import org.papervision3d.core.render.material.*; import flash.utils.*; import org.papervision3d.core.render.draw.*; public class AbstractLightShadeMaterial extends TriangleMaterial implements ITriangleDrawer, IUpdateBeforeMaterial { public var lightMatrices:Dictionary; private var _light:LightObject3D; protected static var lightMatrix:Matrix3D; public function AbstractLightShadeMaterial(){ init(); } public function updateBeforeRender(_arg1:RenderSessionData):void{ var _local2:Object; var _local3:DisplayObject3D; for (_local2 in objects) { _local3 = (_local2 as DisplayObject3D); lightMatrices[_local2] = LightMatrix.getLightMatrix(light, _local3, _arg1, lightMatrices[_local2]); }; } protected function init():void{ lightMatrices = new Dictionary(); } public function get light():LightObject3D{ return (_light); } public function set light(_arg1:LightObject3D):void{ _light = _arg1; } } }//package org.papervision3d.core.material
Section 48
//TriangleMaterial (org.papervision3d.core.material.TriangleMaterial) package org.papervision3d.core.material { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.render.draw.*; public class TriangleMaterial extends MaterialObject3D implements ITriangleDrawer { override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ } override public function drawRT(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData):void{ } } }//package org.papervision3d.core.material
Section 49
//ClassificationUtil (org.papervision3d.core.math.util.ClassificationUtil) package org.papervision3d.core.math.util { import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; public class ClassificationUtil { public static const BACK:uint = 1; public static const STRADDLE:uint = 3; public static const FRONT:uint = 0; public static const COINCIDING:uint = 2; protected static var point:Vertex3D; public static function classifyPoint(_arg1:Vertex3D, _arg2:Plane3D, _arg3:Number=0.01):uint{ var _local4:Number = _arg2.vertDistance(_arg1); if (_local4 < -(_arg3)){ return (BACK); }; if (_local4 > _arg3){ return (FRONT); }; return (COINCIDING); } public static function classifyTriangle(_arg1:Triangle3D, _arg2:Plane3D, _arg3:Number=0.01):uint{ if (!_arg1){ return (null); }; return (classifyPoints(_arg1.vertices, _arg2, _arg3)); } public static function classifyPoints(_arg1:Array, _arg2:Plane3D, _arg3:Number=0.01):uint{ var _local6:uint; var _local4:uint; var _local5:uint; for each (point in _arg1) { _local6 = classifyPoint(point, _arg2, _arg3); if (_local6 == FRONT){ _local4++; } else { if (_local6 == BACK){ _local5++; }; }; }; if ((((_local4 > 0)) && ((_local5 == 0)))){ return (FRONT); }; if ((((_local4 == 0)) && ((_local5 > 0)))){ return (BACK); }; if ((((_local4 > 0)) && ((_local5 > 0)))){ return (STRADDLE); }; return (COINCIDING); } } }//package org.papervision3d.core.math.util
Section 50
//FastRectangleTools (org.papervision3d.core.math.util.FastRectangleTools) package org.papervision3d.core.math.util { import flash.geom.*; import org.papervision3d.core.math.*; public class FastRectangleTools { public static function getRotatedBounds(_arg1:Rectangle, _arg2:Number, _arg3:Rectangle=null):Rectangle{ if (!_arg3){ _arg3 = new Rectangle(); }; _arg2 = (_arg2 * Number3D.toRADIANS); var _local4:Number = _arg1.width; var _local5:Number = _arg1.height; var _local6:Number = Math.abs(Math.sin(_arg2)); var _local7:Number = Math.abs(Math.cos(_arg2)); _arg3.left = (_arg1.x - (0.5 * ((_local4 * _local7) + (_local5 * _local6)))); _arg3.right = (_arg1.x + (0.5 * ((_local4 * _local7) + (_local5 * _local6)))); _arg3.top = (_arg1.y - (0.5 * ((_local4 * _local6) + (_local5 * _local7)))); _arg3.bottom = (_arg1.y + (0.5 * ((_local4 * _local6) + (_local5 * _local7)))); return (_arg3); } public static function intersection(_arg1:Rectangle, _arg2:Rectangle, _arg3:Rectangle=null):Rectangle{ if (!_arg3){ _arg3 = new Rectangle(); }; if (!intersects(_arg1, _arg2)){ _arg3.x = (_arg3.y = (_arg3.width = (_arg3.height = 0))); return (_arg3); }; _arg3.left = ((_arg1.left)>_arg2.left) ? _arg1.left : _arg2.left; _arg3.right = ((_arg1.right)<_arg2.right) ? _arg1.right : _arg2.right; _arg3.top = ((_arg1.top)>_arg2.top) ? _arg1.top : _arg2.top; _arg3.bottom = ((_arg1.bottom)<_arg2.bottom) ? _arg1.bottom : _arg2.bottom; return (_arg3); } public static function intersects(_arg1:Rectangle, _arg2:Rectangle):Boolean{ if (((!((((_arg1.right < _arg2.left)) || ((_arg1.left > _arg2.right))))) && (!((((_arg1.bottom < _arg2.top)) || ((_arg1.top > _arg2.bottom))))))){ return (true); }; return (false); } } }//package org.papervision3d.core.math.util
Section 51
//GLU (org.papervision3d.core.math.util.GLU) package org.papervision3d.core.math.util { public class GLU { public static function unProject(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Array, _arg5:Array, _arg6:Array, _arg7:Array):Boolean{ var _local8:Array = new Array(16); var _local9:Array = new Array(4); multMatrices(_arg4, _arg5, _local8); if (!invertMatrix(_local8, _local8)){ return (false); }; _local9[0] = _arg1; _local9[1] = _arg2; _local9[2] = _arg3; _local9[3] = 1; _local9[0] = ((_local9[0] - _arg6[0]) / _arg6[2]); _local9[1] = ((_local9[1] - _arg6[1]) / _arg6[3]); _local9[0] = ((_local9[0] * 2) - 1); _local9[1] = ((_local9[1] * 2) - 1); _local9[2] = ((_local9[2] * 2) - 1); multMatrixVec(_local8, _local9, _arg7); if (_arg7[3] == 0){ return (false); }; _arg7[0] = (_arg7[0] / _arg7[3]); _arg7[1] = (_arg7[1] / _arg7[3]); _arg7[2] = (_arg7[2] / _arg7[3]); return (true); } public static function scale(_arg1:Array, _arg2:Number, _arg3:Number, _arg4:Number):void{ makeIdentity(_arg1); _arg1[0] = _arg2; _arg1[5] = _arg3; _arg1[10] = _arg4; } public static function multMatrixVec(_arg1:Array, _arg2:Array, _arg3:Array):void{ var _local4:int; _local4 = 0; while (_local4 < 4) { _arg3[_local4] = ((((_arg2[0] * _arg1[int(((0 * 4) + _local4))]) + (_arg2[1] * _arg1[int(((1 * 4) + _local4))])) + (_arg2[2] * _arg1[int(((2 * 4) + _local4))])) + (_arg2[3] * _arg1[int(((3 * 4) + _local4))])); _local4++; }; } public static function invertMatrix(_arg1:Array, _arg2:Array):Boolean{ var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:Number; var _local8:Array = new Array(4); _local3 = 0; while (_local3 < 4) { _local8[_local3] = new Array(4); _local4 = 0; while (_local4 < 4) { _local8[_local3][_local4] = _arg1[((_local3 * 4) + _local4)]; _local4++; }; _local3++; }; makeIdentity(_arg2); _local3 = 0; while (_local3 < 4) { _local6 = _local3; _local4 = (_local3 + 1); while (_local4 < 4) { if (Math.abs(_local8[_local4][_local3]) > Math.abs(_local8[_local3][_local3])){ _local6 = _local4; }; _local4++; }; if (_local6 != _local3){ _local5 = 0; while (_local5 < 4) { _local7 = _local8[_local3][_local5]; _local8[_local3][_local5] = _local8[_local6][_local5]; _local8[_local6][_local5] = _local7; _local7 = _arg2[((_local3 * 4) + _local5)]; _arg2[((_local3 * 4) + _local5)] = _arg2[((_local6 * 4) + _local5)]; _arg2[((_local6 * 4) + _local5)] = _local7; _local5++; }; }; if (_local8[_local3][_local3] == 0){ return (false); }; _local7 = _local8[_local3][_local3]; _local5 = 0; while (_local5 < 4) { _local8[_local3][_local5] = (_local8[_local3][_local5] / _local7); _arg2[((_local3 * 4) + _local5)] = (_arg2[((_local3 * 4) + _local5)] / _local7); _local5++; }; _local4 = 0; while (_local4 < 4) { if (_local4 != _local3){ _local7 = _local8[_local4][_local3]; _local5 = 0; while (_local5 < 4) { _local8[_local4][_local5] = (_local8[_local4][_local5] - (_local8[_local3][_local5] * _local7)); _arg2[((_local4 * 4) + _local5)] = (_arg2[((_local4 * 4) + _local5)] - (_arg2[((_local3 * 4) + _local5)] * _local7)); _local5++; }; }; _local4++; }; _local3++; }; return (true); } public static function ortho(_arg1:Array, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Number):Boolean{ var _local8:Number = ((_arg3 + _arg2) / (_arg3 - _arg2)); var _local9:Number = ((_arg4 + _arg5) / (_arg4 - _arg5)); var _local10:Number = ((_arg7 + _arg6) / (_arg7 - _arg6)); makeIdentity(_arg1); _arg1[0] = (2 / (_arg3 - _arg2)); _arg1[5] = (2 / (_arg4 - _arg5)); _arg1[10] = (-2 / (_arg7 - _arg6)); _arg1[12] = _local8; _arg1[13] = _local9; _arg1[14] = _local10; return (true); } public static function multMatrices(_arg1:Array, _arg2:Array, _arg3:Array):void{ var _local4:int; var _local5:int; _local4 = 0; while (_local4 < 4) { _local5 = 0; while (_local5 < 4) { _arg3[int(((_local4 * 4) + _local5))] = ((((_arg1[int(((_local4 * 4) + 0))] * _arg2[int(((0 * 4) + _local5))]) + (_arg1[int(((_local4 * 4) + 1))] * _arg2[int(((1 * 4) + _local5))])) + (_arg1[int(((_local4 * 4) + 2))] * _arg2[int(((2 * 4) + _local5))])) + (_arg1[int(((_local4 * 4) + 3))] * _arg2[int(((3 * 4) + _local5))])); _local5++; }; _local4++; }; } public static function perspective(_arg1:Array, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number):Boolean{ var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number = ((_arg2 / 2) * (Math.PI / 180)); _local8 = (_arg5 - _arg4); _local6 = Math.sin(_local9); if ((((((_local8 == 0)) || ((_local6 == 0)))) || ((_arg3 == 0)))){ return (false); }; _local7 = (Math.cos(_local9) / _local6); makeIdentity(_arg1); _arg1[0] = (_local7 / _arg3); _arg1[5] = _local7; _arg1[10] = (-((_arg5 + _arg4)) / _local8); _arg1[11] = -1; _arg1[14] = (-(((2 * _arg4) * _arg5)) / _local8); _arg1[15] = 0; return (true); } public static function makeIdentity(_arg1:Array):void{ _arg1[(0 + (4 * 0))] = 1; _arg1[(0 + (4 * 1))] = 0; _arg1[(0 + (4 * 2))] = 0; _arg1[(0 + (4 * 3))] = 0; _arg1[(1 + (4 * 0))] = 0; _arg1[(1 + (4 * 1))] = 1; _arg1[(1 + (4 * 2))] = 0; _arg1[(1 + (4 * 3))] = 0; _arg1[(2 + (4 * 0))] = 0; _arg1[(2 + (4 * 1))] = 0; _arg1[(2 + (4 * 2))] = 1; _arg1[(2 + (4 * 3))] = 0; _arg1[(3 + (4 * 0))] = 0; _arg1[(3 + (4 * 1))] = 0; _arg1[(3 + (4 * 2))] = 0; _arg1[(3 + (4 * 3))] = 1; } } }//package org.papervision3d.core.math.util
Section 52
//AxisAlignedBoundingBox (org.papervision3d.core.math.AxisAlignedBoundingBox) package org.papervision3d.core.math { import org.papervision3d.core.geom.renderables.*; public class AxisAlignedBoundingBox { public var minX:Number; public var minY:Number; public var minZ:Number; public var maxX:Number; public var maxY:Number; public var maxZ:Number; protected var _vertices:Array; public function AxisAlignedBoundingBox(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number){ this.minX = _arg1; this.minY = _arg2; this.minZ = _arg3; this.maxX = _arg4; this.maxY = _arg5; this.maxZ = _arg6; createBoxVertices(); } protected function createBoxVertices():void{ _vertices = new Array(); _vertices.push(new Vertex3D(minX, minY, minZ)); _vertices.push(new Vertex3D(minX, minY, maxZ)); _vertices.push(new Vertex3D(minX, maxY, minZ)); _vertices.push(new Vertex3D(minX, maxY, maxZ)); _vertices.push(new Vertex3D(maxX, minY, minZ)); _vertices.push(new Vertex3D(maxX, minY, maxZ)); _vertices.push(new Vertex3D(maxX, maxY, minZ)); _vertices.push(new Vertex3D(maxX, maxY, maxZ)); } public function getBoxVertices():Array{ return (_vertices); } public function merge(_arg1:AxisAlignedBoundingBox):void{ this.minX = Math.min(this.minX, _arg1.minX); this.minY = Math.min(this.minY, _arg1.minY); this.minZ = Math.min(this.minZ, _arg1.minZ); this.maxX = Math.max(this.maxX, _arg1.maxX); this.maxY = Math.max(this.maxY, _arg1.maxY); this.maxZ = Math.max(this.maxZ, _arg1.maxZ); createBoxVertices(); } public static function createFromVertices(_arg1:Array):AxisAlignedBoundingBox{ var _local8:Vertex3D; var _local2:Number = Number.MAX_VALUE; var _local3:Number = Number.MAX_VALUE; var _local4:Number = Number.MAX_VALUE; var _local5:Number = -(_local2); var _local6:Number = -(_local3); var _local7:Number = -(_local4); for each (_local8 in _arg1) { _local2 = Math.min(_local2, _local8.x); _local3 = Math.min(_local3, _local8.y); _local4 = Math.min(_local4, _local8.z); _local5 = Math.max(_local5, _local8.x); _local6 = Math.max(_local6, _local8.y); _local7 = Math.max(_local7, _local8.z); }; return (new AxisAlignedBoundingBox(_local2, _local3, _local4, _local5, _local6, _local7)); } } }//package org.papervision3d.core.math
Section 53
//BoundingSphere (org.papervision3d.core.math.BoundingSphere) package org.papervision3d.core.math { import org.papervision3d.core.geom.renderables.*; public class BoundingSphere { public var maxDistance:Number; public var radius:Number; public function BoundingSphere(_arg1:Number){ this.maxDistance = _arg1; this.radius = Math.sqrt(_arg1); } public static function getFromVertices(_arg1:Array):BoundingSphere{ var _local3:Number; var _local4:Vertex3D; var _local2:Number = 0; for each (_local4 in _arg1) { _local3 = (((_local4.x * _local4.x) + (_local4.y * _local4.y)) + (_local4.z * _local4.z)); _local2 = ((_local3)>_local2) ? _local3 : _local2; }; return (new BoundingSphere(_local2)); } } }//package org.papervision3d.core.math
Section 54
//Matrix3D (org.papervision3d.core.math.Matrix3D) package org.papervision3d.core.math { import org.papervision3d.*; public class Matrix3D { public var n31:Number; public var n32:Number; public var n11:Number; public var n34:Number; public var n13:Number; public var n14:Number; public var n33:Number; public var n12:Number; public var n41:Number; public var n42:Number; public var n21:Number; public var n22:Number; public var n23:Number; public var n24:Number; public var n44:Number; public var n43:Number; private static var _cos:Function = Math.cos; private static var _sin:Function = Math.sin; private static var temp:Matrix3D = Matrix3D.IDENTITY; private static var n3Di:Number3D = Number3D.ZERO; private static var n3Dj:Number3D = Number3D.ZERO; private static var n3Dk:Number3D = Number3D.ZERO; private static var toDEGREES:Number = 57.2957795130823; private static var toRADIANS:Number = 0.0174532925199433; public function Matrix3D(_arg1:Array=null){ reset(_arg1); } public function calculateMultiply3x3(_arg1:Matrix3D, _arg2:Matrix3D):void{ var _local3:Number = _arg1.n11; var _local4:Number = _arg2.n11; var _local5:Number = _arg1.n21; var _local6:Number = _arg2.n21; var _local7:Number = _arg1.n31; var _local8:Number = _arg2.n31; var _local9:Number = _arg1.n12; var _local10:Number = _arg2.n12; var _local11:Number = _arg1.n22; var _local12:Number = _arg2.n22; var _local13:Number = _arg1.n32; var _local14:Number = _arg2.n32; var _local15:Number = _arg1.n13; var _local16:Number = _arg2.n13; var _local17:Number = _arg1.n23; var _local18:Number = _arg2.n23; var _local19:Number = _arg1.n33; var _local20:Number = _arg2.n33; this.n11 = (((_local3 * _local4) + (_local9 * _local6)) + (_local15 * _local8)); this.n12 = (((_local3 * _local10) + (_local9 * _local12)) + (_local15 * _local14)); this.n13 = (((_local3 * _local16) + (_local9 * _local18)) + (_local15 * _local20)); this.n21 = (((_local5 * _local4) + (_local11 * _local6)) + (_local17 * _local8)); this.n22 = (((_local5 * _local10) + (_local11 * _local12)) + (_local17 * _local14)); this.n23 = (((_local5 * _local16) + (_local11 * _local18)) + (_local17 * _local20)); this.n31 = (((_local7 * _local4) + (_local13 * _local6)) + (_local19 * _local8)); this.n32 = (((_local7 * _local10) + (_local13 * _local12)) + (_local19 * _local14)); this.n33 = (((_local7 * _local16) + (_local13 * _local18)) + (_local19 * _local20)); } public function calculateMultiply4x4(_arg1:Matrix3D, _arg2:Matrix3D):void{ var _local3:Number = _arg1.n11; var _local4:Number = _arg2.n11; var _local5:Number = _arg1.n21; var _local6:Number = _arg2.n21; var _local7:Number = _arg1.n31; var _local8:Number = _arg2.n31; var _local9:Number = _arg1.n41; var _local10:Number = _arg2.n41; var _local11:Number = _arg1.n12; var _local12:Number = _arg2.n12; var _local13:Number = _arg1.n22; var _local14:Number = _arg2.n22; var _local15:Number = _arg1.n32; var _local16:Number = _arg2.n32; var _local17:Number = _arg1.n42; var _local18:Number = _arg2.n42; var _local19:Number = _arg1.n13; var _local20:Number = _arg2.n13; var _local21:Number = _arg1.n23; var _local22:Number = _arg2.n23; var _local23:Number = _arg1.n33; var _local24:Number = _arg2.n33; var _local25:Number = _arg1.n43; var _local26:Number = _arg2.n43; var _local27:Number = _arg1.n14; var _local28:Number = _arg2.n14; var _local29:Number = _arg1.n24; var _local30:Number = _arg2.n24; var _local31:Number = _arg1.n34; var _local32:Number = _arg2.n34; var _local33:Number = _arg1.n44; var _local34:Number = _arg2.n44; this.n11 = (((_local3 * _local4) + (_local11 * _local6)) + (_local19 * _local8)); this.n12 = (((_local3 * _local12) + (_local11 * _local14)) + (_local19 * _local16)); this.n13 = (((_local3 * _local20) + (_local11 * _local22)) + (_local19 * _local24)); this.n14 = ((((_local3 * _local28) + (_local11 * _local30)) + (_local19 * _local32)) + _local27); this.n21 = (((_local5 * _local4) + (_local13 * _local6)) + (_local21 * _local8)); this.n22 = (((_local5 * _local12) + (_local13 * _local14)) + (_local21 * _local16)); this.n23 = (((_local5 * _local20) + (_local13 * _local22)) + (_local21 * _local24)); this.n24 = ((((_local5 * _local28) + (_local13 * _local30)) + (_local21 * _local32)) + _local29); this.n31 = (((_local7 * _local4) + (_local15 * _local6)) + (_local23 * _local8)); this.n32 = (((_local7 * _local12) + (_local15 * _local14)) + (_local23 * _local16)); this.n33 = (((_local7 * _local20) + (_local15 * _local22)) + (_local23 * _local24)); this.n34 = ((((_local7 * _local28) + (_local15 * _local30)) + (_local23 * _local32)) + _local31); this.n41 = (((_local9 * _local4) + (_local17 * _local6)) + (_local25 * _local8)); this.n42 = (((_local9 * _local12) + (_local17 * _local14)) + (_local25 * _local16)); this.n43 = (((_local9 * _local20) + (_local17 * _local22)) + (_local25 * _local24)); this.n44 = ((((_local9 * _local28) + (_local17 * _local30)) + (_local25 * _local32)) + _local33); } public function calculateSkewSymmetric(_arg1:Number3D):void{ this.n11 = 0; this.n12 = -(_arg1.z); this.n13 = _arg1.y; this.n21 = _arg1.z; this.n22 = 0; this.n23 = -(_arg1.x); this.n31 = -(_arg1.y); this.n32 = _arg1.x; this.n33 = 0; } public function get det():Number{ return ((((((this.n11 * this.n22) - (this.n21 * this.n12)) * this.n33) - (((this.n11 * this.n32) - (this.n31 * this.n12)) * this.n23)) + (((this.n21 * this.n32) - (this.n31 * this.n22)) * this.n13))); } public function copy(_arg1:Matrix3D):Matrix3D{ this.n11 = _arg1.n11; this.n12 = _arg1.n12; this.n13 = _arg1.n13; this.n14 = _arg1.n14; this.n21 = _arg1.n21; this.n22 = _arg1.n22; this.n23 = _arg1.n23; this.n24 = _arg1.n24; this.n31 = _arg1.n31; this.n32 = _arg1.n32; this.n33 = _arg1.n33; this.n34 = _arg1.n34; return (this); } public function copy3x3(_arg1:Matrix3D):Matrix3D{ this.n11 = _arg1.n11; this.n12 = _arg1.n12; this.n13 = _arg1.n13; this.n21 = _arg1.n21; this.n22 = _arg1.n22; this.n23 = _arg1.n23; this.n31 = _arg1.n31; this.n32 = _arg1.n32; this.n33 = _arg1.n33; return (this); } public function calculateAdd(_arg1:Matrix3D, _arg2:Matrix3D):void{ this.n11 = (_arg1.n11 + _arg2.n11); this.n12 = (_arg1.n12 + _arg2.n12); this.n13 = (_arg1.n13 + _arg2.n13); this.n14 = (_arg1.n14 + _arg2.n14); this.n21 = (_arg1.n21 + _arg2.n21); this.n22 = (_arg1.n22 + _arg2.n22); this.n23 = (_arg1.n23 + _arg2.n23); this.n24 = (_arg1.n24 + _arg2.n24); this.n31 = (_arg1.n31 + _arg2.n31); this.n32 = (_arg1.n32 + _arg2.n32); this.n33 = (_arg1.n33 + _arg2.n33); this.n34 = (_arg1.n34 + _arg2.n34); } public function calculateMultiply(_arg1:Matrix3D, _arg2:Matrix3D):void{ var _local3:Number = _arg1.n11; var _local4:Number = _arg2.n11; var _local5:Number = _arg1.n21; var _local6:Number = _arg2.n21; var _local7:Number = _arg1.n31; var _local8:Number = _arg2.n31; var _local9:Number = _arg1.n12; var _local10:Number = _arg2.n12; var _local11:Number = _arg1.n22; var _local12:Number = _arg2.n22; var _local13:Number = _arg1.n32; var _local14:Number = _arg2.n32; var _local15:Number = _arg1.n13; var _local16:Number = _arg2.n13; var _local17:Number = _arg1.n23; var _local18:Number = _arg2.n23; var _local19:Number = _arg1.n33; var _local20:Number = _arg2.n33; var _local21:Number = _arg1.n14; var _local22:Number = _arg2.n14; var _local23:Number = _arg1.n24; var _local24:Number = _arg2.n24; var _local25:Number = _arg1.n34; var _local26:Number = _arg2.n34; this.n11 = (((_local3 * _local4) + (_local9 * _local6)) + (_local15 * _local8)); this.n12 = (((_local3 * _local10) + (_local9 * _local12)) + (_local15 * _local14)); this.n13 = (((_local3 * _local16) + (_local9 * _local18)) + (_local15 * _local20)); this.n14 = ((((_local3 * _local22) + (_local9 * _local24)) + (_local15 * _local26)) + _local21); this.n21 = (((_local5 * _local4) + (_local11 * _local6)) + (_local17 * _local8)); this.n22 = (((_local5 * _local10) + (_local11 * _local12)) + (_local17 * _local14)); this.n23 = (((_local5 * _local16) + (_local11 * _local18)) + (_local17 * _local20)); this.n24 = ((((_local5 * _local22) + (_local11 * _local24)) + (_local17 * _local26)) + _local23); this.n31 = (((_local7 * _local4) + (_local13 * _local6)) + (_local19 * _local8)); this.n32 = (((_local7 * _local10) + (_local13 * _local12)) + (_local19 * _local14)); this.n33 = (((_local7 * _local16) + (_local13 * _local18)) + (_local19 * _local20)); this.n34 = ((((_local7 * _local22) + (_local13 * _local24)) + (_local19 * _local26)) + _local25); } public function reset(_arg1:Array=null):void{ if (((!(_arg1)) || ((_arg1.length < 12)))){ n11 = (n22 = (n33 = (n44 = 1))); n12 = (n13 = (n14 = (n21 = (n23 = (n24 = (n31 = (n32 = (n34 = (n41 = (n42 = (n43 = 0))))))))))); } else { n11 = _arg1[0]; n12 = _arg1[1]; n13 = _arg1[2]; n14 = _arg1[3]; n21 = _arg1[4]; n22 = _arg1[5]; n23 = _arg1[6]; n24 = _arg1[7]; n31 = _arg1[8]; n32 = _arg1[9]; n33 = _arg1[10]; n34 = _arg1[11]; if (_arg1.length == 16){ n41 = _arg1[12]; n42 = _arg1[13]; n43 = _arg1[14]; n44 = _arg1[15]; } else { n41 = (n42 = (n43 = 0)); n44 = 1; }; }; } public function invert():void{ temp.copy(this); calculateInverse(temp); } public function calculateInverse(_arg1:Matrix3D):void{ var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local2:Number = _arg1.det; if (Math.abs(_local2) > 0.001){ _local2 = (1 / _local2); _local3 = _arg1.n11; _local4 = _arg1.n21; _local5 = _arg1.n31; _local6 = _arg1.n12; _local7 = _arg1.n22; _local8 = _arg1.n32; _local9 = _arg1.n13; _local10 = _arg1.n23; _local11 = _arg1.n33; _local12 = _arg1.n14; _local13 = _arg1.n24; _local14 = _arg1.n34; this.n11 = (_local2 * ((_local7 * _local11) - (_local8 * _local10))); this.n12 = (-(_local2) * ((_local6 * _local11) - (_local8 * _local9))); this.n13 = (_local2 * ((_local6 * _local10) - (_local7 * _local9))); this.n14 = (-(_local2) * (((_local6 * ((_local10 * _local14) - (_local11 * _local13))) - (_local7 * ((_local9 * _local14) - (_local11 * _local12)))) + (_local8 * ((_local9 * _local13) - (_local10 * _local12))))); this.n21 = (-(_local2) * ((_local4 * _local11) - (_local5 * _local10))); this.n22 = (_local2 * ((_local3 * _local11) - (_local5 * _local9))); this.n23 = (-(_local2) * ((_local3 * _local10) - (_local4 * _local9))); this.n24 = (_local2 * (((_local3 * ((_local10 * _local14) - (_local11 * _local13))) - (_local4 * ((_local9 * _local14) - (_local11 * _local12)))) + (_local5 * ((_local9 * _local13) - (_local10 * _local12))))); this.n31 = (_local2 * ((_local4 * _local8) - (_local5 * _local7))); this.n32 = (-(_local2) * ((_local3 * _local8) - (_local5 * _local6))); this.n33 = (_local2 * ((_local3 * _local7) - (_local4 * _local6))); this.n34 = (-(_local2) * (((_local3 * ((_local7 * _local14) - (_local8 * _local13))) - (_local4 * ((_local6 * _local14) - (_local8 * _local12)))) + (_local5 * ((_local6 * _local13) - (_local7 * _local12))))); }; } public function calculateTranspose():void{ var _local1:Number = this.n11; var _local2:Number = this.n21; var _local3:Number = this.n31; var _local4:Number = this.n41; var _local5:Number = this.n12; var _local6:Number = this.n22; var _local7:Number = this.n32; var _local8:Number = this.n42; var _local9:Number = this.n13; var _local10:Number = this.n23; var _local11:Number = this.n33; var _local12:Number = this.n43; var _local13:Number = this.n14; var _local14:Number = this.n24; var _local15:Number = this.n34; var _local16:Number = this.n44; this.n11 = _local1; this.n12 = _local2; this.n13 = _local3; this.n14 = _local4; this.n21 = _local5; this.n22 = _local6; this.n23 = _local7; this.n24 = _local8; this.n31 = _local9; this.n32 = _local10; this.n33 = _local11; this.n34 = _local12; this.n41 = _local13; this.n42 = _local14; this.n43 = _local15; this.n44 = _local16; } public function toString():String{ var _local1 = ""; _local1 = (_local1 + ((((((((int((n11 * 1000)) / 1000) + "\t\t") + (int((n12 * 1000)) / 1000)) + "\t\t") + (int((n13 * 1000)) / 1000)) + "\t\t") + (int((n14 * 1000)) / 1000)) + "\n")); _local1 = (_local1 + ((((((((int((n21 * 1000)) / 1000) + "\t\t") + (int((n22 * 1000)) / 1000)) + "\t\t") + (int((n23 * 1000)) / 1000)) + "\t\t") + (int((n24 * 1000)) / 1000)) + "\n")); _local1 = (_local1 + ((((((((int((n31 * 1000)) / 1000) + "\t\t") + (int((n32 * 1000)) / 1000)) + "\t\t") + (int((n33 * 1000)) / 1000)) + "\t\t") + (int((n34 * 1000)) / 1000)) + "\n")); _local1 = (_local1 + ((((((((int((n41 * 1000)) / 1000) + "\t\t") + (int((n42 * 1000)) / 1000)) + "\t\t") + (int((n43 * 1000)) / 1000)) + "\t\t") + (int((n44 * 1000)) / 1000)) + "\n")); return (_local1); } public static function rotationMatrixWithReference(_arg1:Number3D, _arg2:Number, _arg3:Number3D):Matrix3D{ var _local4:Matrix3D = Matrix3D.translationMatrix(_arg3.x, -(_arg3.y), _arg3.z); Matrix3D.translationMatrix(_arg3.x, -(_arg3.y), _arg3.z).calculateMultiply(_local4, Matrix3D.rotationMatrix(_arg1.x, _arg1.y, _arg1.z, _arg2)); _local4.calculateMultiply(_local4, Matrix3D.translationMatrix(-(_arg3.x), _arg3.y, -(_arg3.z))); return (_local4); } public static function multiplyVector(_arg1:Matrix3D, _arg2:Number3D):void{ var _local4:Number; var _local5:Number; var _local3:Number = _arg2.x; _local4 = _arg2.y; _local5 = _arg2.z; _arg2.x = ((((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13)) + _arg1.n14); _arg2.y = ((((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23)) + _arg1.n24); _arg2.z = ((((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33)) + _arg1.n34); } public static function multiplyVector4x4(_arg1:Matrix3D, _arg2:Number3D):void{ var _local3:Number; var _local4:Number; var _local6:Number; _local3 = _arg2.x; _local4 = _arg2.y; var _local5:Number = _arg2.z; _local6 = (1 / ((((_local3 * _arg1.n41) + (_local4 * _arg1.n42)) + (_local5 * _arg1.n43)) + _arg1.n44)); _arg2.x = ((((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13)) + _arg1.n14); _arg2.y = ((((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23)) + _arg1.n24); _arg2.z = ((((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33)) + _arg1.n34); _arg2.x = (_arg2.x * _local6); _arg2.y = (_arg2.y * _local6); _arg2.z = (_arg2.z * _local6); } public static function multiply3x3(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{ var _local3:Matrix3D = new (Matrix3D); _local3.calculateMultiply3x3(_arg1, _arg2); return (_local3); } public static function normalizeQuaternion(_arg1:Object):Object{ var _local2:Number = magnitudeQuaternion(_arg1); _arg1.x = (_arg1.x / _local2); _arg1.y = (_arg1.y / _local2); _arg1.z = (_arg1.z / _local2); _arg1.w = (_arg1.w / _local2); return (_arg1); } public static function multiplyVector3x3(_arg1:Matrix3D, _arg2:Number3D):void{ var _local3:Number = _arg2.x; var _local4:Number = _arg2.y; var _local5:Number = _arg2.z; _arg2.x = (((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13)); _arg2.y = (((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23)); _arg2.z = (((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33)); } public static function axis2quaternion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Object{ var _local5:Number = Math.sin((_arg4 / 2)); var _local6:Number = Math.cos((_arg4 / 2)); var _local7:Object = new Object(); _local7.x = (_arg1 * _local5); _local7.y = (_arg2 * _local5); _local7.z = (_arg3 * _local5); _local7.w = _local6; return (normalizeQuaternion(_local7)); } public static function translationMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{ var _local4:Matrix3D = IDENTITY; _local4.n14 = _arg1; _local4.n24 = _arg2; _local4.n34 = _arg3; return (_local4); } public static function magnitudeQuaternion(_arg1:Object):Number{ return (Math.sqrt(((((_arg1.w * _arg1.w) + (_arg1.x * _arg1.x)) + (_arg1.y * _arg1.y)) + (_arg1.z * _arg1.z)))); } public static function rotationX(_arg1:Number):Matrix3D{ var _local2:Matrix3D = IDENTITY; var _local3:Number = Math.cos(_arg1); var _local4:Number = Math.sin(_arg1); _local2.n22 = _local3; _local2.n23 = -(_local4); _local2.n32 = _local4; _local2.n33 = _local3; return (_local2); } public static function rotationY(_arg1:Number):Matrix3D{ var _local2:Matrix3D = IDENTITY; var _local3:Number = Math.cos(_arg1); var _local4:Number = Math.sin(_arg1); _local2.n11 = _local3; _local2.n13 = -(_local4); _local2.n31 = _local4; _local2.n33 = _local3; return (_local2); } public static function rotationZ(_arg1:Number):Matrix3D{ var _local2:Matrix3D = IDENTITY; var _local3:Number = Math.cos(_arg1); var _local4:Number = Math.sin(_arg1); _local2.n11 = _local3; _local2.n12 = -(_local4); _local2.n21 = _local4; _local2.n22 = _local3; return (_local2); } public static function clone(_arg1:Matrix3D):Matrix3D{ return (new Matrix3D([_arg1.n11, _arg1.n12, _arg1.n13, _arg1.n14, _arg1.n21, _arg1.n22, _arg1.n23, _arg1.n24, _arg1.n31, _arg1.n32, _arg1.n33, _arg1.n34])); } public static function rotationMatrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Matrix3D=null):Matrix3D{ var _local6:Matrix3D; if (!_arg5){ _local6 = IDENTITY; } else { _local6 = _arg5; }; var _local7:Number = Math.cos(_arg4); var _local8:Number = Math.sin(_arg4); var _local9:Number = (1 - _local7); var _local10:Number = ((_arg1 * _arg2) * _local9); var _local11:Number = ((_arg2 * _arg3) * _local9); var _local12:Number = ((_arg1 * _arg3) * _local9); var _local13:Number = (_local8 * _arg3); var _local14:Number = (_local8 * _arg2); var _local15:Number = (_local8 * _arg1); _local6.n11 = (_local7 + ((_arg1 * _arg1) * _local9)); _local6.n12 = (-(_local13) + _local10); _local6.n13 = (_local14 + _local12); _local6.n14 = 0; _local6.n21 = (_local13 + _local10); _local6.n22 = (_local7 + ((_arg2 * _arg2) * _local9)); _local6.n23 = (-(_local15) + _local11); _local6.n24 = 0; _local6.n31 = (-(_local14) + _local12); _local6.n32 = (_local15 + _local11); _local6.n33 = (_local7 + ((_arg3 * _arg3) * _local9)); _local6.n34 = 0; return (_local6); } public static function add(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{ var _local3:Matrix3D = new (Matrix3D); _local3.calculateAdd(_arg1, _arg2); return (_local3); } public static function multiply(_arg1:Matrix3D, _arg2:Matrix3D):Matrix3D{ var _local3:Matrix3D = new (Matrix3D); _local3.calculateMultiply(_arg1, _arg2); return (_local3); } public static function euler2quaternion(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Quaternion=null):Quaternion{ var _local13:Quaternion; var _local5:Number = Math.sin((_arg1 * 0.5)); var _local6:Number = Math.cos((_arg1 * 0.5)); var _local7:Number = Math.sin((_arg2 * 0.5)); var _local8:Number = Math.cos((_arg2 * 0.5)); var _local9:Number = Math.sin((_arg3 * 0.5)); var _local10:Number = Math.cos((_arg3 * 0.5)); var _local11:Number = (_local6 * _local8); var _local12:Number = (_local5 * _local7); if (!_arg4){ _local13 = new Quaternion(); } else { _local13 = _arg4; }; _local13.x = ((_local9 * _local11) - (_local10 * _local12)); _local13.y = (((_local10 * _local5) * _local8) + ((_local9 * _local6) * _local7)); _local13.z = (((_local10 * _local6) * _local7) - ((_local9 * _local5) * _local8)); _local13.w = ((_local10 * _local11) + (_local9 * _local12)); return (_local13); } public static function quaternion2matrix(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Matrix3D=null):Matrix3D{ var _local15:Matrix3D; var _local6:Number = (_arg1 * _arg1); var _local7:Number = (_arg1 * _arg2); var _local8:Number = (_arg1 * _arg3); var _local9:Number = (_arg1 * _arg4); var _local10:Number = (_arg2 * _arg2); var _local11:Number = (_arg2 * _arg3); var _local12:Number = (_arg2 * _arg4); var _local13:Number = (_arg3 * _arg3); var _local14:Number = (_arg3 * _arg4); if (!_arg5){ _local15 = IDENTITY; } else { _local15 = _arg5; }; _local15.n11 = (1 - (2 * (_local10 + _local13))); _local15.n12 = (2 * (_local7 - _local14)); _local15.n13 = (2 * (_local8 + _local12)); _local15.n21 = (2 * (_local7 + _local14)); _local15.n22 = (1 - (2 * (_local6 + _local13))); _local15.n23 = (2 * (_local11 - _local9)); _local15.n31 = (2 * (_local8 - _local12)); _local15.n32 = (2 * (_local11 + _local9)); _local15.n33 = (1 - (2 * (_local6 + _local10))); return (_local15); } public static function inverse(_arg1:Matrix3D):Matrix3D{ var _local2:Matrix3D = new (Matrix3D); _local2.calculateInverse(_arg1); return (_local2); } public static function euler2matrix(_arg1:Number3D):Matrix3D{ temp.reset(); var _local2:Matrix3D = temp; _local2 = temp; var _local3:Number = (_arg1.x * toRADIANS); var _local4:Number = (_arg1.y * toRADIANS); var _local5:Number = (_arg1.z * toRADIANS); var _local6:Number = Math.cos(_local3); var _local7:Number = Math.sin(_local3); var _local8:Number = Math.cos(_local4); var _local9:Number = Math.sin(_local4); var _local10:Number = Math.cos(_local5); var _local11:Number = Math.sin(_local5); var _local12:Number = (_local6 * _local9); var _local13:Number = (_local7 * _local9); _local2.n11 = (_local8 * _local10); _local2.n12 = (-(_local8) * _local11); _local2.n13 = _local9; _local2.n21 = ((_local13 * _local10) + (_local6 * _local11)); _local2.n22 = ((-(_local13) * _local11) + (_local6 * _local10)); _local2.n23 = (-(_local7) * _local8); _local2.n31 = ((-(_local12) * _local10) + (_local7 * _local11)); _local2.n32 = ((_local12 * _local11) + (_local7 * _local10)); _local2.n33 = (_local6 * _local8); return (_local2); } public static function scaleMatrix(_arg1:Number, _arg2:Number, _arg3:Number):Matrix3D{ var _local4:Matrix3D = IDENTITY; _local4.n11 = _arg1; _local4.n22 = _arg2; _local4.n33 = _arg3; return (_local4); } public static function rotateAxis(_arg1:Matrix3D, _arg2:Number3D):void{ var _local3:Number = _arg2.x; var _local4:Number = _arg2.y; var _local5:Number = _arg2.z; _arg2.x = (((_local3 * _arg1.n11) + (_local4 * _arg1.n12)) + (_local5 * _arg1.n13)); _arg2.y = (((_local3 * _arg1.n21) + (_local4 * _arg1.n22)) + (_local5 * _arg1.n23)); _arg2.z = (((_local3 * _arg1.n31) + (_local4 * _arg1.n32)) + (_local5 * _arg1.n33)); _arg2.normalize(); } public static function matrix2euler(_arg1:Matrix3D, _arg2:Number3D=null, _arg3:Number3D=null):Number3D{ _arg2 = ((_arg2) || (new Number3D())); var _local4:Number = (((_arg3) && ((_arg3.x == 1)))) ? 1 : Math.sqrt((((_arg1.n11 * _arg1.n11) + (_arg1.n21 * _arg1.n21)) + (_arg1.n31 * _arg1.n31))); var _local5:Number = (((_arg3) && ((_arg3.y == 1)))) ? 1 : Math.sqrt((((_arg1.n12 * _arg1.n12) + (_arg1.n22 * _arg1.n22)) + (_arg1.n32 * _arg1.n32))); var _local6:Number = (((_arg3) && ((_arg3.z == 1)))) ? 1 : Math.sqrt((((_arg1.n13 * _arg1.n13) + (_arg1.n23 * _arg1.n23)) + (_arg1.n33 * _arg1.n33))); var _local7:Number = (_arg1.n11 / _local4); var _local8:Number = (_arg1.n21 / _local5); var _local9:Number = (_arg1.n31 / _local6); var _local10:Number = (_arg1.n32 / _local6); var _local11:Number = (_arg1.n33 / _local6); _local9 = ((_local9 > 1)) ? 1 : _local9; _local9 = ((_local9 < -1)) ? -1 : _local9; _arg2.y = Math.asin(-(_local9)); _arg2.z = Math.atan2(_local8, _local7); _arg2.x = Math.atan2(_local10, _local11); if (Papervision3D.useDEGREES){ _arg2.x = (_arg2.x * toDEGREES); _arg2.y = (_arg2.y * toDEGREES); _arg2.z = (_arg2.z * toDEGREES); }; return (_arg2); } public static function multiplyQuaternion(_arg1:Object, _arg2:Object):Object{ var _local3:Number = _arg1.x; var _local4:Number = _arg1.y; var _local5:Number = _arg1.z; var _local6:Number = _arg1.w; var _local7:Number = _arg2.x; var _local8:Number = _arg2.y; var _local9:Number = _arg2.z; var _local10:Number = _arg2.w; var _local11:Object = new Object(); _local11.x = ((((_local6 * _local7) + (_local3 * _local10)) + (_local4 * _local9)) - (_local5 * _local8)); _local11.y = ((((_local6 * _local8) + (_local4 * _local10)) + (_local5 * _local7)) - (_local3 * _local9)); _local11.z = ((((_local6 * _local9) + (_local5 * _local10)) + (_local3 * _local8)) - (_local4 * _local7)); _local11.w = ((((_local6 * _local10) - (_local3 * _local7)) - (_local4 * _local8)) - (_local5 * _local9)); return (_local11); } public static function get IDENTITY():Matrix3D{ return (new Matrix3D([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])); } } }//package org.papervision3d.core.math
Section 55
//Number2D (org.papervision3d.core.math.Number2D) package org.papervision3d.core.math { import org.papervision3d.*; public class Number2D { public var x:Number; public var y:Number; public static const DEGTORAD:Number = 0.0174532925199433; public static const RADTODEG:Number = 57.2957795130823; public function Number2D(_arg1:Number=0, _arg2:Number=0){ this.x = _arg1; this.y = _arg2; } public function isModuloLessThan(_arg1:Number):Boolean{ return ((moduloSquared < (_arg1 * _arg1))); } public function reverse():void{ this.x = -(this.x); this.y = -(this.y); } public function divideEq(_arg1:Number):void{ x = (x / _arg1); y = (y / _arg1); } public function plusEq(_arg1:Number2D):void{ x = (x + _arg1.x); y = (y + _arg1.y); } public function multiplyEq(_arg1:Number):void{ x = (x * _arg1); y = (y * _arg1); } public function isModuloGreaterThan(_arg1:Number):Boolean{ return ((moduloSquared > (_arg1 * _arg1))); } public function toString():String{ var _local1:Number = (Math.round((this.x * 1000)) / 1000); var _local2:Number = (Math.round((this.y * 1000)) / 1000); return ((((("[" + _local1) + ", ") + _local2) + "]")); } public function reset(_arg1:Number=0, _arg2:Number=0):void{ this.x = _arg1; this.y = _arg2; } public function get moduloSquared():Number{ return (((this.x * this.x) + (this.y * this.y))); } public function normalise():void{ var _local1:Number = this.modulo; this.x = (this.x / _local1); this.y = (this.y / _local1); } public function get modulo():Number{ return (Math.sqrt(((x * x) + (y * y)))); } public function copyTo(_arg1:Number2D):void{ _arg1.x = this.x; _arg1.y = this.y; } public function angle():Number{ if (Papervision3D.useDEGREES){ return ((RADTODEG * Math.atan2(y, x))); }; return (Math.atan2(y, x)); } public function rotate(_arg1:Number):void{ var _local4:Number2D; if (Papervision3D.useDEGREES){ _arg1 = (_arg1 * DEGTORAD); }; var _local2:Number = Math.cos(_arg1); var _local3:Number = Math.sin(_arg1); _local4 = clone(); this.x = ((_local4.x * _local2) - (_local4.y * _local3)); this.y = ((_local4.x * _local3) + (_local4.y * _local2)); } public function minusEq(_arg1:Number2D):void{ x = (x - _arg1.x); y = (y - _arg1.y); } public function clone():Number2D{ return (new Number2D(this.x, this.y)); } public function isModuloEqualTo(_arg1:Number):Boolean{ return ((moduloSquared == (_arg1 * _arg1))); } public function copyFrom(_arg1:Number2D):void{ this.x = _arg1.x; this.y = _arg1.y; } public static function multiplyScalar(_arg1:Number2D, _arg2:Number):Number2D{ return (new Number2D((_arg1.x * _arg2), (_arg1.y * _arg2))); } public static function add(_arg1:Number2D, _arg2:Number2D):Number2D{ return (new Number2D((_arg1.x + _arg2.x), (_arg1.y + _arg2.y))); } public static function dot(_arg1:Number2D, _arg2:Number2D):Number{ return (((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y))); } public static function subtract(_arg1:Number2D, _arg2:Number2D):Number2D{ return (new Number2D((_arg1.x - _arg2.x), (_arg1.y - _arg2.y))); } } }//package org.papervision3d.core.math
Section 56
//Number3D (org.papervision3d.core.math.Number3D) package org.papervision3d.core.math { import org.papervision3d.*; public class Number3D { public var x:Number; public var y:Number; public var z:Number; public static var toDEGREES:Number = 57.2957795130823; private static var temp:Number3D = Number3D.ZERO; public static var toRADIANS:Number = 0.0174532925199433; public function Number3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){ this.x = _arg1; this.y = _arg2; this.z = _arg3; } public function isModuloLessThan(_arg1:Number):Boolean{ return ((moduloSquared < (_arg1 * _arg1))); } public function rotateX(_arg1:Number):void{ if (Papervision3D.useDEGREES){ _arg1 = (_arg1 * toRADIANS); }; var _local2:Number = Math.cos(_arg1); var _local3:Number = Math.sin(_arg1); temp.copyFrom(this); this.y = ((temp.y * _local2) - (temp.z * _local3)); this.z = ((temp.y * _local3) + (temp.z * _local2)); } public function rotateY(_arg1:Number):void{ if (Papervision3D.useDEGREES){ _arg1 = (_arg1 * toRADIANS); }; var _local2:Number = Math.cos(_arg1); var _local3:Number = Math.sin(_arg1); temp.copyFrom(this); this.x = ((temp.x * _local2) + (temp.z * _local3)); this.z = ((temp.x * -(_local3)) + (temp.z * _local2)); } public function plusEq(_arg1:Number3D):void{ x = (x + _arg1.x); y = (y + _arg1.y); z = (z + _arg1.z); } public function multiplyEq(_arg1:Number):void{ x = (x * _arg1); y = (y * _arg1); z = (z * _arg1); } public function toString():String{ return (((((("x:" + (Math.round((x * 100)) / 100)) + " y:") + (Math.round((y * 100)) / 100)) + " z:") + (Math.round((z * 100)) / 100))); } public function normalize():void{ var _local1:Number = Math.sqrt((((this.x * this.x) + (this.y * this.y)) + (this.z * this.z))); if (((!((_local1 == 0))) && (!((_local1 == 1))))){ _local1 = (1 / _local1); this.x = (this.x * _local1); this.y = (this.y * _local1); this.z = (this.z * _local1); }; } public function rotateZ(_arg1:Number):void{ if (Papervision3D.useDEGREES){ _arg1 = (_arg1 * toRADIANS); }; var _local2:Number = Math.cos(_arg1); var _local3:Number = Math.sin(_arg1); temp.copyFrom(this); this.x = ((temp.x * _local2) - (temp.y * _local3)); this.y = ((temp.x * _local3) + (temp.y * _local2)); } public function reset(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0):void{ x = _arg1; y = _arg2; z = _arg3; } public function get moduloSquared():Number{ return ((((this.x * this.x) + (this.y * this.y)) + (this.z * this.z))); } public function get modulo():Number{ return (Math.sqrt((((this.x * this.x) + (this.y * this.y)) + (this.z * this.z)))); } public function copyTo(_arg1:Number3D):void{ _arg1.x = x; _arg1.y = y; _arg1.z = z; } public function isModuloGreaterThan(_arg1:Number):Boolean{ return ((moduloSquared > (_arg1 * _arg1))); } public function minusEq(_arg1:Number3D):void{ x = (x - _arg1.x); y = (y - _arg1.y); z = (z - _arg1.z); } public function clone():Number3D{ return (new Number3D(this.x, this.y, this.z)); } public function isModuloEqualTo(_arg1:Number):Boolean{ return ((moduloSquared == (_arg1 * _arg1))); } public function copyFrom(_arg1:Number3D):void{ x = _arg1.x; y = _arg1.y; z = _arg1.z; } public static function sub(_arg1:Number3D, _arg2:Number3D):Number3D{ return (new Number3D((_arg1.x - _arg2.x), (_arg1.y - _arg2.y), (_arg1.z - _arg2.z))); } public static function add(_arg1:Number3D, _arg2:Number3D):Number3D{ return (new Number3D((_arg1.x + _arg2.x), (_arg1.y + _arg2.y), (_arg1.z + _arg2.z))); } public static function cross(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D=null):Number3D{ if (!_arg3){ _arg3 = ZERO; }; _arg3.reset(((_arg2.y * _arg1.z) - (_arg2.z * _arg1.y)), ((_arg2.z * _arg1.x) - (_arg2.x * _arg1.z)), ((_arg2.x * _arg1.y) - (_arg2.y * _arg1.x))); return (_arg3); } public static function dot(_arg1:Number3D, _arg2:Number3D):Number{ return ((((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)) + (_arg2.z * _arg1.z))); } public static function get ZERO():Number3D{ return (new Number3D(0, 0, 0)); } } }//package org.papervision3d.core.math
Section 57
//NumberUV (org.papervision3d.core.math.NumberUV) package org.papervision3d.core.math { public class NumberUV { public var u:Number; public var v:Number; public function NumberUV(_arg1:Number=0, _arg2:Number=0){ this.u = _arg1; this.v = _arg2; } public function toString():String{ return (((("u:" + u) + " v:") + v)); } public function clone():NumberUV{ return (new NumberUV(this.u, this.v)); } public static function get ZERO():NumberUV{ return (new NumberUV(0, 0)); } public static function median(_arg1:NumberUV, _arg2:NumberUV):NumberUV{ if (_arg1 == null){ return (null); }; if (_arg2 == null){ return (null); }; return (new NumberUV(((_arg1.u + _arg2.u) / 2), ((_arg1.v + _arg2.v) / 2))); } public static function weighted(_arg1:NumberUV, _arg2:NumberUV, _arg3:Number, _arg4:Number):NumberUV{ if (_arg1 == null){ return (null); }; if (_arg2 == null){ return (null); }; var _local5:Number = (_arg3 + _arg4); var _local6:Number = (_arg3 / _local5); var _local7:Number = (_arg4 / _local5); return (new NumberUV(((_arg1.u * _local6) + (_arg2.u * _local7)), ((_arg1.v * _local6) + (_arg2.v * _local7)))); } } }//package org.papervision3d.core.math
Section 58
//Plane3D (org.papervision3d.core.math.Plane3D) package org.papervision3d.core.math { import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.util.*; public class Plane3D { public var d:Number; public var normal:Number3D; var eps:Number;// = 0.01 private static var _yUP:Number3D = new Number3D(0, 1, 0); private static var _zUP:Number3D = new Number3D(0, 0, 1); protected static var flipPlane:Plane3D = new (Plane3D); ; public function Plane3D(_arg1:Number3D=null, _arg2:Number3D=null){ if (((_arg1) && (_arg2))){ this.normal = _arg1; this.d = -(Number3D.dot(_arg1, _arg2)); } else { this.normal = new Number3D(); this.d = 0; }; } public function setCoefficients(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ this.normal.x = _arg1; this.normal.y = _arg2; this.normal.z = _arg3; this.d = _arg4; normalize(); } public function setThreePoints(_arg1:Number3D, _arg2:Number3D, _arg3:Number3D):void{ var _local4:Number3D = Number3D.sub(_arg2, _arg1); var _local5:Number3D = Number3D.sub(_arg3, _arg1); this.normal = Number3D.cross(_local4, _local5); this.normal.normalize(); this.d = -(Number3D.dot(normal, _arg1)); } public function setNormalAndPoint(_arg1:Number3D, _arg2:Number3D):void{ this.normal = _arg1; this.d = -(Number3D.dot(_arg1, _arg2)); } public function getFlip():Plane3D{ var _local1:Plane3D = Plane3D.fromThreePoints(new Number3D(), new Number3D(), new Number3D()); _local1.normal.z = -(normal.z); _local1.normal.y = -(normal.y); _local1.normal.x = -(normal.x); _local1.d = d; return (_local1); } public function getTempFlip():Plane3D{ flipPlane.normal.z = -(normal.z); flipPlane.normal.y = -(normal.y); flipPlane.normal.x = -(normal.x); flipPlane.d = d; return (flipPlane); } public function pointOnSide(_arg1:Number3D):int{ var _local2:Number = distance(_arg1); if (_local2 < 0){ return (ClassificationUtil.BACK); }; if (_local2 > 0){ return (ClassificationUtil.FRONT); }; return (ClassificationUtil.COINCIDING); } public function closestPointOnPlane(_arg1:Number3D, _arg2:Number3D):Number3D{ var _local3:Number = Number3D.dot(this.normal, Number3D.sub(_arg1, _arg2)); var _local4:Number3D = _arg1.clone(); _arg1.clone().x = (_local4.x - (_local3 * this.normal.x)); _local4.y = (_local4.y - (_local3 * this.normal.y)); _local4.z = (_local4.z - (_local3 * this.normal.z)); return (_local4); } public function normalize():void{ var _local1:Number3D = this.normal; var _local2:Number = Math.sqrt((((_local1.x * _local1.x) + (_local1.y * _local1.y)) + (_local1.z * _local1.z))); _local1.x = (_local1.x / _local2); _local1.y = (_local1.y / _local2); _local1.z = (_local1.z / _local2); this.d = (this.d / _local2); } public function distance(_arg1):Number{ var _local2:Number3D = ((_arg1 is Vertex3D)) ? _arg1.toNumber3D() : _arg1; return ((Number3D.dot(_local2, normal) + d)); } public function isCoplanar(_arg1:Plane3D):Boolean{ return ((((((((Math.abs((normal.x - _arg1.normal.x)) < eps)) && ((Math.abs((normal.y - _arg1.normal.y)) < eps)))) && ((Math.abs((normal.z - _arg1.normal.z)) < eps)))) && ((Math.abs((d - _arg1.d)) < eps)))); } public function getIntersectionLineNumbers(_arg1:Number3D, _arg2:Number3D):Number3D{ var _local3:Number = ((((normal.x * _arg1.x) + (normal.y * _arg1.y)) + (normal.z * _arg1.z)) - d); var _local4:Number = ((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d); var _local5:Number = (((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d) / (_local4 - _local3)); return (new Number3D((_arg2.x + ((_arg1.x - _arg2.x) * _local5)), (_arg2.y + ((_arg1.y - _arg2.y) * _local5)), (_arg2.z + ((_arg1.z - _arg2.z) * _local5)))); } public function getIntersectionLine(_arg1:Vertex3D, _arg2:Vertex3D):Vertex3D{ var _local3:Number = ((((normal.x * _arg1.x) + (normal.y * _arg1.y)) + (normal.z * _arg1.z)) - d); var _local4:Number = ((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d); var _local5:Number = (((((normal.x * _arg2.x) + (normal.y * _arg2.y)) + (normal.z * _arg2.z)) - d) / (_local4 - _local3)); return (new Vertex3D((_arg2.x + ((_arg1.x - _arg2.x) * _local5)), (_arg2.y + ((_arg1.y - _arg2.y) * _local5)), (_arg2.z + ((_arg1.z - _arg2.z) * _local5)))); } public function toString():String{ return ((((((((("[a:" + normal.x) + " b:") + normal.y) + " c:") + normal.z) + " d:") + d) + "]")); } public function projectPoints(_arg1:Array, _arg2:Number3D=null):void{ var _local8:*; var _local3:Number = Number3D.dot(_yUP, this.normal); var _local4:Number3D = ((Math.abs(_local3) > 0.99)) ? _zUP : _yUP; var _local5:Number3D = Number3D.cross(_local4, normal); _local5.normalize(); _local4 = Number3D.cross(normal, _local5); _local4.normalize(); var _local6:Matrix3D = new Matrix3D([_local5.x, _local4.x, normal.x, 0, _local5.y, _local4.y, normal.y, 0, _local5.z, _local4.z, normal.z, 0, 0, 0, 0, 1]); if (_arg2){ _local6 = Matrix3D.multiply(Matrix3D.translationMatrix(_arg2.x, _arg2.y, _arg2.z), _local6); }; var _local7:Number3D = new Number3D(); for each (_local8 in _arg1) { _local7.x = _local8["x"]; _local7.y = _local8["y"]; _local7.z = _local8["z"]; Matrix3D.multiplyVector(_local6, _local7); _local8["x"] = _local7.x; _local8["y"] = _local7.y; _local8["z"] = _local7.z; }; } public function clone():Plane3D{ return (Plane3D.fromCoefficients(this.normal.x, this.normal.y, this.normal.z, this.d)); } public function isCoplanarOpposite(_arg1:Plane3D):Boolean{ flipPlane.normal.z = -(_arg1.normal.z); flipPlane.normal.y = -(_arg1.normal.y); flipPlane.normal.x = -(_arg1.normal.x); flipPlane.d = _arg1.d; return (flipPlane.isCoplanar(_arg1)); } public function vertDistance(_arg1:Vertex3D):Number{ return (((((_arg1.x * normal.x) + (normal.y * _arg1.y)) + (_arg1.z * normal.z)) + d)); } public static function fromNormalAndPoint(_arg1, _arg2):Plane3D{ var _local3:Number3D = ((_arg1 is Number3D)) ? _arg1 : new Number3D(_arg1.x, _arg1.y, _arg1.z); var _local4:Number3D = ((_arg2 is Number3D)) ? _arg2 : new Number3D(_arg2.x, _arg2.y, _arg2.z); return (new Plane3D(_local3, _local4)); } public static function fromThreePoints(_arg1, _arg2, _arg3):Plane3D{ var _local4:Plane3D = new (Plane3D); var _local5:Number3D = ((_arg1 is Number3D)) ? _arg1 : new Number3D(_arg1.x, _arg1.y, _arg1.z); var _local6:Number3D = ((_arg2 is Number3D)) ? _arg2 : new Number3D(_arg2.x, _arg2.y, _arg2.z); var _local7:Number3D = ((_arg3 is Number3D)) ? _arg3 : new Number3D(_arg3.x, _arg3.y, _arg3.z); _local4.setThreePoints(_local5, _local6, _local7); return (_local4); } public static function fromCoefficients(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Plane3D{ var _local5:Plane3D = new (Plane3D); _local5.setCoefficients(_arg1, _arg2, _arg3, _arg4); return (_local5); } } }//package org.papervision3d.core.math
Section 59
//Quaternion (org.papervision3d.core.math.Quaternion) package org.papervision3d.core.math { public class Quaternion { private var _matrix:Matrix3D; public var w:Number; public var x:Number; public var y:Number; public var z:Number; public static const EPSILON:Number = 1E-6; public static const DEGTORAD:Number = 0.0174532925199433; public static const RADTODEG:Number = 57.2957795130823; public function Quaternion(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0, _arg4:Number=1){ this.x = _arg1; this.y = _arg2; this.z = _arg3; this.w = _arg4; _matrix = Matrix3D.IDENTITY; } public function get matrix():Matrix3D{ var _local1:Number = (x * x); var _local2:Number = (x * y); var _local3:Number = (x * z); var _local4:Number = (x * w); var _local5:Number = (y * y); var _local6:Number = (y * z); var _local7:Number = (y * w); var _local8:Number = (z * z); var _local9:Number = (z * w); _matrix.n11 = (1 - (2 * (_local5 + _local8))); _matrix.n12 = (2 * (_local2 - _local9)); _matrix.n13 = (2 * (_local3 + _local7)); _matrix.n21 = (2 * (_local2 + _local9)); _matrix.n22 = (1 - (2 * (_local1 + _local8))); _matrix.n23 = (2 * (_local6 - _local4)); _matrix.n31 = (2 * (_local3 - _local7)); _matrix.n32 = (2 * (_local6 + _local4)); _matrix.n33 = (1 - (2 * (_local1 + _local5))); return (_matrix); } public function setFromEuler(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false):void{ if (_arg4){ _arg1 = (_arg1 * DEGTORAD); _arg2 = (_arg2 * DEGTORAD); _arg3 = (_arg3 * DEGTORAD); }; var _local5:Number = Math.sin((_arg1 * 0.5)); var _local6:Number = Math.cos((_arg1 * 0.5)); var _local7:Number = Math.sin((_arg2 * 0.5)); var _local8:Number = Math.cos((_arg2 * 0.5)); var _local9:Number = Math.sin((_arg3 * 0.5)); var _local10:Number = Math.cos((_arg3 * 0.5)); var _local11:Number = (_local6 * _local8); var _local12:Number = (_local5 * _local7); this.x = ((_local9 * _local11) - (_local10 * _local12)); this.y = (((_local10 * _local5) * _local8) + ((_local9 * _local6) * _local7)); this.z = (((_local10 * _local6) * _local7) - ((_local9 * _local5) * _local8)); this.w = ((_local10 * _local11) + (_local9 * _local12)); } public function setFromAxisAngle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ var _local5:Number = Math.sin((_arg4 / 2)); var _local6:Number = Math.cos((_arg4 / 2)); this.x = (_arg1 * _local5); this.y = (_arg2 * _local5); this.z = (_arg3 * _local5); this.w = _local6; this.normalize(); } public function calculateMultiply(_arg1:Quaternion, _arg2:Quaternion):void{ this.x = ((((_arg1.w * _arg2.x) + (_arg1.x * _arg2.w)) + (_arg1.y * _arg2.z)) - (_arg1.z * _arg2.y)); this.y = ((((_arg1.w * _arg2.y) - (_arg1.x * _arg2.z)) + (_arg1.y * _arg2.w)) + (_arg1.z * _arg2.x)); this.z = ((((_arg1.w * _arg2.z) + (_arg1.x * _arg2.y)) - (_arg1.y * _arg2.x)) + (_arg1.z * _arg2.w)); this.w = ((((_arg1.w * _arg2.w) - (_arg1.x * _arg2.x)) - (_arg1.y * _arg2.y)) - (_arg1.z * _arg2.z)); } public function toString():String{ return (((((((("Quaternion: x:" + this.x) + " y:") + this.y) + " z:") + this.z) + " w:") + this.w)); } public function normalize():void{ var _local2:Number; var _local1:Number = this.modulo; if (Math.abs(_local1) < EPSILON){ x = (y = (z = 0)); w = 1; } else { _local2 = (1 / _local1); x = (x * _local2); y = (y * _local2); z = (z * _local2); w = (w * _local2); }; } public function toEuler():Number3D{ var _local1:Number3D = new Number3D(); var _local2:Quaternion = this; var _local3:Number = ((_local2.x * _local2.y) + (_local2.z * _local2.w)); if (_local3 > 0.499){ _local1.x = (2 * Math.atan2(_local2.x, _local2.w)); _local1.y = (Math.PI / 2); _local1.z = 0; return (_local1); }; if (_local3 < -0.499){ _local1.x = (-2 * Math.atan2(_local2.x, _local2.w)); _local1.y = (-(Math.PI) / 2); _local1.z = 0; return (_local1); }; var _local4:Number = (_local2.x * _local2.x); var _local5:Number = (_local2.y * _local2.y); var _local6:Number = (_local2.z * _local2.z); _local1.x = Math.atan2((((2 * _local2.y) * _local2.w) - ((2 * _local2.x) * _local2.z)), ((1 - (2 * _local5)) - (2 * _local6))); _local1.y = Math.asin((2 * _local3)); _local1.z = Math.atan2((((2 * _local2.x) * _local2.w) - ((2 * _local2.y) * _local2.z)), ((1 - (2 * _local4)) - (2 * _local6))); return (_local1); } public function get modulo():Number{ return (Math.sqrt(((((x * x) + (y * y)) + (z * z)) + (w * w)))); } public function clone():Quaternion{ return (new Quaternion(this.x, this.y, this.z, this.w)); } public function mult(_arg1:Quaternion):void{ var _local2:Number = this.w; var _local3:Number = this.x; var _local4:Number = this.y; var _local5:Number = this.z; x = ((((_local2 * _arg1.x) + (_local3 * _arg1.w)) + (_local4 * _arg1.z)) - (_local5 * _arg1.y)); y = ((((_local2 * _arg1.y) - (_local3 * _arg1.z)) + (_local4 * _arg1.w)) + (_local5 * _arg1.x)); z = ((((_local2 * _arg1.z) + (_local3 * _arg1.y)) - (_local4 * _arg1.x)) + (_local5 * _arg1.w)); w = ((((_local2 * _arg1.w) - (_local3 * _arg1.x)) - (_local4 * _arg1.y)) - (_local5 * _arg1.z)); } public static function sub(_arg1:Quaternion, _arg2:Quaternion):Quaternion{ return (new Quaternion((_arg1.x - _arg2.x), (_arg1.y - _arg2.y), (_arg1.z - _arg2.z), (_arg1.w - _arg2.w))); } public static function add(_arg1:Quaternion, _arg2:Quaternion):Quaternion{ return (new Quaternion((_arg1.x + _arg2.x), (_arg1.y + _arg2.y), (_arg1.z + _arg2.z), (_arg1.w + _arg2.w))); } public static function createFromEuler(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Boolean=false):Quaternion{ if (_arg4){ _arg1 = (_arg1 * DEGTORAD); _arg2 = (_arg2 * DEGTORAD); _arg3 = (_arg3 * DEGTORAD); }; var _local5:Number = Math.sin((_arg1 * 0.5)); var _local6:Number = Math.cos((_arg1 * 0.5)); var _local7:Number = Math.sin((_arg2 * 0.5)); var _local8:Number = Math.cos((_arg2 * 0.5)); var _local9:Number = Math.sin((_arg3 * 0.5)); var _local10:Number = Math.cos((_arg3 * 0.5)); var _local11:Number = (_local6 * _local8); var _local12:Number = (_local5 * _local7); var _local13:Quaternion = new (Quaternion); _local13.x = ((_local9 * _local11) - (_local10 * _local12)); _local13.y = (((_local10 * _local5) * _local8) + ((_local9 * _local6) * _local7)); _local13.z = (((_local10 * _local6) * _local7) - ((_local9 * _local5) * _local8)); _local13.w = ((_local10 * _local11) + (_local9 * _local12)); return (_local13); } public static function createFromMatrix(_arg1:Matrix3D):Quaternion{ var _local3:Number; var _local5:int; var _local6:int; var _local7:int; var _local9:Array; var _local10:Array; var _local2:Quaternion = new (Quaternion); var _local4:Array = new Array(4); var _local8:Number = ((_arg1.n11 + _arg1.n22) + _arg1.n33); if (_local8 > 0){ _local3 = Math.sqrt((_local8 + 1)); _local2.w = (_local3 / 2); _local3 = (0.5 / _local3); _local2.x = ((_arg1.n32 - _arg1.n23) * _local3); _local2.y = ((_arg1.n13 - _arg1.n31) * _local3); _local2.z = ((_arg1.n21 - _arg1.n12) * _local3); } else { _local9 = [1, 2, 0]; _local10 = [[_arg1.n11, _arg1.n12, _arg1.n13, _arg1.n14], [_arg1.n21, _arg1.n22, _arg1.n23, _arg1.n24], [_arg1.n31, _arg1.n32, _arg1.n33, _arg1.n34]]; _local5 = 0; if (_local10[1][1] > _local10[0][0]){ _local5 = 1; }; if (_local10[2][2] > _local10[_local5][_local5]){ _local5 = 2; }; _local6 = _local9[_local5]; _local7 = _local9[_local6]; _local3 = Math.sqrt(((_local10[_local5][_local5] - (_local10[_local6][_local6] + _local10[_local7][_local7])) + 1)); _local4[_local5] = (_local3 * 0.5); if (_local3 != 0){ _local3 = (0.5 / _local3); }; _local4[3] = ((_local10[_local7][_local6] - _local10[_local6][_local7]) * _local3); _local4[_local6] = ((_local10[_local6][_local5] + _local10[_local5][_local6]) * _local3); _local4[_local7] = ((_local10[_local7][_local5] + _local10[_local5][_local7]) * _local3); _local2.x = _local4[0]; _local2.y = _local4[1]; _local2.z = _local4[2]; _local2.w = _local4[3]; }; return (_local2); } public static function dot(_arg1:Quaternion, _arg2:Quaternion):Number{ return (((((_arg1.x * _arg2.x) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z)) + (_arg1.w * _arg2.w))); } public static function multiply(_arg1:Quaternion, _arg2:Quaternion):Quaternion{ var _local3:Quaternion = new (Quaternion); _local3.x = ((((_arg1.w * _arg2.x) + (_arg1.x * _arg2.w)) + (_arg1.y * _arg2.z)) - (_arg1.z * _arg2.y)); _local3.y = ((((_arg1.w * _arg2.y) - (_arg1.x * _arg2.z)) + (_arg1.y * _arg2.w)) + (_arg1.z * _arg2.x)); _local3.z = ((((_arg1.w * _arg2.z) + (_arg1.x * _arg2.y)) - (_arg1.y * _arg2.x)) + (_arg1.z * _arg2.w)); _local3.w = ((((_arg1.w * _arg2.w) - (_arg1.x * _arg2.x)) - (_arg1.y * _arg2.y)) - (_arg1.z * _arg2.z)); return (_local3); } public static function createFromAxisAngle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Quaternion{ var _local5:Quaternion = new (Quaternion); _local5.setFromAxisAngle(_arg1, _arg2, _arg3, _arg4); return (_local5); } public static function slerp(_arg1:Quaternion, _arg2:Quaternion, _arg3:Number):Quaternion{ var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local4:Number = ((((_arg1.w * _arg2.w) + (_arg1.x * _arg2.x)) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z)); if (_local4 < 0){ _arg1.x = (_arg1.x * -1); _arg1.y = (_arg1.y * -1); _arg1.z = (_arg1.z * -1); _arg1.w = (_arg1.w * -1); _local4 = (_local4 * -1); }; if ((_local4 + 1) > EPSILON){ if ((1 - _local4) >= EPSILON){ _local7 = Math.acos(_local4); _local8 = (1 / Math.sin(_local7)); _local5 = (Math.sin((_local7 * (1 - _arg3))) * _local8); _local6 = (Math.sin((_local7 * _arg3)) * _local8); } else { _local5 = (1 - _arg3); _local6 = _arg3; }; } else { _arg2.y = -(_arg1.y); _arg2.x = _arg1.x; _arg2.w = -(_arg1.w); _arg2.z = _arg1.z; _local5 = Math.sin((Math.PI * (0.5 - _arg3))); _local6 = Math.sin((Math.PI * _arg3)); }; return (new Quaternion(((_local5 * _arg1.x) + (_local6 * _arg2.x)), ((_local5 * _arg1.y) + (_local6 * _arg2.y)), ((_local5 * _arg1.z) + (_local6 * _arg2.z)), ((_local5 * _arg1.w) + (_local6 * _arg2.w)))); } public static function createFromOrthoMatrix(_arg1:Matrix3D):Quaternion{ var _local2:Quaternion = new (Quaternion); _local2.w = (Math.sqrt(Math.max(0, (((1 + _arg1.n11) + _arg1.n22) + _arg1.n33))) / 2); _local2.x = (Math.sqrt(Math.max(0, (((1 + _arg1.n11) - _arg1.n22) - _arg1.n33))) / 2); _local2.y = (Math.sqrt(Math.max(0, (((1 - _arg1.n11) + _arg1.n22) - _arg1.n33))) / 2); _local2.z = (Math.sqrt(Math.max(0, (((1 - _arg1.n11) - _arg1.n22) + _arg1.n33))) / 2); _local2.x = (((_arg1.n32 - _arg1.n23) < 0)) ? ((_local2.x < 0)) ? _local2.x : -(_local2.x) : ((_local2.x < 0)) ? -(_local2.x) : _local2.x; _local2.y = (((_arg1.n13 - _arg1.n31) < 0)) ? ((_local2.y < 0)) ? _local2.y : -(_local2.y) : ((_local2.y < 0)) ? -(_local2.y) : _local2.y; _local2.z = (((_arg1.n21 - _arg1.n12) < 0)) ? ((_local2.z < 0)) ? _local2.z : -(_local2.z) : ((_local2.z < 0)) ? -(_local2.z) : _local2.z; return (_local2); } public static function conjugate(_arg1:Quaternion):Quaternion{ var _local2:Quaternion = new (Quaternion); _local2.x = -(_arg1.x); _local2.y = -(_arg1.y); _local2.z = -(_arg1.z); _local2.w = _arg1.w; return (_local2); } public static function slerpOld(_arg1:Quaternion, _arg2:Quaternion, _arg3:Number):Quaternion{ var _local4:Quaternion = new (Quaternion); var _local5:Number = ((((_arg1.w * _arg2.w) + (_arg1.x * _arg2.x)) + (_arg1.y * _arg2.y)) + (_arg1.z * _arg2.z)); if (Math.abs(_local5) >= 1){ _local4.w = _arg1.w; _local4.x = _arg1.x; _local4.y = _arg1.y; _local4.z = _arg1.z; return (_local4); }; var _local6:Number = Math.acos(_local5); var _local7:Number = Math.sqrt((1 - (_local5 * _local5))); if (Math.abs(_local7) < 0.001){ _local4.w = ((_arg1.w * 0.5) + (_arg2.w * 0.5)); _local4.x = ((_arg1.x * 0.5) + (_arg2.x * 0.5)); _local4.y = ((_arg1.y * 0.5) + (_arg2.y * 0.5)); _local4.z = ((_arg1.z * 0.5) + (_arg2.z * 0.5)); return (_local4); }; var _local8:Number = (Math.sin(((1 - _arg3) * _local6)) / _local7); var _local9:Number = (Math.sin((_arg3 * _local6)) / _local7); _local4.w = ((_arg1.w * _local8) + (_arg2.w * _local9)); _local4.x = ((_arg1.x * _local8) + (_arg2.x * _local9)); _local4.y = ((_arg1.y * _local8) + (_arg2.y * _local9)); _local4.z = ((_arg1.z * _local8) + (_arg2.z * _local9)); return (_local4); } } }//package org.papervision3d.core.math
Section 60
//pv3dview (org.papervision3d.core.ns.pv3dview) package org.papervision3d.core.ns { public namespace pv3dview; }//package org.papervision3d.core.ns
Section 61
//CameraObject3D (org.papervision3d.core.proto.CameraObject3D) package org.papervision3d.core.proto { import org.papervision3d.core.render.data.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.math.*; import org.papervision3d.core.log.*; import org.papervision3d.core.culling.*; import org.papervision3d.core.math.util.*; import org.papervision3d.*; public class CameraObject3D extends DisplayObject3D { protected var _orthoScale:Number;// = 1 public var culler:IObjectCuller; public var sort:Boolean; public var viewport:Rectangle; protected var _target:DisplayObject3D; protected var _orthoScaleMatrix:Matrix3D; public var eye:Matrix3D; protected var _ortho:Boolean; protected var _useCulling:Boolean; public var zoom:Number; public var yUP:Boolean; public var focus:Number; protected var _useProjectionMatrix:Boolean; protected var _far:Number; public static var DEFAULT_VIEWPORT:Rectangle = new Rectangle(0, 0, 550, 400); public static var DEFAULT_POS:Number3D = new Number3D(0, 0, -1000); public static var DEFAULT_UP:Number3D = new Number3D(0, 1, 0); private static var _flipY:Matrix3D = Matrix3D.scaleMatrix(1, -1, 1); public function CameraObject3D(_arg1:Number=500, _arg2:Number=3){ this.x = DEFAULT_POS.x; this.y = DEFAULT_POS.y; this.z = DEFAULT_POS.z; this.zoom = _arg2; this.focus = _arg1; this.eye = Matrix3D.IDENTITY; this.viewport = DEFAULT_VIEWPORT; this.sort = true; _ortho = false; _orthoScaleMatrix = Matrix3D.scaleMatrix(1, 1, 1); if (Papervision3D.useRIGHTHANDED){ DEFAULT_UP.y = -1; this.yUP = false; this.lookAt(DisplayObject3D.ZERO); } else { this.yUP = true; }; } public function get target():DisplayObject3D{ return (_target); } public function get useProjectionMatrix():Boolean{ return (_useProjectionMatrix); } public function set fov(_arg1:Number):void{ if (((!(viewport)) || (viewport.isEmpty()))){ PaperLogger.warning("CameraObject3D#viewport not set, can't set fov!"); return; }; var _local2:Number = 0; var _local3:Number = 0; var _local4:Number = 0; if (_target){ _local2 = _target.world.n14; _local3 = _target.world.n24; _local4 = _target.world.n34; }; var _local5:Number = (viewport.height / 2); var _local6:Number = ((_arg1 / 2) * (Math.PI / 180)); this.focus = ((_local5 / Math.tan(_local6)) / this.zoom); } public function pan(_arg1:Number):void{ } public function get far():Number{ return (_far); } public function set target(_arg1:DisplayObject3D):void{ _target = _arg1; } public function projectFaces(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{ return (0); } public function get useCulling():Boolean{ return (_useCulling); } public function set far(_arg1:Number):void{ if (_arg1 > this.focus){ _far = _arg1; }; } public function get near():Number{ return (this.focus); } public function transformView(_arg1:Matrix3D=null):void{ if (this.yUP){ eye.calculateMultiply(((_arg1) || (this.transform)), _flipY); eye.invert(); } else { eye.calculateInverse(((_arg1) || (this.transform))); }; } public function set useProjectionMatrix(_arg1:Boolean):void{ _useProjectionMatrix = _arg1; } public function tilt(_arg1:Number):void{ } override public function lookAt(_arg1:DisplayObject3D, _arg2:Number3D=null):void{ if (this.yUP){ super.lookAt(_arg1, _arg2); } else { super.lookAt(_arg1, ((_arg2) || (DEFAULT_UP))); }; } public function get ortho():Boolean{ return (_ortho); } public function orbit(_arg1:Number, _arg2:Number, _arg3:Boolean=true, _arg4:DisplayObject3D=null):void{ } public function get fov():Number{ if (((!(viewport)) || (viewport.isEmpty()))){ PaperLogger.warning("CameraObject3D#viewport not set, can't calculate fov!"); return (NaN); }; var _local1:Number = 0; var _local2:Number = 0; var _local3:Number = 0; if (_target){ _local1 = _target.world.n14; _local2 = _target.world.n24; _local3 = _target.world.n34; }; var _local4:Number = (this.x - _local1); var _local5:Number = (this.y - _local2); var _local6:Number = (this.z - _local3); var _local7:Number = this.focus; var _local8:Number = this.zoom; var _local9:Number = (Math.sqrt((((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6))) + _local7); var _local10:Number = (viewport.height / 2); var _local11:Number = (180 / Math.PI); return (((Math.atan(((((_local9 / _local7) / _local8) * _local10) / _local9)) * _local11) * 2)); } public function set near(_arg1:Number):void{ if (_arg1 > 0){ this.focus = _arg1; }; } public function set useCulling(_arg1:Boolean):void{ _useCulling = _arg1; } public function set orthoScale(_arg1:Number):void{ _orthoScale = ((_arg1 > 0)) ? _arg1 : 0.0001; _orthoScaleMatrix.n11 = _orthoScale; _orthoScaleMatrix.n22 = _orthoScale; _orthoScaleMatrix.n33 = _orthoScale; } public function unproject(_arg1:Number, _arg2:Number, _arg3:Number=0):Number3D{ var _local4:Number3D; var _local5:Matrix3D; var _local6:Array; var _local7:Array; var _local8:Array; var _local9:Array; var _local10:Array; var _local11:Array; var _local12:Number; if (_useProjectionMatrix){ if (!viewport){ return (null); }; _local5 = this.transform; _local6 = [(-(viewport.width) / 2), (-(viewport.height) / 2), viewport.width, viewport.height]; _local7 = [_local5.n11, _local5.n21, _local5.n31, _local5.n41, _local5.n12, _local5.n22, _local5.n32, _local5.n42, _local5.n13, _local5.n23, _local5.n33, _local5.n43, _local5.n14, _local5.n24, _local5.n34, _local5.n44]; _local8 = new Array(16); _local9 = new Array(4); GLU.invertMatrix(_local7, _local7); if (_ortho){ _local10 = new Array(16); _local11 = new Array(16); GLU.ortho(_local11, (viewport.width / 2), (-(viewport.width) / 2), (-(viewport.height) / 2), (viewport.height / 2), far, near); GLU.scale(_local10, _orthoScale, _orthoScale, 1); GLU.multMatrices(_local10, _local11, _local8); } else { GLU.perspective(_local8, fov, (viewport.width / viewport.height), -(near), -(far)); }; GLU.unProject(-(_arg1), _arg2, _arg3, _local7, _local8, _local6, _local9); _local4 = new Number3D(); _local4.x = _local9[0]; _local4.y = _local9[1]; _local4.z = _local9[2]; } else { _local12 = ((focus * zoom) / focus); _local4 = new Number3D((_arg1 / _local12), ((yUP) ? -(_arg2) : _arg2 / _local12), focus); Matrix3D.multiplyVector3x3(transform, _local4); }; return (_local4); } public function set ortho(_arg1:Boolean):void{ _ortho = _arg1; } public function projectVertices(_arg1:Array, _arg2:DisplayObject3D, _arg3:RenderSessionData):Number{ return (0); } public function get orthoScale():Number{ return (_orthoScale); } } }//package org.papervision3d.core.proto
Section 62
//DisplayObjectContainer3D (org.papervision3d.core.proto.DisplayObjectContainer3D) package org.papervision3d.core.proto { import org.papervision3d.objects.*; import flash.events.*; import org.papervision3d.core.log.*; import flash.utils.*; public class DisplayObjectContainer3D extends EventDispatcher { protected var _childrenByName:Object; public var root:DisplayObjectContainer3D; private var _childrenTotal:int; protected var _children:Dictionary; public function DisplayObjectContainer3D():void{ this._children = new Dictionary(false); this._childrenByName = new Dictionary(true); this._childrenTotal = 0; } private function findChildByName(_arg1:String, _arg2:DisplayObject3D=null):DisplayObject3D{ var _local3:DisplayObject3D; var _local4:DisplayObject3D; _arg2 = ((_arg2) || (DisplayObject3D(this))); if (!_arg2){ return (null); }; if (_arg2.name == _arg1){ return (_arg2); }; for each (_local3 in _arg2.children) { _local4 = findChildByName(_arg1, _local3); if (_local4){ return (_local4); }; }; return (null); } public function getChildByName(_arg1:String, _arg2:Boolean=false):DisplayObject3D{ if (_arg2){ return (findChildByName(_arg1)); }; return (this._childrenByName[_arg1]); } override public function toString():String{ return (childrenList()); } public function addChildren(_arg1:DisplayObject3D):DisplayObjectContainer3D{ var _local2:DisplayObject3D; for each (_local2 in _arg1.children) { _arg1.removeChild(_local2); this.addChild(_local2); }; return (this); } public function get numChildren():int{ return (this._childrenTotal); } public function removeChild(_arg1:DisplayObject3D):DisplayObject3D{ if (((_arg1) && (_children[_arg1]))){ delete _childrenByName[this._children[_arg1]]; delete _children[_arg1]; _arg1.parent = null; _arg1.root = null; _childrenTotal--; return (_arg1); }; return (null); } public function removeChildByName(_arg1:String):DisplayObject3D{ return (removeChild(getChildByName(_arg1))); } public function addChild(_arg1:DisplayObject3D, _arg2:String=null):DisplayObject3D{ if (_arg1.parent){ PaperLogger.error("DisplayObjectContainer.addChild : DisplayObject3D already has a parent, ie is already added to scene."); }; _arg2 = ((((_arg2) || (_arg1.name))) || (String(_arg1.id))); this._children[_arg1] = _arg2; this._childrenByName[_arg2] = _arg1; this._childrenTotal++; _arg1.parent = this; _arg1.root = this.root; return (_arg1); } public function childrenList():String{ var _local2:String; var _local1 = ""; for (_local2 in this._children) { _local1 = (_local1 + (_local2 + "\n")); }; return (_local1); } public function get children():Object{ return (this._childrenByName); } } }//package org.papervision3d.core.proto
Section 63
//GeometryObject3D (org.papervision3d.core.proto.GeometryObject3D) package org.papervision3d.core.proto { import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import flash.events.*; import flash.utils.*; public class GeometryObject3D extends EventDispatcher { protected var _boundingSphereDirty:Boolean;// = true public var dirty:Boolean; protected var _aabbDirty:Boolean;// = true public var _ready:Boolean;// = false protected var _boundingSphere:BoundingSphere; public var faces:Array; private var _numInstances:uint;// = 0 public var vertices:Array; protected var _aabb:AxisAlignedBoundingBox; public function GeometryObject3D():void{ dirty = true; } public function transformVertices(_arg1:Matrix3D):void{ var _local15:Vertex3D; var _local16:Number; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:Number; var _local21:Number; var _local2:Number = _arg1.n11; var _local3:Number = _arg1.n12; var _local4:Number = _arg1.n13; var _local5:Number = _arg1.n21; var _local6:Number = _arg1.n22; var _local7:Number = _arg1.n23; var _local8:Number = _arg1.n31; var _local9:Number = _arg1.n32; var _local10:Number = _arg1.n33; var _local11:Number = _arg1.n14; var _local12:Number = _arg1.n24; var _local13:Number = _arg1.n34; var _local14:int = vertices.length; while ((_local15 = vertices[--_local14])) { _local16 = _local15.x; _local17 = _local15.y; _local18 = _local15.z; _local19 = ((((_local16 * _local2) + (_local17 * _local3)) + (_local18 * _local4)) + _local11); _local20 = ((((_local16 * _local5) + (_local17 * _local6)) + (_local18 * _local7)) + _local12); _local21 = ((((_local16 * _local8) + (_local17 * _local9)) + (_local18 * _local10)) + _local13); _local15.x = _local19; _local15.y = _local20; _local15.z = _local21; }; } public function set ready(_arg1:Boolean):void{ if (_arg1){ createVertexNormals(); this.dirty = false; }; _ready = _arg1; } public function flipFaces():void{ var _local1:Triangle3D; var _local2:Vertex3D; for each (_local1 in this.faces) { _local2 = _local1.v0; _local1.v0 = _local1.v2; _local1.v2 = _local2; _local1.createNormal(); }; this.ready = true; } private function createVertexNormals():void{ var _local2:Triangle3D; var _local3:Vertex3D; var _local1:Dictionary = new Dictionary(true); for each (_local2 in faces) { _local2.v0.connectedFaces[_local2] = _local2; _local2.v1.connectedFaces[_local2] = _local2; _local2.v2.connectedFaces[_local2] = _local2; _local1[_local2.v0] = _local2.v0; _local1[_local2.v1] = _local2.v1; _local1[_local2.v2] = _local2.v2; }; for each (_local3 in _local1) { _local3.calculateNormal(); }; } public function get boundingSphere():BoundingSphere{ if (_boundingSphereDirty){ _boundingSphere = BoundingSphere.getFromVertices(vertices); _boundingSphereDirty = false; }; return (_boundingSphere); } public function clone(_arg1:DisplayObject3D=null):GeometryObject3D{ var _local5:int; var _local6:MaterialObject3D; var _local7:Vertex3D; var _local8:Triangle3D; var _local9:Vertex3D; var _local10:Vertex3D; var _local11:Vertex3D; var _local2:Dictionary = new Dictionary(true); var _local3:Dictionary = new Dictionary(true); var _local4:GeometryObject3D = new GeometryObject3D(); _local4.vertices = new Array(); _local4.faces = new Array(); _local5 = 0; while (_local5 < this.vertices.length) { _local7 = this.vertices[_local5]; _local3[_local7] = _local7.clone(); _local4.vertices.push(_local3[_local7]); _local5++; }; _local5 = 0; while (_local5 < this.faces.length) { _local8 = this.faces[_local5]; _local9 = _local3[_local8.v0]; _local10 = _local3[_local8.v1]; _local11 = _local3[_local8.v2]; _local4.faces.push(new Triangle3D(_arg1, [_local9, _local10, _local11], _local8.material, _local8.uv)); _local2[_local8.material] = _local8.material; _local5++; }; for each (_local6 in _local2) { if (_local6){ _local6.registerObject(_arg1); }; }; return (_local4); } public function get ready():Boolean{ return (_ready); } public function get aabb():AxisAlignedBoundingBox{ if (_aabbDirty){ _aabb = AxisAlignedBoundingBox.createFromVertices(vertices); _aabbDirty = false; }; return (_aabb); } } }//package org.papervision3d.core.proto
Section 64
//LightObject3D (org.papervision3d.core.proto.LightObject3D) package org.papervision3d.core.proto { import org.papervision3d.objects.*; import org.papervision3d.core.math.*; import org.papervision3d.materials.*; import org.papervision3d.objects.primitives.*; public class LightObject3D extends DisplayObject3D { public var flipped:Boolean; public var lightMatrix:Matrix3D; private var _showLight:Boolean; private var displaySphere:Sphere; public function LightObject3D(_arg1:Boolean=false, _arg2:Boolean=false){ this.lightMatrix = Matrix3D.IDENTITY; this.showLight = _arg1; this.flipped = _arg2; } public function get showLight():Boolean{ return (_showLight); } public function set showLight(_arg1:Boolean):void{ if (_showLight){ removeChild(displaySphere); }; if (_arg1){ displaySphere = new Sphere(new WireframeMaterial(0xFFFF00), 10, 3, 2); addChild(displaySphere); }; _showLight = _arg1; } } }//package org.papervision3d.core.proto
Section 65
//MaterialObject3D (org.papervision3d.core.proto.MaterialObject3D) package org.papervision3d.core.proto { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.render.material.*; import org.papervision3d.materials.*; import flash.events.*; import flash.utils.*; import org.papervision3d.core.render.draw.*; public class MaterialObject3D extends EventDispatcher implements ITriangleDrawer { public var widthOffset:Number;// = 0 public var name:String; public var heightOffset:Number;// = 0 public var fillAlpha:Number;// = 0 public var fillColor:Number; public var id:Number; protected var objects:Dictionary; public var baked:Boolean;// = false public var invisible:Boolean;// = false public var smooth:Boolean;// = false public var bitmap:BitmapData; public var lineAlpha:Number;// = 0 public var lineColor:Number; public var lineThickness:Number;// = 1 public var interactive:Boolean;// = false public var oneSide:Boolean;// = true public var opposite:Boolean;// = false public var maxU:Number; public var tiled:Boolean;// = false public var maxV:Number; public static var DEFAULT_COLOR:int = 0; public static var DEBUG_COLOR:int = 0xFF00FF; private static var _totalMaterialObjects:Number = 0; public function MaterialObject3D(){ lineColor = DEFAULT_COLOR; fillColor = DEFAULT_COLOR; super(); this.id = _totalMaterialObjects++; MaterialManager.registerMaterial(this); objects = new Dictionary(true); } public function getObjectList():Dictionary{ return (objects); } override public function toString():String{ return (((((("[MaterialObject3D] bitmap:" + this.bitmap) + " lineColor:") + this.lineColor) + " fillColor:") + fillColor)); } public function drawRT(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData):void{ } public function get doubleSided():Boolean{ return (!(this.oneSide)); } public function unregisterObject(_arg1:DisplayObject3D):void{ if (((objects) && (objects[_arg1]))){ objects[_arg1] = null; }; } public function set doubleSided(_arg1:Boolean):void{ this.oneSide = !(_arg1); } public function registerObject(_arg1:DisplayObject3D):void{ objects[_arg1] = true; } public function updateBitmap():void{ } public function clone():MaterialObject3D{ var _local1:MaterialObject3D = new MaterialObject3D(); _local1.copy(this); return (_local1); } public function isUpdateable():Boolean{ return (!(baked)); } public function copy(_arg1:MaterialObject3D):void{ this.bitmap = _arg1.bitmap; this.smooth = _arg1.smooth; this.lineColor = _arg1.lineColor; this.lineAlpha = _arg1.lineAlpha; this.fillColor = _arg1.fillColor; this.fillAlpha = _arg1.fillAlpha; this.oneSide = _arg1.oneSide; this.opposite = _arg1.opposite; this.invisible = _arg1.invisible; this.name = _arg1.name; this.maxU = _arg1.maxU; this.maxV = _arg1.maxV; } public function destroy():void{ objects = null; bitmap = null; MaterialManager.unRegisterMaterial(this); } public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ } public static function get DEFAULT():MaterialObject3D{ var _local1:MaterialObject3D = new WireframeMaterial(); _local1.lineColor = (0xFFFFFF * Math.random()); _local1.lineAlpha = 1; _local1.fillColor = DEFAULT_COLOR; _local1.fillAlpha = 1; _local1.doubleSided = false; return (_local1); } public static function get DEBUG():MaterialObject3D{ var _local1:MaterialObject3D = new (MaterialObject3D); _local1.lineColor = (0xFFFFFF * Math.random()); _local1.lineAlpha = 1; _local1.fillColor = DEBUG_COLOR; _local1.fillAlpha = 0.37; _local1.doubleSided = true; return (_local1); } } }//package org.papervision3d.core.proto
Section 66
//SceneObject3D (org.papervision3d.core.proto.SceneObject3D) package org.papervision3d.core.proto { import org.papervision3d.materials.utils.*; import org.papervision3d.objects.*; import org.papervision3d.core.log.*; import org.papervision3d.*; public class SceneObject3D extends DisplayObjectContainer3D { public var objects:Array; public var materials:MaterialsList; public function SceneObject3D(){ this.objects = new Array(); this.materials = new MaterialsList(); PaperLogger.info((((((Papervision3D.NAME + " ") + Papervision3D.VERSION) + " (") + Papervision3D.DATE) + ")\n")); this.root = this; } override public function removeChild(_arg1:DisplayObject3D):DisplayObject3D{ super.removeChild(_arg1); var _local2:int; while (_local2 < this.objects.length) { if (this.objects[_local2] === _arg1){ this.objects.splice(_local2, 1); return (_arg1); }; _local2++; }; return (_arg1); } override public function addChild(_arg1:DisplayObject3D, _arg2:String=null):DisplayObject3D{ var _local3:DisplayObject3D = super.addChild(_arg1, (_arg2) ? _arg2 : _arg1.name); _arg1.scene = this; _arg1.parent = null; this.objects.push(_local3); return (_local3); } } }//package org.papervision3d.core.proto
Section 67
//AbstractRenderListItem (org.papervision3d.core.render.command.AbstractRenderListItem) package org.papervision3d.core.render.command { import org.papervision3d.core.render.data.*; import flash.display.*; public class AbstractRenderListItem implements IRenderListItem { public var screenZ:Number; public function render(_arg1:RenderSessionData, _arg2:Graphics):void{ } } }//package org.papervision3d.core.render.command
Section 68
//IRenderListItem (org.papervision3d.core.render.command.IRenderListItem) package org.papervision3d.core.render.command { import org.papervision3d.core.render.data.*; import flash.display.*; public interface IRenderListItem { function render(_arg1:RenderSessionData, _arg2:Graphics):void; } }//package org.papervision3d.core.render.command
Section 69
//RenderableListItem (org.papervision3d.core.render.command.RenderableListItem) package org.papervision3d.core.render.command { import org.papervision3d.core.render.data.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; public class RenderableListItem extends AbstractRenderListItem { public var minX:Number; public var minY:Number; public var minZ:Number; public var area:Number; public var instance:DisplayObject3D; public var renderableInstance:AbstractRenderable; public var renderable:Class; public var maxX:Number; public var maxY:Number; public var maxZ:Number; public var quadrant:QuadTreeNode; public function getZ(_arg1:Number, _arg2:Number, _arg3:Number):Number{ return (screenZ); } public function update():void{ } public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{ return (_arg2); } public function quarter(_arg1:Number):Array{ return ([]); } } }//package org.papervision3d.core.render.command
Section 70
//RenderLine (org.papervision3d.core.render.command.RenderLine) package org.papervision3d.core.render.command { import org.papervision3d.core.render.data.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.materials.special.*; public class RenderLine extends RenderableListItem implements IRenderListItem { public var size:Number; private var fbz:Number; private var db:Number; private var bzf:Number; private var axf:Number; public var v1:Vertex3DInstance; private var dx:Number; private var dy:Number; private var faz:Number; private var det:Number; private var ayf:Number; private var da:Number; private var ax:Number; private var ay:Number; private var az:Number; public var renderer:LineMaterial; private var l1:Number2D; private var l2:Number2D; private var azf:Number; private var bxf:Number; public var cV:Vertex3DInstance; private var bx:Number; private var by:Number; private var bz:Number; public var length:Number; private var xfocus:Number; private var cp3d:Number3D; private var byf:Number; private var p:Number2D; private var v:Number2D; public var v0:Vertex3DInstance; public var line:Line3D; private var yfocus:Number; private static var mouseVector:Number3D = Number3D.ZERO; private static var lineVector:Number3D = Number3D.ZERO; public function RenderLine(_arg1:Line3D){ this.renderable = Line3D; this.renderableInstance = _arg1; this.line = _arg1; this.instance = _arg1.instance; v0 = _arg1.v0.vertex3DInstance; v1 = _arg1.v1.vertex3DInstance; cV = _arg1.cV.vertex3DInstance; p = new Number2D(); l1 = new Number2D(); l2 = new Number2D(); v = new Number2D(); cp3d = new Number3D(); } override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{ renderer.drawLine(this, _arg2, _arg1); } override public function getZ(_arg1:Number, _arg2:Number, _arg3:Number):Number{ ax = v0.x; ay = v0.y; az = v0.z; bx = v1.x; by = v1.y; bz = v1.z; if ((((ax == _arg1)) && ((ay == _arg2)))){ return (az); }; if ((((bx == _arg1)) && ((by == _arg2)))){ return (bz); }; dx = (bx - ax); dy = (by - ay); azf = (az / _arg3); bzf = (bz / _arg3); faz = (1 + azf); fbz = (1 + bzf); xfocus = _arg1; yfocus = _arg2; axf = ((ax * faz) - (_arg1 * azf)); bxf = ((bx * fbz) - (_arg1 * bzf)); ayf = ((ay * faz) - (_arg2 * azf)); byf = ((by * fbz) - (_arg2 * bzf)); det = ((dx * (axf - bxf)) + (dy * (ayf - byf))); db = ((dx * (axf - _arg1)) + (dy * (ayf - _arg2))); da = ((dx * (_arg1 - bxf)) + (dy * (_arg2 - byf))); return ((((da * az) + (db * bz)) / det)); } override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{ var _local3:Number; var _local4:Number; var _local5:Number; if (renderer.interactive){ _local3 = line.size; p.reset(_arg1.x, _arg1.y); l1.reset(line.v0.vertex3DInstance.x, line.v0.vertex3DInstance.y); l2.reset(line.v1.vertex3DInstance.x, line.v1.vertex3DInstance.y); v.copyFrom(l2); v.minusEq(l1); _local4 = ((((p.x - l1.x) * (l2.x - l1.x)) + ((p.y - l1.y) * (l2.y - l1.y))) / ((v.x * v.x) + (v.y * v.y))); if ((((_local4 > 0)) && ((_local4 < 1)))){ v.multiplyEq(_local4); v.plusEq(l1); v.minusEq(p); _local5 = ((v.x * v.x) + (v.y * v.y)); if (_local5 < (_local3 * _local3)){ _arg2.displayObject3D = line.instance; _arg2.material = renderer; _arg2.renderable = line; _arg2.hasHit = true; cp3d.reset((line.v1.x - line.v0.x), (line.v1.y - line.v0.y), (line.v1.x - line.v0.x)); cp3d.x = (cp3d.x * _local4); cp3d.y = (cp3d.y * _local4); cp3d.z = (cp3d.z * _local4); cp3d.x = (cp3d.x + line.v0.x); cp3d.y = (cp3d.y + line.v0.y); cp3d.z = (cp3d.z + line.v0.z); _arg2.x = cp3d.x; _arg2.y = cp3d.y; _arg2.z = cp3d.z; _arg2.u = 0; _arg2.v = 0; return (_arg2); }; }; }; return (_arg2); } } }//package org.papervision3d.core.render.command
Section 71
//RenderParticle (org.papervision3d.core.render.command.RenderParticle) package org.papervision3d.core.render.command { import org.papervision3d.core.render.data.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.materials.special.*; public class RenderParticle extends RenderableListItem implements IRenderListItem { public var renderMat:ParticleMaterial; public var particle:Particle; public function RenderParticle(_arg1:Particle){ this.particle = _arg1; this.renderableInstance = _arg1; this.renderable = Particle; this.instance = _arg1.instance; } override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{ particle.material.drawParticle(particle, _arg2, _arg1); } override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{ renderMat = particle.material; if (renderMat.interactive){ if (particle.renderRect.contains(_arg1.x, _arg1.y)){ _arg2.displayObject3D = particle.instance; _arg2.material = renderMat; _arg2.renderable = particle; _arg2.hasHit = true; _arg2.x = particle.x; _arg2.y = particle.y; _arg2.z = particle.z; _arg2.u = 0; _arg2.v = 0; return (_arg2); }; }; return (_arg2); } } }//package org.papervision3d.core.render.command
Section 72
//RenderTriangle (org.papervision3d.core.render.command.RenderTriangle) package org.papervision3d.core.render.command { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.materials.*; import org.papervision3d.core.render.draw.*; public class RenderTriangle extends RenderableListItem implements IRenderListItem { public var triangle:Triangle3D; private var bzf:Number; private var axf:Number; private var det:Number; private var v12:Vertex3DInstance; private var faz:Number; private var position:Number3D; private var ayf:Number; private var au:Number; private var av:Number; private var ax:Number; private var ay:Number; private var az:Number; private var v20:Vertex3DInstance; private var fbz:Number; private var azf:Number; private var bu:Number; private var bv:Number; private var bx:Number; private var by:Number; private var bz:Number; private var fcz:Number; private var uv01:NumberUV; private var cu:Number; private var cv:Number; private var cx:Number; private var cy:Number; private var cz:Number; public var v0:Vertex3DInstance; public var v1:Vertex3DInstance; private var da:Number; private var db:Number; private var dc:Number; public var container:Sprite; private var uv12:NumberUV; public var v2:Vertex3DInstance; private var cxf:Number; private var uv20:NumberUV; protected var vx0:Vertex3DInstance; public var uv0:NumberUV; public var uv1:NumberUV; public var uv2:NumberUV; protected var vx1:Vertex3DInstance; protected var vx2:Vertex3DInstance; public var renderer:ITriangleDrawer; private var cyf:Number; private var czf:Number; private var bxf:Number; protected var vPointL:Vertex3DInstance; public var renderMat:MaterialObject3D; private var byf:Number; private var v01:Vertex3DInstance; public var create:Function; protected static var resPA:Vertex3DInstance = new Vertex3DInstance(); protected static var resBA:Vertex3DInstance = new Vertex3DInstance(); protected static var vPoint:Vertex3DInstance = new Vertex3DInstance(); protected static var resRA:Vertex3DInstance = new Vertex3DInstance(); public function RenderTriangle(_arg1:Triangle3D):void{ position = new Number3D(); super(); this.triangle = _arg1; this.instance = _arg1.instance; renderableInstance = _arg1; renderable = Triangle3D; this.v0 = _arg1.v0.vertex3DInstance; this.v1 = _arg1.v1.vertex3DInstance; this.v2 = _arg1.v2.vertex3DInstance; this.uv0 = _arg1.uv0; this.uv1 = _arg1.uv1; this.uv2 = _arg1.uv2; this.renderer = _arg1.material; update(); } private function deepHitTest(_arg1:Triangle3D, _arg2:Vertex3DInstance, _arg3:RenderHitData):RenderHitData{ var _local44:MovieMaterial; var _local45:Rectangle; var _local4:Vertex3DInstance = _arg1.v0.vertex3DInstance; var _local5:Vertex3DInstance = _arg1.v1.vertex3DInstance; var _local6:Vertex3DInstance = _arg1.v2.vertex3DInstance; var _local7:Number = (_local6.x - _local4.x); var _local8:Number = (_local6.y - _local4.y); var _local9:Number = (_local5.x - _local4.x); var _local10:Number = (_local5.y - _local4.y); var _local11:Number = (_arg2.x - _local4.x); var _local12:Number = (_arg2.y - _local4.y); var _local13:Number = ((_local7 * _local7) + (_local8 * _local8)); var _local14:Number = ((_local7 * _local9) + (_local8 * _local10)); var _local15:Number = ((_local7 * _local11) + (_local8 * _local12)); var _local16:Number = ((_local9 * _local9) + (_local10 * _local10)); var _local17:Number = ((_local9 * _local11) + (_local10 * _local12)); var _local18:Number = (1 / ((_local13 * _local16) - (_local14 * _local14))); var _local19:Number = (((_local16 * _local15) - (_local14 * _local17)) * _local18); var _local20:Number = (((_local13 * _local17) - (_local14 * _local15)) * _local18); var _local21:Number = (_arg1.v2.x - _arg1.v0.x); var _local22:Number = (_arg1.v2.y - _arg1.v0.y); var _local23:Number = (_arg1.v2.z - _arg1.v0.z); var _local24:Number = (_arg1.v1.x - _arg1.v0.x); var _local25:Number = (_arg1.v1.y - _arg1.v0.y); var _local26:Number = (_arg1.v1.z - _arg1.v0.z); var _local27:Number = ((_arg1.v0.x + (_local21 * _local19)) + (_local24 * _local20)); var _local28:Number = ((_arg1.v0.y + (_local22 * _local19)) + (_local25 * _local20)); var _local29:Number = ((_arg1.v0.z + (_local23 * _local19)) + (_local26 * _local20)); var _local30:Array = _arg1.uv; var _local31:Number = _local30[0].u; var _local32:Number = _local30[1].u; var _local33:Number = _local30[2].u; var _local34:Number = _local30[0].v; var _local35:Number = _local30[1].v; var _local36:Number = _local30[2].v; var _local37:Number = ((((_local32 - _local31) * _local20) + ((_local33 - _local31) * _local19)) + _local31); var _local38:Number = ((((_local35 - _local34) * _local20) + ((_local36 - _local34) * _local19)) + _local34); if (triangle.material){ renderMat = _arg1.material; } else { renderMat = _arg1.instance.material; }; var _local39:BitmapData = renderMat.bitmap; var _local40:Number = 1; var _local41:Number = 1; var _local42:Number = 0; var _local43:Number = 0; if ((renderMat is MovieMaterial)){ _local44 = (renderMat as MovieMaterial); _local45 = _local44.rect; if (_local45){ _local42 = _local45.x; _local43 = _local45.y; _local40 = _local45.width; _local41 = _local45.height; }; } else { if (_local39){ _local40 = (BitmapMaterial.AUTO_MIP_MAPPING) ? renderMat.widthOffset : _local39.width; _local41 = (BitmapMaterial.AUTO_MIP_MAPPING) ? renderMat.heightOffset : _local39.height; }; }; _arg3.displayObject3D = _arg1.instance; _arg3.material = renderMat; _arg3.renderable = _arg1; _arg3.hasHit = true; position.x = _local27; position.y = _local28; position.z = _local29; Matrix3D.multiplyVector(_arg1.instance.world, position); _arg3.x = position.x; _arg3.y = position.y; _arg3.z = position.z; _arg3.u = ((_local37 * _local40) + _local42); _arg3.v = ((_local41 - (_local38 * _local41)) + _local43); return (_arg3); } override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{ renderMat = triangle.material; if (!renderMat){ renderMat = triangle.instance.material; }; if (((renderMat) && (renderMat.interactive))){ vPointL = RenderTriangle.vPoint; vPointL.x = _arg1.x; vPointL.y = _arg1.y; vx0 = triangle.v0.vertex3DInstance; vx1 = triangle.v1.vertex3DInstance; vx2 = triangle.v2.vertex3DInstance; if (sameSide(vPointL, vx0, vx1, vx2)){ if (sameSide(vPointL, vx1, vx0, vx2)){ if (sameSide(vPointL, vx2, vx0, vx1)){ return (deepHitTest(triangle, vPointL, _arg2)); }; }; }; }; return (_arg2); } public function fivepointcut(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance, _arg5:Vertex3DInstance, _arg6:NumberUV, _arg7:NumberUV, _arg8:NumberUV, _arg9:NumberUV, _arg10:NumberUV):Array{ if (_arg1.distanceSqr(_arg4) < _arg2.distanceSqr(_arg5)){ return ([create(renderableInstance, renderer, _arg1, _arg2, _arg4, _arg6, _arg7, _arg9), create(renderableInstance, renderer, _arg2, _arg3, _arg4, _arg7, _arg8, _arg9), create(renderableInstance, renderer, _arg1, _arg4, _arg5, _arg6, _arg9, _arg10)]); }; return ([create(renderableInstance, renderer, _arg1, _arg2, _arg5, _arg6, _arg7, _arg10), create(renderableInstance, renderer, _arg2, _arg3, _arg4, _arg7, _arg8, _arg9), create(renderableInstance, renderer, _arg2, _arg4, _arg5, _arg7, _arg9, _arg10)]); } override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{ renderer.drawTriangle(this, _arg2, _arg1); } final override public function quarter(_arg1:Number):Array{ if (area < 20){ return (null); }; v01 = Vertex3DInstance.median(v0, v1, _arg1); v12 = Vertex3DInstance.median(v1, v2, _arg1); v20 = Vertex3DInstance.median(v2, v0, _arg1); uv01 = NumberUV.median(uv0, uv1); uv12 = NumberUV.median(uv1, uv2); uv20 = NumberUV.median(uv2, uv0); return ([create(renderableInstance, renderer, v0, v01, v20, uv0, uv01, uv20), create(renderableInstance, renderer, v1, v12, v01, uv1, uv12, uv01), create(renderableInstance, renderer, v2, v20, v12, uv2, uv20, uv12), create(renderableInstance, renderer, v01, v12, v20, uv01, uv12, uv20)]); } final override public function getZ(_arg1:Number, _arg2:Number, _arg3:Number):Number{ ax = v0.x; ay = v0.y; az = v0.z; bx = v1.x; by = v1.y; bz = v1.z; cx = v2.x; cy = v2.y; cz = v2.z; if ((((ax == _arg1)) && ((ay == _arg2)))){ return (az); }; if ((((bx == _arg1)) && ((by == _arg2)))){ return (bz); }; if ((((cx == _arg1)) && ((cy == _arg2)))){ return (cz); }; azf = (az / _arg3); bzf = (bz / _arg3); czf = (cz / _arg3); faz = (1 + azf); fbz = (1 + bzf); fcz = (1 + czf); axf = ((ax * faz) - (_arg1 * azf)); bxf = ((bx * fbz) - (_arg1 * bzf)); cxf = ((cx * fcz) - (_arg1 * czf)); ayf = ((ay * faz) - (_arg2 * azf)); byf = ((by * fbz) - (_arg2 * bzf)); cyf = ((cy * fcz) - (_arg2 * czf)); det = (((axf * (byf - cyf)) + (bxf * (cyf - ayf))) + (cxf * (ayf - byf))); da = (((_arg1 * (byf - cyf)) + (bxf * (cyf - _arg2))) + (cxf * (_arg2 - byf))); db = (((axf * (_arg2 - cyf)) + (_arg1 * (cyf - ayf))) + (cxf * (ayf - _arg2))); dc = (((axf * (byf - _arg2)) + (bxf * (_arg2 - ayf))) + (_arg1 * (ayf - byf))); return (((((da * az) + (db * bz)) + (dc * cz)) / det)); } override public function update():void{ if (v0.x > v1.x){ if (v0.x > v2.x){ maxX = v0.x; } else { maxX = v2.x; }; } else { if (v1.x > v2.x){ maxX = v1.x; } else { maxX = v2.x; }; }; if (v0.x < v1.x){ if (v0.x < v2.x){ minX = v0.x; } else { minX = v2.x; }; } else { if (v1.x < v2.x){ minX = v1.x; } else { minX = v2.x; }; }; if (v0.y > v1.y){ if (v0.y > v2.y){ maxY = v0.y; } else { maxY = v2.y; }; } else { if (v1.y > v2.y){ maxY = v1.y; } else { maxY = v2.y; }; }; if (v0.y < v1.y){ if (v0.y < v2.y){ minY = v0.y; } else { minY = v2.y; }; } else { if (v1.y < v2.y){ minY = v1.y; } else { minY = v2.y; }; }; if (v0.z > v1.z){ if (v0.z > v2.z){ maxZ = v0.z; } else { maxZ = v2.z; }; } else { if (v1.z > v2.z){ maxZ = v1.z; } else { maxZ = v2.z; }; }; if (v0.z < v1.z){ if (v0.z < v2.z){ minZ = v0.z; } else { minZ = v2.z; }; } else { if (v1.z < v2.z){ minZ = v1.z; } else { minZ = v2.z; }; }; screenZ = (((v0.z + v1.z) + v2.z) / 3); area = (0.5 * (((v0.x * (v2.y - v1.y)) + (v1.x * (v0.y - v2.y))) + (v2.x * (v1.y - v0.y)))); } public function sameSide(_arg1:Vertex3DInstance, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance):Boolean{ Vertex3DInstance.subTo(_arg4, _arg3, resBA); Vertex3DInstance.subTo(_arg1, _arg3, resPA); Vertex3DInstance.subTo(_arg2, _arg3, resRA); return (((Vertex3DInstance.cross(resBA, resPA) * Vertex3DInstance.cross(resBA, resRA)) >= 0)); } } }//package org.papervision3d.core.render.command
Section 73
//RenderVectorShape (org.papervision3d.core.render.command.RenderVectorShape) package org.papervision3d.core.render.command { import org.papervision3d.core.render.data.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.objects.special.*; import org.papervision3d.materials.special.*; import org.papervision3d.objects.special.commands.*; public class RenderVectorShape extends RenderableListItem implements IRenderListItem { public var renderer:VectorShapeMaterial; public var vectorShape:VectorShape3D; public function RenderVectorShape(_arg1:VectorShape3D){ this.vectorShape = _arg1; this.renderable = VectorShapeRenderable; this.renderableInstance = new VectorShapeRenderable(_arg1, this); super(); } override public function hitTestPoint2D(_arg1:Point, _arg2:RenderHitData):RenderHitData{ if (!renderer.interactive){ return (_arg2); }; var _local3:VectorShapeHitTest = VectorShapeHitTest.instance; var _local4:Graphics = _local3.graphics; _local4.clear(); _local4.beginFill(0xFF0000); var _local5:Boolean; var _local6:int; while (_local6 < vectorShape.graphicsCommands.length) { _local5 = IVectorShape(vectorShape.graphicsCommands[_local6]).draw(_local4, _local5); _local6++; }; if (_local3.hitTestPoint(_arg1.x, _arg1.y, true)){ _arg2.displayObject3D = vectorShape; _arg2.material = renderer; _arg2.hasHit = true; _arg2.x = vectorShape.x; _arg2.y = vectorShape.y; _arg2.z = vectorShape.z; _arg2.u = 0; _arg2.v = 0; }; return (_arg2); } override public function render(_arg1:RenderSessionData, _arg2:Graphics):void{ renderer.drawShape(vectorShape, _arg2, _arg1); } } }//package org.papervision3d.core.render.command
Section 74
//VectorShapeHitTest (org.papervision3d.core.render.command.VectorShapeHitTest) package org.papervision3d.core.render.command { import org.papervision3d.view.*; import flash.display.*; import flash.events.*; public class VectorShapeHitTest extends Sprite { private var viewport:Viewport3D; private static var _instance:VectorShapeHitTest; private function onStageResized(_arg1:Event):void{ _instance.x = viewport.containerSprite.x; _instance.y = viewport.containerSprite.y; } override public function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Boolean=false):Boolean{ if (viewport){ return (super.hitTestPoint((_arg1 + viewport.containerSprite.x), (_arg2 + viewport.containerSprite.y), _arg3)); }; return (super.hitTestPoint(_arg1, _arg2, false)); } public function assignViewport(_arg1:Viewport3D):void{ var viewport = _arg1; instance.viewport = viewport; instance.x = viewport.containerSprite.x; instance.y = viewport.containerSprite.y; viewport.addChild(_instance); try { viewport.stage.addEventListener(Event.RESIZE, onStageResized); } catch(e:Error) { }; } public static function get instance():VectorShapeHitTest{ if (_instance == null){ _instance = new (VectorShapeHitTest); }; _instance.alpha = 0; _instance.mouseEnabled = false; return (_instance); } } }//package org.papervision3d.core.render.command
Section 75
//QuadTree (org.papervision3d.core.render.data.QuadTree) package org.papervision3d.core.render.data { import org.papervision3d.core.render.command.*; import flash.display.*; import org.papervision3d.objects.*; import org.papervision3d.core.clipping.draw.*; public final class QuadTree { private var _root:QuadTreeNode; private var _rect:RectangleClipping; private var _result:Array; private var _maxlevel:uint;// = 4 private var _maxX:Number; private var _maxY:Number; private var _child:RenderableListItem; private var _children:Array; private var _minX:Number; private var _minY:Number; private var i:int; private var _clip:Clipping; private var _center:Array; private var _except:DisplayObject3D; public function get maxLevel():uint{ return (_maxlevel); } public function remove(_arg1:RenderableListItem):void{ _center = _arg1.quadrant.center; _center.splice(_center.indexOf(_arg1), 1); } public function set maxLevel(_arg1:uint):void{ _maxlevel = _arg1; if (_root){ _root.maxlevel = _maxlevel; }; } public function getOverlaps(_arg1:RenderableListItem, _arg2:DisplayObject3D=null):Array{ _result = []; _minX = _arg1.minX; _minY = _arg1.minY; _maxX = _arg1.maxX; _maxY = _arg1.maxY; _except = _arg2; getList(_arg1.quadrant); getParent(_arg1.quadrant); return (_result); } public function get clip():Clipping{ return (_clip); } public function render(_arg1:RenderSessionData, _arg2:Graphics):void{ _root.render(-(Infinity), _arg1, _arg2); } public function list():Array{ _result = []; _minX = -1000000; _minY = -1000000; _maxX = 1000000; _maxY = 1000000; _except = null; getList(_root); return (_result); } public function getRoot():QuadTreeNode{ return (_root); } private function getList(_arg1:QuadTreeNode):void{ if (!_arg1){ return; }; if (((_arg1.onlysourceFlag) && ((_except == _arg1.onlysource)))){ return; }; if (_minX < _arg1.xdiv){ if (((_arg1.lefttopFlag) && ((_minY < _arg1.ydiv)))){ getList(_arg1.lefttop); }; if (((_arg1.leftbottomFlag) && ((_maxY > _arg1.ydiv)))){ getList(_arg1.leftbottom); }; }; if (_maxX > _arg1.xdiv){ if (((_arg1.righttopFlag) && ((_minY < _arg1.ydiv)))){ getList(_arg1.righttop); }; if (((_arg1.rightbottomFlag) && ((_maxY > _arg1.ydiv)))){ getList(_arg1.rightbottom); }; }; _children = _arg1.center; if (_children != null){ i = _children.length; while (i--) { _child = _children[i]; if ((((((((((((_except == null)) || (!((_child.instance == _except))))) && ((_child.maxX > _minX)))) && ((_child.minX < _maxX)))) && ((_child.maxY > _minY)))) && ((_child.minY < _maxY)))){ _result.push(_child); }; }; }; } private function getParent(_arg1:QuadTreeNode=null):void{ if (!_arg1){ return; }; _arg1 = _arg1.parent; if ((((_arg1 == null)) || (((_arg1.onlysourceFlag) && ((_except == _arg1.onlysource)))))){ return; }; _children = _arg1.center; if (_children != null){ i = _children.length; while (i--) { _child = _children[i]; if ((((((((((((_except == null)) || (!((_child.instance == _except))))) && ((_child.maxX > _minX)))) && ((_child.minX < _maxX)))) && ((_child.maxY > _minY)))) && ((_child.minY < _maxY)))){ _result.push(_child); }; }; }; getParent(_arg1); } public function add(_arg1:RenderableListItem):void{ if (_clip.check(_arg1)){ _root.push(_arg1); }; } public function set clip(_arg1:Clipping):void{ _clip = _arg1; _rect = _clip.asRectangleClipping(); if (!_root){ _root = new QuadTreeNode(((_rect.minX + _rect.maxX) / 2), ((_rect.minY + _rect.maxY) / 2), (_rect.maxX - _rect.minX), (_rect.maxY - _rect.minY), 0, null, _maxlevel); } else { _root.reset(((_rect.minX + _rect.maxX) / 2), ((_rect.minY + _rect.maxY) / 2), (_rect.maxX - _rect.minX), (_rect.maxY - _rect.minY), _maxlevel); }; } } }//package org.papervision3d.core.render.data
Section 76
//QuadTreeNode (org.papervision3d.core.render.data.QuadTreeNode) package org.papervision3d.core.render.data { import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; public final class QuadTreeNode { public var parent:QuadTreeNode; public var create:Function; private var level:int; public var righttopFlag:Boolean; public var hasContent:Boolean;// = false public var rightbottom:QuadTreeNode; public var righttop:QuadTreeNode; public var rightbottomFlag:Boolean; public var onlysource:DisplayObject3D; public var xdiv:Number; private var halfheight:Number; public var center:Array; public var maxlevel:int;// = 4 private var render_center_length:int;// = -1 public var onlysourceFlag:Boolean;// = true private var render_center_index:int;// = -1 private var halfwidth:Number; public var lefttop:QuadTreeNode; public var ydiv:Number; public var leftbottom:QuadTreeNode; public var lefttopFlag:Boolean; public var leftbottomFlag:Boolean; public function QuadTreeNode(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:QuadTreeNode=null, _arg7:uint=4){ this.level = _arg5; this.xdiv = _arg1; this.ydiv = _arg2; halfwidth = (_arg3 / 2); halfheight = (_arg4 / 2); this.parent = _arg6; this.maxlevel = _arg7; } public function reset(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:uint):void{ this.xdiv = _arg1; this.ydiv = _arg2; halfwidth = (_arg3 / 2); halfheight = (_arg4 / 2); lefttopFlag = false; leftbottomFlag = false; righttopFlag = false; rightbottomFlag = false; onlysourceFlag = true; onlysource = null; render_center_length = -1; render_center_index = -1; hasContent = false; maxlevel = _arg5; } public function push(_arg1:RenderableListItem):void{ hasContent = true; if (onlysourceFlag){ if (((!((onlysource == null))) && (!((onlysource == _arg1.instance))))){ onlysourceFlag = false; }; onlysource = _arg1.instance; }; if (level < maxlevel){ if (_arg1.maxX <= xdiv){ if (_arg1.maxY <= ydiv){ if (lefttop == null){ lefttopFlag = true; lefttop = new QuadTreeNode((xdiv - (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel); } else { if (!lefttopFlag){ lefttopFlag = true; lefttop.reset((xdiv - (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, maxlevel); }; }; lefttop.push(_arg1); return; } else { if (_arg1.minY >= ydiv){ if (leftbottom == null){ leftbottomFlag = true; leftbottom = new QuadTreeNode((xdiv - (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel); } else { if (!leftbottomFlag){ leftbottomFlag = true; leftbottom.reset((xdiv - (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, maxlevel); }; }; leftbottom.push(_arg1); return; }; }; } else { if (_arg1.minX >= xdiv){ if (_arg1.maxY <= ydiv){ if (righttop == null){ righttopFlag = true; righttop = new QuadTreeNode((xdiv + (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel); } else { if (!righttopFlag){ righttopFlag = true; righttop.reset((xdiv + (halfwidth / 2)), (ydiv - (halfheight / 2)), halfwidth, halfheight, maxlevel); }; }; righttop.push(_arg1); return; } else { if (_arg1.minY >= ydiv){ if (rightbottom == null){ rightbottomFlag = true; rightbottom = new QuadTreeNode((xdiv + (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, (level + 1), this, maxlevel); } else { if (!rightbottomFlag){ rightbottomFlag = true; rightbottom.reset((xdiv + (halfwidth / 2)), (ydiv + (halfheight / 2)), halfwidth, halfheight, maxlevel); }; }; rightbottom.push(_arg1); return; }; }; }; }; }; if (center == null){ center = new Array(); }; center.push(_arg1); _arg1.quadrant = this; } public function render(_arg1:Number, _arg2:RenderSessionData, _arg3:Graphics):void{ var _local4:RenderableListItem; if (render_center_length == -1){ if (center != null){ render_center_length = center.length; if (render_center_length > 1){ center.sortOn("screenZ", (Array.DESCENDING | Array.NUMERIC)); }; } else { render_center_length = 0; }; render_center_index = 0; }; while (render_center_index < render_center_length) { _local4 = center[render_center_index]; if (_local4.screenZ < _arg1){ break; }; render_other(_local4.screenZ, _arg2, _arg3); _local4.render(_arg2, _arg3); _arg2.viewPort.lastRenderList.push(_local4); render_center_index++; }; if (render_center_index == render_center_length){ center = null; }; render_other(_arg1, _arg2, _arg3); } public function getRect():Rectangle{ return (new Rectangle(xdiv, ydiv, (halfwidth * 2), (halfheight * 2))); } private function render_other(_arg1:Number, _arg2:RenderSessionData, _arg3:Graphics):void{ if (lefttopFlag){ lefttop.render(_arg1, _arg2, _arg3); }; if (leftbottomFlag){ leftbottom.render(_arg1, _arg2, _arg3); }; if (righttopFlag){ righttop.render(_arg1, _arg2, _arg3); }; if (rightbottomFlag){ rightbottom.render(_arg1, _arg2, _arg3); }; } } }//package org.papervision3d.core.render.data
Section 77
//RenderHitData (org.papervision3d.core.render.data.RenderHitData) package org.papervision3d.core.render.data { import org.papervision3d.core.proto.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; public class RenderHitData { public var y:Number; public var z:Number; public var endTime:int;// = 0 public var startTime:int;// = 0 public var displayObject3D:DisplayObject3D; public var hasHit:Boolean;// = false public var material:MaterialObject3D; public var renderable:IRenderable; public var u:Number; public var v:Number; public var x:Number; public function RenderHitData():void{ } public function clear():void{ startTime = 0; endTime = 0; hasHit = false; displayObject3D = null; material = null; renderable = null; u = 0; v = 0; x = 0; y = 0; z = 0; } public function clone():RenderHitData{ var _local1:RenderHitData = new RenderHitData(); _local1.startTime = startTime; _local1.endTime = endTime; _local1.hasHit = hasHit; _local1.displayObject3D = displayObject3D; _local1.material = material; _local1.renderable = renderable; _local1.u = u; _local1.v = v; _local1.x = x; _local1.y = y; _local1.z = z; return (_local1); } public function toString():String{ return (((displayObject3D + " ") + renderable)); } } }//package org.papervision3d.core.render.data
Section 78
//RenderSessionData (org.papervision3d.core.render.data.RenderSessionData) package org.papervision3d.core.render.data { import org.papervision3d.core.proto.*; import org.papervision3d.view.*; import flash.display.*; import org.papervision3d.core.culling.*; import org.papervision3d.core.render.*; import org.papervision3d.core.clipping.*; public class RenderSessionData { public var container:Sprite; public var renderer:IRenderEngine; public var particleCuller:IParticleCuller; public var viewPort:Viewport3D; public var triangleCuller:ITriangleCuller; public var clipping:DefaultClipping; public var scene:SceneObject3D; public var renderStatistics:RenderStatistics; public var renderObjects:Array; public var camera:CameraObject3D; public var renderLayers:Array; public var quadrantTree:QuadTree; public var sorted:Boolean; public function RenderSessionData():void{ this.renderStatistics = new RenderStatistics(); } public function destroy():void{ triangleCuller = null; particleCuller = null; viewPort = null; container = null; scene = null; camera = null; renderer = null; renderStatistics = null; renderObjects = null; renderLayers = null; clipping = null; quadrantTree = null; } public function clone():RenderSessionData{ var _local1:RenderSessionData = new RenderSessionData(); _local1.triangleCuller = triangleCuller; _local1.particleCuller = particleCuller; _local1.viewPort = viewPort; _local1.container = container; _local1.scene = scene; _local1.camera = camera; _local1.renderer = renderer; _local1.renderStatistics = renderStatistics.clone(); _local1.clipping = clipping; _local1.quadrantTree = quadrantTree; return (_local1); } } }//package org.papervision3d.core.render.data
Section 79
//RenderStatistics (org.papervision3d.core.render.data.RenderStatistics) package org.papervision3d.core.render.data { public class RenderStatistics { public var renderTime:int;// = 0 public var culledObjects:int;// = 0 public var shadedTriangles:int;// = 0 public var culledParticles:int;// = 0 public var culledTriangles:int;// = 0 public var triangles:int;// = 0 public var particles:int;// = 0 public var rendered:int;// = 0 public var projectionTime:int;// = 0 public var filteredObjects:int;// = 0 public var lines:int;// = 0 public function clear():void{ projectionTime = 0; renderTime = 0; rendered = 0; particles = 0; triangles = 0; culledTriangles = 0; culledParticles = 0; lines = 0; shadedTriangles = 0; filteredObjects = 0; culledObjects = 0; } public function clone():RenderStatistics{ var _local1:RenderStatistics = new RenderStatistics(); _local1.projectionTime = projectionTime; _local1.renderTime = renderTime; _local1.rendered = rendered; _local1.particles = particles; _local1.triangles = triangles; _local1.culledTriangles = culledTriangles; _local1.lines = lines; _local1.shadedTriangles = shadedTriangles; _local1.filteredObjects = filteredObjects; _local1.culledObjects = culledObjects; return (_local1); } public function toString():String{ return (new String((((((((((((((((((("ProjectionTime:" + projectionTime) + " RenderTime:") + renderTime) + " Particles:") + particles) + " CulledParticles :") + culledParticles) + " Triangles:") + triangles) + " ShadedTriangles :") + shadedTriangles) + " CulledTriangles:") + culledTriangles) + " FilteredObjects:") + filteredObjects) + " CulledObjects:") + culledObjects) + ""))); } } }//package org.papervision3d.core.render.data
Section 80
//ILineDrawer (org.papervision3d.core.render.draw.ILineDrawer) package org.papervision3d.core.render.draw { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; public interface ILineDrawer { function drawLine(_arg1:RenderLine, _arg2:Graphics, _arg3:RenderSessionData):void; } }//package org.papervision3d.core.render.draw
Section 81
//IParticleDrawer (org.papervision3d.core.render.draw.IParticleDrawer) package org.papervision3d.core.render.draw { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.core.geom.renderables.*; public interface IParticleDrawer { function drawParticle(_arg1:Particle, _arg2:Graphics, _arg3:RenderSessionData):void; function updateRenderRect(_arg1:Particle):void; } }//package org.papervision3d.core.render.draw
Section 82
//ITriangleDrawer (org.papervision3d.core.render.draw.ITriangleDrawer) package org.papervision3d.core.render.draw { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; public interface ITriangleDrawer { function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void; function drawRT(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData):void; } }//package org.papervision3d.core.render.draw
Section 83
//BasicRenderFilter (org.papervision3d.core.render.filter.BasicRenderFilter) package org.papervision3d.core.render.filter { public class BasicRenderFilter implements IRenderFilter { public function filter(_arg1:Array):int{ return (0); } } }//package org.papervision3d.core.render.filter
Section 84
//IRenderFilter (org.papervision3d.core.render.filter.IRenderFilter) package org.papervision3d.core.render.filter { public interface IRenderFilter { function filter(_arg1:Array):int; } }//package org.papervision3d.core.render.filter
Section 85
//IUpdateAfterMaterial (org.papervision3d.core.render.material.IUpdateAfterMaterial) package org.papervision3d.core.render.material { import org.papervision3d.core.render.data.*; public interface IUpdateAfterMaterial { function updateAfterRender(_arg1:RenderSessionData):void; } }//package org.papervision3d.core.render.material
Section 86
//IUpdateBeforeMaterial (org.papervision3d.core.render.material.IUpdateBeforeMaterial) package org.papervision3d.core.render.material { import org.papervision3d.core.render.data.*; public interface IUpdateBeforeMaterial { function isUpdateable():Boolean; function updateBeforeRender(_arg1:RenderSessionData):void; } }//package org.papervision3d.core.render.material
Section 87
//MaterialManager (org.papervision3d.core.render.material.MaterialManager) package org.papervision3d.core.render.material { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import flash.utils.*; public class MaterialManager { private var materials:Dictionary; private static var instance:MaterialManager; public function MaterialManager():void{ if (instance){ throw (new Error("Only 1 instance of materialmanager allowed")); }; init(); } private function init():void{ materials = new Dictionary(true); } private function _unRegisterMaterial(_arg1:MaterialObject3D):void{ delete materials[_arg1]; } public function updateMaterialsAfterRender(_arg1:RenderSessionData):void{ var _local2:IUpdateAfterMaterial; var _local3:*; for (_local3 in materials) { if ((_local3 is IUpdateAfterMaterial)){ _local2 = (_local3 as IUpdateAfterMaterial); _local2.updateAfterRender(_arg1); }; }; } private function _registerMaterial(_arg1:MaterialObject3D):void{ materials[_arg1] = true; } public function updateMaterialsBeforeRender(_arg1:RenderSessionData):void{ var _local2:IUpdateBeforeMaterial; var _local3:*; for (_local3 in materials) { if ((_local3 is IUpdateBeforeMaterial)){ _local2 = (_local3 as IUpdateBeforeMaterial); if (_local2.isUpdateable()){ _local2.updateBeforeRender(_arg1); }; }; }; } public static function getInstance():MaterialManager{ if (!instance){ instance = new (MaterialManager); }; return (instance); } public static function unRegisterMaterial(_arg1:MaterialObject3D):void{ getInstance()._unRegisterMaterial(_arg1); } public static function registerMaterial(_arg1:MaterialObject3D):void{ getInstance()._registerMaterial(_arg1); } } }//package org.papervision3d.core.render.material
Section 88
//BasicProjectionPipeline (org.papervision3d.core.render.project.BasicProjectionPipeline) package org.papervision3d.core.render.project { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; public class BasicProjectionPipeline extends ProjectionPipeline { public function BasicProjectionPipeline(){ init(); } protected function init():void{ } override public function project(_arg1:RenderSessionData):void{ var _local3:DisplayObject3D; var _local5:Number; _arg1.camera.transformView(); var _local2:Array = _arg1.renderObjects; var _local4:Number = _local2.length; if (_arg1.camera.useProjectionMatrix){ for each (_local3 in _local2) { if (_local3.visible){ if (_arg1.viewPort.viewportObjectFilter){ _local5 = _arg1.viewPort.viewportObjectFilter.testObject(_local3); if (_local5){ projectObject(_local3, _arg1, _local5); } else { _arg1.renderStatistics.filteredObjects++; }; } else { projectObject(_local3, _arg1, 1); }; }; }; } else { for each (_local3 in _local2) { if (_local3.visible){ if (_arg1.viewPort.viewportObjectFilter){ _local5 = _arg1.viewPort.viewportObjectFilter.testObject(_local3); if (_local5){ projectObject(_local3, _arg1, _local5); } else { _arg1.renderStatistics.filteredObjects++; }; } else { projectObject(_local3, _arg1, 1); }; }; }; }; } protected function isObjectInScene(_arg1:DisplayObject3D, _arg2:SceneObject3D):Boolean{ var _local3:DisplayObjectContainer3D; while (_arg1.parent) { _local3 = _arg1.parent; if (!_arg1.visible){ return (false); }; if ((((_local3 is SceneObject3D)) && ((SceneObject3D(_local3) == _arg2)))){ return (true); }; _arg1 = (_local3 as DisplayObject3D); }; return (false); } protected function projectObject(_arg1:DisplayObject3D, _arg2:RenderSessionData, _arg3:Number):void{ _arg1.cullTest = _arg3; if (_arg1.parent){ _arg1.project((_arg1.parent as DisplayObject3D), _arg2); } else { _arg1.project(_arg2.camera, _arg2); }; } } }//package org.papervision3d.core.render.project
Section 89
//ProjectionPipeline (org.papervision3d.core.render.project.ProjectionPipeline) package org.papervision3d.core.render.project { import org.papervision3d.core.render.data.*; public class ProjectionPipeline { public function project(_arg1:RenderSessionData):void{ } } }//package org.papervision3d.core.render.project
Section 90
//IShaderRenderer (org.papervision3d.core.render.shader.IShaderRenderer) package org.papervision3d.core.render.shader { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.materials.shaders.*; public interface IShaderRenderer { function destroy():void; function getLayerForShader(_arg1:Shader):Sprite; function clear():void; function render(_arg1:RenderSessionData):void; } }//package org.papervision3d.core.render.shader
Section 91
//ShaderObjectData (org.papervision3d.core.render.shader.ShaderObjectData) package org.papervision3d.core.render.shader { import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.materials.*; import org.papervision3d.materials.shaders.*; import flash.utils.*; public class ShaderObjectData { public var shaderRenderer:ShaderRenderer; public var triangleUVS:Dictionary; public var renderTriangleUVS:Dictionary; public var lightMatrices:Dictionary; public var shadedMaterial:ShadedMaterial; public var uvMatrices:Dictionary; private var origin:Point; public var material:BitmapMaterial; public var triangleRects:Dictionary; protected var triangleBitmaps:Dictionary; public var object:DisplayObject3D; public function ShaderObjectData(_arg1:DisplayObject3D, _arg2:BitmapMaterial, _arg3:ShadedMaterial):void{ origin = new Point(0, 0); super(); shaderRenderer = new ShaderRenderer(); lightMatrices = new Dictionary(); uvMatrices = new Dictionary(); this.object = _arg1; this.material = _arg2; this.shadedMaterial = _arg3; triangleUVS = new Dictionary(); renderTriangleUVS = new Dictionary(); triangleBitmaps = new Dictionary(); triangleRects = new Dictionary(); } public function getPerTriUVForDraw(_arg1:Triangle3D):Matrix{ var _local2:Matrix; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Rectangle; if (!triangleUVS[_arg1]){ _local2 = (triangleUVS[_arg1] = new Matrix()); _local3 = material.bitmap.width; _local4 = material.bitmap.height; _local5 = (_arg1.uv[0].u * _local3); _local6 = ((1 - _arg1.uv[0].v) * _local4); _local7 = (_arg1.uv[1].u * _local3); _local8 = ((1 - _arg1.uv[1].v) * _local4); _local9 = (_arg1.uv[2].u * _local3); _local10 = ((1 - _arg1.uv[2].v) * _local4); _local11 = getRectFor(_arg1); _local2.tx = (_local5 - _local11.x); _local2.ty = (_local6 - _local11.y); _local2.a = (_local7 - _local5); _local2.b = (_local8 - _local6); _local2.c = (_local9 - _local5); _local2.d = (_local10 - _local6); _local2.invert(); }; return (triangleUVS[_arg1]); } public function getRectFor(_arg1:Triangle3D):Rectangle{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Number; if (!triangleRects[_arg1]){ _local2 = material.bitmap.width; _local3 = material.bitmap.height; _local4 = (_arg1.uv[0].u * _local2); _local5 = ((1 - _arg1.uv[0].v) * _local3); _local6 = (_arg1.uv[1].u * _local2); _local7 = ((1 - _arg1.uv[1].v) * _local3); _local8 = (_arg1.uv[2].u * _local2); _local9 = ((1 - _arg1.uv[2].v) * _local3); _local10 = Math.min(Math.min(_local4, _local6), _local8); _local11 = Math.min(Math.min(_local5, _local7), _local9); _local12 = Math.max(Math.max(_local4, _local6), _local8); _local13 = Math.max(Math.max(_local5, _local7), _local9); _local14 = (_local12 - _local10); _local15 = (_local13 - _local11); if (_local14 <= 0){ _local14 = 1; }; if (_local15 <= 0){ _local15 = 1; }; return ((triangleRects[_arg1] = new Rectangle(_local10, _local11, _local14, _local15))); }; return (triangleRects[_arg1]); } private function perturbUVMatrix(_arg1:Matrix, _arg2:Triangle3D, _arg3:Number=2):void{ var _local4:Number = material.bitmap.width; var _local5:Number = material.bitmap.height; var _local6:Number = _arg2.uv[0].u; var _local7:Number = (1 - _arg2.uv[0].v); var _local8:Number = _arg2.uv[1].u; var _local9:Number = (1 - _arg2.uv[1].v); var _local10:Number = _arg2.uv[2].u; var _local11:Number = (1 - _arg2.uv[2].v); var _local12:Number = (_local6 * _local4); var _local13:Number = (_local7 * _local5); var _local14:Number = (_local8 * _local4); var _local15:Number = (_local9 * _local5); var _local16:Number = (_local10 * _local4); var _local17:Number = (_local11 * _local5); var _local18:Number = (((_local10 + _local8) + _local6) / 3); var _local19:Number = (((_local11 + _local9) + _local7) / 3); var _local20:Number = (_local6 - _local18); var _local21:Number = (_local7 - _local19); var _local22:Number = (_local8 - _local18); var _local23:Number = (_local9 - _local19); var _local24:Number = (_local10 - _local18); var _local25:Number = (_local11 - _local19); var _local26:Number = ((_local20)<0) ? -(_local20) : _local20; var _local27:Number = ((_local21)<0) ? -(_local21) : _local21; var _local28:Number = ((_local22)<0) ? -(_local22) : _local22; var _local29:Number = ((_local23)<0) ? -(_local23) : _local23; var _local30:Number = ((_local24)<0) ? -(_local24) : _local24; var _local31:Number = ((_local25)<0) ? -(_local25) : _local25; var _local32:Number = ((_local26)>_local27) ? (1 / _local26) : (1 / _local27); var _local33:Number = ((_local28)>_local29) ? (1 / _local28) : (1 / _local29); var _local34:Number = ((_local30)>_local31) ? (1 / _local30) : (1 / _local31); _local12 = (_local12 - ((-(_local20) * _local32) * _arg3)); _local13 = (_local13 - ((-(_local21) * _local32) * _arg3)); _local14 = (_local14 - ((-(_local22) * _local33) * _arg3)); _local15 = (_local15 - ((-(_local23) * _local33) * _arg3)); _local16 = (_local16 - ((-(_local24) * _local34) * _arg3)); _local17 = (_local17 - ((-(_local25) * _local34) * _arg3)); _arg1.tx = _local12; _arg1.ty = _local13; _arg1.a = (_local14 - _local12); _arg1.b = (_local15 - _local13); _arg1.c = (_local16 - _local12); _arg1.d = (_local17 - _local13); } public function getOutputBitmapFor(_arg1:Triangle3D):BitmapData{ var _local2:Rectangle; var _local3:BitmapData; var _local4:Rectangle; if (!triangleBitmaps[_arg1]){ _local2 = getRectFor(_arg1); _local3 = (triangleBitmaps[_arg1] = new BitmapData(Math.ceil(_local2.width), Math.ceil(_local2.height), false, 0)); _local4 = new Rectangle(0, 0, _local3.width, _local3.height); _local3.copyPixels(material.bitmap, _local4, origin); } else { _local2 = getRectFor(_arg1); }; if (((material.bitmap) && (_local2))){ triangleBitmaps[_arg1].copyPixels(material.bitmap, _local2, origin); }; return (triangleBitmaps[_arg1]); } public function updateBeforeRender():void{ } public function getPerTriUVForShader(_arg1:Triangle3D):Matrix{ var _local2:Matrix; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Rectangle; if (!renderTriangleUVS[_arg1]){ _local2 = (renderTriangleUVS[_arg1] = new Matrix()); _local3 = material.bitmap.width; _local4 = material.bitmap.height; _local5 = (_arg1.uv[0].u * _local3); _local6 = ((1 - _arg1.uv[0].v) * _local4); _local7 = (_arg1.uv[1].u * _local3); _local8 = ((1 - _arg1.uv[1].v) * _local4); _local9 = (_arg1.uv[2].u * _local3); _local10 = ((1 - _arg1.uv[2].v) * _local4); _local11 = getRectFor(_arg1); _local2.tx = (_local5 - _local11.x); _local2.ty = (_local6 - _local11.y); _local2.a = (_local7 - _local5); _local2.b = (_local8 - _local6); _local2.c = (_local9 - _local5); _local2.d = (_local10 - _local6); }; return (renderTriangleUVS[_arg1]); } public function getUVMatrixForTriangle(_arg1:Triangle3D, _arg2:Boolean=false):Matrix{ var _local3:Matrix; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; _local3 = uvMatrices[_arg1]; if (!_local3){ _local3 = new Matrix(); if (_arg2){ perturbUVMatrix(_local3, _arg1, 2); } else { if (material.bitmap){ _local4 = material.bitmap.width; _local5 = material.bitmap.height; _local6 = (_arg1.uv[0].u * _local4); _local7 = ((1 - _arg1.uv[0].v) * _local5); _local8 = (_arg1.uv[1].u * _local4); _local9 = ((1 - _arg1.uv[1].v) * _local5); _local10 = (_arg1.uv[2].u * _local4); _local11 = ((1 - _arg1.uv[2].v) * _local5); _local3.tx = _local6; _local3.ty = _local7; _local3.a = (_local8 - _local6); _local3.b = (_local9 - _local7); _local3.c = (_local10 - _local6); _local3.d = (_local11 - _local7); }; }; if (material.bitmap){ uvMatrices[_arg1] = _local3; }; }; return (_local3); } public function destroy():void{ var _local1:Object; for each (_local1 in uvMatrices) { uvMatrices[_local1] = null; }; uvMatrices = null; shaderRenderer.destroy(); shaderRenderer = null; lightMatrices = null; } } }//package org.papervision3d.core.render.shader
Section 92
//ShaderRenderer (org.papervision3d.core.render.shader.ShaderRenderer) package org.papervision3d.core.render.shader { import org.papervision3d.core.render.data.*; import flash.display.*; import flash.geom.*; import org.papervision3d.materials.shaders.*; import flash.events.*; import flash.utils.*; public class ShaderRenderer extends EventDispatcher implements IShaderRenderer { public var container:Sprite; public var shadeLayers:Dictionary; public var outputBitmap:BitmapData; public var bitmapContainer:Bitmap; public var resizedInput:Boolean;// = false public var bitmapLayer:Sprite; private var _inputBitmapData:BitmapData; public function ShaderRenderer(){ container = new Sprite(); bitmapLayer = new Sprite(); bitmapContainer = new Bitmap(); bitmapLayer.addChild(bitmapContainer); bitmapLayer.blendMode = BlendMode.NORMAL; shadeLayers = new Dictionary(); container.addChild(bitmapLayer); } public function clear():void{ var _local1:Sprite; for each (_local1 in shadeLayers) { if (((((inputBitmap) && ((inputBitmap.width > 0)))) && ((inputBitmap.height > 0)))){ _local1.graphics.clear(); _local1.graphics.beginFill(0, 1); _local1.graphics.drawRect(0, 0, inputBitmap.width, inputBitmap.height); _local1.graphics.endFill(); }; }; } public function render(_arg1:RenderSessionData):void{ if (outputBitmap){ outputBitmap.fillRect(outputBitmap.rect, 0); bitmapContainer.bitmapData = inputBitmap; outputBitmap.draw(container, null, null, null, outputBitmap.rect, false); if (outputBitmap.transparent){ outputBitmap.copyChannel(inputBitmap, outputBitmap.rect, new Point(0, 0), BitmapDataChannel.ALPHA, BitmapDataChannel.ALPHA); }; }; } public function get inputBitmap():BitmapData{ return (_inputBitmapData); } public function set inputBitmap(_arg1:BitmapData):void{ if (_arg1 != null){ if (_inputBitmapData != _arg1){ _inputBitmapData = _arg1; if (outputBitmap){ if (((!((_inputBitmapData.width == outputBitmap.width))) || (!((_inputBitmapData.height == outputBitmap.height))))){ resizedInput = true; outputBitmap.dispose(); outputBitmap = _inputBitmapData.clone(); }; } else { resizedInput = true; outputBitmap = _inputBitmapData.clone(); }; }; }; } public function getLayerForShader(_arg1:Shader):Sprite{ var _local2:Sprite = new Sprite(); shadeLayers[_arg1] = _local2; var _local3:Sprite = new Sprite(); _local2.addChild(_local3); if (inputBitmap != null){ _local3.graphics.beginFill(0, 0); _local3.graphics.drawRect(0, 0, inputBitmap.width, inputBitmap.height); _local3.graphics.endFill(); }; container.addChild(_local2); _local2.blendMode = _arg1.layerBlendMode; return (_local2); } public function destroy():void{ bitmapLayer = null; outputBitmap.dispose(); } } }//package org.papervision3d.core.render.shader
Section 93
//BasicRenderSorter (org.papervision3d.core.render.sort.BasicRenderSorter) package org.papervision3d.core.render.sort { public class BasicRenderSorter implements IRenderSorter { public function sort(_arg1:Array):void{ _arg1.sortOn("screenZ", Array.NUMERIC); } } }//package org.papervision3d.core.render.sort
Section 94
//IRenderSorter (org.papervision3d.core.render.sort.IRenderSorter) package org.papervision3d.core.render.sort { public interface IRenderSorter { function sort(_arg1:Array):void; } }//package org.papervision3d.core.render.sort
Section 95
//AbstractRenderEngine (org.papervision3d.core.render.AbstractRenderEngine) package org.papervision3d.core.render { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.view.*; import org.papervision3d.core.render.command.*; import flash.events.*; public class AbstractRenderEngine extends EventDispatcher implements IRenderEngine { public function AbstractRenderEngine(_arg1:IEventDispatcher=null){ super(_arg1); } public function addToRenderList(_arg1:RenderableListItem):int{ return (0); } public function removeFromRenderList(_arg1:IRenderListItem):int{ return (0); } public function renderScene(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D):RenderStatistics{ return (null); } } }//package org.papervision3d.core.render
Section 96
//IRenderEngine (org.papervision3d.core.render.IRenderEngine) package org.papervision3d.core.render { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.view.*; import org.papervision3d.core.render.command.*; public interface IRenderEngine { function addToRenderList(_arg1:RenderableListItem):int; function removeFromRenderList(_arg1:IRenderListItem):int; function renderScene(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D):RenderStatistics; } }//package org.papervision3d.core.render
Section 97
//IVirtualMouseEvent (org.papervision3d.core.utils.virtualmouse.IVirtualMouseEvent) package org.papervision3d.core.utils.virtualmouse { public interface IVirtualMouseEvent { } }//package org.papervision3d.core.utils.virtualmouse
Section 98
//VirtualMouse (org.papervision3d.core.utils.virtualmouse.VirtualMouse) package org.papervision3d.core.utils.virtualmouse { import flash.display.*; import flash.geom.*; import flash.events.*; import org.papervision3d.core.log.*; import flash.utils.*; public class VirtualMouse extends EventDispatcher { private var _container:Sprite; private var _stage:Stage; private var lastDownTarget:DisplayObject; private var target:InteractiveObject; private var updateMouseDown:Boolean;// = false private var eventEvent:Class; private var _lastEvent:Event; private var mouseEventEvent:Class; private var location:Point; private var delta:int;// = 0 private var disabledEvents:Object; private var ignoredInstances:Dictionary; private var isLocked:Boolean;// = false private var lastWithinStage:Boolean;// = true private var lastLocation:Point; private var isDoubleClickEvent:Boolean;// = false private var lastMouseDown:Boolean;// = false private var ctrlKey:Boolean;// = false private var altKey:Boolean;// = false private var _useNativeEvents:Boolean;// = false private var shiftKey:Boolean;// = false public static const UPDATE:String = "update"; private static var _mouseIsDown:Boolean = false; public function VirtualMouse(_arg1:Stage=null, _arg2:Sprite=null, _arg3:Number=0, _arg4:Number=0){ disabledEvents = new Object(); ignoredInstances = new Dictionary(true); eventEvent = VirtualMouseEvent; mouseEventEvent = VirtualMouseMouseEvent; super(); this.stage = _arg1; this.container = _arg2; location = new Point(_arg3, _arg4); lastLocation = location.clone(); addEventListener(UPDATE, handleUpdate); update(); } public function get mouseIsDown():Boolean{ return (_mouseIsDown); } public function get container():Sprite{ return (_container); } public function exitContainer():void{ if (!container){ return; }; var _local1:Point = target.globalToLocal(location); if (!disabledEvents[MouseEvent.MOUSE_OUT]){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); container.dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); }; if (!disabledEvents[MouseEvent.ROLL_OUT]){ _lastEvent = new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); container.dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); }; if (target != container){ if (!disabledEvents[MouseEvent.MOUSE_OUT]){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); target.dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); dispatchEvent(new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); }; if (!disabledEvents[MouseEvent.ROLL_OUT]){ _lastEvent = new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); target.dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); dispatchEvent(new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local1.x, _local1.y, container, ctrlKey, altKey, shiftKey, _mouseIsDown, delta)); }; }; target = _stage; } public function release():void{ updateMouseDown = true; _mouseIsDown = false; if (!isLocked){ update(); }; } private function keyHandler(_arg1:KeyboardEvent):void{ altKey = _arg1.altKey; ctrlKey = _arg1.ctrlKey; shiftKey = _arg1.shiftKey; } public function click():void{ press(); release(); } public function disableEvent(_arg1:String):void{ disabledEvents[_arg1] = true; } public function set container(_arg1:Sprite):void{ _container = _arg1; } public function get lastEvent():Event{ return (_lastEvent); } private function handleUpdate(_arg1:Event):void{ var _local4:InteractiveObject; var _local5:DisplayObject; var _local9:Boolean; if (!container){ return; }; if (container.scrollRect){ PaperLogger.warning("The container that virtualMouse is trying to test against has a scrollRect defined, and may cause an issue with finding objects under a defined point. Use MovieMaterial.rect to set a rectangle area instead"); }; var _local2:Point = new Point(); _local2.x = container.x; _local2.y = container.y; container.x = (container.y = 0); var _local3:Array = container.getObjectsUnderPoint(location); container.x = _local2.x; container.y = _local2.y; var _local6:int = _local3.length; while (_local6--) { _local5 = _local3[_local6]; while (_local5) { if (ignoredInstances[_local5]){ _local4 = null; break; }; if (((_local4) && ((_local5 is SimpleButton)))){ _local4 = null; } else { if (((_local4) && (!(DisplayObjectContainer(_local5).mouseChildren)))){ _local4 = null; }; }; if (((((!(_local4)) && ((_local5 is InteractiveObject)))) && (InteractiveObject(_local5).mouseEnabled))){ _local4 = InteractiveObject(_local5); }; _local5 = _local5.parent; }; if (_local4){ break; }; }; if (!_local4){ _local4 = container; }; var _local7:Point = target.globalToLocal(location); var _local8:Point = _local4.globalToLocal(location); if (((!((lastLocation.x == location.x))) || (!((lastLocation.y == location.y))))){ _local9 = false; if (stage){ _local9 = (((((((location.x >= 0)) && ((location.y >= 0)))) && ((location.x <= stage.stageWidth)))) && ((location.y <= stage.stageHeight))); }; if (((((!(_local9)) && (lastWithinStage))) && (!(disabledEvents[Event.MOUSE_LEAVE])))){ _lastEvent = new eventEvent(Event.MOUSE_LEAVE, false, false); stage.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; if (((_local9) && (!(disabledEvents[MouseEvent.MOUSE_MOVE])))){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_MOVE, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; lastWithinStage = _local9; }; if (_local4 != target){ if (!disabledEvents[MouseEvent.MOUSE_OUT]){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OUT, true, false, _local7.x, _local7.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); target.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; if (!disabledEvents[MouseEvent.ROLL_OUT]){ _lastEvent = new mouseEventEvent(MouseEvent.ROLL_OUT, false, false, _local7.x, _local7.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); target.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; if (!disabledEvents[MouseEvent.MOUSE_OVER]){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_OVER, true, false, _local8.x, _local8.y, target, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; if (!disabledEvents[MouseEvent.ROLL_OVER]){ _lastEvent = new mouseEventEvent(MouseEvent.ROLL_OVER, false, false, _local8.x, _local8.y, target, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; }; if (updateMouseDown){ if (_mouseIsDown){ if (!disabledEvents[MouseEvent.MOUSE_DOWN]){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_DOWN, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; lastDownTarget = _local4; updateMouseDown = false; } else { if (!disabledEvents[MouseEvent.MOUSE_UP]){ _lastEvent = new mouseEventEvent(MouseEvent.MOUSE_UP, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; if (((!(disabledEvents[MouseEvent.CLICK])) && ((_local4 == lastDownTarget)))){ _lastEvent = new mouseEventEvent(MouseEvent.CLICK, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; lastDownTarget = null; updateMouseDown = false; }; }; if (((((isDoubleClickEvent) && (!(disabledEvents[MouseEvent.DOUBLE_CLICK])))) && (_local4.doubleClickEnabled))){ _lastEvent = new mouseEventEvent(MouseEvent.DOUBLE_CLICK, true, false, _local8.x, _local8.y, _local4, ctrlKey, altKey, shiftKey, _mouseIsDown, delta); _local4.dispatchEvent(_lastEvent); dispatchEvent(_lastEvent); }; lastLocation = location.clone(); lastMouseDown = _mouseIsDown; target = _local4; } public function getLocation():Point{ return (location.clone()); } public function lock():void{ isLocked = true; } public function get useNativeEvents():Boolean{ return (_useNativeEvents); } public function setLocation(_arg1, _arg2=null):void{ var _local3:Point; if ((_arg1 is Point)){ _local3 = (_arg1 as Point); location.x = _local3.x; location.y = _local3.y; } else { location.x = Number(_arg1); location.y = Number(_arg2); }; if (!isLocked){ update(); }; } public function unignore(_arg1:DisplayObject):void{ if ((_arg1 in ignoredInstances)){ delete ignoredInstances[_arg1]; }; } public function doubleClick():void{ if (isLocked){ release(); } else { click(); press(); isDoubleClickEvent = true; release(); isDoubleClickEvent = false; }; } public function update():void{ dispatchEvent(new Event(UPDATE, false, false)); } public function unlock():void{ isLocked = false; update(); } public function ignore(_arg1:DisplayObject):void{ ignoredInstances[_arg1] = true; } public function enableEvent(_arg1:String):void{ if ((_arg1 in disabledEvents)){ delete disabledEvents[_arg1]; }; } public function press():void{ updateMouseDown = true; _mouseIsDown = true; if (!isLocked){ update(); }; } public function set useNativeEvents(_arg1:Boolean):void{ if (_arg1 == _useNativeEvents){ return; }; _useNativeEvents = _arg1; if (_useNativeEvents){ eventEvent = VirtualMouseEvent; mouseEventEvent = VirtualMouseMouseEvent; } else { eventEvent = Event; mouseEventEvent = MouseEvent; }; } public function set x(_arg1:Number):void{ location.x = _arg1; if (!isLocked){ update(); }; } public function set y(_arg1:Number):void{ location.y = _arg1; if (!isLocked){ update(); }; } public function get y():Number{ return (location.y); } public function set stage(_arg1:Stage):void{ var _local2:Boolean; if (_stage){ _local2 = true; _stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyHandler); _stage.removeEventListener(KeyboardEvent.KEY_UP, keyHandler); } else { _local2 = false; }; _stage = _arg1; if (_stage){ _stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler); _stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler); target = _stage; if (!_local2){ update(); }; }; } public function get stage():Stage{ return (_stage); } public function get x():Number{ return (location.x); } } }//package org.papervision3d.core.utils.virtualmouse
Section 99
//VirtualMouseEvent (org.papervision3d.core.utils.virtualmouse.VirtualMouseEvent) package org.papervision3d.core.utils.virtualmouse { import flash.events.*; public class VirtualMouseEvent extends Event implements IVirtualMouseEvent { public function VirtualMouseEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false){ super(_arg1, _arg2, _arg3); } } }//package org.papervision3d.core.utils.virtualmouse
Section 100
//VirtualMouseMouseEvent (org.papervision3d.core.utils.virtualmouse.VirtualMouseMouseEvent) package org.papervision3d.core.utils.virtualmouse { import flash.display.*; import flash.events.*; public class VirtualMouseMouseEvent extends MouseEvent implements IVirtualMouseEvent { public function VirtualMouseMouseEvent(_arg1:String, _arg2:Boolean=false, _arg3:Boolean=false, _arg4:Number=NaN, _arg5:Number=NaN, _arg6:InteractiveObject=null, _arg7:Boolean=false, _arg8:Boolean=false, _arg9:Boolean=false, _arg10:Boolean=false, _arg11:int=0){ super(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11); } } }//package org.papervision3d.core.utils.virtualmouse
Section 101
//InteractiveSceneManager (org.papervision3d.core.utils.InteractiveSceneManager) package org.papervision3d.core.utils { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.view.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.materials.*; import flash.events.*; import org.papervision3d.core.utils.virtualmouse.*; import org.papervision3d.events.*; public class InteractiveSceneManager extends EventDispatcher { public var currentMaterial:MaterialObject3D; public var container:Sprite; public var currentMousePos:Point; public var debug:Boolean;// = false public var mouse3D:Mouse3D; public var enableOverOut:Boolean;// = true public var currentDisplayObject3D:DisplayObject3D; public var _viewportRendered:Boolean;// = false public var virtualMouse:VirtualMouse; public var lastMousePos:Point; public var viewport:Viewport3D; public var renderHitData:RenderHitData; public var currentMouseDO3D:DisplayObject3D;// = null public static var MOUSE_IS_DOWN:Boolean = false; public function InteractiveSceneManager(_arg1:Viewport3D){ virtualMouse = new VirtualMouse(); mouse3D = new Mouse3D(); currentMousePos = new Point(); lastMousePos = new Point(); super(); this.viewport = _arg1; this.container = _arg1.containerSprite; init(); } protected function handleMouseClick(_arg1:MouseEvent):void{ if ((_arg1 is IVirtualMouseEvent)){ return; }; if (((renderHitData) && (renderHitData.hasHit))){ dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_CLICK, currentDisplayObject3D); }; } protected function handleEnterFrame(_arg1:Event):void{ var _local3:MovieMaterial; var _local2:Boolean = hasMouseMoved(); if (((_local2) || (_viewportRendered))){ updateRenderHitData(); _viewportRendered = false; if ((_arg1 is IVirtualMouseEvent)){ return; }; if (((virtualMouse) && (renderHitData))){ _local3 = (currentMaterial as MovieMaterial); if (_local3){ virtualMouse.container = (_local3.movie as Sprite); }; if (virtualMouse.container){ virtualMouse.setLocation(renderHitData.u, renderHitData.v); }; if (((((Mouse3D.enabled) && (renderHitData))) && (renderHitData.hasHit))){ mouse3D.updatePosition(renderHitData); }; dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_MOVE, currentDisplayObject3D); } else { if (((renderHitData) && (renderHitData.hasHit))){ dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_MOVE, currentDisplayObject3D); }; }; }; lastMousePos.x = currentMousePos.x; lastMousePos.y = currentMousePos.y; } public function updateAfterRender():void{ _viewportRendered = true; } public function initListeners():void{ if (viewport.interactive){ container.addEventListener(MouseEvent.MOUSE_DOWN, handleMousePress, false, 0, true); container.addEventListener(MouseEvent.MOUSE_UP, handleMouseRelease, false, 0, true); container.addEventListener(MouseEvent.CLICK, handleMouseClick, false, 0, true); container.addEventListener(MouseEvent.DOUBLE_CLICK, handleMouseDoubleClick, false, 0, true); container.stage.addEventListener(Event.ENTER_FRAME, handleEnterFrame, false, 0, true); }; } protected function initVirtualMouse():void{ virtualMouse.stage = container.stage; virtualMouse.container = container; } protected function handleMouseOver(_arg1:DisplayObject3D):void{ dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_OVER, _arg1); } protected function resolveRenderHitData():void{ renderHitData = (viewport.hitTestPoint2D(currentMousePos) as RenderHitData); } public function updateRenderHitData():void{ resolveRenderHitData(); currentDisplayObject3D = renderHitData.displayObject3D; currentMaterial = renderHitData.material; manageOverOut(); } protected function hasMouseMoved():Boolean{ currentMousePos.x = container.mouseX; currentMousePos.y = container.mouseY; return (!(currentMousePos.equals(lastMousePos))); } protected function dispatchObjectEvent(_arg1:String, _arg2:DisplayObject3D):void{ var _local3:Number; var _local4:Number; var _local5:InteractiveScene3DEvent; if (((renderHitData) && (renderHitData.hasHit))){ _local3 = (renderHitData.u) ? renderHitData.u : 0; _local4 = (renderHitData.v) ? renderHitData.v : 0; _local5 = new InteractiveScene3DEvent(_arg1, _arg2, container, (renderHitData.renderable as Triangle3D), _local3, _local4, renderHitData); _local5.renderHitData = renderHitData; dispatchEvent(_local5); _arg2.dispatchEvent(_local5); } else { dispatchEvent(new InteractiveScene3DEvent(_arg1, _arg2, container)); if (_arg2){ _arg2.dispatchEvent(new InteractiveScene3DEvent(_arg1, _arg2, container)); }; }; } protected function handleMouseDoubleClick(_arg1:MouseEvent):void{ if ((_arg1 is IVirtualMouseEvent)){ return; }; if (((renderHitData) && (renderHitData.hasHit))){ dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_DOUBLE_CLICK, currentDisplayObject3D); }; } protected function handleMouseRelease(_arg1:MouseEvent):void{ if ((_arg1 is IVirtualMouseEvent)){ return; }; MOUSE_IS_DOWN = false; if (virtualMouse){ virtualMouse.release(); }; if (((((Mouse3D.enabled) && (renderHitData))) && (!((renderHitData.renderable == null))))){ mouse3D.updatePosition(renderHitData); }; if (((renderHitData) && (renderHitData.hasHit))){ dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_RELEASE, currentDisplayObject3D); }; } protected function handleAddedToStage(_arg1:Event):void{ container.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); initVirtualMouse(); initListeners(); } protected function handleMouseOut(_arg1:DisplayObject3D):void{ var _local2:MovieMaterial; if (_arg1){ _local2 = (_arg1.material as MovieMaterial); if (_local2){ virtualMouse.exitContainer(); }; }; dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_OUT, _arg1); } protected function manageOverOut():void{ if (!enableOverOut){ return; }; if (((renderHitData) && (renderHitData.hasHit))){ if (((!(currentMouseDO3D)) && (currentDisplayObject3D))){ handleMouseOver(currentDisplayObject3D); currentMouseDO3D = currentDisplayObject3D; } else { if (((currentMouseDO3D) && (!((currentMouseDO3D == currentDisplayObject3D))))){ handleMouseOut(currentMouseDO3D); handleMouseOver(currentDisplayObject3D); currentMouseDO3D = currentDisplayObject3D; }; }; } else { if (currentMouseDO3D != null){ handleMouseOut(currentMouseDO3D); currentMouseDO3D = null; }; }; } public function destroy():void{ viewport = null; renderHitData = null; currentDisplayObject3D = null; currentMaterial = null; currentMouseDO3D = null; virtualMouse.stage = null; virtualMouse.container = null; container.removeEventListener(MouseEvent.MOUSE_DOWN, handleMousePress); container.removeEventListener(MouseEvent.MOUSE_UP, handleMouseRelease); container.removeEventListener(MouseEvent.CLICK, handleMouseClick); container.removeEventListener(MouseEvent.DOUBLE_CLICK, handleMouseDoubleClick); if (container.stage){ container.stage.removeEventListener(Event.ENTER_FRAME, handleEnterFrame); }; container = null; } public function init():void{ if (container){ if (container.stage){ initVirtualMouse(); initListeners(); } else { container.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage, false, 0, true); }; }; } protected function handleMousePress(_arg1:MouseEvent):void{ if ((_arg1 is IVirtualMouseEvent)){ return; }; MOUSE_IS_DOWN = true; if (virtualMouse){ virtualMouse.press(); }; if (((((Mouse3D.enabled) && (renderHitData))) && (!((renderHitData.renderable == null))))){ mouse3D.updatePosition(renderHitData); }; if (((renderHitData) && (renderHitData.hasHit))){ dispatchObjectEvent(InteractiveScene3DEvent.OBJECT_PRESS, currentDisplayObject3D); }; } } }//package org.papervision3d.core.utils
Section 102
//Mouse3D (org.papervision3d.core.utils.Mouse3D) package org.papervision3d.core.utils { import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; public class Mouse3D extends DisplayObject3D { private var target:Number3D; public static var enabled:Boolean = false; private static var UP:Number3D = new Number3D(0, 1, 0); public function Mouse3D():void{ target = new Number3D(); super(); } public function updatePosition(_arg1:RenderHitData):void{ var _local3:Matrix3D; var _local5:Number3D; var _local6:Number3D; var _local2:Triangle3D = (_arg1.renderable as Triangle3D); target.x = _local2.faceNormal.x; target.y = _local2.faceNormal.y; target.z = _local2.faceNormal.z; var _local4:Number3D = Number3D.sub(target, position); _local4.normalize(); if (_local4.modulo > 0.1){ _local5 = Number3D.cross(_local4, UP); _local5.normalize(); _local6 = Number3D.cross(_local4, _local5); _local6.normalize(); _local3 = this.transform; _local3.n11 = _local5.x; _local3.n21 = _local5.y; _local3.n31 = _local5.z; _local3.n12 = -(_local6.x); _local3.n22 = -(_local6.y); _local3.n32 = -(_local6.z); _local3.n13 = _local4.x; _local3.n23 = _local4.y; _local3.n33 = _local4.z; } else { _local3 = Matrix3D.IDENTITY; }; this.transform = Matrix3D.multiply(_local2.instance.world, _local3); x = _arg1.x; y = _arg1.y; z = _arg1.z; } } }//package org.papervision3d.core.utils
Section 103
//StopWatch (org.papervision3d.core.utils.StopWatch) package org.papervision3d.core.utils { import flash.events.*; import flash.utils.*; public class StopWatch extends EventDispatcher { private var startTime:int; private var elapsedTime:int; private var isRunning:Boolean; private var stopTime:int; public function start():void{ if (!isRunning){ startTime = getTimer(); isRunning = true; }; } public function stop():int{ if (isRunning){ stopTime = getTimer(); elapsedTime = (stopTime - startTime); isRunning = false; return (elapsedTime); }; return (0); } public function reset():void{ isRunning = false; } } }//package org.papervision3d.core.utils
Section 104
//IView (org.papervision3d.core.view.IView) package org.papervision3d.core.view { public interface IView { function stopRendering(_arg1:Boolean=false, _arg2:Boolean=false):void; function startRendering():void; function singleRender():void; } }//package org.papervision3d.core.view
Section 105
//IViewport3D (org.papervision3d.core.view.IViewport3D) package org.papervision3d.core.view { import org.papervision3d.core.render.data.*; public interface IViewport3D { function updateAfterRender(_arg1:RenderSessionData):void; function updateBeforeRender(_arg1:RenderSessionData):void; } }//package org.papervision3d.core.view
Section 106
//InteractiveScene3DEvent (org.papervision3d.events.InteractiveScene3DEvent) package org.papervision3d.events { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import flash.events.*; public class InteractiveScene3DEvent extends Event { public var y:Number;// = 0 public var sprite:Sprite;// = null public var renderHitData:RenderHitData; public var face3d:Triangle3D;// = null public var x:Number;// = 0 public var displayObject3D:DisplayObject3D;// = null public static const OBJECT_ADDED:String = "objectAdded"; public static const OBJECT_PRESS:String = "mousePress"; public static const OBJECT_RELEASE:String = "mouseRelease"; public static const OBJECT_CLICK:String = "mouseClick"; public static const OBJECT_RELEASE_OUTSIDE:String = "mouseReleaseOutside"; public static const OBJECT_OUT:String = "mouseOut"; public static const OBJECT_MOVE:String = "mouseMove"; public static const OBJECT_OVER:String = "mouseOver"; public static const OBJECT_DOUBLE_CLICK:String = "mouseDoubleClick"; public function InteractiveScene3DEvent(_arg1:String, _arg2:DisplayObject3D=null, _arg3:Sprite=null, _arg4:Triangle3D=null, _arg5:Number=0, _arg6:Number=0, _arg7:RenderHitData=null, _arg8:Boolean=false, _arg9:Boolean=false){ super(_arg1, _arg8, _arg9); this.displayObject3D = _arg2; this.sprite = _arg3; this.face3d = _arg4; this.x = _arg5; this.y = _arg6; this.renderHitData = _arg7; } override public function toString():String{ return (((((((("Type : " + type) + ", DO3D : ") + displayObject3D) + " Sprite : ") + sprite) + " Face : ") + face3d)); } } }//package org.papervision3d.events
Section 107
//RendererEvent (org.papervision3d.events.RendererEvent) package org.papervision3d.events { import org.papervision3d.core.render.data.*; import flash.events.*; public class RendererEvent extends Event { public var renderSessionData:RenderSessionData; public static const PROJECTION_DONE:String = "projectionDone"; public static const RENDER_DONE:String = "renderDone"; public function RendererEvent(_arg1:String, _arg2:RenderSessionData){ super(_arg1); this.renderSessionData = _arg2; } public function clear():void{ renderSessionData = null; } override public function clone():Event{ return (new RendererEvent(type, renderSessionData)); } } }//package org.papervision3d.events
Section 108
//PointLight3D (org.papervision3d.lights.PointLight3D) package org.papervision3d.lights { import org.papervision3d.core.proto.*; import org.papervision3d.core.math.*; public class PointLight3D extends LightObject3D { public static var DEFAULT_POS:Number3D = new Number3D(0, 0, -1000); public function PointLight3D(_arg1:Boolean=false, _arg2:Boolean=false){ super(_arg1, _arg2); x = DEFAULT_POS.x; y = DEFAULT_POS.y; z = DEFAULT_POS.z; } } }//package org.papervision3d.lights
Section 109
//ILightShader (org.papervision3d.materials.shaders.ILightShader) package org.papervision3d.materials.shaders { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.shader.*; public interface ILightShader { function updateLightMatrix(_arg1:ShaderObjectData, _arg2:RenderSessionData):void; } }//package org.papervision3d.materials.shaders
Section 110
//IShader (org.papervision3d.materials.shaders.IShader) package org.papervision3d.materials.shaders { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.render.shader.*; public interface IShader { function updateAfterRender(_arg1:RenderSessionData, _arg2:ShaderObjectData):void; function destroy():void; function renderLayer(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData):void; function renderTri(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData, _arg4:BitmapData):void; } }//package org.papervision3d.materials.shaders
Section 111
//ShadedMaterial (org.papervision3d.materials.shaders.ShadedMaterial) package org.papervision3d.materials.shaders { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.render.material.*; import org.papervision3d.materials.*; import org.papervision3d.core.render.shader.*; import org.papervision3d.core.log.*; import flash.utils.*; import org.papervision3d.core.render.draw.*; import org.papervision3d.core.material.*; public class ShadedMaterial extends TriangleMaterial implements ITriangleDrawer, IUpdateBeforeMaterial, IUpdateAfterMaterial { public var shader:Shader; private var _shaderCompositeMode:int; public var material:BitmapMaterial; public var shaderObjectData:Dictionary; private static var bmp:BitmapData; public function ShadedMaterial(_arg1:BitmapMaterial, _arg2:Shader, _arg3:int=0){ this.shader = _arg2; this.material = _arg1; shaderCompositeMode = _arg3; init(); } override public function registerObject(_arg1:DisplayObject3D):void{ super.registerObject(_arg1); var _local2:ShaderObjectData = (shaderObjectData[_arg1] = new ShaderObjectData(_arg1, material, this)); _local2.shaderRenderer.inputBitmap = material.bitmap; shader.setContainerForObject(_arg1, _local2.shaderRenderer.getLayerForShader(shader)); } public function updateAfterRender(_arg1:RenderSessionData):void{ var _local2:ShaderObjectData; for each (_local2 in shaderObjectData) { shader.updateAfterRender(_arg1, _local2); if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){ _local2.shaderRenderer.render(_arg1); }; }; } override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ var _local6:ShaderObjectData = ShaderObjectData(shaderObjectData[_arg1.renderableInstance.instance]); if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){ material.drawTriangle(_arg1, _arg2, _arg3, _local6.shaderRenderer.outputBitmap); shader.renderLayer(_arg1.triangle, _arg3, _local6); } else { if (shaderCompositeMode == ShaderCompositeModes.PER_TRIANGLE_IN_BITMAP){ bmp = _local6.getOutputBitmapFor(_arg1.triangle); material.drawTriangle(_arg1, _arg2, _arg3, bmp, (_local6.triangleUVS[_arg1.triangle]) ? _local6.triangleUVS[_arg1.triangle] : _local6.getPerTriUVForDraw(_arg1.triangle)); shader.renderTri(_arg1.triangle, _arg3, _local6, bmp); }; }; } private function init():void{ shaderObjectData = new Dictionary(); } public function set shaderCompositeMode(_arg1:int):void{ _shaderCompositeMode = _arg1; } public function get shaderCompositeMode():int{ return (_shaderCompositeMode); } public function getOutputBitmapDataFor(_arg1:DisplayObject3D):BitmapData{ var _local2:ShaderObjectData; if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){ if (shaderObjectData[_arg1]){ _local2 = ShaderObjectData(shaderObjectData[_arg1]); return (_local2.shaderRenderer.outputBitmap); }; PaperLogger.warning("object not registered with shaded material"); } else { PaperLogger.warning("getOutputBitmapDataFor only works on per layer mode"); }; return (null); } override public function destroy():void{ var _local1:ShaderObjectData; super.destroy(); for each (_local1 in shaderObjectData) { _local1.destroy(); }; material = null; shader = null; } override public function unregisterObject(_arg1:DisplayObject3D):void{ super.unregisterObject(_arg1); var _local2:ShaderObjectData = shaderObjectData[_arg1]; _local2.destroy(); delete shaderObjectData[_arg1]; } public function updateBeforeRender(_arg1:RenderSessionData):void{ var _local2:ShaderObjectData; var _local3:ILightShader; for each (_local2 in shaderObjectData) { _local2.shaderRenderer.inputBitmap = material.bitmap; if (shaderCompositeMode == ShaderCompositeModes.PER_LAYER){ if (_local2.shaderRenderer.resizedInput){ _local2.shaderRenderer.resizedInput = false; _local2.uvMatrices = new Dictionary(); }; _local2.shaderRenderer.clear(); }; if ((shader is ILightShader)){ _local3 = (shader as ILightShader); _local3.updateLightMatrix(_local2, _arg1); }; }; } } }//package org.papervision3d.materials.shaders
Section 112
//Shader (org.papervision3d.materials.shaders.Shader) package org.papervision3d.materials.shaders { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.render.shader.*; import flash.events.*; import flash.utils.*; import flash.filters.*; public class Shader extends EventDispatcher implements IShader { protected var layers:Dictionary; protected var _blendMode:String;// = "multiply" protected var _filter:BitmapFilter; protected var _object:DisplayObject3D; public function Shader(){ this.layers = new Dictionary(true); } public function set layerBlendMode(_arg1:String):void{ _blendMode = _arg1; } public function setContainerForObject(_arg1:DisplayObject3D, _arg2:Sprite):void{ layers[_arg1] = _arg2; } public function updateAfterRender(_arg1:RenderSessionData, _arg2:ShaderObjectData):void{ } public function set filter(_arg1:BitmapFilter):void{ _filter = _arg1; } public function get layerBlendMode():String{ return (_blendMode); } public function get filter():BitmapFilter{ return (_filter); } public function destroy():void{ } public function renderTri(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData, _arg4:BitmapData):void{ } public function renderLayer(_arg1:Triangle3D, _arg2:RenderSessionData, _arg3:ShaderObjectData):void{ } } }//package org.papervision3d.materials.shaders
Section 113
//ShaderCompositeModes (org.papervision3d.materials.shaders.ShaderCompositeModes) package org.papervision3d.materials.shaders { public class ShaderCompositeModes { public static var PER_TRIANGLE_IN_BITMAP:int = 1; public static var PER_LAYER:int = 0; } }//package org.papervision3d.materials.shaders
Section 114
//CompositeMaterial (org.papervision3d.materials.special.CompositeMaterial) package org.papervision3d.materials.special { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.render.draw.*; import org.papervision3d.core.material.*; public class CompositeMaterial extends TriangleMaterial implements ITriangleDrawer { public var materials:Array; public function CompositeMaterial(){ init(); } private function init():void{ materials = new Array(); } override public function registerObject(_arg1:DisplayObject3D):void{ var _local2:MaterialObject3D; super.registerObject(_arg1); for each (_local2 in materials) { _local2.registerObject(_arg1); }; } override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ var _local6:MaterialObject3D; for each (_local6 in materials) { if (!_local6.invisible){ _local6.drawTriangle(_arg1, _arg2, _arg3); }; }; } public function removeAllMaterials():void{ materials = new Array(); } override public function unregisterObject(_arg1:DisplayObject3D):void{ var _local2:MaterialObject3D; super.unregisterObject(_arg1); for each (_local2 in materials) { _local2.unregisterObject(_arg1); }; } public function removeMaterial(_arg1:MaterialObject3D):void{ materials.splice(materials.indexOf(_arg1), 1); } public function addMaterial(_arg1:MaterialObject3D):void{ var _local2:Object; var _local3:DisplayObject3D; materials.push(_arg1); for (_local2 in objects) { _local3 = (_local2 as DisplayObject3D); _arg1.registerObject(_local3); }; } } }//package org.papervision3d.materials.special
Section 115
//Letter3DMaterial (org.papervision3d.materials.special.Letter3DMaterial) package org.papervision3d.materials.special { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.objects.special.*; import org.papervision3d.objects.special.commands.*; public class Letter3DMaterial extends VectorShapeMaterial { public var scaleStroke:Boolean;// = true private static var viewVector:Number3D = new Number3D(); private static var normalVector:Number3D = new Number3D(); public function Letter3DMaterial(_arg1:uint=0xFF00FF, _arg2:Number=1){ this.fillColor = _arg1; this.fillAlpha = _arg2; } override public function drawShape(_arg1:VectorShape3D, _arg2:Graphics, _arg3:RenderSessionData):void{ var _local4:Vertex3D; var _local6:DisplayObject3D; var _local7:Matrix3D; var _local8:Number; if (oneSide){ _local6 = _arg3.camera; _local7 = _arg1.world; viewVector.x = (_local6.x - _local7.n14); viewVector.y = (_local6.y - _local7.n24); viewVector.z = (_local6.z - _local7.n34); viewVector.normalize(); normalVector.x = _local7.n13; normalVector.y = _local7.n23; normalVector.z = _local7.n33; _local8 = Number3D.dot(normalVector, viewVector); if (_local8 > 0){ return; }; }; if (fillAlpha > 0){ _arg2.beginFill(fillColor, fillAlpha); }; if ((((((lineAlpha == 0)) || ((lineThickness == 0)))) || ((scaleStroke == true)))){ _arg2.lineStyle(); } else { _arg2.lineStyle(lineThickness, lineColor, lineAlpha); }; super.drawShape(_arg1, _arg2, _arg3); if ((((((lineAlpha == 0)) || ((lineThickness == 0)))) || ((scaleStroke == false)))){ return; }; var _local5:int; while (_local5 < _arg1.graphicsCommands.length) { if ((_arg1.graphicsCommands[_local5] is MoveTo)){ _local4 = MoveTo(_arg1.graphicsCommands[_local5]).vertex; }; if ((_arg1.graphicsCommands[_local5] is LineTo)){ LineTo(_arg1.graphicsCommands[_local5]).drawScaledStroke(_local4, _arg2, _arg3, this); _local4 = LineTo(_arg1.graphicsCommands[_local5]).vertex; }; if ((_arg1.graphicsCommands[_local5] is CurveTo)){ CurveTo(_arg1.graphicsCommands[_local5]).drawScaledStroke(_local4, _arg2, _arg3, this); _local4 = CurveTo(_arg1.graphicsCommands[_local5]).anchor; }; _local5++; }; } } }//package org.papervision3d.materials.special
Section 116
//LineMaterial (org.papervision3d.materials.special.LineMaterial) package org.papervision3d.materials.special { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import org.papervision3d.core.render.draw.*; public class LineMaterial extends MaterialObject3D implements ILineDrawer { public function LineMaterial(_arg1:Number=0xFF0000, _arg2:Number=1){ this.lineColor = _arg1; this.lineAlpha = _arg2; } public function drawLine(_arg1:RenderLine, _arg2:Graphics, _arg3:RenderSessionData):void{ _arg2.lineStyle(_arg1.size, lineColor, lineAlpha); _arg2.moveTo(_arg1.v0.x, _arg1.v0.y); if (_arg1.cV){ _arg2.curveTo(_arg1.cV.x, _arg1.cV.y, _arg1.v1.x, _arg1.v1.y); } else { _arg2.lineTo(_arg1.v1.x, _arg1.v1.y); }; _arg2.moveTo(0, 0); _arg2.lineStyle(); } } }//package org.papervision3d.materials.special
Section 117
//ParticleMaterial (org.papervision3d.materials.special.ParticleMaterial) package org.papervision3d.materials.special { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.log.*; import org.papervision3d.core.render.draw.*; public class ParticleMaterial extends MaterialObject3D implements IParticleDrawer { public var shape:int; public var scale:Number; public static var SHAPE_SQUARE:int = 0; public static var SHAPE_CIRCLE:int = 1; public function ParticleMaterial(_arg1:Number, _arg2:Number, _arg3:int=0, _arg4:Number=1){ this.shape = _arg3; this.fillAlpha = _arg2; this.fillColor = _arg1; this.scale = _arg4; } public function drawParticle(_arg1:Particle, _arg2:Graphics, _arg3:RenderSessionData):void{ _arg2.beginFill(fillColor, fillAlpha); var _local4:Rectangle = _arg1.renderRect; if (shape == SHAPE_SQUARE){ _arg2.drawRect(_local4.x, _local4.y, _local4.width, _local4.height); } else { if (shape == SHAPE_CIRCLE){ _arg2.drawCircle((_local4.x + (_local4.width / 2)), (_local4.y + (_local4.width / 2)), (_local4.width / 2)); } else { PaperLogger.warning("Particle material has no valid shape - Must be ParticleMaterial.SHAPE_SQUARE or ParticleMaterial.SHAPE_CIRCLE"); }; }; _arg2.endFill(); _arg3.renderStatistics.particles++; } public function updateRenderRect(_arg1:Particle):void{ var _local2:Rectangle = _arg1.renderRect; if (_arg1.size == 0){ _local2.width = 1; _local2.height = 1; } else { _local2.width = ((_arg1.renderScale * _arg1.size) * scale); _local2.height = ((_arg1.renderScale * _arg1.size) * scale); }; _local2.x = (_arg1.vertex3D.vertex3DInstance.x - (_local2.width / 2)); _local2.y = (_arg1.vertex3D.vertex3DInstance.y - (_local2.width / 2)); } } }//package org.papervision3d.materials.special
Section 118
//VectorShapeMaterial (org.papervision3d.materials.special.VectorShapeMaterial) package org.papervision3d.materials.special { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.objects.special.*; import org.papervision3d.objects.special.commands.*; public class VectorShapeMaterial extends MaterialObject3D { public function drawShape(_arg1:VectorShape3D, _arg2:Graphics, _arg3:RenderSessionData):void{ var _local4:Boolean; var _local5:int; while (_local5 < _arg1.graphicsCommands.length) { _local4 = IVectorShape(_arg1.graphicsCommands[_local5]).draw(_arg2, _local4); _local5++; }; _arg2.endFill(); } } }//package org.papervision3d.materials.special
Section 119
//LightMatrix (org.papervision3d.materials.utils.LightMatrix) package org.papervision3d.materials.utils { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.objects.*; import org.papervision3d.core.math.*; import org.papervision3d.*; import org.papervision3d.lights.*; public class LightMatrix { private static var _targetPos:Number3D = new Number3D(); private static var _lightUp:Number3D = new Number3D(); private static var _lightSide:Number3D = new Number3D(); private static var _lightDir:Number3D = new Number3D(); private static var lightMatrix:Matrix3D = Matrix3D.IDENTITY; private static var invMatrix:Matrix3D = Matrix3D.IDENTITY; protected static var UP:Number3D = new Number3D(0, 1, 0); private static var _lightPos:Number3D = new Number3D(); public static function getLightMatrix(_arg1:LightObject3D, _arg2:DisplayObject3D, _arg3:RenderSessionData, _arg4:Matrix3D):Matrix3D{ var _local6:Matrix3D; var _local7:Matrix3D; var _local5:Matrix3D = (_arg4) ? _arg4 : Matrix3D.IDENTITY; if (_arg1 == null){ _arg1 = new PointLight3D(); _arg1.copyPosition(_arg3.camera); }; _targetPos.reset(); _lightPos.reset(); _lightDir.reset(); _lightUp.reset(); _lightSide.reset(); if (!_arg2){ return (_local5); }; _local6 = _arg1.transform; _local7 = _arg2.world; _lightPos.x = -(_local6.n14); _lightPos.y = -(_local6.n24); _lightPos.z = -(_local6.n34); _targetPos.x = -(_local7.n14); _targetPos.y = -(_local7.n24); _targetPos.z = -(_local7.n34); _lightDir.x = (_targetPos.x - _lightPos.x); _lightDir.y = (_targetPos.y - _lightPos.y); _lightDir.z = (_targetPos.z - _lightPos.z); invMatrix.calculateInverse(_arg2.world); Matrix3D.multiplyVector3x3(invMatrix, _lightDir); _lightDir.normalize(); _lightSide.x = ((_lightDir.y * UP.z) - (_lightDir.z * UP.y)); _lightSide.y = ((_lightDir.z * UP.x) - (_lightDir.x * UP.z)); _lightSide.z = ((_lightDir.x * UP.y) - (_lightDir.y * UP.x)); _lightSide.normalize(); _lightUp.x = ((_lightSide.y * _lightDir.z) - (_lightSide.z * _lightDir.y)); _lightUp.y = ((_lightSide.z * _lightDir.x) - (_lightSide.x * _lightDir.z)); _lightUp.z = ((_lightSide.x * _lightDir.y) - (_lightSide.y * _lightDir.x)); _lightUp.normalize(); if (((Papervision3D.useRIGHTHANDED) || (_arg2.flipLightDirection))){ _lightDir.x = -(_lightDir.x); _lightDir.y = -(_lightDir.y); _lightDir.z = -(_lightDir.z); }; _local5.n11 = _lightSide.x; _local5.n12 = _lightSide.y; _local5.n13 = _lightSide.z; _local5.n21 = _lightUp.x; _local5.n22 = _lightUp.y; _local5.n23 = _lightUp.z; _local5.n31 = _lightDir.x; _local5.n32 = _lightDir.y; _local5.n33 = _lightDir.z; return (_local5); } } }//package org.papervision3d.materials.utils
Section 120
//MaterialsList (org.papervision3d.materials.utils.MaterialsList) package org.papervision3d.materials.utils { import org.papervision3d.core.proto.*; import flash.utils.*; public class MaterialsList { protected var _materials:Dictionary; public var materialsByName:Dictionary; private var _materialsTotal:int; public function MaterialsList(_arg1=null):void{ var _local2:String; var _local3:String; super(); this.materialsByName = new Dictionary(true); this._materials = new Dictionary(false); this._materialsTotal = 0; if (_arg1){ if ((_arg1 is Array)){ for (_local2 in _arg1) { this.addMaterial(_arg1[_local2]); }; } else { if ((_arg1 is Object)){ for (_local3 in _arg1) { this.addMaterial(_arg1[_local3], _local3); }; }; }; }; } public function get numMaterials():int{ return (_materialsTotal); } public function addMaterial(_arg1:MaterialObject3D, _arg2:String=null):MaterialObject3D{ _arg2 = ((((_arg2) || (_arg1.name))) || (String(_arg1.id))); this._materials[_arg1] = _arg2; this.materialsByName[_arg2] = _arg1; this._materialsTotal++; return (_arg1); } public function removeMaterial(_arg1:MaterialObject3D):MaterialObject3D{ if (this._materials[_arg1]){ delete this.materialsByName[this._materials[_arg1]]; delete this._materials[_arg1]; _materialsTotal--; }; return (_arg1); } public function toString():String{ var _local2:MaterialObject3D; var _local1 = ""; for each (_local2 in this.materialsByName) { _local1 = (_local1 + (this._materials[_local2] + "\n")); }; return (_local1); } public function removeMaterialByName(_arg1:String):MaterialObject3D{ return (removeMaterial(getMaterialByName(_arg1))); } public function clone():MaterialsList{ var _local2:MaterialObject3D; var _local1:MaterialsList = new MaterialsList(); for each (_local2 in this.materialsByName) { _local1.addMaterial(_local2.clone(), this._materials[_local2]); }; return (_local1); } public function getMaterialByName(_arg1:String):MaterialObject3D{ return ((this.materialsByName[_arg1]) ? this.materialsByName[_arg1] : this.materialsByName["all"]); } } }//package org.papervision3d.materials.utils
Section 121
//PrecisionMode (org.papervision3d.materials.utils.PrecisionMode) package org.papervision3d.materials.utils { public class PrecisionMode { public static var ORIGINAL:int = 0; public static var STABLE:int = 1; } }//package org.papervision3d.materials.utils
Section 122
//RenderRecStorage (org.papervision3d.materials.utils.RenderRecStorage) package org.papervision3d.materials.utils { import flash.geom.*; import org.papervision3d.core.geom.renderables.*; public class RenderRecStorage { public var mat:Matrix; public var v0:Vertex3DInstance; public var v1:Vertex3DInstance; public var v2:Vertex3DInstance; public function RenderRecStorage(){ v0 = new Vertex3DInstance(); v1 = new Vertex3DInstance(); v2 = new Vertex3DInstance(); mat = new Matrix(); super(); } } }//package org.papervision3d.materials.utils
Section 123
//BitmapMaterial (org.papervision3d.materials.BitmapMaterial) package org.papervision3d.materials { import org.papervision3d.core.proto.*; import org.papervision3d.materials.utils.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.log.*; import flash.utils.*; import org.papervision3d.core.render.draw.*; import org.papervision3d.*; import org.papervision3d.core.material.*; public class BitmapMaterial extends TriangleMaterial implements ITriangleDrawer { protected var renderRecStorage:Array; protected var dsbc:Number; private var d2bc:Number; private var b2:Number; public var uvMatrices:Dictionary; protected var _precise:Boolean; protected var faz:Number; protected var dsca:Number; protected var ax:Number; protected var ay:Number; protected var az:Number; private var d2ca:Number; protected var tempPreGrp:Graphics; public var precisionMode:int; protected var fbz:Number; private var c2:Number; protected var mcax:Number; protected var mcay:Number; protected var mcaz:Number; private var d2:Number; protected var bx:Number; protected var by:Number; protected var bz:Number; protected var fcz:Number; public var minimumRenderSize:Number;// = 4 protected var dbcx:Number; protected var dbcy:Number; protected var cx:Number; protected var cullRect:Rectangle; protected var cz:Number; protected var cy:Number; protected var dmax:Number; protected var dabx:Number; private var dy:Number; protected var _perPixelPrecision:int;// = 8 protected var daby:Number; protected var tempPreRSD:RenderSessionData; private var dx:Number; private var x0:Number; private var x1:Number; private var x2:Number; protected var mbcy:Number; protected var mbcz:Number; protected var mbcx:Number; private var y0:Number; protected var focus:Number;// = 200 private var y2:Number; protected var _texture:Object; protected var tempPreBmp:BitmapData; private var y1:Number; protected var tempTriangleMatrix:Matrix; protected var maby:Number; protected var mabz:Number; private var d2ab:Number; protected var dsab:Number; protected var mabx:Number; protected var dcax:Number; protected var dcay:Number; private var a2:Number; protected var _precision:int;// = 8 protected static const DEFAULT_FOCUS:Number = 200; protected static var _triMatrix:Matrix = new Matrix(); protected static var _triMap:Matrix; public static var AUTO_MIP_MAPPING:Boolean = false; public static var MIP_MAP_DEPTH:Number = 8; protected static var hitRect:Rectangle = new Rectangle(); protected static var _localMatrix:Matrix = new Matrix(); public function BitmapMaterial(_arg1:BitmapData=null, _arg2:Boolean=false){ precisionMode = PrecisionMode.ORIGINAL; uvMatrices = new Dictionary(); tempTriangleMatrix = new Matrix(); super(); if (_arg1){ texture = _arg1; }; this.precise = _arg2; createRenderRecStorage(); } public function transformUV(_arg1:Triangle3D):Matrix{ var _local2:Array; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Matrix; var _local16:Matrix; if (!_arg1.uv){ PaperLogger.error("MaterialObject3D: transformUV() uv not found!"); } else { if (bitmap){ _local2 = _arg1.uv; _local3 = (bitmap.width * maxU); _local4 = (bitmap.height * maxV); _local5 = (_local3 * _arg1.uv0.u); _local6 = (_local4 * (1 - _arg1.uv0.v)); _local7 = (_local3 * _arg1.uv1.u); _local8 = (_local4 * (1 - _arg1.uv1.v)); _local9 = (_local3 * _arg1.uv2.u); _local10 = (_local4 * (1 - _arg1.uv2.v)); if ((((((_local5 == _local7)) && ((_local6 == _local8)))) || ((((_local5 == _local9)) && ((_local6 == _local10)))))){ _local5 = (_local5 - ((_local5)>0.05) ? 0.05 : -0.05); _local6 = (_local6 - ((_local6)>0.07) ? 0.07 : -0.07); }; if ((((_local9 == _local7)) && ((_local10 == _local8)))){ _local9 = (_local9 - ((_local9)>0.05) ? 0.04 : -0.04); _local10 = (_local10 - ((_local10)>0.06) ? 0.06 : -0.06); }; _local11 = (_local7 - _local5); _local12 = (_local8 - _local6); _local13 = (_local9 - _local5); _local14 = (_local10 - _local6); _local15 = new Matrix(_local11, _local12, _local13, _local14, _local5, _local6); if (Papervision3D.useRIGHTHANDED){ _local15.scale(-1, 1); _local15.translate(_local3, 0); }; _local15.invert(); _local16 = (uvMatrices[_arg1] = _local15.clone()); _local16.a = _local15.a; _local16.b = _local15.b; _local16.c = _local15.c; _local16.d = _local15.d; _local16.tx = _local15.tx; _local16.ty = _local15.ty; } else { PaperLogger.error("MaterialObject3D: transformUV() material.bitmap not found!"); }; }; return (_local16); } public function transformUVRT(_arg1:RenderTriangle):Matrix{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Matrix; var _local15:Matrix; if (bitmap){ _local2 = (bitmap.width * maxU); _local3 = (bitmap.height * maxV); _local4 = (_local2 * _arg1.uv0.u); _local5 = (_local3 * (1 - _arg1.uv0.v)); _local6 = (_local2 * _arg1.uv1.u); _local7 = (_local3 * (1 - _arg1.uv1.v)); _local8 = (_local2 * _arg1.uv2.u); _local9 = (_local3 * (1 - _arg1.uv2.v)); if ((((((_local4 == _local6)) && ((_local5 == _local7)))) || ((((_local4 == _local8)) && ((_local5 == _local9)))))){ _local4 = (_local4 - ((_local4)>0.05) ? 0.05 : -0.05); _local5 = (_local5 - ((_local5)>0.07) ? 0.07 : -0.07); }; if ((((_local8 == _local6)) && ((_local9 == _local7)))){ _local8 = (_local8 - ((_local8)>0.05) ? 0.04 : -0.04); _local9 = (_local9 - ((_local9)>0.06) ? 0.06 : -0.06); }; _local10 = (_local6 - _local4); _local11 = (_local7 - _local5); _local12 = (_local8 - _local4); _local13 = (_local9 - _local5); _local14 = new Matrix(_local10, _local11, _local12, _local13, _local4, _local5); if (Papervision3D.useRIGHTHANDED){ _local14.scale(-1, 1); _local14.translate(_local2, 0); }; _local14.invert(); _local15 = (uvMatrices[_arg1] = _local14.clone()); _local15.a = _local14.a; _local15.b = _local14.b; _local15.c = _local14.c; _local15.d = _local14.d; _local15.tx = _local14.tx; _local15.ty = _local14.ty; } else { PaperLogger.error("MaterialObject3D: transformUV() material.bitmap not found!"); }; return (_local15); } protected function renderRec(_arg1:Matrix, _arg2:Vertex3DInstance, _arg3:Vertex3DInstance, _arg4:Vertex3DInstance, _arg5:Number):void{ az = _arg2.z; bz = _arg3.z; cz = _arg4.z; if ((((((az <= 0)) && ((bz <= 0)))) && ((cz <= 0)))){ return; }; cx = _arg4.x; cy = _arg4.y; bx = _arg3.x; by = _arg3.y; ax = _arg2.x; ay = _arg2.y; if (cullRect){ hitRect.x = ((bx < ax)) ? ((bx < cx)) ? bx : cx : ((ax < cx)) ? ax : cx; hitRect.width = (((bx > ax)) ? ((bx > cx)) ? bx : cx : ((ax > cx)) ? ax : cx + ((hitRect.x < 0)) ? -(hitRect.x) : hitRect.x); hitRect.y = ((by < ay)) ? ((by < cy)) ? by : cy : ((ay < cy)) ? ay : cy; hitRect.height = (((by > ay)) ? ((by > cy)) ? by : cy : ((ay > cy)) ? ay : cy + ((hitRect.y < 0)) ? -(hitRect.y) : hitRect.y); if (!(((hitRect.right < cullRect.left)) || ((hitRect.left > cullRect.right)))){ if (!(((hitRect.bottom < cullRect.top)) || ((hitRect.top > cullRect.bottom)))){ } else { return; }; } else { return; }; }; if ((((((((_arg5 >= 100)) || ((hitRect.width < minimumRenderSize)))) || ((hitRect.height < minimumRenderSize)))) || ((focus == Infinity)))){ a2 = (_arg3.x - _arg2.x); b2 = (_arg3.y - _arg2.y); c2 = (_arg4.x - _arg2.x); d2 = (_arg4.y - _arg2.y); tempTriangleMatrix.a = ((_arg1.a * a2) + (_arg1.b * c2)); tempTriangleMatrix.b = ((_arg1.a * b2) + (_arg1.b * d2)); tempTriangleMatrix.c = ((_arg1.c * a2) + (_arg1.d * c2)); tempTriangleMatrix.d = ((_arg1.c * b2) + (_arg1.d * d2)); tempTriangleMatrix.tx = (((_arg1.tx * a2) + (_arg1.ty * c2)) + _arg2.x); tempTriangleMatrix.ty = (((_arg1.tx * b2) + (_arg1.ty * d2)) + _arg2.y); if (lineAlpha){ tempPreGrp.lineStyle(lineThickness, lineColor, lineAlpha); }; tempPreGrp.beginBitmapFill(tempPreBmp, tempTriangleMatrix, tiled, smooth); tempPreGrp.moveTo(_arg2.x, _arg2.y); tempPreGrp.lineTo(_arg3.x, _arg3.y); tempPreGrp.lineTo(_arg4.x, _arg4.y); tempPreGrp.endFill(); if (lineAlpha){ tempPreGrp.lineStyle(); }; tempPreRSD.renderStatistics.triangles++; return; }; faz = (focus + az); fbz = (focus + bz); fcz = (focus + cz); mabz = (2 / (faz + fbz)); mbcz = (2 / (fbz + fcz)); mcaz = (2 / (fcz + faz)); mabx = (((ax * faz) + (bx * fbz)) * mabz); maby = (((ay * faz) + (by * fbz)) * mabz); mbcx = (((bx * fbz) + (cx * fcz)) * mbcz); mbcy = (((by * fbz) + (cy * fcz)) * mbcz); mcax = (((cx * fcz) + (ax * faz)) * mcaz); mcay = (((cy * fcz) + (ay * faz)) * mcaz); dabx = ((ax + bx) - mabx); daby = ((ay + by) - maby); dbcx = ((bx + cx) - mbcx); dbcy = ((by + cy) - mbcy); dcax = ((cx + ax) - mcax); dcay = ((cy + ay) - mcay); dsab = ((dabx * dabx) + (daby * daby)); dsbc = ((dbcx * dbcx) + (dbcy * dbcy)); dsca = ((dcax * dcax) + (dcay * dcay)); var _local6:int = (_arg5 + 1); var _local7:RenderRecStorage = RenderRecStorage(renderRecStorage[int(_arg5)]); var _local8:Matrix = _local7.mat; if ((((((dsab <= _precision)) && ((dsca <= _precision)))) && ((dsbc <= _precision)))){ a2 = (_arg3.x - _arg2.x); b2 = (_arg3.y - _arg2.y); c2 = (_arg4.x - _arg2.x); d2 = (_arg4.y - _arg2.y); tempTriangleMatrix.a = ((_arg1.a * a2) + (_arg1.b * c2)); tempTriangleMatrix.b = ((_arg1.a * b2) + (_arg1.b * d2)); tempTriangleMatrix.c = ((_arg1.c * a2) + (_arg1.d * c2)); tempTriangleMatrix.d = ((_arg1.c * b2) + (_arg1.d * d2)); tempTriangleMatrix.tx = (((_arg1.tx * a2) + (_arg1.ty * c2)) + _arg2.x); tempTriangleMatrix.ty = (((_arg1.tx * b2) + (_arg1.ty * d2)) + _arg2.y); if (lineAlpha){ tempPreGrp.lineStyle(lineThickness, lineColor, lineAlpha); }; tempPreGrp.beginBitmapFill(tempPreBmp, tempTriangleMatrix, tiled, smooth); tempPreGrp.moveTo(_arg2.x, _arg2.y); tempPreGrp.lineTo(_arg3.x, _arg3.y); tempPreGrp.lineTo(_arg4.x, _arg4.y); tempPreGrp.endFill(); if (lineAlpha){ tempPreGrp.lineStyle(); }; tempPreRSD.renderStatistics.triangles++; return; }; if ((((((dsab > _precision)) && ((dsca > _precision)))) && ((dsbc > _precision)))){ _local8.a = (_arg1.a * 2); _local8.b = (_arg1.b * 2); _local8.c = (_arg1.c * 2); _local8.d = (_arg1.d * 2); _local8.tx = (_arg1.tx * 2); _local8.ty = (_arg1.ty * 2); _local7.v0.x = (mabx * 0.5); _local7.v0.y = (maby * 0.5); _local7.v0.z = ((az + bz) * 0.5); _local7.v1.x = (mbcx * 0.5); _local7.v1.y = (mbcy * 0.5); _local7.v1.z = ((bz + cz) * 0.5); _local7.v2.x = (mcax * 0.5); _local7.v2.y = (mcay * 0.5); _local7.v2.z = ((cz + az) * 0.5); renderRec(_local8, _arg2, _local7.v0, _local7.v2, _local6); _local8.tx = (_local8.tx - 1); renderRec(_local8, _local7.v0, _arg3, _local7.v1, _local6); _local8.ty = (_local8.ty - 1); _local8.tx = (_arg1.tx * 2); renderRec(_local8, _local7.v2, _local7.v1, _arg4, _local6); _local8.a = (-(_arg1.a) * 2); _local8.b = (-(_arg1.b) * 2); _local8.c = (-(_arg1.c) * 2); _local8.d = (-(_arg1.d) * 2); _local8.tx = ((-(_arg1.tx) * 2) + 1); _local8.ty = ((-(_arg1.ty) * 2) + 1); renderRec(_local8, _local7.v1, _local7.v2, _local7.v0, _local6); return; }; if (precisionMode == PrecisionMode.ORIGINAL){ d2ab = dsab; d2bc = dsbc; d2ca = dsca; dmax = ((dsca > dsbc)) ? ((dsca > dsab)) ? dsca : dsab : ((dsbc > dsab)) ? dsbc : dsab; } else { dx = (_arg2.x - _arg3.x); dy = (_arg2.y - _arg3.y); d2ab = ((dx * dx) + (dy * dy)); dx = (_arg3.x - _arg4.x); dy = (_arg3.y - _arg4.y); d2bc = ((dx * dx) + (dy * dy)); dx = (_arg4.x - _arg2.x); dy = (_arg4.y - _arg2.y); d2ca = ((dx * dx) + (dy * dy)); dmax = ((d2ca > d2bc)) ? ((d2ca > d2ab)) ? d2ca : d2ab : ((d2bc > d2ab)) ? d2bc : d2ab; }; if (d2ab == dmax){ _local8.a = (_arg1.a * 2); _local8.b = _arg1.b; _local8.c = (_arg1.c * 2); _local8.d = _arg1.d; _local8.tx = (_arg1.tx * 2); _local8.ty = _arg1.ty; _local7.v0.x = (mabx * 0.5); _local7.v0.y = (maby * 0.5); _local7.v0.z = ((az + bz) * 0.5); renderRec(_local8, _arg2, _local7.v0, _arg4, _local6); _local8.a = ((_arg1.a * 2) + _arg1.b); _local8.c = ((2 * _arg1.c) + _arg1.d); _local8.tx = (((_arg1.tx * 2) + _arg1.ty) - 1); renderRec(_local8, _local7.v0, _arg3, _arg4, _local6); return; }; if (d2ca == dmax){ _local8.a = _arg1.a; _local8.b = (_arg1.b * 2); _local8.c = _arg1.c; _local8.d = (_arg1.d * 2); _local8.tx = _arg1.tx; _local8.ty = (_arg1.ty * 2); _local7.v2.x = (mcax * 0.5); _local7.v2.y = (mcay * 0.5); _local7.v2.z = ((cz + az) * 0.5); renderRec(_local8, _arg2, _arg3, _local7.v2, _local6); _local8.b = (_local8.b + _arg1.a); _local8.d = (_local8.d + _arg1.c); _local8.ty = (_local8.ty + (_arg1.tx - 1)); renderRec(_local8, _local7.v2, _arg3, _arg4, _local6); return; }; _local8.a = (_arg1.a - _arg1.b); _local8.b = (_arg1.b * 2); _local8.c = (_arg1.c - _arg1.d); _local8.d = (_arg1.d * 2); _local8.tx = (_arg1.tx - _arg1.ty); _local8.ty = (_arg1.ty * 2); _local7.v1.x = (mbcx * 0.5); _local7.v1.y = (mbcy * 0.5); _local7.v1.z = ((bz + cz) * 0.5); renderRec(_local8, _arg2, _arg3, _local7.v1, _local6); _local8.a = (_arg1.a * 2); _local8.b = (_arg1.b - _arg1.a); _local8.c = (_arg1.c * 2); _local8.d = (_arg1.d - _arg1.c); _local8.tx = (_arg1.tx * 2); _local8.ty = (_arg1.ty - _arg1.tx); renderRec(_local8, _arg2, _local7.v1, _arg4, _local6); } protected function createRenderRecStorage():void{ this.renderRecStorage = new Array(); var _local1:int; while (_local1 <= 100) { this.renderRecStorage[_local1] = new RenderRecStorage(); _local1++; }; } public function get texture():Object{ return (this._texture); } public function resetUVS():void{ uvMatrices = new Dictionary(false); } public function set pixelPrecision(_arg1:int):void{ _precision = ((_arg1 * _arg1) * 1.4); _perPixelPrecision = _arg1; } protected function correctBitmap(_arg1:BitmapData):BitmapData{ var _local2:BitmapData; var _local3:Number = (1 << MIP_MAP_DEPTH); var _local4:Number = (_arg1.width / _local3); _local4 = ((_local4 == uint(_local4))) ? _local4 : (uint(_local4) + 1); var _local5:Number = (_arg1.height / _local3); _local5 = ((_local5 == uint(_local5))) ? _local5 : (uint(_local5) + 1); var _local6:Number = (_local3 * _local4); var _local7:Number = (_local3 * _local5); var _local8:Boolean; if (_local6 > 2880){ _local6 = _arg1.width; _local8 = false; }; if (_local7 > 2880){ _local7 = _arg1.height; _local8 = false; }; if (!_local8){ PaperLogger.warning((("Material " + this.name) + ": Texture too big for mip mapping. Resizing recommended for better performance and quality.")); }; if (((_arg1) && (((!(((_arg1.width % _local3) == 0))) || (!(((_arg1.height % _local3) == 0))))))){ _local2 = new BitmapData(_local6, _local7, _arg1.transparent, 0); widthOffset = _arg1.width; heightOffset = _arg1.height; this.maxU = (_arg1.width / _local6); this.maxV = (_arg1.height / _local7); _local2.draw(_arg1); extendBitmapEdges(_local2, _arg1.width, _arg1.height); } else { this.maxU = (this.maxV = 1); _local2 = _arg1; }; return (_local2); } protected function createBitmap(_arg1:BitmapData):BitmapData{ var _local2:BitmapData; resetMapping(); if (AUTO_MIP_MAPPING){ _local2 = correctBitmap(_arg1); } else { this.maxU = (this.maxV = 1); _local2 = _arg1; }; return (_local2); } public function get precise():Boolean{ return (_precise); } public function set texture(_arg1:Object):void{ if ((_arg1 is BitmapData) == false){ PaperLogger.error("BitmapMaterial.texture requires a BitmapData object for the texture"); return; }; bitmap = createBitmap(BitmapData(_arg1)); _texture = _arg1; } override public function clone():MaterialObject3D{ var _local1:MaterialObject3D = super.clone(); _local1.maxU = this.maxU; _local1.maxV = this.maxV; return (_local1); } override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ _triMap = (_arg5) ? _arg5 : ((uvMatrices[_arg1]) || (transformUVRT(_arg1))); if (((!(_precise)) || (!(_triMap)))){ if (lineAlpha){ _arg2.lineStyle(lineThickness, lineColor, lineAlpha); }; if (bitmap){ x0 = _arg1.v0.x; y0 = _arg1.v0.y; x1 = _arg1.v1.x; y1 = _arg1.v1.y; x2 = _arg1.v2.x; y2 = _arg1.v2.y; _triMatrix.a = (x1 - x0); _triMatrix.b = (y1 - y0); _triMatrix.c = (x2 - x0); _triMatrix.d = (y2 - y0); _triMatrix.tx = x0; _triMatrix.ty = y0; _localMatrix.a = _triMap.a; _localMatrix.b = _triMap.b; _localMatrix.c = _triMap.c; _localMatrix.d = _triMap.d; _localMatrix.tx = _triMap.tx; _localMatrix.ty = _triMap.ty; _localMatrix.concat(_triMatrix); _arg2.beginBitmapFill((_arg4) ? _arg4 : bitmap, _localMatrix, tiled, smooth); }; _arg2.moveTo(x0, y0); _arg2.lineTo(x1, y1); _arg2.lineTo(x2, y2); _arg2.lineTo(x0, y0); if (bitmap){ _arg2.endFill(); }; if (lineAlpha){ _arg2.lineStyle(); }; _arg3.renderStatistics.triangles++; } else { if (bitmap){ focus = _arg3.camera.focus; tempPreBmp = (_arg4) ? _arg4 : bitmap; tempPreRSD = _arg3; tempPreGrp = _arg2; cullRect = _arg3.viewPort.cullingRectangle; renderRec(_triMap, _arg1.v0, _arg1.v1, _arg1.v2, 0); }; }; } public function get precision():int{ return (_precision); } public function resetMapping():void{ uvMatrices = new Dictionary(); } override public function copy(_arg1:MaterialObject3D):void{ super.copy(_arg1); this.maxU = _arg1.maxU; this.maxV = _arg1.maxV; } override public function toString():String{ return (((((("Texture:" + this.texture) + " lineColor:") + this.lineColor) + " lineAlpha:") + this.lineAlpha)); } public function get pixelPrecision():int{ return (_perPixelPrecision); } public function set precise(_arg1:Boolean):void{ _precise = _arg1; } protected function extendBitmapEdges(_arg1:BitmapData, _arg2:Number, _arg3:Number):void{ var _local6:int; var _local4:Rectangle = new Rectangle(); var _local5:Point = new Point(); if (_arg1.width > _arg2){ _local4.x = (_arg2 - 1); _local4.y = 0; _local4.width = 1; _local4.height = _arg3; _local5.y = 0; _local6 = _arg2; while (_local6 < _arg1.width) { _local5.x = _local6; _arg1.copyPixels(_arg1, _local4, _local5); _local6++; }; }; if (_arg1.height > _arg3){ _local4.x = 0; _local4.y = (_arg3 - 1); _local4.width = _arg1.width; _local4.height = 1; _local5.x = 0; _local6 = _arg3; while (_local6 < _arg1.height) { _local5.y = _local6; _arg1.copyPixels(_arg1, _local4, _local5); _local6++; }; }; } override public function destroy():void{ super.destroy(); if (uvMatrices){ uvMatrices = null; }; if (bitmap){ bitmap.dispose(); }; this.renderRecStorage = null; } public function set precision(_arg1:int):void{ _precision = _arg1; } } }//package org.papervision3d.materials
Section 124
//ColorMaterial (org.papervision3d.materials.ColorMaterial) package org.papervision3d.materials { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.render.draw.*; import org.papervision3d.core.material.*; public class ColorMaterial extends TriangleMaterial implements ITriangleDrawer { public function ColorMaterial(_arg1:Number=0xFF00FF, _arg2:Number=1, _arg3:Boolean=false){ this.fillColor = _arg1; this.fillAlpha = _arg2; this.interactive = _arg3; } override public function toString():String{ return (((("ColorMaterial - color:" + this.fillColor) + " alpha:") + this.fillAlpha)); } override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ var _local6:Number = _arg1.v0.x; var _local7:Number = _arg1.v0.y; var _local8:Number = _arg1.v1.x; var _local9:Number = _arg1.v1.y; var _local10:Number = _arg1.v2.x; var _local11:Number = _arg1.v2.y; _arg2.beginFill(fillColor, fillAlpha); _arg2.moveTo(_local6, _local7); _arg2.lineTo(_local8, _local9); _arg2.lineTo(_local10, _local11); _arg2.lineTo(_local6, _local7); _arg2.endFill(); _arg3.renderStatistics.triangles++; } override public function clone():MaterialObject3D{ var _local1:MaterialObject3D = new ColorMaterial(); _local1.copy(this); return (_local1); } } }//package org.papervision3d.materials
Section 125
//MovieMaterial (org.papervision3d.materials.MovieMaterial) package org.papervision3d.materials { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.render.material.*; import org.papervision3d.core.log.*; import org.papervision3d.core.render.draw.*; public class MovieMaterial extends BitmapMaterial implements ITriangleDrawer, IUpdateBeforeMaterial, IUpdateAfterMaterial { public var movieTransparent:Boolean; private var quality:String; private var materialIsUsed:Boolean;// = false private var stage:Stage; private var autoClipRect:Rectangle; public var allowAutoResize:Boolean;// = false public var movie:DisplayObject; private var movieAnimated:Boolean; protected var recreateBitmapInSuper:Boolean; private var userClipRect:Rectangle; public function MovieMaterial(_arg1:DisplayObject=null, _arg2:Boolean=false, _arg3:Boolean=false, _arg4:Boolean=false, _arg5:Rectangle=null){ movieTransparent = _arg2; this.animated = _arg3; this.precise = _arg4; userClipRect = _arg5; if (_arg1){ texture = _arg1; }; } protected function createBitmapFromSprite(_arg1:DisplayObject):BitmapData{ movie = _arg1; initBitmap(movie); drawBitmap(); bitmap = super.createBitmap(bitmap); return (bitmap); } public function set rect(_arg1:Rectangle):void{ userClipRect = _arg1; createBitmapFromSprite(movie); } public function updateAfterRender(_arg1:RenderSessionData):void{ if ((((movieAnimated == true)) && ((materialIsUsed == true)))){ drawBitmap(); if (recreateBitmapInSuper){ bitmap = super.createBitmap(bitmap); recreateBitmapInSuper = false; }; }; } public function set animated(_arg1:Boolean):void{ movieAnimated = _arg1; } public function drawBitmap():void{ var _local3:String; bitmap.fillRect(bitmap.rect, fillColor); if (((stage) && (quality))){ _local3 = stage.quality; stage.quality = quality; }; var _local1:Rectangle = rect; var _local2:Matrix = new Matrix(1, 0, 0, 1, -(_local1.x), -(_local1.y)); bitmap.draw(movie, _local2, movie.transform.colorTransform, null); if (!userClipRect){ autoClipRect = movie.getBounds(movie); }; if (((stage) && (quality))){ stage.quality = _local3; }; } override public function get texture():Object{ return (this._texture); } public function updateBeforeRender(_arg1:RenderSessionData):void{ var _local2:int; var _local3:int; materialIsUsed = false; if (movieAnimated){ if (userClipRect){ _local2 = int((userClipRect.width + 0.5)); _local3 = int((userClipRect.height + 0.5)); } else { _local2 = int((movie.width + 0.5)); _local3 = int((movie.height + 0.5)); }; if (((allowAutoResize) && (((!((_local2 == bitmap.width))) || (!((_local3 == bitmap.height))))))){ initBitmap(movie); recreateBitmapInSuper = true; }; }; } protected function initBitmap(_arg1:DisplayObject):void{ if (bitmap){ bitmap.dispose(); }; if (userClipRect){ bitmap = new BitmapData(int((userClipRect.width + 0.5)), int((userClipRect.height + 0.5)), movieTransparent, fillColor); } else { if ((((_arg1.width == 0)) || ((_arg1.height == 0)))){ bitmap = new BitmapData(0x0100, 0x0100, movieTransparent, fillColor); } else { bitmap = new BitmapData(int((_arg1.width + 0.5)), int((_arg1.height + 0.5)), movieTransparent, fillColor); }; }; } public function get animated():Boolean{ return (movieAnimated); } public function get rect():Rectangle{ var _local1:Rectangle = ((userClipRect) || (autoClipRect)); if (((!(_local1)) && (movie))){ _local1 = movie.getBounds(movie); }; return (_local1); } override public function set texture(_arg1:Object):void{ if ((_arg1 is DisplayObject) == false){ PaperLogger.error("MovieMaterial.texture requires a Sprite to be passed as the object"); return; }; bitmap = createBitmapFromSprite(DisplayObject(_arg1)); _texture = _arg1; } override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ materialIsUsed = true; super.drawTriangle(_arg1, _arg2, _arg3, _arg4, _arg5); } public function setQuality(_arg1:String, _arg2:Stage, _arg3:Boolean=true):void{ this.quality = _arg1; this.stage = _arg2; if (_arg3){ createBitmapFromSprite(movie); }; } } }//package org.papervision3d.materials
Section 126
//WireframeMaterial (org.papervision3d.materials.WireframeMaterial) package org.papervision3d.materials { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.core.render.draw.*; import org.papervision3d.core.material.*; public class WireframeMaterial extends TriangleMaterial implements ITriangleDrawer { public function WireframeMaterial(_arg1:Number=0xFF00FF, _arg2:Number=1, _arg3:Number=0){ this.lineColor = _arg1; this.lineAlpha = _arg2; this.lineThickness = _arg3; this.doubleSided = false; } override public function toString():String{ return (((("WireframeMaterial - color:" + this.lineColor) + " alpha:") + this.lineAlpha)); } override public function drawTriangle(_arg1:RenderTriangle, _arg2:Graphics, _arg3:RenderSessionData, _arg4:BitmapData=null, _arg5:Matrix=null):void{ var _local6:Number = _arg1.v0.x; var _local7:Number = _arg1.v0.y; if (lineAlpha){ _arg2.lineStyle(lineThickness, lineColor, lineAlpha); _arg2.moveTo(_local6, _local7); _arg2.lineTo(_arg1.v1.x, _arg1.v1.y); _arg2.lineTo(_arg1.v2.x, _arg1.v2.y); _arg2.lineTo(_local6, _local7); _arg2.lineStyle(); _arg3.renderStatistics.triangles++; }; } } }//package org.papervision3d.materials
Section 127
//Cube (org.papervision3d.objects.primitives.Cube) package org.papervision3d.objects.primitives { import org.papervision3d.core.proto.*; import org.papervision3d.materials.utils.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.core.log.*; import org.papervision3d.core.geom.*; import org.papervision3d.*; public class Cube extends TriangleMesh3D { public var segments:Number3D; private var insideFaces:int; private var excludeFaces:int; public static var ALL:int = (((((FRONT + BACK) + RIGHT) + LEFT) + TOP) + BOTTOM); public static var LEFT:int = 8; public static var FRONT:int = 1; public static var BOTTOM:int = 32; public static var TOP:int = 16; public static var BACK:int = 2; public static var NONE:int = 0; public static var RIGHT:int = 4; public function Cube(_arg1:MaterialsList, _arg2:Number=500, _arg3:Number=500, _arg4:Number=500, _arg5:int=1, _arg6:int=1, _arg7:int=1, _arg8:int=0, _arg9:int=0){ super(_arg1.getMaterialByName("all"), new Array(), new Array(), null); this.materials = _arg1; this.insideFaces = _arg8; this.excludeFaces = _arg9; segments = new Number3D(_arg5, _arg6, _arg7); buildCube(_arg2, _arg4, _arg3); } public function destroy():void{ var _local1:MaterialObject3D; for each (_local1 in materials) { _local1.unregisterObject(this); }; } protected function buildCube(_arg1:Number, _arg2:Number, _arg3:Number):void{ var _local7:Triangle3D; var _local4:Number = (_arg1 / 2); var _local5:Number = (_arg2 / 2); var _local6:Number = (_arg3 / 2); if (!(excludeFaces & FRONT)){ buildPlane("front", "x", "y", _arg1, _arg2, _local6, !(Boolean((insideFaces & FRONT)))); }; if (!(excludeFaces & BACK)){ buildPlane("back", "x", "y", _arg1, _arg2, -(_local6), Boolean((insideFaces & BACK))); }; if (!(excludeFaces & RIGHT)){ buildPlane("right", "z", "y", _arg3, _arg2, _local4, Boolean((insideFaces & RIGHT))); }; if (!(excludeFaces & LEFT)){ buildPlane("left", "z", "y", _arg3, _arg2, -(_local4), !(Boolean((insideFaces & LEFT)))); }; if (!(excludeFaces & TOP)){ buildPlane("top", "x", "z", _arg1, _arg3, _local5, Boolean((insideFaces & TOP))); }; if (!(excludeFaces & BOTTOM)){ buildPlane("bottom", "x", "z", _arg1, _arg3, -(_local5), !(Boolean((insideFaces & BOTTOM)))); }; mergeVertices(); for each (_local7 in this.geometry.faces) { _local7.renderCommand.create = createRenderTriangle; }; this.geometry.ready = true; if (Papervision3D.useRIGHTHANDED){ this.geometry.flipFaces(); }; } protected function buildPlane(_arg1:String, _arg2:String, _arg3:String, _arg4:Number, _arg5:Number, _arg6:Number, _arg7:Boolean=false):void{ var _local8:MaterialObject3D; var _local9:String; var _local23:NumberUV; var _local24:NumberUV; var _local25:NumberUV; var _local26:int; var _local27:Vertex3D; var _local28:Vertex3D; var _local29:Vertex3D; var _local30:Vertex3D; _local8 = materials.getMaterialByName(_arg1); if (!_local8){ _local8 = materials.getMaterialByName("all"); if (!_local8){ PaperLogger.warning("Required material not found in given materials list. Supported materials are: front, back, right, left, top, bottom & all."); return; }; }; _local8.registerObject(this); if ((((((_arg2 == "x")) && ((_arg3 == "y")))) || ((((_arg2 == "y")) && ((_arg3 == "x")))))){ _local9 = "z"; } else { if ((((((_arg2 == "x")) && ((_arg3 == "z")))) || ((((_arg2 == "z")) && ((_arg3 == "x")))))){ _local9 = "y"; } else { if ((((((_arg2 == "z")) && ((_arg3 == "y")))) || ((((_arg2 == "y")) && ((_arg3 == "z")))))){ _local9 = "x"; }; }; }; var _local10:Number = (_arg7) ? -1 : 1; var _local11:Number = this.segments[_arg2]; var _local12:Number = this.segments[_arg3]; var _local13:Number = (_local11 + 1); var _local14:Number = (_local12 + 1); var _local15:Array = this.geometry.vertices; var _local16:Array = this.geometry.faces; var _local17:Array = new Array(); var _local18:Number = (_arg4 / 2); var _local19:Number = (_arg5 / 2); var _local20:Number = (_arg4 / _local11); var _local21:Number = (_arg5 / _local12); var _local22:int; while (_local22 < _local13) { _local26 = 0; while (_local26 < _local14) { _local27 = new Vertex3D(); _local27[_arg2] = (((_local22 * _local20) - _local18) * _local10); _local27[_arg3] = ((_local26 * _local21) - _local19); _local27[_local9] = _arg6; _local15.push(_local27); _local17.push(_local27); _local26++; }; _local22++; }; _local22 = 0; while (_local22 < _local11) { _local26 = 0; while (_local26 < _local12) { _local28 = _local17[((_local22 * _local14) + _local26)]; _local29 = _local17[((_local22 * _local14) + (_local26 + 1))]; _local30 = _local17[(((_local22 + 1) * _local14) + _local26)]; _local23 = new NumberUV((_local22 / _local11), (_local26 / _local12)); _local24 = new NumberUV((_local22 / _local11), ((_local26 + 1) / _local12)); _local25 = new NumberUV(((_local22 + 1) / _local11), (_local26 / _local12)); _local16.push(new Triangle3D(this, [_local28, _local30, _local29], _local8, [_local23, _local25, _local24])); _local28 = _local17[(((_local22 + 1) * _local14) + (_local26 + 1))]; _local29 = _local17[(((_local22 + 1) * _local14) + _local26)]; _local30 = _local17[((_local22 * _local14) + (_local26 + 1))]; _local23 = new NumberUV(((_local22 + 1) / _local11), ((_local26 + 1) / _local12)); _local24 = new NumberUV(((_local22 + 1) / _local11), (_local26 / _local12)); _local25 = new NumberUV((_local22 / _local11), ((_local26 + 1) / _local12)); _local16.push(new Triangle3D(this, [_local29, _local28, _local30], _local8, [_local24, _local23, _local25])); _local26++; }; _local22++; }; } } }//package org.papervision3d.objects.primitives
Section 128
//Plane (org.papervision3d.objects.primitives.Plane) package org.papervision3d.objects.primitives { import org.papervision3d.core.proto.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.core.geom.*; import org.papervision3d.*; public class Plane extends TriangleMesh3D { public var segmentsH:Number; public var segmentsW:Number; public static var DEFAULT_SCALE:Number = 1; public static var DEFAULT_SEGMENTS:Number = 1; public static var DEFAULT_SIZE:Number = 500; public function Plane(_arg1:MaterialObject3D=null, _arg2:Number=0, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0){ super(_arg1, new Array(), new Array(), null); this.segmentsW = ((_arg4) || (DEFAULT_SEGMENTS)); this.segmentsH = ((_arg5) || (this.segmentsW)); var _local6:Number = DEFAULT_SCALE; if (!_arg3){ if (_arg2){ _local6 = _arg2; }; if (((_arg1) && (_arg1.bitmap))){ _arg2 = (_arg1.bitmap.width * _local6); _arg3 = (_arg1.bitmap.height * _local6); } else { _arg2 = (DEFAULT_SIZE * _local6); _arg3 = (DEFAULT_SIZE * _local6); }; }; buildPlane(_arg2, _arg3); } private function buildPlane(_arg1:Number, _arg2:Number):void{ var _local14:NumberUV; var _local15:NumberUV; var _local16:NumberUV; var _local17:int; var _local18:Number; var _local19:Number; var _local20:Vertex3D; var _local21:Vertex3D; var _local22:Vertex3D; var _local3:Number = this.segmentsW; var _local4:Number = this.segmentsH; var _local5:Number = (_local3 + 1); var _local6:Number = (_local4 + 1); var _local7:Array = this.geometry.vertices; var _local8:Array = this.geometry.faces; var _local9:Number = (_arg1 / 2); var _local10:Number = (_arg2 / 2); var _local11:Number = (_arg1 / _local3); var _local12:Number = (_arg2 / _local4); var _local13:int; while (_local13 < (_local3 + 1)) { _local17 = 0; while (_local17 < _local6) { _local18 = ((_local13 * _local11) - _local9); _local19 = ((_local17 * _local12) - _local10); _local7.push(new Vertex3D(_local18, _local19, 0)); _local17++; }; _local13++; }; _local13 = 0; while (_local13 < _local3) { _local17 = 0; while (_local17 < _local4) { _local20 = _local7[((_local13 * _local6) + _local17)]; _local21 = _local7[((_local13 * _local6) + (_local17 + 1))]; _local22 = _local7[(((_local13 + 1) * _local6) + _local17)]; _local14 = new NumberUV((_local13 / _local3), (_local17 / _local4)); _local15 = new NumberUV((_local13 / _local3), ((_local17 + 1) / _local4)); _local16 = new NumberUV(((_local13 + 1) / _local3), (_local17 / _local4)); _local8.push(new Triangle3D(this, [_local20, _local22, _local21], material, [_local14, _local16, _local15])); _local20 = _local7[(((_local13 + 1) * _local6) + (_local17 + 1))]; _local21 = _local7[(((_local13 + 1) * _local6) + _local17)]; _local22 = _local7[((_local13 * _local6) + (_local17 + 1))]; _local14 = new NumberUV(((_local13 + 1) / _local3), ((_local17 + 1) / _local4)); _local15 = new NumberUV(((_local13 + 1) / _local3), (_local17 / _local4)); _local16 = new NumberUV((_local13 / _local3), ((_local17 + 1) / _local4)); _local8.push(new Triangle3D(this, [_local20, _local22, _local21], material, [_local14, _local16, _local15])); _local17++; }; _local13++; }; this.geometry.ready = true; if (Papervision3D.useRIGHTHANDED){ this.geometry.flipFaces(); }; } } }//package org.papervision3d.objects.primitives
Section 129
//Sphere (org.papervision3d.objects.primitives.Sphere) package org.papervision3d.objects.primitives { import org.papervision3d.core.proto.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.core.geom.*; import org.papervision3d.*; public class Sphere extends TriangleMesh3D { private var segmentsH:Number; private var segmentsW:Number; public static var MIN_SEGMENTSW:Number = 3; public static var DEFAULT_SCALE:Number = 1; public static var DEFAULT_RADIUS:Number = 100; public static var DEFAULT_SEGMENTSH:Number = 6; public static var MIN_SEGMENTSH:Number = 2; public static var DEFAULT_SEGMENTSW:Number = 8; public function Sphere(_arg1:MaterialObject3D=null, _arg2:Number=100, _arg3:int=8, _arg4:int=6, _arg5:String=null){ super(_arg1, new Array(), new Array(), _arg5); this.segmentsW = Math.max(MIN_SEGMENTSW, ((_arg3) || (DEFAULT_SEGMENTSW))); this.segmentsH = Math.max(MIN_SEGMENTSH, ((_arg4) || (DEFAULT_SEGMENTSH))); if (_arg2 == 0){ _arg2 = DEFAULT_RADIUS; }; var _local6:Number = DEFAULT_SCALE; buildSphere(_arg2); } private function buildSphere(_arg1:Number):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local11:Triangle3D; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Array; var _local16:Vertex3D; var _local17:Number; var _local18:Number; var _local19:Number; var _local20:int; var _local21:Boolean; var _local22:Vertex3D; var _local23:Vertex3D; var _local24:Vertex3D; var _local25:Vertex3D; var _local26:Number; var _local27:Number; var _local28:Number; var _local29:Number; var _local30:NumberUV; var _local31:NumberUV; var _local32:NumberUV; var _local33:NumberUV; var _local5:Number = Math.max(3, this.segmentsW); var _local6:Number = Math.max(2, this.segmentsH); var _local7:Array = this.geometry.vertices; var _local8:Array = this.geometry.faces; var _local9:Array = new Array(); _local3 = 0; while (_local3 < (_local6 + 1)) { _local12 = Number((_local3 / _local6)); _local13 = (-(_arg1) * Math.cos((_local12 * Math.PI))); _local14 = (_arg1 * Math.sin((_local12 * Math.PI))); _local15 = new Array(); _local2 = 0; while (_local2 < _local5) { _local17 = Number(((2 * _local2) / _local5)); _local18 = (_local14 * Math.sin((_local17 * Math.PI))); _local19 = (_local14 * Math.cos((_local17 * Math.PI))); if (!(((((_local3 == 0)) || ((_local3 == _local6)))) && ((_local2 > 0)))){ _local16 = new Vertex3D(_local19, _local13, _local18); _local7.push(_local16); }; _local15.push(_local16); _local2++; }; _local9.push(_local15); _local3++; }; var _local10:int = _local9.length; _local3 = 0; while (_local3 < _local10) { _local20 = _local9[_local3].length; if (_local3 > 0){ _local2 = 0; while (_local2 < _local20) { _local21 = (_local2 == (_local20 - 1)); _local22 = _local9[_local3][(_local21) ? 0 : (_local2 + 1)]; _local23 = _local9[_local3][(_local21) ? (_local20 - 1) : _local2]; _local24 = _local9[(_local3 - 1)][(_local21) ? (_local20 - 1) : _local2]; _local25 = _local9[(_local3 - 1)][(_local21) ? 0 : (_local2 + 1)]; _local26 = (_local3 / (_local10 - 1)); _local27 = ((_local3 - 1) / (_local10 - 1)); _local28 = ((_local2 + 1) / _local20); _local29 = (_local2 / _local20); _local30 = new NumberUV(_local28, _local27); _local31 = new NumberUV(_local28, _local26); _local32 = new NumberUV(_local29, _local26); _local33 = new NumberUV(_local29, _local27); if (_local3 < (_local9.length - 1)){ _local8.push(new Triangle3D(this, new Array(_local22, _local23, _local24), material, new Array(_local31, _local32, _local33))); }; if (_local3 > 1){ _local8.push(new Triangle3D(this, new Array(_local22, _local24, _local25), material, new Array(_local31, _local33, _local30))); }; _local2++; }; }; _local3++; }; for each (_local11 in _local8) { _local11.renderCommand.create = createRenderTriangle; }; this.geometry.ready = true; if (Papervision3D.useRIGHTHANDED){ this.geometry.flipFaces(); }; } } }//package org.papervision3d.objects.primitives
Section 130
//BeginFill (org.papervision3d.objects.special.commands.BeginFill) package org.papervision3d.objects.special.commands { import flash.display.*; public class BeginFill implements IVectorShape { public var fillColor:uint; public var fillAlpha:Number; public function BeginFill(_arg1:uint=0, _arg2:Number=1):void{ this.fillColor = _arg1; this.fillAlpha = _arg2; } public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{ _arg1.beginFill(fillColor, fillAlpha); return (true); } } }//package org.papervision3d.objects.special.commands
Section 131
//CurveTo (org.papervision3d.objects.special.commands.CurveTo) package org.papervision3d.objects.special.commands { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.materials.special.*; public class CurveTo implements IVectorShape { public var anchor:Vertex3D; public var control:Vertex3D; private static var halfPI:Number = 1.5707963267949; public function CurveTo(_arg1:Vertex3D, _arg2:Vertex3D){ this.control = _arg1; this.anchor = _arg2; } public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{ if (((control.vertex3DInstance.visible) && (anchor.vertex3DInstance.visible))){ if (_arg2){ _arg1.curveTo(control.vertex3DInstance.x, control.vertex3DInstance.y, anchor.vertex3DInstance.x, anchor.vertex3DInstance.y); } else { _arg1.moveTo(control.vertex3DInstance.x, control.vertex3DInstance.y); }; return (true); }; return (false); } public function drawScaledStroke(_arg1:Vertex3D, _arg2:Graphics, _arg3:RenderSessionData, _arg4:VectorShapeMaterial):void{ if (((!(control.vertex3DInstance.visible)) || (!(anchor.vertex3DInstance.visible)))){ return; }; if (!_arg1.vertex3DInstance.visible){ _arg2.moveTo(control.vertex3DInstance.x, control.vertex3DInstance.y); return; }; var _local5:Number = _arg3.camera.focus; var _local6:Number = (_local5 * _arg3.camera.zoom); var _local7:Number = ((_local6 / (_local5 + anchor.vertex3DInstance.z)) * _arg4.lineThickness); var _local8:Number = ((_local6 / (_local5 + _arg1.vertex3DInstance.z)) * _arg4.lineThickness); var _local9:Number = ((_local6 / (_local5 + control.vertex3DInstance.z)) * _arg4.lineThickness); var _local10:Number = anchor.vertex3DInstance.x; var _local11:Number = anchor.vertex3DInstance.y; var _local12:Number = anchor.vertex3DInstance.x; var _local13:Number = anchor.vertex3DInstance.y; var _local14:Number = _arg1.vertex3DInstance.x; var _local15:Number = _arg1.vertex3DInstance.y; var _local16:Number = _arg1.vertex3DInstance.x; var _local17:Number = _arg1.vertex3DInstance.y; var _local18:Number = control.vertex3DInstance.x; var _local19:Number = control.vertex3DInstance.y; var _local20:Number = _local18; var _local21:Number = _local19; var _local22:Number = Math.atan2((_local14 - _local12), (_local15 - _local13)); var _local23:Number = Math.sin((_local22 - halfPI)); var _local24:Number = Math.cos((_local22 - halfPI)); _local10 = (_local10 - (_local23 * _local7)); _local11 = (_local11 - (_local24 * _local7)); _local12 = (_local12 + (_local23 * _local7)); _local13 = (_local13 + (_local24 * _local7)); _local14 = (_local14 + (_local23 * _local8)); _local15 = (_local15 + (_local24 * _local8)); _local16 = (_local16 - (_local23 * _local8)); _local17 = (_local17 - (_local24 * _local8)); _local18 = (_local18 - (_local23 * _local9)); _local19 = (_local19 - (_local24 * _local9)); _local20 = (_local20 + (_local23 * _local9)); _local21 = (_local21 + (_local24 * _local9)); _arg2.lineStyle(); _arg2.beginFill(_arg4.lineColor, _arg4.lineAlpha); _arg2.moveTo(_local10, _local11); _arg2.curveTo((anchor.vertex3DInstance.x - (Math.sin(_local22) * _local7)), (anchor.vertex3DInstance.y - (Math.cos(_local22) * _local7)), _local12, _local13); _arg2.curveTo(_local20, _local21, _local14, _local15); _arg2.curveTo((_arg1.vertex3DInstance.x + (Math.sin(_local22) * _local8)), (_arg1.vertex3DInstance.y + (Math.cos(_local22) * _local8)), _local16, _local17); _arg2.curveTo(_local18, _local19, _local10, _local11); _arg2.endFill(); } } }//package org.papervision3d.objects.special.commands
Section 132
//EndFill (org.papervision3d.objects.special.commands.EndFill) package org.papervision3d.objects.special.commands { import flash.display.*; public class EndFill implements IVectorShape { public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{ return (_arg2); } } }//package org.papervision3d.objects.special.commands
Section 133
//IVectorShape (org.papervision3d.objects.special.commands.IVectorShape) package org.papervision3d.objects.special.commands { import flash.display.*; public interface IVectorShape { function draw(_arg1:Graphics, _arg2:Boolean):Boolean; } }//package org.papervision3d.objects.special.commands
Section 134
//LineStyle (org.papervision3d.objects.special.commands.LineStyle) package org.papervision3d.objects.special.commands { import flash.display.*; public class LineStyle implements IVectorShape { public var caps:String; public var color:uint; public var joints:String; public var scaleMode:String; public var thickness:Number; public var pixelHinting:Boolean; public var miterLimit:Number; public var alpha:Number; public function LineStyle(_arg1:Number=-1, _arg2:uint=0, _arg3:Number=1, _arg4:Boolean=false, _arg5:String="normal", _arg6:String=null, _arg7:String=null, _arg8:Number=3){ this.thickness = _arg1; this.color = _arg2; this.alpha = _arg3; this.pixelHinting = _arg4; this.scaleMode = _arg5; this.caps = _arg6; this.joints = _arg7; this.miterLimit = _arg8; } public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{ if (thickness == -1){ _arg1.lineStyle(); } else { _arg1.lineStyle(thickness, color, alpha, pixelHinting, scaleMode, caps, joints, miterLimit); }; return (_arg2); } } }//package org.papervision3d.objects.special.commands
Section 135
//LineTo (org.papervision3d.objects.special.commands.LineTo) package org.papervision3d.objects.special.commands { import org.papervision3d.core.render.data.*; import flash.display.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.materials.special.*; public class LineTo implements IVectorShape { public var vertex:Vertex3D; private static const halfPI:Number = 1.5707963267949; public function LineTo(_arg1:Vertex3D){ this.vertex = _arg1; } public function drawScaledStroke(_arg1:Vertex3D, _arg2:Graphics, _arg3:RenderSessionData, _arg4:VectorShapeMaterial):void{ if (!vertex.vertex3DInstance.visible){ return; }; if (!_arg1.vertex3DInstance.visible){ _arg2.moveTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y); return; }; var _local5:Number = _arg3.camera.focus; var _local6:Number = (_local5 * _arg3.camera.zoom); var _local7:Number = ((_local6 / (_local5 + vertex.vertex3DInstance.z)) * _arg4.lineThickness); var _local8:Number = ((_local6 / (_local5 + _arg1.vertex3DInstance.z)) * _arg4.lineThickness); var _local9:Number = vertex.vertex3DInstance.x; var _local10:Number = vertex.vertex3DInstance.y; var _local11:Number = vertex.vertex3DInstance.x; var _local12:Number = vertex.vertex3DInstance.y; var _local13:Number = _arg1.vertex3DInstance.x; var _local14:Number = _arg1.vertex3DInstance.y; var _local15:Number = _arg1.vertex3DInstance.x; var _local16:Number = _arg1.vertex3DInstance.y; var _local17:Number = Math.atan2((_local13 - _local11), (_local14 - _local12)); var _local18:Number = Math.sin((_local17 - halfPI)); var _local19:Number = Math.cos((_local17 - halfPI)); _local9 = (_local9 - (_local18 * _local7)); _local10 = (_local10 - (_local19 * _local7)); _local11 = (_local11 + (_local18 * _local7)); _local12 = (_local12 + (_local19 * _local7)); _local13 = (_local13 + (_local18 * _local8)); _local14 = (_local14 + (_local19 * _local8)); _local15 = (_local15 - (_local18 * _local8)); _local16 = (_local16 - (_local19 * _local8)); _arg2.lineStyle(); _arg2.beginFill(_arg4.lineColor, _arg4.lineAlpha); _arg2.moveTo(_local9, _local10); _arg2.curveTo((vertex.vertex3DInstance.x - (Math.sin(_local17) * _local7)), (vertex.vertex3DInstance.y - (Math.cos(_local17) * _local7)), _local11, _local12); _arg2.lineTo(_local13, _local14); _arg2.curveTo((_arg1.vertex3DInstance.x + (Math.sin(_local17) * _local8)), (_arg1.vertex3DInstance.y + (Math.cos(_local17) * _local8)), _local15, _local16); _arg2.lineTo(_local9, _local10); _arg2.endFill(); } public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{ if (vertex.vertex3DInstance.visible){ if (_arg2){ _arg1.lineTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y); } else { _arg1.moveTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y); }; return (true); }; return (false); } } }//package org.papervision3d.objects.special.commands
Section 136
//MoveTo (org.papervision3d.objects.special.commands.MoveTo) package org.papervision3d.objects.special.commands { import flash.display.*; import org.papervision3d.core.geom.renderables.*; public class MoveTo implements IVectorShape { public var vertex:Vertex3D; public function MoveTo(_arg1:Vertex3D){ this.vertex = _arg1; } public function draw(_arg1:Graphics, _arg2:Boolean):Boolean{ if (vertex.vertex3DInstance.visible){ _arg1.moveTo(vertex.vertex3DInstance.x, vertex.vertex3DInstance.y); return (true); }; return (false); } } }//package org.papervision3d.objects.special.commands
Section 137
//Graphics3D (org.papervision3d.objects.special.Graphics3D) package org.papervision3d.objects.special { import org.papervision3d.core.geom.renderables.*; import org.papervision3d.objects.special.commands.*; public class Graphics3D { private var vectorshape:VectorShape3D; public function Graphics3D(_arg1:VectorShape3D){ this.vectorshape = _arg1; } public function endFill():void{ vectorshape.graphicsCommands.push(new EndFill()); } public function drawRect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ moveTo(_arg1, _arg2); lineTo((_arg1 + _arg3), _arg2); lineTo((_arg1 + _arg3), (_arg2 + _arg4)); lineTo(_arg1, (_arg2 + _arg4)); lineTo(_arg1, _arg2); } public function curveTo(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):void{ var _local5:Vertex3D = new Vertex3D(_arg1, _arg2, 0); vectorshape.geometry.vertices.push(_local5); var _local6:Vertex3D = new Vertex3D(_arg3, _arg4, 0); vectorshape.geometry.vertices.push(_local6); vectorshape.graphicsCommands.push(new CurveTo(_local5, _local6)); } public function moveTo(_arg1:Number, _arg2:Number):void{ var _local3:Vertex3D = new Vertex3D(_arg1, _arg2, 0); vectorshape.geometry.vertices.push(_local3); vectorshape.graphicsCommands.push(new MoveTo(_local3)); } public function clear():void{ vectorshape.geometry.vertices = []; vectorshape.geometry.faces = []; vectorshape.graphicsCommands = []; } public function drawRoundRect(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number):void{ moveTo(_arg1, (_arg2 + _arg6)); curveTo(_arg1, _arg2, (_arg1 + _arg5), _arg2); lineTo(((_arg1 + _arg3) - _arg5), _arg2); curveTo((_arg1 + _arg3), _arg2, (_arg1 + _arg3), (_arg2 + _arg6)); lineTo((_arg1 + _arg3), ((_arg2 + _arg4) - _arg6)); curveTo((_arg1 + _arg3), (_arg2 + _arg4), ((_arg1 + _arg3) - _arg6), (_arg2 + _arg4)); lineTo((_arg1 + _arg5), (_arg2 + _arg4)); curveTo(_arg1, (_arg2 + _arg4), _arg1, ((_arg2 + _arg4) - _arg6)); lineTo(_arg1, (_arg2 + _arg6)); } public function lineTo(_arg1:Number, _arg2:Number):void{ var _local3:Vertex3D = new Vertex3D(_arg1, _arg2, 0); vectorshape.geometry.vertices.push(_local3); vectorshape.graphicsCommands.push(new LineTo(_local3)); } public function drawCircle(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:int=8):void{ drawEllipse(_arg1, _arg2, _arg3, _arg3, _arg4); } public function drawEllipse(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int=8):void{ var _local11:Number; var _local12:Number; var _local6:Array = new Array(); var _local7:Number = ((2 * Math.PI) / _arg5); var _local8:int; while (_local8 < _arg5) { _local6[_local8] = new Object(); _local6[_local8].x = (_arg1 + (Math.sin((_local8 * _local7)) * _arg3)); _local6[_local8].y = (_arg2 + (Math.cos((_local8 * _local7)) * _arg4)); _local8++; }; var _local9:Number = ((_local6[0].x + _local6[(_arg5 - 1)].x) / 2); var _local10:Number = ((_local6[0].y + _local6[(_arg5 - 1)].y) / 2); moveTo(_local9, _local10); _local8 = 0; while (_local8 < (_arg5 - 1)) { _local11 = ((_local6[_local8].x + _local6[(_local8 + 1)].x) / 2); _local12 = ((_local6[_local8].y + _local6[(_local8 + 1)].y) / 2); curveTo(_local6[_local8].x, _local6[_local8].y, _local11, _local12); _local8++; }; curveTo(_local6[_local8].x, _local6[_local8].y, _local9, _local10); } public function beginFill(_arg1:uint, _arg2:Number=1):void{ vectorshape.graphicsCommands.push(new BeginFill(_arg1, _arg2)); } public function lineStyle(_arg1:Number=-1, _arg2:uint=0, _arg3:Number=1, _arg4:Boolean=false, _arg5:String="normal", _arg6:String=null, _arg7:String=null, _arg8:Number=3):void{ vectorshape.graphicsCommands.push(new LineStyle(_arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8)); } } }//package org.papervision3d.objects.special
Section 138
//VectorShape3D (org.papervision3d.objects.special.VectorShape3D) package org.papervision3d.objects.special { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.materials.special.*; import org.papervision3d.core.geom.*; public class VectorShape3D extends Vertices3D { public var graphicsCommands:Array; public var renderCommand:RenderVectorShape; public var graphics:Graphics3D; public function VectorShape3D(_arg1:MaterialObject3D, _arg2:Array=null, _arg3:String=null){ graphics = new Graphics3D(this); graphicsCommands = []; renderCommand = new RenderVectorShape(this); renderCommand.renderer = (_arg1 as VectorShapeMaterial); this.material = _arg1; super(_arg2, _arg3); } override public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ var _local6:Vertex3D; var _local3:Number = super.project(_arg1, _arg2); var _local4:Boolean; var _local5:Number = 0; for each (_local6 in geometry.vertices) { _local5 = (_local5 + _local6.vertex3DInstance.z); _local4 = (((_local6.vertex3DInstance.z > 0)) || (_local4)); }; if (_local4){ _arg2.renderer.addToRenderList(renderCommand); this.screenZ = (_local5 / geometry.vertices.length); renderCommand.screenZ = this.screenZ; }; return (_local3); } override public function set material(_arg1:MaterialObject3D):void{ super.material = _arg1; renderCommand.renderer = (_arg1 as VectorShapeMaterial); } } }//package org.papervision3d.objects.special
Section 139
//DisplayObject3D (org.papervision3d.objects.DisplayObject3D) package org.papervision3d.objects { import org.papervision3d.core.proto.*; import org.papervision3d.materials.utils.*; import org.papervision3d.core.render.data.*; import org.papervision3d.view.*; import org.papervision3d.core.geom.renderables.*; import org.papervision3d.core.math.*; import org.papervision3d.materials.shaders.*; import org.papervision3d.view.layer.*; import org.papervision3d.core.log.*; import org.papervision3d.core.data.*; import org.papervision3d.*; import org.papervision3d.core.material.*; public class DisplayObject3D extends DisplayObjectContainer3D { public var extra:Object; public var frustumTestMethod:int;// = 0 private var _rot:Quaternion; public var id:int; private var _rotationY:Number; private var _rotationZ:Number; public var cullTest:Number;// = 0 private var _lookatTarget:Number3D; public var materials:MaterialsList; public var meshSort:uint;// = 1 private var _rotationX:Number; private var _qYaw:Quaternion; private var _xAxis:Number3D; private var _zAxis:Number3D; private var _scaleDirty:Boolean;// = false private var _autoCalcScreenCoords:Boolean;// = false private var _tempScale:Number3D; private var _numClones:uint;// = 0 public var alpha:Number;// = 1 public var useClipping:Boolean;// = true public var screen:Number3D; private var _scaleX:Number; private var _scaleY:Number; private var _scaleZ:Number; public var geometry:GeometryObject3D; private var _qPitch:Quaternion; public var visible:Boolean; protected var _userData:UserData; public var screenZ:Number; public var container:ViewportLayer; protected var _useOwnContainer:Boolean;// = false public var transform:Matrix3D; private var _material:MaterialObject3D; private var _position:Number3D; public var name:String; protected var _scene:SceneObject3D;// = null private var _qRoll:Quaternion; private var _localRotationZ:Number;// = 0 public var culled:Boolean; public var world:Matrix3D; public var blendMode:String;// = "normal" private var _localRotationX:Number;// = 0 private var _localRotationY:Number;// = 0 public var view:Matrix3D; public var parent:DisplayObjectContainer3D; public var faces:Array; private var _yAxis:Number3D; public var flipLightDirection:Boolean;// = false private var _rotation:Number3D; protected var _transformDirty:Boolean;// = false protected var _sorted:Array; private var _rotationDirty:Boolean;// = false public var parentContainer:DisplayObject3D; public var testQuad:Boolean;// = true public var filters:Array; public static const MESH_SORT_CENTER:uint = 1; private static const LEFT:Number3D = new Number3D(-1, 0, 0); public static const MESH_SORT_CLOSE:uint = 3; private static const BACKWARD:Number3D = new Number3D(0, 0, -1); private static const FORWARD:Number3D = new Number3D(0, 0, 1); public static const MESH_SORT_FAR:uint = 2; private static const DOWN:Number3D = new Number3D(0, -1, 0); private static const UP:Number3D = new Number3D(0, 1, 0); private static const RIGHT:Number3D = new Number3D(1, 0, 0); private static var entry_count:uint = 0; private static var _newID:int = 0; private static var _tempMatrix:Matrix3D = Matrix3D.IDENTITY; public static var sortedArray:Array = new Array(); public static var faceLevelMode:Boolean; private static var _tempQuat:Quaternion = new Quaternion(); private static var toRADIANS:Number = 0.0174532925199433; private static var toDEGREES:Number = 57.2957795130823; public function DisplayObject3D(_arg1:String=null, _arg2:GeometryObject3D=null):void{ faces = new Array(); filters = []; screen = new Number3D(); _position = Number3D.ZERO; _lookatTarget = Number3D.ZERO; _zAxis = Number3D.ZERO; _xAxis = Number3D.ZERO; _yAxis = Number3D.ZERO; _rotation = Number3D.ZERO; _rot = new Quaternion(); _qPitch = new Quaternion(); _qYaw = new Quaternion(); _qRoll = new Quaternion(); super(); if (_arg1 != null){ PaperLogger.info(("DisplayObject3D: " + _arg1)); }; this.culled = false; this.transform = Matrix3D.IDENTITY; this.world = Matrix3D.IDENTITY; this.view = Matrix3D.IDENTITY; this.x = 0; this.y = 0; this.z = 0; rotationX = 0; rotationY = 0; rotationZ = 0; _localRotationX = (_localRotationY = (_localRotationZ = 0)); var _local3:Number = (Papervision3D.usePERCENT) ? 100 : 1; scaleX = _local3; scaleY = _local3; scaleZ = _local3; _tempScale = new Number3D(); this.visible = true; this.id = _newID++; this.name = ((_arg1) || (String(this.id))); _numClones = 0; if (_arg2){ addGeometry(_arg2); }; } public function set localRotationX(_arg1:Number):void{ _arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; if (this._transformDirty){ updateTransform(); }; _qPitch.setFromAxisAngle(transform.n11, transform.n21, transform.n31, (_localRotationX - _arg1)); this.transform.calculateMultiply3x3(_qPitch.matrix, transform); _localRotationX = _arg1; _rotationDirty = true; } public function set y(_arg1:Number):void{ this.transform.n24 = _arg1; } public function set z(_arg1:Number):void{ this.transform.n34 = _arg1; } override public function addChild(_arg1:DisplayObject3D, _arg2:String=null):DisplayObject3D{ _arg1 = super.addChild(_arg1, _arg2); if (_arg1.scene == null){ _arg1.scene = scene; }; if (this.useOwnContainer){ _arg1.parentContainer = this; }; return (_arg1); } public function setChildMaterialByName(_arg1:String, _arg2:MaterialObject3D):void{ setChildMaterial(getChildByName(_arg1, true), _arg2); } public function moveDown(_arg1:Number):void{ translate(_arg1, DOWN); } public function project(_arg1:DisplayObject3D, _arg2:RenderSessionData):Number{ var _local5:DisplayObject3D; if (this._transformDirty){ updateTransform(); }; this.world.calculateMultiply(_arg1.world, this.transform); if (_arg2.camera.culler){ if (this === _arg2.camera){ this.culled = true; } else { this.culled = (_arg2.camera.culler.testObject(this) < 0); }; if (this.culled){ _arg2.renderStatistics.culledObjects++; return (0); }; } else { this.culled = false; }; if (_arg1 !== _arg2.camera){ if (_arg2.camera.useProjectionMatrix){ this.view.calculateMultiply4x4(_arg1.view, this.transform); } else { this.view.calculateMultiply(_arg1.view, this.transform); }; } else { if (_arg2.camera.useProjectionMatrix){ this.view.calculateMultiply4x4(_arg2.camera.eye, this.transform); } else { this.view.calculateMultiply(_arg2.camera.eye, this.transform); }; }; if (_autoCalcScreenCoords){ calculateScreenCoords(_arg2.camera); }; var _local3:Number = 0; var _local4:Number = 0; for each (_local5 in this._childrenByName) { if (_local5.visible){ _local3 = (_local3 + _local5.project(this, _arg2)); _local4++; }; }; return ((this.screenZ = (_local3 / _local4))); } public function set scene(_arg1:SceneObject3D):void{ var _local2:DisplayObject3D; _scene = _arg1; for each (_local2 in this._childrenByName) { if (_local2.scene == null){ _local2.scene = _scene; }; }; } public function setChildMaterial(_arg1:DisplayObject3D, _arg2:MaterialObject3D, _arg3:MaterialObject3D=null):void{ var _local4:Triangle3D; if (!_arg1){ return; }; if (((!(_arg3)) || ((_arg1.material === _arg3)))){ _arg1.material = _arg2; }; if (((_arg1.geometry) && (_arg1.geometry.faces))){ for each (_local4 in _arg1.geometry.faces) { if (((!(_arg3)) || ((_local4.material === _arg3)))){ _local4.material = _arg2; }; }; }; } public function get userData():UserData{ return (_userData); } public function get material():MaterialObject3D{ return (_material); } public function set userData(_arg1:UserData):void{ _userData = _arg1; } public function set rotationX(_arg1:Number):void{ this._rotationX = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; this._transformDirty = true; } public function calculateScreenCoords(_arg1:CameraObject3D):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; if (_arg1.useProjectionMatrix){ _local2 = 0; _local3 = 0; _local4 = 0; _local5 = ((((_local2 * view.n41) + (_local3 * view.n42)) + (_local4 * view.n43)) + view.n44); _local6 = (_arg1.viewport.width / 2); _local7 = (_arg1.viewport.height / 2); screen.x = (((((_local2 * view.n11) + (_local3 * view.n12)) + (_local4 * view.n13)) + view.n14) / _local5); screen.y = (((((_local2 * view.n21) + (_local3 * view.n22)) + (_local4 * view.n23)) + view.n24) / _local5); screen.z = ((((_local2 * view.n31) + (_local3 * view.n32)) + (_local4 * view.n33)) + view.n34); screen.x = (screen.x * _local6); screen.y = (screen.y * _local7); } else { _local8 = ((_arg1.focus * _arg1.zoom) / (_arg1.focus + view.n34)); screen.x = (view.n14 * _local8); screen.y = (view.n24 * _local8); screen.z = view.n34; }; } public function lookAt(_arg1:DisplayObject3D, _arg2:Number3D=null):void{ var _local3:DisplayObject3D; var _local4:Matrix3D; if ((this is CameraObject3D)){ _position.reset(this.x, this.y, this.z); } else { _local3 = (this.parent as DisplayObject3D); if (_local3){ world.calculateMultiply(_local3.world, transform); } else { world.copy(transform); }; _position.reset(world.n14, world.n24, world.n34); }; if ((_arg1 is CameraObject3D)){ _lookatTarget.reset(_arg1.x, _arg1.y, _arg1.z); } else { _local3 = (_arg1.parent as DisplayObject3D); if (_local3){ _arg1.world.calculateMultiply(_local3.world, _arg1.transform); } else { _arg1.world.copy(_arg1.transform); }; _lookatTarget.reset(_arg1.world.n14, _arg1.world.n24, _arg1.world.n34); }; _zAxis.copyFrom(_lookatTarget); _zAxis.minusEq(_position); _zAxis.normalize(); if (_zAxis.modulo > 0.1){ _xAxis = Number3D.cross(_zAxis, ((_arg2) || (UP)), _xAxis); _xAxis.normalize(); _yAxis = Number3D.cross(_zAxis, _xAxis, _yAxis); _yAxis.normalize(); _local4 = this.transform; _local4.n11 = (_xAxis.x * _scaleX); _local4.n21 = (_xAxis.y * _scaleX); _local4.n31 = (_xAxis.z * _scaleX); _local4.n12 = (-(_yAxis.x) * _scaleY); _local4.n22 = (-(_yAxis.y) * _scaleY); _local4.n32 = (-(_yAxis.z) * _scaleY); _local4.n13 = (_zAxis.x * _scaleZ); _local4.n23 = (_zAxis.y * _scaleZ); _local4.n33 = (_zAxis.z * _scaleZ); _localRotationX = (_localRotationY = (_localRotationZ = 0)); this._transformDirty = false; this._rotationDirty = true; } else { PaperLogger.error("lookAt error"); }; } public function set rotationZ(_arg1:Number):void{ this._rotationZ = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; this._transformDirty = true; } public function pitch(_arg1:Number):void{ _arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; if (this._transformDirty){ updateTransform(); }; _qPitch.setFromAxisAngle(transform.n11, transform.n21, transform.n31, _arg1); this.transform.calculateMultiply3x3(_qPitch.matrix, transform); _localRotationX = (_localRotationX + _arg1); _rotationDirty = true; } public function set rotationY(_arg1:Number):void{ this._rotationY = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; this._transformDirty = true; } public function get position():Number3D{ _position.reset(this.x, this.y, this.z); return (_position); } public function get sceneX():Number{ return (this.world.n14); } public function get scaleX():Number{ if (Papervision3D.usePERCENT){ return ((this._scaleX * 100)); }; return (this._scaleX); } public function get scaleY():Number{ if (Papervision3D.usePERCENT){ return ((this._scaleY * 100)); }; return (this._scaleY); } public function get scaleZ():Number{ if (Papervision3D.usePERCENT){ return ((this._scaleZ * 100)); }; return (this._scaleZ); } public function get scale():Number{ if ((((this._scaleX == this._scaleY)) && ((this._scaleX == this._scaleZ)))){ if (Papervision3D.usePERCENT){ return ((this._scaleX * 100)); }; return (this._scaleX); //unresolved jump }; return (NaN); } public function set position(_arg1:Number3D):void{ this.x = _arg1.x; this.y = _arg1.y; this.z = _arg1.z; } public function moveUp(_arg1:Number):void{ translate(_arg1, UP); } public function get sceneZ():Number{ return (this.world.n34); } public function get sceneY():Number{ return (this.world.n24); } public function distanceTo(_arg1:DisplayObject3D):Number{ var _local2:Number = (this.x - _arg1.x); var _local3:Number = (this.y - _arg1.y); var _local4:Number = (this.z - _arg1.z); return (Math.sqrt((((_local2 * _local2) + (_local3 * _local3)) + (_local4 * _local4)))); } public function addGeometry(_arg1:GeometryObject3D=null):void{ if (_arg1){ this.geometry = _arg1; }; } protected function setParentContainer(_arg1:DisplayObject3D, _arg2:Boolean=true):void{ var _local3:DisplayObject3D; if (((_arg2) && (!((_arg1 == this))))){ parentContainer = _arg1; }; for each (_local3 in children) { _local3.setParentContainer(_arg1, _arg2); }; } private function updateMaterials(_arg1:DisplayObject3D, _arg2:MaterialObject3D, _arg3:MaterialObject3D):void{ var _local4:DisplayObject3D; var _local5:Triangle3D; _arg2.unregisterObject(_arg1); if ((((_arg3 is AbstractLightShadeMaterial)) || ((_arg3 is ShadedMaterial)))){ _arg3.registerObject(_arg1); }; if (_arg1.material === _arg2){ _arg1.material = _arg3; }; if (((((_arg1.geometry) && (_arg1.geometry.faces))) && (_arg1.geometry.faces.length))){ for each (_local5 in _arg1.geometry.faces) { if (_local5.material === _arg2){ _local5.material = _arg3; }; }; }; for each (_local4 in _arg1.children) { updateMaterials(_local4, _arg2, _arg3); }; } public function clone():DisplayObject3D{ var _local3:DisplayObject3D; var _local1:String = ((this.name + "_") + _numClones++); var _local2:DisplayObject3D = new DisplayObject3D(_local1); if (this.material){ _local2.material = this.material; }; if (this.materials){ _local2.materials = this.materials.clone(); }; if (this.geometry){ _local2.geometry = this.geometry.clone(_local2); _local2.geometry.ready = true; }; _local2.copyTransform(this); for each (_local3 in this.children) { _local2.addChild(_local3.clone()); }; return (_local2); } public function set material(_arg1:MaterialObject3D):void{ if (_material){ _material.unregisterObject(this); }; _material = _arg1; if (_material){ _material.registerObject(this); }; } private function updateRotation():void{ _tempScale.x = (Papervision3D.usePERCENT) ? (_scaleX * 100) : _scaleX; _tempScale.y = (Papervision3D.usePERCENT) ? (_scaleY * 100) : _scaleY; _tempScale.z = (Papervision3D.usePERCENT) ? (_scaleZ * 100) : _scaleZ; _rotation = Matrix3D.matrix2euler(this.transform, _rotation, _tempScale); this._rotationX = (_rotation.x * toRADIANS); this._rotationY = (_rotation.y * toRADIANS); this._rotationZ = (_rotation.z * toRADIANS); this._rotationDirty = false; } public function hitTestObject(_arg1:DisplayObject3D, _arg2:Number=1):Boolean{ var _local3:Number = (this.x - _arg1.x); var _local4:Number = (this.y - _arg1.y); var _local5:Number = (this.z - _arg1.z); var _local6:Number = (((_local3 * _local3) + (_local4 * _local4)) + (_local5 * _local5)); var _local7:Number = (this.geometry) ? this.geometry.boundingSphere.maxDistance : 0; var _local8:Number = (_arg1.geometry) ? _arg1.geometry.boundingSphere.maxDistance : 0; _local7 = (_local7 * _arg2); return (((_local7 + _local8) > _local6)); } public function translate(_arg1:Number, _arg2:Number3D):void{ var _local3:Number3D = _arg2.clone(); if (this._transformDirty){ updateTransform(); }; Matrix3D.rotateAxis(transform, _local3); this.x = (this.x + (_arg1 * _local3.x)); this.y = (this.y + (_arg1 * _local3.y)); this.z = (this.z + (_arg1 * _local3.z)); } public function get localRotationZ():Number{ return ((Papervision3D.useDEGREES) ? (_localRotationZ * toDEGREES) : _localRotationZ); } public function get localRotationY():Number{ return ((Papervision3D.useDEGREES) ? (_localRotationY * toDEGREES) : _localRotationY); } public function get z():Number{ return (this.transform.n34); } public function get localRotationX():Number{ return ((Papervision3D.useDEGREES) ? (_localRotationX * toDEGREES) : _localRotationX); } public function get x():Number{ return (this.transform.n14); } public function get y():Number{ return (this.transform.n24); } public function moveLeft(_arg1:Number):void{ translate(_arg1, LEFT); } public function replaceMaterialByName(_arg1:MaterialObject3D, _arg2:String):void{ if (!this.materials){ return; }; var _local3:MaterialObject3D = this.materials.getMaterialByName(_arg2); if (!_local3){ return; }; if (this.material === _local3){ this.material = _arg1; }; _local3 = this.materials.removeMaterial(_local3); _arg1 = this.materials.addMaterial(_arg1, _arg2); updateMaterials(this, _local3, _arg1); } public function get scene():SceneObject3D{ return (_scene); } public function set useOwnContainer(_arg1:Boolean):void{ _useOwnContainer = _arg1; setParentContainer(this, true); } public function getMaterialByName(_arg1:String):MaterialObject3D{ var _local3:DisplayObject3D; var _local2:MaterialObject3D = (this.materials) ? this.materials.getMaterialByName(_arg1) : null; if (_local2){ return (_local2); }; for each (_local3 in this._childrenByName) { _local2 = _local3.getMaterialByName(_arg1); if (_local2){ return (_local2); }; }; return (null); } public function copyTransform(_arg1):void{ var _local4:DisplayObject3D; if ((_arg1 is DisplayObject3D)){ _local4 = DisplayObject3D(_arg1); if (_local4._transformDirty){ _local4.updateTransform(); }; }; var _local2:Matrix3D = this.transform; var _local3:Matrix3D = ((_arg1 is DisplayObject3D)) ? _arg1.transform : _arg1; _local2.n11 = _local3.n11; _local2.n12 = _local3.n12; _local2.n13 = _local3.n13; _local2.n14 = _local3.n14; _local2.n21 = _local3.n21; _local2.n22 = _local3.n22; _local2.n23 = _local3.n23; _local2.n24 = _local3.n24; _local2.n31 = _local3.n31; _local2.n32 = _local3.n32; _local2.n33 = _local3.n33; _local2.n34 = _local3.n34; this._transformDirty = false; this._rotationDirty = true; } public function get rotationY():Number{ if (this._rotationDirty){ updateRotation(); }; return ((Papervision3D.useDEGREES) ? (this._rotationY * toDEGREES) : this._rotationY); } public function get rotationZ():Number{ if (this._rotationDirty){ updateRotation(); }; return ((Papervision3D.useDEGREES) ? (this._rotationZ * toDEGREES) : this._rotationZ); } public function set scaleY(_arg1:Number):void{ if (this._rotationDirty){ updateRotation(); }; if (Papervision3D.usePERCENT){ this._scaleY = (_arg1 / 100); } else { this._scaleY = _arg1; }; this._transformDirty = true; } public function roll(_arg1:Number):void{ _arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; if (_transformDirty){ updateTransform(); }; _qRoll.setFromAxisAngle(transform.n13, transform.n23, transform.n33, _arg1); transform.calculateMultiply3x3(_qRoll.matrix, transform); _localRotationZ = (_localRotationZ + _arg1); _rotationDirty = true; } public function set scaleZ(_arg1:Number):void{ if (this._rotationDirty){ updateRotation(); }; if (Papervision3D.usePERCENT){ this._scaleZ = (_arg1 / 100); } else { this._scaleZ = _arg1; }; this._transformDirty = true; } public function get rotationX():Number{ if (this._rotationDirty){ updateRotation(); }; return ((Papervision3D.useDEGREES) ? (this._rotationX * toDEGREES) : this._rotationX); } public function set scale(_arg1:Number):void{ if (this._rotationDirty){ updateRotation(); }; if (Papervision3D.usePERCENT){ _arg1 = (_arg1 / 100); }; this._scaleX = (this._scaleY = (this._scaleZ = _arg1)); this._transformDirty = true; } public function get autoCalcScreenCoords():Boolean{ return (_autoCalcScreenCoords); } public function yaw(_arg1:Number):void{ _arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; if (_transformDirty){ updateTransform(); }; _qYaw.setFromAxisAngle(transform.n12, transform.n22, transform.n32, _arg1); transform.calculateMultiply3x3(_qYaw.matrix, transform); _localRotationY = (_localRotationY + _arg1); _rotationDirty = true; } public function set scaleX(_arg1:Number):void{ if (this._rotationDirty){ updateRotation(); }; if (Papervision3D.usePERCENT){ this._scaleX = (_arg1 / 100); } else { this._scaleX = _arg1; }; this._transformDirty = true; } public function createViewportLayer(_arg1:Viewport3D, _arg2:Boolean=true):ViewportLayer{ var _local3:ViewportLayer = _arg1.getChildLayer(this, true); if (_arg2){ addChildrenToLayer(this, _local3); }; return (_local3); } override public function toString():String{ return (((((((this.name + ": x:") + Math.round(this.x)) + " y:") + Math.round(this.y)) + " z:") + Math.round(this.z))); } public function moveForward(_arg1:Number):void{ translate(_arg1, FORWARD); } public function addChildrenToLayer(_arg1:DisplayObject3D, _arg2:ViewportLayer):void{ var _local3:DisplayObject3D; for each (_local3 in _arg1.children) { _arg2.addDisplayObject3D(_local3); _local3.addChildrenToLayer(_local3, _arg2); }; } public function copyPosition(_arg1):void{ var _local2:Matrix3D = this.transform; var _local3:Matrix3D = ((_arg1 is DisplayObject3D)) ? _arg1.transform : _arg1; _local2.n14 = _local3.n14; _local2.n24 = _local3.n24; _local2.n34 = _local3.n34; } public function get useOwnContainer():Boolean{ return (_useOwnContainer); } public function updateTransform():void{ _rot.setFromEuler(_rotationY, _rotationZ, _rotationX); this.transform.copy3x3(_rot.matrix); _tempMatrix.reset(); _tempMatrix.n11 = this._scaleX; _tempMatrix.n22 = this._scaleY; _tempMatrix.n33 = this._scaleZ; this.transform.calculateMultiply(this.transform, _tempMatrix); _transformDirty = false; } public function hitTestPoint(_arg1:Number, _arg2:Number, _arg3:Number):Boolean{ var _local4:Number = (this.x - _arg1); var _local5:Number = (this.y - _arg2); var _local6:Number = (this.z - _arg3); var _local7:Number = (((_local4 * _local4) + (_local5 * _local5)) + (_local6 * _local6)); var _local8:Number = (this.geometry) ? this.geometry.boundingSphere.maxDistance : 0; return ((_local8 > _local7)); } public function moveBackward(_arg1:Number):void{ translate(_arg1, BACKWARD); } public function set localRotationY(_arg1:Number):void{ _arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; if (_transformDirty){ updateTransform(); }; _qYaw.setFromAxisAngle(transform.n12, transform.n22, transform.n32, (_localRotationY - _arg1)); transform.calculateMultiply3x3(_qYaw.matrix, transform); _localRotationY = _arg1; _rotationDirty = true; } public function set localRotationZ(_arg1:Number):void{ _arg1 = (Papervision3D.useDEGREES) ? (_arg1 * toRADIANS) : _arg1; if (_transformDirty){ updateTransform(); }; _qRoll.setFromAxisAngle(transform.n13, transform.n23, transform.n33, (_localRotationZ - _arg1)); transform.calculateMultiply3x3(_qRoll.matrix, transform); _localRotationZ = _arg1; _rotationDirty = true; } public function moveRight(_arg1:Number):void{ translate(_arg1, RIGHT); } public function set x(_arg1:Number):void{ this.transform.n14 = _arg1; } public function materialsList():String{ var _local2:String; var _local3:DisplayObject3D; var _local1 = ""; for (_local2 in this.materials) { _local1 = (_local1 + (_local2 + "\n")); }; for each (_local3 in this._childrenByName) { for (_local2 in _local3.materials.materialsByName) { _local1 = (_local1 + (("+ " + _local2) + "\n")); }; }; return (_local1); } public function set autoCalcScreenCoords(_arg1:Boolean):void{ _autoCalcScreenCoords = _arg1; } public static function get ZERO():DisplayObject3D{ return (new (DisplayObject3D)); } } }//package org.papervision3d.objects
Section 140
//BasicRenderEngine (org.papervision3d.render.BasicRenderEngine) package org.papervision3d.render { import org.papervision3d.core.proto.*; import org.papervision3d.core.render.data.*; import org.papervision3d.view.*; import org.papervision3d.core.render.command.*; import flash.geom.*; import org.papervision3d.core.render.material.*; import org.papervision3d.view.layer.*; import org.papervision3d.core.render.*; import org.papervision3d.core.clipping.*; import org.papervision3d.core.render.sort.*; import org.papervision3d.core.render.filter.*; import org.papervision3d.core.render.project.*; import org.papervision3d.events.*; import org.papervision3d.core.utils.*; public class BasicRenderEngine extends AbstractRenderEngine implements IRenderEngine { public var clipping:DefaultClipping; protected var renderDoneEvent:RendererEvent; public var sorter:IRenderSorter; public var projectionPipeline:ProjectionPipeline; protected var renderList:Array; protected var renderStatistics:RenderStatistics; protected var cleanRHD:RenderHitData; protected var projectionDoneEvent:RendererEvent; protected var renderSessionData:RenderSessionData; protected var stopWatch:StopWatch; public var filter:IRenderFilter; public function BasicRenderEngine():void{ cleanRHD = new RenderHitData(); super(); init(); } protected function doRender(_arg1:RenderSessionData, _arg2:Array=null):RenderStatistics{ var _local3:RenderableListItem; var _local5:ViewportLayer; stopWatch.reset(); stopWatch.start(); MaterialManager.getInstance().updateMaterialsBeforeRender(_arg1); filter.filter(renderList); sorter.sort(renderList); var _local4:Viewport3D = _arg1.viewPort; while ((_local3 = renderList.pop())) { _local5 = _local4.accessLayerFor(_local3, true); _local3.render(_arg1, _local5.graphicsChannel); _local4.lastRenderList.push(_local3); _local5.processRenderItem(_local3); }; MaterialManager.getInstance().updateMaterialsAfterRender(_arg1); _arg1.renderStatistics.renderTime = stopWatch.stop(); _arg1.viewPort.updateAfterRender(_arg1); return (renderStatistics); } protected function init():void{ renderStatistics = new RenderStatistics(); projectionPipeline = new BasicProjectionPipeline(); stopWatch = new StopWatch(); sorter = new BasicRenderSorter(); filter = new BasicRenderFilter(); renderList = new Array(); clipping = null; renderSessionData = new RenderSessionData(); renderSessionData.renderer = this; projectionDoneEvent = new RendererEvent(RendererEvent.PROJECTION_DONE, renderSessionData); renderDoneEvent = new RendererEvent(RendererEvent.RENDER_DONE, renderSessionData); } override public function renderScene(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D):RenderStatistics{ _arg2.viewport = _arg3.sizeRectangle; renderSessionData.scene = _arg1; renderSessionData.camera = _arg2; renderSessionData.viewPort = _arg3; renderSessionData.container = _arg3.containerSprite; renderSessionData.triangleCuller = _arg3.triangleCuller; renderSessionData.particleCuller = _arg3.particleCuller; renderSessionData.renderObjects = _arg1.objects; renderSessionData.renderLayers = null; renderSessionData.renderStatistics.clear(); renderSessionData.clipping = clipping; if (clipping){ clipping.reset(renderSessionData); }; _arg3.updateBeforeRender(renderSessionData); projectionPipeline.project(renderSessionData); if (hasEventListener(RendererEvent.PROJECTION_DONE)){ dispatchEvent(projectionDoneEvent); }; doRender(renderSessionData, null); if (hasEventListener(RendererEvent.RENDER_DONE)){ dispatchEvent(renderDoneEvent); }; return (renderSessionData.renderStatistics); } public function hitTestPoint2D(_arg1:Point, _arg2:Viewport3D):RenderHitData{ return (_arg2.hitTestPoint2D(_arg1)); } override public function removeFromRenderList(_arg1:IRenderListItem):int{ return (renderList.splice(renderList.indexOf(_arg1), 1)); } override public function addToRenderList(_arg1:RenderableListItem):int{ return (renderList.push(_arg1)); } private function getLayerObjects(_arg1:Array):Array{ var _local3:ViewportLayer; var _local2:Array = new Array(); for each (_local3 in _arg1) { _local2 = _local2.concat(_local3.getLayerObjects()); }; return (_local2); } public function destroy():void{ renderDoneEvent = null; projectionDoneEvent = null; projectionPipeline = null; sorter = null; filter = null; renderStatistics = null; renderList = null; renderSessionData.destroy(); renderSessionData = null; cleanRHD = null; stopWatch = null; clipping = null; } public function renderLayers(_arg1:SceneObject3D, _arg2:CameraObject3D, _arg3:Viewport3D, _arg4:Array=null):RenderStatistics{ renderSessionData.scene = _arg1; renderSessionData.camera = _arg2; renderSessionData.viewPort = _arg3; renderSessionData.container = _arg3.containerSprite; renderSessionData.triangleCuller = _arg3.triangleCuller; renderSessionData.particleCuller = _arg3.particleCuller; renderSessionData.renderObjects = getLayerObjects(_arg4); renderSessionData.renderLayers = _arg4; renderSessionData.renderStatistics.clear(); renderSessionData.clipping = clipping; _arg3.updateBeforeRender(renderSessionData); projectionPipeline.project(renderSessionData); if (hasEventListener(RendererEvent.PROJECTION_DONE)){ dispatchEvent(projectionDoneEvent); }; doRender(renderSessionData); if (hasEventListener(RendererEvent.RENDER_DONE)){ dispatchEvent(renderDoneEvent); }; return (renderSessionData.renderStatistics); } } }//package org.papervision3d.render
Section 141
//Scene3D (org.papervision3d.scenes.Scene3D) package org.papervision3d.scenes { import org.papervision3d.core.proto.*; public class Scene3D extends SceneObject3D { } }//package org.papervision3d.scenes
Section 142
//AlteHaasGrotesk (org.papervision3d.typography.fonts.AlteHaasGrotesk) package org.papervision3d.typography.fonts { import org.papervision3d.typography.*; public class AlteHaasGrotesk extends Font3D { public static var __motifs:Object = {}; public static var __initialized:Boolean = false; public static var __heights:Number = 118; public static var __widths:Object = {}; override public function get motifs():Object{ if (!__initialized){ initialize(); }; return (__motifs); } override public function get widths():Object{ if (!__initialized){ initialize(); }; return (__widths); } override public function get height():Number{ if (!__initialized){ initialize(); }; return (__heights); } public static function initialize():void{ initializeMotifs(); initializeWidths(); __initialized = true; } private static function initializeMotifs():void{ __motifs[" "] = []; __motifs["A"] = [["M", [32.15, 49.1]], ["C", [31.8, 50.55, 31.3, 51.8]], ["C", [30.1, 54.65, 29.15, 57.5]], ["C", [28.2, 60.4, 27.1, 63.3]], ["C", [26.7, 64.3, 26.4, 65.25]], ["C", [26.1, 66.2, 25.8, 67.3]], ["C", [25.5, 68.1, 25.9, 69.15]], ["C", [26.4, 69.8, 27.55, 69.9]], ["C", [28.7, 70, 29.9, 70]], ["L", [37.5, 70]], ["C", [38.4, 70, 39.5, 70]], ["C", [40.6, 70, 41.4, 69.8]], ["C", [42.7, 69.35, 42.6, 68.1]], ["C", [42.5, 66.95, 42, 65.8]], ["C", [41.8, 65.4, 41.8, 65.1]], ["C", [41.8, 64.7, 41.6, 64.3]], ["C", [40.3, 60.95, 39.2, 57.4]], ["C", [38.1, 53.9, 36.7, 50.45]], ["C", [36.5, 49.9, 36.3, 49.15]], ["C", [36.1, 48.45, 35.8, 47.75]], ["C", [35.5, 47.1, 35.1, 46.6]], ["C", [34.7, 46.15, 34.1, 46.15]], ["C", [33.9, 46.35, 33.7, 46.45]], ["C", [33.5, 46.5, 33.3, 46.7]], ["C", [32.5, 47.7, 32.15, 49.1]], ["M", [50.5, 47.75]], ["C", [52.5, 52.7, 54.25, 57.85]], ["C", [56, 62.95, 58.1, 67.9]], ["C", [58.3, 68.35, 58.35, 68.7]], ["C", [58.4, 69.05, 58.6, 69.4]], ["C", [59.2, 71.05, 59.8, 72.65]], ["C", [60.4, 74.25, 61, 75.8]], ["C", [61.4, 76.65, 61.6, 77.4]], ["C", [61.8, 78.1, 62.1, 78.95]], ["C", [63.4, 82.1, 64.5, 85.35]], ["C", [65.6, 88.5, 66.9, 91.65]], ["C", [67.1, 91.95, 67.1, 92.2]], ["C", [67.1, 92.4, 67.3, 92.7]], ["C", [67.4, 93.15, 67.65, 93.75]], ["C", [67.9, 94.35, 68.05, 94.95]], ["C", [68.2, 95.65, 68.1, 96.25]], ["C", [68, 96.8, 67.4, 97.1]], ["C", [66.6, 97.65, 64.75, 97.55]], ["C", [62.9, 97.45, 61.7, 97.45]], ["L", [57, 97.45]], ["C", [56.2, 97.45, 55.55, 97.5]], ["C", [54.9, 97.55, 54.3, 97.35]], ["C", [53.2, 97, 52.7, 96.15]], ["C", [52.2, 95.35, 51.95, 94.4]], ["C", [51.7, 93.55, 51.3, 92.6]], ["C", [50.8, 91.05, 50.25, 89.45]], ["C", [49.7, 87.85, 49.1, 86.3]], ["C", [48.8, 85.45, 48.55, 84.65]], ["C", [48.3, 83.95, 48, 83.35]], ["C", [47.7, 82.75, 47.1, 82.25]], ["C", [46.5, 81.85, 45.5, 81.65]], ["C", [45, 81.65, 44.55, 81.6]], ["C", [44.1, 81.55, 43.6, 81.55]], ["L", [27.8, 81.55]], ["C", [26.1, 81.55, 24.15, 81.5]], ["C", [22.2, 81.45, 21.1, 82.2]], ["C", [20.3, 82.85, 20, 83.85]], ["C", [19.7, 84.85, 19.3, 85.85]], ["C", [18.5, 87.55, 17.95, 89.4]], ["C", [17.4, 91.25, 16.7, 93]], ["C", [16.3, 94.05, 15.95, 95.1]], ["C", [15.6, 96.25, 14.8, 96.8]], ["C", [14.3, 97.2, 13.35, 97.4]], ["C", [12.4, 97.55, 11.25, 97.55]], ["C", [10.1, 97.55, 8.9, 97.5]], ["C", [7.7, 97.45, 6.8, 97.45]], ["C", [5.5, 97.45, 3.65, 97.5]], ["C", [1.8, 97.55, 1, 97]], ["C", [0.5, 96.7, 0.45, 96.15]], ["C", [0.4, 95.55, 0.55, 94.85]], ["C", [0.7, 94.25, 0.9, 93.65]], ["C", [1.1, 93, 1.3, 92.6]], ["C", [2.3, 90.3, 3.15, 87.95]], ["C", [4, 85.55, 4.9, 83.25]], ["C", [5.3, 82.4, 5.5, 81.65]], ["C", [5.7, 80.85, 6.1, 80]], ["C", [6.9, 77.9, 7.7, 75.7]], ["C", [8.5, 73.55, 9.3, 71.45]], ["C", [10.1, 69.4, 10.8, 67.45]], ["C", [11.5, 65.5, 12.3, 63.5]], ["C", [14.6, 58.05, 16.55, 52.45]], ["C", [18.5, 46.8, 20.8, 41.35]], ["C", [21, 40.8, 21.1, 40.4]], ["C", [21.2, 40.05, 21.4, 39.55]], ["C", [22.2, 37.45, 23, 35.25]], ["C", [23.8, 33.05, 24.7, 30.95]], ["C", [25.2, 29.8, 25.55, 28.7]], ["C", [25.9, 27.55, 26.8, 26.85]], ["C", [27.3, 26.55, 28.1, 26.35]], ["C", [28.3, 26.2, 28.5, 26.25]], ["C", [28.7, 26.35, 28.9, 26.2]], ["L", [37.7, 26.2]], ["C", [38.8, 26.2, 39.95, 26.15]], ["C", [41.1, 26.1, 41.8, 26.65]], ["C", [42.9, 27.25, 43.25, 28.35]], ["C", [43.6, 29.55, 44.1, 30.75]], ["C", [44.8, 32.4, 45.4, 34.05]], ["C", [46, 35.75, 46.7, 37.45]], ["C", [46.9, 38.05, 47.1, 38.6]], ["C", [47.3, 39.25, 47.5, 39.85]], ["C", [48.3, 41.85, 49, 43.8]], ["C", [49.7, 45.75, 50.5, 47.75]]]; __motifs["B"] = [["M", [22.5, 71.15]], ["L", [22.5, 80]], ["C", [22.5, 81.2, 22.55, 82.45]], ["C", [22.6, 83.7, 23.1, 84.4]], ["C", [23.5, 84.9, 24.4, 85.15]], ["C", [25.3, 85.4, 26.45, 85.45]], ["C", [27.6, 85.5, 28.8, 85.45]], ["C", [30.05, 85.4, 30.9, 85.4]], ["C", [33.9, 85.4, 36.7, 85.45]], ["C", [39.5, 85.5, 42, 85.15]], ["C", [44.55, 84.8, 46.5, 83.95]], ["C", [48.4, 83.1, 49.6, 81.3]], ["C", [50.1, 80.5, 50.4, 79.45]], ["C", [50.75, 78.4, 51.05, 77.3]], ["L", [51.05, 76.7]], ["C", [51.2, 75.3, 50.9, 73.7]], ["C", [50.5, 72.1, 50.1, 71.35]], ["C", [48.75, 67.7, 44.65, 66.3]], ["C", [42.9, 65.8, 40.85, 65.7]], ["C", [38.8, 65.6, 36.6, 65.6]], ["L", [25.3, 65.6]], ["C", [25.1, 65.8, 24.95, 65.75]], ["C", [24.8, 65.7, 24.6, 65.7]], ["C", [23.4, 66, 23, 66.75]], ["C", [22.5, 67.5, 22.5, 68.75]], ["C", [22.5, 70, 22.5, 71.15]], ["M", [40.7, 38.5]], ["C", [40.35, 38.4, 39.5, 38.4]], ["C", [38.35, 38.15, 36.75, 38.15]], ["C", [35.2, 38.2, 33.8, 38.2]], ["L", [25.3, 38.2]], ["C", [25.1, 38.3, 24.85, 38.3]], ["C", [24.6, 38.3, 24.4, 38.4]], ["C", [23.4, 38.7, 23, 39.35]], ["C", [22.5, 40.05, 22.5, 41.05]], ["C", [22.5, 42.15, 22.5, 43.2]], ["L", [22.5, 48.6]], ["C", [22.5, 49.3, 22.45, 50.1]], ["C", [22.4, 50.8, 22.5, 51.3]], ["L", [22.5, 52.35]], ["C", [22.7, 52.9, 22.8, 53.35]], ["C", [22.9, 53.8, 23.1, 54.25]], ["C", [23.5, 54.75, 24.35, 54.9]], ["C", [25.2, 55.1, 26.25, 55.15]], ["C", [27.3, 55.2, 28.4, 55.15]], ["C", [29.5, 55.1, 30.4, 55.1]], ["C", [31.95, 55.1, 33.55, 55.15]], ["C", [35.2, 55.2, 36.85, 55.2]], ["C", [38.55, 55.2, 40, 55.05]], ["C", [41.5, 54.9, 42.65, 54.55]], ["C", [45.6, 53.5, 47.1, 51]], ["C", [47.8, 49.7, 48, 47.6]], ["C", [48.2, 44.25, 47, 42.3]], ["C", [45.8, 40.3, 43.5, 39.2]], ["C", [42.9, 39, 42.2, 38.85]], ["C", [41.5, 38.7, 40.7, 38.5]], ["M", [60.55, 33.75]], ["C", [61.8, 35.85, 62.65, 38.5]], ["C", [62.85, 39.2, 62.9, 39.95]], ["C", [62.95, 40.6, 63.15, 41.4]], ["C", [63.25, 41.8, 63.2, 42.25]], ["C", [63.15, 42.6, 63.25, 43]], ["C", [63.35, 43.3, 63.3, 43.75]], ["C", [63.25, 44.25, 63.15, 44.4]], ["L", [63.15, 45.3]], ["C", [63.15, 45.6, 63.1, 46]], ["C", [63.05, 46.45, 63.05, 46.6]], ["C", [62.85, 47.3, 62.8, 47.85]], ["C", [62.75, 48.45, 62.55, 48.9]], ["C", [61.25, 52.55, 59.15, 54.8]], ["C", [58.45, 55.5, 57.6, 56]], ["C", [56.85, 56.5, 56.25, 57.3]], ["C", [56.05, 57.5, 55.75, 57.85]], ["C", [55.5, 58.2, 55.7, 58.75]], ["C", [55.9, 59.5, 57.05, 60.05]], ["C", [58.15, 60.6, 58.95, 61.1]], ["C", [61.6, 62.95, 63.35, 65.3]], ["C", [64.95, 67.6, 65.8, 70.7]], ["C", [66.1, 71.5, 66.2, 72.35]], ["C", [66.3, 73.2, 66.55, 74]], ["L", [66.55, 75.1]], ["C", [66.75, 76.2, 66.6, 78]], ["C", [66.45, 79.8, 66.2, 80.8]], ["C", [66, 81.85, 65.8, 82.7]], ["C", [65.65, 83.6, 65.35, 84.4]], ["C", [63.25, 89.4, 58.85, 92.6]], ["C", [57.15, 93.8, 55.2, 94.65]], ["C", [53.2, 95.5, 51.05, 96.2]], ["C", [49.95, 96.6, 48.75, 96.75]], ["C", [47.5, 96.9, 46.45, 97.1]], ["C", [45.95, 97.2, 45.45, 97.2]], ["C", [45, 97.2, 44.55, 97.3]], ["C", [44.15, 97.4, 43.7, 97.3]], ["C", [43.2, 97.2, 42.7, 97.4]], ["C", [42.35, 97.5, 41.9, 97.45]], ["C", [41.45, 97.4, 40.9, 97.4]], ["L", [11.7, 97.4]], ["C", [10, 97.4, 8.9, 97.25]], ["C", [7.7, 97.1, 7.25, 95.9]], ["C", [6.95, 95.1, 7, 93.45]], ["C", [7.05, 91.8, 7.05, 90.7]], ["L", [7.05, 32]], ["C", [7.05, 30.8, 7, 29.5]], ["C", [6.95, 28.1, 7.4, 27.35]], ["C", [7.8, 26.6, 8.95, 26.3]], ["C", [9.15, 26.2, 9.35, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [39.55, 26.2]], ["C", [40.25, 26.2, 40.9, 26.15]], ["C", [41.65, 26.1, 42.25, 26.2]], ["C", [42.7, 26.4, 43.2, 26.3]], ["C", [43.75, 26.2, 44.25, 26.3]], ["L", [44.8, 26.3]], ["C", [45.4, 26.5, 46.1, 26.45]], ["C", [46.75, 26.4, 47.4, 26.6]], ["C", [48.25, 26.8, 48.95, 26.9]], ["C", [49.75, 27, 50.55, 27.2]], ["C", [52.45, 27.9, 54.15, 28.55]], ["C", [55.8, 29.2, 57.25, 30.2]], ["C", [59.25, 31.65, 60.55, 33.75]]]; __motifs["C"] = [["M", [53.9, 47.5]], ["C", [53.5, 46.3, 52.9, 45.4]], ["C", [51, 42.1, 47.9, 40.2]], ["C", [45.8, 38.9, 43.2, 38.1]], ["C", [41.5, 37.5, 38.95, 37.5]], ["C", [36.4, 37.5, 34.5, 38]], ["C", [33.7, 38.15, 33.05, 38.3]], ["C", [32.4, 38.45, 31.7, 38.8]], ["C", [24.9, 41.7, 22.1, 48.4]], ["C", [21.6, 49.6, 21.2, 50.85]], ["C", [20.8, 52.2, 20.3, 53.6]], ["C", [20.2, 54.3, 20.1, 54.85]], ["C", [20, 55.5, 19.9, 56.2]], ["C", [19.7, 56.8, 19.75, 57.45]], ["C", [19.8, 58.1, 19.6, 58.8]], ["C", [19.4, 59.6, 19.45, 60.45]], ["C", [19.5, 61.3, 19.5, 62.1]], ["C", [19.5, 62.5, 19.45, 62.9]], ["C", [19.4, 63.3, 19.5, 63.7]], ["L", [19.5, 64.6]], ["C", [19.7, 65.15, 19.65, 65.6]], ["C", [19.6, 66.1, 19.8, 66.6]], ["C", [19.8, 67.25, 20, 68.2]], ["C", [20.2, 69.35, 20.4, 70.25]], ["C", [20.6, 71.25, 20.9, 72.1]], ["C", [22.3, 76.3, 24.5, 79.25]], ["C", [26.7, 82.2, 30.3, 84.1]], ["C", [31.4, 84.6, 32.6, 84.95]], ["C", [33.8, 85.3, 35.2, 85.75]], ["C", [35.7, 85.85, 36.15, 85.9]], ["C", [36.6, 85.95, 37.1, 85.95]], ["L", [37.9, 85.95]], ["C", [38.4, 86.1, 39.2, 86.05]], ["C", [40, 86.05, 40.5, 85.95]], ["C", [41.1, 85.95, 41.4, 85.85]], ["C", [42.6, 85.6, 43.65, 85.4]], ["C", [44.7, 85.2, 45.7, 84.7]], ["C", [48, 83.75, 49.65, 82.05]], ["C", [51.3, 80.4, 52.6, 78.3]], ["C", [53.2, 77.3, 53.6, 76.1]], ["C", [54, 74.9, 54.5, 73.7]], ["C", [54.8, 72.6, 55.1, 71.7]], ["C", [55.4, 70.8, 56.4, 70.3]], ["C", [57, 70.1, 57.9, 70.1]], ["C", [58.8, 70.1, 59.6, 70.1]], ["L", [65.7, 70.1]], ["C", [66.6, 70.1, 67.55, 70.1]], ["C", [68.5, 70.1, 69.1, 70.5]], ["C", [69.8, 71, 69.85, 72.1]], ["C", [69.9, 73.2, 69.6, 74.2]], ["L", [69, 76.9]], ["C", [68.5, 78.4, 68.05, 79.8]], ["C", [67.6, 81.2, 66.9, 82.5]], ["C", [66.4, 83.3, 66.1, 84]], ["C", [65.8, 84.8, 65.3, 85.5]], ["C", [59.8, 94.1, 49.3, 97.5]], ["C", [48.2, 97.9, 47.1, 98.1]], ["C", [46, 98.3, 44.9, 98.5]], ["C", [44.4, 98.7, 43.95, 98.65]], ["C", [43.5, 98.55, 43, 98.8]], ["C", [42.3, 98.8, 41.65, 98.85]], ["C", [41, 98.9, 40.3, 99]], ["L", [38.7, 99]], ["C", [37.8, 99, 36.9, 99]], ["C", [36, 99, 35.2, 98.8]], ["C", [34.9, 98.7, 34.2, 98.7]], ["C", [33.5, 98.6, 32.8, 98.55]], ["C", [32.1, 98.4, 31.3, 98.3]], ["C", [30.3, 98, 29.35, 97.8]], ["C", [28.4, 97.6, 27.4, 97.3]], ["C", [26.5, 96.95, 25.6, 96.6]], ["C", [24.7, 96.3, 23.9, 95.9]], ["C", [17.9, 93.3, 13.75, 88.95]], ["C", [9.6, 84.55, 7, 78.6]], ["C", [6.4, 77.1, 6, 75.6]], ["C", [5.6, 74.1, 5.1, 72.5]], ["C", [4.9, 72, 4.9, 71.6]], ["C", [4.9, 71.3, 4.8, 70.9]], ["C", [4.6, 70, 4.5, 69]], ["C", [4.4, 68, 4.2, 67.1]], ["C", [4, 66.6, 4.05, 66.25]], ["C", [4.1, 65.9, 4, 65.45]], ["L", [4, 63.6]], ["C", [3.8, 63.1, 3.8, 62.1]], ["C", [3.8, 61.05, 4, 60.6]], ["C", [4.1, 60.3, 4.05, 59.95]], ["C", [4, 59.6, 4, 59.4]], ["L", [4, 58.5]], ["C", [4.2, 57.7, 4.25, 56.8]], ["C", [4.3, 55.9, 4.4, 54.95]], ["C", [4.6, 54.2, 4.7, 53.45]], ["C", [4.8, 52.7, 5, 51.9]], ["C", [5.4, 50.5, 5.7, 49.15]], ["C", [6, 47.8, 6.5, 46.55]], ["C", [7, 45.3, 7.55, 44]], ["C", [8.1, 42.7, 8.8, 41.6]], ["C", [10.4, 38.8, 12.1, 36.6]], ["C", [12.6, 35.9, 13.2, 35.3]], ["C", [13.8, 34.7, 14.4, 34.05]], ["C", [16.9, 31.6, 19.65, 29.8]], ["C", [22.4, 28.1, 25.9, 26.7]], ["C", [27.1, 26.2, 28.4, 25.8]], ["C", [29.7, 25.5, 31.1, 25.2]], ["C", [31.7, 25, 32.3, 25]], ["C", [32.9, 25, 33.4, 24.8]], ["C", [34.2, 24.7, 34.95, 24.65]], ["C", [35.7, 24.6, 36.5, 24.5]], ["C", [36.7, 24.4, 37, 24.5]], ["C", [37.3, 24.6, 37.5, 24.5]], ["C", [48, 24.3, 54.8, 28.1]], ["C", [61.6, 31.9, 65.6, 38.15]], ["C", [66.7, 39.9, 67.4, 41.65]], ["C", [68.1, 43.4, 68.7, 45.5]], ["C", [68.9, 46.2, 69.1, 47.1]], ["C", [69.3, 48, 69, 48.75]], ["C", [68.8, 49.4, 68.25, 49.55]], ["C", [67.7, 49.7, 67, 49.9]], ["L", [66.2, 49.9]], ["C", [65.6, 50.1, 64.85, 50.05]], ["C", [64.1, 50, 63.4, 50]], ["C", [62.5, 50, 61.25, 50.05]], ["C", [60, 50.1, 58.8, 50.05]], ["C", [57.6, 50, 56.6, 49.85]], ["C", [55.6, 49.7, 55.1, 49.4]], ["C", [54.3, 48.65, 53.9, 47.5]]]; __motifs["D"] = [["M", [41.3, 40.15]], ["C", [40.45, 39.9, 39.5, 39.7]], ["C", [38.7, 39.6, 38.05, 39.55]], ["C", [37.4, 39.5, 36.6, 39.3]], ["C", [36.25, 39.2, 35.8, 39.25]], ["C", [35.4, 39.3, 35.1, 39.2]], ["L", [32.9, 39.2]], ["C", [32.4, 39.1, 31.8, 39.15]], ["C", [31.2, 39.2, 30.6, 39.2]], ["L", [26.1, 39.2]], ["C", [25.95, 39.4, 25.45, 39.3]], ["C", [25, 39.2, 24.7, 39.3]], ["C", [24.2, 39.5, 23.75, 39.65]], ["C", [23.2, 39.8, 22.9, 40.3]], ["C", [22.5, 40.8, 22.5, 41.7]], ["C", [22.5, 42.6, 22.5, 43.7]], ["C", [22.5, 45, 22.45, 46.45]], ["C", [22.4, 47.8, 22.4, 49.2]], ["L", [22.4, 77.1]], ["C", [22.4, 77.7, 22.35, 78.4]], ["C", [22.3, 79.1, 22.5, 79.65]], ["L", [22.5, 80.6]], ["C", [22.5, 81.3, 22.55, 81.95]], ["C", [22.6, 82.6, 22.8, 83.1]], ["C", [23.4, 84.3, 25.1, 84.35]], ["C", [26.8, 84.4, 28.6, 84.4]], ["C", [32.5, 84.4, 36.5, 84.35]], ["C", [40.55, 84.3, 43.3, 83.2]], ["C", [47, 81.75, 49.15, 79.2]], ["C", [51.3, 76.7, 52.85, 73]], ["C", [53.2, 72.2, 53.4, 71.25]], ["C", [53.6, 70.2, 53.9, 69.25]], ["L", [53.9, 68.4]], ["C", [54.1, 67.7, 54.1, 66.9]], ["C", [54.1, 66.1, 54.3, 65.3]], ["L", [54.3, 64.3]], ["C", [54.5, 63.8, 54.5, 62.7]], ["C", [54.5, 61.6, 54.3, 61.1]], ["L", [54.3, 59.2]], ["C", [54.1, 58.3, 54.05, 57.3]], ["C", [54, 56.3, 53.8, 55.5]], ["C", [53.6, 55, 53.65, 54.55]], ["C", [53.7, 54.1, 53.5, 53.6]], ["C", [53.05, 52, 52.55, 50.6]], ["C", [52.1, 49.1, 51.3, 47.8]], ["C", [49.8, 45.4, 47.85, 43.65]], ["C", [45.9, 41.9, 43.1, 40.7]], ["C", [42.2, 40.4, 41.3, 40.15]], ["M", [59.35, 33.75]], ["C", [60.35, 34.5, 61.15, 35.5]], ["L", [62, 36.3]], ["C", [62.55, 37.1, 63.2, 37.9]], ["C", [63.8, 38.6, 64.35, 39.4]], ["C", [65.65, 41.5, 66.65, 43.85]], ["C", [67.65, 46.25, 68.45, 48.8]], ["C", [68.95, 50.1, 69.1, 51.5]], ["C", [69.25, 52.9, 69.55, 54.3]], ["C", [69.55, 54.8, 69.6, 55.15]], ["C", [69.65, 55.5, 69.65, 55.9]], ["C", [69.8, 56.5, 69.8, 57.2]], ["C", [69.75, 57.9, 69.9, 58.4]], ["L", [69.9, 59.5]], ["C", [69.9, 59.8, 69.95, 60.3]], ["C", [70, 60.85, 70, 61.4]], ["C", [70, 62, 69.95, 62.5]], ["C", [69.9, 63.05, 69.9, 63.2]], ["C", [69.9, 63.9, 69.85, 64.55]], ["C", [69.8, 65.2, 69.8, 65.8]], ["C", [69.65, 66.3, 69.7, 66.8]], ["C", [69.75, 67.3, 69.65, 67.8]], ["C", [69.45, 68.9, 69.35, 70]], ["C", [69.25, 71.1, 68.95, 72.2]], ["C", [68.45, 73.9, 68, 75.5]], ["C", [67.65, 77, 67.05, 78.5]], ["C", [65.35, 82.7, 62.85, 86.1]], ["C", [60.35, 89.5, 56.85, 91.9]], ["C", [54.85, 93.3, 52.7, 94.35]], ["C", [50.55, 95.3, 48.05, 96.1]], ["C", [47, 96.45, 46, 96.55]], ["C", [44.9, 96.7, 43.85, 97]], ["C", [43.3, 97.1, 42.85, 97.1]], ["C", [42.45, 97.1, 41.95, 97.2]], ["C", [41.55, 97.3, 41.1, 97.25]], ["C", [40.7, 97.2, 40.25, 97.3]], ["C", [40.05, 97.4, 39.65, 97.35]], ["C", [39.25, 97.3, 39, 97.4]], ["C", [38.25, 97.6, 37, 97.5]], ["C", [35.85, 97.4, 34.9, 97.4]], ["L", [11.6, 97.4]], ["C", [9.9, 97.4, 8.8, 97.25]], ["C", [7.6, 97.1, 7.15, 95.9]], ["C", [6.85, 95.1, 6.9, 93.45]], ["C", [6.95, 91.8, 6.95, 90.7]], ["L", [6.95, 32]], ["C", [6.95, 30.8, 6.9, 29.5]], ["C", [6.85, 28.1, 7.3, 27.35]], ["C", [7.7, 26.7, 8.85, 26.3]], ["C", [9.05, 26.2, 9.25, 26.25]], ["C", [9.4, 26.3, 9.6, 26.2]], ["L", [36.5, 26.2]], ["C", [37.15, 26.2, 37.8, 26.15]], ["C", [38.45, 26.1, 38.9, 26.2]], ["L", [40.15, 26.2]], ["C", [40.65, 26.4, 41.2, 26.35]], ["C", [41.85, 26.3, 42.35, 26.5]], ["C", [42.9, 26.7, 43.5, 26.65]], ["C", [44.05, 26.6, 44.65, 26.8]], ["C", [46.05, 27.1, 47.3, 27.4]], ["C", [48.65, 27.65, 49.85, 28.1]], ["C", [50.95, 28.6, 52.05, 29]], ["C", [53.15, 29.45, 54.15, 30]], ["C", [56.65, 31.65, 58.75, 33.1]], ["L", [59.35, 33.75]]]; __motifs["E"] = [["M", [58, 26.3]], ["C", [59.15, 26.4, 59.6, 27.1]], ["C", [59.8, 27.45, 59.85, 27.8]], ["C", [59.9, 28.2, 60.1, 28.6]], ["L", [60.1, 29.75]], ["C", [60.2, 30.4, 60.15, 31.2]], ["C", [60.1, 32, 60.1, 32.7]], ["C", [60.1, 33.5, 60.15, 34.25]], ["C", [60.2, 35, 60.1, 35.7]], ["C", [60, 36.2, 60, 37.2]], ["C", [59.7, 38.4, 59.05, 38.8]], ["C", [58.4, 39.2, 57.5, 39.2]], ["C", [56.6, 39.2, 55.6, 39.2]], ["L", [30.6, 39.2]], ["C", [29.85, 39.2, 28.75, 39.15]], ["C", [27.75, 39.1, 26.65, 39.15]], ["C", [25.65, 39.2, 24.7, 39.35]], ["C", [23.85, 39.5, 23.4, 39.8]], ["C", [22.7, 40.3, 22.55, 41.25]], ["C", [22.4, 42.2, 22.4, 43.4]], ["L", [22.4, 52]], ["C", [22.6, 52.75, 22.8, 53.3]], ["C", [23, 53.9, 23.55, 54.2]], ["C", [24.1, 54.6, 24.9, 54.65]], ["C", [25.75, 54.7, 26.6, 54.7]], ["L", [49.2, 54.7]], ["C", [49.9, 54.7, 51, 54.65]], ["C", [52, 54.6, 53.05, 54.65]], ["C", [54, 54.7, 54.9, 54.8]], ["C", [55.7, 54.85, 56.1, 55.15]], ["C", [56.6, 55.45, 56.85, 56.4]], ["C", [57.05, 57.25, 57.1, 58.35]], ["C", [57.15, 59.35, 57.1, 60.5]], ["C", [57.05, 61.55, 57.05, 62.4]], ["C", [57.05, 63.1, 57.05, 63.8]], ["C", [57.05, 64.5, 56.85, 65]], ["C", [56.6, 65.8, 56, 66.3]], ["C", [55.5, 66.6, 54.65, 66.7]], ["C", [53.8, 66.8, 52.8, 66.8]], ["C", [51.7, 66.8, 50.7, 66.75]], ["C", [49.6, 66.7, 48.95, 66.7]], ["L", [29.4, 66.7]], ["C", [28.2, 66.7, 27.1, 66.65]], ["C", [26.05, 66.6, 25.05, 66.75]], ["C", [24.1, 66.9, 23.5, 67.3]], ["C", [22.8, 67.8, 22.5, 68.7]], ["C", [22.4, 69.2, 22.4, 69.75]], ["C", [22.4, 70.3, 22.4, 70.8]], ["L", [22.4, 80.2]], ["C", [22.4, 81.4, 22.55, 82.35]], ["C", [22.7, 83.3, 23.4, 83.85]], ["C", [23.75, 84.1, 24.15, 84.15]], ["C", [24.6, 84.2, 25.1, 84.4]], ["L", [26.1, 84.4]], ["C", [26.6, 84.5, 27.2, 84.45]], ["C", [27.85, 84.4, 28.3, 84.4]], ["L", [56.6, 84.4]], ["C", [57.4, 84.4, 58.15, 84.4]], ["C", [58.95, 84.4, 59.5, 84.7]], ["C", [60.3, 85, 60.6, 85.85]], ["C", [60.8, 86.3, 60.85, 87]], ["C", [60.9, 87.75, 60.9, 88.5]], ["L", [60.9, 93.1]], ["C", [60.9, 94.35, 60.8, 95.35]], ["C", [60.7, 96.45, 59.9, 96.9]], ["C", [59.35, 97.4, 58.35, 97.4]], ["C", [57.4, 97.4, 56.3, 97.4]], ["L", [11.35, 97.4]], ["C", [9.9, 97.4, 8.9, 97.25]], ["C", [7.8, 97.1, 7.3, 96.3]], ["C", [6.95, 95.7, 6.95, 94.75]], ["C", [6.95, 93.8, 6.95, 92.9]], ["L", [6.95, 30.5]], ["C", [6.95, 29.65, 6.95, 28.7]], ["C", [6.95, 27.8, 7.3, 27.35]], ["C", [7.7, 26.6, 8.85, 26.3]], ["C", [9.05, 26.2, 9.25, 26.25]], ["C", [9.4, 26.3, 9.6, 26.2]], ["L", [55.7, 26.2]], ["C", [56.95, 26.2, 58, 26.3]]]; __motifs["F"] = [["M", [56.95, 37.1]], ["C", [56.7, 37.6, 56.55, 38.05]], ["C", [56.4, 38.5, 56, 38.8]], ["C", [55.2, 39.4, 53.25, 39.35]], ["C", [51.3, 39.3, 49.9, 39.3]], ["L", [30.6, 39.3]], ["C", [29, 39.3, 26.75, 39.25]], ["C", [24.5, 39.2, 23.55, 39.8]], ["C", [22.9, 40.2, 22.5, 41.3]], ["C", [22.3, 42, 22.35, 43.1]], ["C", [22.4, 44.2, 22.4, 45]], ["L", [22.4, 49.8]], ["C", [22.4, 50.3, 22.35, 51]], ["C", [22.3, 51.7, 22.4, 52.2]], ["L", [22.4, 53.3]], ["C", [22.6, 54.2, 22.85, 54.8]], ["C", [23.1, 55.4, 23.95, 55.7]], ["C", [24.4, 55.9, 25.1, 55.95]], ["C", [25.85, 56, 26.6, 56]], ["L", [44.35, 56]], ["C", [45.1, 56, 46.15, 55.95]], ["C", [47.2, 55.9, 48.25, 55.95]], ["C", [49.3, 56, 50.15, 56.1]], ["C", [51.05, 56.2, 51.4, 56.5]], ["C", [52.4, 57.2, 52.35, 59.15]], ["C", [52.3, 61.1, 52.3, 62.7]], ["C", [52.3, 63.5, 52.35, 64.45]], ["C", [52.4, 65.4, 52.2, 66.2]], ["C", [51.8, 67.3, 51.1, 67.7]], ["C", [50.4, 68.1, 48.4, 68.05]], ["C", [46.45, 68, 45.1, 68]], ["L", [28.7, 68]], ["C", [26.8, 68, 25, 68.1]], ["C", [23.2, 68.2, 22.7, 69.5]], ["C", [22.5, 69.8, 22.5, 70.15]], ["C", [22.5, 70.5, 22.4, 70.8]], ["L", [22.4, 90.15]], ["C", [22.4, 91.5, 22.45, 93.55]], ["C", [22.5, 95.6, 22, 96.5]], ["C", [21.75, 97, 21.2, 97.15]], ["C", [20.7, 97.3, 20.2, 97.5]], ["C", [19.55, 97.7, 18.7, 97.6]], ["C", [17.9, 97.5, 17.15, 97.5]], ["L", [11.35, 97.5]], ["C", [10.2, 97.5, 9.3, 97.45]], ["C", [8.35, 97.4, 7.7, 96.9]], ["C", [7.05, 96.45, 7, 95.35]], ["C", [6.95, 94.35, 6.95, 93.2]], ["L", [6.95, 33.4]], ["C", [6.95, 32, 6.9, 30.1]], ["C", [6.85, 28.2, 7.3, 27.45]], ["C", [7.7, 26.7, 8.85, 26.4]], ["C", [9.05, 26.3, 9.25, 26.35]], ["C", [9.4, 26.4, 9.6, 26.3]], ["L", [52.75, 26.3]], ["C", [53.8, 26.3, 54.85, 26.4]], ["C", [55.8, 26.5, 56.3, 27.1]], ["C", [56.7, 27.65, 56.9, 28.45]], ["C", [57.05, 29.3, 57.05, 30.35]], ["C", [57.05, 31.4, 57, 32.45]], ["C", [56.95, 33.5, 56.95, 34.4]], ["C", [56.95, 35.1, 57, 35.8]], ["C", [57.05, 36.5, 56.95, 37.1]]]; __motifs["G"] = [["M", [48.1, 40.1]], ["C", [46.2, 38.75, 43.5, 38]], ["C", [43, 37.8, 42.4, 37.75]], ["C", [41.8, 37.7, 41.3, 37.6]], ["C", [41, 37.5, 40.4, 37.5]], ["C", [39.2, 37.3, 37.4, 37.45]], ["C", [35.6, 37.6, 34.6, 37.8]], ["C", [33.9, 38, 33.3, 38.1]], ["C", [32.7, 38.15, 32.1, 38.45]], ["C", [29.5, 39.6, 27.45, 41.1]], ["C", [25.4, 42.55, 23.9, 44.85]], ["C", [22.5, 46.75, 21.7, 48.95]], ["C", [20.9, 51.15, 20.2, 53.7]], ["C", [19.9, 54.8, 19.8, 55.9]], ["C", [19.7, 56.95, 19.5, 58.1]], ["L", [19.5, 59.35]], ["C", [19.3, 60, 19.35, 60.7]], ["C", [19.4, 61.35, 19.4, 62.1]], ["C", [19.4, 63.8, 19.5, 65.45]], ["C", [19.6, 67.2, 20, 68.7]], ["C", [20.1, 69.1, 20.1, 69.4]], ["C", [20.1, 69.7, 20.2, 70.1]], ["C", [21.6, 75.2, 24, 78.75]], ["C", [26.4, 82.3, 30.9, 84.3]], ["C", [31.8, 84.7, 32.75, 85]], ["C", [33.7, 85.3, 34.8, 85.6]], ["C", [35.4, 85.7, 35.95, 85.65]], ["C", [36.5, 85.6, 37, 85.8]], ["C", [37.6, 86.05, 38.5, 86.05]], ["C", [39.4, 86.05, 40.1, 85.8]], ["C", [40.6, 85.7, 41, 85.75]], ["C", [41.4, 85.8, 41.8, 85.7]], ["C", [42.3, 85.6, 42.65, 85.65]], ["C", [43, 85.7, 43.4, 85.5]], ["C", [44.8, 85.1, 46, 84.75]], ["C", [47.2, 84.4, 48.3, 83.8]], ["C", [50.8, 82.3, 52.3, 80.35]], ["C", [53.8, 78.4, 54.9, 75.5]], ["C", [55.3, 74.4, 55.45, 72.9]], ["C", [55.6, 71.4, 54.5, 70.8]], ["C", [53.9, 70.4, 52.95, 70.4]], ["C", [52, 70.4, 51.1, 70.4]], ["L", [46, 70.4]], ["C", [45.4, 70.4, 44.7, 70.45]], ["C", [44, 70.5, 43.4, 70.3]], ["L", [42.5, 70.3]], ["C", [42.1, 70.2, 41.7, 70.15]], ["C", [41.3, 70.1, 41, 69.9]], ["C", [40.5, 69.5, 40.3, 68.7]], ["C", [40.1, 67.9, 40.05, 66.95]], ["C", [40, 66, 40.05, 64.95]], ["C", [40.1, 63.9, 40.1, 63]], ["C", [40.1, 62.2, 40.15, 61.45]], ["C", [40.2, 60.8, 40.4, 60.3]], ["C", [40.8, 59.35, 41.5, 59.05]], ["C", [42.1, 58.9, 42.5, 58.9]], ["L", [43.6, 58.9]], ["C", [43.9, 58.8, 44.35, 58.8]], ["C", [44.8, 58.8, 45.2, 58.8]], ["L", [62.7, 58.8]], ["C", [64.4, 58.8, 66.55, 58.8]], ["C", [68.7, 58.8, 69.4, 59.65]], ["C", [69.9, 60.5, 69.9, 61.8]], ["C", [69.9, 63.1, 69.9, 64.3]], ["L", [69.9, 91.1]], ["C", [69.9, 93, 69.85, 94.75]], ["C", [69.8, 96.5, 68.5, 97]], ["C", [67.9, 97.3, 67.05, 97.3]], ["C", [66.2, 97.3, 65.4, 97.3]], ["C", [63.4, 97.3, 61.95, 97.15]], ["C", [60.5, 97, 59.9, 95.6]], ["C", [59.5, 94.7, 59.3, 93.6]], ["C", [59.1, 92.5, 58.6, 91.7]], ["C", [58.4, 91.5, 58.1, 91.25]], ["C", [57.8, 91, 57.3, 91.1]], ["C", [56.5, 91.3, 55.95, 91.9]], ["C", [55.4, 92.5, 54.8, 93]], ["C", [53.8, 93.8, 52.9, 94.45]], ["C", [52, 95.1, 50.9, 95.8]], ["C", [49.6, 96.6, 48.15, 97.1]], ["C", [46.7, 97.6, 45.2, 98.1]], ["C", [44.7, 98.3, 44.15, 98.35]], ["C", [43.6, 98.4, 43.1, 98.55]], ["C", [42.3, 98.7, 41.4, 98.7]], ["C", [40.5, 98.7, 39.6, 98.9]], ["C", [39.2, 99, 38.45, 98.95]], ["C", [37.7, 98.9, 37.4, 98.8]], ["L", [36.4, 98.8]], ["C", [35.9, 98.7, 35.45, 98.7]], ["C", [35, 98.7, 34.5, 98.6]], ["L", [33.7, 98.6]], ["C", [32.9, 98.4, 32.1, 98.3]], ["C", [31.3, 98.2, 30.5, 98]], ["C", [29.8, 97.8, 29.1, 97.65]], ["C", [28.4, 97.5, 27.7, 97.3]], ["C", [24.7, 96.4, 22.4, 95.2]], ["C", [16.5, 92.1, 12.8, 87.85]], ["C", [9.1, 83.6, 6.5, 77.3]], ["C", [5.9, 75.9, 5.6, 74.5]], ["C", [5.3, 73.1, 4.8, 71.7]], ["C", [4.7, 71.2, 4.7, 70.85]], ["C", [4.7, 70.5, 4.5, 70]], ["C", [4.3, 69.3, 4.3, 68.55]], ["C", [4.3, 67.8, 4.1, 67]], ["C", [3.9, 66.5, 3.95, 66.15]], ["C", [4, 65.8, 3.9, 65.25]], ["L", [3.9, 63.45]], ["C", [3.7, 63, 3.7, 61.95]], ["C", [3.7, 60.9, 3.9, 60.4]], ["L", [3.9, 59.25]], ["C", [4, 58.7, 3.95, 58.05]], ["C", [3.9, 57.35, 4.1, 56.9]], ["C", [4.3, 56, 4.3, 55.05]], ["C", [4.3, 54.2, 4.5, 53.35]], ["C", [4.8, 52.3, 5, 51.2]], ["C", [5.2, 50.2, 5.6, 49.05]], ["C", [6.1, 47.7, 6.55, 46.35]], ["C", [7, 44.95, 7.6, 43.7]], ["C", [8.2, 42.3, 9, 40.9]], ["C", [9.8, 39.6, 10.6, 38.35]], ["C", [13.6, 34.15, 17.4, 31.25]], ["C", [21.2, 28.25, 26.6, 26.25]], ["C", [27.7, 25.75, 29, 25.55]], ["C", [30.3, 25.3, 31.6, 25]], ["C", [32.1, 24.8, 32.65, 24.8]], ["C", [33.2, 24.8, 33.7, 24.6]], ["C", [34.4, 24.35, 35.05, 24.5]], ["C", [35.7, 24.6, 36.4, 24.35]], ["C", [36.6, 24.25, 36.95, 24.35]], ["C", [37.3, 24.5, 37.5, 24.35]], ["C", [47.6, 24.15, 54.4, 27.95]], ["C", [61.2, 31.8, 65, 37.8]], ["C", [66.9, 40.95, 68.1, 45.15]], ["C", [68.3, 45.9, 68.4, 46.9]], ["C", [68.5, 48, 68, 48.5]], ["C", [67.5, 49.15, 66.6, 49.25]], ["C", [65.7, 49.35, 64.6, 49.35]], ["L", [58.1, 49.35]], ["C", [57, 49.35, 56.05, 49.3]], ["C", [55.1, 49.25, 54.5, 48.75]], ["C", [53.6, 48.2, 53.25, 47.05]], ["C", [52.9, 46, 52.4, 44.95]], ["C", [51.5, 43.6, 50.5, 42.3]], ["C", [49.5, 41.1, 48.1, 40.1]]]; __motifs["H"] = [["M", [51.6, 33.4]], ["C", [51.6, 31.9, 51.55, 29.9]], ["C", [51.5, 27.9, 52.2, 27.1]], ["C", [52.5, 26.6, 53.45, 26.4]], ["C", [54.4, 26.2, 55.6, 26.15]], ["C", [56.8, 26.1, 58, 26.15]], ["C", [59.2, 26.2, 60.1, 26.2]], ["C", [61.8, 26.2, 63.65, 26.15]], ["C", [65.55, 26.1, 66.4, 26.9]], ["C", [67.1, 27.4, 67.1, 28.55]], ["C", [67.1, 29.75, 67.1, 30.8]], ["L", [67.1, 92.35]], ["C", [67.1, 93.6, 67.1, 94.9]], ["C", [67.1, 96.2, 66.4, 96.65]], ["C", [65.55, 97.5, 63.55, 97.45]], ["C", [61.6, 97.4, 59.9, 97.4]], ["C", [59, 97.4, 57.85, 97.45]], ["C", [56.7, 97.5, 55.55, 97.45]], ["C", [54.4, 97.4, 53.45, 97.25]], ["C", [52.5, 97.1, 52.2, 96.55]], ["C", [51.9, 96.2, 51.75, 95.25]], ["C", [51.6, 94.3, 51.55, 93.25]], ["C", [51.5, 92.2, 51.55, 91.15]], ["C", [51.6, 90.1, 51.6, 89.3]], ["L", [51.6, 71.9]], ["C", [51.6, 71.45, 51.65, 71.1]], ["C", [51.7, 70.7, 51.6, 70.3]], ["L", [51.6, 69.3]], ["C", [51.5, 69, 51.5, 68.7]], ["C", [51.5, 68.4, 51.4, 68.1]], ["C", [50.75, 66.7, 48.85, 66.7]], ["C", [46.9, 66.7, 44.9, 66.7]], ["L", [25.15, 66.7]], ["C", [24.35, 66.9, 23.85, 67.05]], ["C", [23.35, 67.2, 22.95, 67.8]], ["C", [22.75, 68.3, 22.55, 69.3]], ["L", [22.55, 70.3]], ["C", [22.45, 70.8, 22.5, 71.45]], ["C", [22.55, 72.1, 22.55, 72.6]], ["L", [22.55, 90.8]], ["C", [22.55, 92.3, 22.55, 94]], ["C", [22.55, 95.7, 21.95, 96.55]], ["C", [21.7, 97.1, 20.7, 97.25]], ["C", [19.8, 97.4, 18.6, 97.45]], ["C", [17.5, 97.5, 16.25, 97.45]], ["C", [15.1, 97.4, 14.15, 97.4]], ["C", [12.8, 97.4, 10.8, 97.45]], ["C", [8.8, 97.5, 7.95, 96.9]], ["C", [7.2, 96.3, 7.1, 95]], ["C", [7, 93.7, 7, 92.3]], ["L", [7, 31.5]], ["C", [7, 30.4, 7, 29.2]], ["C", [7, 28, 7.35, 27.3]], ["C", [7.75, 26.6, 8.8, 26.3]], ["C", [9, 26.3, 9.25, 26.25]], ["C", [9.45, 26.2, 9.65, 26.2]], ["L", [17.7, 26.2]], ["C", [19.4, 26.2, 20.6, 26.35]], ["C", [21.9, 26.5, 22.35, 27.9]], ["C", [22.55, 28.4, 22.55, 28.95]], ["C", [22.55, 29.5, 22.55, 30]], ["L", [22.55, 45.6]], ["C", [22.55, 47.3, 22.45, 49.45]], ["C", [22.35, 51.6, 23.15, 52.7]], ["C", [23.65, 53.3, 24.3, 53.35]], ["C", [24.95, 53.4, 25.75, 53.6]], ["L", [45, 53.6]], ["C", [46.85, 53.6, 48.75, 53.55]], ["C", [50.65, 53.5, 51.3, 52.3]], ["C", [51.8, 51.4, 51.7, 49.6]], ["C", [51.6, 47.8, 51.6, 46.45]], ["L", [51.6, 33.4]]]; __motifs["I"] = [["M", [9.45, 26.3]], ["L", [18.05, 26.3]], ["C", [19.2, 26.3, 20.15, 26.35]], ["C", [21.2, 26.4, 21.7, 27.1]], ["C", [22.15, 27.8, 22.2, 28.9]], ["C", [22.25, 30, 22.25, 31.3]], ["L", [22.25, 91.1]], ["C", [22.25, 92.4, 22.3, 94]], ["C", [22.35, 95.6, 21.9, 96.45]], ["C", [21.5, 97.1, 20.05, 97.5]], ["C", [19.4, 97.7, 18.55, 97.6]], ["C", [17.75, 97.5, 17, 97.5]], ["L", [11.1, 97.5]], ["C", [9.95, 97.5, 9.05, 97.4]], ["C", [8.1, 97.3, 7.45, 96.8]], ["C", [7, 96.35, 6.9, 95.3]], ["C", [6.8, 94.35, 6.8, 93.2]], ["L", [6.8, 33.4]], ["C", [6.8, 32, 6.75, 30.1]], ["C", [6.7, 28.2, 7.2, 27.4]], ["C", [7.55, 26.8, 8.5, 26.4]], ["C", [8.8, 26.4, 9.05, 26.35]], ["C", [9.3, 26.3, 9.45, 26.3]]]; __motifs["J"] = [["M", [48.6, 34.6]], ["L", [48.6, 71.7]], ["C", [48.6, 74, 48.65, 76.45]], ["C", [48.7, 78.9, 48.2, 80.9]], ["C", [48, 81.4, 48.05, 81.85]], ["C", [48.1, 82.3, 47.9, 82.8]], ["C", [47.6, 83.7, 47.35, 84.65]], ["C", [47.15, 85.6, 46.8, 86.5]], ["C", [44.6, 92, 40.5, 94.9]], ["C", [39.1, 95.9, 37.45, 96.55]], ["C", [35.8, 97.3, 34, 97.9]], ["C", [33.2, 98.1, 32.45, 98.25]], ["C", [31.7, 98.4, 30.9, 98.55]], ["C", [30.15, 98.8, 29.15, 98.8]], ["C", [28.2, 98.8, 27.3, 99]], ["L", [26.2, 99]], ["C", [25.6, 99.2, 24.55, 99.15]], ["C", [23.5, 99.1, 22.9, 98.9]], ["C", [21.85, 98.9, 21.3, 98.8]], ["C", [20.3, 98.55, 19.35, 98.5]], ["C", [18.4, 98.4, 17.65, 98.2]], ["C", [16.5, 97.8, 15.45, 97.5]], ["C", [14.3, 97.2, 13.35, 96.7]], ["C", [10.1, 95.3, 7.5, 92.85]], ["C", [4.95, 90.35, 3.5, 87.2]], ["C", [3.15, 86.15, 2.85, 85.2]], ["C", [2.5, 84.2, 2.2, 83.1]], ["C", [2, 82.3, 2, 81.9]], ["C", [1.8, 81.4, 1.85, 81]], ["C", [1.9, 80.6, 1.7, 80.1]], ["C", [1.6, 79.85, 1.6, 79.55]], ["C", [1.6, 79.2, 1.6, 79]], ["L", [1.6, 78]], ["C", [1.5, 77.5, 1.5, 76.95]], ["C", [1.5, 76.4, 1.5, 75.9]], ["C", [1.5, 74.5, 1.6, 73.25]], ["C", [1.7, 72, 2.5, 71.45]], ["C", [3.3, 71, 4.65, 71]], ["C", [6, 71, 7.25, 71]], ["C", [8.1, 71, 9.35, 70.95]], ["C", [10.5, 70.9, 11.65, 70.95]], ["C", [12.8, 71, 13.75, 71.2]], ["C", [14.7, 71.4, 15, 71.9]], ["C", [15.7, 72.9, 15.6, 74.5]], ["C", [15.45, 76.1, 15.7, 77.5]], ["C", [15.9, 78.1, 15.95, 78.65]], ["C", [16, 79.2, 16.2, 79.8]], ["C", [16.6, 81.2, 17.2, 82.35]], ["C", [17.8, 83.5, 18.9, 84.3]], ["C", [20.1, 85.2, 22.2, 85.8]], ["C", [24.3, 86.4, 26.5, 85.9]], ["C", [27, 85.7, 27.4, 85.7]], ["C", [27.85, 85.7, 28.2, 85.5]], ["C", [31.2, 84.3, 32.25, 81.4]], ["C", [32.6, 80.5, 32.7, 79.55]], ["C", [32.8, 78.6, 33, 77.5]], ["C", [33, 76.9, 33, 76.35]], ["C", [33, 75.75, 33.1, 75.2]], ["C", [33.2, 74.7, 33.15, 74.05]], ["C", [33.1, 73.4, 33.1, 72.8]], ["L", [33.1, 31.6]], ["C", [33.1, 30.5, 33.05, 29.3]], ["C", [33, 28.1, 33.5, 27.3]], ["C", [33.9, 26.7, 35, 26.3]], ["C", [35.6, 26.3, 35.8, 26.2]], ["L", [44.3, 26.2]], ["C", [45.4, 26.2, 46.4, 26.3]], ["C", [47.35, 26.4, 47.9, 26.9]], ["C", [48.3, 27.4, 48.45, 28.35]], ["C", [48.6, 29.3, 48.65, 30.4]], ["C", [48.7, 31.5, 48.65, 32.6]], ["C", [48.6, 33.7, 48.6, 34.6]]]; __motifs["K"] = [["M", [55.5, 26.2]], ["L", [63.25, 26.2]], ["C", [64.3, 26.2, 65.6, 26.15]], ["C", [66.8, 26.1, 67.55, 26.6]], ["C", [68.1, 27.1, 67.8, 27.75]], ["C", [67.55, 28.4, 67.35, 28.8]], ["C", [66.8, 29.3, 66.3, 29.75]], ["C", [65.8, 30.2, 65.35, 30.7]], ["C", [64.6, 31.5, 63.95, 32.2]], ["C", [63.35, 32.9, 62.5, 33.6]], ["C", [59.05, 37.1, 55.5, 40.7]], ["C", [52, 44.3, 48.5, 47.8]], ["C", [46.9, 49.6, 45.1, 51.2]], ["C", [44.45, 51.9, 43.8, 52.55]], ["C", [43.2, 53.2, 43, 54.3]], ["C", [42.8, 55.1, 43.3, 55.85]], ["C", [43.8, 56.6, 44.1, 57.1]], ["C", [45.1, 58.6, 46.15, 60.05]], ["C", [47.2, 61.5, 48.2, 63]], ["C", [52.4, 69, 56.6, 74.85]], ["C", [60.8, 80.7, 65, 86.7]], ["L", [68.6, 91.8]], ["C", [69, 92.4, 69.5, 92.95]], ["C", [69.9, 93.5, 70.3, 94.1]], ["C", [70.6, 94.6, 71, 95.5]], ["C", [71.4, 96.4, 70.7, 96.9]], ["C", [70, 97.4, 68.7, 97.4]], ["C", [67.45, 97.4, 66.3, 97.4]], ["L", [58.4, 97.4]], ["C", [57.3, 97.4, 56.2, 97.45]], ["C", [55.15, 97.5, 54.2, 97.3]], ["C", [53.15, 96.9, 52.45, 96.15]], ["C", [51.8, 95.4, 51.2, 94.5]], ["C", [50.6, 93.7, 50.05, 92.85]], ["C", [49.5, 92, 48.95, 91.1]], ["C", [46.2, 86.9, 43.4, 82.9]], ["C", [40.65, 78.9, 37.8, 74.7]], ["C", [36.7, 73, 35.65, 71.4]], ["C", [34.6, 69.8, 33.5, 68.2]], ["C", [33.1, 67.7, 32.5, 67.05]], ["C", [31.95, 66.4, 30.9, 66.6]], ["C", [29.95, 66.9, 28.9, 67.95]], ["C", [27.95, 69, 27.2, 69.7]], ["C", [26.7, 70.2, 26.2, 70.75]], ["C", [25.75, 71.3, 25.2, 71.8]], ["C", [24.5, 72.5, 23.95, 73.15]], ["C", [23.3, 73.8, 22.9, 74.7]], ["C", [22.6, 75.3, 22.55, 76]], ["C", [22.5, 76.7, 22.5, 77.5]], ["L", [22.5, 78.8]], ["C", [22.4, 79.3, 22.45, 79.95]], ["C", [22.5, 80.6, 22.5, 81.1]], ["L", [22.5, 92.9]], ["C", [22.5, 94, 22.45, 95]], ["C", [22.4, 96, 21.9, 96.6]], ["C", [21.45, 97.2, 20.4, 97.3]], ["C", [19.45, 97.4, 18.3, 97.4]], ["L", [11.5, 97.4]], ["C", [10.45, 97.4, 9.4, 97.35]], ["C", [8.45, 97.3, 7.7, 96.8]], ["C", [7.05, 96.3, 7.05, 94.95]], ["C", [7.05, 93.6, 7.05, 92.3]], ["L", [7.05, 31.5]], ["C", [7.05, 30.4, 7, 29.2]], ["C", [6.95, 28, 7.3, 27.3]], ["C", [7.9, 26.6, 8.95, 26.3]], ["C", [9.15, 26.2, 9.35, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [17.45, 26.2]], ["C", [19.35, 26.2, 20.6, 26.35]], ["C", [21.9, 26.5, 22.4, 28.1]], ["C", [22.5, 28.6, 22.5, 29.15]], ["C", [22.5, 29.7, 22.5, 30.3]], ["L", [22.5, 49.5]], ["C", [22.5, 50.4, 22.5, 51.3]], ["C", [22.5, 52.2, 22.8, 52.9]], ["C", [22.9, 53.1, 23.15, 53.3]], ["C", [23.4, 53.5, 23.65, 53.5]], ["C", [24.3, 53.7, 24.95, 53.1]], ["C", [25.6, 52.5, 25.95, 52.2]], ["C", [26.7, 51.4, 27.5, 50.6]], ["C", [28.3, 49.8, 29, 48.9]], ["C", [29.3, 48.7, 29.85, 48.2]], ["C", [30.2, 47.8, 30.6, 47.35]], ["C", [31, 46.9, 31.3, 46.4]], ["C", [31.5, 46.2, 31.7, 46.1]], ["C", [31.95, 46, 32.15, 45.8]], ["C", [32.6, 45, 33.3, 44.45]], ["C", [34.05, 43.9, 34.5, 43.2]], ["C", [35.1, 42.4, 35.6, 41.9]], ["C", [35.8, 41.8, 36.15, 41.5]], ["C", [37.3, 39.9, 38.8, 38.6]], ["C", [40.35, 37.3, 41.5, 35.7]], ["L", [42, 35.2]], ["C", [42.35, 34.9, 42.65, 34.6]], ["C", [42.9, 34.3, 43.2, 33.9]], ["C", [43.3, 33.7, 43.4, 33.65]], ["C", [43.5, 33.6, 43.7, 33.4]], ["C", [44.3, 33, 44.65, 32.3]], ["C", [44.8, 32.1, 45.1, 31.9]], ["C", [45.4, 31.7, 45.6, 31.5]], ["C", [45.9, 31, 46.3, 30.6]], ["C", [46.75, 30.2, 47.1, 29.7]], ["C", [47.3, 29.5, 47.45, 29.4]], ["C", [47.6, 29.3, 47.8, 29.1]], ["C", [48.5, 28.1, 49.4, 27.35]], ["C", [50.3, 26.6, 51.7, 26.3]], ["C", [52.5, 26.1, 53.55, 26.15]], ["C", [54.6, 26.2, 55.5, 26.2]]]; __motifs["L"] = [["M", [9.7, 26.2]], ["L", [18.2, 26.2]], ["C", [19.35, 26.2, 20.35, 26.25]], ["C", [21.45, 26.3, 21.9, 27]], ["C", [22.4, 27.7, 22.4, 28.85]], ["C", [22.4, 30, 22.4, 31.3]], ["L", [22.4, 76.6]], ["C", [22.4, 77.45, 22.35, 78.15]], ["C", [22.3, 78.9, 22.5, 79.65]], ["L", [22.5, 80.6]], ["C", [22.5, 81.35, 22.55, 81.95]], ["C", [22.6, 82.6, 22.8, 83.1]], ["C", [23.5, 84.4, 25.6, 84.4]], ["C", [27.75, 84.4, 29.7, 84.4]], ["L", [49.1, 84.4]], ["C", [49.9, 84.4, 51.1, 84.35]], ["C", [52.3, 84.3, 53.4, 84.35]], ["C", [54.5, 84.4, 55.45, 84.6]], ["C", [56.4, 84.8, 56.7, 85.2]], ["C", [57.25, 85.85, 57.25, 86.7]], ["C", [57.25, 87.6, 57.25, 88.6]], ["L", [57.25, 93.2]], ["C", [57.25, 94, 57.3, 94.7]], ["C", [57.3, 95.4, 57.15, 95.9]], ["C", [56.7, 96.7, 56.1, 97]], ["C", [55.6, 97.4, 54.6, 97.4]], ["C", [53.6, 97.4, 52.75, 97.4]], ["L", [11.35, 97.4]], ["C", [9.9, 97.4, 8.9, 97.25]], ["C", [7.8, 97.1, 7.3, 96.3]], ["C", [6.95, 95.7, 6.95, 94.75]], ["C", [6.95, 93.8, 6.95, 92.9]], ["L", [6.95, 30.5]], ["C", [6.95, 29.65, 7, 28.7]], ["C", [7.05, 27.8, 7.3, 27.3]], ["C", [7.7, 26.6, 8.95, 26.3]], ["C", [9.15, 26.2, 9.35, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]]]; __motifs["M"] = [["M", [83.7, 32.2]], ["L", [83.7, 93.1]], ["C", [83.7, 94.2, 83.65, 95.25]], ["C", [83.6, 96.3, 83, 96.8]], ["C", [82.4, 97.3, 81.5, 97.35]], ["C", [80.6, 97.4, 79.5, 97.4]], ["L", [71.95, 97.4]], ["C", [71.2, 97.2, 70.65, 97.1]], ["C", [70.05, 97, 69.7, 96.4]], ["C", [69.3, 95.9, 69.3, 95.1]], ["C", [69.3, 94.3, 69.3, 93.4]], ["L", [69.3, 62.6]], ["C", [69.2, 61.2, 69.2, 59.95]], ["C", [69.2, 58.7, 69.2, 57.4]], ["C", [69.2, 56.6, 69.25, 55.75]], ["C", [69.3, 54.9, 69.1, 54.1]], ["C", [68.9, 53.4, 68.9, 52.6]], ["C", [68.9, 51.8, 68.3, 51.6]], ["C", [67.95, 51.5, 67.8, 51.7]], ["C", [67.7, 51.9, 67.6, 52]], ["C", [67.2, 52.4, 66.95, 52.95]], ["C", [66.7, 53.5, 66.5, 54]], ["C", [65.85, 55.5, 65.35, 57.1]], ["C", [64.8, 58.7, 64.2, 60.3]], ["C", [64, 60.9, 63.8, 61.5]], ["C", [63.65, 62.1, 63.4, 62.7]], ["C", [62.9, 64, 62.5, 65.3]], ["C", [62.1, 66.6, 61.55, 67.9]], ["C", [61.4, 68.2, 61.4, 68.55]], ["C", [61.4, 68.9, 61.2, 69.2]], ["C", [60.8, 70.1, 60.55, 71.1]], ["C", [60.3, 72.1, 59.75, 73.1]], ["C", [59.4, 74, 59.15, 75]], ["C", [58.9, 76, 58.5, 77]], ["C", [57.3, 79.9, 56.4, 82.85]], ["C", [55.45, 85.8, 54.4, 88.7]], ["C", [54.2, 89, 54.2, 89.3]], ["C", [54.2, 89.6, 54, 89.9]], ["C", [53.45, 91, 53.15, 92.15]], ["C", [52.9, 93.3, 52.4, 94.4]], ["C", [52.1, 95.1, 51.85, 95.7]], ["C", [51.6, 96.3, 51.05, 96.7]], ["C", [50.6, 97.1, 50.1, 97.15]], ["C", [49.6, 97.2, 48.9, 97.4]], ["L", [46.6, 97.4]], ["C", [45.9, 97.4, 44.9, 97.45]], ["C", [44, 97.5, 43, 97.5]], ["C", [42.1, 97.5, 41.3, 97.4]], ["C", [40.5, 97.3, 40.1, 97]], ["C", [39.3, 96.5, 38.95, 95.85]], ["C", [38.65, 95.2, 38.3, 94.3]], ["C", [37.8, 93.1, 37.45, 91.85]], ["C", [37.05, 90.6, 36.55, 89.4]], ["L", [36.3, 88.5]], ["C", [35.8, 87.3, 35.4, 85.95]], ["C", [34.95, 84.6, 34.45, 83.4]], ["C", [34.4, 83.1, 34.35, 82.85]], ["C", [34.3, 82.6, 34.2, 82.3]], ["C", [33.7, 81.4, 33.4, 80.4]], ["C", [33.1, 79.4, 32.65, 78.4]], ["C", [32.55, 78.2, 32.5, 77.9]], ["C", [32.45, 77.6, 32.35, 77.4]], ["C", [32, 76.4, 31.75, 75.4]], ["C", [31.5, 74.4, 31, 73.4]], ["C", [30.2, 71.4, 29.5, 69.2]], ["C", [28.75, 67, 28, 64.9]], ["C", [27.1, 62.4, 26.25, 59.8]], ["C", [25.5, 57.2, 24.35, 54.8]], ["C", [23.9, 53.4, 23.3, 52.5]], ["C", [23.1, 52.3, 22.9, 52.15]], ["C", [22.65, 52, 22.35, 52.2]], ["C", [21.9, 52.5, 21.9, 53.2]], ["C", [21.9, 53.9, 21.7, 54.6]], ["C", [21.5, 55.3, 21.55, 56.05]], ["C", [21.6, 56.8, 21.6, 57.6]], ["C", [21.6, 58.7, 21.6, 59.8]], ["C", [21.6, 60.9, 21.5, 62]], ["L", [21.5, 93.5]], ["C", [21.5, 94.3, 21.5, 95.1]], ["C", [21.5, 95.9, 21.1, 96.4]], ["C", [20.7, 97.1, 19.6, 97.3]], ["C", [18.9, 97.5, 18.1, 97.45]], ["C", [17.3, 97.4, 16.5, 97.4]], ["L", [11.3, 97.4]], ["C", [10.2, 97.4, 9.3, 97.35]], ["C", [8.4, 97.3, 7.75, 96.8]], ["C", [7.2, 96.3, 7.1, 95.25]], ["C", [7, 94.2, 7, 93.1]], ["L", [7, 33.1]], ["C", [7, 32.5, 7, 31.65]], ["C", [7, 30.8, 7, 30]], ["C", [7, 29.2, 7.1, 28.45]], ["C", [7.2, 27.7, 7.35, 27.3]], ["C", [7.75, 26.6, 9, 26.3]], ["C", [9.2, 26.2, 9.4, 26.25]], ["C", [9.55, 26.3, 9.75, 26.2]], ["L", [22.9, 26.2]], ["C", [24.45, 26.2, 26.1, 26.2]], ["C", [27.8, 26.2, 28.65, 26.9]], ["C", [29.4, 27.4, 29.7, 28.35]], ["C", [30, 29.3, 30.25, 30.2]], ["C", [30.85, 31.8, 31.45, 33.45]], ["C", [32, 35.1, 32.55, 36.8]], ["C", [34.85, 43.1, 36.9, 49.6]], ["C", [38.95, 56.1, 41.35, 62.5]], ["C", [42.2, 64.5, 42.75, 66.6]], ["C", [43.35, 68.7, 44.2, 70.7]], ["C", [44.4, 71.2, 44.6, 71.7]], ["C", [44.8, 72.2, 45.25, 72.5]], ["C", [45.45, 72.6, 45.7, 72.7]], ["C", [45.9, 72.8, 46.1, 72.6]], ["C", [46.9, 72.4, 47.15, 71.4]], ["C", [47.45, 70.4, 47.8, 69.6]], ["C", [48.6, 67.3, 49.2, 65.05]], ["C", [49.9, 62.8, 50.7, 60.5]], ["C", [52.7, 54.4, 54.7, 48.25]], ["C", [56.7, 42.1, 58.7, 35.9]], ["C", [59.2, 34.3, 59.65, 32.75]], ["C", [60.2, 31.2, 60.7, 29.6]], ["C", [61, 28.8, 61.3, 28]], ["C", [61.55, 27.2, 62.4, 26.7]], ["C", [63, 26.2, 63.9, 26.2]], ["C", [64.9, 26.2, 65.85, 26.2]], ["L", [79.3, 26.2]], ["C", [80.2, 26.2, 81.15, 26.2]], ["C", [82.1, 26.2, 82.55, 26.6]], ["C", [83.7, 27.2, 83.7, 28.85]], ["C", [83.7, 30.5, 83.7, 32.2]]]; __motifs["N"] = [["M", [52.55, 31.3]], ["C", [52.5, 30.8, 52.6, 30.4]], ["L", [52.6, 29.3]], ["C", [52.6, 27.9, 53.15, 27.1]], ["C", [53.65, 26.4, 54.55, 26.3]], ["C", [55.35, 26.2, 56.5, 26.2]], ["L", [62.6, 26.2]], ["C", [63.4, 26.2, 64.2, 26.2]], ["C", [65, 26.2, 65.6, 26.4]], ["C", [66.9, 26.9, 67, 28.15]], ["C", [67.1, 29.4, 67.1, 31.1]], ["L", [67.1, 92.4]], ["C", [67.1, 93.5, 67.15, 94.6]], ["C", [67.2, 95.7, 66.8, 96.35]], ["C", [66.4, 96.9, 65.85, 97.05]], ["C", [65.3, 97.2, 64.5, 97.4]], ["L", [55.5, 97.4]], ["C", [54.6, 97.4, 53.75, 97.4]], ["C", [52.9, 97.4, 52.3, 97.1]], ["C", [51.15, 96.6, 50.6, 95.75]], ["C", [50, 94.9, 49.4, 93.9]], ["C", [48.5, 92.5, 47.65, 91.05]], ["C", [46.8, 89.6, 45.9, 88.2]], ["L", [30.9, 64.2]], ["C", [29.5, 61.9, 28.15, 59.75]], ["C", [26.8, 57.6, 25.4, 55.3]], ["C", [24.9, 54.65, 24.2, 53.55]], ["C", [23.6, 52.55, 22.45, 52.55]], ["C", [21.7, 53.2, 21.65, 54.1]], ["C", [21.6, 55, 21.6, 56.4]], ["L", [21.6, 91.2]], ["C", [21.6, 91.7, 21.65, 92.25]], ["C", [21.7, 92.7, 21.5, 93.2]], ["L", [21.5, 94.35]], ["C", [21.5, 95.9, 21, 96.6]], ["C", [20.5, 97.2, 19.65, 97.3]], ["C", [18.8, 97.4, 17.7, 97.4]], ["L", [11.55, 97.4]], ["C", [10.8, 97.4, 10, 97.4]], ["C", [9.2, 97.4, 8.6, 97.2]], ["C", [7.3, 96.7, 7.15, 95.4]], ["C", [7, 94.15, 7, 92.4]], ["L", [7, 31.5]], ["C", [7, 30.4, 7, 29.2]], ["C", [7, 28, 7.35, 27.3]], ["C", [7.75, 26.6, 8.8, 26.3]], ["C", [9, 26.3, 9.25, 26.25]], ["C", [9.45, 26.2, 9.65, 26.2]], ["L", [17.75, 26.2]], ["C", [18.9, 26.2, 19.9, 26.15]], ["C", [21, 26.1, 21.8, 26.5]], ["C", [22.75, 26.9, 23.35, 27.7]], ["C", [23.9, 28.5, 24.35, 29.3]], ["L", [28, 35]], ["C", [31.5, 40.7, 35, 46.4]], ["C", [38.55, 52, 42.1, 57.7]], ["C", [43.8, 60.4, 45.45, 63.15]], ["C", [47.05, 65.9, 48.9, 68.5]], ["C", [49.25, 69.15, 49.65, 69.7]], ["C", [50, 70.3, 50.6, 70.8]], ["C", [50.8, 71, 51.05, 71.25]], ["C", [51.35, 71.45, 51.7, 71.25]], ["C", [52.4, 71, 52.4, 70.3]], ["C", [52.4, 69.6, 52.6, 68.8]], ["C", [52.7, 68.1, 52.65, 67.3]], ["C", [52.6, 66.4, 52.6, 65.6]], ["L", [52.6, 32.3]], ["C", [52.6, 31.85, 52.55, 31.3]]]; __motifs["O"] = [["M", [49.65, 40.75]], ["C", [45.5, 37.6, 38.1, 37.6]], ["C", [37.9, 37.7, 37.65, 37.65]], ["C", [37.4, 37.6, 37.2, 37.7]], ["C", [36.8, 37.8, 36.4, 37.75]], ["C", [36, 37.7, 35.5, 37.9]], ["C", [34.4, 38.1, 33.35, 38.3]], ["C", [32.3, 38.55, 31.4, 39]], ["C", [27.2, 40.8, 24.75, 44]], ["C", [22.3, 47.2, 20.8, 51.7]], ["C", [20.5, 52.75, 20.35, 53.85]], ["C", [20.2, 54.85, 19.9, 56]], ["C", [19.8, 56.4, 19.8, 56.75]], ["C", [19.8, 57.05, 19.7, 57.5]], ["C", [19.5, 58, 19.6, 58.6]], ["C", [19.7, 59.15, 19.6, 59.7]], ["C", [19.4, 60.2, 19.35, 61.5]], ["C", [19.3, 62.9, 19.5, 63.35]], ["L", [19.5, 64.5]], ["C", [19.6, 64.9, 19.6, 65.3]], ["C", [19.6, 65.8, 19.7, 66.2]], ["C", [19.7, 66.6, 19.75, 66.95]], ["C", [19.8, 67.3, 19.8, 67.65]], ["C", [20.1, 68.8, 20.25, 69.9]], ["C", [20.4, 71, 20.8, 72]], ["C", [21.9, 75.2, 23.5, 77.9]], ["C", [25.1, 80.7, 27.5, 82.4]], ["C", [28, 82.9, 28.55, 83.2]], ["C", [29.1, 83.5, 29.7, 83.8]], ["C", [30.8, 84.5, 32.05, 84.9]], ["C", [33.3, 85.3, 34.7, 85.7]], ["C", [35.2, 85.9, 35.65, 85.85]], ["C", [36.1, 85.8, 36.6, 85.9]], ["C", [37.2, 86.05, 37.8, 86.05]], ["C", [38.4, 86.05, 39.1, 86.05]], ["L", [39.9, 86.05]], ["C", [40.4, 86, 40.8, 86.05]], ["C", [41.2, 86.05, 41.7, 85.9]], ["C", [42.7, 85.7, 43.7, 85.55]], ["C", [44.7, 85.4, 45.6, 85]], ["C", [49.9, 83.3, 52.35, 80.6]], ["C", [54.8, 77.85, 56.5, 73.55]], ["C", [57, 72.5, 57.25, 71.2]], ["C", [57.5, 69.9, 57.9, 68.6]], ["L", [58.2, 66.2]], ["C", [58.3, 65.8, 58.3, 65.3]], ["C", [58.3, 64.9, 58.3, 64.4]], ["L", [58.3, 63.55]], ["C", [58.5, 63.1, 58.5, 62.15]], ["C", [58.5, 61.15, 58.3, 60.7]], ["L", [58.3, 58.95]], ["C", [58.2, 58.6, 58.25, 58.25]], ["C", [58.3, 57.9, 58.1, 57.5]], ["C", [57.9, 56.7, 57.85, 55.95]], ["C", [57.8, 55.15, 57.6, 54.5]], ["C", [57.6, 54, 57.4, 53.4]], ["C", [57.1, 52.3, 56.8, 51.2]], ["C", [56.5, 50.1, 56, 48.95]], ["C", [53.8, 43.9, 49.65, 40.75]], ["M", [59.2, 30.6]], ["C", [60.5, 31.5, 61.9, 32.65]], ["C", [63.3, 33.8, 64.2, 35]], ["C", [64.7, 35.5, 65.2, 36.05]], ["C", [65.7, 36.6, 66.1, 37.1]], ["C", [67.2, 38.7, 68.3, 40.3]], ["C", [69.4, 42, 70.2, 43.9]], ["C", [70.8, 45.3, 71.25, 46.55]], ["C", [71.7, 47.9, 72.2, 49.4]], ["C", [72.5, 50.4, 72.7, 51.45]], ["C", [72.9, 52.5, 73.2, 53.6]], ["C", [73.4, 54.3, 73.4, 54.9]], ["C", [73.4, 55.6, 73.6, 56.2]], ["C", [73.8, 56.8, 73.75, 57.45]], ["C", [73.7, 58.1, 73.8, 58.6]], ["L", [73.8, 59.4]], ["C", [74, 60, 74.05, 61.45]], ["C", [74.1, 62.9, 73.9, 63.5]], ["L", [73.9, 64.8]], ["C", [73.7, 65.8, 73.7, 66.9]], ["C", [73.7, 68, 73.5, 69.1]], ["C", [73.3, 69.8, 73.2, 70.5]], ["C", [73.1, 71.2, 72.9, 71.9]], ["C", [72.4, 73.65, 71.95, 75.4]], ["C", [71.5, 77.1, 70.8, 78.7]], ["C", [67.8, 85.7, 62.7, 90.3]], ["C", [57.6, 95, 50.1, 97.5]], ["C", [49, 97.9, 47.9, 98.1]], ["C", [46.8, 98.3, 45.7, 98.5]], ["C", [45.2, 98.65, 44.65, 98.65]], ["C", [44.1, 98.65, 43.6, 98.75]], ["L", [40.3, 99.1]], ["C", [39.9, 99.2, 38.9, 99.15]], ["C", [37.9, 99.1, 37.6, 99]], ["C", [37.1, 98.9, 36.65, 98.95]], ["C", [36.2, 99, 35.7, 98.9]], ["L", [34.6, 98.9]], ["C", [33.8, 98.65, 33.1, 98.6]], ["C", [32.4, 98.55, 31.6, 98.4]], ["C", [30.8, 98.2, 30, 98.05]], ["C", [29.2, 97.9, 28.4, 97.7]], ["C", [27.3, 97.3, 26.15, 96.9]], ["C", [25, 96.45, 23.9, 96]], ["C", [17.9, 93.4, 13.75, 89.05]], ["C", [9.6, 84.7, 7, 78.7]], ["C", [6.4, 77.3, 6, 75.7]], ["C", [5.6, 74.2, 5.1, 72.6]], ["C", [4.9, 72.1, 4.9, 71.7]], ["C", [4.9, 71.4, 4.8, 71]], ["C", [4.6, 70.3, 4.5, 69.5]], ["C", [4.4, 68.8, 4.2, 68]], ["C", [4.1, 67.45, 4.15, 67.05]], ["C", [4.2, 66.6, 4, 66.2]], ["C", [3.9, 65.6, 4, 64.95]], ["C", [4.1, 64.3, 4, 63.7]], ["C", [3.8, 63.15, 3.8, 62.15]], ["C", [3.8, 61.05, 4, 60.6]], ["C", [4.1, 60.1, 4, 59.65]], ["C", [3.9, 59.15, 4, 58.7]], ["L", [4, 58.1]], ["C", [4.2, 57.4, 4.15, 56.75]], ["C", [4.1, 56.1, 4.3, 55.5]], ["C", [4.5, 54.95, 4.5, 54.45]], ["C", [4.5, 53.9, 4.7, 53.4]], ["C", [5.2, 51.7, 5.5, 50.05]], ["C", [5.8, 48.4, 6.4, 46.8]], ["C", [7.2, 45.1, 7.9, 43.4]], ["C", [8.6, 41.7, 9.6, 40.2]], ["C", [12.6, 35.4, 16.5, 32.2]], ["C", [20.4, 29, 26, 26.7]], ["C", [27.3, 26.2, 28.75, 25.85]], ["C", [30.2, 25.6, 31.6, 25.2]], ["C", [32.1, 25, 32.55, 25]], ["C", [33, 25, 33.5, 24.9]], ["L", [36.5, 24.6]], ["C", [36.7, 24.5, 37.05, 24.6]], ["C", [37.4, 24.7, 37.6, 24.6]], ["C", [44.7, 24.4, 49.9, 26.05]], ["C", [55.1, 27.7, 59.2, 30.6]]]; __motifs["P"] = [["M", [44, 40.15]], ["C", [42.55, 39.2, 40.35, 38.75]], ["C", [38.15, 38.3, 35.55, 38.2]], ["C", [33, 38.15, 30.3, 38.15]], ["C", [27.65, 38.2, 25.2, 38.2]], ["C", [24.9, 38.3, 24.65, 38.35]], ["C", [24.4, 38.4, 24.1, 38.4]], ["C", [23.1, 38.8, 22.8, 39.65]], ["C", [22.4, 40.4, 22.4, 41.8]], ["C", [22.4, 43.1, 22.4, 44.25]], ["L", [22.4, 53.7]], ["C", [22.4, 54.9, 22.4, 56.35]], ["C", [22.4, 57.8, 22.9, 58.6]], ["C", [23.3, 59.2, 24.1, 59.5]], ["C", [24.9, 59.8, 25.95, 59.85]], ["C", [26.9, 59.9, 28.1, 59.85]], ["C", [29.2, 59.8, 30.2, 59.8]], ["C", [35.5, 59.8, 39.9, 59.3]], ["C", [44.35, 58.85, 46.65, 55.8]], ["C", [47.2, 54.9, 47.6, 53.85]], ["C", [48, 52.8, 48.4, 51.5]], ["C", [48.65, 50.45, 48.6, 48.75]], ["C", [48.55, 47.1, 48.2, 46.05]], ["C", [47.6, 43.85, 46.75, 42.5]], ["C", [45.8, 41.2, 44, 40.15]], ["M", [59.4, 35.1]], ["C", [61.7, 38.3, 62.75, 42.25]], ["C", [63.8, 46.15, 63.55, 51.6]], ["C", [63.35, 53.8, 62.8, 55.65]], ["C", [62.3, 57.5, 61.6, 59.1]], ["C", [61.45, 59.5, 61.3, 59.85]], ["C", [61.15, 60.2, 60.9, 60.65]], ["C", [60.5, 61.3, 60.15, 61.95]], ["C", [59.8, 62.65, 59.35, 63.2]], ["C", [57.3, 66, 54.45, 67.75]], ["C", [51.6, 69.5, 48, 70.7]], ["C", [46.9, 71.15, 45.7, 71.25]], ["C", [44.55, 71.35, 43.3, 71.6]], ["C", [42.7, 71.7, 42.1, 71.7]], ["C", [41.5, 71.7, 40.9, 71.8]], ["L", [28.4, 71.8]], ["C", [27.1, 71.8, 25.7, 71.8]], ["C", [24.2, 71.8, 23.4, 72.4]], ["C", [22.4, 73.15, 22.4, 74.85]], ["C", [22.4, 76.6, 22.4, 78.3]], ["L", [22.4, 91.5]], ["C", [22.4, 92.7, 22.45, 94.15]], ["C", [22.5, 95.5, 22, 96.35]], ["C", [21.65, 97, 20.2, 97.4]], ["C", [19.55, 97.6, 18.7, 97.5]], ["C", [17.9, 97.4, 17.15, 97.4]], ["L", [11.35, 97.4]], ["C", [10.2, 97.4, 9.3, 97.35]], ["C", [8.35, 97.3, 7.7, 96.8]], ["C", [7.15, 96.35, 7.05, 95.25]], ["C", [6.95, 94.25, 6.95, 93.1]], ["L", [6.95, 33.3]], ["C", [6.95, 31.9, 6.9, 30]], ["C", [6.85, 28.1, 7.3, 27.35]], ["C", [7.7, 26.7, 8.85, 26.3]], ["C", [9.05, 26.2, 9.3, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [38.6, 26.2]], ["C", [39.5, 26.2, 40.45, 26.15]], ["C", [41.3, 26.1, 42.1, 26.3]], ["L", [42.65, 26.3]], ["C", [43.1, 26.5, 43.7, 26.5]], ["C", [44.35, 26.5, 44.8, 26.7]], ["C", [45.3, 26.8, 45.7, 26.8]], ["C", [46.1, 26.8, 46.65, 27]], ["C", [48.2, 27.55, 49.8, 27.95]], ["C", [51.4, 28.4, 52.85, 29.2]], ["C", [53.3, 29.65, 53.9, 29.9]], ["C", [54.5, 30.2, 55.15, 30.7]], ["C", [55.6, 31, 55.95, 31.35]], ["C", [56.3, 31.75, 56.85, 32.1]], ["L", [57.4, 32.7]], ["C", [58.6, 33.95, 59.4, 35.1]]]; __motifs["Q"] = [["M", [44.8, 38.35]], ["C", [41.9, 37.5, 38.1, 37.5]], ["C", [37.5, 37.6, 36.95, 37.6]], ["C", [36.4, 37.6, 35.9, 37.7]], ["C", [34.8, 38, 33.7, 38.15]], ["C", [32.6, 38.35, 31.6, 38.8]], ["C", [27.4, 40.55, 24.85, 43.85]], ["C", [22.3, 47.1, 20.8, 51.6]], ["C", [20.5, 52.7, 20.35, 53.75]], ["C", [20.2, 54.8, 19.9, 55.9]], ["C", [19.8, 56.3, 19.8, 56.65]], ["C", [19.8, 56.95, 19.7, 57.4]], ["C", [19.5, 57.9, 19.6, 58.5]], ["C", [19.7, 59.05, 19.5, 59.6]], ["L", [19.5, 60.7]], ["C", [19.4, 61.15, 19.4, 62]], ["C", [19.4, 62.8, 19.5, 63.25]], ["L", [19.5, 64.4]], ["C", [19.7, 65.1, 19.65, 65.85]], ["C", [19.6, 66.6, 19.8, 67.3]], ["C", [19.9, 67.55, 19.9, 67.9]], ["C", [19.9, 68.2, 20, 68.5]], ["C", [20.2, 69.4, 20.4, 70.3]], ["C", [20.6, 71.2, 20.8, 72.1]], ["C", [22.2, 76.3, 24.55, 79.45]], ["C", [26.9, 82.6, 30.7, 84.25]], ["L", [32.2, 84.9]], ["C", [32.9, 85.2, 33.55, 85.35]], ["C", [34.2, 85.5, 35, 85.7]], ["C", [35.5, 85.8, 36.1, 85.85]], ["C", [36.7, 85.9, 37.2, 85.9]], ["L", [37.9, 85.9]], ["C", [38.4, 86.05, 39.05, 86.05]], ["C", [39.7, 86, 40.2, 86]], ["L", [41.1, 86]], ["C", [41.6, 85.9, 42, 85.9]], ["C", [42.4, 85.9, 42.8, 85.7]], ["C", [44.5, 84.8, 43.3, 83.3]], ["C", [42.7, 82.4, 41.85, 81.75]], ["C", [41, 81.1, 40.3, 80.2]], ["C", [40.1, 79.85, 39.8, 79.5]], ["C", [39.5, 79.1, 39.7, 78.4]], ["C", [39.9, 77.4, 40.6, 76.85]], ["C", [41.3, 76.3, 41.8, 75.5]], ["C", [42, 75.2, 42.25, 74.95]], ["C", [42.5, 74.7, 42.7, 74.4]], ["C", [42.9, 74.3, 43.2, 74]], ["C", [43.4, 73.65, 43.7, 73.35]], ["C", [44, 73, 44.4, 72.8]], ["C", [44.9, 72.3, 45.65, 72.15]], ["C", [46.4, 72, 47.2, 72.5]], ["C", [48.3, 73.2, 49.1, 74.1]], ["C", [49.9, 75, 51, 75.75]], ["L", [51.6, 76.4]], ["C", [52, 76.7, 52.65, 77.1]], ["C", [53.3, 77.5, 54.1, 77.3]], ["C", [54.6, 77.1, 55.2, 76.3]], ["C", [55.4, 75.95, 55.65, 75.65]], ["C", [55.9, 75.3, 56.1, 74.9]], ["C", [56.6, 73.65, 56.95, 72.4]], ["C", [57.3, 71.1, 57.7, 69.65]], ["C", [57.8, 69.1, 57.9, 68.5]], ["C", [58, 67.9, 58.1, 67.3]], ["C", [58.2, 66.6, 58.25, 65.95]], ["C", [58.3, 65.25, 58.3, 64.6]], ["L", [58.3, 63.7]], ["C", [58.5, 63.15, 58.5, 62.15]], ["C", [58.5, 61.05, 58.3, 60.6]], ["L", [58.3, 58.9]], ["C", [58.2, 58.5, 58.25, 58.15]], ["C", [58.3, 57.8, 58.1, 57.4]], ["C", [57.9, 56.7, 57.9, 56]], ["C", [57.9, 55.3, 57.7, 54.6]], ["C", [57.3, 53.2, 57.05, 52]], ["C", [56.8, 50.75, 56.3, 49.7]], ["C", [55.2, 47, 53.65, 44.7]], ["C", [52.1, 42.45, 49.9, 40.9]], ["C", [47.7, 39.3, 44.8, 38.35]], ["M", [57.7, 29.5]], ["C", [59.3, 30.4, 61.1, 31.9]], ["C", [61.5, 32.1, 61.8, 32.5]], ["C", [62.1, 32.9, 62.5, 33.1]], ["C", [63.2, 33.7, 63.85, 34.35]], ["C", [64.5, 35, 65, 35.8]], ["C", [65.2, 36.05, 65.55, 36.4]], ["C", [65.9, 36.7, 66.1, 37]], ["C", [67.2, 38.6, 68.3, 40.25]], ["C", [69.4, 42, 70.2, 43.8]], ["C", [70.8, 45.2, 71.25, 46.45]], ["C", [71.7, 47.8, 72.2, 49.3]], ["C", [72.5, 50.3, 72.7, 51.35]], ["C", [72.9, 52.4, 73.2, 53.5]], ["C", [73.4, 54.2, 73.4, 54.8]], ["C", [73.4, 55.5, 73.6, 56.1]], ["C", [73.8, 56.7, 73.75, 57.35]], ["C", [73.7, 58, 73.8, 58.5]], ["L", [73.8, 59.3]], ["C", [74, 59.9, 74.05, 61.35]], ["C", [74.1, 62.8, 73.9, 63.4]], ["C", [73.9, 63.9, 73.9, 64.45]], ["C", [73.9, 65, 73.8, 65.5]], ["C", [73.6, 66.6, 73.6, 67.65]], ["C", [73.6, 68.7, 73.3, 69.8]], ["C", [73.1, 70.6, 72.95, 71.45]], ["C", [72.8, 72.4, 72.6, 73.2]], ["C", [71.9, 75.2, 71.3, 77]], ["C", [70.7, 78.8, 69.8, 80.5]], ["C", [69.6, 80.8, 69.5, 81.15]], ["C", [69.4, 81.5, 69.2, 81.8]], ["C", [68.7, 82.6, 68.25, 83.4]], ["C", [67.8, 84.2, 67.3, 85]], ["C", [66.8, 85.6, 66.35, 86.1]], ["C", [65.9, 86.7, 65.7, 87.5]], ["C", [65.4, 88.4, 65.8, 88.95]], ["C", [66.2, 89.5, 66.5, 90]], ["C", [67.3, 91, 68.5, 91.8]], ["C", [68.6, 92, 68.9, 92.3]], ["C", [70.1, 93.2, 71.2, 94.3]], ["C", [71.6, 94.8, 72.2, 95.5]], ["C", [72.8, 96.2, 72.4, 97.3]], ["C", [71.9, 98.3, 71.05, 99.1]], ["C", [70.2, 99.9, 69.4, 100.65]], ["C", [68.9, 101.2, 68.3, 101.85]], ["C", [67.7, 102.5, 66.9, 102.75]], ["C", [65.8, 103.3, 64.95, 102.6]], ["C", [64.1, 101.9, 63.6, 101.5]], ["C", [62.5, 100.6, 61.45, 99.55]], ["C", [60.4, 98.5, 59.2, 97.6]], ["C", [58.5, 97.1, 57.9, 96.45]], ["C", [57.3, 95.8, 56.2, 95.6]], ["C", [55.4, 95.4, 54.8, 95.65]], ["C", [54.2, 95.9, 53.8, 96.1]], ["C", [52.7, 96.55, 51.6, 96.95]], ["C", [50.5, 97.3, 49.4, 97.7]], ["C", [48.1, 98.1, 46.65, 98.25]], ["C", [45.2, 98.4, 43.8, 98.65]], ["C", [43.2, 98.8, 42.6, 98.8]], ["C", [42, 98.8, 41.3, 98.9]], ["C", [40.8, 99, 39.55, 99.05]], ["C", [38.3, 99.1, 37.8, 98.9]], ["L", [36.6, 98.9]], ["C", [35.7, 98.65, 34.7, 98.65]], ["C", [33.7, 98.65, 32.8, 98.5]], ["C", [32.1, 98.3, 31.4, 98.25]], ["C", [30.7, 98.2, 30, 98]], ["C", [28.3, 97.5, 26.7, 97.05]], ["C", [25.1, 96.55, 23.6, 95.9]], ["C", [18.3, 93.6, 14.1, 89.3]], ["C", [9.9, 85, 7.6, 79.8]], ["C", [7, 78.4, 6.5, 77]], ["C", [6, 75.6, 5.5, 74.1]], ["C", [5.2, 73, 4.95, 71.85]], ["C", [4.7, 70.7, 4.5, 69.6]], ["C", [4.3, 69, 4.3, 68.35]], ["C", [4.3, 67.7, 4.1, 67.1]], ["C", [4, 66.5, 4.05, 65.9]], ["C", [4.1, 65.25, 4, 64.7]], ["L", [4, 63.6]], ["C", [3.8, 63.1, 3.8, 62.05]], ["C", [3.8, 61, 4, 60.5]], ["C", [4, 60.2, 3.95, 59.9]], ["C", [3.9, 59.6, 4, 59.4]], ["C", [4, 58.9, 4.05, 58.4]], ["C", [4.1, 57.9, 4.1, 57.4]], ["C", [4.2, 56.6, 4.3, 55.75]], ["C", [4.4, 54.85, 4.5, 54.1]], ["C", [4.9, 52.7, 5.1, 51.3]], ["C", [5.3, 49.9, 5.8, 48.55]], ["C", [8.6, 40.35, 13.4, 35.1]], ["C", [18.2, 29.8, 26, 26.6]], ["C", [27.3, 26.1, 28.75, 25.75]], ["C", [30.2, 25.5, 31.6, 25.1]], ["C", [32.1, 24.9, 32.55, 24.9]], ["C", [33, 24.9, 33.5, 24.8]], ["L", [36.5, 24.5]], ["C", [36.7, 24.4, 37.05, 24.5]], ["C", [37.4, 24.6, 37.6, 24.5]], ["C", [44, 24.3, 48.95, 25.65]], ["C", [53.9, 27, 57.7, 29.5]]]; __motifs["R"] = [["M", [41.5, 38.3]], ["C", [39.3, 38.2, 36.9, 38.2]], ["L", [25.3, 38.2]], ["C", [25.1, 38.4, 24.9, 38.35]], ["C", [24.7, 38.3, 24.5, 38.3]], ["C", [23.3, 38.6, 22.9, 39.3]], ["C", [22.4, 40.15, 22.45, 41.35]], ["C", [22.5, 42.6, 22.5, 43.8]], ["L", [22.5, 53.1]], ["C", [22.5, 54.3, 22.5, 55.5]], ["C", [22.5, 56.7, 23, 57.4]], ["C", [23.4, 58, 24.3, 58.2]], ["C", [25.2, 58.4, 26.3, 58.5]], ["C", [27.4, 58.6, 28.6, 58.55]], ["C", [29.85, 58.5, 30.7, 58.5]], ["L", [36.6, 58.5]], ["C", [37.3, 58.5, 38.1, 58.55]], ["C", [38.9, 58.6, 39.5, 58.4]], ["L", [40.8, 58.4]], ["C", [41.6, 58.2, 42.4, 58.2]], ["C", [43.1, 58.2, 43.8, 58]], ["C", [45.5, 57.5, 46.85, 56.7]], ["C", [48.1, 55.9, 49, 54.6]], ["C", [49.6, 53.7, 49.9, 52.6]], ["C", [50.2, 51.5, 50.5, 50.1]], ["C", [50.75, 49, 50.55, 47.4]], ["C", [50.4, 45.8, 50.2, 45]], ["C", [50, 44.6, 50, 44.35]], ["C", [50, 44.05, 49.8, 43.7]], ["C", [48.65, 40.6, 45.4, 39.2]], ["C", [43.7, 38.4, 41.5, 38.3]], ["M", [59.05, 30.6]], ["C", [61.15, 32.2, 62.5, 34.3]], ["C", [62.9, 34.8, 63.2, 35.35]], ["C", [63.45, 35.9, 63.8, 36.4]], ["C", [64.6, 37.8, 65, 39.3]], ["C", [65.45, 40.8, 65.9, 42.6]], ["C", [66, 43, 65.95, 43.4]], ["C", [65.9, 43.8, 66.1, 44.2]], ["L", [66.1, 45.1]], ["C", [66.3, 45.9, 66.2, 47.05]], ["C", [66.1, 48.2, 65.9, 48.85]], ["C", [65.7, 49.7, 65.7, 50.35]], ["C", [65.7, 50.95, 65.55, 51.7]], ["C", [65, 53.15, 64.5, 54.55]], ["C", [64, 55.9, 63.25, 57.05]], ["C", [63, 57.35, 62.7, 57.75]], ["C", [62.4, 58.1, 62.2, 58.4]], ["C", [61.9, 58.8, 61.55, 59.15]], ["C", [61.25, 59.55, 60.8, 59.9]], ["C", [60.2, 60.4, 59.6, 60.9]], ["C", [59.05, 61.35, 58.3, 61.85]], ["C", [57.9, 62.2, 57.5, 62.55]], ["C", [57.15, 62.9, 56.95, 63.35]], ["C", [56.7, 63.95, 57.15, 64.4]], ["C", [57.5, 64.8, 57.8, 65]], ["C", [58.8, 65.75, 59.8, 66.6]], ["C", [60.8, 67.35, 61.5, 68.5]], ["C", [62.7, 70.15, 63.45, 71.95]], ["C", [64.1, 73.75, 64.7, 76.05]], ["C", [64.9, 77, 64.95, 77.95]], ["C", [65, 79, 65.25, 79.85]], ["C", [65.25, 80.45, 65.3, 81.05]], ["C", [65.35, 81.6, 65.35, 82.15]], ["C", [65.45, 82.55, 65.4, 83.05]], ["C", [65.35, 83.5, 65.45, 83.95]], ["C", [65.55, 84.35, 65.5, 84.75]], ["C", [65.45, 85.2, 65.55, 85.7]], ["C", [65.7, 86.65, 65.7, 87.8]], ["C", [65.7, 88.85, 65.9, 89.9]], ["L", [66.2, 91.7]], ["C", [66.4, 92.55, 66.6, 93.5]], ["C", [66.8, 94.4, 67, 95.15]], ["C", [67.2, 95.8, 66.95, 96.3]], ["C", [66.7, 96.75, 66.4, 96.95]], ["C", [65.8, 97.45, 64.75, 97.4]], ["C", [63.7, 97.35, 62.6, 97.35]], ["L", [57.15, 97.35]], ["C", [55.5, 97.35, 54.3, 97.2]], ["C", [53.15, 97.05, 52.5, 96.1]], ["C", [51.7, 94.75, 51.6, 92.85]], ["C", [51.5, 90.95, 51.1, 89.3]], ["C", [51.1, 88.85, 51.05, 88.5]], ["C", [51.05, 88.15, 51.05, 87.9]], ["C", [50.75, 86.65, 50.75, 85.35]], ["C", [50.75, 83.95, 50.5, 82.85]], ["C", [50.4, 82.55, 50.4, 81.95]], ["C", [50.2, 80.85, 50.05, 79.75]], ["C", [49.9, 78.55, 49.6, 77.5]], ["C", [48.85, 75.2, 47.7, 73.4]], ["C", [46.65, 71.55, 44.65, 70.7]], ["C", [44.1, 70.45, 43.6, 70.35]], ["C", [43.1, 70.25, 42.55, 70.05]], ["C", [40.7, 69.45, 38.4, 69.45]], ["C", [36, 69.45, 33.7, 69.45]], ["L", [25.5, 69.45]], ["C", [24.7, 69.65, 24.1, 69.75]], ["C", [23.5, 69.85, 23.1, 70.35]], ["C", [22.3, 71.4, 22.4, 73.5]], ["C", [22.5, 75.6, 22.5, 77.3]], ["L", [22.5, 90.1]], ["C", [22.5, 90.85, 22.45, 91.75]], ["C", [22.4, 92.55, 22.4, 93.35]], ["C", [22.4, 94.2, 22.4, 94.8]], ["C", [22.4, 95.45, 22.2, 96]], ["C", [21.9, 96.85, 21, 97.15]], ["C", [20.5, 97.35, 19.8, 97.35]], ["C", [19.15, 97.35, 18.3, 97.35]], ["L", [13.8, 97.35]], ["C", [12.2, 97.35, 10.45, 97.4]], ["C", [8.65, 97.45, 7.7, 96.75]], ["C", [6.95, 96.3, 6.95, 94.9]], ["C", [6.95, 93.6, 6.95, 92.3]], ["L", [6.95, 31.5]], ["C", [6.95, 30.4, 6.9, 29.2]], ["C", [6.85, 28, 7.3, 27.35]], ["C", [7.7, 26.7, 8.85, 26.3]], ["C", [9.05, 26.2, 9.3, 26.25]], ["C", [9.5, 26.3, 9.7, 26.2]], ["L", [43.7, 26.2]], ["C", [45.3, 26.2, 46.8, 26.25]], ["C", [48.2, 26.3, 49.5, 26.6]], ["C", [50, 26.8, 50.55, 26.8]], ["C", [51.1, 26.8, 51.6, 27]], ["C", [52.3, 27.2, 53.05, 27.45]], ["C", [53.7, 27.65, 54.4, 27.9]], ["C", [56.95, 29, 59.05, 30.6]]]; __motifs["S"] = [["M", [41.5, 39.75]], ["C", [40.1, 38.7, 38.8, 38.05]], ["C", [37.6, 37.55, 35.85, 37.2]], ["C", [34.1, 36.8, 32.25, 36.7]], ["C", [30.4, 36.6, 28.6, 36.8]], ["C", [26.8, 37, 25.4, 37.65]], ["C", [23.1, 38.6, 21.85, 40]], ["C", [20.6, 41.35, 20.1, 44.05]], ["C", [19.9, 44.7, 20, 45.6]], ["C", [20.1, 46.45, 20.3, 46.9]], ["C", [21.1, 49, 22.55, 49.9]], ["C", [24, 50.7, 26, 51.5]], ["C", [27.1, 52.05, 28.25, 52.3]], ["C", [29.4, 52.55, 30.6, 52.9]], ["C", [33.3, 53.85, 36.15, 54.5]], ["C", [39, 55.1, 41.8, 55.95]], ["C", [42.3, 56.15, 42.8, 56.15]], ["C", [43.3, 56.15, 43.8, 56.35]], ["C", [45.8, 57, 47.95, 57.6]], ["C", [50.1, 58.25, 51.8, 59.3]], ["C", [54.5, 61.05, 56.45, 62.75]], ["C", [58.4, 64.45, 60.1, 67.15]], ["C", [60.6, 67.9, 60.95, 68.95]], ["C", [61.3, 69.9, 61.7, 70.95]], ["C", [61.8, 71.25, 61.8, 71.45]], ["C", [61.8, 71.7, 61.9, 71.9]], ["C", [62.3, 73.55, 62.3, 75.9]], ["C", [62.5, 76.4, 62.3, 76.95]], ["L", [62.3, 78.7]], ["C", [62.1, 79.8, 61.95, 80.8]], ["C", [61.8, 81.85, 61.5, 82.8]], ["C", [60.9, 84.6, 60.2, 86.1]], ["C", [59.5, 87.65, 58.5, 89]], ["C", [58.1, 89.55, 57.7, 89.9]], ["C", [57.3, 90.2, 57, 90.7]], ["C", [56.5, 91.35, 55.9, 91.9]], ["C", [55.3, 92.4, 54.6, 92.9]], ["C", [54.1, 93.3, 53.55, 93.75]], ["C", [53, 94.15, 52.4, 94.5]], ["C", [50.7, 95.65, 48.85, 96.35]], ["C", [47, 97, 45, 97.75]], ["C", [43.6, 98.25, 42.1, 98.4]], ["C", [40.6, 98.55, 39.1, 98.8]], ["C", [38.4, 99, 37.75, 98.95]], ["C", [37.1, 98.9, 36.5, 99.1]], ["L", [35.7, 99.1]], ["C", [35.5, 99.1, 35.15, 99.05]], ["C", [34.8, 99, 34.6, 99.1]], ["C", [34.1, 99.2, 32.9, 99.2]], ["C", [31.7, 99.2, 31.2, 99.1]], ["L", [30.2, 99.1]], ["C", [29.5, 98.9, 28.75, 98.95]], ["C", [28, 99, 27.4, 98.8]], ["C", [26.9, 98.8, 26.5, 98.75]], ["C", [26.1, 98.7, 25.6, 98.6]], ["C", [24.4, 98.35, 23.1, 98.15]], ["C", [21.8, 97.95, 20.7, 97.5]], ["C", [15.8, 95.95, 12.1, 93.5]], ["C", [8.4, 91, 5.9, 87]], ["C", [4.3, 84.6, 3.4, 81.35]], ["C", [3.2, 80.7, 3.15, 80.1]], ["C", [3.1, 79.55, 2.9, 78.85]], ["C", [2.7, 78, 2.6, 76.9]], ["C", [2.5, 75.7, 3, 75.15]], ["C", [3.5, 74.3, 4.45, 74.15]], ["C", [5.4, 74, 6.6, 74]], ["L", [12.9, 74]], ["C", [13.7, 74, 14.6, 74]], ["C", [15.5, 74, 16.2, 74.3]], ["C", [17.3, 74.85, 17.5, 75.95]], ["C", [17.7, 77.15, 18.2, 78.3]], ["C", [18.6, 79.55, 19.2, 80.5]], ["C", [19.8, 81.55, 20.5, 82.4]], ["C", [21, 83.05, 21.6, 83.55]], ["C", [22.2, 84, 22.8, 84.4]], ["C", [25, 85.85, 28.2, 86.7]], ["C", [28.9, 86.9, 29.55, 86.9]], ["C", [30.2, 86.9, 31, 87.1]], ["L", [31.5, 87.1]], ["C", [32.3, 87.35, 33.7, 87.35]], ["C", [35.1, 87.35, 35.9, 87.1]], ["C", [36.2, 87, 36.9, 87]], ["C", [37.4, 86.9, 37.95, 86.85]], ["C", [38.5, 86.8, 39, 86.6]], ["C", [42.4, 85.75, 44.4, 84.2]], ["C", [46.4, 82.7, 47.2, 79.25]], ["C", [47.4, 78.5, 47.25, 77.65]], ["C", [47.1, 76.7, 46.9, 76.2]], ["C", [45.9, 73.55, 43.5, 72]], ["C", [43.2, 71.8, 42.4, 71.45]], ["C", [40.9, 70.55, 39.05, 69.95]], ["C", [37.2, 69.4, 35.4, 68.85]], ["C", [34.7, 68.65, 34.05, 68.5]], ["C", [33.4, 68.3, 32.6, 68.1]], ["C", [31, 67.6, 29.35, 67.3]], ["C", [27.7, 66.95, 26.2, 66.45]], ["C", [25.7, 66.2, 25.4, 66.2]], ["C", [25.1, 66.2, 24.7, 66]], ["C", [23.9, 65.8, 23.25, 65.6]], ["C", [22.6, 65.4, 21.8, 65.2]], ["C", [19.5, 64.45, 17.4, 63.55]], ["C", [15.3, 62.75, 13.5, 61.6]], ["C", [11.2, 60.15, 9.3, 58.15]], ["C", [7.4, 56.15, 6.3, 53.5]], ["C", [5.9, 52.65, 5.7, 51.65]], ["C", [5.5, 50.7, 5.2, 49.6]], ["C", [5, 48.7, 4.9, 47]], ["C", [4.8, 45.3, 5, 44.25]], ["C", [5.1, 43.85, 5.1, 43]], ["C", [5.4, 41.95, 5.6, 40.9]], ["C", [5.8, 39.95, 6.2, 38.9]], ["C", [7.7, 35.45, 10.05, 32.95]], ["C", [12.4, 30.5, 15.5, 28.5]], ["C", [17.5, 27.35, 19.8, 26.6]], ["C", [22.1, 25.9, 24.7, 25.35]], ["C", [25.7, 25.15, 26.65, 25.1]], ["C", [27.6, 25.05, 28.6, 24.85]], ["C", [28.9, 24.75, 29.55, 24.85]], ["C", [30.2, 24.95, 30.4, 24.75]], ["C", [49.8, 24.4, 57.1, 36.2]], ["C", [58.1, 37.85, 58.65, 39.55]], ["C", [59.2, 41.2, 59.7, 43.2]], ["C", [59.9, 44.05, 59.85, 45.05]], ["C", [59.8, 46.15, 59.4, 46.6]], ["C", [58.9, 47.2, 58, 47.35]], ["C", [57.1, 47.5, 56, 47.5]], ["L", [49.7, 47.5]], ["C", [48.8, 47.5, 47.9, 47.5]], ["C", [47, 47.5, 46.4, 47.3]], ["C", [45.2, 46.8, 44.9, 45.75]], ["C", [44.6, 44.6, 44.1, 43.55]], ["C", [43.7, 42.5, 43, 41.45]], ["C", [42.3, 40.3, 41.5, 39.75]]]; __motifs["T"] = [["M", [58.9, 26.8]], ["C", [59.2, 27, 59.35, 27.5]], ["C", [59.45, 27.9, 59.55, 28.4]], ["L", [59.55, 28.9]], ["C", [59.65, 29.3, 59.65, 29.8]], ["C", [59.65, 30.3, 59.65, 30.8]], ["L", [59.65, 34.7]], ["C", [59.65, 35.4, 59.7, 36.05]], ["C", [59.75, 36.7, 59.55, 37.3]], ["C", [59.1, 39, 57.55, 39.1]], ["C", [56.1, 39.2, 54, 39.2]], ["L", [43.8, 39.2]], ["C", [41.8, 39.2, 40.35, 39.35]], ["C", [38.85, 39.5, 38.4, 41.2]], ["C", [38.3, 41.7, 38.4, 42.1]], ["C", [38.5, 42.5, 38.3, 43]], ["C", [38.2, 43.6, 38.25, 44.35]], ["C", [38.3, 45.1, 38.3, 45.7]], ["L", [38.3, 92.8]], ["C", [38.3, 94.4, 38.15, 95.55]], ["C", [38, 96.7, 36.85, 97.2]], ["C", [36.2, 97.4, 35.3, 97.4]], ["C", [34.4, 97.4, 33.6, 97.4]], ["L", [26.8, 97.4]], ["C", [25.7, 97.4, 24.75, 97.3]], ["C", [23.8, 97.2, 23.3, 96.6]], ["C", [22.8, 95.8, 22.8, 94.55]], ["C", [22.8, 93.3, 22.8, 92]], ["L", [22.8, 45.7]], ["C", [22.8, 45, 22.85, 44.25]], ["C", [22.9, 43.5, 22.7, 42.9]], ["C", [22.6, 42.4, 22.7, 42]], ["C", [22.8, 41.6, 22.6, 41.2]], ["C", [22.1, 39.5, 20.55, 39.35]], ["C", [19, 39.2, 16.9, 39.2]], ["L", [7.6, 39.2]], ["C", [6.5, 39.2, 5.2, 39.25]], ["C", [3.8, 39.3, 3.05, 39.1]], ["C", [2.2, 38.8, 1.8, 38.2]], ["C", [1.5, 37.7, 1.45, 36.9]], ["C", [1.4, 36.1, 1.4, 35.3]], ["L", [1.4, 30.4]], ["C", [1.4, 29.1, 1.55, 28.1]], ["C", [1.7, 27.1, 2.5, 26.6]], ["C", [2.8, 26.4, 3.6, 26.2]], ["L", [54.3, 26.2]], ["C", [55.55, 26.2, 56.85, 26.25]], ["C", [58.1, 26.3, 58.9, 26.8]]]; __motifs["U"] = [["M", [51.75, 29.5]], ["C", [51.7, 27.75, 52.3, 27]], ["C", [52.8, 26.35, 53.7, 26.2]], ["C", [54.6, 26.05, 55.7, 26.05]], ["L", [62.1, 26.05]], ["C", [62.9, 26.05, 63.6, 26]], ["C", [64.4, 25.95, 65.1, 26.15]], ["C", [66.5, 26.45, 66.9, 27.2]], ["C", [67.4, 27.95, 67.35, 29.45]], ["C", [67.3, 30.9, 67.3, 32.05]], ["L", [67.3, 65.65]], ["C", [67.3, 69.45, 67.2, 73.1]], ["C", [67.1, 76.7, 66.3, 79.6]], ["C", [64.9, 84.25, 62.75, 87.75]], ["C", [60.6, 91.15, 57.1, 93.6]], ["C", [54, 95.8, 49.8, 97.15]], ["C", [48.9, 97.5, 47.95, 97.7]], ["C", [46.95, 97.9, 46.1, 98.1]], ["C", [45.5, 98.3, 44.9, 98.3]], ["C", [44.4, 98.3, 43.8, 98.5]], ["C", [42.6, 98.7, 41.05, 98.8]], ["C", [39.6, 98.9, 38.2, 98.9]], ["C", [28.7, 99, 21.95, 96.5]], ["C", [15.3, 94.1, 11.45, 88.55]], ["C", [10.2, 86.75, 9.35, 84.8]], ["C", [8.5, 82.9, 7.8, 80.55]], ["C", [7.55, 80.05, 7.55, 79.75]], ["C", [7.55, 79.4, 7.35, 78.9]], ["C", [6.6, 76.05, 6.6, 72.6]], ["C", [6.6, 69.1, 6.6, 65.55]], ["L", [6.6, 30.65]], ["C", [6.6, 29.7, 6.6, 28.75]], ["C", [6.6, 27.75, 6.9, 27.2]], ["C", [7.45, 26.45, 8.5, 26.15]], ["C", [8.7, 26.15, 8.9, 26.15]], ["C", [9.1, 26.15, 9.3, 26.05]], ["L", [17.75, 26.05]], ["C", [18.9, 26.05, 19.9, 26.15]], ["C", [21, 26.25, 21.5, 26.9]], ["C", [21.95, 27.7, 22, 28.95]], ["C", [22.05, 30.15, 22.05, 31.5]], ["L", [22.05, 65.65]], ["C", [22.05, 66.05, 22, 66.55]], ["C", [21.95, 67, 22.05, 67.35]], ["L", [22.05, 69]], ["C", [22.05, 69.85, 22, 70.9]], ["C", [21.95, 71.85, 22.15, 72.7]], ["C", [22.15, 73.4, 22.25, 73.75]], ["C", [22.45, 74.9, 22.6, 75.95]], ["C", [22.75, 77.1, 23.15, 78.15]], ["C", [24.25, 80.8, 26.05, 82.45]], ["C", [27.8, 84.15, 30.65, 85.2]], ["C", [31.5, 85.4, 32.3, 85.5]], ["C", [33.05, 85.6, 33.9, 85.8]], ["C", [34.4, 86, 34.75, 85.95]], ["C", [35.2, 85.9, 35.7, 86]], ["C", [36.1, 86.05, 36.95, 86.05]], ["C", [37.9, 86, 38.2, 85.9]], ["L", [39.7, 85.9]], ["C", [40.5, 85.7, 41.3, 85.6]], ["C", [42.1, 85.5, 42.75, 85.3]], ["C", [44.2, 85, 45, 84.55]], ["C", [46.8, 83.8, 48.15, 82.4]], ["C", [49.5, 81.1, 50.3, 79.4]], ["C", [51.4, 76.8, 51.6, 73.25]], ["C", [51.8, 69.65, 51.8, 65.85]], ["L", [51.8, 32.55]], ["C", [51.8, 31.2, 51.75, 29.5]]]; __motifs["V"] = [["M", [60.6, 26.2]], ["C", [61.6, 26.2, 62.2, 26.6]], ["C", [63.2, 27.1, 62.9, 28.45]], ["C", [62.6, 29.8, 62.3, 30.7]], ["C", [61.4, 33, 60.65, 35.45]], ["C", [59.9, 37.9, 59.1, 40.3]], ["C", [58.8, 40.9, 58.65, 41.5]], ["C", [58.5, 42.1, 58.3, 42.7]], ["C", [57.5, 44.8, 56.85, 47]], ["C", [56.2, 49.2, 55.4, 51.4]], ["C", [52.7, 59.5, 50, 67.65]], ["C", [47.3, 75.8, 44.6, 83.9]], ["C", [43.7, 86.2, 43, 88.55]], ["C", [42.3, 90.9, 41.5, 93.2]], ["C", [41, 94.6, 40.5, 95.75]], ["C", [40, 96.9, 38.5, 97.3]], ["C", [37.7, 97.5, 36.7, 97.45]], ["C", [35.7, 97.4, 34.8, 97.4]], ["L", [27.6, 97.4]], ["C", [26.5, 97.4, 25.25, 97.45]], ["C", [24, 97.5, 23.2, 97]], ["C", [22.1, 96.4, 21.75, 95.15]], ["C", [21.4, 93.9, 21, 92.7]], ["C", [20.3, 90.6, 19.65, 88.45]], ["C", [19, 86.3, 18.3, 84.2]], ["C", [16.1, 77.9, 14.1, 71.5]], ["C", [12.1, 65.1, 9.9, 58.7]], ["C", [9, 55.8, 8.15, 52.95]], ["C", [7.3, 50.1, 6.3, 47.3]], ["C", [5.9, 46.4, 5.7, 45.5]], ["C", [5.5, 44.6, 5.1, 43.7]], ["C", [4.2, 40.9, 3.35, 38.15]], ["C", [2.5, 35.4, 1.5, 32.6]], ["C", [1.3, 31.7, 1, 30.85]], ["C", [0.7, 30, 0.4, 29.1]], ["C", [0.3, 28.6, 0.25, 28.1]], ["C", [0.2, 27.6, 0.4, 27.2]], ["C", [0.7, 26.5, 1.7, 26.3]], ["C", [1.9, 26.2, 2.15, 26.25]], ["C", [2.4, 26.3, 2.6, 26.2]], ["L", [10.7, 26.2]], ["C", [11.8, 26.2, 12.95, 26.2]], ["C", [14.1, 26.2, 14.8, 26.7]], ["C", [15.7, 27.2, 16, 28.3]], ["C", [16.3, 29.4, 16.7, 30.5]], ["C", [17.4, 32.4, 17.95, 34.3]], ["C", [18.5, 36.2, 19.2, 38.2]], ["C", [21.2, 44.4, 23.15, 50.6]], ["C", [25.1, 56.8, 27.1, 63]], ["C", [27.6, 64.7, 28.15, 66.4]], ["C", [28.7, 68.1, 29.2, 69.8]], ["C", [29.5, 70.7, 29.8, 71.6]], ["C", [30.1, 72.5, 30.6, 73.2]], ["C", [30.7, 73.4, 30.85, 73.45]], ["C", [31, 73.5, 31.2, 73.7]], ["C", [32.3, 73.7, 32.65, 72.75]], ["C", [33, 71.8, 33.3, 71]], ["C", [34.1, 68.9, 34.7, 66.7]], ["C", [35.3, 64.5, 36.1, 62.2]], ["C", [38.3, 55.6, 40.35, 49.05]], ["C", [42.4, 42.5, 44.6, 35.9]], ["C", [45.1, 34.3, 45.6, 32.75]], ["C", [46.1, 31.2, 46.6, 29.6]], ["C", [47, 28.8, 47.25, 28]], ["C", [47.5, 27.2, 48.3, 26.7]], ["C", [49, 26.2, 49.95, 26.2]], ["C", [50.9, 26.2, 51.9, 26.2]], ["L", [58.6, 26.2]], ["C", [59.6, 26.2, 60.6, 26.2]]]; __motifs["W"] = [["M", [91.35, 35.3]], ["C", [90.8, 37.85, 90, 40.2]], ["C", [89.8, 40.8, 89.7, 41.35]], ["C", [89.6, 41.95, 89.4, 42.5]], ["C", [88.9, 44.25, 88.45, 46.1]], ["C", [88, 47.95, 87.5, 49.6]], ["C", [87.3, 50.15, 87.25, 50.65]], ["C", [87.2, 51.1, 87, 51.6]], ["C", [86.5, 52.9, 86.25, 54.25]], ["C", [86, 55.5, 85.5, 56.85]], ["C", [85.3, 57.3, 85.3, 57.7]], ["C", [85.3, 58.1, 85.1, 58.65]], ["C", [84.6, 60, 84.35, 61.45]], ["C", [84.1, 62.95, 83.6, 64.3]], ["C", [83.3, 65.3, 83.05, 66.25]], ["C", [82.8, 67.25, 82.5, 68.2]], ["C", [81.3, 72, 80.45, 75.9]], ["C", [79.6, 79.8, 78.3, 83.55]], ["C", [78.1, 84.2, 78, 84.8]], ["C", [77.9, 85.45, 77.7, 86.1]], ["C", [77.2, 87.85, 76.75, 89.7]], ["C", [76.3, 91.55, 75.7, 93.2]], ["C", [75.3, 94.5, 75, 95.6]], ["C", [74.7, 96.7, 73.5, 97.2]], ["C", [72.8, 97.4, 71.8, 97.4]], ["C", [70.8, 97.4, 69.9, 97.4]], ["L", [63.4, 97.4]], ["C", [62.3, 97.4, 61.3, 97.35]], ["C", [60.3, 97.3, 59.6, 96.8]], ["C", [59, 96.35, 58.8, 95.55]], ["C", [58.6, 94.8, 58.3, 94.05]], ["C", [57.7, 92.05, 57.3, 90.1]], ["C", [56.9, 88.15, 56.4, 86.1]], ["C", [56, 84.9, 55.75, 83.7]], ["C", [55.5, 82.4, 55.1, 81.1]], ["C", [54.8, 80.2, 54.65, 79.3]], ["C", [54.5, 78.3, 54.2, 77.45]], ["C", [53.4, 75.05, 52.9, 72.45]], ["C", [52.4, 69.9, 51.7, 67.4]], ["C", [51.2, 66, 50.95, 64.75]], ["C", [50.7, 63.4, 50.3, 62]], ["C", [49.8, 60.3, 49.5, 58.75]], ["C", [49.2, 57.1, 48.7, 55.5]], ["C", [48.4, 54.75, 48.25, 54]], ["C", [48.1, 53.3, 47.7, 52.7]], ["C", [47.5, 52.55, 47.1, 52.35]], ["C", [46.8, 52.25, 46.7, 52.35]], ["C", [46, 52.55, 45.7, 53.5]], ["C", [45.4, 54.55, 45.2, 55.2]], ["C", [44.5, 57.3, 44.1, 59.55]], ["C", [43.7, 61.8, 43.1, 64]], ["C", [41.8, 68.5, 40.85, 73.05]], ["C", [39.9, 77.55, 38.6, 82]], ["C", [38.1, 83.65, 37.85, 85.15]], ["C", [37.6, 86.7, 37.1, 88.3]], ["C", [36.6, 89.75, 36.35, 91.1]], ["C", [36.1, 92.5, 35.7, 93.95]], ["C", [35.4, 94.9, 35.15, 95.7]], ["C", [34.9, 96.5, 34.1, 97]], ["C", [33.4, 97.4, 32.4, 97.4]], ["C", [31.4, 97.4, 30.3, 97.4]], ["L", [21.6, 97.4]], ["C", [20.9, 97.2, 20.4, 97.15]], ["C", [19.9, 97.1, 19.4, 96.7]], ["C", [18.6, 96.25, 18.4, 95.05]], ["C", [18.2, 93.95, 17.9, 92.8]], ["C", [17.4, 91.2, 16.95, 89.55]], ["C", [16.5, 87.85, 16, 86.1]], ["C", [15.8, 85.55, 15.75, 84.95]], ["C", [15.7, 84.4, 15.5, 83.75]], ["C", [14.9, 82, 14.5, 80.3]], ["C", [14.1, 78.6, 13.6, 76.95]], ["C", [13.4, 76.5, 13.4, 76.15]], ["C", [13.4, 75.8, 13.3, 75.45]], ["C", [12.8, 74, 12.45, 72.45]], ["C", [12.1, 70.95, 11.6, 69.4]], ["C", [11.5, 69.15, 11.5, 68.85]], ["C", [11.5, 68.5, 11.3, 68.1]], ["C", [10.8, 66.75, 10.55, 65.25]], ["C", [10.3, 63.8, 9.8, 62.35]], ["C", [9.5, 61.3, 9.25, 60.3]], ["C", [9, 59.2, 8.7, 58.25]], ["C", [8.4, 57.2, 8.2, 56.25]], ["C", [8, 55.2, 7.6, 54.25]], ["C", [6.7, 51.3, 6.05, 48.35]], ["C", [5.4, 45.3, 4.5, 42.4]], ["C", [4.3, 41.85, 4.2, 41.2]], ["C", [4.1, 40.6, 3.9, 40.05]], ["C", [3.2, 37.95, 2.7, 35.75]], ["C", [2.2, 33.55, 1.5, 31.35]], ["C", [1.3, 30.6, 0.95, 29.25]], ["C", [0.6, 27.8, 1.1, 27.15]], ["C", [1.6, 26.5, 2.5, 26.3]], ["C", [2.7, 26.2, 2.9, 26.25]], ["C", [3.1, 26.3, 3.3, 26.2]], ["L", [11.2, 26.2]], ["C", [12.3, 26.2, 13.4, 26.2]], ["C", [14.5, 26.2, 15.1, 26.7]], ["C", [15.9, 27.35, 16.15, 28.35]], ["C", [16.4, 29.45, 16.7, 30.5]], ["C", [17.1, 31.9, 17.4, 33.4]], ["C", [17.7, 34.8, 18.1, 36.2]], ["C", [18.3, 36.7, 18.3, 37.05]], ["C", [18.3, 37.45, 18.4, 37.95]], ["C", [18.8, 39.3, 19.05, 40.7]], ["C", [19.3, 42.15, 19.7, 43.5]], ["C", [20.1, 44.6, 20.3, 45.85]], ["C", [20.5, 47, 20.8, 48.25]], ["C", [21.8, 51.5, 22.45, 54.9]], ["C", [23.1, 58.35, 24, 61.6]], ["C", [24.5, 63.15, 24.75, 64.65]], ["C", [25, 66.1, 25.4, 67.6]], ["C", [25.8, 68.85, 26, 69.65]], ["C", [26.2, 70.5, 27, 71.35]], ["C", [27.2, 71.35, 27.25, 71.4]], ["C", [27.3, 71.45, 27.5, 71.35]], ["C", [28.1, 71.15, 28.4, 70.2]], ["C", [28.7, 69.35, 28.9, 68.75]], ["C", [29.3, 67.4, 29.55, 66.05]], ["C", [29.8, 64.75, 30.3, 63.4]], ["C", [30.4, 62.95, 30.5, 62.5]], ["C", [30.6, 62, 30.7, 61.5]], ["C", [31.2, 60.2, 31.45, 58.9]], ["C", [31.7, 57.5, 32.1, 56.25]], ["C", [32.2, 55.8, 32.3, 55.4]], ["C", [32.4, 55, 32.5, 54.55]], ["C", [32.8, 53.6, 33, 52.7]], ["C", [33.2, 51.7, 33.5, 50.8]], ["C", [33.7, 50.05, 33.7, 49.6]], ["C", [33.9, 48.9, 34.1, 48.25]], ["C", [34.3, 47.5, 34.5, 46.8]], ["C", [35.4, 44.05, 36, 41.15]], ["C", [36.6, 38.3, 37.4, 35.55]], ["C", [37.9, 34.1, 38.15, 32.7]], ["C", [38.4, 31.35, 38.8, 29.9]], ["C", [39.2, 28.8, 39.5, 27.85]], ["C", [39.8, 26.95, 40.9, 26.4]], ["C", [41.6, 26.2, 42.5, 26.2]], ["C", [43.4, 26.2, 44.3, 26.2]], ["L", [50.2, 26.2]], ["C", [51.3, 26.2, 52.25, 26.25]], ["C", [53.2, 26.3, 53.9, 26.8]], ["C", [54.6, 27.35, 54.8, 28.25]], ["C", [55, 29.25, 55.3, 30.2]], ["C", [55.8, 32, 56.2, 33.9]], ["C", [56.6, 35.75, 57.1, 37.55]], ["C", [57.5, 38.8, 57.75, 40.15]], ["C", [58, 41.4, 58.4, 42.7]], ["C", [58.7, 43.85, 58.9, 44.85]], ["C", [59.1, 45.95, 59.5, 47]], ["C", [60.6, 50.7, 61.4, 54.6]], ["C", [62.2, 58.45, 63.3, 62.1]], ["C", [63.8, 63.6, 64.05, 65.2]], ["C", [64.3, 66.85, 64.8, 68.2]], ["C", [65.1, 69.25, 65.3, 70.05]], ["C", [65.5, 70.95, 66, 71.6]], ["C", [66.1, 71.7, 66.5, 71.9]], ["L", [66.9, 71.9]], ["C", [67, 71.8, 67.1, 71.75]], ["C", [67.2, 71.7, 67.3, 71.6]], ["C", [67.9, 70.85, 68.1, 69.85]], ["C", [68.3, 68.95, 68.6, 67.9]], ["C", [69.1, 66.3, 69.35, 64.75]], ["C", [69.6, 63.15, 70.1, 61.5]], ["C", [71.4, 57.1, 72.25, 52.7]], ["C", [73.1, 48.35, 74.4, 43.95]], ["C", [74.9, 42.3, 75.15, 40.7]], ["C", [75.4, 39.1, 75.9, 37.55]], ["C", [76.1, 37, 76.1, 36.65]], ["C", [76.1, 36.3, 76.2, 35.85]], ["C", [76.6, 34.4, 76.9, 33]], ["C", [77.2, 31.65, 77.6, 30.2]], ["C", [77.8, 29.45, 78.05, 28.4]], ["C", [78.3, 27.45, 78.9, 26.95]], ["C", [79.6, 26.4, 80.6, 26.3]], ["C", [81.6, 26.2, 82.9, 26.2]], ["L", [88.6, 26.2]], ["C", [89.6, 26.2, 90.55, 26.2]], ["C", [91.5, 26.2, 92.2, 26.5]], ["C", [93.2, 27.05, 93.1, 28.2]], ["C", [93, 29.45, 92.7, 30.4]], ["C", [91.9, 32.7, 91.35, 35.3]]]; __motifs["X"] = [["M", [53.05, 44.3]], ["C", [50, 48.9, 46.8, 53.6]], ["C", [46, 54.8, 45.3, 55.95]], ["C", [44.6, 57.1, 43.8, 58.3]], ["C", [43.6, 58.7, 43.25, 59.3]], ["C", [42.9, 59.9, 43.1, 60.7]], ["C", [43.3, 61.6, 43.75, 62.25]], ["C", [44.2, 62.9, 44.7, 63.6]], ["C", [46.4, 66.3, 48.5, 69.2]], ["C", [51.4, 73.65, 54.35, 78.15]], ["C", [57.3, 82.6, 60.3, 87.1]], ["C", [61.4, 88.8, 62.5, 90.35]], ["C", [63.6, 92, 64.7, 93.7]], ["C", [64.9, 94.1, 65.45, 94.9]], ["C", [66, 95.7, 65.8, 96.4]], ["C", [65.5, 97.3, 64.3, 97.35]], ["C", [63.1, 97.4, 61.9, 97.4]], ["L", [53.9, 97.4]], ["C", [52.9, 97.4, 51.8, 97.45]], ["C", [50.7, 97.5, 49.9, 97.3]], ["C", [48.2, 96.8, 47.3, 95.25]], ["C", [46.4, 93.7, 45.5, 92.3]], ["C", [43.5, 89.2, 41.55, 86.05]], ["C", [39.6, 83, 37.6, 79.85]], ["C", [37.1, 79.2, 36.75, 78.55]], ["C", [36.4, 77.85, 35.9, 77.2]], ["C", [35.6, 76.7, 35.3, 76.2]], ["C", [35, 75.65, 34.6, 75.2]], ["C", [34.3, 74.9, 33.9, 74.5]], ["C", [33.5, 74.1, 32.8, 74.3]], ["C", [32.1, 74.5, 31.75, 75]], ["C", [31.4, 75.5, 31, 76]], ["C", [30.4, 76.9, 29.85, 77.75]], ["C", [29.3, 78.7, 28.7, 79.6]], ["C", [26.6, 82.8, 24.5, 85.95]], ["C", [22.4, 89.1, 20.4, 92.3]], ["C", [19.6, 93.6, 18.65, 95.2]], ["C", [17.7, 96.8, 16, 97.3]], ["C", [15.2, 97.5, 14.2, 97.45]], ["C", [13.2, 97.4, 12.3, 97.4]], ["L", [5.7, 97.4]], ["C", [4.7, 97.4, 3.6, 97.45]], ["C", [2.5, 97.5, 1.8, 97.1]], ["C", [1.6, 96.9, 1.5, 96.75]], ["C", [1.4, 96.55, 1.2, 96.4]], ["C", [1.1, 95.3, 1.65, 94.5]], ["C", [2.2, 93.8, 2.7, 93]], ["C", [3.8, 91.4, 4.8, 89.9]], ["C", [5.8, 88.4, 6.9, 86.8]], ["C", [9.8, 82.4, 12.7, 78.05]], ["C", [15.6, 73.65, 18.5, 69.2]], ["C", [19.3, 67.9, 20.2, 66.65]], ["C", [21.1, 65.35, 21.9, 64.1]], ["C", [22.4, 63.25, 23, 62.5]], ["C", [23.6, 61.7, 23.8, 60.6]], ["C", [24, 59.8, 23.7, 59.1]], ["C", [23.4, 58.5, 23.1, 58.1]], ["C", [22.4, 56.9, 21.7, 55.8]], ["C", [21, 54.7, 20.2, 53.6]], ["C", [19.7, 52.75, 19.2, 52.1]], ["C", [18.7, 51.4, 18.2, 50.6]], ["C", [16.1, 47.5, 14.05, 44.4]], ["C", [12, 41.4, 9.8, 38.25]], ["C", [9.3, 37.5, 8.85, 36.8]], ["C", [8.4, 36.05, 7.9, 35.3]], ["C", [7.2, 34.4, 6.65, 33.5]], ["C", [6.1, 32.6, 5.5, 31.8]], ["C", [5, 31.2, 4.6, 30.6]], ["C", [4.2, 29.95, 3.8, 29.4]], ["C", [3.6, 28.9, 3.25, 28.2]], ["C", [2.9, 27.5, 3.3, 26.9]], ["C", [3.6, 26.5, 4.5, 26.3]], ["C", [4.7, 26.2, 4.9, 26.25]], ["C", [5.1, 26.3, 5.3, 26.2]], ["L", [14.8, 26.2]], ["C", [16.3, 26.2, 17.65, 26.25]], ["C", [19, 26.3, 19.8, 27]], ["C", [20.2, 27.2, 20.45, 27.65]], ["C", [20.7, 28, 21, 28.4]], ["C", [21.5, 29.2, 21.95, 30]], ["C", [22.4, 30.8, 22.9, 31.65]], ["C", [24.6, 34.2, 26.15, 36.75]], ["C", [27.7, 39.3, 29.4, 41.9]], ["C", [30, 42.9, 30.55, 43.85]], ["C", [31.1, 44.8, 31.7, 45.7]], ["C", [32.1, 46.25, 32.45, 46.7]], ["C", [32.8, 47.2, 33.5, 47.4]], ["C", [34.1, 47.5, 34.5, 47.15]], ["C", [34.9, 46.8, 35.1, 46.6]], ["C", [36, 45.7, 36.6, 44.55]], ["C", [37.2, 43.4, 38, 42.3]], ["C", [39.7, 39.5, 41.55, 36.7]], ["C", [43.4, 33.95, 45.1, 31.1]], ["C", [45.9, 29.9, 46.8, 28.4]], ["C", [47.7, 26.9, 49.2, 26.4]], ["C", [50, 26.2, 51, 26.2]], ["C", [52, 26.2, 53, 26.2]], ["L", [60.2, 26.2]], ["C", [61.3, 26.2, 62.4, 26.3]], ["C", [63.5, 26.4, 63.7, 27.2]], ["C", [64, 27.85, 63.55, 28.5]], ["C", [63.1, 29.1, 62.9, 29.5]], ["C", [62, 30.9, 61.1, 32.25]], ["C", [60.2, 33.6, 59.3, 35]], ["C", [56.1, 39.7, 53.05, 44.3]]]; __motifs["Y"] = [["M", [54.1, 48.35]], ["C", [51, 53.7, 47.65, 59.1]], ["C", [46.6, 60.75, 45.6, 62.35]], ["C", [44.7, 64, 43.65, 65.7]], ["C", [42.85, 66.85, 42.25, 67.9]], ["C", [41.55, 69.05, 41.15, 70.4]], ["C", [41.05, 70.95, 41.1, 71.4]], ["C", [41.15, 71.8, 41.05, 72.3]], ["C", [40.95, 72.6, 40.95, 73.05]], ["C", [40.95, 73.45, 40.95, 73.8]], ["L", [40.95, 89.95]], ["C", [40.95, 91.85, 41, 94.05]], ["C", [41.05, 96.25, 39.9, 96.9]], ["C", [39.25, 97.3, 38.35, 97.3]], ["C", [37.35, 97.3, 36.45, 97.3]], ["L", [29.5, 97.3]], ["C", [28.35, 97.3, 27.5, 97.2]], ["C", [26.6, 97.1, 26.05, 96.5]], ["C", [25.6, 95.95, 25.6, 95.1]], ["C", [25.6, 94.35, 25.5, 93.2]], ["L", [25.5, 72.5]], ["C", [25.5, 71.9, 25.5, 71.3]], ["C", [25.5, 70.6, 25.3, 70.1]], ["C", [24.9, 68.6, 24.15, 67.4]], ["C", [23.5, 66.2, 22.7, 65.15]], ["C", [21.8, 63.5, 20.9, 61.95]], ["C", [19.95, 60.4, 19, 58.85]], ["C", [18.2, 57.7, 17.6, 56.5]], ["C", [17, 55.2, 16.2, 54.1]], ["C", [13.55, 50, 11.2, 45.95]], ["C", [8.8, 41.85, 6.3, 37.75]], ["C", [5.1, 35.75, 4, 33.9]], ["C", [2.9, 32, 1.8, 30]], ["C", [1.45, 29.65, 0.95, 28.65]], ["C", [0.4, 27.7, 0.8, 27]], ["C", [1, 26.6, 1.3, 26.45]], ["C", [1.7, 26.3, 2.1, 26.2]], ["C", [2.3, 26.1, 2.5, 26.15]], ["C", [2.7, 26.2, 2.9, 26.1]], ["L", [11.65, 26.1]], ["C", [12.9, 26.1, 14.2, 26.1]], ["C", [15.5, 26.1, 16.3, 26.5]], ["C", [17.4, 27, 18.1, 28.4]], ["C", [18.9, 29.8, 19.6, 30.8]], ["C", [21.3, 33.55, 22.8, 36.2]], ["C", [24.25, 38.9, 26, 41.6]], ["C", [27.3, 43.6, 28.35, 45.65]], ["C", [29.5, 47.7, 30.75, 49.7]], ["C", [31.3, 50.55, 31.8, 51.45]], ["C", [32.3, 52.45, 33.4, 52.65]], ["C", [34.1, 52.7, 34.55, 52.1]], ["C", [35.05, 51.5, 35.35, 51.1]], ["C", [36.3, 49.7, 37, 48.35]], ["C", [37.8, 46.9, 38.65, 45.5]], ["C", [40.75, 42.15, 42.75, 38.65]], ["C", [44.8, 35.2, 46.9, 31.75]], ["C", [47.65, 30.4, 48.6, 28.7]], ["C", [49.45, 27, 50.9, 26.4]], ["C", [51.75, 25.9, 53.7, 26]], ["C", [55.65, 26.1, 57.1, 26.1]], ["L", [62.65, 26.1]], ["C", [63.5, 26.1, 64.3, 26.15]], ["C", [65.2, 26.2, 65.65, 26.5]], ["C", [66.45, 27, 66.05, 28.05]], ["C", [65.65, 29.1, 65.4, 29.65]], ["C", [64.15, 31.65, 63.05, 33.6]], ["C", [61.85, 35.55, 60.65, 37.5]], ["C", [57.3, 42.9, 54.1, 48.35]]]; __motifs["Z"] = [["M", [53.1, 48.45]], ["C", [52.4, 49.2, 51.7, 50.15]], ["C", [51.5, 50.35, 51.35, 50.55]], ["C", [51.2, 50.7, 51, 50.9]], ["C", [50.3, 51.8, 49.55, 52.7]], ["C", [48.8, 53.5, 48.1, 54.45]], ["C", [45.8, 57.3, 43.35, 60.1]], ["C", [40.9, 62.95, 38.6, 65.8]], ["C", [38.4, 66.1, 38.1, 66.4]], ["C", [37.8, 66.7, 37.6, 66.95]], ["C", [36.5, 68.3, 35.4, 69.6]], ["C", [34.3, 70.95, 33.2, 72.3]], ["C", [32.9, 72.7, 32.55, 73.05]], ["C", [32.2, 73.35, 32, 73.7]], ["C", [30.9, 75.15, 29.65, 76.5]], ["C", [28.4, 77.9, 27.3, 79.35]], ["C", [26.7, 80.1, 25.95, 80.8]], ["C", [25.2, 81.55, 25, 82.6]], ["C", [24.8, 83.45, 25.2, 83.75]], ["C", [25.6, 84, 26.1, 84.2]], ["C", [26.4, 84.2, 27, 84.4]], ["L", [28.3, 84.4]], ["C", [28.6, 84.5, 29.05, 84.45]], ["C", [29.5, 84.4, 29.9, 84.4]], ["L", [58.4, 84.4]], ["C", [59.4, 84.4, 60.2, 84.45]], ["C", [61, 84.5, 61.5, 84.9]], ["C", [62.1, 85.4, 62.25, 86.3]], ["C", [62.4, 87.2, 62.4, 88.3]], ["L", [62.4, 93.7]], ["C", [62.4, 94.6, 62.25, 95.5]], ["C", [62.1, 96.45, 61.6, 96.8]], ["C", [60.9, 97.3, 59.8, 97.35]], ["C", [58.7, 97.4, 57.5, 97.4]], ["L", [7.3, 97.4]], ["C", [6.3, 97.4, 5.2, 97.45]], ["C", [4.1, 97.5, 3.5, 97]], ["C", [2.8, 96.6, 2.4, 95.3]], ["C", [2.2, 94.6, 2.3, 93.8]], ["C", [2.4, 93, 2.4, 92.25]], ["C", [2.4, 90.5, 2.35, 88.4]], ["C", [2.3, 86.3, 2.8, 85]], ["C", [3.3, 83.95, 4.05, 83.1]], ["C", [4.8, 82.3, 5.5, 81.5]], ["C", [6.5, 80.1, 7.55, 78.95]], ["C", [8.6, 77.8, 9.6, 76.4]], ["C", [9.9, 76, 10.25, 75.7]], ["C", [10.6, 75.4, 10.8, 75.1]], ["C", [11.6, 74.1, 12.3, 73.25]], ["C", [13, 72.4, 13.8, 71.5]], ["C", [14, 71.3, 14.15, 71.05]], ["C", [14.3, 70.8, 14.5, 70.6]], ["C", [16.4, 68.2, 18.45, 65.95]], ["C", [20.5, 63.7, 22.3, 61.2]], ["C", [22.9, 60.4, 23.55, 59.75]], ["C", [24.2, 59.1, 24.8, 58.3]], ["C", [25, 58, 25.3, 57.75]], ["C", [25.6, 57.5, 25.8, 57.2]], ["C", [26.6, 56.1, 27.6, 55]], ["C", [28.6, 53.9, 29.4, 52.7]], ["C", [29.8, 52.2, 30.2, 51.85]], ["C", [30.6, 51.5, 30.9, 51.1]], ["C", [32.3, 49.2, 33.85, 47.5]], ["C", [35.4, 45.8, 36.8, 43.9]], ["C", [37.3, 43.4, 37.75, 42.85]], ["C", [38.2, 42.3, 38.5, 41.6]], ["C", [38.7, 41.4, 38.85, 41.05]], ["C", [39, 40.7, 38.8, 40.3]], ["C", [38.6, 39.5, 37.7, 39.4]], ["C", [36.8, 39.3, 35.8, 39.2]], ["L", [13.1, 39.2]], ["C", [12.4, 39.2, 11.4, 39.25]], ["C", [10.4, 39.3, 9.45, 39.3]], ["C", [8.5, 39.3, 7.65, 39.2]], ["C", [6.8, 39.1, 6.4, 38.8]], ["C", [5.8, 38.4, 5.6, 37.4]], ["C", [5.4, 36.4, 5.35, 35.15]], ["C", [5.3, 33.95, 5.35, 32.6]], ["C", [5.4, 31.3, 5.4, 30.4]], ["C", [5.4, 29.55, 5.45, 28.6]], ["C", [5.5, 27.7, 5.9, 27.1]], ["C", [6.2, 26.5, 7.3, 26.3]], ["C", [7.5, 26.2, 7.7, 26.25]], ["C", [7.9, 26.3, 8.1, 26.2]], ["L", [56.9, 26.2]], ["C", [58.4, 26.2, 59.55, 26.35]], ["C", [60.7, 26.5, 61.1, 27.65]], ["C", [61.4, 28.3, 61.4, 29.75]], ["C", [61.4, 31.1, 61.4, 32.1]], ["C", [61.4, 32.8, 61.5, 33.6]], ["C", [61.6, 34.3, 61.4, 34.8]], ["L", [61.4, 36.05]], ["C", [61.4, 37.3, 61.1, 38.3]], ["C", [60.7, 39.3, 60.05, 40.05]], ["C", [59.4, 40.7, 58.8, 41.5]], ["C", [58, 42.6, 57.1, 43.6]], ["C", [56.2, 44.6, 55.4, 45.7]], ["C", [55.2, 45.9, 54.95, 46.25]], ["C", [54.7, 46.5, 54.5, 46.7]], ["C", [53.8, 47.6, 53.1, 48.45]]]; __motifs["a"] = [["M", [32.5, 74.1]], ["C", [31.7, 74.2, 30.9, 74.4]], ["C", [30.6, 74.5, 30, 74.5]], ["C", [28.7, 74.8, 27.4, 74.9]], ["C", [26.1, 75, 24.9, 75.4]], ["C", [24.1, 75.6, 23.4, 75.75]], ["C", [22.7, 75.9, 22, 76.2]], ["C", [19.9, 77.1, 18.45, 78.9]], ["C", [17, 80.7, 17.4, 83.9]], ["C", [17.6, 85.6, 18.5, 86.7]], ["C", [19.2, 87.8, 20.6, 88.45]], ["C", [22, 89.1, 23.65, 89.4]], ["C", [25.3, 89.7, 27.15, 89.55]], ["C", [29, 89.4, 30.6, 88.9]], ["C", [33.2, 88.1, 34.7, 86.35]], ["C", [36.2, 84.6, 37, 82]], ["C", [37.2, 81.3, 37.25, 80.55]], ["C", [37.3, 79.8, 37.5, 79]], ["L", [37.5, 78.1]], ["C", [37.6, 77.6, 37.6, 76.95]], ["C", [37.6, 76.3, 37.5, 75.8]], ["C", [37.3, 75.2, 37.3, 74.7]], ["C", [37.3, 74.2, 36.9, 73.9]], ["C", [36.4, 73.5, 35.4, 73.5]], ["C", [35, 73.6, 34.7, 73.65]], ["C", [34.4, 73.7, 34, 73.8]], ["C", [33.3, 74, 32.5, 74.1]], ["M", [47.3, 49.35]], ["C", [49.5, 51.15, 50.7, 54.1]], ["C", [51.4, 55.8, 51.5, 58]], ["C", [51.6, 60.2, 51.6, 62.5]], ["L", [51.6, 84.8]], ["C", [51.6, 86.65, 51.6, 88.6]], ["C", [51.6, 90.55, 52, 92.2]], ["C", [52.1, 92.45, 52.1, 92.8]], ["C", [52.1, 93.2, 52.2, 93.5]], ["C", [52.4, 94.55, 52.45, 95.7]], ["C", [52.5, 96.75, 51.4, 97.2]], ["C", [50.8, 97.5, 50, 97.5]], ["C", [49.2, 97.5, 48.4, 97.5]], ["L", [43, 97.5]], ["C", [42.1, 97.5, 41.25, 97.45]], ["C", [40.4, 97.4, 39.9, 96.95]], ["C", [39.2, 96.55, 38.85, 95.85]], ["C", [38.5, 95.1, 37.9, 94.55]], ["C", [37.7, 94.4, 37.4, 94.25]], ["C", [37.1, 94.1, 36.6, 94.2]], ["C", [36.1, 94.4, 35.65, 94.65]], ["C", [35.2, 94.95, 34.7, 95.2]], ["C", [34.2, 95.6, 33.6, 95.9]], ["C", [33, 96.2, 32.4, 96.45]], ["C", [31.1, 97.05, 29.7, 97.45]], ["C", [28.3, 97.8, 26.8, 98.2]], ["C", [26.1, 98.45, 25.45, 98.5]], ["C", [24.8, 98.55, 24.1, 98.6]], ["C", [23.8, 98.6, 23.5, 98.65]], ["C", [23.2, 98.7, 22.9, 98.7]], ["L", [21.8, 98.7]], ["C", [20.8, 98.9, 19.8, 98.7]], ["L", [18.9, 98.7]], ["C", [18.2, 98.5, 17.55, 98.55]], ["C", [16.9, 98.6, 16.3, 98.4]], ["C", [15.3, 98.2, 14.4, 98.05]], ["C", [13.5, 97.9, 12.7, 97.5]], ["C", [9.8, 96.4, 7.75, 94.6]], ["C", [5.7, 92.85, 4.5, 90]], ["C", [4.2, 89.3, 3.95, 88.45]], ["C", [3.7, 87.7, 3.5, 86.8]], ["C", [3.3, 86.25, 3.35, 85.8]], ["C", [3.4, 85.3, 3.3, 84.8]], ["C", [3.2, 84.45, 3.15, 83.55]], ["C", [3.1, 82.6, 3.2, 82.15]], ["C", [3.4, 81.2, 3.4, 80.5]], ["C", [3.7, 79.4, 4, 78.2]], ["C", [4.3, 77.1, 4.8, 76.15]], ["C", [6.5, 73.3, 8.7, 71.75]], ["C", [10.9, 70.3, 14.3, 69.2]], ["C", [15.6, 68.7, 17, 68.5]], ["C", [18.4, 68.3, 19.8, 68]], ["C", [20.6, 67.75, 21.5, 67.7]], ["C", [22.4, 67.65, 23.3, 67.45]], ["C", [24, 67.3, 24.7, 67.3]], ["C", [25.4, 67.35, 26.2, 67.2]], ["C", [26.9, 67, 27.6, 67]], ["C", [28.3, 67, 29.1, 66.8]], ["C", [31.2, 66.3, 32.95, 65.95]], ["C", [34.7, 65.55, 36.1, 64.2]], ["C", [37, 63.25, 37.3, 62.2]], ["C", [37.4, 61.9, 37.35, 61.65]], ["C", [37.3, 61.45, 37.4, 61.25]], ["C", [37.5, 61.05, 37.5, 60.7]], ["C", [37.5, 60.3, 37.5, 60.1]], ["C", [37.4, 59.7, 37.35, 59.25]], ["C", [37.3, 58.9, 37.2, 58.6]], ["C", [36.2, 55.6, 33, 54.5]], ["C", [32.1, 54.2, 30.85, 54.05]], ["C", [29.6, 53.9, 28.3, 53.95]], ["C", [27, 54, 25.8, 54.2]], ["C", [24.6, 54.4, 23.7, 54.7]], ["C", [23.1, 54.85, 22.55, 55.2]], ["C", [22, 55.6, 21.5, 56]], ["C", [21, 56.4, 20.45, 57.05]], ["C", [19.9, 57.8, 19.7, 58.4]], ["C", [19.2, 59.35, 18.85, 60.3]], ["C", [18.5, 61.15, 17.4, 61.45]], ["C", [16.6, 61.65, 15.7, 61.65]], ["C", [14.8, 61.65, 13.9, 61.65]], ["L", [10.1, 61.65]], ["C", [9.6, 61.65, 9.1, 61.7]], ["C", [8.6, 61.8, 8.2, 61.65]], ["L", [7.3, 61.65]], ["C", [7.1, 61.55, 6.8, 61.55]], ["C", [6.5, 61.55, 6.3, 61.35]], ["C", [5.5, 61.15, 5.2, 60.1]], ["C", [5.1, 59.55, 5.2, 59.05]], ["C", [5.3, 58.6, 5.4, 58.2]], ["C", [5.7, 57.05, 6.05, 56.15]], ["C", [6.4, 55.15, 6.9, 54.4]], ["C", [7.2, 53.9, 7.5, 53.35]], ["C", [7.8, 52.85, 8.1, 52.4]], ["C", [8.9, 51.25, 10.1, 50.3]], ["C", [10.3, 50.2, 10.7, 49.8]], ["C", [11.2, 49.4, 11.6, 49.05]], ["C", [12, 48.75, 12.5, 48.5]], ["C", [14.2, 47.4, 16.1, 46.7]], ["C", [18, 46.1, 20, 45.5]], ["C", [21.2, 45.2, 22.5, 45.1]], ["C", [23.8, 44.95, 25.1, 44.65]], ["C", [25.5, 44.55, 26.35, 44.65]], ["C", [27.2, 44.75, 27.4, 44.55]], ["C", [31.5, 44.45, 35.25, 44.85]], ["C", [39, 45.3, 42.05, 46.4]], ["C", [45.1, 47.5, 47.3, 49.35]]]; __motifs["b"] = [["M", [22.3, 59.65]], ["C", [20.8, 62, 19.8, 65]], ["C", [19.5, 65.8, 19.45, 66.65]], ["C", [19.4, 67.5, 19.2, 68.3]], ["C", [19.1, 68.6, 19.1, 69.3]], ["C", [19, 69.7, 19.05, 70.1]], ["C", [19.1, 70.5, 19, 70.9]], ["C", [18.8, 71.7, 18.9, 73.1]], ["C", [19, 74.5, 19.2, 75.1]], ["C", [19.4, 76, 19.45, 76.8]], ["C", [19.5, 77.6, 19.8, 78.4]], ["C", [20.7, 81.2, 21.9, 83.25]], ["C", [23.2, 85.3, 25.5, 86.7]], ["C", [27.1, 87.7, 28.8, 88.1]], ["C", [29, 88.1, 29.25, 88.15]], ["C", [29.5, 88.2, 29.8, 88.2]], ["C", [30.1, 88.3, 30.8, 88.35]], ["C", [31.5, 88.4, 32, 88.3]], ["C", [33, 88.1, 33.85, 87.95]], ["C", [34.65, 87.8, 35.5, 87.5]], ["C", [38.3, 86.2, 39.85, 83.9]], ["C", [41.4, 81.6, 42.4, 78.5]], ["C", [42.7, 77.5, 42.9, 76]], ["C", [43.2, 74.5, 43.25, 72.95]], ["C", [43.3, 71.4, 43.25, 69.85]], ["C", [43.2, 68.3, 42.85, 67.2]], ["C", [42.6, 66.2, 42.5, 65.3]], ["C", [42.4, 64.4, 42, 63.6]], ["C", [40.6, 60.1, 38.05, 57.65]], ["C", [35.5, 55.2, 30.6, 55.2]], ["C", [30.2, 55.2, 29.9, 55.25]], ["C", [29.6, 55.3, 29.2, 55.3]], ["C", [28.5, 55.5, 27.9, 55.65]], ["C", [27.3, 55.8, 26.7, 56]], ["C", [23.8, 57.3, 22.3, 59.65]], ["M", [42.5, 45.7]], ["C", [47.05, 47.6, 50, 50.6]], ["C", [52.9, 53.6, 54.9, 58.1]], ["C", [55.35, 59.3, 55.7, 60.6]], ["C", [56.1, 61.9, 56.5, 63.3]], ["C", [56.7, 64, 56.75, 64.65]], ["C", [56.8, 65.3, 57, 66.1]], ["C", [57.2, 66.6, 57.15, 67.2]], ["C", [57.1, 67.8, 57.2, 68.4]], ["L", [57.2, 69.1]], ["C", [57.35, 69.7, 57.35, 71.15]], ["C", [57.35, 72.6, 57.3, 73.2]], ["C", [57.3, 73.7, 57.25, 74.05]], ["C", [57.2, 74.4, 57.2, 74.9]], ["C", [57, 75.7, 57, 76.45]], ["C", [57, 77.2, 56.8, 78]], ["C", [56.8, 78.4, 56.6, 79.4]], ["C", [56.3, 80.6, 56.05, 81.85]], ["C", [55.75, 83.1, 55.25, 84.2]], ["C", [53.45, 88.7, 50.8, 92]], ["C", [48.1, 95.3, 43.7, 97.2]], ["C", [42.75, 97.6, 41.85, 97.85]], ["C", [40.85, 98.1, 39.8, 98.4]], ["C", [39.2, 98.6, 38.55, 98.6]], ["C", [37.9, 98.6, 37.3, 98.7]], ["L", [36.4, 98.7]], ["C", [35.8, 98.9, 34.75, 98.85]], ["C", [33.8, 98.8, 33.2, 98.6]], ["L", [32.55, 98.6]], ["C", [32.1, 98.5, 31.5, 98.45]], ["C", [30.9, 98.4, 30.25, 98.3]], ["C", [28.35, 97.8, 26.8, 97.3]], ["C", [25.2, 96.8, 23.8, 95.9]], ["C", [23.2, 95.5, 22.65, 95.1]], ["C", [22.05, 94.7, 21.6, 94.2]], ["C", [21.3, 94, 21, 93.8]], ["C", [20.7, 93.6, 20.35, 93.5]], ["C", [19.5, 93.2, 19.3, 93.9]], ["C", [18.8, 94.6, 18.65, 95.55]], ["C", [18.5, 96.5, 17.85, 97]], ["C", [17.3, 97.4, 16.5, 97.45]], ["C", [15.65, 97.5, 14.7, 97.5]], ["L", [9.85, 97.5]], ["C", [9.2, 97.5, 8.45, 97.55]], ["C", [7.65, 97.6, 7.1, 97.4]], ["C", [5.65, 96.9, 5.5, 95.55]], ["C", [5.35, 94.2, 5.35, 92.5]], ["L", [5.35, 31.5]], ["C", [5.35, 30.4, 5.35, 29.2]], ["C", [5.35, 28, 5.85, 27.3]], ["C", [6.25, 26.6, 7.3, 26.4]], ["C", [7.45, 26.3, 7.7, 26.35]], ["C", [7.95, 26.4, 8.15, 26.3]], ["L", [14.5, 26.3]], ["C", [16.25, 26.3, 17.6, 26.45]], ["C", [18.9, 26.6, 19.3, 28]], ["C", [19.6, 29, 19.5, 30.65]], ["C", [19.4, 32.3, 19.4, 33.5]], ["L", [19.4, 44.4]], ["C", [19.4, 45.5, 19.4, 46.6]], ["C", [19.4, 47.7, 19.6, 48.5]], ["C", [19.7, 49, 19.8, 49.35]], ["C", [19.85, 49.7, 20.25, 49.8]], ["C", [20.5, 50, 20.85, 50]], ["C", [21.2, 50, 21.4, 49.9]], ["C", [22.05, 49.5, 22.7, 49.05]], ["C", [23.3, 48.6, 23.95, 48.1]], ["C", [25.3, 47.2, 26.7, 46.55]], ["C", [28.1, 45.9, 29.8, 45.4]], ["C", [30.55, 45.1, 31.4, 45.05]], ["C", [32.2, 45, 33, 44.8]], ["C", [33.7, 44.6, 34.45, 44.6]], ["C", [35.3, 44.6, 36.1, 44.6]], ["L", [37.1, 44.6]], ["C", [37.4, 44.7, 37.8, 44.65]], ["C", [38.2, 44.6, 38.55, 44.7]], ["C", [39.7, 45, 40.65, 45.15]], ["C", [41.6, 45.3, 42.5, 45.7]]]; __motifs["c"] = [["M", [29, 44.5]], ["C", [37.1, 44.35, 42.55, 46.9]], ["C", [48, 49.5, 51.2, 54.3]], ["C", [52.8, 56.75, 53.6, 59.8]], ["C", [53.8, 60.3, 53.95, 61.1]], ["C", [54.1, 61.9, 53.9, 62.5]], ["C", [53.5, 63.6, 52.5, 63.75]], ["C", [51.5, 63.9, 50.1, 63.9]], ["L", [44.9, 63.9]], ["C", [44, 63.9, 43.05, 63.9]], ["C", [42.1, 63.9, 41.5, 63.5]], ["C", [40.7, 63.15, 40.4, 62.25]], ["C", [40.1, 61.4, 39.6, 60.5]], ["C", [39, 59.4, 38.3, 58.5]], ["C", [37.6, 57.6, 36.7, 56.9]], ["C", [35.3, 56, 33.6, 55.5]], ["C", [33, 55.3, 32.4, 55.3]], ["C", [31.8, 55.3, 31.3, 55.1]], ["L", [30.3, 55.1]], ["C", [28.3, 55.1, 27.1, 55.5]], ["C", [24.2, 56.4, 22.4, 58.25]], ["C", [20.6, 60.1, 19.5, 62.7]], ["C", [19, 63.8, 18.75, 65.1]], ["C", [18.5, 66.3, 18.2, 67.7]], ["C", [18.1, 68.1, 18.1, 68.5]], ["C", [18.1, 68.95, 18, 69.35]], ["C", [17.8, 70.3, 17.85, 72.1]], ["C", [17.9, 73.9, 18.1, 74.95]], ["C", [18.1, 75.7, 18.2, 76]], ["C", [18.4, 76.75, 18.45, 77.45]], ["C", [18.5, 78.1, 18.7, 78.85]], ["C", [19.5, 81.15, 20.6, 83.05]], ["C", [21.7, 84.9, 23.4, 86.2]], ["C", [23.8, 86.5, 24.6, 86.9]], ["C", [25.7, 87.65, 26.85, 87.85]], ["C", [28, 88.05, 29.7, 88.2]], ["C", [29.9, 88.2, 30.3, 88.2]], ["C", [30.7, 88.2, 30.9, 88.15]], ["L", [31.8, 88.15]], ["C", [32.5, 87.95, 33.15, 87.8]], ["C", [33.8, 87.65, 34.4, 87.45]], ["C", [37.4, 86.1, 39, 83.65]], ["C", [39.4, 83.15, 39.7, 82.45]], ["C", [40, 81.85, 40.2, 81.35]], ["C", [40.6, 80.2, 40.9, 79.4]], ["C", [41.2, 78.5, 42.3, 78]], ["C", [43.2, 77.65, 45.2, 77.7]], ["C", [47.2, 77.7, 48.5, 77.7]], ["C", [49.2, 77.7, 49.95, 77.7]], ["C", [50.7, 77.65, 51.2, 77.8]], ["L", [52, 77.8]], ["C", [52.4, 77.9, 52.8, 77.95]], ["C", [53.2, 78, 53.4, 78.2]], ["C", [53.9, 78.6, 54.05, 79.4]], ["C", [54.2, 80.1, 54, 80.9]], ["C", [53.1, 84.2, 51.8, 86.8]], ["C", [47.7, 94.5, 38.7, 97.5]], ["C", [37.7, 97.85, 36.6, 98]], ["C", [35.5, 98.15, 34.4, 98.45]], ["C", [33.8, 98.55, 33.2, 98.55]], ["C", [32.6, 98.55, 32, 98.6]], ["L", [30.9, 98.6]], ["C", [30.4, 98.8, 29.4, 98.75]], ["C", [28.4, 98.7, 27.9, 98.6]], ["C", [27.1, 98.45, 26.45, 98.5]], ["C", [25.8, 98.55, 25.1, 98.35]], ["C", [24.6, 98.25, 24.1, 98.2]], ["C", [23.6, 98.15, 23.1, 98.05]], ["C", [22, 97.75, 21, 97.4]], ["C", [20, 97.1, 19.1, 96.7]], ["C", [14.4, 94.7, 11.2, 91.6]], ["C", [8, 88.4, 6, 83.75]], ["C", [5.5, 82.8, 5.2, 81.8]], ["C", [4.9, 80.7, 4.6, 79.65]], ["C", [4.5, 79.25, 4.5, 78.9]], ["C", [4.5, 78.5, 4.3, 78]], ["C", [4.1, 77.35, 4.1, 76.55]], ["C", [4.1, 75.8, 3.9, 75.15]], ["L", [3.9, 73.45]], ["C", [3.7, 72.95, 3.7, 72.25]], ["C", [3.7, 71.6, 3.9, 71.15]], ["C", [4, 70.6, 3.9, 70.2]], ["C", [3.8, 69.8, 3.9, 69.4]], ["C", [4.1, 68.7, 4.05, 68.1]], ["C", [4, 67.5, 4.2, 66.95]], ["C", [4.7, 65.15, 5, 63.45]], ["C", [5.3, 61.8, 5.9, 60.2]], ["C", [8.1, 55.1, 11.45, 51.7]], ["C", [14.8, 48.35, 20, 46.25]], ["C", [21.4, 45.6, 22.9, 45.35]], ["C", [24.4, 45.1, 26, 44.7]], ["C", [26.8, 44.6, 27.5, 44.6]], ["C", [28.2, 44.6, 29, 44.5]]]; __motifs["d"] = [["M", [20.7, 59.6]], ["C", [19.2, 61.9, 18.3, 64.8]], ["C", [17.95, 65.8, 17.85, 66.8]], ["C", [17.75, 67.8, 17.5, 68.9]], ["L", [17.5, 70.3]], ["C", [17.3, 71.2, 17.4, 72.75]], ["C", [17.5, 74.3, 17.7, 75]], ["C", [17.7, 75.3, 17.7, 75.55]], ["C", [17.75, 75.8, 17.75, 76]], ["C", [17.95, 76.8, 18.1, 77.5]], ["C", [18.3, 78.2, 18.5, 79]], ["C", [20.15, 84.2, 24.25, 86.7]], ["C", [25.6, 87.6, 27.9, 88.1]], ["C", [28.25, 88.2, 29.1, 88.2]], ["C", [29.4, 88.3, 30.05, 88.35]], ["C", [30.65, 88.4, 31.1, 88.3]], ["C", [31.9, 88.1, 32.65, 88]], ["C", [33.5, 87.9, 34.3, 87.6]], ["C", [36.75, 86.5, 38.3, 84.8]], ["C", [39.8, 83.1, 40.85, 80.5]], ["C", [41.3, 79.6, 41.5, 78.65]], ["C", [41.7, 77.7, 41.9, 76.6]], ["C", [42, 76.1, 41.95, 75.65]], ["C", [41.9, 75.2, 42.1, 74.7]], ["C", [42.2, 74.4, 42.2, 74]], ["C", [42.2, 73.6, 42.2, 73.1]], ["L", [42.2, 72.2]], ["C", [42.3, 71.8, 42.25, 71.35]], ["C", [42.2, 70.9, 42.2, 70.5]], ["C", [42.2, 69.5, 42.1, 68.5]], ["C", [42, 67.5, 41.8, 66.7]], ["C", [41.6, 65.6, 41.45, 64.7]], ["C", [41.3, 63.8, 40.85, 63]], ["C", [39.5, 59.4, 36.8, 57.3]], ["C", [34.2, 55.2, 29.2, 55.2]], ["C", [28.55, 55.2, 27.6, 55.4]], ["C", [26.8, 55.6, 26.1, 55.75]], ["C", [25.5, 55.9, 24.9, 56.2]], ["C", [22.15, 57.3, 20.7, 59.6]], ["M", [55.8, 31.75]], ["L", [55.8, 91.8]], ["C", [55.8, 93.2, 55.8, 94.55]], ["C", [55.8, 95.9, 55.2, 96.7]], ["C", [54.7, 97.2, 53.9, 97.35]], ["C", [53.15, 97.5, 52.1, 97.5]], ["L", [46.6, 97.5]], ["C", [45.6, 97.5, 44.8, 97.45]], ["C", [43.9, 97.4, 43.4, 97]], ["C", [42.7, 96.5, 42.6, 95.7]], ["C", [42.5, 94.9, 42.2, 94.15]], ["C", [42, 93.9, 41.85, 93.75]], ["C", [41.7, 93.6, 41.5, 93.4]], ["C", [40.4, 93.4, 39.9, 93.9]], ["C", [39.4, 94.4, 38.9, 94.9]], ["C", [38.2, 95.4, 37.6, 95.75]], ["C", [37, 96.1, 36.3, 96.6]], ["C", [35.9, 96.8, 35.45, 97]], ["C", [35, 97.2, 34.5, 97.4]], ["C", [33.1, 97.9, 31.5, 98.35]], ["C", [31, 98.55, 30.6, 98.55]], ["C", [30.2, 98.55, 29.8, 98.6]], ["C", [29.3, 98.6, 28.95, 98.65]], ["C", [28.6, 98.7, 28.1, 98.7]], ["L", [27.2, 98.7]], ["C", [26.6, 98.9, 25.4, 98.85]], ["C", [24.2, 98.8, 23.7, 98.6]], ["C", [23, 98.45, 22.45, 98.5]], ["C", [21.9, 98.55, 21.3, 98.35]], ["C", [20.1, 97.9, 18.95, 97.55]], ["C", [17.8, 97.2, 16.7, 96.7]], ["C", [13.2, 95.2, 10.45, 92.1]], ["C", [7.7, 88.9, 6.1, 85.4]], ["C", [5.6, 84.3, 5.3, 83.25]], ["C", [5, 82.2, 4.6, 81.1]], ["C", [4.5, 80.7, 4.5, 80.35]], ["C", [4.5, 80, 4.3, 79.5]], ["C", [4.1, 78.7, 3.95, 77.75]], ["C", [3.8, 76.8, 3.6, 75.8]], ["C", [3.5, 75.55, 3.55, 75.1]], ["C", [3.6, 74.7, 3.5, 74.4]], ["C", [3.5, 73.9, 3.5, 73.5]], ["C", [3.5, 73, 3.4, 72.5]], ["C", [3.3, 72, 3.3, 71.4]], ["C", [3.3, 70.7, 3.4, 70.3]], ["C", [3.5, 69.8, 3.5, 69.4]], ["C", [3.5, 68.9, 3.5, 68.4]], ["C", [3.6, 67.9, 3.55, 67.45]], ["C", [3.5, 67, 3.7, 66.5]], ["C", [3.9, 65.4, 4.05, 64.4]], ["C", [4.2, 63.4, 4.5, 62.4]], ["C", [4.9, 61.2, 5.2, 60.1]], ["C", [5.5, 59, 6, 57.9]], ["C", [7.4, 54.9, 9.5, 52.2]], ["C", [9.7, 51.9, 10.05, 51.65]], ["C", [10.4, 51.4, 10.6, 51.1]], ["C", [11, 50.65, 11.4, 50.2]], ["C", [11.8, 49.8, 12.3, 49.4]], ["C", [12.7, 49.2, 13, 48.85]], ["C", [13.3, 48.55, 13.7, 48.35]], ["C", [16.2, 46.6, 19.5, 45.5]], ["C", [20.2, 45.3, 20.95, 45.2]], ["C", [21.7, 45.1, 22.5, 44.9]], ["C", [23.2, 44.7, 24.3, 44.65]], ["C", [25.4, 44.6, 26.5, 44.6]], ["C", [27.6, 44.6, 28.65, 44.7]], ["C", [29.7, 44.8, 30.4, 45]], ["C", [31.9, 45.5, 33.3, 45.9]], ["C", [34.7, 46.35, 35.9, 47]], ["C", [36.6, 47.5, 37.2, 47.95]], ["C", [37.8, 48.45, 38.5, 48.9]], ["C", [38.9, 49.2, 39.65, 49.7]], ["C", [40.4, 50.2, 41.1, 49.7]], ["C", [41.5, 49.5, 41.5, 49]], ["C", [41.5, 48.55, 41.7, 48]], ["L", [41.7, 47]], ["C", [41.8, 46.7, 41.8, 46.35]], ["C", [41.8, 45.9, 41.8, 45.5]], ["L", [41.8, 31.9]], ["C", [41.8, 30.8, 41.75, 29.45]], ["C", [41.7, 28.1, 42.2, 27.4]], ["C", [42.6, 26.6, 43.7, 26.4]], ["C", [43.9, 26.3, 44.1, 26.35]], ["C", [44.3, 26.4, 44.5, 26.3]], ["L", [51.6, 26.3]], ["C", [52.85, 26.3, 53.8, 26.4]], ["C", [54.85, 26.5, 55.3, 27.2]], ["C", [55.8, 28, 55.8, 29.25]], ["C", [55.8, 30.5, 55.8, 31.75]]]; __motifs["e"] = [["M", [34.9, 56.6]], ["C", [32.6, 55.1, 28.5, 55]], ["C", [28.2, 55.2, 27.8, 55.1]], ["C", [27.4, 55, 27.1, 55.1]], ["C", [26.6, 55.3, 26, 55.35]], ["C", [25.4, 55.4, 24.9, 55.6]], ["C", [20.5, 57, 18.4, 61.1]], ["C", [18.2, 61.5, 17.95, 62.15]], ["C", [17.7, 62.8, 17.6, 63.45]], ["C", [17.5, 64.1, 17.65, 64.7]], ["C", [17.8, 65.3, 18.3, 65.7]], ["C", [19.1, 66.2, 20.5, 66.2]], ["C", [21.9, 66.2, 23.2, 66.2]], ["L", [34.3, 66.2]], ["C", [35.7, 66.2, 37.25, 66.15]], ["C", [38.8, 66.1, 39.3, 65.3]], ["C", [40, 64.3, 39.45, 62.9]], ["C", [38.9, 61.4, 38.6, 60.75]], ["C", [37.2, 58, 34.9, 56.6]], ["M", [37.15, 45.7]], ["C", [40.8, 46.9, 43.7, 48.9]], ["C", [44.6, 49.5, 45.5, 50.3]], ["C", [46.4, 51, 47.1, 51.8]], ["C", [47.4, 52.35, 47.9, 52.65]], ["C", [48.7, 53.7, 49.4, 54.85]], ["C", [50.1, 56, 50.9, 57.2]], ["C", [51.4, 58.1, 51.75, 59.05]], ["C", [52.1, 60, 52.5, 61.1]], ["C", [53, 62.4, 53.3, 63.8]], ["C", [53.6, 65.2, 54, 66.6]], ["C", [54.2, 67.4, 54.15, 68.35]], ["C", [54.1, 69.3, 54.3, 70.1]], ["L", [54.3, 71.2]], ["C", [54.5, 72, 54.3, 73]], ["C", [54.1, 74, 53.6, 74.3]], ["C", [53.1, 74.7, 52.15, 74.85]], ["C", [51.2, 75, 50.05, 75.05]], ["C", [48.9, 75.1, 47.75, 75.05]], ["C", [46.6, 75, 45.7, 75]], ["L", [21.3, 75]], ["C", [20.6, 75, 19.95, 75]], ["C", [19.3, 75, 18.8, 75.2]], ["C", [18, 75.6, 17.8, 75.95]], ["C", [17.6, 76.2, 17.4, 76.75]], ["C", [17.2, 77.3, 17.3, 77.75]], ["C", [17.5, 78.4, 17.55, 78.95]], ["C", [17.6, 79.5, 17.8, 80.05]], ["C", [18.6, 82.45, 19.75, 84]], ["C", [20.9, 85.6, 22.9, 86.8]], ["C", [23.7, 87.3, 24.55, 87.45]], ["C", [25.4, 87.6, 26.3, 87.9]], ["C", [27.1, 88.1, 28.5, 88.15]], ["C", [29.9, 88.25, 30.9, 88.1]], ["L", [31.8, 88.1]], ["C", [32.8, 87.9, 33.65, 87.65]], ["C", [34.5, 87.4, 35.3, 87.1]], ["C", [36.3, 86.55, 37.55, 85.8]], ["C", [38.8, 85, 39.4, 84.15]], ["C", [39.9, 83.5, 40.45, 82.85]], ["C", [41, 82.15, 41.8, 81.9]], ["C", [42.8, 81.4, 44.35, 81.45]], ["C", [45.9, 81.5, 47.2, 81.5]], ["C", [47.8, 81.5, 48.45, 81.45]], ["C", [49.1, 81.4, 49.6, 81.6]], ["L", [50.6, 81.6]], ["C", [51.6, 81.8, 52, 82.05]], ["C", [52.4, 82.25, 52.45, 83]], ["C", [52.5, 83.7, 52.3, 84.15]], ["C", [51.8, 85.6, 51.2, 86.65]], ["C", [50.6, 87.8, 49.8, 88.9]], ["C", [47.6, 92.2, 44.8, 94.2]], ["C", [42, 96.2, 37.8, 97.6]], ["C", [36.7, 98, 35.6, 98.1]], ["C", [34.5, 98.2, 33.3, 98.5]], ["C", [32.9, 98.55, 32.45, 98.55]], ["C", [32, 98.5, 31.6, 98.55]], ["L", [30.5, 98.55]], ["C", [30, 98.75, 29.35, 98.7]], ["C", [28.7, 98.65, 28.2, 98.55]], ["C", [27.4, 98.5, 26.8, 98.55]], ["C", [26.2, 98.65, 25.5, 98.5]], ["C", [25, 98.3, 24.4, 98.3]], ["C", [23.8, 98.3, 23.3, 98.1]], ["C", [22.2, 97.9, 21.1, 97.65]], ["C", [20, 97.4, 19.1, 96.85]], ["C", [18, 96.45, 17.05, 96.15]], ["C", [16.1, 95.8, 15.3, 95.3]], ["C", [12.1, 93.3, 9.6, 90.6]], ["C", [7.1, 88, 5.5, 84.45]], ["C", [5, 83.4, 4.7, 82.2]], ["C", [4.4, 81.1, 3.9, 79.85]], ["C", [3.8, 79.5, 3.8, 79.15]], ["C", [3.8, 78.8, 3.7, 78.4]], ["C", [3.3, 77.2, 3.2, 75.75]], ["C", [3.1, 74.4, 3, 73]], ["C", [3, 72.5, 2.95, 71.9]], ["C", [2.9, 71.3, 3, 70.8]], ["L", [3, 69.6]], ["L", [3.3, 67.2]], ["C", [3.7, 65.5, 4, 63.9]], ["C", [4.3, 62.3, 4.9, 60.95]], ["C", [9.2, 50.55, 19.5, 46.25]], ["C", [20.9, 45.65, 22.35, 45.35]], ["C", [23.8, 45.1, 25.4, 44.7]], ["C", [26.2, 44.6, 26.9, 44.6]], ["C", [27.6, 44.6, 28.4, 44.5]], ["C", [33.5, 44.4, 37.15, 45.7]]]; __motifs["f"] = [["M", [19.8, 26.9]], ["C", [20.6, 26.6, 21.5, 26.55]], ["C", [22.4, 26.5, 23.3, 26.3]], ["C", [23.6, 26.2, 24.2, 26.3]], ["C", [24.8, 26.4, 25, 26.2]], ["C", [25.95, 26.2, 27.05, 26.2]], ["C", [28.2, 26.2, 29.35, 26.3]], ["C", [30.5, 26.4, 31.4, 26.65]], ["C", [32.3, 26.9, 32.6, 27.4]], ["C", [33.2, 28.2, 33.2, 29.65]], ["C", [33.2, 31.1, 33.2, 32.4]], ["C", [33.2, 33.4, 33.15, 34.4]], ["C", [33.1, 35.4, 32.7, 35.9]], ["C", [32.3, 36.5, 31.7, 36.65]], ["C", [31.1, 36.8, 30.35, 36.8]], ["C", [29.6, 36.8, 28.85, 36.75]], ["C", [28.15, 36.7, 27.4, 36.8]], ["C", [25.6, 37.2, 24.6, 37.75]], ["C", [23.6, 38.25, 23, 40]], ["C", [22.8, 40.25, 22.85, 40.55]], ["C", [22.9, 40.8, 22.8, 41.1]], ["C", [22.7, 41.5, 22.6, 42.3]], ["C", [22.5, 43.1, 22.6, 43.6]], ["C", [22.8, 44.3, 23.1, 44.8]], ["C", [23.4, 45.3, 24, 45.6]], ["C", [25, 46.1, 26.4, 45.9]], ["C", [27.85, 45.7, 29, 45.9]], ["C", [29.5, 46, 29.85, 45.95]], ["C", [30.2, 45.9, 30.6, 46]], ["C", [31.5, 46.4, 31.9, 46.9]], ["C", [32.15, 47.2, 32.25, 47.85]], ["C", [32.3, 48.5, 32.4, 49.25]], ["C", [32.5, 50, 32.45, 50.7]], ["C", [32.4, 51.5, 32.3, 51.9]], ["C", [32.25, 52.3, 32.3, 52.65]], ["C", [32.4, 53, 32.25, 53.4]], ["C", [32.05, 54.6, 31, 54.85]], ["C", [30.2, 55.3, 29.1, 55.25]], ["C", [28.05, 55.2, 26.9, 55.2]], ["C", [26.6, 55.2, 26.2, 55.2]], ["C", [25.85, 55.2, 25.5, 55.3]], ["L", [24.7, 55.3]], ["C", [23, 55.7, 22.6, 57.5]], ["C", [22.4, 58.1, 22.5, 58.9]], ["C", [22.6, 59.7, 22.6, 60.5]], ["L", [22.6, 90.8]], ["C", [22.6, 91.4, 22.65, 92.05]], ["C", [22.7, 92.7, 22.5, 93.2]], ["L", [22.5, 94.3]], ["C", [22.5, 95.9, 22, 96.55]], ["C", [21.85, 96.9, 21.3, 97.05]], ["C", [20.8, 97.2, 20.3, 97.4]], ["L", [19.8, 97.4]], ["C", [19.3, 97.5, 18.7, 97.45]], ["C", [18.1, 97.4, 17.65, 97.4]], ["L", [13.2, 97.4]], ["C", [12.5, 97.4, 11.75, 97.45]], ["C", [11, 97.5, 10.5, 97.3]], ["C", [9.3, 97, 8.9, 96.3]], ["C", [8.6, 95.8, 8.55, 95]], ["C", [8.5, 94.2, 8.5, 93.4]], ["L", [8.5, 60.2]], ["C", [8.5, 58.5, 8.3, 57.25]], ["C", [8.1, 56, 6.9, 55.5]], ["C", [5.8, 54.95, 4.2, 55.25]], ["C", [2.6, 55.5, 1.5, 54.95]], ["C", [0.4, 54.5, 0.1, 53.3]], ["C", [-0.1, 52.75, -0.05, 52.1]], ["C", [0, 51.4, 0, 50.65]], ["C", [0, 48.9, 0.2, 47.7]], ["C", [0.4, 46.45, 1.9, 46]], ["C", [2.7, 45.8, 3.6, 45.8]], ["C", [4.5, 45.8, 5.3, 45.8]], ["C", [6.2, 45.8, 6.9, 45.65]], ["C", [7.6, 45.5, 8, 44.9]], ["C", [8.7, 43.9, 8.55, 42.3]], ["C", [8.4, 40.8, 8.7, 39.4]], ["C", [8.8, 39, 8.85, 38.6]], ["C", [8.9, 38.15, 9, 37.7]], ["C", [9.4, 36.3, 9.8, 35.15]], ["C", [10.2, 33.95, 10.9, 33]], ["C", [12.3, 30.6, 14.6, 29.15]], ["C", [16.9, 27.7, 19.8, 26.9]]]; __motifs["g"] = [["M", [20.9, 59.3]], ["C", [19.5, 61.5, 18.6, 64.2]], ["C", [18.4, 64.7, 18.4, 65]], ["C", [18.4, 65.3, 18.3, 65.8]], ["C", [18, 66.9, 17.9, 69]], ["C", [17.8, 71.1, 18.1, 72.4]], ["L", [18.1, 73.4]], ["C", [18.3, 74.2, 18.4, 74.95]], ["C", [18.5, 75.7, 18.7, 76.5]], ["C", [19.6, 79.1, 20.9, 81.05]], ["C", [22.2, 83, 24.5, 84.2]], ["C", [25.5, 84.7, 27.3, 85.2]], ["C", [28, 85.2, 28.4, 85.3]], ["C", [28.6, 85.3, 29, 85.35]], ["C", [29.4, 85.4, 29.6, 85.3]], ["L", [30.6, 85.3]], ["C", [31.5, 85.1, 32.3, 85]], ["C", [33.1, 84.9, 33.9, 84.5]], ["C", [36.4, 83.5, 37.95, 81.7]], ["C", [39.5, 79.9, 40.5, 77.4]], ["C", [40.9, 76.5, 41.2, 75.1]], ["C", [41.5, 73.7, 41.6, 72.15]], ["C", [41.7, 70.6, 41.65, 69.1]], ["C", [41.6, 67.6, 41.3, 66.4]], ["C", [41.1, 66, 41.15, 65.75]], ["C", [41.2, 65.5, 41.1, 65.1]], ["C", [40.9, 64.4, 40.7, 63.7]], ["C", [40.5, 63, 40.2, 62.4]], ["C", [38.8, 58.9, 36.2, 57]], ["C", [33.6, 55.1, 28.6, 55.1]], ["C", [28.4, 55.3, 28.05, 55.25]], ["C", [27.7, 55.2, 27.4, 55.3]], ["C", [26.7, 55.5, 26.1, 55.65]], ["C", [25.5, 55.8, 24.9, 56]], ["C", [22.3, 57.1, 20.9, 59.3]], ["M", [45.7, 45.9]], ["L", [50.8, 45.9]], ["C", [51.9, 45.9, 52.75, 45.95]], ["C", [53.6, 46, 54.2, 46.5]], ["C", [54.9, 47, 54.95, 48.15]], ["C", [55, 49.3, 55, 50.5]], ["L", [55, 93.2]], ["C", [55, 94, 54.95, 94.75]], ["C", [54.9, 95.5, 54.9, 96.3]], ["C", [54.8, 97.1, 54.75, 97.75]], ["C", [54.7, 98.4, 54.6, 99.2]], ["C", [54.2, 100.65, 53.95, 101.85]], ["C", [53.7, 103.1, 53.2, 104.2]], ["C", [51.5, 108, 48.85, 110.5]], ["C", [46.2, 113, 42.4, 114.6]], ["C", [41.3, 115.1, 40.2, 115.4]], ["C", [39.1, 115.7, 37.9, 116]], ["C", [36.8, 116.3, 35.7, 116.4]], ["C", [34.6, 116.5, 33.5, 116.7]], ["C", [33.1, 116.7, 32.7, 116.75]], ["C", [32.3, 116.8, 31.8, 116.8]], ["C", [31.4, 116.9, 30.9, 116.85]], ["C", [30.4, 116.8, 29.9, 116.9]], ["C", [29.4, 117, 28.6, 117]], ["C", [27.8, 117, 27.3, 116.9]], ["C", [26.8, 116.9, 26.4, 116.9]], ["C", [26, 116.9, 25.6, 116.8]], ["C", [24.8, 116.6, 23.95, 116.6]], ["C", [23.1, 116.6, 22.4, 116.4]], ["C", [22.2, 116.3, 21.9, 116.3]], ["C", [21.6, 116.3, 21.4, 116.2]], ["C", [20.4, 116, 19.45, 115.75]], ["C", [18.5, 115.5, 17.6, 115.1]], ["C", [13.8, 113.5, 10.8, 111.05]], ["C", [7.8, 108.6, 6.4, 104.5]], ["C", [6.2, 104.2, 6.2, 103.9]], ["C", [6.2, 103.6, 6.1, 103.4]], ["C", [5.8, 102.1, 6.35, 101.45]], ["C", [6.9, 100.8, 7.9, 100.65]], ["C", [8.9, 100.4, 10.15, 100.45]], ["C", [11.4, 100.5, 12.5, 100.5]], ["L", [15.9, 100.5]], ["C", [16.4, 100.5, 16.75, 100.55]], ["C", [17.1, 100.65, 17.6, 100.65]], ["C", [19.2, 101, 19.6, 101.65]], ["C", [20, 102.3, 20.8, 103.4]], ["C", [21.1, 103.8, 21.7, 104.4]], ["C", [21.8, 104.6, 21.9, 104.7]], ["C", [22, 104.8, 22.1, 105]], ["C", [22.9, 105.6, 23.8, 106.1]], ["C", [24.7, 106.6, 25.8, 107]], ["C", [26.5, 107.2, 27.2, 107.25]], ["C", [27.9, 107.3, 28.7, 107.5]], ["L", [29.8, 107.5]], ["C", [30.5, 107.7, 31.6, 107.55]], ["C", [32.7, 107.4, 33.3, 107.2]], ["C", [33.8, 107, 34.15, 107]], ["C", [34.5, 107, 34.9, 106.85]], ["C", [37, 105.9, 38.4, 104.4]], ["C", [39.8, 102.9, 40.7, 100.9]], ["C", [40.9, 100.3, 41, 99.7]], ["C", [41.1, 99.1, 41.3, 98.4]], ["C", [41.5, 97.5, 41.55, 96.45]], ["C", [41.6, 95.4, 41.6, 94.35]], ["C", [41.6, 93.9, 41.65, 93.5]], ["C", [41.7, 93.1, 41.6, 92.8]], ["C", [41.4, 92.3, 41.45, 91.9]], ["C", [41.5, 91.5, 41.3, 91.1]], ["C", [41.2, 90.9, 41.05, 90.8]], ["C", [40.9, 90.7, 40.7, 90.5]], ["C", [39.8, 90.4, 39.25, 90.9]], ["C", [38.7, 91.4, 38.2, 91.8]], ["C", [37.3, 92.5, 36.4, 93.1]], ["C", [35.5, 93.7, 34.4, 94.2]], ["C", [33.3, 94.7, 32.2, 95]], ["C", [31.1, 95.3, 29.9, 95.6]], ["C", [29.3, 95.7, 28.75, 95.75]], ["C", [28.2, 95.8, 27.7, 95.9]], ["C", [27.2, 96, 26.1, 96]], ["C", [25, 96, 24.5, 95.9]], ["L", [23.7, 95.9]], ["C", [23.4, 95.8, 23.05, 95.8]], ["C", [22.7, 95.8, 22.3, 95.7]], ["C", [20.9, 95.4, 19.6, 95.15]], ["C", [18.3, 94.9, 17.2, 94.4]], ["C", [12.9, 92.7, 10.25, 89.65]], ["C", [7.6, 86.6, 5.8, 82.3]], ["C", [5.3, 81.2, 5.1, 80]], ["C", [4.9, 78.8, 4.5, 77.6]], ["C", [4.5, 77.1, 4.4, 76.8]], ["C", [4.2, 76, 4.2, 75.05]], ["C", [4.2, 74.1, 4, 73.3]], ["C", [3.9, 72.8, 3.9, 72.35]], ["C", [3.9, 71.9, 3.9, 71.45]], ["C", [3.8, 70.9, 3.8, 70.15]], ["C", [3.8, 69.4, 3.9, 68.9]], ["L", [3.9, 67.9]], ["C", [4, 67.5, 3.95, 67.1]], ["C", [3.9, 66.7, 4.1, 66.3]], ["C", [4.3, 65.3, 4.4, 64.35]], ["C", [4.5, 63.4, 4.7, 62.4]], ["C", [5.3, 60.4, 5.95, 58.6]], ["C", [6.6, 56.85, 7.6, 55.2]], ["C", [8.1, 54.2, 8.75, 53.35]], ["C", [9.4, 52.5, 10.1, 51.6]], ["C", [10.4, 51.1, 10.95, 50.65]], ["C", [11.5, 50.1, 12, 49.7]], ["L", [12.6, 49.1]], ["C", [13.1, 48.7, 13.6, 48.35]], ["C", [14.1, 48, 14.6, 47.7]], ["C", [15.9, 46.9, 17.3, 46.3]], ["C", [18.7, 45.7, 20.4, 45.2]], ["C", [21.2, 44.9, 22.05, 44.85]], ["C", [22.9, 44.8, 23.7, 44.6]], ["C", [24.1, 44.5, 24.8, 44.6]], ["C", [25.5, 44.7, 25.7, 44.5]], ["C", [28.9, 44.4, 31.45, 45.1]], ["C", [34, 45.8, 36, 47.1]], ["C", [36.3, 47.3, 36.6, 47.55]], ["C", [36.9, 47.8, 37.3, 48.1]], ["C", [37.9, 48.6, 38.4, 49.1]], ["C", [38.9, 49.6, 39.6, 50]], ["C", [39.8, 50.1, 40.15, 50.2]], ["C", [40.5, 50.3, 40.7, 50.1]], ["C", [41.2, 49.9, 41.3, 49.4]], ["C", [41.4, 48.9, 41.6, 48.4]], ["C", [41.8, 47.9, 41.95, 47.35]], ["C", [42.1, 46.8, 42.5, 46.45]], ["C", [43.1, 46, 43.95, 45.95]], ["C", [44.8, 45.9, 45.7, 45.9]]]; __motifs["h"] = [["M", [46.85, 47.5]], ["C", [49, 48.9, 50.4, 51.05]], ["C", [51.7, 53.2, 52.65, 55.8]], ["C", [52.85, 56.6, 53, 57.45]], ["C", [53.15, 58.3, 53.3, 59.1]], ["C", [53.5, 60, 53.5, 61]], ["C", [53.5, 62, 53.7, 63]], ["L", [53.7, 64.1]], ["C", [53.9, 64.9, 53.8, 65.85]], ["C", [53.7, 66.8, 53.7, 67.6]], ["L", [53.7, 90.3]], ["C", [53.7, 92, 53.8, 93.9]], ["C", [53.9, 95.8, 53.15, 96.8]], ["C", [52.65, 97.4, 51.5, 97.45]], ["C", [50.45, 97.5, 49.3, 97.5]], ["L", [44.3, 97.5]], ["C", [42.7, 97.5, 41.6, 97.35]], ["C", [40.5, 97.2, 40, 96.1]], ["C", [39.7, 95.5, 39.7, 94.65]], ["C", [39.7, 93.8, 39.7, 93]], ["L", [39.7, 71.3]], ["C", [39.7, 67.1, 39.3, 63.55]], ["C", [38.9, 60, 36.8, 58]], ["C", [35.4, 56.6, 33.4, 56]], ["C", [33, 55.9, 32.75, 55.9]], ["C", [32.5, 55.9, 32.15, 55.8]], ["C", [31.7, 55.7, 31.05, 55.6]], ["C", [30.4, 55.5, 30.05, 55.7]], ["C", [29.4, 55.8, 28.75, 55.8]], ["C", [28.15, 55.8, 27.55, 56]], ["C", [25.25, 56.6, 23.55, 57.8]], ["C", [21.75, 59.2, 20.9, 61.55]], ["C", [20, 63.9, 19.75, 66.85]], ["C", [19.45, 69.8, 19.5, 73.1]], ["C", [19.55, 76.4, 19.55, 79.5]], ["L", [19.55, 91.6]], ["C", [19.55, 92.9, 19.55, 94.35]], ["C", [19.55, 95.8, 19.05, 96.6]], ["C", [18.75, 97, 18.25, 97.15]], ["C", [17.7, 97.3, 17.25, 97.5]], ["C", [16.65, 97.7, 15.85, 97.6]], ["C", [15.15, 97.5, 14.4, 97.5]], ["C", [13.55, 97.5, 12.3, 97.55]], ["C", [11.15, 97.6, 9.9, 97.6]], ["C", [8.7, 97.6, 7.7, 97.45]], ["C", [6.7, 97.3, 6.2, 96.9]], ["C", [5.6, 96.4, 5.55, 95.35]], ["C", [5.5, 94.3, 5.5, 93.2]], ["L", [5.5, 33.1]], ["C", [5.5, 31.8, 5.4, 30]], ["C", [5.3, 28.2, 5.8, 27.4]], ["C", [6.4, 26.7, 7.4, 26.4]], ["C", [7.6, 26.3, 7.8, 26.35]], ["C", [8, 26.4, 8.2, 26.3]], ["L", [15.05, 26.3]], ["C", [16, 26.3, 17, 26.3]], ["C", [17.9, 26.3, 18.55, 26.8]], ["C", [19.25, 27.2, 19.45, 28.5]], ["C", [19.45, 29, 19.5, 29.45]], ["C", [19.55, 29.9, 19.55, 30.4]], ["L", [19.55, 45.5]], ["C", [19.55, 46.2, 19.5, 47.1]], ["C", [19.45, 48, 19.55, 48.85]], ["C", [19.65, 49.7, 19.95, 50.25]], ["C", [20.3, 50.8, 21.05, 50.8]], ["C", [21.25, 50.6, 21.45, 50.6]], ["C", [21.65, 50.6, 21.85, 50.4]], ["C", [22.5, 49.9, 23.15, 49.25]], ["C", [23.75, 48.6, 24.5, 48.1]], ["C", [25.65, 47.3, 26.8, 46.7]], ["C", [28.05, 46.1, 29.45, 45.5]], ["C", [29.85, 45.3, 30.2, 45.3]], ["C", [30.6, 45.3, 31.1, 45.1]], ["C", [32.15, 44.8, 33.2, 44.7]], ["C", [34.35, 44.6, 35.65, 44.6]], ["C", [36.15, 44.6, 36.55, 44.6]], ["C", [37, 44.6, 37.55, 44.7]], ["L", [38.15, 44.7]], ["C", [38.8, 44.8, 39.45, 44.9]], ["C", [40.15, 45, 40.8, 45.1]], ["C", [42.55, 45.6, 44, 46.15]], ["C", [45.4, 46.7, 46.85, 47.5]]]; __motifs["i"] = [["M", [9.15, 45.9]], ["L", [14.1, 45.9]], ["C", [14.7, 45.9, 15.5, 45.85]], ["C", [16.2, 45.8, 16.7, 45.9]], ["L", [17.55, 45.9]], ["C", [18.1, 46.1, 18.6, 46.2]], ["C", [19.15, 46.3, 19.45, 46.8]], ["C", [19.8, 47.3, 19.85, 48.2]], ["C", [19.9, 49.1, 19.9, 50.1]], ["L", [19.9, 92]], ["C", [19.9, 94, 19.8, 95.4]], ["C", [19.75, 96.8, 18, 97.3]], ["C", [17.45, 97.5, 16.7, 97.45]], ["C", [16, 97.4, 15.25, 97.4]], ["L", [9.6, 97.4]], ["C", [8.7, 97.4, 7.85, 97.3]], ["C", [7.05, 97.2, 6.6, 96.7]], ["C", [6, 96, 5.95, 94.95]], ["C", [5.9, 93.9, 5.9, 92.7]], ["L", [5.9, 50.5]], ["C", [5.9, 49.5, 5.9, 48.5]], ["C", [5.9, 47.5, 6.3, 46.9]], ["C", [6.95, 46.2, 8, 46]], ["C", [8.2, 45.9, 8.55, 45.95]], ["C", [8.95, 46, 9.15, 45.9]], ["M", [19.25, 26.9]], ["C", [19.9, 27.7, 19.9, 29.3]], ["C", [19.9, 30.9, 19.9, 32.4]], ["C", [19.9, 33.75, 19.9, 35.15]], ["C", [19.9, 36.5, 19.25, 37.05]], ["C", [18.6, 37.55, 17.7, 37.65]], ["C", [16.7, 37.75, 15.65, 37.75]], ["L", [10, 37.75]], ["C", [8.95, 37.75, 8.05, 37.65]], ["C", [7.25, 37.55, 6.6, 37.05]], ["C", [6.2, 36.7, 6.05, 35.9]], ["C", [5.9, 35.05, 5.85, 33.95]], ["C", [5.8, 32.9, 5.85, 31.85]], ["C", [5.9, 30.7, 5.9, 29.9]], ["C", [5.9, 29.1, 5.95, 28.45]], ["C", [6, 27.8, 6.3, 27.35]], ["C", [6.5, 26.9, 6.85, 26.7]], ["C", [7.25, 26.5, 7.6, 26.3]], ["C", [7.8, 26.3, 8.1, 26.25]], ["C", [8.4, 26.2, 8.6, 26.2]], ["L", [15.9, 26.2]], ["C", [16.95, 26.2, 17.8, 26.3]], ["C", [18.7, 26.4, 19.25, 26.9]]]; __motifs["j"] = [["M", [19.9, 26.7]], ["C", [20.8, 27.45, 20.8, 29.3]], ["C", [20.8, 31.15, 20.8, 32.7]], ["C", [20.8, 33.25, 20.85, 33.85]], ["C", [20.9, 34.4, 20.7, 34.95]], ["L", [20.7, 35.55]], ["C", [20.5, 36.6, 20, 37.15]], ["C", [19.4, 37.65, 18.45, 37.7]], ["C", [17.5, 37.75, 16.4, 37.75]], ["L", [10.7, 37.75]], ["C", [9.65, 37.75, 8.8, 37.65]], ["C", [7.9, 37.55, 7.35, 36.95]], ["C", [7, 36.5, 6.85, 35.7]], ["C", [6.7, 34.8, 6.7, 33.9]], ["C", [6.7, 32.95, 6.75, 31.9]], ["C", [6.8, 30.9, 6.8, 30.1]], ["C", [6.8, 29.35, 6.85, 28.5]], ["C", [6.9, 27.7, 7.2, 27.25]], ["C", [7.35, 26.9, 7.7, 26.7]], ["C", [8.1, 26.5, 8.4, 26.3]], ["C", [8.6, 26.3, 8.85, 26.25]], ["C", [9.1, 26.2, 9.3, 26.2]], ["L", [16.3, 26.2]], ["C", [17.4, 26.2, 18.35, 26.2]], ["C", [19.3, 26.2, 19.9, 26.7]], ["M", [-1.4, 105.1]], ["C", [-0.95, 104.05, 0.4, 104.1]], ["C", [1.7, 104.15, 3, 103.75]], ["C", [5.9, 103, 6.6, 99.95]], ["C", [6.7, 99.55, 6.65, 99.15]], ["C", [6.6, 98.7, 6.7, 98.25]], ["C", [6.9, 97.65, 6.85, 96.9]], ["C", [6.8, 96.25, 6.8, 95.55]], ["L", [6.8, 51.35]], ["C", [6.8, 50.25, 6.75, 48.95]], ["C", [6.7, 47.75, 7.2, 46.9]], ["C", [7.55, 46.25, 8.8, 45.95]], ["C", [9, 45.95, 9.4, 46]], ["C", [9.8, 46.05, 10, 45.85]], ["L", [15, 45.85]], ["C", [15.6, 45.85, 16.3, 45.8]], ["C", [17, 45.75, 17.5, 45.95]], ["L", [18.4, 45.95]], ["C", [18.9, 46.15, 19.45, 46.25]], ["C", [20, 46.35, 20.2, 46.8]], ["C", [20.5, 47.35, 20.65, 48.15]], ["C", [20.8, 48.9, 20.85, 49.95]], ["C", [20.9, 50.9, 20.85, 51.95]], ["C", [20.8, 52.9, 20.8, 53.75]], ["L", [20.8, 95.55]], ["C", [20.8, 99.45, 20.65, 103.05]], ["C", [20.5, 106.75, 19, 109.1]], ["C", [17.7, 111.1, 16, 112.45]], ["C", [14.3, 113.75, 11.8, 114.55]], ["C", [10.9, 114.85, 10, 114.95]], ["C", [9.1, 115.05, 8.2, 115.2]], ["C", [7.45, 115.3, 6.8, 115.3]], ["C", [6.1, 115.3, 5.35, 115.4]], ["L", [4.3, 115.4]], ["C", [3.7, 115.6, 2.45, 115.6]], ["C", [1.15, 115.6, 0.7, 115.4]], ["C", [-0.85, 115.15, -1.4, 114.25]], ["C", [-1.6, 113.75, -1.65, 113.05]], ["C", [-1.7, 112.35, -1.7, 111.5]], ["C", [-1.7, 110.85, -1.75, 109.95]], ["C", [-1.8, 109, -1.8, 108.15]], ["C", [-1.8, 107.2, -1.7, 106.45]], ["C", [-1.6, 105.65, -1.4, 105.1]]]; __motifs["k"] = [["M", [50.3, 45.9]], ["L", [51.4, 45.9]], ["C", [51.9, 46.1, 52.4, 46.15]], ["C", [52.9, 46.2, 53.15, 46.55]], ["C", [53.3, 46.9, 53.15, 47.4]], ["C", [53.05, 47.9, 52.8, 48.1]], ["C", [52.2, 49.1, 51.3, 49.85]], ["C", [50.4, 50.6, 49.6, 51.4]], ["C", [48.95, 52.1, 48.25, 52.75]], ["C", [47.6, 53.5, 46.85, 54.1]], ["C", [46.3, 54.5, 45.95, 54.9]], ["C", [45.6, 55.4, 45.1, 55.8]], ["C", [44.6, 56.1, 44.2, 56.6]], ["C", [43.8, 57.1, 43.3, 57.5]], ["L", [39.5, 61.3]], ["C", [38.8, 61.9, 38.25, 62.45]], ["C", [37.7, 63, 37.2, 63.8]], ["C", [37, 64.1, 36.8, 64.55]], ["C", [36.6, 65, 36.8, 65.5]], ["C", [37, 66.6, 37.55, 67.3]], ["C", [38.1, 68, 38.6, 68.8]], ["C", [39.4, 69.9, 40.05, 71]], ["C", [40.7, 72.1, 41.5, 73.2]], ["L", [52, 89.1]], ["C", [53.05, 90.5, 53.95, 91.9]], ["C", [54.9, 93.3, 55.7, 94.7]], ["C", [56, 95.2, 56.05, 95.9]], ["C", [56.1, 96.55, 55.6, 97]], ["C", [55.2, 97.2, 54.8, 97.2]], ["C", [54.4, 97.2, 53.9, 97.4]], ["C", [53.5, 97.5, 53.05, 97.45]], ["C", [52.5, 97.4, 52, 97.4]], ["L", [48.1, 97.4]], ["C", [46.5, 97.4, 44.3, 97.45]], ["C", [42.1, 97.5, 41, 97]], ["C", [39.9, 96.45, 39.1, 95.15]], ["C", [38.3, 93.8, 37.6, 92.7]], ["C", [35.9, 90, 34.2, 87.25]], ["C", [32.5, 84.5, 30.8, 81.8]], ["C", [30, 80.5, 29.25, 79.2]], ["C", [28.5, 77.85, 27.6, 76.7]], ["C", [27.4, 76.4, 26.9, 75.9]], ["C", [26.4, 75.4, 25.8, 75.6]], ["C", [24.9, 75.75, 24.45, 76.2]], ["C", [24, 76.6, 23.5, 77.1]], ["C", [22.7, 77.7, 22, 78.5]], ["C", [21.3, 79.3, 20.9, 80.4]], ["C", [20.7, 81.2, 20.7, 82.15]], ["C", [20.7, 83.1, 20.7, 83.95]], ["L", [20.7, 90.2]], ["C", [20.7, 90.9, 20.75, 91.75]], ["C", [20.8, 92.6, 20.8, 93.5]], ["C", [20.8, 94.4, 20.7, 95.15]], ["C", [20.6, 95.9, 20.3, 96.3]], ["C", [19.9, 96.9, 19.05, 97.15]], ["C", [18.2, 97.4, 17.1, 97.45]], ["C", [16, 97.5, 14.8, 97.45]], ["C", [13.55, 97.4, 12.7, 97.4]], ["C", [11.55, 97.4, 10.3, 97.45]], ["C", [9, 97.5, 8.2, 97.2]], ["C", [6.9, 96.7, 6.8, 95.4]], ["C", [6.7, 94.1, 6.7, 92.35]], ["L", [6.7, 31.5]], ["C", [6.7, 30.4, 6.65, 29.2]], ["C", [6.6, 28, 7, 27.3]], ["C", [7.35, 26.6, 8.4, 26.3]], ["C", [8.6, 26.3, 8.85, 26.25]], ["C", [9.1, 26.2, 9.3, 26.2]], ["L", [16.6, 26.2]], ["C", [17.7, 26.2, 18.6, 26.3]], ["C", [19.5, 26.4, 20, 26.9]], ["C", [20.8, 27.75, 20.75, 29.8]], ["C", [20.7, 31.8, 20.7, 33.5]], ["L", [20.7, 56.5]], ["C", [20.7, 57.2, 20.6, 58]], ["C", [20.5, 58.8, 20.7, 59.5]], ["L", [20.7, 60.4]], ["C", [20.9, 60.9, 21, 61.45]], ["C", [21.1, 62, 21.6, 62.2]], ["C", [21.9, 62.4, 22.4, 62.25]], ["C", [22.9, 62.1, 23.1, 61.9]], ["C", [24.1, 61.15, 24.85, 60.3]], ["C", [25.6, 59.4, 26.4, 58.6]], ["C", [27.2, 57.8, 28.15, 56.9]], ["C", [29, 56.1, 29.7, 55.1]], ["C", [30, 54.85, 30.4, 54.5]], ["C", [30.9, 54, 31.4, 53.45]], ["C", [31.9, 52.85, 32.4, 52.4]], ["L", [34.7, 50.1]], ["C", [34.9, 49.7, 35.25, 49.45]], ["C", [35.6, 49.2, 35.9, 48.8]], ["C", [36.7, 47.8, 37.65, 47.05]], ["C", [38.6, 46.3, 40, 46]], ["C", [40.55, 45.9, 41.4, 45.9]], ["C", [41.8, 45.8, 42.2, 45.85]], ["C", [42.65, 45.9, 43.1, 45.9]], ["L", [46.4, 45.9]], ["C", [47.2, 45.9, 48.35, 45.8]], ["C", [49.5, 45.7, 50.3, 45.9]]]; __motifs["l"] = [["M", [19.9, 31.1]], ["L", [19.9, 91.2]], ["C", [19.9, 92.35, 19.95, 93.95]], ["C", [20, 95.5, 19.55, 96.3]], ["C", [19.05, 97.1, 17.7, 97.4]], ["C", [17.15, 97.6, 16.35, 97.5]], ["C", [15.65, 97.4, 14.95, 97.4]], ["L", [10.1, 97.4]], ["C", [9.05, 97.4, 8.1, 97.3]], ["C", [7.25, 97.2, 6.6, 96.7]], ["C", [6, 96.2, 5.95, 95.15]], ["C", [5.9, 94.1, 5.9, 93]], ["L", [5.9, 33]], ["C", [5.9, 31.7, 5.85, 29.85]], ["C", [5.8, 28.1, 6.3, 27.3]], ["C", [6.5, 26.9, 6.85, 26.7]], ["C", [7.25, 26.5, 7.6, 26.3]], ["C", [7.8, 26.3, 8.1, 26.25]], ["C", [8.4, 26.2, 8.6, 26.2]], ["L", [15.9, 26.2]], ["C", [16.95, 26.2, 17.8, 26.3]], ["C", [18.7, 26.4, 19.25, 26.9]], ["C", [19.8, 27.6, 19.85, 28.75]], ["C", [19.9, 29.85, 19.9, 31.1]]]; __motifs["m"] = [["M", [84.1, 56.6]], ["C", [84.3, 57.5, 84.45, 58.45]], ["C", [84.55, 59.1, 84.6, 59.7]], ["C", [84.65, 60.3, 84.75, 60.95]], ["L", [84.75, 61.9]], ["C", [84.85, 62.5, 84.8, 63.3]], ["C", [84.75, 64.1, 84.75, 64.85]], ["L", [84.75, 90.15]], ["C", [84.75, 90.9, 84.8, 92]], ["C", [84.85, 93, 84.8, 94]], ["C", [84.75, 94.9, 84.55, 95.75]], ["C", [84.4, 96.6, 84, 96.9]], ["C", [83.35, 97.4, 82.4, 97.45]], ["C", [81.45, 97.5, 80.35, 97.5]], ["L", [75.05, 97.5]], ["C", [73.65, 97.5, 72.55, 97.3]], ["C", [71.45, 97.1, 71.05, 96.2]], ["C", [70.75, 95.5, 70.75, 94.65]], ["C", [70.75, 93.8, 70.75, 93]], ["L", [70.75, 69.7]], ["C", [70.75, 69.2, 70.8, 68.6]], ["C", [70.85, 68, 70.65, 67.5]], ["L", [70.65, 66.7]], ["C", [70.65, 66.1, 70.65, 65.5]], ["C", [70.65, 64.9, 70.55, 64.3]], ["C", [70.45, 63.9, 70.45, 63.45]], ["C", [70.45, 63, 70.35, 62.6]], ["C", [69.95, 61.1, 69.55, 59.95]], ["C", [69.05, 58.8, 68.15, 57.9]], ["C", [66.75, 56.5, 64.75, 55.9]], ["C", [64.35, 55.8, 64.05, 55.85]], ["C", [63.75, 55.9, 63.4, 55.7]], ["C", [62.95, 55.6, 62.4, 55.55]], ["C", [61.85, 55.5, 61.4, 55.6]], ["C", [60.75, 55.8, 60.15, 55.8]], ["C", [59.55, 55.8, 58.95, 56]], ["C", [56.05, 57, 54.75, 59]], ["C", [53.05, 61.3, 52.7, 64.75]], ["C", [52.35, 68.2, 52.35, 72.3]], ["L", [52.35, 92.9]], ["C", [52.35, 93.9, 52.35, 94.9]], ["C", [52.35, 95.9, 51.85, 96.5]], ["C", [51.35, 97.2, 50.4, 97.35]], ["C", [49.45, 97.5, 48.25, 97.5]], ["L", [42.8, 97.5]], ["C", [41.95, 97.5, 41.05, 97.45]], ["C", [40.25, 97.4, 39.65, 97.2]], ["C", [38.6, 96.7, 38.5, 95.6]], ["C", [38.35, 94.5, 38.35, 93.1]], ["L", [38.35, 68.9]], ["C", [38.35, 66, 38.15, 63.4]], ["C", [37.95, 60.85, 36.8, 59.1]], ["C", [36.05, 57.7, 34.75, 57]], ["C", [33.55, 56.3, 31.75, 55.8]], ["C", [31.35, 55.7, 30.9, 55.75]], ["C", [30.5, 55.8, 30.05, 55.7]], ["C", [28.9, 55.5, 27.95, 55.9]], ["C", [27.75, 55.9, 27.55, 55.95]], ["C", [27.35, 56, 27.15, 56]], ["C", [25.55, 56.5, 24, 57.7]], ["C", [22.4, 58.95, 21.6, 60.45]], ["C", [20.7, 62, 20.35, 63.95]], ["C", [20, 65.9, 19.95, 68.2]], ["C", [19.9, 70.5, 19.9, 73.2]], ["L", [19.9, 92.8]], ["C", [19.9, 93.7, 19.9, 94.6]], ["C", [19.9, 95.5, 19.65, 96.25]], ["C", [19.25, 97.1, 18.1, 97.3]], ["C", [17.05, 97.5, 15.65, 97.5]], ["L", [10.4, 97.5]], ["C", [9.4, 97.5, 8.45, 97.45]], ["C", [7.5, 97.4, 6.95, 97]], ["C", [6, 96.5, 5.95, 95.15]], ["C", [5.9, 93.85, 5.9, 92.3]], ["L", [5.9, 50.25]], ["C", [5.9, 49.1, 5.95, 48.3]], ["C", [6, 47.4, 6.4, 46.8]], ["C", [6.9, 46.25, 8, 46.05]], ["L", [8.6, 46.05]], ["C", [9.1, 45.95, 9.65, 45.95]], ["C", [10.2, 45.95, 10.7, 45.95]], ["L", [14.85, 45.95]], ["C", [15.65, 45.95, 16.35, 46]], ["C", [17.15, 46.05, 17.7, 46.25]], ["C", [18.55, 46.5, 18.8, 47.2]], ["C", [19.05, 47.9, 19.25, 48.8]], ["C", [19.35, 49.1, 19.3, 49.35]], ["C", [19.25, 49.6, 19.45, 49.8]], ["C", [19.55, 50.15, 19.7, 50.3]], ["C", [19.8, 50.45, 20, 50.65]], ["C", [21.25, 50.7, 22, 49.85]], ["C", [22.8, 49, 23.55, 48.55]], ["C", [24.9, 47.5, 26.35, 46.7]], ["C", [27.85, 45.95, 29.55, 45.4]], ["C", [30.4, 45.1, 31.35, 45]], ["C", [32.25, 44.9, 33.25, 44.7]], ["C", [33.55, 44.6, 34.15, 44.65]], ["C", [34.7, 44.7, 34.9, 44.6]], ["C", [38.6, 44.5, 41.45, 45.4]], ["C", [44.25, 46.35, 46.35, 47.9]], ["C", [47.15, 48.55, 47.8, 49.3]], ["C", [48.45, 50.15, 49.25, 50.9]], ["C", [49.45, 51.1, 49.9, 51.45]], ["C", [50.35, 51.8, 50.85, 51.6]], ["C", [51.95, 51.3, 52.95, 50.2]], ["C", [53.95, 49, 54.85, 48.45]], ["C", [56.25, 47.3, 57.85, 46.55]], ["C", [59.45, 45.8, 61.45, 45.1]], ["C", [62.25, 44.9, 63.45, 44.75]], ["C", [64.55, 44.6, 65.8, 44.55]], ["C", [67.05, 44.5, 68.2, 44.6]], ["C", [69.4, 44.7, 70.25, 44.9]], ["C", [70.75, 45, 71.15, 45]], ["C", [71.6, 45, 72.05, 45.2]], ["C", [73.5, 45.6, 74.75, 46.05]], ["C", [76.05, 46.45, 77.15, 47.1]], ["C", [81.35, 49.7, 83.5, 54.75]], ["C", [83.9, 55.6, 84.1, 56.6]]]; __motifs["n"] = [["M", [9.3, 45.9]], ["C", [9.8, 45.9, 10.3, 45.9]], ["L", [14.55, 45.9]], ["C", [15.35, 45.9, 16.05, 45.95]], ["C", [16.85, 46, 17.45, 46.2]], ["C", [18.15, 46.5, 18.4, 47.1]], ["C", [18.65, 47.7, 18.85, 48.55]], ["C", [18.95, 48.9, 18.9, 49.2]], ["C", [18.85, 49.5, 19.05, 49.8]], ["C", [19.25, 50.3, 19.4, 50.4]], ["C", [19.55, 50.55, 19.8, 50.7]], ["C", [20.95, 50.8, 21.65, 49.95]], ["C", [22.3, 49.1, 23.15, 48.6]], ["C", [25.85, 46.6, 29.1, 45.4]], ["C", [30.05, 45.1, 30.95, 45]], ["C", [31.95, 44.9, 33, 44.7]], ["C", [33.3, 44.6, 33.95, 44.65]], ["C", [34.5, 44.7, 34.7, 44.6]], ["C", [40.7, 44.4, 44.75, 46.35]], ["C", [48.75, 48.2, 51.05, 51.9]], ["C", [51.7, 53, 52.1, 54.25]], ["C", [52.55, 55.5, 52.95, 56.85]], ["C", [53.15, 57.6, 53.15, 58.3]], ["C", [53.2, 59, 53.4, 59.7]], ["C", [53.4, 60.3, 53.5, 60.5]], ["C", [53.7, 61.9, 53.7, 63.4]], ["C", [53.7, 64.9, 53.7, 66.3]], ["L", [53.7, 91.4]], ["C", [53.7, 93.3, 53.65, 95.05]], ["C", [53.6, 96.8, 52.2, 97.3]], ["C", [51.6, 97.5, 50.8, 97.5]], ["C", [50, 97.5, 49.2, 97.5]], ["L", [43.8, 97.5]], ["C", [42.6, 97.5, 41.65, 97.35]], ["C", [40.65, 97.2, 40.2, 96.5]], ["C", [39.8, 95.9, 39.75, 94.95]], ["C", [39.7, 94, 39.7, 92.9]], ["L", [39.7, 71]], ["C", [39.7, 67.3, 39.4, 64.15]], ["C", [39.1, 61, 37.6, 58.8]], ["C", [36.2, 56.8, 33.5, 56]], ["C", [33, 55.8, 32.45, 55.8]], ["C", [31.95, 55.8, 31.3, 55.6]], ["C", [30.8, 55.5, 30.1, 55.55]], ["C", [29.3, 55.6, 28.9, 55.7]], ["C", [28.5, 55.8, 28.2, 55.8]], ["C", [27.95, 55.8, 27.65, 55.9]], ["C", [25.35, 56.5, 23.95, 57.5]], ["C", [20.75, 59.8, 20.1, 64.2]], ["C", [19.55, 68.6, 19.55, 74.1]], ["L", [19.55, 92.7]], ["C", [19.55, 93.6, 19.55, 94.5]], ["C", [19.55, 95.4, 19.25, 96]], ["C", [18.75, 97.1, 17.65, 97.3]], ["C", [16.55, 97.5, 14.95, 97.5]], ["L", [9.9, 97.5]], ["C", [8.8, 97.5, 7.7, 97.4]], ["C", [6.6, 97.3, 6.1, 96.7]], ["C", [5.4, 95.8, 5.45, 94.1]], ["C", [5.5, 92.4, 5.5, 90.9]], ["L", [5.5, 50.2]], ["C", [5.5, 49.1, 5.55, 48.2]], ["C", [5.6, 47.3, 6.1, 46.7]], ["C", [6.3, 46.45, 6.75, 46.25]], ["C", [7.25, 46.1, 7.7, 46]], ["L", [8.2, 46]], ["C", [8.7, 45.9, 9.3, 45.9]]]; __motifs["o"] = [["M", [35.2, 56]], ["C", [34.6, 55.8, 34, 55.65]], ["C", [33.4, 55.5, 32.7, 55.3]], ["C", [31.9, 55.1, 31, 55.15]], ["C", [30.1, 55.2, 29.2, 55.2]], ["C", [28.9, 55.4, 28.5, 55.35]], ["C", [28.1, 55.3, 27.8, 55.4]], ["C", [27.1, 55.6, 26.45, 55.75]], ["C", [25.8, 55.9, 25.3, 56.2]], ["C", [22.8, 57.3, 21.25, 59.35]], ["C", [19.7, 61.4, 18.8, 64.1]], ["C", [18.5, 65.1, 18.35, 66.2]], ["C", [18.2, 67.3, 18, 68.4]], ["C", [17.9, 68.9, 17.9, 69.4]], ["C", [17.9, 69.9, 17.9, 70.4]], ["C", [17.7, 71.1, 17.75, 72.5]], ["C", [17.8, 73.9, 18, 74.6]], ["L", [18, 75.5]], ["C", [18.2, 76.3, 18.3, 77.05]], ["C", [18.4, 77.8, 18.6, 78.6]], ["C", [19.6, 81.6, 20.75, 83.45]], ["C", [21.9, 85.3, 24.4, 86.8]], ["C", [25.1, 87.3, 25.95, 87.6]], ["C", [26.8, 87.9, 27.7, 88.1]], ["C", [28.1, 88.2, 28.4, 88.15]], ["C", [28.7, 88.1, 29.1, 88.2]], ["C", [29.5, 88.3, 29.95, 88.35]], ["C", [30.4, 88.4, 30.8, 88.3]], ["L", [31.6, 88.3]], ["C", [32.4, 88.1, 33.2, 88]], ["C", [34, 87.9, 34.7, 87.6]], ["C", [37.3, 86.6, 38.9, 84.9]], ["C", [40.5, 83.2, 41.6, 80.7]], ["C", [42, 79.7, 42.2, 78.7]], ["C", [42.4, 77.7, 42.7, 76.6]], ["C", [42.8, 76.2, 42.8, 75.85]], ["C", [42.8, 75.5, 42.9, 75.1]], ["C", [42.9, 74.6, 42.9, 74.15]], ["C", [42.9, 73.7, 43, 73.2]], ["C", [43.1, 72.7, 43.1, 71.75]], ["C", [43.1, 70.8, 43, 70.3]], ["L", [43, 69.5]], ["C", [42.8, 69, 42.8, 68.4]], ["C", [42.8, 67.8, 42.7, 67.3]], ["C", [42.7, 66.9, 42.6, 66.7]], ["C", [42.4, 65.9, 42.25, 65.05]], ["C", [42.1, 64.2, 41.8, 63.4]], ["C", [40.7, 60.8, 39.2, 58.95]], ["C", [37.7, 57.1, 35.2, 56]], ["M", [39.15, 45.8]], ["C", [43.4, 47.1, 46.7, 49.4]], ["C", [47.8, 50.2, 48.95, 51.15]], ["C", [50.1, 52.1, 50.9, 53.2]], ["C", [51.7, 54.2, 52.35, 55.2]], ["C", [53, 56.2, 53.7, 57.3]], ["C", [54.4, 58.4, 54.8, 59.65]], ["C", [55.2, 60.9, 55.7, 62.3]], ["C", [56, 63.1, 56.2, 64]], ["C", [56.4, 64.9, 56.6, 65.8]], ["C", [56.7, 66.2, 56.7, 66.6]], ["C", [56.7, 67, 56.8, 67.4]], ["C", [57, 67.9, 56.9, 68.5]], ["C", [56.8, 69.1, 57, 69.6]], ["C", [57.2, 70.2, 57.2, 71.3]], ["C", [57.2, 72.4, 57, 73]], ["L", [57, 74]], ["C", [56.8, 74.8, 56.85, 75.6]], ["C", [56.9, 76.4, 56.7, 77.2]], ["C", [56.5, 77.9, 56.4, 78.5]], ["C", [56.3, 79.1, 56.2, 79.8]], ["C", [55.8, 80.9, 55.5, 82.05]], ["C", [55.2, 83.2, 54.7, 84.2]], ["C", [52.6, 89, 49.2, 92]], ["C", [45.8, 95, 41, 97]], ["C", [39.8, 97.5, 38.55, 97.75]], ["C", [37.3, 98, 36, 98.3]], ["C", [35.5, 98.5, 34.9, 98.5]], ["C", [34.3, 98.5, 33.8, 98.6]], ["C", [33.5, 98.6, 33.15, 98.65]], ["C", [32.8, 98.7, 32.5, 98.7]], ["C", [32, 98.8, 30.9, 98.85]], ["C", [29.8, 98.9, 29.2, 98.7]], ["L", [28.2, 98.7]], ["C", [27.7, 98.6, 27.15, 98.65]], ["C", [26.6, 98.7, 26.1, 98.5]], ["C", [25.7, 98.4, 25.35, 98.4]], ["C", [25, 98.4, 24.5, 98.3]], ["C", [23.5, 98, 22.5, 97.8]], ["C", [21.5, 97.6, 20.6, 97.2]], ["C", [19.4, 96.8, 18.35, 96.4]], ["C", [17.3, 96, 16.2, 95.4]], ["C", [12.7, 93.3, 10.2, 90.5]], ["C", [7.7, 87.7, 6, 83.8]], ["C", [5.5, 82.9, 5.25, 81.9]], ["C", [5, 80.9, 4.7, 79.8]], ["C", [4.5, 79.3, 4.5, 78.9]], ["C", [4.5, 78.5, 4.3, 78]], ["C", [4.1, 77.2, 4.1, 76.35]], ["C", [4.1, 75.5, 3.9, 74.7]], ["C", [3.8, 74.2, 3.8, 73.8]], ["C", [3.8, 73.4, 3.8, 72.9]], ["C", [3.6, 72.3, 3.65, 71.2]], ["C", [3.7, 70.1, 3.9, 69.5]], ["L", [3.9, 68.8]], ["C", [4, 68.3, 3.95, 67.75]], ["C", [3.9, 67.2, 4.1, 66.7]], ["C", [4.2, 66.2, 4.2, 65.75]], ["C", [4.2, 65.3, 4.4, 64.8]], ["C", [4.8, 63.5, 5.1, 62.25]], ["C", [5.4, 61, 5.9, 59.8]], ["C", [7.7, 55.7, 10.2, 52.95]], ["C", [12.7, 50.2, 16.3, 47.9]], ["C", [17.3, 47.4, 18.4, 47]], ["C", [19.5, 46.6, 20.6, 46.1]], ["C", [21.9, 45.6, 23.3, 45.4]], ["C", [24.7, 45.2, 26.2, 44.8]], ["C", [27, 44.7, 27.7, 44.7]], ["C", [28.4, 44.7, 29.1, 44.6]], ["C", [34.9, 44.5, 39.15, 45.8]]]; __motifs["p"] = [["M", [22.1, 59.7]], ["C", [20.7, 62, 19.8, 64.8]], ["C", [19.6, 65.6, 19.5, 66.45]], ["C", [19.4, 67.3, 19.2, 68.1]], ["C", [19.1, 68.5, 19.1, 69.4]], ["C", [18.9, 69.8, 19, 70.35]], ["C", [19.1, 70.9, 19, 71.4]], ["C", [18.8, 72, 19, 72.5]], ["L", [19, 73.7]], ["C", [19, 74.2, 19, 74.6]], ["C", [19, 75, 19.2, 75.4]], ["C", [19.2, 76.1, 19.3, 76.5]], ["C", [19.4, 77.1, 19.5, 77.7]], ["C", [19.6, 78.3, 19.8, 78.9]], ["C", [20.7, 81.8, 21.9, 83.65]], ["C", [23.2, 85.5, 25.5, 86.9]], ["C", [26.9, 87.7, 28.8, 88.2]], ["C", [29.2, 88.3, 29.5, 88.25]], ["C", [29.8, 88.2, 30.2, 88.3]], ["C", [30.55, 88.4, 31.4, 88.45]], ["C", [32.2, 88.5, 32.65, 88.4]], ["C", [33.5, 88.2, 34.35, 88.05]], ["C", [35.2, 87.9, 36, 87.6]], ["C", [38.4, 86.6, 39.9, 84.8]], ["C", [41.4, 83, 42.4, 80.6]], ["C", [42.85, 79.4, 43.05, 78.1]], ["C", [43.3, 76.8, 43.6, 75.4]], ["C", [43.6, 74.9, 43.65, 74.4]], ["C", [43.7, 73.9, 43.7, 73.4]], ["C", [43.8, 72.9, 43.8, 72.05]], ["C", [43.8, 71.2, 43.7, 70.7]], ["L", [43.7, 69.8]], ["C", [43.5, 69.2, 43.5, 68.5]], ["C", [43.5, 67.8, 43.3, 67.1]], ["C", [43.05, 66.1, 42.85, 65.15]], ["C", [42.7, 64.2, 42.3, 63.4]], ["C", [41.1, 60.2, 39.2, 58.3]], ["C", [37.3, 56.4, 33.8, 55.5]], ["C", [33, 55.3, 32.05, 55.3]], ["C", [31.1, 55.3, 30.2, 55.3]], ["C", [29.8, 55.4, 29.5, 55.4]], ["C", [29.2, 55.4, 28.8, 55.5]], ["C", [28.1, 55.7, 27.45, 55.85]], ["C", [26.8, 56, 26.15, 56.3]], ["C", [23.6, 57.4, 22.1, 59.7]], ["M", [9.55, 46.1]], ["L", [14.4, 46.1]], ["C", [15.4, 46.1, 16.25, 46.1]], ["C", [17.2, 46.1, 17.75, 46.6]], ["C", [18.5, 47.1, 18.55, 47.85]], ["C", [18.6, 48.6, 19, 49.4]], ["C", [19.1, 49.7, 19.25, 49.85]], ["C", [19.4, 50, 19.6, 50.2]], ["C", [20.7, 50.3, 21.4, 49.6]], ["C", [22.05, 48.9, 22.8, 48.4]], ["C", [24.05, 47.5, 25.5, 46.75]], ["C", [26.9, 46, 28.55, 45.5]], ["C", [29.4, 45.2, 30.3, 45.1]], ["C", [31.3, 45, 32.2, 44.8]], ["C", [32.55, 44.7, 33.05, 44.8]], ["C", [33.5, 44.9, 33.8, 44.7]], ["C", [39.5, 44.5, 43.45, 46.25]], ["C", [47.35, 48, 50.2, 50.8]], ["C", [50.7, 51.3, 51.05, 51.75]], ["C", [51.45, 52.2, 51.9, 52.7]], ["C", [52.6, 53.6, 53.15, 54.5]], ["C", [53.65, 55.4, 54.2, 56.3]], ["C", [54.4, 56.5, 54.45, 56.8]], ["C", [54.5, 57.1, 54.7, 57.5]], ["C", [55.25, 58.5, 55.75, 59.9]], ["C", [56, 60.5, 56.2, 61.15]], ["C", [56.4, 61.8, 56.6, 62.5]], ["C", [57, 63.7, 57.15, 65]], ["C", [57.3, 66.3, 57.55, 67.7]], ["C", [57.55, 68.2, 57.6, 68.8]], ["C", [57.65, 69.4, 57.75, 70]], ["L", [57.75, 71.1]], ["C", [57.85, 71.7, 57.85, 72.9]], ["C", [57.85, 74.1, 57.65, 74.6]], ["L", [57.65, 75.9]], ["C", [57.35, 77, 57.3, 78]], ["C", [57.3, 79, 57, 80]], ["C", [56.8, 80.9, 56.6, 81.85]], ["C", [56.4, 82.8, 56, 83.7]], ["C", [55.25, 85.4, 54.6, 86.85]], ["C", [53.9, 88.3, 53, 89.7]], ["C", [52.4, 90.6, 51.75, 91.35]], ["C", [51.05, 92.1, 50.3, 92.9]], ["L", [49.6, 93.6]], ["C", [49.05, 94.1, 48.55, 94.5]], ["C", [48, 94.9, 47.45, 95.3]], ["C", [46.7, 95.9, 45.75, 96.35]], ["C", [44.8, 96.8, 43.8, 97.3]], ["C", [42.75, 97.8, 41.75, 98]], ["C", [40.65, 98.2, 39.6, 98.4]], ["C", [38.95, 98.6, 38.35, 98.6]], ["C", [37.7, 98.6, 36.95, 98.8]], ["L", [36.1, 98.8]], ["C", [35.3, 99, 34.55, 98.8]], ["L", [33.6, 98.8]], ["C", [33, 98.6, 32.3, 98.65]], ["C", [31.7, 98.7, 31.1, 98.5]], ["C", [29.5, 98, 28.05, 97.6]], ["C", [26.55, 97.2, 25.4, 96.4]], ["C", [24.7, 96, 24.05, 95.55]], ["C", [23.5, 95.1, 22.8, 94.6]], ["C", [22.35, 94.3, 21.6, 93.7]], ["C", [20.8, 93.1, 20.15, 93.6]], ["C", [19.7, 93.9, 19.7, 94.35]], ["C", [19.7, 94.8, 19.5, 95.4]], ["C", [19.3, 96.4, 19.35, 97.7]], ["C", [19.4, 99, 19.4, 100.1]], ["L", [19.4, 110.3]], ["C", [19.4, 111.6, 19.35, 112.85]], ["C", [19.3, 114.1, 18.8, 114.9]], ["C", [18.5, 115.3, 17.7, 115.5]], ["C", [16.9, 115.7, 15.85, 115.75]], ["C", [14.9, 115.8, 13.85, 115.75]], ["C", [12.9, 115.7, 12.15, 115.7]], ["L", [9.45, 115.7]], ["C", [9.2, 115.7, 8.8, 115.7]], ["C", [8.4, 115.7, 8.05, 115.6]], ["L", [7.3, 115.6]], ["C", [5.55, 115.1, 5.45, 113.65]], ["C", [5.35, 112.2, 5.35, 110.2]], ["L", [5.35, 51.5]], ["C", [5.35, 50.4, 5.3, 49.15]], ["C", [5.25, 47.9, 5.75, 47.2]], ["C", [6.15, 46.5, 6.9, 46.3]], ["C", [7.35, 46.1, 8.1, 46.1]], ["C", [8.9, 46.1, 9.55, 46.1]]]; __motifs["q"] = [["M", [20.45, 59.8]], ["C", [18.8, 62.3, 17.9, 65.6]], ["C", [17.7, 66.4, 17.65, 67.05]], ["C", [17.6, 67.7, 17.4, 68.5]], ["C", [17.4, 69.2, 17.3, 69.5]], ["C", [17.2, 70, 17.15, 71.25]], ["C", [17.1, 72.5, 17.3, 73]], ["L", [17.3, 73.9]], ["C", [17.4, 74.3, 17.4, 74.7]], ["C", [17.4, 75.1, 17.5, 75.4]], ["C", [17.5, 75.6, 17.55, 75.9]], ["C", [17.6, 76.2, 17.6, 76.4]], ["C", [17.8, 77.2, 17.9, 77.9]], ["C", [18, 78.6, 18.3, 79.3]], ["C", [19.1, 81.8, 20.4, 83.6]], ["C", [21.7, 85.4, 23.7, 86.7]], ["C", [25.1, 87.5, 26.8, 87.9]], ["C", [27.1, 88, 27.35, 88]], ["C", [27.6, 88, 28, 88.1]], ["C", [28.3, 88.2, 28.95, 88.25]], ["C", [29.6, 88.3, 30.1, 88.2]], ["C", [30.3, 88.1, 30.65, 88.15]], ["C", [31, 88.2, 31.3, 88.1]], ["C", [32, 87.9, 32.65, 87.8]], ["C", [33.3, 87.7, 34, 87.5]], ["C", [36.6, 86.4, 38.15, 84.6]], ["C", [39.7, 82.8, 40.8, 80.2]], ["C", [41.1, 79.4, 41.3, 78.5]], ["C", [41.5, 77.6, 41.7, 76.7]], ["C", [41.7, 76.3, 41.75, 76]], ["C", [41.8, 75.7, 41.8, 75.3]], ["C", [42, 74.3, 42, 73.6]], ["L", [42, 72.4]], ["C", [42.1, 72.2, 42.05, 71.9]], ["C", [42, 71.6, 42, 71.4]], ["C", [41.9, 70.4, 41.9, 69.5]], ["C", [41.9, 68.6, 41.7, 67.8]], ["C", [41.6, 67.5, 41.65, 67.25]], ["C", [41.7, 67, 41.6, 66.7]], ["C", [41.4, 65.9, 41.25, 65.25]], ["C", [41.1, 64.6, 40.9, 63.9]], ["C", [39.9, 61, 38.2, 58.9]], ["C", [36.5, 56.8, 33.8, 55.7]], ["C", [32.7, 55.2, 31.45, 55.15]], ["C", [30.2, 55.1, 28.8, 55.1]], ["C", [28.5, 55.3, 28.1, 55.25]], ["C", [27.7, 55.2, 27.3, 55.3]], ["C", [26.7, 55.5, 26.1, 55.65]], ["C", [25.5, 55.8, 25, 56]], ["C", [22.1, 57.3, 20.45, 59.8]], ["M", [46.65, 45.9]], ["L", [51.4, 45.9]], ["C", [52.1, 45.9, 52.85, 45.9]], ["C", [53.5, 45.9, 54.1, 46.1]], ["C", [54.85, 46.3, 55.2, 47]], ["C", [55.7, 47.7, 55.65, 48.9]], ["C", [55.6, 50.1, 55.6, 51.2]], ["L", [55.6, 109.8]], ["C", [55.6, 111.4, 55.55, 112.95]], ["C", [55.5, 114.5, 54.5, 115.1]], ["C", [53.7, 115.6, 52.2, 115.55]], ["C", [50.75, 115.5, 49.4, 115.5]], ["C", [48.5, 115.5, 47.35, 115.55]], ["C", [46.2, 115.6, 45.15, 115.55]], ["C", [44.1, 115.5, 43.25, 115.25]], ["C", [42.4, 115, 42, 114.4]], ["C", [41.5, 113.6, 41.55, 112.15]], ["C", [41.6, 110.7, 41.6, 109.5]], ["L", [41.6, 98.6]], ["C", [41.6, 97.5, 41.6, 96.1]], ["C", [41.6, 94.7, 41.3, 94]], ["C", [41.1, 93.8, 40.95, 93.65]], ["C", [40.8, 93.5, 40.65, 93.3]], ["C", [39.7, 93.2, 39.2, 93.65]], ["C", [38.7, 94.1, 38.1, 94.5]], ["C", [37.2, 95.2, 36.25, 95.8]], ["C", [35.3, 96.4, 34.2, 96.9]], ["C", [32.4, 97.7, 30.2, 98.15]], ["C", [28, 98.6, 25.7, 98.65]], ["C", [23.4, 98.7, 21.15, 98.3]], ["C", [18.9, 97.9, 17.1, 97.1]], ["C", [12.6, 95.1, 9.8, 91.95]], ["C", [7, 88.8, 5.1, 84.2]], ["C", [4.6, 83.1, 4.4, 81.95]], ["C", [4.2, 80.8, 3.9, 79.7]], ["C", [3.7, 79.3, 3.75, 78.95]], ["C", [3.8, 78.6, 3.7, 78.2]], ["C", [3.5, 77.4, 3.45, 76.45]], ["C", [3.4, 75.5, 3.2, 74.6]], ["L", [3.2, 73.3]], ["C", [3.15, 72.8, 3.15, 72.05]], ["C", [3.15, 71.3, 3.2, 70.8]], ["C", [3.3, 70.3, 3.3, 69.9]], ["C", [3.3, 69.5, 3.3, 69]], ["C", [3.4, 68.5, 3.35, 68]], ["C", [3.3, 67.5, 3.5, 67]], ["C", [3.7, 66.1, 3.8, 65.15]], ["C", [3.9, 64.2, 4.1, 63.3]], ["C", [4.6, 61.6, 5.2, 60.1]], ["C", [5.7, 58.6, 6.3, 57.2]], ["C", [6.9, 55.8, 7.8, 54.5]], ["C", [8.7, 53.2, 9.6, 52]], ["C", [10.5, 50.9, 11.6, 50]], ["C", [11.9, 49.7, 12, 49.5]], ["C", [12.5, 49.2, 12.9, 48.85]], ["C", [13.3, 48.5, 13.7, 48.2]], ["C", [15.1, 47.2, 16.65, 46.55]], ["C", [18.2, 45.9, 19.9, 45.3]], ["C", [20.8, 45, 21.7, 44.9]], ["C", [22.6, 44.8, 23.5, 44.6]], ["C", [23.8, 44.5, 24.6, 44.6]], ["C", [25.4, 44.7, 25.6, 44.5]], ["C", [28.8, 44.4, 31.6, 45.05]], ["C", [34.4, 45.7, 36.45, 46.9]], ["C", [37, 47.3, 37.6, 47.7]], ["C", [38.2, 48.1, 38.7, 48.5]], ["C", [39.3, 49, 39.75, 49.45]], ["C", [40.2, 49.9, 41.3, 49.9]], ["C", [41.5, 49.7, 41.65, 49.55]], ["C", [41.8, 49.4, 42, 49.2]], ["C", [42.3, 48.4, 42.4, 47.65]], ["C", [42.5, 46.9, 43.2, 46.4]], ["C", [43.7, 46, 44.7, 45.95]], ["C", [45.6, 45.9, 46.65, 45.9]]]; __motifs["r"] = [["M", [18.65, 48.45]], ["C", [18.7, 49.3, 18.8, 50.2]], ["C", [18.9, 51, 19.15, 51.7]], ["C", [19.4, 52.45, 20.05, 52.45]], ["C", [20.25, 52.25, 20.45, 52.25]], ["C", [20.7, 52.25, 20.9, 52]], ["C", [21.5, 51.5, 21.9, 50.85]], ["C", [22.35, 50.25, 23.1, 49.7]], ["C", [23.5, 49.4, 23.8, 49.05]], ["C", [24.05, 48.7, 24.45, 48.45]], ["C", [25.4, 47.8, 26.3, 47.2]], ["C", [27.3, 46.6, 28.25, 46.15]], ["C", [29.3, 45.7, 30.3, 45.4]], ["C", [31.4, 45.1, 32.45, 44.8]], ["C", [32.75, 44.7, 33.65, 44.75]], ["C", [34.45, 44.8, 34.65, 44.6]], ["C", [35.8, 44.6, 36.6, 44.8]], ["C", [37.5, 45, 38, 45.75]], ["C", [38.55, 46.5, 38.55, 48.5]], ["C", [38.55, 50.45, 38.55, 51.95]], ["C", [38.55, 53, 38.6, 54.45]], ["C", [38.65, 55.8, 38.3, 56.65]], ["C", [37.9, 57.3, 37.1, 57.5]], ["C", [36.4, 57.7, 35.45, 57.7]], ["C", [34.45, 57.7, 33.45, 57.6]], ["C", [32.35, 57.5, 31.5, 57.7]], ["C", [30.75, 57.9, 30.1, 57.95]], ["C", [29.4, 58, 28.75, 58.25]], ["C", [27.2, 58.75, 25.6, 59.65]], ["C", [23.95, 60.65, 23.1, 61.8]], ["C", [22.55, 62.65, 22, 63.45]], ["C", [21.5, 64.3, 21, 65.2]], ["C", [20.7, 66, 20.4, 66.9]], ["C", [20.15, 67.7, 19.95, 68.5]], ["C", [19.8, 69.25, 19.8, 69.95]], ["C", [19.8, 70.75, 19.6, 71.45]], ["C", [19.5, 71.8, 19.55, 72.15]], ["C", [19.6, 72.5, 19.5, 72.85]], ["L", [19.5, 74.4]], ["C", [19.3, 75.15, 19.4, 75.95]], ["C", [19.5, 76.8, 19.5, 77.65]], ["L", [19.5, 92.5]], ["C", [19.5, 93.85, 19.4, 94.9]], ["C", [19.3, 96.05, 18.8, 96.7]], ["C", [18.6, 97, 18.1, 97.15]], ["C", [17.7, 97.3, 17.2, 97.4]], ["L", [16.7, 97.4]], ["C", [16.15, 97.5, 15.6, 97.5]], ["C", [15, 97.5, 14.5, 97.5]], ["L", [10.15, 97.5]], ["C", [9.55, 97.4, 8.95, 97.4]], ["C", [8.25, 97.4, 7.55, 97.4]], ["C", [7.1, 97.2, 6.6, 97.05]], ["C", [6.05, 96.9, 5.85, 96.45]], ["C", [5.45, 95.9, 5.4, 94.95]], ["C", [5.35, 94, 5.35, 93]], ["L", [5.35, 50.65]], ["C", [5.35, 49.6, 5.35, 48.65]], ["C", [5.35, 47.7, 5.75, 47.1]], ["C", [6.25, 46.35, 7.3, 46.15]], ["C", [8.25, 45.95, 9.65, 45.95]], ["L", [14.8, 45.95]], ["C", [15.95, 45.95, 16.9, 46.1]], ["C", [17.75, 46.25, 18.25, 47]], ["C", [18.6, 47.5, 18.65, 48.45]]]; __motifs["s"] = [["M", [25, 44.5]], ["C", [32.5, 44.3, 38.05, 46.15]], ["C", [43.6, 48, 46.5, 52.5]], ["C", [47.2, 53.6, 47.75, 54.75]], ["C", [48.3, 55.9, 48.7, 57.3]], ["C", [48.9, 57.9, 48.9, 58.6]], ["C", [48.9, 59.3, 48.7, 59.8]], ["C", [48.3, 60.4, 47.6, 60.6]], ["C", [47.1, 60.8, 46.4, 60.8]], ["C", [45.7, 60.8, 45, 60.8]], ["L", [40.6, 60.8]], ["C", [39.9, 60.8, 39.2, 60.85]], ["C", [38.5, 60.9, 37.9, 60.7]], ["C", [36.9, 60.5, 36.4, 59.9]], ["C", [35.9, 59.3, 35.5, 58.65]], ["C", [35.1, 58, 34.75, 57.25]], ["C", [34.4, 56.5, 33.7, 56]], ["C", [32.7, 55.2, 31.75, 54.8]], ["C", [30.8, 54.4, 29.4, 54.1]], ["C", [28.7, 53.9, 27.35, 53.8]], ["C", [26, 53.7, 25.3, 53.9]], ["L", [24.6, 53.9]], ["C", [24.1, 54, 23.65, 54.05]], ["C", [23.2, 54.1, 22.7, 54.2]], ["C", [21, 54.7, 19.95, 55.55]], ["C", [18.9, 56.4, 18.5, 58.1]], ["C", [18.3, 58.8, 18.5, 59.4]], ["C", [18.7, 60, 18.9, 60.4]], ["C", [19.6, 61.6, 20.55, 62.3]], ["C", [21.5, 63, 22.8, 63.5]], ["C", [24.7, 64.3, 26.95, 64.85]], ["C", [29.2, 65.4, 31.55, 65.85]], ["C", [33.9, 66.3, 36.15, 66.85]], ["C", [38.4, 67.4, 40.4, 68.2]], ["C", [41.3, 68.6, 42.15, 68.85]], ["C", [43, 69.1, 43.8, 69.6]], ["C", [45.7, 70.8, 47.25, 72.2]], ["C", [48.8, 73.6, 49.7, 75.7]], ["C", [50, 76.4, 50.2, 77.1]], ["C", [50.4, 77.8, 50.6, 78.6]], ["C", [50.7, 79.2, 50.75, 80.45]], ["C", [50.8, 81.7, 50.7, 82.4]], ["L", [50.7, 82.9]], ["C", [50.5, 83.5, 50.45, 84.05]], ["C", [50.4, 84.6, 50.3, 85.1]], ["C", [49.6, 88.1, 48.1, 90.4]], ["C", [46.5, 92.8, 44.2, 94.3]], ["C", [41.9, 95.8, 39, 96.9]], ["C", [37.9, 97.4, 36.65, 97.6]], ["C", [35.4, 97.8, 34.2, 98.1]], ["C", [33.3, 98.3, 32.35, 98.35]], ["C", [31.4, 98.4, 30.5, 98.6]], ["L", [28.7, 98.6]], ["C", [28.1, 98.8, 26.65, 98.8]], ["C", [25.2, 98.8, 24.6, 98.6]], ["C", [24.3, 98.6, 23.95, 98.55]], ["C", [23.6, 98.5, 23.2, 98.5]], ["C", [22, 98.3, 20.8, 98.2]], ["C", [19.6, 98.1, 18.5, 97.8]], ["C", [14.6, 96.7, 11.6, 95.25]], ["C", [8.6, 93.8, 6.5, 90.9]], ["C", [5.1, 89, 4.1, 86.5]], ["C", [3.9, 85.9, 3.7, 84.9]], ["C", [3.5, 84.4, 3.4, 83.5]], ["C", [3.3, 82.6, 3.5, 82]], ["C", [3.8, 81.3, 4.5, 81]], ["C", [5, 80.8, 5.7, 80.8]], ["C", [6.4, 80.8, 7.2, 80.8]], ["L", [11.9, 80.8]], ["C", [12.7, 80.8, 13.5, 80.8]], ["C", [14.3, 80.8, 14.9, 81]], ["C", [16, 81.4, 16.35, 82.3]], ["C", [16.7, 83.2, 17.2, 84.2]], ["C", [17.4, 84.7, 17.95, 85.5]], ["C", [18.5, 86.3, 18.9, 86.5]], ["C", [20.1, 87.5, 21.2, 88.05]], ["C", [22.3, 88.6, 24, 89.1]], ["C", [24.5, 89.3, 25, 89.25]], ["C", [25.5, 89.2, 26, 89.3]], ["C", [26.8, 89.5, 27.75, 89.45]], ["C", [28.7, 89.4, 29.4, 89.2]], ["C", [29.9, 89.1, 30.35, 89.1]], ["C", [30.8, 89.1, 31.3, 88.9]], ["C", [32.7, 88.4, 33.85, 87.7]], ["C", [35, 87, 35.7, 85.9]], ["C", [36.2, 85.1, 36.5, 83.4]], ["C", [36.7, 82.7, 36.5, 82.1]], ["C", [36.3, 81.5, 36.1, 81.1]], ["C", [35.4, 79.7, 34.35, 79]], ["C", [33.3, 78.3, 31.9, 77.7]], ["C", [30, 76.9, 27.9, 76.4]], ["C", [25.8, 75.9, 23.7, 75.3]], ["C", [22.9, 75.1, 22.05, 75]], ["C", [21.2, 74.9, 20.4, 74.7]], ["C", [17.2, 73.8, 14.3, 72.95]], ["C", [11.4, 72.1, 9, 70.4]], ["C", [6.2, 68.4, 4.9, 65]], ["C", [4.7, 64.3, 4.5, 63.1]], ["C", [4.3, 62.4, 4.2, 61.4]], ["C", [4.1, 60.4, 4.3, 59.6]], ["C", [4.5, 59.1, 4.4, 58.75]], ["C", [4.3, 58.4, 4.5, 57.9]], ["C", [4.7, 56.8, 4.95, 55.85]], ["C", [5.2, 54.9, 5.6, 54]], ["C", [6.9, 51.1, 9.2, 49.3]], ["C", [11.5, 47.5, 14.4, 46.4]], ["C", [15.5, 45.9, 16.7, 45.65]], ["C", [17.9, 45.4, 19.2, 45.1]], ["C", [19.8, 44.9, 20.4, 44.85]], ["C", [21, 44.8, 21.6, 44.7]], ["C", [22.4, 44.6, 23.3, 44.6]], ["C", [24.2, 44.6, 25, 44.5]]]; __motifs["t"] = [["M", [12.15, 30.5]], ["L", [18.9, 30.5]], ["C", [20.4, 30.5, 21.55, 30.65]], ["C", [22.7, 30.8, 23.2, 31.9]], ["C", [23.4, 32.4, 23.4, 33.1]], ["C", [23.4, 33.85, 23.4, 34.5]], ["L", [23.4, 39]], ["C", [23.4, 39.5, 23.35, 40.2]], ["C", [23.3, 40.8, 23.4, 41.3]], ["L", [23.4, 42.4]], ["C", [23.4, 43.2, 23.5, 43.85]], ["C", [23.6, 44.5, 23.95, 45]], ["C", [24.7, 45.9, 26.55, 45.95]], ["C", [28.35, 46, 30.1, 46]], ["C", [30.7, 46, 31.3, 46]], ["C", [31.9, 46, 32.35, 46.2]], ["C", [33.5, 46.7, 33.65, 48]], ["C", [33.8, 49.3, 33.8, 50.9]], ["C", [33.8, 51.6, 33.85, 52.3]], ["C", [33.9, 53, 33.7, 53.5]], ["C", [33.2, 55.1, 31.6, 55.2]], ["C", [30, 55.3, 28, 55.3]], ["C", [27.6, 55.3, 27.15, 55.25]], ["C", [26.7, 55.2, 26.35, 55.3]], ["C", [26, 55.4, 25.7, 55.35]], ["C", [25.4, 55.3, 25.1, 55.5]], ["C", [24.25, 55.7, 23.95, 56.35]], ["C", [23.6, 57, 23.4, 57.9]], ["C", [23.3, 58.4, 23.4, 59]], ["C", [23.5, 59.6, 23.4, 60.1]], ["L", [23.4, 78]], ["C", [23.4, 80.5, 23.55, 82.35]], ["C", [23.7, 84.2, 24.8, 85.6]], ["C", [25.3, 86.2, 26.1, 86.45]], ["C", [27, 86.7, 27.9, 86.9]], ["C", [28.15, 87, 28.5, 86.95]], ["C", [28.9, 86.9, 29.1, 87]], ["L", [30.2, 87]], ["C", [31.3, 87, 32.1, 87.1]], ["C", [32.9, 87.2, 33.4, 87.9]], ["C", [33.8, 88.5, 33.8, 89.45]], ["C", [33.8, 90.4, 33.8, 91.4]], ["C", [33.8, 93.5, 33.75, 95.25]], ["C", [33.7, 97, 32.1, 97.6]], ["C", [31.6, 97.8, 31.2, 97.75]], ["C", [30.8, 97.7, 30.25, 97.9]], ["L", [29.3, 97.9]], ["C", [29.1, 97.9, 28.7, 97.85]], ["C", [28.25, 97.8, 28, 97.9]], ["C", [27.5, 98, 26.95, 97.95]], ["C", [26.35, 97.9, 25.9, 97.9]], ["C", [25.4, 97.9, 24.9, 97.95]], ["C", [24.35, 98, 23.95, 97.9]], ["L", [22.9, 97.9]], ["C", [22.4, 97.8, 21.8, 97.8]], ["C", [21.2, 97.8, 20.7, 97.7]], ["C", [19.95, 97.6, 19.4, 97.5]], ["C", [18.8, 97.4, 18.15, 97.3]], ["C", [17.1, 97, 16.05, 96.6]], ["C", [15.1, 96.2, 14.15, 95.7]], ["C", [13.85, 95.5, 13.55, 95.25]], ["C", [13.3, 95, 12.9, 94.7]], ["C", [12.7, 94.5, 12.4, 94.3]], ["C", [12.05, 94, 11.85, 93.8]], ["C", [10.5, 91.9, 9.75, 89.6]], ["C", [9.55, 89.2, 9.6, 88.85]], ["C", [9.65, 88.5, 9.55, 88.05]], ["C", [9.45, 87.8, 9.45, 87.5]], ["C", [9.45, 87.2, 9.4, 87]], ["L", [9.4, 86.05]], ["C", [9.3, 85.6, 9.35, 85.1]], ["C", [9.4, 84.6, 9.4, 84.1]], ["L", [9.4, 60.1]], ["C", [9.4, 59.4, 9.4, 58.7]], ["C", [9.45, 58, 9.3, 57.4]], ["C", [8.9, 56, 7.85, 55.6]], ["C", [6.8, 55.1, 5.1, 55.3]], ["C", [3.35, 55.5, 2.2, 55]], ["C", [1.35, 54.75, 1.15, 54.1]], ["C", [1, 53.5, 0.8, 52.65]], ["L", [0.8, 50.55]], ["C", [0.8, 48.7, 1, 47.6]], ["C", [1.15, 46.5, 2.7, 46.1]], ["C", [3.1, 45.9, 3.45, 45.95]], ["C", [3.85, 46, 4.4, 46]], ["C", [5.85, 46, 7.2, 45.85]], ["C", [8.5, 45.7, 9, 44.7]], ["C", [9.3, 44, 9.35, 43.1]], ["C", [9.4, 42.25, 9.4, 41.3]], ["L", [9.4, 35.1]], ["C", [9.4, 34.3, 9.4, 33.4]], ["C", [9.4, 32.5, 9.55, 31.9]], ["C", [10.05, 30.9, 11.1, 30.6]], ["C", [11.3, 30.5, 11.6, 30.55]], ["C", [11.95, 30.6, 12.15, 30.5]]]; __motifs["u"] = [["M", [53.6, 47.9]], ["C", [53.7, 48.85, 53.7, 50.2]], ["L", [53.7, 92.95]], ["C", [53.7, 94, 53.7, 94.95]], ["C", [53.7, 96, 53.3, 96.45]], ["C", [52.85, 97.25, 51.8, 97.35]], ["C", [50.85, 97.5, 49.7, 97.5]], ["L", [44.3, 97.5]], ["C", [43.2, 97.5, 42.35, 97.35]], ["C", [41.5, 97.25, 41, 96.55]], ["C", [40.8, 96.3, 40.65, 95.7]], ["C", [40.55, 95.05, 40.35, 94.45]], ["C", [40.2, 93.9, 40, 93.4]], ["C", [39.8, 92.85, 39.4, 92.75]], ["C", [39.2, 92.55, 38.9, 92.65]], ["C", [38.6, 92.75, 38.45, 92.85]], ["C", [37.7, 93.3, 37.2, 93.8]], ["C", [36.7, 94.3, 36.1, 94.65]], ["C", [35.7, 94.95, 35.35, 95.35]], ["C", [35, 95.7, 34.5, 96]], ["C", [32.25, 97.35, 29.1, 98.2]], ["C", [28.4, 98.4, 27.75, 98.45]], ["C", [27, 98.5, 26.2, 98.65]], ["C", [25.85, 98.75, 25.35, 98.7]], ["C", [24.9, 98.65, 24.5, 98.75]], ["C", [24.2, 98.85, 23.3, 98.8]], ["C", [22.3, 98.75, 22, 98.65]], ["C", [21.55, 98.65, 21, 98.6]], ["C", [20.5, 98.55, 20, 98.55]], ["C", [18.8, 98.3, 17.7, 98.1]], ["C", [16.6, 97.9, 15.55, 97.5]], ["C", [15.05, 97.25, 14.65, 97.1]], ["C", [14.3, 96.95, 13.8, 96.75]], ["C", [10.3, 94.85, 8.2, 91.5]], ["C", [6.95, 89.4, 6.3, 86.4]], ["C", [5.7, 83.5, 5.55, 80.1]], ["C", [5.4, 76.8, 5.45, 73.25]], ["C", [5.5, 69.65, 5.5, 66.2]], ["L", [5.5, 52.6]], ["C", [5.5, 51.25, 5.45, 49.55]], ["C", [5.4, 47.8, 5.9, 46.95]], ["C", [6.2, 46.45, 7.15, 46.1]], ["C", [7.7, 46.1, 8, 46]], ["L", [15.55, 46]], ["C", [16.65, 46, 17.55, 46.1]], ["C", [18.45, 46.2, 18.85, 46.75]], ["C", [19.35, 47.4, 19.45, 48.45]], ["C", [19.55, 49.5, 19.55, 50.6]], ["L", [19.55, 72.5]], ["C", [19.55, 76.05, 19.8, 79.3]], ["C", [20.1, 82.5, 21.65, 84.6]], ["C", [23.05, 86.7, 26.1, 87.6]], ["C", [26.6, 87.7, 26.95, 87.7]], ["C", [27.3, 87.7, 27.85, 87.8]], ["C", [28.3, 87.9, 28.9, 87.9]], ["C", [29.5, 87.9, 29.85, 87.8]], ["C", [30.3, 87.6, 30.65, 87.7]], ["C", [31, 87.8, 31.4, 87.6]], ["C", [33.5, 87.1, 34.7, 86.25]], ["C", [36.5, 85.2, 37.55, 83.45]], ["C", [38.6, 81.7, 39.05, 79.55]], ["C", [39.5, 77.4, 39.6, 74.75]], ["C", [39.7, 72.1, 39.7, 69.2]], ["L", [39.7, 50.6]], ["C", [39.7, 49.7, 39.7, 48.7]], ["C", [39.7, 47.8, 40.1, 47.2]], ["C", [40.6, 46.3, 41.6, 46.15]], ["C", [42.6, 46, 44, 46]], ["L", [49.3, 46]], ["C", [50.3, 46, 51.2, 46]], ["C", [52.1, 46, 52.7, 46.4]], ["C", [53.5, 46.85, 53.6, 47.9]]]; __motifs["v"] = [["M", [50.35, 47.95]], ["C", [50.2, 48.9, 50, 49.5]], ["C", [49.5, 50.9, 49, 52.45]], ["C", [48.5, 54, 48, 55.4]], ["C", [47.7, 56.1, 47.55, 56.75]], ["C", [47.4, 57.4, 47.2, 58]], ["C", [46.7, 59.1, 46.35, 60.2]], ["C", [46, 61.3, 45.6, 62.4]], ["C", [45.5, 62.7, 45.45, 63.05]], ["C", [45.4, 63.4, 45.2, 63.7]], ["C", [44.6, 65.2, 44.15, 66.75]], ["C", [43.7, 68.3, 43.2, 69.8]], ["C", [42.1, 72.8, 41.1, 75.95]], ["C", [40.1, 79.1, 38.9, 82.1]], ["C", [38.4, 83.5, 38, 84.85]], ["C", [37.6, 86.2, 37.1, 87.6]], ["C", [36.9, 88.1, 36.8, 88.45]], ["C", [36.7, 88.8, 36.5, 89.3]], ["C", [36.1, 90.4, 35.75, 91.55]], ["C", [35.4, 92.7, 35, 93.8]], ["C", [34.5, 94.9, 34.1, 95.85]], ["C", [33.7, 96.8, 32.6, 97.2]], ["C", [31.8, 97.5, 30.9, 97.45]], ["C", [30, 97.4, 29.1, 97.4]], ["L", [22.6, 97.4]], ["C", [21.5, 97.4, 20.45, 97.4]], ["C", [19.4, 97.4, 18.6, 97]], ["C", [17.9, 96.5, 17.6, 95.75]], ["C", [17.3, 95, 17, 94.1]], ["C", [16.5, 92.9, 16.1, 91.6]], ["C", [15.7, 90.3, 15.2, 89.1]], ["C", [15, 88.7, 14.95, 88.35]], ["C", [14.9, 88, 14.7, 87.5]], ["C", [14.2, 86.3, 13.8, 85]], ["C", [13.4, 83.7, 12.9, 82.4]], ["C", [12.7, 81.9, 12.6, 81.45]], ["C", [12.5, 81, 12.3, 80.5]], ["C", [11.9, 79.6, 11.6, 78.65]], ["C", [11.3, 77.7, 11, 76.8]], ["C", [10.8, 76.5, 10.8, 76.15]], ["C", [10.8, 75.8, 10.6, 75.5]], ["C", [10.2, 74.6, 9.95, 73.7]], ["C", [9.7, 72.8, 9.3, 71.8]], ["C", [8.4, 69.5, 7.6, 67.05]], ["C", [6.8, 64.6, 6, 62.2]], ["C", [4.9, 59.5, 4.1, 56.75]], ["C", [3.3, 54, 2.3, 51.3]], ["L", [1.4, 48.6]], ["C", [1.3, 48.3, 1.25, 47.85]], ["C", [1.2, 47.4, 1.4, 47]], ["C", [1.7, 46.3, 2.8, 46]], ["C", [3.3, 46, 3.5, 45.9]], ["L", [10.8, 45.9]], ["C", [11.9, 45.9, 12.9, 45.95]], ["C", [13.9, 46, 14.6, 46.4]], ["C", [15.7, 47.1, 16.15, 48.95]], ["C", [16.6, 50.8, 17.1, 52.2]], ["C", [18.2, 55.5, 19.2, 58.95]], ["C", [20.2, 62.4, 21.3, 65.8]], ["C", [22.1, 68.2, 22.8, 70.7]], ["C", [23.5, 73.2, 24.4, 75.5]], ["C", [24.7, 76.4, 25.05, 77.4]], ["C", [25.4, 78.4, 26.5, 78.4]], ["C", [26.7, 78.2, 26.8, 78.15]], ["C", [26.9, 78.1, 27.1, 77.9]], ["C", [27.4, 77.4, 27.6, 76.9]], ["C", [27.8, 76.4, 28, 75.8]], ["C", [28.5, 74.7, 28.75, 73.5]], ["C", [29, 72.3, 29.4, 71.2]], ["C", [30.8, 67, 32.05, 62.75]], ["C", [33.3, 58.5, 34.7, 54.3]], ["C", [35.2, 53.1, 35.5, 51.85]], ["C", [35.8, 50.6, 36.2, 49.5]], ["C", [36.4, 48.7, 36.7, 47.9]], ["C", [37, 47.1, 37.6, 46.6]], ["C", [37.9, 46.4, 38.9, 46]], ["C", [39.5, 45.8, 40.2, 45.85]], ["C", [40.9, 45.9, 41.5, 45.9]], ["L", [46.4, 45.9]], ["C", [47.5, 45.9, 48.45, 45.95]], ["C", [49.4, 46, 49.9, 46.5]], ["C", [50.5, 47, 50.35, 47.95]]]; __motifs["w"] = [["M", [45.6, 45.9]], ["C", [46.6, 46, 47.3, 46.5]], ["C", [47.8, 46.9, 48, 47.6]], ["C", [48.2, 48.25, 48.4, 48.8]], ["C", [48.8, 50.25, 49.05, 51.55]], ["C", [49.3, 52.9, 49.8, 54.35]], ["C", [51, 58.25, 51.85, 62.35]], ["C", [52.7, 66.45, 53.8, 70.3]], ["C", [54.2, 71.5, 54.45, 72.8]], ["C", [54.7, 74, 55.1, 75.15]], ["C", [55.5, 76.5, 55.9, 77.25]], ["C", [56, 77.35, 56.15, 77.4]], ["C", [56.3, 77.45, 56.4, 77.65]], ["C", [57.3, 77.55, 57.55, 77]], ["C", [57.8, 76.4, 58.1, 75.7]], ["C", [58.7, 74.1, 59.1, 72.35]], ["C", [59.5, 70.65, 60, 68.95]], ["C", [60.3, 67.9, 60.5, 67]], ["C", [60.7, 66, 61, 65.05]], ["C", [62.1, 61.9, 62.8, 58.75]], ["C", [63.5, 55.5, 64.5, 52.55]], ["C", [65, 51.1, 65.4, 49.15]], ["C", [65.8, 47.2, 66.7, 46.5]], ["C", [67.4, 46, 68.3, 45.9]], ["C", [69.2, 45.8, 70.3, 45.8]], ["L", [75.6, 45.8]], ["C", [76.4, 45.8, 77.3, 45.8]], ["C", [78.2, 45.8, 78.8, 46]], ["C", [79.8, 46.4, 79.9, 47.3]], ["C", [80, 48.2, 79.6, 49.3]], ["C", [78.9, 51.6, 78.25, 53.75]], ["C", [77.6, 55.9, 76.8, 58.2]], ["C", [74.4, 65.45, 72.15, 72.85]], ["C", [69.9, 80.15, 67.5, 87.5]], ["C", [67, 89.1, 66.55, 90.6]], ["C", [66.1, 92.2, 65.6, 93.8]], ["C", [65.2, 94.85, 64.85, 95.75]], ["C", [64.5, 96.55, 63.5, 96.95]], ["C", [62.5, 97.5, 60.9, 97.4]], ["C", [59.3, 97.3, 58, 97.3]], ["C", [56.4, 97.3, 54, 97.35]], ["C", [51.6, 97.4, 50.6, 96.85]], ["C", [50, 96.4, 49.7, 95.75]], ["C", [49.4, 95.1, 49.2, 94.3]], ["C", [48.7, 92.9, 48.45, 91.55]], ["C", [48.2, 90.2, 47.8, 88.8]], ["C", [47.5, 87.9, 47.3, 86.95]], ["C", [47.1, 86, 46.7, 85]], ["C", [45.8, 82.05, 45.15, 79]], ["C", [44.5, 75.85, 43.5, 72.9]], ["C", [42.9, 71.1, 42.5, 69.1]], ["C", [42.1, 67.1, 40.9, 65.9]], ["C", [39.9, 65.9, 39.65, 66.65]], ["C", [39.4, 67.35, 39.1, 68.2]], ["C", [38.4, 70.2, 38.05, 72.2]], ["C", [37.7, 74.2, 37, 76.2]], ["C", [35.9, 79.8, 35.15, 83.55]], ["C", [34.4, 87.3, 33.3, 90.9]], ["C", [33.1, 91.6, 32.9, 92.45]], ["C", [32.7, 93.4, 32.5, 94.2]], ["C", [32.3, 95, 31.95, 95.7]], ["C", [31.6, 96.4, 31.1, 96.75]], ["C", [30.6, 97.2, 29.7, 97.25]], ["C", [28.8, 97.3, 27.7, 97.3]], ["L", [19.5, 97.3]], ["C", [18.9, 97.2, 18.4, 97.1]], ["C", [17.9, 96.95, 17.5, 96.75]], ["C", [16.8, 96.3, 16.5, 95.4]], ["C", [16.2, 94.45, 15.9, 93.6]], ["C", [15.4, 92.1, 14.9, 90.45]], ["C", [14.4, 88.9, 13.9, 87.3]], ["C", [11.4, 79.85, 9.15, 72.5]], ["C", [6.9, 65.1, 4.5, 57.7]], ["C", [3.8, 55.7, 3.2, 53.8]], ["C", [2.6, 51.9, 2, 50]], ["C", [1.8, 49.4, 1.55, 48.35]], ["C", [1.3, 47.3, 1.7, 46.65]], ["C", [2, 46.3, 3, 45.9]], ["C", [3.6, 45.9, 3.8, 45.8]], ["L", [11.2, 45.8]], ["C", [12.3, 45.8, 13.3, 45.85]], ["C", [14.3, 45.9, 14.9, 46.3]], ["C", [15.5, 46.65, 15.85, 47.35]], ["C", [16.2, 48, 16.4, 48.8]], ["C", [16.6, 49.7, 16.8, 50.55]], ["C", [17, 51.35, 17.2, 52.1]], ["C", [18.4, 55.55, 19.25, 59.25]], ["C", [20.1, 63, 21.2, 66.6]], ["C", [21.4, 67.2, 21.5, 67.7]], ["C", [21.6, 68.3, 21.8, 68.9]], ["C", [22.3, 70.4, 22.65, 71.9]], ["C", [23, 73.5, 23.5, 75]], ["C", [23.7, 75.65, 24, 76.6]], ["C", [24.3, 77.5, 25.1, 77.7]], ["C", [25.6, 77.75, 25.9, 77.15]], ["C", [26.2, 76.5, 26.4, 76.15]], ["C", [26.9, 74.8, 27.15, 73.3]], ["C", [27.4, 71.75, 27.9, 70.4]], ["C", [28.2, 69.45, 28.4, 68.55]], ["C", [28.6, 67.55, 28.8, 66.7]], ["C", [29.5, 64.3, 30.05, 61.75]], ["C", [30.6, 59.25, 31.3, 56.9]], ["C", [31.6, 55.8, 31.8, 54.8]], ["C", [32, 53.8, 32.3, 52.75]], ["C", [32.7, 51.25, 33.1, 49.15]], ["C", [33.5, 47.05, 34.6, 46.3]], ["C", [35.3, 45.9, 36.2, 45.85]], ["C", [37.1, 45.8, 38.2, 45.8]], ["L", [43.4, 45.8]], ["C", [44.6, 45.8, 45.6, 45.9]]]; __motifs["x"] = [["M", [49.4, 48.7]], ["C", [48.9, 49.7, 48.2, 50.55]], ["C", [47.5, 51.4, 46.9, 52.4]], ["C", [44.6, 55.6, 42.4, 58.8]], ["C", [40.2, 62, 37.9, 65.2]], ["C", [37.3, 66, 36.7, 66.8]], ["C", [36.1, 67.6, 35.6, 68.6]], ["C", [35.4, 68.9, 35.25, 69.4]], ["C", [35.1, 69.9, 35.2, 70.4]], ["C", [35.5, 71.5, 36.05, 72.25]], ["C", [36.6, 73, 37.1, 73.8]], ["C", [37.7, 74.6, 38.3, 75.45]], ["C", [38.9, 76.3, 39.4, 77.1]], ["C", [41.6, 80.2, 43.7, 83.3]], ["C", [45.8, 86.4, 48, 89.6]], ["C", [48.8, 90.8, 49.7, 92]], ["C", [50.6, 93.2, 51.4, 94.5]], ["C", [51.6, 94.8, 51.9, 95.35]], ["C", [52.2, 95.9, 51.9, 96.5]], ["C", [51.7, 97.2, 50.8, 97.3]], ["C", [49.9, 97.4, 48.9, 97.4]], ["L", [39.7, 97.4]], ["C", [39.2, 97.3, 38.7, 97.25]], ["C", [38.2, 97.2, 37.7, 97]], ["C", [36.6, 96.2, 35.9, 95]], ["C", [35.2, 93.8, 34.4, 92.7]], ["C", [33.3, 91.2, 32.3, 89.65]], ["C", [31.3, 88.1, 30.3, 86.6]], ["C", [29.7, 85.7, 28.85, 84.35]], ["C", [28, 83, 26.9, 82.7]], ["C", [26.2, 82.5, 25.7, 82.95]], ["C", [25.2, 83.4, 25, 83.8]], ["C", [24.2, 84.9, 23.45, 86.05]], ["C", [22.7, 87.2, 21.9, 88.4]], ["L", [18, 94.1]], ["C", [17.5, 94.9, 16.95, 95.7]], ["C", [16.4, 96.5, 15.5, 97]], ["C", [14.4, 97.5, 12.35, 97.45]], ["C", [10.3, 97.4, 8.7, 97.4]], ["L", [5.4, 97.4]], ["C", [5, 97.4, 4.55, 97.45]], ["C", [4.1, 97.5, 3.8, 97.4]], ["C", [3.4, 97.3, 3.05, 97.35]], ["C", [2.7, 97.4, 2.4, 97.2]], ["C", [2.1, 97, 1.95, 96.85]], ["C", [1.8, 96.7, 1.6, 96.5]], ["C", [1.5, 95.5, 1.9, 94.85]], ["C", [2.3, 94.2, 2.7, 93.6]], ["C", [3.5, 92.5, 4.25, 91.4]], ["C", [5, 90.3, 5.8, 89.2]], ["C", [7.8, 86.3, 9.8, 83.3]], ["C", [11.8, 80.3, 13.8, 77.3]], ["C", [14.5, 76.4, 15.1, 75.5]], ["C", [15.7, 74.6, 16.3, 73.7]], ["C", [16.8, 73, 17.25, 72.3]], ["C", [17.7, 71.6, 17.9, 70.6]], ["C", [18.1, 70.1, 17.9, 69.7]], ["C", [17.7, 69.3, 17.6, 69.1]], ["C", [17.1, 68, 16.45, 67.15]], ["C", [15.8, 66.3, 15.2, 65.4]], ["C", [12.9, 61.9, 10.55, 58.65]], ["C", [8.2, 55.4, 5.9, 51.9]], ["C", [5.4, 51.1, 4.8, 50.3]], ["C", [4.2, 49.5, 3.7, 48.6]], ["C", [3.5, 48.3, 3.25, 47.9]], ["C", [3, 47.5, 3.2, 47]], ["C", [3.4, 46.5, 3.7, 46.35]], ["C", [4, 46.2, 4.5, 46]], ["C", [5.1, 46, 5.3, 45.9]], ["L", [13.3, 45.9]], ["C", [14.7, 45.9, 15.95, 46]], ["C", [17.2, 46.1, 18, 46.7]], ["C", [18.7, 47.2, 19.25, 48.05]], ["C", [19.8, 48.9, 20.3, 49.7]], ["C", [21.1, 51, 22, 52.25]], ["C", [22.9, 53.5, 23.8, 54.8]], ["C", [24.3, 55.6, 24.95, 56.6]], ["C", [25.6, 57.6, 26.6, 57.9]], ["C", [27, 58, 27.35, 57.85]], ["C", [27.7, 57.7, 27.9, 57.5]], ["C", [28.6, 57, 29, 56.3]], ["C", [29.4, 55.6, 29.9, 54.9]], ["C", [30.7, 53.6, 31.6, 52.35]], ["C", [32.5, 51.1, 33.4, 49.8]], ["C", [34.2, 48.4, 34.95, 47.4]], ["C", [35.7, 46.4, 37.5, 46]], ["C", [38.2, 45.8, 39, 45.85]], ["C", [39.8, 45.9, 40.6, 45.9]], ["L", [46.8, 45.9]], ["C", [47.8, 45.9, 48.75, 46.05]], ["C", [49.7, 46.2, 49.9, 47]], ["C", [50.1, 47.5, 49.85, 47.95]], ["C", [49.6, 48.4, 49.4, 48.7]]]; __motifs["y"] = [["M", [51.4, 48.2]], ["C", [51.2, 48.95, 50.9, 49.8]], ["C", [50.6, 50.6, 50.3, 51.35]], ["C", [48.9, 54.85, 47.6, 58.55]], ["C", [46.3, 62.2, 44.9, 65.65]], ["C", [44.3, 67.2, 43.8, 68.75]], ["C", [43.3, 70.3, 42.7, 71.75]], ["C", [42.2, 73.2, 41.7, 74.5]], ["C", [41.2, 75.75, 40.7, 77.2]], ["C", [38.7, 82.15, 36.95, 87.25]], ["C", [35.2, 92.3, 33.2, 97.15]], ["C", [32.9, 97.9, 32.75, 98.5]], ["C", [32.6, 99.05, 32.3, 99.7]], ["C", [31.5, 101.6, 30.8, 103.35]], ["C", [30.1, 105.15, 29.3, 106.85]], ["C", [28.5, 108.5, 27.4, 109.9]], ["C", [26.3, 111.25, 24.7, 112.4]], ["C", [23.4, 113.25, 21.85, 113.85]], ["C", [20.3, 114.4, 18.5, 114.9]], ["C", [17.7, 115.15, 16.9, 115.15]], ["C", [16.1, 115.15, 15.3, 115.3]], ["L", [12.7, 115.3]], ["C", [11.9, 115.3, 10.8, 115.3]], ["C", [9.7, 115.3, 8.65, 115.2]], ["C", [7.6, 115.15, 6.75, 115]], ["C", [5.9, 114.85, 5.5, 114.55]], ["C", [5, 114.1, 4.85, 113.55]], ["C", [4.7, 113.05, 4.5, 112.2]], ["L", [4.5, 109.8]], ["C", [4.5, 108.1, 4.5, 106.25]], ["C", [4.5, 104.35, 5.7, 103.8]], ["C", [6.2, 103.6, 7.05, 103.55]], ["C", [7.9, 103.5, 8.5, 103.7]], ["L", [12.2, 103.7]], ["C", [12.6, 103.6, 13, 103.6]], ["C", [13.4, 103.6, 13.8, 103.4]], ["C", [16.9, 102.55, 17.8, 99.3]], ["C", [18, 98.9, 18.2, 98.15]], ["C", [18.4, 97.3, 18.2, 96.7]], ["C", [18, 96.25, 18, 95.7]], ["C", [18, 95.2, 17.8, 94.7]], ["C", [17.2, 92.7, 16.5, 90.75]], ["C", [15.8, 88.8, 15, 86.9]], ["C", [14.2, 85, 13.55, 83.1]], ["C", [12.9, 81.2, 12.1, 79.3]], ["C", [11.6, 78.1, 11.25, 76.9]], ["C", [10.9, 75.7, 10.4, 74.5]], ["C", [8.8, 70.7, 7.45, 66.7]], ["C", [6.1, 62.7, 4.5, 58.9]], ["C", [4.3, 58.5, 4.3, 58.25]], ["C", [4.3, 58, 4.1, 57.7]], ["C", [3.3, 55.9, 2.75, 54.05]], ["C", [2.2, 52.2, 1.4, 50.5]], ["C", [1.2, 49.9, 0.75, 48.7]], ["C", [0.3, 47.6, 0.6, 46.75]], ["C", [0.9, 46, 1.9, 45.8]], ["C", [2.1, 45.7, 2.25, 45.75]], ["C", [2.4, 45.8, 2.6, 45.7]], ["L", [10.2, 45.7]], ["C", [11.2, 45.7, 12.2, 45.7]], ["C", [13.2, 45.7, 13.9, 46.1]], ["C", [15.1, 46.85, 15.55, 48.55]], ["C", [16, 50.3, 16.5, 51.7]], ["C", [17, 52.85, 17.35, 54.2]], ["C", [17.7, 55.45, 18.2, 56.7]], ["C", [19, 58.95, 19.7, 61.2]], ["C", [20.4, 63.45, 21.2, 65.65]], ["L", [23.3, 71.95]], ["C", [23.6, 72.9, 23.85, 73.8]], ["C", [24.1, 74.8, 24.5, 75.65]], ["C", [24.8, 76.5, 25.15, 77.5]], ["C", [25.5, 78.45, 26.6, 78.35]], ["C", [26.8, 78.15, 26.95, 78.1]], ["C", [27.1, 78.05, 27.3, 77.85]], ["C", [27.6, 77.4, 27.8, 76.9]], ["C", [28, 76.35, 28.2, 75.85]], ["C", [28.7, 74.8, 29, 73.55]], ["C", [29.3, 72.25, 29.7, 71.1]], ["C", [31.1, 66.9, 32.4, 62.8]], ["C", [33.7, 58.7, 35.1, 54.5]], ["C", [35.6, 53.05, 35.95, 51.75]], ["C", [36.3, 50.4, 36.8, 49.05]], ["C", [37.1, 48.3, 37.35, 47.55]], ["C", [37.6, 46.75, 38.3, 46.3]], ["C", [38.9, 45.8, 39.8, 45.75]], ["C", [40.7, 45.7, 41.8, 45.7]], ["L", [47.9, 45.7]], ["C", [48.9, 45.7, 49.8, 45.8]], ["C", [50.7, 45.9, 51.2, 46.4]], ["C", [51.8, 47.05, 51.4, 48.2]]]; __motifs["z"] = [["M", [47.6, 49.4]], ["C", [47.8, 49.9, 47.75, 50.55]], ["C", [47.7, 51.2, 47.7, 51.7]], ["C", [47.7, 52.95, 47.7, 54.3]], ["C", [47.7, 55.6, 47.3, 56.5]], ["C", [46.9, 57.3, 46.4, 57.85]], ["C", [45.9, 58.4, 45.4, 58.95]], ["C", [44.8, 59.8, 44.1, 60.55]], ["C", [43.4, 61.3, 42.8, 62.1]], ["C", [42.6, 62.3, 42.4, 62.45]], ["C", [42.2, 62.6, 42, 62.8]], ["C", [41.5, 63.5, 40.85, 64.1]], ["C", [40.2, 64.7, 39.7, 65.4]], ["C", [38.1, 67.5, 36.3, 69.3]], ["C", [34.5, 71.1, 32.9, 73.2]], ["L", [32.1, 74]], ["C", [31.6, 74.7, 30.95, 75.3]], ["C", [30.3, 75.9, 29.8, 76.6]], ["C", [29.3, 77.3, 28.65, 77.9]], ["C", [28, 78.5, 27.5, 79.1]], ["C", [27, 79.7, 26.55, 80.2]], ["C", [26.1, 80.7, 25.6, 81.3]], ["C", [25.2, 81.85, 24.8, 82.25]], ["C", [24.4, 82.7, 24, 83.2]], ["C", [23.6, 83.6, 23.3, 84]], ["C", [23, 84.4, 22.8, 84.9]], ["C", [22.7, 85.1, 22.65, 85.4]], ["C", [22.6, 85.7, 22.8, 85.95]], ["C", [23, 86.5, 23.5, 86.55]], ["C", [24, 86.6, 24.6, 86.8]], ["C", [25.6, 87, 26.85, 86.95]], ["C", [28.1, 86.9, 29.2, 86.9]], ["L", [43.9, 86.9]], ["C", [45.7, 86.9, 47.3, 87]], ["C", [48.9, 87.1, 49.4, 88.5]], ["C", [49.6, 89, 49.6, 89.6]], ["C", [49.6, 90.2, 49.6, 90.9]], ["C", [49.6, 92.4, 49.6, 94.35]], ["C", [49.6, 96.2, 48.7, 96.9]], ["C", [48.1, 97.4, 47.2, 97.4]], ["C", [46.3, 97.4, 45.2, 97.4]], ["L", [6.7, 97.4]], ["C", [5.6, 97.4, 4.65, 97.4]], ["C", [3.7, 97.4, 3, 96.9]], ["C", [2.4, 96.45, 2.3, 95.3]], ["C", [2.2, 94.2, 2.2, 93.1]], ["C", [2.2, 91.7, 2.15, 90.05]], ["C", [2.1, 88.4, 2.5, 87.3]], ["C", [2.7, 86.7, 3, 86.15]], ["C", [3.3, 85.6, 3.7, 85.1]], ["C", [4.5, 84.2, 5.3, 83.35]], ["C", [6.1, 82.5, 6.9, 81.5]], ["C", [7.4, 81, 7.7, 80.8]], ["C", [9.1, 78.9, 10.7, 77.3]], ["C", [12.3, 75.65, 13.7, 73.9]], ["C", [14.1, 73.4, 14.5, 73]], ["C", [14.9, 72.6, 15.2, 72.1]], ["C", [15.7, 71.4, 16.35, 70.85]], ["C", [17, 70.3, 17.5, 69.45]], ["C", [17.7, 69.3, 17.9, 69.15]], ["C", [18.1, 69, 18.3, 68.8]], ["C", [18.8, 68, 19.45, 67.35]], ["C", [20.1, 66.8, 20.6, 66.1]], ["C", [20.8, 65.8, 21.15, 65.45]], ["C", [21.5, 65.2, 21.8, 64.9]], ["C", [22.6, 63.8, 23.5, 62.9]], ["C", [24.4, 62, 25.2, 61]], ["C", [25.7, 60.3, 26.35, 59.7]], ["C", [27, 59.05, 27.2, 58.2]], ["C", [27.4, 57.6, 27.05, 57.25]], ["C", [26.7, 56.95, 26.4, 56.8]], ["C", [25.3, 56.3, 23.75, 56.35]], ["C", [22.2, 56.4, 20.8, 56.4]], ["L", [10, 56.4]], ["C", [8.8, 56.4, 7.45, 56.45]], ["C", [6.1, 56.5, 5.3, 56]], ["C", [4.4, 55.5, 4.3, 54.1]], ["C", [4.2, 52.7, 4.2, 51.3]], ["C", [4.2, 50.75, 4.15, 50.2]], ["C", [4.1, 49.6, 4.2, 49.1]], ["L", [4.2, 48.3]], ["C", [4.3, 48, 4.35, 47.6]], ["C", [4.4, 47.2, 4.6, 47]], ["C", [5.2, 46.2, 5.9, 46.1]], ["C", [6.1, 46, 6.4, 46.05]], ["C", [6.7, 46.1, 6.9, 45.9]], ["L", [43.4, 45.9]], ["C", [44.3, 45.9, 45.2, 45.95]], ["C", [46.1, 46, 46.6, 46.4]], ["C", [47.2, 46.75, 47.6, 47.9]], ["L", [47.6, 49.4]]]; __motifs["1"] = [["M", [7.5, 47.4]], ["C", [7.5, 46.1, 7.5, 44.7]], ["C", [7.5, 43.3, 8, 42.5]], ["C", [8.5, 41.8, 9.4, 41.7]], ["C", [10.4, 41.6, 11.4, 41.4]], ["L", [12.4, 41.4]], ["C", [13, 41.2, 13.65, 41.15]], ["C", [14.3, 41.1, 14.9, 41]], ["C", [16.1, 40.6, 17.15, 40.3]], ["C", [18.2, 40, 19.3, 39.5]], ["C", [21.6, 38.5, 23.25, 36.9]], ["C", [24.9, 35.3, 26.1, 33.3]], ["C", [26.7, 32.2, 27.2, 30.55]], ["C", [27.7, 28.9, 28.6, 28.3]], ["C", [29.1, 27.9, 29.7, 27.8]], ["C", [29.9, 27.7, 30.2, 27.75]], ["C", [30.4, 27.8, 30.6, 27.7]], ["L", [34.4, 27.7]], ["C", [34.9, 27.7, 35.4, 27.65]], ["C", [35.9, 27.6, 36.45, 27.8]], ["L", [36.9, 27.8]], ["C", [37.4, 27.9, 37.85, 28.05]], ["C", [38.35, 28.2, 38.55, 28.5]], ["C", [39, 29.2, 39.05, 30.35]], ["C", [39.1, 31.5, 39.1, 32.8]], ["L", [39.1, 91.3]], ["C", [39.1, 92.6, 39.15, 94.15]], ["C", [39.2, 95.7, 38.7, 96.5]], ["C", [38.35, 97, 37.75, 97.15]], ["C", [37.2, 97.3, 36.45, 97.5]], ["L", [29.9, 97.5]], ["C", [29.4, 97.5, 28.85, 97.55]], ["C", [28.3, 97.6, 27.8, 97.5]], ["L", [27.3, 97.5]], ["C", [26.8, 97.3, 26.35, 97.15]], ["C", [25.9, 97, 25.6, 96.6]], ["C", [25.1, 96, 25.1, 95]], ["C", [25.1, 94, 25.1, 92.9]], ["L", [25.1, 57.7]], ["C", [25.1, 56.9, 25.15, 55.85]], ["C", [25.2, 54.8, 25, 54.1]], ["C", [24.5, 52.4, 23.1, 52.25]], ["C", [21.7, 52.1, 19.7, 52.1]], ["L", [12.5, 52.1]], ["C", [11.1, 52.1, 9.8, 52]], ["C", [8.5, 51.9, 7.9, 51.1]], ["C", [7.7, 50.7, 7.7, 50.35]], ["C", [7.7, 50, 7.6, 49.5]], ["C", [7.4, 49, 7.45, 48.45]], ["C", [7.5, 47.9, 7.5, 47.4]]]; __motifs["2"] = [["M", [52.95, 48.1]], ["C", [53, 50.3, 52.7, 52.4]], ["C", [52.4, 54.5, 51.7, 56.1]], ["C", [50.7, 58.7, 49.1, 61.05]], ["C", [47.1, 64, 44.5, 66.1]], ["C", [41.9, 68.2, 39.1, 70.2]], ["C", [38.3, 70.7, 37.45, 71.3]], ["C", [36.6, 71.9, 35.8, 72.4]], ["C", [33.6, 73.75, 31.55, 75.2]], ["C", [29.5, 76.6, 27.5, 78.1]], ["C", [26.8, 78.6, 26.25, 79.1]], ["C", [25.7, 79.6, 25.1, 80.1]], ["C", [25, 80.2, 24.95, 80.3]], ["C", [24.9, 80.4, 24.7, 80.5]], ["C", [24.1, 81, 23.45, 81.65]], ["C", [22.8, 82.3, 22.4, 83.1]], ["C", [22.3, 83.3, 22.15, 83.55]], ["C", [22, 83.8, 22.1, 84.3]], ["C", [22.3, 84.8, 22.8, 85]], ["C", [23.3, 85.2, 23.8, 85.3]], ["L", [24.3, 85.3]], ["C", [24.8, 85.5, 25.45, 85.45]], ["C", [26.1, 85.4, 26.6, 85.4]], ["L", [46.3, 85.4]], ["C", [47.7, 85.4, 49.7, 85.35]], ["C", [51.7, 85.3, 52.5, 85.9]], ["C", [53, 86.25, 53.2, 87.1]], ["C", [53.4, 87.9, 53.45, 88.95]], ["C", [53.5, 90, 53.45, 91.05]], ["C", [53.4, 92.1, 53.4, 93]], ["C", [53.4, 93.6, 53.45, 94.3]], ["C", [53.5, 95, 53.3, 95.5]], ["C", [53.2, 96.5, 52.3, 97]], ["C", [51.7, 97.4, 50.75, 97.4]], ["C", [49.8, 97.4, 48.9, 97.4]], ["L", [7.4, 97.4]], ["C", [6.5, 97.4, 5.45, 97.45]], ["C", [4.4, 97.5, 3.7, 97.2]], ["C", [2.7, 96.7, 2.45, 95.6]], ["C", [2.2, 94.5, 2.5, 93.2]], ["C", [2.5, 92.9, 2.55, 92.55]], ["C", [2.6, 92.2, 2.6, 91.9]], ["C", [2.8, 91.1, 3, 90.2]], ["C", [3.2, 89.3, 3.4, 88.5]], ["C", [4.9, 84.05, 7.2, 80.8]], ["C", [9.7, 77.3, 13.1, 74.55]], ["C", [16.5, 71.8, 20, 69.2]], ["C", [22.8, 67.3, 25.55, 65.4]], ["C", [28.3, 63.6, 31.1, 61.6]], ["C", [31.8, 61.05, 32.35, 60.6]], ["C", [32.9, 60.1, 33.5, 59.6]], ["C", [34.9, 58.5, 36.1, 56.9]], ["C", [37.3, 55.4, 38, 53.7]], ["C", [38.2, 53.2, 38.3, 52.7]], ["C", [38.4, 52.3, 38.6, 51.8]], ["C", [38.8, 51, 38.9, 49.6]], ["C", [39, 48.2, 38.8, 47.2]], ["C", [38.7, 46.65, 38.6, 46.1]], ["C", [38.5, 45.5, 38.3, 45]], ["C", [36.9, 41.4, 34, 39.7]], ["C", [33.4, 39.3, 32.7, 39.05]], ["C", [32, 38.8, 31.2, 38.6]], ["C", [30.7, 38.35, 30.15, 38.45]], ["C", [29.6, 38.5, 29, 38.25]], ["C", [28.3, 38.1, 27.4, 38.2]], ["C", [26.5, 38.35, 25.9, 38.6]], ["C", [22, 39.8, 20.1, 42.9]], ["C", [19.2, 44.3, 18.7, 45.85]], ["C", [18.2, 47.4, 17.7, 49.2]], ["C", [17.4, 50.5, 17.35, 51.85]], ["C", [17.3, 53.2, 16.2, 53.9]], ["C", [15.7, 54.2, 14.85, 54.25]], ["C", [14, 54.3, 13.1, 54.3]], ["L", [8, 54.3]], ["C", [6.9, 54.3, 6.05, 54.25]], ["C", [5.2, 54.2, 4.6, 53.7]], ["C", [4.1, 53.4, 3.9, 52.6]], ["C", [3.7, 51.8, 3.9, 51.1]], ["L", [3.9, 50.2]], ["C", [4, 49.6, 4.05, 48.95]], ["C", [4.1, 48.3, 4.2, 47.7]], ["C", [4.5, 46.4, 4.7, 45.15]], ["C", [4.9, 43.9, 5.4, 42.8]], ["C", [5.7, 41.9, 6, 41.1]], ["C", [6.3, 40.25, 6.6, 39.5]], ["C", [6.9, 38.9, 7.3, 38.2]], ["C", [7.7, 37.6, 8.1, 37]], ["C", [10.1, 33.7, 12.85, 31.55]], ["C", [15.6, 29.4, 19.4, 27.75]], ["C", [20.8, 27.3, 22.2, 27.05]], ["C", [23.6, 26.8, 25.1, 26.4]], ["C", [25.6, 26.4, 26.1, 26.35]], ["C", [26.6, 26.3, 27.1, 26.2]], ["C", [27.3, 26.2, 27.65, 26.25]], ["C", [28, 26.3, 28.2, 26.2]], ["C", [36.2, 26, 41.65, 29.1]], ["C", [47.1, 32.2, 50.1, 37]], ["C", [50.6, 37.8, 50.9, 38.6]], ["C", [51.2, 39.4, 51.6, 40.2]], ["C", [52.2, 41.8, 52.55, 43.85]], ["C", [52.9, 45.9, 52.95, 48.1]]]; __motifs["3"] = [["M", [51, 45]], ["C", [51.1, 47.7, 50.6, 49.7]], ["C", [49.8, 52.6, 48.5, 54.6]], ["C", [48.2, 54.95, 47.9, 55.25]], ["C", [47.6, 55.6, 47.3, 55.9]], ["C", [46.9, 56.5, 46.7, 56.7]], ["C", [45.2, 57.7, 44.2, 58.7]], ["C", [44, 58.9, 43.8, 59.1]], ["C", [43.6, 59.35, 43.7, 59.8]], ["C", [43.7, 60.3, 44.5, 60.9]], ["C", [45.2, 61.35, 45.9, 61.8]], ["C", [46.6, 62.2, 47.4, 62.7]], ["C", [50.8, 65.2, 52.5, 69.45]], ["C", [52.9, 70.4, 53.1, 71.45]], ["C", [53.3, 72.5, 53.5, 73.55]], ["C", [53.7, 74.05, 53.55, 74.7]], ["C", [53.4, 75.3, 53.6, 75.85]], ["C", [53.7, 76.25, 53.65, 77]], ["C", [53.6, 77.7, 53.5, 78.05]], ["C", [53.5, 79, 53.4, 79.4]], ["C", [53.2, 80.15, 53.05, 81]], ["C", [52.9, 81.8, 52.7, 82.55]], ["C", [50.8, 88.25, 47.35, 91.5]], ["C", [43.9, 94.65, 38.5, 96.85]], ["C", [37.4, 97.25, 36.3, 97.55]], ["C", [35.2, 97.8, 34, 98.1]], ["C", [33.5, 98.3, 32.95, 98.3]], ["C", [32.4, 98.3, 31.9, 98.5]], ["C", [31.1, 98.5, 30.35, 98.55]], ["C", [29.6, 98.55, 28.8, 98.65]], ["C", [28.4, 98.75, 27.65, 98.7]], ["C", [26.9, 98.65, 26.5, 98.55]], ["L", [24.8, 98.55]], ["C", [24.5, 98.5, 24.1, 98.55]], ["C", [23.7, 98.55, 23.4, 98.5]], ["C", [22.6, 98.3, 21.8, 98.2]], ["C", [21, 98.1, 20.3, 97.9]], ["C", [19.9, 97.7, 19.55, 97.7]], ["C", [19.2, 97.7, 18.9, 97.6]], ["C", [17.8, 97.25, 16.85, 96.9]], ["C", [15.9, 96.55, 15, 96.2]], ["C", [11.2, 94.45, 8.4, 91.65]], ["C", [5.6, 88.75, 3.9, 85]], ["C", [3.4, 83.9, 3.1, 82.65]], ["C", [2.8, 81.5, 2.4, 80.15]], ["C", [2.2, 79.7, 2.25, 79.15]], ["C", [2.3, 78.55, 2.1, 78.05]], ["C", [1.9, 77.4, 1.9, 76.4]], ["C", [1.9, 75.5, 2.1, 74.8]], ["C", [2.7, 73.5, 4.8, 73.45]], ["C", [6.9, 73.4, 8.8, 73.4]], ["C", [9.5, 73.4, 10.3, 73.35]], ["C", [11.1, 73.3, 11.7, 73.5]], ["L", [12.8, 73.5]], ["C", [13.9, 73.65, 14.3, 73.95]], ["C", [15.1, 74.45, 15.25, 75.55]], ["C", [15.4, 76.55, 15.8, 77.7]], ["C", [16.3, 79.1, 16.7, 80.2]], ["C", [17.1, 81.4, 17.9, 82.45]], ["C", [19.7, 85.2, 23.4, 86.55]], ["C", [24, 86.75, 24.6, 86.8]], ["C", [25.2, 86.85, 25.8, 87.1]], ["L", [26.3, 87.1]], ["C", [27.3, 87.3, 28.5, 87.2]], ["C", [29.7, 87.1, 30.5, 86.75]], ["C", [31.5, 86.55, 32.2, 86.35]], ["C", [34.2, 85.6, 35.7, 84.2]], ["C", [37.2, 82.9, 38, 80.9]], ["C", [38.3, 80.25, 38.45, 79.6]], ["C", [38.6, 78.9, 38.8, 78.05]], ["C", [39, 77.6, 39.05, 76.45]], ["C", [39.1, 75.4, 38.9, 74.8]], ["C", [38.9, 74.6, 38.85, 74.35]], ["C", [38.8, 74.15, 38.8, 73.95]], ["C", [38.7, 73.5, 38.6, 72.95]], ["C", [38.5, 72.35, 38.3, 71.85]], ["C", [37.3, 69.55, 35.65, 68.35]], ["C", [34, 67.1, 31.4, 66.3]], ["C", [30.7, 66.1, 29.95, 66.1]], ["C", [29.2, 66.1, 28.4, 65.85]], ["C", [28.1, 65.75, 27.75, 65.75]], ["C", [27.4, 65.75, 27.2, 65.75]], ["L", [26.3, 65.75]], ["C", [26, 65.65, 25.65, 65.7]], ["C", [25.3, 65.75, 25.1, 65.65]], ["C", [24.3, 65.45, 23.8, 65.2]], ["C", [23.3, 64.9, 23.1, 64.3]], ["C", [22.9, 63.75, 22.85, 63.1]], ["C", [22.8, 62.4, 22.8, 61.55]], ["C", [22.8, 60.3, 22.85, 58.9]], ["C", [22.9, 57.45, 23.4, 56.7]], ["C", [23.7, 56.3, 24.55, 56.1]], ["C", [25.4, 55.9, 26.4, 55.8]], ["C", [27.4, 55.7, 28.35, 55.65]], ["C", [29.3, 55.6, 29.9, 55.35]], ["C", [32.7, 54.6, 34.45, 53.45]], ["C", [36.2, 52.3, 37.2, 49.7]], ["C", [37.4, 49.05, 37.6, 47.9]], ["C", [37.8, 46.65, 37.6, 45.7]], ["C", [37.4, 44.85, 37.2, 44.05]], ["C", [37, 43.2, 36.5, 42.45]], ["C", [34.7, 39.4, 31, 38.15]], ["C", [30.5, 38, 30.05, 38]], ["C", [29.6, 38, 29.1, 37.8]], ["C", [28.3, 37.6, 27.15, 37.7]], ["C", [26, 37.8, 25.3, 38]], ["C", [24.8, 38.15, 24.45, 38.2]], ["C", [24.1, 38.25, 23.6, 38.45]], ["C", [20.6, 39.7, 18.9, 42.3]], ["C", [18.3, 43.2, 17.95, 44.2]], ["C", [17.6, 45.2, 17.3, 46.3]], ["C", [17, 47.4, 16.8, 48.35]], ["C", [16.6, 49.3, 15.8, 49.8]], ["C", [15.5, 50, 14.5, 50.2]], ["L", [13.4, 50.2]], ["C", [12.9, 50.3, 12.2, 50.25]], ["C", [11.5, 50.2, 10.9, 50.2]], ["C", [9.3, 50.2, 7.35, 50.3]], ["C", [5.4, 50.4, 4.4, 49.6]], ["C", [4, 49.3, 3.8, 48.45]], ["C", [3.6, 47.6, 3.8, 46.75]], ["C", [4, 46.3, 4, 45.8]], ["C", [4, 45.3, 4.2, 44.75]], ["C", [4.5, 43.6, 4.8, 42.4]], ["C", [5.1, 41.3, 5.6, 40.2]], ["C", [7.7, 35.4, 10.9, 32.3]], ["C", [14.1, 29.3, 19.2, 27.4]], ["C", [20.3, 27, 21.55, 26.8]], ["C", [22.8, 26.6, 24.1, 26.4]], ["C", [24.9, 26.3, 25.55, 26.25]], ["C", [26.2, 26.15, 26.9, 26.15]], ["C", [31.9, 25.95, 35.7, 27.25]], ["C", [39.5, 28.5, 42.5, 30.4]], ["C", [43.1, 30.8, 43.65, 31.25]], ["C", [44.2, 31.7, 44.8, 32.15]], ["C", [47.7, 34.25, 49.3, 38]], ["C", [49.5, 38.55, 49.8, 39.2]], ["C", [50.1, 39.8, 50.3, 40.45]], ["C", [50.9, 42.3, 51, 45]]]; __motifs["4"] = [["M", [29, 48]], ["C", [28.5, 48.4, 28.05, 49.05]], ["C", [27.6, 49.75, 27.1, 50.3]], ["C", [26.4, 51.35, 25.65, 52.3]], ["C", [24.9, 53.15, 24.1, 54.3]], ["C", [23.8, 54.8, 23.4, 55.25]], ["C", [23, 55.75, 22.6, 56.3]], ["L", [17.2, 63.45]], ["C", [16.8, 63.95, 16.45, 64.6]], ["C", [16.1, 65.2, 15.6, 65.75]], ["C", [15.4, 66.15, 15.05, 66.5]], ["C", [14.7, 66.9, 14.5, 67.35]], ["C", [14.3, 67.85, 14.4, 68.4]], ["C", [14.5, 69, 14.9, 69.2]], ["C", [15.5, 69.65, 16.65, 69.65]], ["C", [17.8, 69.65, 18.8, 69.65]], ["L", [24.7, 69.65]], ["C", [25.4, 69.65, 26.2, 69.7]], ["C", [27, 69.75, 27.6, 69.65]], ["L", [28.6, 69.65]], ["C", [29.3, 69.45, 29.85, 69.35]], ["C", [30.4, 69.2, 30.7, 68.7]], ["C", [31.1, 68.15, 31.2, 67.5]], ["C", [31.3, 66.9, 31.3, 66.05]], ["L", [31.3, 65]], ["C", [31.4, 64.5, 31.35, 63.75]], ["C", [31.3, 63.1, 31.3, 62.6]], ["L", [31.3, 54.2]], ["C", [31.3, 53.65, 31.35, 53.15]], ["C", [31.4, 52.7, 31.3, 52.2]], ["C", [31.1, 51.55, 31.25, 50.9]], ["C", [31.4, 50.3, 31.2, 49.65]], ["C", [31, 48.85, 30.95, 48.25]], ["C", [30.9, 47.55, 29.9, 47.45]], ["C", [29.7, 47.65, 29.45, 47.7]], ["C", [29.2, 47.75, 29, 48]], ["M", [44.6, 31.95]], ["L", [44.6, 64.6]], ["C", [44.6, 65.35, 44.6, 66.3]], ["C", [44.6, 67.2, 44.8, 67.9]], ["C", [45.05, 69.2, 46.4, 69.45]], ["C", [47.55, 69.9, 49.25, 69.6]], ["C", [51, 69.4, 52.2, 69.75]], ["C", [53.75, 70.3, 53.8, 72]], ["C", [53.85, 73.65, 53.85, 75.65]], ["L", [53.85, 78.5]], ["C", [53.65, 79.5, 53.4, 80.1]], ["C", [53.15, 80.8, 52.3, 81]], ["C", [51.35, 81.3, 50.3, 81.25]], ["C", [49.15, 81.2, 48.2, 81.2]], ["C", [47.15, 81.2, 46.3, 81.45]], ["C", [45.35, 81.7, 44.95, 82.5]], ["C", [44.8, 82.9, 44.6, 83.9]], ["L", [44.6, 85]], ["C", [44.5, 85.5, 44.55, 86.2]], ["C", [44.6, 87, 44.6, 87.7]], ["L", [44.6, 92.9]], ["C", [44.6, 94, 44.6, 94.95]], ["C", [44.6, 95.9, 44.1, 96.45]], ["C", [43.8, 96.9, 43.3, 97.05]], ["C", [42.85, 97.2, 42.4, 97.4]], ["L", [41.9, 97.4]], ["C", [41.05, 97.6, 40, 97.5]], ["C", [38.85, 97.4, 38.1, 97.4]], ["C", [37.1, 97.4, 36.05, 97.45]], ["C", [35, 97.5, 34.1, 97.4]], ["C", [33.2, 97.3, 32.5, 97]], ["C", [31.8, 96.65, 31.5, 96]], ["C", [31.3, 95.5, 31.3, 94.75]], ["C", [31.3, 94, 31.3, 93.2]], ["L", [31.3, 88.35]], ["C", [31.3, 87.9, 31.35, 87.2]], ["C", [31.4, 86.5, 31.3, 86]], ["L", [31.3, 83.9]], ["C", [31.1, 83.1, 30.9, 82.6]], ["C", [30.7, 82.05, 30.2, 81.7]], ["C", [29.3, 81.1, 27.4, 81.15]], ["C", [25.5, 81.2, 24.1, 81.2]], ["L", [9.3, 81.2]], ["C", [8.5, 81.2, 7.45, 81.25]], ["C", [6.4, 81.3, 5.35, 81.25]], ["C", [4.3, 81.2, 3.45, 81.05]], ["C", [2.6, 80.9, 2.3, 80.4]], ["C", [1.7, 79.7, 1.7, 78.2]], ["L", [1.7, 77]], ["C", [1.5, 76.3, 1.55, 75.5]], ["C", [1.6, 74.7, 1.6, 73.9]], ["C", [1.6, 72.7, 1.6, 71.15]], ["C", [1.6, 69.6, 1.9, 68.6]], ["C", [2.1, 67.9, 2.45, 67.3]], ["C", [2.8, 66.7, 3.2, 66.2]], ["C", [4.2, 64.8, 5.2, 63.6]], ["C", [6.2, 62.4, 7.2, 61.05]], ["C", [9.8, 57.2, 12.65, 53.55]], ["C", [15.5, 49.9, 18.2, 46.15]], ["C", [18.7, 45.3, 19.35, 44.6]], ["C", [20, 43.95, 20.5, 43.1]], ["C", [22.3, 40.6, 24.15, 38.2]], ["C", [26, 35.85, 27.8, 33.35]], ["C", [28.3, 32.5, 28.9, 31.85]], ["C", [29.5, 31.15, 30.1, 30.3]], ["C", [30.4, 29.8, 30.7, 29.4]], ["C", [31, 28.95, 31.5, 28.5]], ["C", [31.9, 28.3, 32.25, 28.1]], ["C", [32.6, 27.9, 33.1, 27.8]], ["C", [33.3, 27.7, 33.65, 27.75]], ["C", [34, 27.8, 34.2, 27.6]], ["L", [40.65, 27.6]], ["C", [41.8, 27.6, 42.7, 27.7]], ["C", [43.6, 27.75, 44.1, 28.45]], ["C", [44.5, 29.1, 44.55, 29.95]], ["C", [44.6, 30.9, 44.6, 31.95]]]; __motifs["5"] = [["M", [50, 36.45]], ["C", [50, 37.1, 49.8, 37.6]], ["C", [49.3, 38.8, 48.15, 38.95]], ["C", [47, 39.1, 45.3, 39.1]], ["L", [26.8, 39.1]], ["C", [25.4, 39.1, 23.95, 39.15]], ["C", [22.5, 39.2, 21.7, 39.8]], ["C", [21.2, 40.2, 20.9, 40.95]], ["C", [20.6, 41.7, 20.45, 42.65]], ["C", [20.3, 43.6, 20.2, 44.6]], ["C", [20.1, 45.6, 19.9, 46.3]], ["C", [19.7, 47.1, 19.6, 47.9]], ["C", [19.5, 48.7, 19.3, 49.5]], ["C", [19.2, 49.8, 19.2, 50.5]], ["C", [19, 51, 19, 51.65]], ["C", [19, 52.3, 19.2, 52.7]], ["C", [19.3, 52.9, 19.4, 53]], ["C", [19.5, 53.1, 19.7, 53.3]], ["C", [20.6, 53.4, 21.2, 53.1]], ["C", [21.8, 52.75, 22.3, 52.5]], ["C", [23, 52, 23.7, 51.7]], ["C", [24.4, 51.4, 25.2, 51.1]], ["C", [26.4, 50.6, 28.05, 50.35]], ["C", [29.7, 50.1, 31.55, 50]], ["C", [33.4, 49.9, 35.15, 50.1]], ["C", [36.9, 50.3, 38.2, 50.65]], ["C", [39.3, 51.1, 40.45, 51.5]], ["C", [41.6, 51.9, 42.6, 52.5]], ["C", [48.8, 56.1, 51.7, 62.6]], ["C", [52.2, 63.8, 52.5, 65.05]], ["C", [52.8, 66.3, 53.1, 67.7]], ["C", [53.4, 68.9, 53.6, 70.6]], ["C", [53.8, 72.3, 53.8, 74]], ["C", [53.8, 75.65, 53.6, 77.35]], ["C", [53.4, 79, 53, 80.15]], ["C", [52.4, 81.8, 51.85, 83.3]], ["C", [51.3, 84.8, 50.5, 86.15]], ["C", [49.9, 87.2, 49.25, 88.1]], ["C", [48.6, 89, 47.9, 89.8]], ["C", [47.8, 89.9, 47.7, 89.95]], ["C", [47.6, 90, 47.5, 90.1]], ["C", [47.1, 90.55, 46.7, 91.05]], ["C", [46.3, 91.5, 45.8, 91.9]], ["C", [45.7, 92, 45.65, 92.1]], ["C", [45.6, 92.2, 45.4, 92.3]], ["C", [44.9, 92.65, 44.45, 93.1]], ["C", [44, 93.5, 43.5, 93.9]], ["C", [40.3, 96.2, 36.2, 97.5]], ["C", [35.4, 97.8, 34.5, 97.95]], ["C", [33.6, 98.1, 32.6, 98.3]], ["C", [31.8, 98.55, 30.9, 98.55]], ["C", [30, 98.6, 28.9, 98.7]], ["C", [28.5, 98.7, 28.1, 98.75]], ["C", [27.7, 98.8, 27.3, 98.7]], ["L", [26.6, 98.7]], ["C", [26.1, 98.6, 25.55, 98.6]], ["C", [25, 98.6, 24.5, 98.6]], ["C", [23.4, 98.35, 22.25, 98.3]], ["C", [21.1, 98.25, 20, 97.95]], ["C", [17.7, 97.2, 15.6, 96.45]], ["C", [13.5, 95.6, 11.7, 94.5]], ["C", [11.1, 94.15, 10.55, 93.75]], ["C", [10, 93.3, 9.4, 92.8]], ["L", [8.8, 92.25]], ["C", [8.3, 91.95, 7.95, 91.5]], ["C", [7.6, 91.1, 7.3, 90.7]], ["C", [6.9, 90.2, 6.5, 89.9]], ["C", [6.1, 89.5, 5.8, 89]], ["C", [4.8, 87.6, 4.1, 86.05]], ["C", [3.4, 84.4, 2.8, 82.6]], ["C", [2.6, 81.85, 2.3, 80.25]], ["C", [2, 78.7, 2.5, 77.9]], ["C", [3, 77.1, 3.95, 76.95]], ["C", [4.9, 76.8, 6.2, 76.8]], ["L", [11.6, 76.8]], ["C", [12.5, 76.8, 13.35, 76.8]], ["C", [14.2, 76.8, 14.9, 77.1]], ["C", [15.9, 77.6, 16.25, 78.6]], ["C", [16.6, 79.6, 17, 80.6]], ["C", [17.4, 81.4, 17.8, 82.05]], ["C", [18.2, 82.7, 18.7, 83.4]], ["C", [19, 83.8, 19.4, 84.1]], ["C", [19.8, 84.4, 20.2, 84.7]], ["C", [20.8, 85.4, 21.6, 85.8]], ["C", [23, 86.6, 25.55, 87.05]], ["C", [28.1, 87.5, 30.3, 86.9]], ["C", [31.8, 86.4, 32.95, 85.75]], ["C", [34.1, 85.1, 35.2, 84.3]], ["C", [35.7, 83.95, 36, 83.6]], ["C", [36.3, 83.2, 36.6, 82.7]], ["C", [37.5, 81.6, 38.1, 80.45]], ["C", [38.7, 79.3, 39.2, 77.75]], ["C", [39.4, 76.6, 39.6, 75.9]], ["L", [39.6, 75]], ["C", [39.8, 74.4, 39.8, 73.2]], ["C", [39.8, 72, 39.6, 71.4]], ["C", [39.4, 70.7, 39.25, 69.95]], ["C", [39.1, 69.2, 38.9, 68.6]], ["C", [37.7, 65.7, 35.85, 63.8]], ["C", [34, 61.9, 30.8, 61.05]], ["C", [30.3, 60.8, 29.8, 60.8]], ["C", [29.3, 60.8, 28.8, 60.6]], ["L", [28, 60.6]], ["C", [27.4, 60.4, 26.55, 60.5]], ["C", [25.7, 60.6, 25.2, 60.8]], ["C", [24.7, 60.95, 24.35, 60.95]], ["C", [24, 60.95, 23.6, 61.05]], ["C", [22.5, 61.4, 21.55, 61.9]], ["C", [20.6, 62.4, 19.8, 63.05]], ["C", [18.9, 63.6, 18.25, 64.45]], ["C", [17.6, 65.3, 16.5, 65.8]], ["C", [15.4, 66.3, 13.65, 66.2]], ["C", [11.9, 66.1, 10.4, 66.1]], ["C", [9.7, 66.1, 8.95, 66.2]], ["C", [8.2, 66.3, 7.7, 66.1]], ["L", [6.8, 66.1]], ["C", [5.7, 65.9, 5.3, 65.6]], ["C", [4.4, 64.8, 4.7, 63.15]], ["C", [5, 61.7, 5.2, 60.35]], ["C", [5.4, 59, 5.7, 57.6]], ["C", [5.8, 57.2, 5.8, 56.9]], ["C", [5.8, 56.6, 5.9, 56.2]], ["C", [6.1, 55.2, 6.25, 54.2]], ["C", [6.4, 53.2, 6.6, 52.2]], ["C", [6.8, 51.4, 6.95, 50.45]], ["C", [7.1, 49.5, 7.3, 48.65]], ["C", [7.4, 48.2, 7.4, 47.6]], ["C", [7.4, 47, 7.6, 46.45]], ["C", [8.2, 44.3, 8.5, 41.95]], ["C", [8.8, 39.6, 9.3, 37.4]], ["C", [9.4, 37.1, 9.4, 36.8]], ["C", [9.4, 36.45, 9.5, 36.25]], ["C", [9.7, 35.2, 9.85, 34.1]], ["C", [10, 33.1, 10.3, 31.95]], ["C", [10.5, 30.9, 10.65, 30]], ["C", [10.8, 29.2, 11.4, 28.35]], ["C", [11.8, 27.85, 12.8, 27.7]], ["C", [13, 27.6, 13.2, 27.65]], ["C", [13.4, 27.7, 13.6, 27.6]], ["L", [45.6, 27.6]], ["C", [46.7, 27.6, 47.65, 27.65]], ["C", [48.6, 27.7, 49.2, 28.15]], ["C", [49.6, 28.45, 49.8, 29.35]], ["C", [50, 30.15, 50.05, 31.2]], ["C", [50.1, 32.15, 50.05, 33.25]], ["C", [50, 34.3, 50, 35.1]], ["C", [50, 35.8, 50, 36.45]]]; __motifs["6"] = [["M", [24.2, 61.8]], ["C", [19.5, 63.8, 18, 68.9]], ["C", [17.8, 69.6, 17.65, 70.25]], ["C", [17.5, 70.9, 17.3, 71.7]], ["L", [17.3, 72.5]], ["C", [17.1, 73.4, 17.15, 74.6]], ["C", [17.2, 75.8, 17.4, 76.6]], ["C", [17.6, 77.1, 17.65, 77.6]], ["C", [17.7, 78.1, 17.9, 78.6]], ["C", [19.3, 83.3, 23.4, 85.7]], ["C", [24.6, 86.4, 26.3, 86.9]], ["C", [26.9, 86.9, 27.2, 87]], ["C", [27.6, 87.1, 28.15, 87.15]], ["C", [28.7, 87.2, 29.2, 87.1]], ["C", [30.1, 86.9, 30.85, 86.75]], ["C", [31.6, 86.6, 32.4, 86.3]], ["C", [34.7, 85.3, 36.2, 83.4]], ["C", [37.7, 81.5, 38.5, 79.2]], ["C", [39.2, 77.1, 39.25, 74.3]], ["C", [39.3, 71.5, 38.5, 69.4]], ["C", [37.4, 65.9, 35.1, 63.5]], ["C", [32.8, 61.1, 28.2, 61.1]], ["C", [28, 61.2, 27.6, 61.15]], ["C", [27.2, 61.1, 26.9, 61.2]], ["C", [26.2, 61.4, 25.5, 61.5]], ["C", [24.8, 61.6, 24.2, 61.8]], ["M", [49.1, 36.3]], ["C", [49.9, 37.6, 50.45, 39]], ["C", [51, 40.4, 51.5, 42]], ["C", [51.7, 42.5, 51.65, 43.25]], ["C", [51.6, 44, 51.3, 44.4]], ["C", [51, 44.9, 50.55, 45]], ["C", [50.1, 45.1, 49.5, 45.3]], ["L", [48.4, 45.3]], ["C", [47.8, 45.5, 47, 45.4]], ["C", [46.2, 45.3, 45.4, 45.3]], ["C", [44.6, 45.3, 43.75, 45.4]], ["C", [42.9, 45.5, 42.1, 45.3]], ["C", [41.6, 45.2, 40.6, 45.2]], ["C", [38.9, 44.8, 38.4, 43.65]], ["C", [37.9, 42.5, 37.1, 41.2]], ["C", [35.2, 38.2, 31.5, 37]], ["C", [30.9, 36.8, 29.95, 36.65]], ["C", [29, 36.5, 28.2, 36.7]], ["C", [27.1, 36.9, 26.2, 37.15]], ["C", [25.3, 37.4, 24.5, 37.95]], ["C", [22.1, 39.4, 20.6, 41.6]], ["C", [19.1, 43.8, 18, 46.7]], ["C", [17.8, 47.2, 17.7, 47.65]], ["C", [17.6, 48.1, 17.4, 48.6]], ["C", [17.1, 49.4, 16.9, 50.3]], ["C", [16.7, 51.2, 16.5, 52.1]], ["C", [16.5, 52.3, 16.45, 52.6]], ["C", [16.4, 52.8, 16.4, 53]], ["C", [16.3, 53.5, 16.3, 54.1]], ["C", [16.3, 54.75, 16.5, 55.1]], ["C", [16.6, 55.3, 16.7, 55.4]], ["C", [16.8, 55.5, 17, 55.7]], ["C", [18.1, 55.9, 18.8, 55.2]], ["C", [19.5, 54.5, 20.2, 54]], ["C", [21.3, 53.1, 22.65, 52.45]], ["C", [24, 51.8, 25.5, 51.3]], ["C", [26.3, 51.1, 27.15, 50.95]], ["C", [28, 50.8, 28.8, 50.65]], ["C", [29.3, 50.55, 29.65, 50.65]], ["C", [30, 50.7, 30.5, 50.55]], ["C", [31, 50.45, 31.7, 50.45]], ["C", [32.4, 50.45, 32.9, 50.55]], ["C", [33.3, 50.65, 34.1, 50.65]], ["C", [34.6, 50.7, 35.1, 50.75]], ["C", [35.6, 50.8, 36.1, 51]], ["C", [36.9, 51.2, 37.65, 51.35]], ["C", [38.4, 51.5, 39.2, 51.8]], ["C", [42.4, 53.1, 44.9, 54.95]], ["C", [47.4, 56.85, 49.3, 59.4]], ["C", [50.2, 60.7, 50.95, 62.25]], ["C", [51.7, 63.8, 52.2, 65.5]], ["C", [52.5, 66.3, 52.65, 67.2]], ["C", [52.8, 68, 53, 68.8]], ["C", [53.1, 69.5, 53.15, 70.1]], ["C", [53.2, 70.7, 53.3, 71.45]], ["L", [53.3, 72.5]], ["C", [53.4, 73, 53.35, 74.15]], ["C", [53.3, 75.3, 53.2, 75.8]], ["C", [53.1, 76.3, 53.1, 76.65]], ["C", [53.1, 77, 53, 77.55]], ["C", [52.8, 78.6, 52.65, 79.65]], ["C", [52.5, 80.6, 52.1, 81.6]], ["C", [50.4, 86.8, 47.25, 90.6]], ["C", [44.1, 94.4, 39.3, 96.5]], ["C", [38.4, 96.9, 37.45, 97.15]], ["C", [36.5, 97.4, 35.4, 97.8]], ["C", [34.6, 98, 33.7, 98.1]], ["C", [32.8, 98.2, 31.9, 98.45]], ["C", [31.4, 98.6, 30.85, 98.55]], ["C", [30.3, 98.45, 29.8, 98.55]], ["C", [29.2, 98.7, 28.25, 98.7]], ["C", [27.3, 98.7, 26.8, 98.55]], ["L", [26.1, 98.55]], ["C", [25.7, 98.45, 25.25, 98.45]], ["C", [24.8, 98.45, 24.4, 98.35]], ["C", [23.9, 98.1, 23.45, 98.15]], ["C", [23, 98.2, 22.5, 98]], ["C", [20.5, 97.4, 18.8, 96.85]], ["C", [17.1, 96.35, 15.6, 95.3]], ["C", [11.4, 92.8, 8.8, 89]], ["C", [6.2, 85.2, 4.5, 80.2]], ["C", [3.9, 78.6, 3.6, 76.85]], ["C", [3.3, 75.1, 2.9, 73.45]], ["C", [2.7, 72.6, 2.65, 71.75]], ["C", [2.6, 70.9, 2.4, 70]], ["C", [2.4, 69.1, 2.35, 68.15]], ["C", [2.3, 67.25, 2.2, 66.2]], ["L", [2.2, 64.9]], ["C", [2, 64.4, 2.05, 63.85]], ["C", [2.1, 63.3, 2.1, 62.8]], ["C", [2.1, 62.3, 2.05, 61.75]], ["C", [2, 61.2, 2.2, 60.85]], ["L", [2.5, 55.7]], ["C", [2.9, 54.2, 3, 52.7]], ["C", [3.1, 51.1, 3.6, 49.7]], ["C", [4.7, 45.9, 5.95, 42.65]], ["C", [7.2, 39.4, 9.2, 36.6]], ["C", [11.5, 33.4, 14.55, 31]], ["C", [17.6, 28.6, 21.8, 27.25]], ["C", [22.9, 26.8, 24.1, 26.65]], ["C", [25.3, 26.5, 26.5, 26.2]], ["C", [26.8, 26.1, 27.7, 26.15]], ["C", [28.6, 26.2, 28.8, 26.1]], ["C", [32.6, 26, 35.75, 26.75]], ["C", [38.9, 27.55, 41.35, 28.85]], ["C", [43.8, 30.2, 45.75, 32.1]], ["C", [47.7, 34, 49.1, 36.3]]]; __motifs["7"] = [["M", [51.5, 35.85]], ["C", [51.5, 36.8, 51.5, 37.75]], ["C", [51.5, 38.6, 51.2, 39.4]], ["C", [50.9, 40.05, 50.45, 40.55]], ["C", [50, 41.1, 49.5, 41.6]], ["C", [49.1, 42.05, 48.8, 42.25]], ["C", [48.6, 42.6, 48.25, 42.9]], ["C", [47.9, 43.2, 47.6, 43.5]], ["C", [47, 44.35, 46.3, 45.1]], ["C", [45.6, 45.95, 45, 46.7]], ["C", [40, 53.7, 36.4, 61.9]], ["C", [35.2, 64.75, 34.25, 67.65]], ["C", [33.3, 70.6, 32.3, 73.6]], ["C", [31.8, 75, 31.55, 76.3]], ["C", [31.3, 77.65, 31, 78.9]], ["C", [30.5, 80.5, 30.3, 82.1]], ["C", [30.1, 83.75, 29.7, 85.4]], ["C", [29.6, 85.95, 29.6, 86.35]], ["C", [29.6, 86.8, 29.4, 87.3]], ["C", [29.3, 88.4, 29.2, 89.35]], ["C", [29.1, 90.3, 28.9, 91.4]], ["C", [28.8, 91.95, 28.85, 92.3]], ["C", [28.9, 92.7, 28.8, 93.2]], ["L", [28.8, 94.4]], ["C", [28.5, 95.5, 28.25, 96.25]], ["C", [28, 96.9, 26.9, 97.3]], ["C", [26.3, 97.5, 25.5, 97.45]], ["C", [24.7, 97.4, 23.9, 97.4]], ["L", [17.7, 97.4]], ["C", [16.6, 97.4, 15.65, 97.3]], ["C", [14.7, 97.2, 14.2, 96.45]], ["C", [13.9, 95.95, 13.85, 94.8]], ["C", [13.8, 93.7, 14, 92.9]], ["C", [14.2, 92.3, 14.2, 91.6]], ["C", [14.2, 90.9, 14.4, 90.2]], ["C", [14.8, 88.7, 14.95, 87.15]], ["C", [15.1, 85.65, 15.6, 84.1]], ["C", [16.3, 81.65, 16.9, 79.1]], ["C", [17.5, 76.6, 18.3, 74.3]], ["C", [18.5, 73.8, 18.65, 73.3]], ["C", [18.8, 72.7, 19, 72.2]], ["C", [19.8, 70.2, 20.6, 68.3]], ["C", [21.4, 66.4, 22.2, 64.4]], ["C", [23.6, 61.1, 25.35, 58]], ["C", [27.1, 54.9, 29, 51.9]], ["C", [30.2, 50.15, 31.4, 48.35]], ["C", [32.6, 46.5, 33.9, 44.7]], ["C", [34.1, 44.35, 34.8, 43.45]], ["C", [35.5, 42.6, 35.3, 41.95]], ["C", [35.1, 41.2, 34.6, 41.05]], ["C", [34.1, 40.9, 33.4, 40.7]], ["L", [32.5, 40.7]], ["C", [32.1, 40.5, 31.55, 40.55]], ["C", [31, 40.6, 30.5, 40.6]], ["L", [11.3, 40.6]], ["C", [9.9, 40.6, 7.85, 40.65]], ["C", [5.8, 40.7, 5, 40.2]], ["C", [4.3, 39.85, 4.1, 39.1]], ["C", [3.9, 38.6, 3.9, 37.95]], ["C", [3.9, 37.2, 3.9, 36.5]], ["L", [3.9, 32]], ["C", [3.9, 31.15, 3.9, 30.2]], ["C", [3.9, 29.35, 4.3, 28.75]], ["C", [4.7, 28, 5.8, 27.7]], ["C", [6, 27.65, 6.25, 27.7]], ["C", [6.5, 27.7, 6.7, 27.65]], ["L", [47.3, 27.65]], ["C", [48.5, 27.65, 49.5, 27.7]], ["C", [50.5, 27.8, 51, 28.6]], ["C", [51.4, 29.15, 51.45, 29.95]], ["C", [51.5, 30.8, 51.5, 31.75]], ["L", [51.5, 35.85]]]; __motifs["8"] = [["M", [23.6, 65.9]], ["C", [21.1, 66.7, 19.3, 68.15]], ["C", [17.5, 69.6, 16.5, 71.9]], ["C", [16.3, 72.5, 16.15, 73.15]], ["C", [16, 73.8, 15.8, 74.6]], ["C", [15.6, 75.7, 15.7, 77.15]], ["C", [15.8, 78.6, 16.1, 79.4]], ["C", [16.4, 80.5, 16.8, 81.5]], ["C", [17.6, 83.2, 18.85, 84.5]], ["C", [20.1, 85.8, 21.6, 86.7]], ["C", [22.1, 86.9, 22.5, 87.1]], ["C", [22.9, 87.3, 23.4, 87.5]], ["C", [23.9, 87.7, 24.55, 87.8]], ["C", [25.2, 87.9, 25.8, 88.1]], ["C", [26.2, 88.2, 27, 88.2]], ["C", [27.3, 88.3, 28.05, 88.35]], ["C", [28.8, 88.4, 29.1, 88.3]], ["C", [30.1, 88.1, 31, 88]], ["C", [31.9, 87.9, 32.7, 87.5]], ["C", [34.9, 86.6, 36.55, 85.15]], ["C", [38.2, 83.7, 39.1, 81.6]], ["C", [39.4, 80.9, 39.55, 80.2]], ["C", [39.7, 79.5, 39.9, 78.7]], ["C", [40.4, 77, 40, 75.05]], ["C", [39.6, 73.1, 39.1, 72]], ["C", [37.7, 68.8, 34.85, 67.05]], ["C", [32, 65.3, 27.5, 65.2]], ["C", [27.3, 65.4, 26.9, 65.35]], ["C", [26.5, 65.3, 26.2, 65.3]], ["C", [25.5, 65.5, 24.85, 65.6]], ["C", [24.2, 65.7, 23.6, 65.9]], ["M", [17.3, 46.55]], ["C", [17.3, 48.7, 18, 50.2]], ["C", [18.8, 52, 20.2, 53.15]], ["C", [21.6, 54.3, 23.5, 55.1]], ["C", [24, 55.3, 24.5, 55.35]], ["C", [25, 55.4, 25.5, 55.5]], ["C", [26.6, 55.8, 28.3, 55.8]], ["C", [30, 55.8, 31.1, 55.5]], ["C", [33.7, 54.7, 35.5, 53.35]], ["C", [37.3, 52, 38.1, 49.4]], ["C", [38.3, 48.7, 38.5, 47.5]], ["C", [38.7, 46.3, 38.5, 45.4]], ["C", [38.4, 45, 38.35, 44.7]], ["C", [38.3, 44.4, 38.2, 44]], ["C", [38, 43.2, 37.75, 42.5]], ["C", [37.5, 41.8, 37.1, 41.1]], ["C", [35.4, 38.6, 31.8, 37.3]], ["C", [31.3, 37.1, 30.75, 37.1]], ["C", [30.2, 37.1, 29.7, 36.9]], ["C", [29.1, 36.7, 28.4, 36.8]], ["C", [27.7, 36.9, 27, 36.9]], ["C", [26.8, 37.1, 26.45, 37]], ["C", [26.1, 36.9, 25.8, 37]], ["C", [25.3, 37.2, 24.75, 37.25]], ["C", [24.2, 37.3, 23.7, 37.5]], ["C", [21.7, 38.3, 20.25, 39.6]], ["C", [18.8, 40.9, 18, 42.9]], ["C", [17.3, 44.4, 17.3, 46.55]], ["M", [51.05, 42.9]], ["C", [51.7, 46.5, 50.7, 49.7]], ["C", [49.9, 52, 48.8, 53.85]], ["C", [47.7, 55.7, 46, 57]], ["C", [45.5, 57.4, 44.9, 57.8]], ["C", [44.3, 58.2, 43.9, 58.7]], ["C", [43.7, 58.9, 43.5, 59.15]], ["C", [43.3, 59.4, 43.5, 59.9]], ["C", [43.7, 60.4, 44, 60.65]], ["C", [44.3, 60.9, 44.7, 61.1]], ["C", [45.4, 61.5, 46.1, 61.85]], ["C", [46.8, 62.2, 47.5, 62.7]], ["C", [51, 65.1, 52.8, 69.4]], ["C", [53.3, 70.5, 53.5, 71.6]], ["C", [53.7, 72.7, 54, 74]], ["C", [54, 74.4, 54.05, 74.7]], ["C", [54.1, 75, 54.1, 75.4]], ["C", [54.2, 75.9, 54.25, 76.45]], ["C", [54.3, 77, 54.2, 77.4]], ["C", [54.1, 77.9, 54.1, 78.3]], ["C", [54.1, 78.7, 54.1, 79.2]], ["C", [54, 79.5, 54, 79.9]], ["C", [54, 80.3, 53.9, 80.7]], ["C", [53.7, 81.3, 53.6, 81.9]], ["C", [53.5, 82.5, 53.3, 83]], ["C", [53.1, 83.8, 52.8, 84.6]], ["C", [52.5, 85.4, 52.2, 86.2]], ["C", [51.9, 86.9, 51.45, 87.55]], ["C", [51, 88.2, 50.5, 88.9]], ["C", [48.4, 91.9, 45.3, 93.95]], ["C", [42.2, 96, 38.4, 97.3]], ["C", [37.3, 97.6, 36.2, 97.8]], ["C", [35.1, 98, 34, 98.3]], ["C", [33.6, 98.5, 33.2, 98.45]], ["C", [32.8, 98.4, 32.4, 98.6]], ["C", [31.6, 98.6, 30.8, 98.65]], ["C", [30, 98.7, 29.2, 98.8]], ["L", [28.3, 98.8]], ["C", [27.7, 98.8, 27, 98.85]], ["C", [26.3, 98.9, 25.8, 98.7]], ["C", [25.2, 98.5, 24.6, 98.6]], ["C", [24, 98.7, 23.5, 98.6]], ["C", [23.1, 98.4, 22.7, 98.45]], ["C", [22.3, 98.5, 21.8, 98.3]], ["C", [20.9, 98.1, 20, 97.95]], ["C", [19.1, 97.8, 18.3, 97.5]], ["C", [18.1, 97.4, 17.85, 97.4]], ["C", [17.6, 97.4, 17.4, 97.3]], ["C", [15.4, 96.7, 13.5, 95.8]], ["C", [11.3, 94.8, 9.15, 93.1]], ["C", [7, 91.4, 5.6, 89.6]], ["C", [4.6, 88.3, 3.8, 86.7]], ["C", [3.4, 86.1, 3.15, 85.4]], ["C", [2.9, 84.7, 2.7, 84]], ["C", [2.4, 83.2, 2.2, 82.2]], ["C", [2, 81.2, 1.8, 80.2]], ["C", [1.7, 79.8, 1.7, 79.4]], ["C", [1.7, 79, 1.6, 78.6]], ["L", [1.6, 77.7]], ["C", [1.5, 77.3, 1.55, 76.35]], ["C", [1.6, 75.4, 1.7, 75]], ["C", [2, 73.7, 2.1, 72.55]], ["C", [2.2, 71.4, 2.7, 70.3]], ["C", [3.6, 68.1, 4.8, 66.3]], ["C", [6, 64.5, 7.7, 63.2]], ["C", [9.1, 62.3, 10.8, 61.3]], ["C", [11.2, 61, 11.65, 60.7]], ["C", [12.1, 60.4, 12.3, 59.9]], ["C", [12.4, 59.5, 12.25, 59.25]], ["C", [12.1, 59, 11.9, 58.8]], ["C", [11.1, 58, 9.8, 57.2]], ["C", [8.1, 55.9, 7, 54.05]], ["C", [5.9, 52.2, 5.1, 49.9]], ["C", [4.3, 47.7, 4.5, 44.75]], ["C", [4.7, 41.8, 5.4, 39.8]], ["C", [7.2, 34.9, 10.6, 32.15]], ["C", [14, 29.4, 18.9, 27.7]], ["C", [20.2, 27.2, 21.6, 27]], ["C", [23, 26.8, 24.5, 26.5]], ["C", [25.2, 26.4, 25.85, 26.35]], ["C", [26.5, 26.3, 27.2, 26.3]], ["C", [32.3, 26.1, 36.2, 27.25]], ["C", [40.1, 28.4, 43, 30.5]], ["C", [44, 31.2, 44.85, 31.9]], ["C", [45.7, 32.6, 46.5, 33.5]], ["L", [46.8, 33.8]], ["C", [47.2, 34.3, 47.6, 34.85]], ["C", [48, 35.4, 48.4, 35.9]], ["C", [48.6, 36.2, 48.75, 36.5]], ["C", [48.9, 36.8, 49.1, 37.2]], ["C", [50.4, 39.3, 51.05, 42.9]]]; __motifs["9"] = [["M", [16.6, 46.6]], ["C", [16.2, 47.75, 16.1, 49.7]], ["C", [16, 51.65, 16.3, 52.8]], ["C", [16.5, 53.65, 16.5, 54.25]], ["C", [16.5, 54.8, 16.7, 55.45]], ["C", [17.5, 57.95, 18.7, 59.55]], ["C", [19.9, 61.2, 21.9, 62.45]], ["C", [22.5, 62.85, 23.25, 63.1]], ["C", [24, 63.3, 24.8, 63.5]], ["C", [25, 63.5, 25.25, 63.55]], ["C", [25.5, 63.6, 25.8, 63.6]], ["C", [26.1, 63.7, 26.55, 63.8]], ["C", [27, 63.85, 27.3, 63.7]], ["C", [27.5, 63.6, 27.85, 63.65]], ["C", [28.2, 63.7, 28.5, 63.6]], ["C", [29.1, 63.4, 29.7, 63.3]], ["C", [30.3, 63.2, 30.9, 63.05]], ["C", [35, 61.2, 37, 57]], ["C", [37.3, 56.25, 37.5, 55.4]], ["C", [37.7, 54.65, 37.9, 53.75]], ["C", [38.4, 52.05, 38.2, 49.9]], ["C", [38, 47.75, 37.5, 46.35]], ["C", [36.2, 42.6, 33.65, 40.2]], ["C", [31.1, 37.75, 26.2, 37.75]], ["C", [26, 37.95, 25.6, 37.85]], ["C", [25.2, 37.75, 25, 37.85]], ["L", [22.9, 38.4]], ["C", [20.3, 39.55, 18.85, 41.7]], ["C", [17.4, 43.85, 16.6, 46.6]], ["M", [52, 49.1]], ["C", [52.1, 49.8, 52.3, 50.55]], ["C", [52.6, 51.6, 52.65, 52.7]], ["C", [52.7, 53.7, 52.9, 54.75]], ["C", [53, 55.2, 52.95, 55.55]], ["C", [52.9, 55.9, 53, 56.3]], ["C", [53.1, 56.9, 53.1, 57.45]], ["C", [53.1, 58, 53.1, 58.65]], ["C", [53.2, 58.95, 53.15, 59.3]], ["C", [53.1, 59.7, 53.2, 60]], ["C", [53.3, 60.55, 53.3, 61.9]], ["C", [53.3, 63.3, 53.2, 63.8]], ["L", [53.2, 65.05]], ["C", [53.1, 65.5, 53.1, 66.1]], ["C", [53.1, 66.7, 53, 67.25]], ["C", [52.9, 67.7, 52.9, 68.15]], ["C", [52.9, 68.6, 52.8, 69.15]], ["C", [52.6, 70.3, 52.5, 71.5]], ["C", [52.4, 72.7, 52.1, 73.8]], ["C", [51.7, 74.9, 51.5, 76.05]], ["C", [51.3, 77.25, 50.9, 78.3]], ["C", [50.1, 80.5, 49.2, 82.55]], ["C", [48.3, 84.6, 47.2, 86.4]], ["C", [46.7, 87.2, 46.2, 87.95]], ["C", [45.7, 88.6, 45.2, 89.4]], ["C", [44.9, 89.85, 44.55, 90.15]], ["C", [44.2, 90.4, 43.9, 90.9]], ["C", [43.6, 91.2, 43.2, 91.7]], ["C", [42.8, 92.25, 42.4, 92.4]], ["C", [41.6, 93.1, 40.75, 93.8]], ["C", [39.9, 94.5, 39, 95]], ["C", [37.7, 95.8, 36.25, 96.45]], ["C", [34.8, 97.1, 33.3, 97.6]], ["C", [32.2, 97.9, 31.1, 98.1]], ["C", [30, 98.25, 28.8, 98.45]], ["C", [28.3, 98.6, 27.75, 98.55]], ["C", [27.2, 98.45, 26.7, 98.55]], ["C", [26.2, 98.7, 25.3, 98.65]], ["C", [24.4, 98.6, 23.9, 98.55]], ["C", [23.5, 98.55, 23.15, 98.5]], ["C", [22.8, 98.45, 22.3, 98.45]], ["C", [21.5, 98.25, 20.7, 98.15]], ["C", [19.9, 98.05, 19.2, 97.8]], ["C", [18.1, 97.4, 17.15, 97.15]], ["C", [16.2, 96.9, 15.3, 96.5]], ["C", [6.4, 92.6, 3.8, 82.3]], ["C", [3.6, 81.75, 3.8, 81]], ["C", [4.2, 79.8, 5.2, 79.7]], ["C", [6.2, 79.55, 7.7, 79.55]], ["L", [10.9, 79.55]], ["C", [11.7, 79.55, 12.8, 79.45]], ["C", [13.9, 79.35, 14.6, 79.55]], ["C", [16.4, 80, 16.9, 81.1]], ["C", [17.4, 82.2, 18.2, 83.65]], ["C", [18.8, 84.5, 19.8, 85.55]], ["C", [20.8, 86.5, 22.15, 87.15]], ["C", [23.5, 87.85, 25.1, 88.1]], ["C", [26.7, 88.3, 28.4, 87.85]], ["C", [30.6, 87.2, 32.15, 86.05]], ["C", [33.7, 84.9, 34.8, 83.35]], ["C", [35.9, 81.85, 36.65, 79.85]], ["C", [37.4, 77.9, 38.1, 75.7]], ["C", [38.3, 75.15, 38.4, 74.4]], ["C", [38.5, 73.7, 38.7, 73.05]], ["C", [38.8, 72.6, 38.8, 72.3]], ["C", [38.8, 72, 38.9, 71.7]], ["C", [39, 71.25, 39, 70.6]], ["C", [39, 70, 38.8, 69.6]], ["C", [38.7, 69.4, 38.55, 69.35]], ["C", [38.4, 69.25, 38.3, 69.15]], ["C", [37.4, 69.05, 36.9, 69.4]], ["C", [36.4, 69.8, 35.9, 70.2]], ["C", [35.1, 70.8, 34.2, 71.45]], ["C", [33.3, 72, 32.3, 72.5]], ["C", [30.9, 73.25, 29, 73.65]], ["C", [27.1, 74.1, 25.05, 74.2]], ["C", [23, 74.3, 20.95, 74.1]], ["C", [18.9, 73.9, 17.3, 73.35]], ["C", [12.8, 71.9, 9.95, 69.5]], ["C", [7.1, 67.15, 4.8, 63.4]], ["C", [4.1, 62.2, 3.7, 60.85]], ["C", [3.3, 59.4, 2.8, 58]], ["C", [2.6, 57.3, 2.5, 56.55]], ["C", [2.4, 55.7, 2.2, 54.9]], ["C", [2.2, 54.55, 2.15, 54.15]], ["C", [2.1, 53.8, 2.1, 53.4]], ["C", [2, 52.9, 1.95, 52]], ["C", [1.9, 51.1, 2.1, 50.65]], ["C", [2.2, 50.15, 2.1, 49.55]], ["C", [2, 49, 2.2, 48.55]], ["C", [2.2, 47.7, 2.3, 47.3]], ["C", [2.5, 46.25, 2.65, 45.25]], ["C", [2.8, 44.35, 3.2, 43.3]], ["C", [3.9, 41.2, 4.75, 39.35]], ["C", [5.6, 37.5, 6.8, 35.95]], ["C", [7.2, 35.2, 7.7, 34.65]], ["C", [8.2, 34.1, 8.7, 33.55]], ["C", [9, 33.1, 9.55, 32.6]], ["C", [10.1, 32.1, 10.5, 31.85]], ["L", [10.8, 31.55]], ["C", [11.3, 31.1, 11.8, 30.7]], ["C", [12.3, 30.3, 12.9, 30]], ["C", [14.3, 29, 15.95, 28.3]], ["C", [17.6, 27.65, 19.4, 27]], ["C", [20.4, 26.7, 21.4, 26.55]], ["C", [22.4, 26.4, 23.5, 26.2]], ["C", [23.9, 26.1, 24.75, 26.15]], ["C", [25.6, 26.2, 25.8, 26.1]], ["C", [30.9, 26, 34.75, 27.2]], ["C", [38.6, 28.3, 41.5, 30.5]], ["C", [44.4, 32.7, 46.5, 35.75]], ["C", [48.6, 38.7, 50.1, 42.25]], ["C", [50.6, 43.6, 50.95, 44.95]], ["C", [51.3, 46.35, 51.7, 47.7]], ["C", [51.9, 48.45, 52, 49.1]]]; __motifs["0"] = [["M", [17.2, 48.75]], ["C", [17, 50.5, 16.6, 52.3]], ["C", [16.5, 53.1, 16.45, 53.9]], ["C", [16.4, 54.7, 16.3, 55.5]], ["C", [16.2, 56.3, 16.2, 57.2]], ["C", [16.2, 58.1, 16.2, 58.9]], ["L", [16.2, 60]], ["C", [16, 60.5, 16.05, 61.1]], ["C", [16.1, 61.7, 16.1, 62.2]], ["C", [16.1, 62.7, 16.1, 63.2]], ["C", [16.1, 63.7, 16.2, 64.2]], ["C", [16.3, 64.7, 16.2, 65.35]], ["C", [16.1, 66, 16.2, 66.5]], ["L", [16.2, 67.9]], ["C", [16.4, 68.8, 16.4, 69.8]], ["C", [16.4, 70.8, 16.6, 71.7]], ["L", [16.6, 72.5]], ["C", [16.8, 73.4, 16.9, 74.35]], ["C", [17, 75.3, 17.2, 76.2]], ["C", [17.8, 78.2, 18.4, 79.9]], ["C", [19, 81.6, 20.1, 83.1]], ["C", [21.2, 84.5, 22.35, 85.35]], ["C", [23.5, 86.2, 25.4, 86.8]], ["C", [25.95, 87, 26.8, 87.15]], ["C", [27.75, 87.3, 28.4, 87.1]], ["C", [28.9, 86.9, 29.45, 86.9]], ["C", [30.05, 86.9, 30.5, 86.7]], ["C", [31.6, 86.3, 32.8, 85.55]], ["C", [34.05, 84.8, 34.7, 84]], ["C", [35.6, 82.7, 36.25, 81.55]], ["C", [36.8, 80.4, 37.4, 78.9]], ["C", [37.95, 77.6, 38.15, 76.25]], ["C", [38.35, 74.9, 38.7, 73.5]], ["C", [38.8, 73, 38.8, 72.55]], ["C", [38.8, 72.1, 38.9, 71.6]], ["C", [39.1, 70.9, 39.05, 70.15]], ["C", [39, 69.4, 39.2, 68.7]], ["C", [39.2, 67.9, 39.2, 67]], ["C", [39.2, 66.1, 39.3, 65.3]], ["L", [39.3, 64.3]], ["C", [39.4, 63.8, 39.35, 63.25]], ["C", [39.3, 62.7, 39.3, 62.2]], ["C", [39.3, 61.7, 39.35, 61.15]], ["C", [39.4, 60.6, 39.3, 60.1]], ["L", [39.3, 59.3]], ["C", [39.3, 58.6, 39.3, 57.95]], ["C", [39.3, 57.3, 39.2, 56.7]], ["L", [39.2, 55.7]], ["C", [39, 54.7, 38.95, 53.75]], ["C", [38.9, 52.8, 38.8, 51.8]], ["C", [38.6, 51, 38.55, 50.2]], ["C", [38.45, 49.4, 38.25, 48.6]], ["C", [37.45, 45.8, 36.4, 43.35]], ["C", [35.35, 40.9, 33.2, 39.5]], ["C", [32.05, 38.6, 30.55, 38.15]], ["C", [29.1, 37.7, 26.9, 37.7]], ["C", [26.7, 37.9, 26.35, 37.8]], ["C", [26.05, 37.7, 25.85, 37.8]], ["C", [25.3, 38, 24.85, 38.1]], ["C", [24.4, 38.2, 23.95, 38.4]], ["C", [21.65, 39.4, 20.3, 41.3]], ["C", [19, 43.2, 18, 45.5]], ["C", [17.4, 47, 17.2, 48.75]], ["M", [51.9, 47.5]], ["C", [52.15, 49.3, 52.65, 51.1]], ["C", [52.85, 51.9, 52.8, 52.65]], ["C", [52.75, 53.4, 52.95, 54.2]], ["C", [53.15, 55.2, 53.15, 56.25]], ["C", [53.15, 57.3, 53.3, 58.3]], ["L", [53.3, 59.8]], ["C", [53.4, 60.4, 53.35, 61.1]], ["C", [53.3, 61.8, 53.3, 62.5]], ["C", [53.3, 63, 53.35, 63.5]], ["C", [53.4, 64, 53.3, 64.5]], ["L", [53.05, 69.6]], ["C", [52.95, 70.4, 52.9, 71.25]], ["C", [52.85, 72.1, 52.75, 73]], ["C", [52.25, 74.8, 52, 76.65]], ["C", [51.75, 78.5, 51.1, 80.2]], ["C", [49.1, 86.4, 46, 90.55]], ["C", [42.8, 94.7, 36.9, 97.1]], ["C", [35.6, 97.6, 34.2, 97.8]], ["C", [32.7, 98, 31.2, 98.4]], ["C", [30.5, 98.5, 29.95, 98.5]], ["C", [29.3, 98.5, 28.6, 98.6]], ["C", [28.3, 98.7, 27.6, 98.65]], ["C", [26.9, 98.6, 26.6, 98.5]], ["L", [25.6, 98.5]], ["C", [25.4, 98.5, 25.05, 98.5]], ["C", [24.7, 98.5, 24.5, 98.4]], ["C", [23.75, 98.2, 22.9, 98.15]], ["C", [22.1, 98.1, 21.3, 97.9]], ["C", [19.4, 97.4, 17.8, 96.75]], ["C", [16.2, 96.1, 14.8, 95.2]], ["C", [11.1, 92.9, 8.9, 89.8]], ["C", [6.7, 86.7, 5, 82.5]], ["C", [4.5, 81.1, 4.2, 79.6]], ["C", [3.9, 78.1, 3.35, 76.6]], ["C", [3.1, 75.5, 3, 74.3]], ["C", [2.9, 73.1, 2.6, 71.9]], ["C", [2.5, 71.4, 2.55, 71]], ["C", [2.6, 70.6, 2.4, 70.2]], ["C", [2.4, 69.6, 2.4, 69]], ["C", [2.4, 68.4, 2.3, 67.8]], ["C", [2.2, 67.3, 2.25, 66.9]], ["C", [2.3, 66.5, 2.2, 66]], ["C", [2, 65.2, 2.05, 64.2]], ["C", [2.1, 63.2, 2.1, 62.4]], ["C", [2.1, 61.7, 2.05, 60.95]], ["C", [2, 60.2, 2.2, 59.6]], ["L", [2.2, 58.3]], ["C", [2.4, 57.5, 2.3, 56.75]], ["C", [2.2, 56, 2.4, 55.2]], ["L", [2.4, 54.2]], ["C", [2.6, 53.6, 2.55, 53]], ["C", [2.5, 52.4, 2.7, 51.7]], ["C", [2.9, 51.2, 2.9, 50.55]], ["C", [2.9, 49.9, 3.1, 49.3]], ["C", [3.45, 47.9, 3.7, 46.6]], ["C", [3.9, 45.3, 4.4, 44]], ["C", [6.4, 38, 9.55, 33.95]], ["C", [12.8, 29.9, 18.4, 27.6]], ["C", [19.6, 27.1, 20.95, 26.85]], ["C", [22.3, 26.6, 23.75, 26.3]], ["C", [24.2, 26.2, 24.7, 26.2]], ["C", [25.2, 26.2, 25.75, 26.1]], ["C", [25.95, 26, 26.25, 26.1]], ["C", [26.6, 26.2, 26.8, 26.1]], ["C", [32.15, 26, 36.1, 27.3]], ["C", [40.05, 28.6, 42.9, 31]], ["C", [45.85, 33.4, 47.8, 36.75]], ["C", [49.75, 40.1, 51.05, 44]], ["C", [51.65, 45.7, 51.9, 47.5]]]; __motifs["!"] = [["M", [19.15, 82.25]], ["C", [20.15, 82.3, 20.9, 82.8]], ["C", [21.5, 83.35, 21.6, 84.2]], ["C", [21.7, 85.1, 21.7, 86.2]], ["L", [21.7, 93.4]], ["C", [21.7, 94.5, 21.6, 95.4]], ["C", [21.5, 96.35, 21, 96.8]], ["C", [20.25, 97.3, 19.3, 97.35]], ["C", [18.25, 97.4, 17.2, 97.4]], ["L", [10.5, 97.4]], ["C", [9.4, 97.4, 8.4, 97.35]], ["C", [7.4, 97.3, 6.9, 96.7]], ["C", [6.4, 96.1, 6.3, 95.15]], ["C", [6.2, 94.25, 6.2, 93.1]], ["L", [6.2, 86.8]], ["C", [6.2, 85.85, 6.2, 84.85]], ["C", [6.2, 83.95, 6.6, 83.35]], ["C", [7, 82.7, 8.1, 82.3]], ["C", [8.3, 82.2, 8.55, 82.25]], ["C", [8.8, 82.3, 9, 82.2]], ["L", [16.9, 82.2]], ["C", [18.05, 82.2, 19.15, 82.25]], ["M", [19.25, 26.3]], ["C", [20.3, 26.4, 20.8, 27.1]], ["C", [21.2, 27.7, 21.2, 28.6]], ["C", [21.2, 29.55, 21.2, 30.5]], ["L", [21.2, 41.6]], ["C", [21.2, 42.25, 21.3, 42.95]], ["C", [21.4, 43.7, 21.2, 44.25]], ["L", [21.2, 45.3]], ["C", [21, 46, 21.05, 46.75]], ["C", [21.1, 47.5, 20.9, 48.1]], ["C", [20.7, 48.6, 20.75, 49.05]], ["C", [20.8, 49.5, 20.6, 50]], ["C", [20.4, 50.9, 20.4, 51.75]], ["C", [20.4, 52.65, 20.2, 53.4]], ["C", [20.05, 53.8, 20.05, 54.15]], ["C", [20.05, 54.55, 19.95, 54.9]], ["C", [19.8, 56.2, 19.7, 57.6]], ["C", [19.6, 59, 19.3, 60.3]], ["C", [19.1, 61.05, 19.15, 61.6]], ["C", [19.2, 62.2, 19, 63.05]], ["C", [18.6, 64.8, 18.55, 66.75]], ["C", [18.5, 68.7, 17.95, 70.5]], ["C", [17.7, 71.9, 17.65, 73.4]], ["C", [17.6, 74.8, 16.6, 75.55]], ["C", [16.3, 75.7, 15.85, 75.8]], ["C", [15.5, 75.9, 15, 76]], ["L", [13.55, 76]], ["C", [12.6, 76, 11.85, 75.8]], ["C", [11.1, 75.65, 10.7, 75.1]], ["C", [10.2, 74.5, 10.2, 73.8]], ["C", [10.2, 73.1, 10, 72.3]], ["C", [9.65, 71.25, 9.6, 70]], ["C", [9.55, 68.8, 9.3, 67.7]], ["C", [9.3, 66.9, 9.2, 66.6]], ["C", [9.1, 66, 9.1, 65.4]], ["C", [9.1, 64.8, 9, 64.2]], ["C", [8.6, 62.85, 8.55, 61.25]], ["C", [8.5, 59.7, 8.2, 58.3]], ["C", [8.1, 57.8, 8.1, 57.35]], ["C", [8.1, 56.9, 8, 56.4]], ["C", [7.8, 55.5, 7.75, 54.55]], ["C", [7.7, 53.5, 7.45, 52.55]], ["C", [7.45, 52.3, 7.4, 52.1]], ["C", [7.35, 51.9, 7.35, 51.7]], ["C", [7.2, 50.9, 7.2, 50.15]], ["C", [7.2, 49.4, 7, 48.6]], ["C", [6.5, 46.45, 6.55, 43.8]], ["C", [6.6, 41.2, 6.6, 38.6]], ["L", [6.6, 30.9]], ["C", [6.6, 29.8, 6.6, 28.8]], ["C", [6.6, 27.8, 7.1, 27.1]], ["C", [7.55, 26.5, 8.5, 26.3]], ["C", [8.7, 26.2, 8.9, 26.25]], ["C", [9.1, 26.3, 9.3, 26.2]], ["L", [17, 26.2]], ["C", [18.2, 26.2, 19.25, 26.3]]]; __motifs["@"] = [["M", [39.8, 51]], ["C", [39.3, 51.1, 38.9, 51.2]], ["C", [38.5, 51.3, 38, 51.5]], ["C", [36.1, 52.3, 34.3, 53.8]], ["C", [33.8, 54.2, 33.3, 54.8]], ["C", [32.8, 55.4, 32.4, 55.9]], ["C", [30.7, 58.4, 29.7, 61.2]], ["C", [29.6, 62.1, 29.2, 63.4]], ["C", [29, 64.6, 29.15, 66.45]], ["C", [29.3, 68.3, 29.7, 69.2]], ["C", [30.5, 71.2, 31.75, 72.4]], ["C", [33, 73.6, 35.1, 74.2]], ["C", [36.8, 74.7, 38.75, 74.25]], ["C", [40.7, 73.8, 41.8, 73.1]], ["C", [44.6, 71.4, 46.2, 68.95]], ["C", [47.8, 66.5, 48.8, 63]], ["C", [48.9, 62.5, 49, 62]], ["C", [49.1, 61.5, 49.2, 61]], ["C", [49.4, 60.2, 49.3, 59.1]], ["C", [49.2, 58, 49, 57.3]], ["C", [48.3, 54.8, 46.95, 53.3]], ["C", [45.6, 51.8, 43.1, 51]], ["C", [42.6, 50.8, 41.9, 50.85]], ["C", [41.2, 50.9, 40.5, 50.9]], ["C", [40.3, 51, 40.15, 50.95]], ["C", [40, 50.9, 39.8, 51]], ["M", [41.7, 32.3]], ["C", [40.9, 32.3, 40.05, 32.3]], ["C", [39.2, 32.3, 38.5, 32.5]], ["C", [37.8, 32.7, 37.15, 32.65]], ["C", [36.5, 32.6, 35.9, 32.8]], ["C", [34.4, 33.2, 32.95, 33.55]], ["C", [31.5, 33.9, 30.1, 34.4]], ["C", [25.9, 36.2, 22.8, 38.95]], ["C", [19.7, 41.7, 17.4, 45.4]], ["C", [16.2, 47.4, 15.45, 49.65]], ["C", [14.7, 51.9, 13.9, 54.4]], ["C", [13.8, 54.9, 13.8, 55.3]], ["C", [13.8, 55.7, 13.6, 56.2]], ["C", [13.3, 57.6, 13.2, 59.35]], ["C", [13.1, 61.1, 13.15, 62.9]], ["C", [13.2, 64.7, 13.45, 66.4]], ["C", [13.7, 68.1, 14, 69.3]], ["C", [14.4, 70.7, 14.7, 71.95]], ["C", [15, 73.2, 15.6, 74.5]], ["C", [17.8, 79.6, 21.55, 83.2]], ["C", [25.3, 86.8, 30.4, 89]], ["C", [32, 89.6, 33.65, 89.95]], ["C", [35.3, 90.3, 37.1, 90.8]], ["C", [38, 91, 38.95, 91]], ["C", [39.9, 91, 40.8, 91.2]], ["L", [42.2, 91.2]], ["C", [42.6, 91.3, 43.35, 91.3]], ["C", [44.1, 91.3, 44.6, 91.1]], ["L", [45.3, 91.1]], ["C", [45.8, 91, 46.4, 91]], ["C", [47, 91, 47.5, 90.8]], ["C", [48.3, 90.6, 48.9, 90.6]], ["C", [49.5, 90.6, 50.2, 90.4]], ["C", [51.3, 90.1, 52.3, 89.9]], ["C", [53.3, 89.7, 54.2, 89.3]], ["C", [54.8, 89, 55.4, 88.7]], ["C", [56, 88.4, 56.6, 88.2]], ["C", [57.6, 87.9, 58.2, 87.5]], ["C", [59, 87, 59.7, 86.6]], ["C", [60.4, 86.2, 61.1, 85.7]], ["C", [61.8, 85.2, 62.45, 84.65]], ["C", [63.1, 84.1, 63.9, 83.6]], ["C", [64.7, 83.2, 66.3, 83]], ["C", [67.9, 82.8, 69.1, 83.1]], ["C", [69.7, 83.3, 70.2, 83.4]], ["C", [70.7, 83.5, 70.9, 84]], ["C", [71.1, 84.2, 71, 84.55]], ["C", [70.9, 84.9, 70.8, 85.1]], ["C", [70.5, 85.7, 70.15, 86.1]], ["C", [69.8, 86.5, 69.4, 87]], ["C", [69, 87.5, 68.6, 87.9]], ["C", [68.2, 88.3, 67.7, 88.8]], ["C", [67.2, 89.2, 66.85, 89.65]], ["C", [66.5, 90.1, 66, 90.5]], ["C", [64.9, 91.3, 63.8, 92.05]], ["C", [62.7, 92.8, 61.5, 93.6]], ["C", [58, 95.9, 53.7, 97.2]], ["C", [52.9, 97.5, 52.1, 97.7]], ["C", [51.3, 97.9, 50.5, 98.1]], ["C", [49.4, 98.4, 48.35, 98.45]], ["C", [47.3, 98.5, 46.2, 98.8]], ["C", [45.7, 98.8, 45.3, 98.8]], ["C", [44.9, 98.8, 44.4, 98.9]], ["C", [43.9, 99, 42.65, 99.05]], ["C", [41.4, 99.1, 40.8, 98.9]], ["L", [38.9, 98.9]], ["C", [38, 98.7, 37, 98.65]], ["C", [36, 98.6, 35.1, 98.4]], ["C", [33.7, 98, 32.4, 97.8]], ["C", [31.1, 97.6, 29.9, 97.1]], ["C", [24.5, 95.3, 20.1, 92.5]], ["C", [19.1, 91.9, 18.2, 91.2]], ["C", [17.3, 90.5, 16.4, 89.7]], ["C", [16.2, 89.5, 16.05, 89.35]], ["C", [15.9, 89.2, 15.7, 89]], ["C", [13.7, 87.4, 11.9, 85]], ["C", [11.3, 84.2, 10.6, 83.35]], ["C", [9.9, 82.5, 9.4, 81.6]], ["C", [8, 79.6, 7, 77.3]], ["C", [6, 75, 5.2, 72.4]], ["C", [4.7, 71.1, 4.55, 69.75]], ["C", [4.4, 68.4, 4, 67]], ["C", [4, 66.4, 3.95, 65.85]], ["C", [3.9, 65.3, 3.8, 64.7]], ["L", [3.8, 64]], ["C", [3.6, 63.4, 3.6, 62.3]], ["C", [3.6, 61.2, 3.8, 60.6]], ["L", [3.8, 58.8]], ["C", [4, 57.9, 4.05, 56.9]], ["C", [4.1, 55.9, 4.3, 55.1]], ["C", [4.4, 54.7, 4.4, 54.45]], ["C", [4.4, 54.2, 4.5, 53.8]], ["C", [4.9, 52.6, 5.15, 51.35]], ["C", [5.4, 50.1, 5.9, 49]], ["C", [7, 46.4, 8.15, 44.2]], ["C", [9.3, 42, 10.8, 39.9]], ["C", [11.3, 39.1, 12, 38.3]], ["C", [12.7, 37.5, 13.4, 36.7]], ["L", [14.2, 35.9]], ["C", [14.5, 35.5, 14.9, 35.15]], ["C", [15.3, 34.8, 15.8, 34.4]], ["C", [16, 34.2, 16.3, 33.9]], ["C", [16.6, 33.6, 16.9, 33.4]], ["C", [18.3, 32.3, 19.65, 31.35]], ["C", [21, 30.4, 22.4, 29.5]], ["C", [24.4, 28.3, 26.55, 27.5]], ["C", [28.7, 26.7, 31, 25.9]], ["C", [32.4, 25.4, 33.95, 25.25]], ["C", [35.5, 25.1, 37.1, 24.7]], ["C", [37.9, 24.6, 38.75, 24.55]], ["C", [39.6, 24.5, 40.4, 24.5]], ["C", [47.7, 24.3, 53.1, 26.1]], ["C", [58.5, 27.9, 63, 30.7]], ["C", [63.8, 31.2, 64.55, 31.85]], ["C", [65.3, 32.5, 66.1, 33]], ["C", [66.3, 33.2, 66.5, 33.4]], ["C", [66.7, 33.6, 66.9, 33.8]], ["C", [68.1, 34.7, 69, 35.9]], ["C", [69.3, 36.4, 69.7, 36.75]], ["C", [70.1, 37.1, 70.5, 37.6]], ["C", [71.4, 38.9, 72.25, 40.25]], ["C", [73.1, 41.6, 73.8, 43]], ["C", [74.5, 44.5, 74.95, 46.15]], ["C", [75.4, 47.8, 75.9, 49.5]], ["C", [76.1, 50.1, 76.05, 50.65]], ["C", [76, 51.2, 76.1, 51.9]], ["C", [76.3, 52.5, 76.4, 53.85]], ["C", [76.5, 55.2, 76.3, 56]], ["C", [76.1, 56.6, 76.25, 57.15]], ["C", [76.4, 57.7, 76.2, 58.2]], ["C", [76.1, 58.6, 76.1, 59]], ["C", [76.1, 59.4, 76, 59.8]], ["C", [75.8, 60.6, 75.7, 61.3]], ["C", [75.6, 62, 75.4, 62.7]], ["C", [75.3, 63, 75.25, 63.35]], ["C", [75.2, 63.7, 75.1, 64]], ["C", [74.4, 66.1, 73.5, 68.2]], ["C", [73.2, 69, 72.8, 69.65]], ["C", [72.4, 70.3, 71.9, 71]], ["C", [69.5, 74.8, 66.3, 77.65]], ["C", [63.1, 80.5, 58.8, 82.3]], ["C", [57.8, 82.8, 56.55, 83.15]], ["C", [55.3, 83.5, 53.95, 83.6]], ["C", [52.6, 83.7, 51.25, 83.55]], ["C", [49.9, 83.4, 48.9, 82.8]], ["C", [48.4, 82.5, 47.95, 82.15]], ["C", [47.5, 81.8, 47.1, 81.4]], ["C", [46.7, 80.9, 46.3, 80.45]], ["C", [45.9, 80, 45.1, 79.8]], ["C", [44.5, 79.7, 44, 80.2]], ["C", [43.2, 80.7, 42.6, 81.15]], ["C", [42, 81.6, 41.3, 82.1]], ["C", [39.6, 83.2, 36.65, 83.7]], ["C", [33.7, 84.2, 31.2, 83.4]], ["C", [26.6, 82, 23.9, 79.1]], ["C", [21.2, 76.2, 19.7, 71.7]], ["C", [19.5, 71, 19.4, 70.25]], ["C", [19.3, 69.5, 19.1, 68.7]], ["L", [19.1, 67.4]], ["C", [18.9, 66.6, 19.1, 65.8]], ["L", [19.1, 64.9]], ["C", [19.1, 64.5, 19.15, 64.15]], ["C", [19.2, 63.8, 19.2, 63.4]], ["C", [19.4, 62.3, 19.55, 61.3]], ["C", [19.7, 60.3, 20, 59.3]], ["C", [20.8, 57.1, 21.55, 55.15]], ["C", [22.3, 53.2, 23.4, 51.5]], ["C", [24.1, 50.5, 24.85, 49.6]], ["C", [25.6, 48.7, 26.4, 47.8]], ["C", [26.6, 47.5, 27.2, 47.1]], ["C", [27.4, 46.9, 27.5, 46.75]], ["C", [27.6, 46.6, 27.8, 46.4]], ["C", [28.4, 46, 28.7, 45.7]], ["C", [30.1, 44.7, 31.6, 43.85]], ["C", [33.1, 43, 34.9, 42.4]], ["C", [35.5, 42.2, 36.15, 42.05]], ["C", [36.8, 41.9, 37.4, 41.7]], ["L", [38.1, 41.7]], ["C", [38.9, 41.5, 40.3, 41.45]], ["C", [41.7, 41.4, 42.6, 41.6]], ["C", [43.2, 41.8, 43.8, 41.85]], ["C", [44.4, 41.9, 44.9, 42.1]], ["C", [47.3, 42.9, 49.1, 44.2]], ["C", [49.7, 44.7, 50.3, 45.35]], ["C", [50.9, 46, 51.7, 46.2]], ["C", [52.2, 46.4, 52.6, 46.05]], ["C", [53, 45.7, 53.2, 45.5]], ["C", [53.6, 44.9, 53.9, 44.35]], ["C", [54.2, 43.8, 54.9, 43.4]], ["C", [55.1, 43.2, 55.45, 43.2]], ["C", [55.8, 43.2, 56.1, 43.1]], ["L", [56.7, 43.1]], ["C", [57.2, 43, 57.85, 43]], ["C", [58.5, 43, 59, 43.1]], ["L", [59.6, 43.1]], ["C", [60.2, 43.3, 60.7, 43.5]], ["C", [61.2, 43.7, 61.4, 44.2]], ["C", [61.6, 44.7, 61.5, 45.35]], ["C", [61.4, 46, 61.3, 46.4]], ["C", [60.9, 47.6, 60.7, 48.85]], ["C", [60.5, 50.1, 60.1, 51.2]], ["C", [59.9, 51.9, 59.8, 52.55]], ["C", [59.7, 53.2, 59.5, 54]], ["C", [58.8, 56.3, 58.3, 58.8]], ["C", [57.8, 61.3, 57.1, 63.6]], ["C", [56.9, 64.2, 56.8, 64.85]], ["C", [56.7, 65.5, 56.5, 66.1]], ["C", [56.1, 67.2, 55.9, 68.4]], ["C", [55.7, 69.6, 55.4, 70.8]], ["C", [55.3, 71.2, 55.2, 71.75]], ["C", [55.1, 72.3, 55.2, 72.8]], ["C", [55.4, 73.9, 55.8, 74.4]], ["C", [56.2, 74.9, 57.3, 75.1]], ["C", [58.1, 75.3, 58.7, 75]], ["C", [59.2, 75, 59.7, 74.7]], ["C", [61.7, 73.9, 63.2, 72.3]], ["C", [64.7, 70.7, 65.8, 68.9]], ["C", [66.6, 67.5, 67.1, 65.85]], ["C", [67.6, 64.2, 68.1, 62.5]], ["C", [68.3, 61.8, 68.35, 61.15]], ["C", [68.4, 60.5, 68.6, 59.7]], ["L", [68.6, 59.2]], ["C", [68.7, 58.5, 68.7, 57.75]], ["C", [68.7, 57, 68.7, 56.2]], ["C", [68.7, 52.8, 67.8, 50.2]], ["C", [67.6, 49.6, 67.55, 49.1]], ["C", [67.5, 48.6, 67.3, 48.1]], ["C", [65.3, 43.3, 62.2, 40]], ["C", [59.1, 36.7, 54.3, 34.7]], ["C", [52.3, 33.9, 49.7, 33.2]], ["C", [49.2, 33, 48.75, 33]], ["C", [48.3, 33, 47.8, 32.9]], ["C", [46.4, 32.5, 44.9, 32.4]], ["C", [43.4, 32.3, 41.7, 32.3]]]; __motifs["#"] = [["M", [33.55, 59.05]], ["C", [33.6, 58, 33.2, 57.4]], ["C", [32.5, 56.3, 30.75, 56.3]], ["C", [29, 56.3, 27.3, 56.3]], ["C", [27.1, 56.5, 26.75, 56.4]], ["C", [26.4, 56.3, 26.2, 56.4]], ["C", [24.9, 56.7, 24.3, 57.6]], ["C", [24, 58.1, 23.95, 58.65]], ["C", [23.9, 59.2, 23.7, 59.9]], ["C", [23.4, 61.2, 23.25, 62.55]], ["C", [23.1, 63.9, 22.8, 65.2]], ["C", [22.7, 65.8, 22.75, 66.6]], ["C", [22.8, 67.4, 23, 67.8]], ["C", [23.5, 68.6, 24.65, 68.75]], ["C", [25.8, 68.9, 27.2, 68.9]], ["C", [27.7, 68.9, 28.2, 68.95]], ["C", [28.7, 69, 29.1, 68.8]], ["C", [29.5, 68.7, 29.85, 68.8]], ["C", [30.2, 68.9, 30.6, 68.7]], ["C", [31.6, 68.4, 32.05, 67.55]], ["C", [32.5, 66.7, 32.7, 65.55]], ["C", [32.9, 64.4, 32.95, 63.2]], ["C", [33, 62, 33.3, 60.9]], ["C", [33.5, 60.1, 33.55, 59.05]], ["M", [46.5, 34.7]], ["C", [46.2, 36, 46.1, 37.45]], ["C", [46, 38.9, 45.7, 40.2]], ["C", [45.6, 40.7, 45.6, 41.7]], ["C", [45.4, 42.3, 45.2, 43.65]], ["C", [45, 45, 45.2, 45.8]], ["C", [45.5, 46.9, 46.15, 47.1]], ["C", [46.8, 47.3, 47.9, 47.5]], ["C", [48.2, 47.6, 48.6, 47.55]], ["C", [49, 47.5, 49.2, 47.5]], ["C", [49.6, 47.6, 49.9, 47.55]], ["C", [50.2, 47.5, 50.5, 47.7]], ["C", [51.8, 48.1, 51.95, 49.25]], ["C", [52.1, 50.4, 52.1, 52.1]], ["C", [52.1, 52.8, 52.15, 53.45]], ["C", [52.2, 54.1, 52, 54.6]], ["C", [51.7, 55.7, 50.95, 56]], ["C", [50.2, 56.3, 49.2, 56.3]], ["C", [48.2, 56.3, 47.15, 56.25]], ["C", [46.1, 56.2, 45.1, 56.5]], ["C", [44.1, 56.8, 43.65, 57.55]], ["C", [43.2, 58.3, 43.05, 59.35]], ["C", [42.9, 60.4, 42.8, 61.55]], ["C", [42.7, 62.7, 42.5, 63.7]], ["C", [42.4, 64.1, 42.35, 64.55]], ["C", [42.3, 65, 42.2, 65.5]], ["L", [42.2, 66.1]], ["C", [42.2, 66.2, 42.15, 66.35]], ["C", [42.1, 66.5, 42.1, 66.7]], ["C", [42.3, 67.3, 42.45, 67.75]], ["C", [42.6, 68.2, 43.1, 68.5]], ["C", [43.9, 69, 45.3, 68.85]], ["C", [46.7, 68.7, 47.7, 69.1]], ["C", [48.8, 69.6, 49.1, 71.3]], ["L", [49.1, 72.2]], ["C", [49.2, 72.7, 49.2, 73.35]], ["C", [49.2, 74, 49.1, 74.5]], ["L", [49.1, 75.3]], ["C", [49, 75.6, 49, 75.9]], ["C", [49, 76.2, 48.8, 76.5]], ["C", [48.4, 77.4, 47.3, 77.55]], ["C", [46.2, 77.7, 44.8, 77.7]], ["C", [44.4, 77.7, 44, 77.7]], ["C", [43.6, 77.7, 43.3, 77.8]], ["L", [42.7, 77.8]], ["C", [41.2, 78.1, 40.6, 79]], ["C", [40.1, 79.8, 40.05, 81.05]], ["C", [40, 82.3, 39.7, 83.5]], ["C", [39.2, 85.6, 39.05, 87.85]], ["C", [38.9, 90.1, 38.4, 92.3]], ["C", [38.2, 93.1, 38.15, 93.9]], ["C", [38.1, 94.7, 37.95, 95.4]], ["C", [37.8, 96.1, 37.4, 96.6]], ["C", [37, 97.1, 36.2, 97.4]], ["C", [35.7, 97.6, 35.05, 97.55]], ["C", [34.4, 97.5, 33.8, 97.5]], ["C", [32.4, 97.5, 30.9, 97.45]], ["C", [29.4, 97.4, 28.9, 96.5]], ["C", [28.5, 96, 28.55, 94.7]], ["C", [28.6, 93.4, 28.8, 92.7]], ["C", [29.3, 90.9, 29.4, 89]], ["C", [29.5, 87.1, 29.9, 85.3]], ["C", [30, 84.8, 30, 84.4]], ["C", [30, 84, 30.1, 83.5]], ["C", [30.2, 83.1, 30.2, 82.75]], ["C", [30.2, 82.4, 30.3, 82]], ["C", [30.6, 80.5, 30.4, 79.4]], ["C", [30.2, 78.3, 28.8, 77.9]], ["C", [28.3, 77.7, 27.7, 77.7]], ["C", [27.1, 77.7, 26.4, 77.7]], ["C", [25.1, 77.7, 23.85, 77.75]], ["C", [22.6, 77.8, 21.8, 78.3]], ["C", [21, 79, 20.9, 80.15]], ["C", [20.8, 81.3, 20.5, 82.5]], ["C", [20.3, 83.1, 20.35, 83.7]], ["C", [20.4, 84.3, 20.2, 84.9]], ["C", [19.7, 86.9, 19.6, 88.95]], ["C", [19.5, 91, 19, 93]], ["C", [18.7, 94.1, 18.6, 94.95]], ["C", [18.5, 95.8, 18, 96.6]], ["C", [17.5, 97.4, 16.2, 97.45]], ["C", [14.9, 97.5, 13.6, 97.5]], ["C", [13.1, 97.5, 12.6, 97.55]], ["C", [12.1, 97.6, 11.7, 97.5]], ["C", [11.2, 97.3, 10.85, 97.35]], ["C", [10.5, 97.4, 10.2, 97.2]], ["C", [9.4, 96.7, 9.3, 95.65]], ["C", [9.2, 94.6, 9.4, 93.5]], ["C", [9.5, 93.1, 9.5, 92.75]], ["C", [9.5, 92.4, 9.6, 92.1]], ["C", [10, 90.4, 10.1, 88.55]], ["C", [10.2, 86.7, 10.6, 85]], ["C", [10.7, 84.5, 10.7, 84.1]], ["C", [10.7, 83.7, 10.8, 83.2]], ["C", [11, 82.4, 11.15, 81.1]], ["C", [11.3, 79.8, 11, 79]], ["C", [10.7, 78.2, 9.9, 77.95]], ["C", [9.1, 77.7, 8, 77.7]], ["C", [7.6, 77.7, 7.15, 77.75]], ["C", [6.7, 77.8, 6.3, 77.7]], ["C", [6.1, 77.7, 5.8, 77.65]], ["C", [5.5, 77.6, 5.3, 77.6]], ["C", [3.8, 77.3, 3.5, 76]], ["C", [3.3, 75.5, 3.3, 74.9]], ["C", [3.3, 74.3, 3.3, 73.6]], ["C", [3.3, 72.4, 3.35, 71.2]], ["C", [3.4, 70, 4.1, 69.5]], ["C", [4.7, 69.1, 5.65, 69]], ["C", [6.6, 68.9, 7.65, 68.9]], ["C", [8.7, 68.9, 9.7, 68.9]], ["C", [10.7, 68.9, 11.5, 68.6]], ["C", [12.3, 68.3, 12.7, 67.45]], ["C", [13.1, 66.6, 13.3, 65.55]], ["C", [13.5, 64.5, 13.6, 63.35]], ["C", [13.7, 62.2, 13.9, 61.2]], ["C", [14, 60.7, 14.15, 59.75]], ["C", [14.3, 58.8, 14.2, 58.3]], ["C", [13.9, 57.1, 13.2, 56.7]], ["C", [12.3, 56.2, 10.8, 56.35]], ["C", [9.3, 56.5, 8.2, 56.2]], ["C", [6.7, 55.7, 6.4, 54.3]], ["C", [6.4, 53.3, 6.3, 52.8]], ["C", [6.1, 52, 6.3, 51.1]], ["C", [6.5, 50.5, 6.45, 49.85]], ["C", [6.4, 49.2, 6.6, 48.7]], ["C", [7.1, 47.6, 8.55, 47.55]], ["C", [10, 47.5, 11.6, 47.5]], ["L", [13, 47.5]], ["C", [14.1, 47.3, 14.75, 47.05]], ["C", [15.4, 46.8, 15.9, 45.8]], ["C", [16.2, 45, 16.25, 44.05]], ["C", [16.3, 43.1, 16.5, 42.2]], ["C", [17, 40, 17.15, 37.75]], ["C", [17.3, 35.5, 17.8, 33.4]], ["C", [18.1, 32.1, 18.15, 30.8]], ["C", [18.2, 29.5, 18.9, 28.7]], ["C", [19.2, 28.1, 20.2, 27.9]], ["C", [20.4, 27.8, 20.7, 27.85]], ["C", [21, 27.9, 21.2, 27.7]], ["C", [22, 27.7, 22.95, 27.65]], ["C", [23.9, 27.6, 24.8, 27.65]], ["C", [25.7, 27.7, 26.4, 27.9]], ["C", [27.1, 28.1, 27.4, 28.6]], ["C", [27.8, 29.2, 27.75, 30.5]], ["C", [27.7, 31.8, 27.5, 32.6]], ["C", [27.3, 33.5, 27.2, 34.45]], ["C", [27.1, 35.4, 26.9, 36.4]], ["C", [26.5, 38.1, 26.4, 39.95]], ["C", [26.3, 41.8, 25.9, 43.5]], ["C", [25.7, 44.2, 25.75, 45.05]], ["C", [25.8, 45.9, 26.1, 46.4]], ["C", [26.5, 47.2, 27.9, 47.4]], ["C", [28.4, 47.5, 28.95, 47.5]], ["C", [29.5, 47.5, 30, 47.5]], ["C", [31.4, 47.5, 32.8, 47.45]], ["C", [34.2, 47.4, 34.8, 46.6]], ["C", [35.3, 46, 35.45, 45.15]], ["C", [35.6, 44.3, 35.8, 43.5]], ["C", [35.8, 42.7, 35.9, 42.4]], ["C", [36.3, 40.6, 36.4, 38.7]], ["C", [36.5, 36.8, 36.9, 35.1]], ["C", [37.1, 34.5, 37.05, 33.95]], ["C", [37, 33.4, 37.2, 32.9]], ["C", [37.4, 31.8, 37.5, 30.7]], ["C", [37.6, 29.6, 38.1, 28.8]], ["C", [38.7, 27.8, 40.25, 27.75]], ["C", [41.8, 27.7, 43.5, 27.7]], ["C", [44.4, 27.7, 45.3, 27.8]], ["C", [46.2, 27.9, 46.6, 28.5]], ["C", [47.1, 29.3, 47, 30.75]], ["C", [46.9, 32.2, 46.7, 33.2]], ["C", [46.6, 33.6, 46.6, 33.95]], ["C", [46.6, 34.3, 46.5, 34.7]]]; __motifs["$"] = [["M", [30.7, 73.8]], ["L", [30.7, 82.5]], ["C", [30.7, 84.1, 30.8, 85.3]], ["C", [30.9, 86.5, 32.15, 87]], ["C", [32.8, 87.2, 33.3, 87.1]], ["C", [36.05, 86.4, 38.05, 84.85]], ["C", [40, 83.3, 41, 80.9]], ["C", [41.2, 80.4, 41.25, 79.9]], ["C", [41.3, 79.4, 41.5, 78.9]], ["C", [41.7, 78.1, 41.55, 77.1]], ["C", [41.4, 76.1, 41.2, 75.5]], ["C", [40.55, 73.2, 39.15, 72.05]], ["C", [37.8, 70.9, 35.8, 70]], ["C", [35, 69.6, 34.25, 69.35]], ["C", [33.4, 69.1, 32.25, 69.1]], ["C", [31.85, 69.3, 31.55, 69.4]], ["C", [31.3, 69.5, 31.1, 69.9]], ["C", [30.6, 70.6, 30.65, 71.7]], ["C", [30.7, 72.8, 30.7, 73.8]], ["M", [16.3, 47.1]], ["C", [16.9, 48.5, 17.8, 49.25]], ["C", [18.7, 50, 19.8, 50.7]], ["C", [20.3, 51, 21.4, 51.5]], ["C", [22.5, 52, 23.3, 51.8]], ["C", [24.7, 51.5, 24.8, 50.1]], ["C", [24.9, 48.7, 24.9, 47]], ["L", [24.9, 40.7]], ["C", [24.9, 39.6, 24.9, 38.7]], ["C", [24.9, 37.8, 24.4, 37.2]], ["C", [23.8, 36.5, 22.5, 36.5]], ["C", [22.4, 36.6, 22.25, 36.55]], ["C", [22.1, 36.5, 21.9, 36.6]], ["C", [21.1, 36.8, 20.7, 37]], ["C", [19.1, 37.7, 17.9, 38.95]], ["C", [16.7, 40.2, 16.2, 42]], ["L", [15.9, 43.5]], ["C", [15.7, 44, 15.8, 44.75]], ["C", [15.9, 45.5, 16, 45.9]], ["C", [16.2, 46.3, 16.2, 46.55]], ["C", [16.2, 46.8, 16.3, 47.1]], ["M", [40.9, 45.5]], ["C", [39.5, 45.1, 39.1, 44]], ["C", [38.7, 42.9, 38.25, 41.6]], ["C", [36.9, 38.8, 34.8, 37.4]], ["C", [33.95, 36.9, 32.65, 36.7]], ["C", [31.4, 36.5, 30.9, 37.8]], ["C", [30.6, 38.45, 30.65, 39.6]], ["C", [30.7, 40.7, 30.7, 41.7]], ["L", [30.7, 49.3]], ["C", [30.7, 50.4, 30.7, 51.45]], ["C", [30.7, 52.5, 31.2, 53.2]], ["C", [31.95, 54.3, 33.3, 54.55]], ["C", [34.7, 54.8, 36.15, 55.3]], ["C", [38.7, 56.1, 41.15, 56.9]], ["C", [43.6, 57.8, 45.7, 59.2]], ["C", [48.55, 60.9, 50.7, 63.15]], ["C", [52.85, 65.4, 54.2, 68.6]], ["C", [54.6, 69.6, 54.9, 70.6]], ["C", [55.15, 71.6, 55.3, 72.7]], ["C", [55.5, 73.2, 55.4, 73.7]], ["C", [55.3, 74.2, 55.5, 74.7]], ["C", [55.7, 76, 55.65, 77.95]], ["C", [55.6, 79.9, 55.3, 81]], ["C", [55.15, 81.85, 55, 82.45]], ["C", [54.85, 83.1, 54.6, 83.8]], ["C", [53.3, 86.8, 51.55, 89.25]], ["C", [49.8, 91.7, 47.2, 93.5]], ["C", [46.75, 93.9, 46.1, 94.35]], ["C", [45.5, 94.7, 44.9, 95.1]], ["C", [43.4, 96.1, 41.65, 96.7]], ["C", [39.9, 97.3, 38.15, 97.9]], ["C", [37.2, 98.2, 36.3, 98.4]], ["C", [35.3, 98.55, 34.4, 98.7]], ["C", [34.05, 98.8, 33.65, 98.8]], ["C", [33.3, 98.8, 32.9, 98.9]], ["C", [31.2, 99.5, 30.8, 101]], ["C", [30.8, 101.2, 30.75, 101.4]], ["C", [30.7, 101.6, 30.7, 101.8]], ["C", [30.6, 102, 30.65, 102.45]], ["C", [30.7, 102.8, 30.7, 103.2]], ["C", [30.7, 104.2, 30.65, 105.15]], ["C", [30.6, 106.1, 30.2, 106.75]], ["C", [29.7, 107.3, 28.4, 107.5]], ["C", [28.2, 107.6, 27.85, 107.55]], ["C", [27.4, 107.5, 27.2, 107.5]], ["C", [26.4, 107.3, 25.85, 107.05]], ["C", [25.3, 106.85, 25.1, 106]], ["C", [24.8, 105.1, 24.85, 104.15]], ["C", [24.9, 103.2, 24.9, 102.3]], ["C", [24.9, 101.4, 24.7, 100.65]], ["C", [24.5, 99.9, 23.8, 99.4]], ["C", [23.1, 98.9, 22.25, 98.8]], ["C", [21.4, 98.7, 20.6, 98.55]], ["C", [19.2, 98.2, 17.9, 97.9]], ["C", [16.6, 97.6, 15.4, 97.1]], ["C", [10.5, 95.1, 7.45, 92.2]], ["C", [4.4, 89.2, 2.4, 84.3]], ["C", [1.9, 83.2, 1.6, 82.1]], ["C", [1.3, 81, 1.05, 79.9]], ["C", [0.8, 79.5, 0.85, 79.2]], ["C", [0.9, 78.9, 0.7, 78.5]], ["C", [0.5, 77.9, 0.45, 77.1]], ["C", [0.4, 76.3, 0.6, 75.7]], ["C", [0.9, 75, 1.7, 74.7]], ["C", [2.2, 74.5, 2.9, 74.45]], ["C", [3.6, 74.4, 4.4, 74.4]], ["L", [9.35, 74.4]], ["C", [10.1, 74.4, 10.95, 74.4]], ["C", [11.8, 74.4, 12.4, 74.6]], ["C", [13.2, 74.9, 13.6, 75.5]], ["C", [14, 76.1, 14.2, 76.85]], ["C", [14.4, 77.6, 14.6, 78.45]], ["C", [14.8, 79.3, 15.1, 80]], ["C", [15.9, 81.9, 17.1, 83.25]], ["C", [18.3, 84.6, 20, 85.7]], ["C", [20.4, 86.05, 21.05, 86.3]], ["C", [21.7, 86.6, 22.35, 86.75]], ["C", [23, 86.9, 23.65, 86.8]], ["C", [24.3, 86.7, 24.6, 86.05]], ["C", [24.8, 85.5, 24.85, 84.7]], ["C", [24.9, 83.95, 24.9, 83.1]], ["L", [24.9, 71.1]], ["C", [24.9, 69.9, 24.85, 68.85]], ["C", [24.8, 67.8, 24.3, 67.1]], ["C", [23.8, 66.3, 22.95, 66.1]], ["C", [22.1, 65.9, 21.2, 65.6]], ["C", [20.1, 65.2, 18.95, 64.9]], ["C", [17.8, 64.6, 16.7, 64.2]], ["C", [13.8, 63.1, 11.2, 61.75]], ["C", [8.6, 60.4, 6.6, 58.4]], ["L", [5.5, 57.3]], ["C", [4.6, 56.1, 3.85, 54.75]], ["C", [3.15, 53.4, 2.6, 51.7]], ["C", [2.3, 50.75, 2.15, 49.85]], ["C", [2, 48.85, 1.8, 47.9]], ["L", [1.8, 45.8]], ["C", [1.8, 44.4, 1.9, 43.25]], ["C", [2, 42.1, 2.3, 41]], ["C", [2.6, 40, 2.8, 39.1]], ["C", [3, 38.15, 3.5, 37.3]], ["C", [4.9, 34.15, 7.15, 31.95]], ["C", [9.4, 29.8, 12.2, 28.05]], ["C", [13.8, 27.1, 15.65, 26.5]], ["C", [17.4, 25.85, 19.4, 25.3]], ["C", [20.5, 25, 21.7, 24.9]], ["C", [22.9, 24.8, 23.7, 24.3]], ["C", [24.4, 23.75, 24.55, 23.2]], ["C", [24.7, 22.6, 24.9, 21.55]], ["C", [25, 21.2, 24.95, 20.75]], ["C", [24.9, 20.3, 25, 19.85]], ["C", [25.1, 19.4, 25.05, 19.1]], ["C", [25, 18.8, 25.1, 18.4]], ["C", [25.5, 17.35, 26.2, 17.1]], ["C", [26.4, 17, 26.7, 17.05]], ["C", [27, 17.1, 27.2, 16.9]], ["C", [28.4, 16.9, 29.2, 17.15]], ["C", [30.05, 17.35, 30.4, 18.2]], ["C", [30.6, 18.8, 30.6, 19.2]], ["L", [30.6, 20.3]], ["C", [30.7, 20.6, 30.65, 21.05]], ["C", [30.6, 21.45, 30.7, 21.85]], ["C", [30.9, 22.7, 31.05, 23.3]], ["C", [31.2, 23.85, 31.85, 24.3]], ["C", [32.4, 24.7, 33.15, 24.8]], ["C", [33.95, 24.9, 34.7, 25.1]], ["C", [35.8, 25.5, 36.9, 25.7]], ["C", [38.05, 25.95, 39.1, 26.4]], ["C", [43.6, 28.15, 46.65, 30.85]], ["C", [49.6, 33.5, 51.4, 37.9]], ["C", [51.9, 39, 52.4, 40.7]], ["C", [52.5, 41, 52.5, 41.3]], ["C", [52.5, 41.6, 52.65, 41.9]], ["C", [52.85, 42.35, 52.95, 43]], ["C", [53.05, 43.6, 52.85, 44.1]], ["C", [52.5, 45.1, 51.7, 45.4]], ["C", [51.1, 45.6, 50.4, 45.6]], ["C", [49.7, 45.6, 48.95, 45.6]], ["L", [44.1, 45.6]], ["C", [43.3, 45.6, 42.5, 45.65]], ["C", [41.6, 45.7, 40.9, 45.5]]]; __motifs["%"] = [["M", [58.6, 39.9]], ["C", [59.9, 37.8, 61.05, 35.55]], ["C", [62.2, 33.3, 63.5, 31.2]], ["C", [64, 30.3, 64.5, 29.4]], ["C", [65, 28.5, 65.5, 27.7]], ["C", [65.7, 27.3, 65.95, 26.9]], ["C", [66.2, 26.5, 66.5, 26.3]], ["C", [67.3, 25.7, 67.8, 25.5]], ["C", [68.2, 25.5, 69, 25.3]], ["C", [70.3, 25.3, 71.75, 25.3]], ["C", [73.2, 25.3, 73.7, 26.1]], ["C", [73.9, 26.3, 73.9, 26.75]], ["C", [73.9, 27.2, 73.8, 27.5]], ["C", [73.6, 28.2, 73.25, 28.8]], ["C", [72.9, 29.4, 72.6, 30]], ["C", [71.7, 31.6, 70.8, 33.2]], ["C", [69.9, 34.8, 69, 36.3]], ["C", [68.4, 37.3, 67.9, 38.3]], ["C", [67.4, 39.3, 66.8, 40.3]], ["C", [64.3, 44.4, 62.15, 48.65]], ["C", [60, 52.9, 57.5, 57]], ["C", [56.7, 58.2, 56.1, 59.45]], ["C", [55.5, 60.7, 54.8, 61.9]], ["C", [53.9, 63.4, 53.1, 64.95]], ["C", [52.3, 66.5, 51.4, 68]], ["C", [51.1, 68.5, 50.9, 68.9]], ["C", [50.7, 69.3, 50.5, 69.8]], ["C", [49.5, 71.3, 48.7, 72.9]], ["C", [47.9, 74.5, 47, 76]], ["C", [46.6, 76.5, 46.4, 77.05]], ["C", [46.2, 77.6, 45.9, 78.1]], ["C", [44.8, 80, 43.75, 81.9]], ["C", [42.7, 83.8, 41.6, 85.7]], ["C", [41.3, 86.2, 41.05, 86.75]], ["C", [40.8, 87.3, 40.5, 87.8]], ["C", [39.4, 89.5, 38.5, 91.35]], ["C", [37.6, 93.2, 36.5, 94.9]], ["C", [35.8, 96, 35.3, 97.15]], ["C", [34.8, 98.3, 33.7, 98.9]], ["C", [33.3, 99.2, 32.4, 99.35]], ["C", [31.5, 99.5, 30.5, 99.55]], ["C", [29.5, 99.6, 28.6, 99.5]], ["C", [27.7, 99.4, 27.3, 99.1]], ["C", [26.4, 98.6, 26.8, 97.3]], ["C", [27, 96.6, 27.4, 95.85]], ["C", [27.8, 95.1, 28.2, 94.6]], ["C", [29.7, 92, 31.1, 89.3]], ["C", [32.5, 86.6, 34.1, 84]], ["C", [34.6, 83.3, 34.9, 82.6]], ["C", [35.2, 81.9, 35.6, 81.1]], ["C", [38.2, 76.9, 40.4, 72.7]], ["C", [42.6, 68.5, 45.1, 64.3]], ["C", [45.9, 62.9, 46.6, 61.55]], ["C", [47.3, 60.2, 48.1, 58.9]], ["C", [48.4, 58.4, 48.55, 58]], ["C", [48.7, 57.6, 49, 57.2]], ["C", [49.8, 55.8, 50.55, 54.45]], ["C", [51.3, 53.1, 52.1, 51.7]], ["C", [52.3, 51.2, 52.5, 50.85]], ["C", [52.7, 50.5, 53, 50]], ["C", [54.1, 48.2, 55.1, 46.25]], ["C", [56.1, 44.3, 57.2, 42.5]], ["C", [57.6, 41.9, 57.9, 41.25]], ["C", [58.2, 40.6, 58.6, 39.9]], ["M", [17.6, 48.8]], ["C", [17.8, 49.4, 17.75, 50]], ["C", [17.7, 50.6, 17.8, 51.1]], ["C", [18.3, 52.8, 18.8, 54.1]], ["C", [19.3, 55.4, 20.4, 56.3]], ["C", [21.5, 57, 22.6, 57.4]], ["C", [23.2, 57.4, 23.5, 57.5]], ["C", [23.7, 57.5, 23.95, 57.55]], ["C", [24.2, 57.6, 24.4, 57.5]], ["C", [24.8, 57.4, 25.1, 57.4]], ["C", [25.4, 57.4, 25.8, 57.3]], ["C", [27.6, 56.7, 28.7, 55.2]], ["C", [29.4, 54.2, 29.75, 53.05]], ["C", [30.1, 51.9, 30.4, 50.5]], ["C", [30.6, 50, 30.5, 49.45]], ["C", [30.4, 48.9, 30.6, 48.2]], ["C", [30.7, 47.8, 30.75, 46.85]], ["C", [30.8, 45.9, 30.6, 45.4]], ["L", [30.6, 43.1]], ["C", [30.5, 42.7, 30.55, 42.35]], ["C", [30.6, 42, 30.5, 41.6]], ["C", [30.3, 40.9, 30.2, 40.2]], ["C", [30.1, 39.5, 29.9, 38.9]], ["C", [29.7, 38.2, 29.5, 37.55]], ["C", [29.3, 36.9, 28.9, 36.3]], ["C", [28.4, 35.7, 27.9, 35.15]], ["C", [27.4, 34.6, 26.8, 34.2]], ["C", [25.6, 33.5, 23.6, 33.7]], ["C", [23.4, 33.8, 22.7, 33.8]], ["C", [22.4, 34, 22.05, 34.1]], ["C", [21.7, 34.2, 21.4, 34.4]], ["C", [20.2, 35.2, 19.5, 36.35]], ["C", [18.8, 37.5, 18.3, 38.9]], ["C", [18, 39.9, 17.9, 40.9]], ["C", [17.8, 41.9, 17.6, 43]], ["L", [17.6, 44.9]], ["C", [17.4, 45.5, 17.45, 46.85]], ["C", [17.5, 48.2, 17.6, 48.8]], ["M", [40.65, 43.35]], ["C", [40.6, 43.7, 40.7, 43.9]], ["L", [40.7, 45]], ["C", [40.9, 46.1, 40.7, 47.1]], ["C", [40.5, 47.7, 40.6, 48.25]], ["C", [40.7, 48.8, 40.6, 49.3]], ["C", [40.5, 49.8, 40.5, 50.2]], ["C", [40.5, 50.6, 40.3, 51.1]], ["C", [40.1, 52.2, 39.85, 53.25]], ["C", [39.6, 54.3, 39.2, 55.3]], ["C", [37.9, 58.5, 35.7, 60.7]], ["C", [33.5, 62.9, 30.2, 64]], ["C", [29.3, 64.3, 28.45, 64.45]], ["C", [27.6, 64.6, 26.6, 64.8]], ["C", [26.1, 64.9, 25.7, 64.85]], ["C", [25.3, 64.8, 24.8, 64.9]], ["C", [24.4, 65.1, 23.45, 65.05]], ["C", [22.5, 65, 22.1, 64.9]], ["C", [21.6, 64.7, 21.25, 64.75]], ["C", [20.9, 64.8, 20.4, 64.7]], ["C", [19.4, 64.5, 18.5, 64.3]], ["C", [17.6, 64.1, 16.8, 63.7]], ["C", [10.9, 61.1, 8.7, 54.7]], ["C", [8.4, 53.9, 8.25, 53]], ["C", [8.1, 52.1, 7.9, 51.3]], ["C", [7.8, 50.8, 7.8, 49.8]], ["C", [7.6, 49.4, 7.65, 48.95]], ["C", [7.7, 48.5, 7.6, 48.1]], ["L", [7.6, 47]], ["C", [7.2, 46, 7.6, 44.9]], ["L", [7.6, 44.1]], ["C", [7.6, 43.6, 7.65, 43.15]], ["C", [7.7, 42.7, 7.7, 42.2]], ["C", [8, 40.9, 8.2, 39.6]], ["C", [8.4, 38.3, 8.9, 37.1]], ["C", [10.3, 33.6, 12.35, 31.15]], ["C", [14.4, 28.7, 17.9, 27.3]], ["C", [18.8, 26.9, 19.75, 26.7]], ["C", [20.7, 26.5, 21.8, 26.3]], ["C", [22.1, 26.2, 22.75, 26.3]], ["C", [23.4, 26.4, 23.6, 26.2]], ["C", [29.8, 26.1, 33.4, 28.55]], ["C", [37, 31, 38.9, 35.3]], ["C", [39.3, 36.1, 39.55, 37.05]], ["C", [39.8, 38, 40, 38.9]], ["C", [40.1, 39.2, 40.1, 39.5]], ["C", [40.1, 39.8, 40.2, 40.1]], ["C", [40.4, 40.7, 40.4, 41.35]], ["C", [40.4, 42, 40.6, 42.7]], ["C", [40.7, 43, 40.65, 43.35]], ["M", [82.2, 80.3]], ["C", [82.4, 79.8, 82.35, 78.7]], ["C", [82.3, 77.6, 82.2, 77.1]], ["L", [82.2, 76.4]], ["C", [82.1, 75.9, 82.1, 75.5]], ["C", [82.1, 75.1, 82, 74.7]], ["C", [81.7, 73.3, 81.4, 72.1]], ["C", [81.1, 70.9, 80.4, 69.8]], ["C", [80, 69.3, 79.5, 68.85]], ["C", [79, 68.4, 78.5, 68.1]], ["C", [77.8, 67.6, 77.05, 67.5]], ["C", [76.3, 67.4, 75.2, 67.4]], ["C", [75, 67.6, 74.8, 67.55]], ["C", [74.6, 67.5, 74.4, 67.6]], ["C", [73.6, 67.8, 73, 68.2]], ["C", [71.8, 68.9, 71.1, 70.05]], ["C", [70.4, 71.2, 69.9, 72.6]], ["C", [69.6, 73.4, 69.5, 74.4]], ["C", [69.4, 75.4, 69.2, 76.4]], ["L", [69.2, 78.3]], ["C", [69, 78.9, 69.05, 80.2]], ["C", [69.1, 81.5, 69.2, 82.1]], ["C", [69.4, 82.6, 69.3, 83.15]], ["C", [69.2, 83.7, 69.4, 84.2]], ["C", [69.9, 86.1, 70.25, 87.35]], ["C", [70.6, 88.6, 71.8, 89.8]], ["C", [72.3, 90.3, 73.55, 90.9]], ["C", [74.8, 91.5, 76, 91.3]], ["C", [76.3, 91.2, 76.65, 91.2]], ["C", [77, 91.2, 77.3, 91.1]], ["C", [78.1, 90.8, 78.8, 90.35]], ["C", [79.5, 89.9, 79.9, 89.3]], ["C", [80.5, 88.5, 80.9, 87.6]], ["C", [81.3, 86.7, 81.7, 85.6]], ["C", [82, 84.7, 82, 83.65]], ["C", [82, 82.6, 82.2, 81.5]], ["L", [82.2, 80.3]], ["M", [91.8, 73.5]], ["C", [92, 74.2, 92, 74.95]], ["C", [92, 75.7, 92.2, 76.5]], ["C", [92.2, 77, 92.25, 77.4]], ["C", [92.3, 77.8, 92.3, 78.3]], ["C", [92.4, 78.8, 92.4, 79.45]], ["C", [92.4, 80.1, 92.3, 80.6]], ["L", [92.3, 81.5]], ["C", [92.2, 81.9, 92.2, 82.3]], ["C", [92.2, 82.7, 92.1, 83.1]], ["C", [92, 83.6, 92, 84.05]], ["C", [92, 84.5, 91.8, 85]], ["C", [91.6, 86.1, 91.35, 87.1]], ["C", [91.1, 88.1, 90.7, 89]], ["C", [88, 95.5, 81.2, 97.9]], ["C", [80.5, 98.1, 79.75, 98.2]], ["C", [79, 98.3, 78.2, 98.5]], ["C", [77.7, 98.6, 77.3, 98.55]], ["C", [76.9, 98.5, 76.4, 98.6]], ["C", [76, 98.8, 75.05, 98.75]], ["C", [74.1, 98.7, 73.8, 98.5]], ["C", [73.3, 98.4, 72.9, 98.45]], ["C", [72.5, 98.5, 72.1, 98.4]], ["C", [71.2, 98.2, 70.35, 98]], ["C", [69.5, 97.8, 68.7, 97.4]], ["C", [65.3, 96, 63.35, 93.7]], ["C", [61.4, 91.4, 60.3, 87.9]], ["C", [60, 87.1, 59.85, 86.25]], ["C", [59.7, 85.4, 59.5, 84.6]], ["C", [59.5, 84.3, 59.45, 84.05]], ["C", [59.4, 83.8, 59.4, 83.5]], ["C", [59.3, 83, 59.3, 82.45]], ["C", [59.3, 81.9, 59.2, 81.4]], ["L", [59.2, 80.2]], ["C", [59, 79.4, 59.2, 78.4]], ["L", [59.2, 77.5]], ["C", [59.2, 76.5, 59.3, 76.1]], ["C", [59.4, 75.6, 59.4, 74.6]], ["C", [59.7, 73.6, 59.85, 72.6]], ["C", [60, 71.6, 60.4, 70.7]], ["C", [61.9, 67, 63.9, 64.75]], ["C", [65.9, 62.5, 69.7, 61]], ["C", [70.5, 60.6, 71.45, 60.45]], ["C", [72.4, 60.3, 73.5, 60.1]], ["C", [74, 60.1, 74.45, 60.05]], ["C", [74.9, 60, 75.4, 60]], ["C", [81.3, 59.8, 84.95, 62.1]], ["C", [88.6, 64.4, 90.4, 68.5]], ["C", [90.8, 69.3, 91.05, 70.3]], ["C", [91.3, 71.3, 91.6, 72.3]], ["C", [91.7, 72.6, 91.7, 72.9]], ["C", [91.7, 73.2, 91.8, 73.5]]]; __motifs["&"] = [["M", [23.1, 67.9]], ["C", [21.1, 69.1, 19.5, 70.85]], ["C", [17.9, 72.6, 17.1, 74.9]], ["C", [17, 75.3, 16.95, 75.7]], ["C", [16.9, 76.1, 16.8, 76.6]], ["C", [16.6, 77.6, 16.8, 78.75]], ["C", [17, 79.9, 17.2, 80.6]], ["C", [18.9, 85.3, 24.2, 87]], ["C", [25.2, 87.3, 26.8, 87.35]], ["C", [28.4, 87.4, 29.5, 87.1]], ["C", [31.8, 86.5, 33.45, 85.55]], ["C", [35.1, 84.6, 36.7, 83.2]], ["C", [37.2, 82.8, 37.75, 82.1]], ["C", [38.3, 81.4, 38, 80.4]], ["C", [37.8, 79.6, 37.25, 78.95]], ["C", [36.7, 78.3, 36.2, 77.7]], ["C", [35.4, 76.6, 34.6, 75.7]], ["C", [33.8, 74.8, 33, 73.7]], ["C", [32.8, 73.5, 32.65, 73.35]], ["C", [32.5, 73.2, 32.3, 73]], ["C", [31.6, 72.1, 30.9, 71.25]], ["C", [30.2, 70.4, 29.5, 69.5]], ["C", [28.8, 68.6, 28, 67.7]], ["C", [27.2, 66.8, 25.5, 66.8]], ["C", [25.3, 66.9, 24.7, 67.1]], ["C", [24.2, 67.3, 23.85, 67.5]], ["C", [23.5, 67.7, 23.1, 67.9]], ["M", [30.4, 35.1]], ["C", [29.6, 35.3, 29.1, 35.5]], ["C", [26.6, 36.5, 25.5, 39.5]], ["C", [25.3, 40.3, 25.3, 41.3]], ["C", [25.3, 42.3, 25.5, 43.1]], ["C", [25.7, 43.6, 25.75, 44.05]], ["C", [25.8, 44.5, 26, 45]], ["C", [26.5, 46.2, 27.15, 47.15]], ["C", [27.8, 48.1, 28.5, 49.1]], ["C", [28.9, 49.6, 29.75, 50.45]], ["C", [30.6, 51.3, 31.5, 51.1]], ["C", [32.5, 50.9, 33.05, 50.45]], ["C", [33.6, 50, 34.3, 49.5]], ["C", [36.8, 47.7, 37.8, 44.4]], ["C", [38, 44, 37.95, 43.65]], ["C", [37.9, 43.3, 38.1, 42.9]], ["C", [38.3, 42.2, 38.2, 41.4]], ["C", [38.1, 40.6, 37.9, 40.1]], ["C", [36.8, 36.3, 33.5, 35.3]], ["C", [32.6, 35, 31.3, 35]], ["C", [31.1, 35.1, 30.85, 35.05]], ["C", [30.6, 35, 30.4, 35.1]], ["M", [49.15, 49]], ["C", [48.7, 50.2, 48.1, 51.3]], ["C", [47, 52.9, 45.6, 54.45]], ["C", [44.2, 56, 42.7, 57.1]], ["C", [42.2, 57.6, 41.6, 57.95]], ["C", [41, 58.3, 40.5, 58.7]], ["C", [40.2, 58.9, 39.9, 59.15]], ["C", [39.6, 59.4, 39.4, 59.7]], ["C", [38.9, 60.3, 39, 61.05]], ["C", [39.1, 61.8, 39.5, 62.3]], ["C", [39.8, 62.8, 40.2, 63.2]], ["C", [40.6, 63.6, 40.9, 64.1]], ["C", [41.9, 65.5, 42.9, 66.65]], ["C", [43.9, 67.8, 44.9, 69.1]], ["C", [45.2, 69.6, 45.95, 70]], ["C", [46.7, 70.4, 47.4, 69.9]], ["C", [48, 69.5, 48.35, 68.8]], ["C", [48.7, 68.1, 48.9, 67.25]], ["C", [49.1, 66.4, 49.3, 65.6]], ["C", [49.5, 64.8, 50, 64.2]], ["C", [50.8, 63.2, 52.7, 63.2]], ["C", [54.6, 63.2, 56.3, 63.2]], ["C", [56.9, 63.2, 57.6, 63.15]], ["C", [58.3, 63.1, 58.8, 63.3]], ["L", [59.4, 63.3]], ["C", [60.7, 63.5, 61.2, 64.2]], ["C", [61.7, 65, 61.35, 66.5]], ["C", [61, 68, 60.8, 68.8]], ["C", [60.6, 69.5, 60.45, 70.1]], ["C", [60.3, 70.7, 60.1, 71.2]], ["C", [59.4, 72.9, 58.75, 74.45]], ["C", [58.1, 76, 57.3, 77.4]], ["C", [57, 77.9, 56.3, 79]], ["C", [55.6, 80.1, 55.8, 81]], ["C", [56.2, 82.4, 57.1, 83.25]], ["C", [58, 84.1, 58.8, 85.1]], ["C", [60, 86.8, 61.4, 88.2]], ["C", [62.8, 89.6, 64, 91.3]], ["C", [64.3, 91.8, 64.7, 92.1]], ["C", [65.1, 92.4, 65.4, 92.9]], ["C", [65.9, 93.6, 66.5, 94.25]], ["C", [67.1, 94.9, 67.5, 95.7]], ["C", [67.7, 96.2, 67.55, 96.55]], ["C", [67.4, 96.9, 67.1, 97.1]], ["C", [66.4, 97.6, 65.2, 97.55]], ["C", [64, 97.5, 62.9, 97.5]], ["L", [56.8, 97.5]], ["C", [55.1, 97.5, 53.85, 97.45]], ["C", [52.6, 97.4, 51.6, 96.6]], ["C", [51.2, 96.3, 50.9, 95.95]], ["C", [50.6, 95.6, 50.3, 95.2]], ["C", [50.1, 95, 49.95, 94.8]], ["C", [49.8, 94.6, 49.6, 94.4]], ["C", [49.2, 93.9, 48.8, 93.4]], ["C", [48.4, 92.9, 47.9, 92.4]], ["C", [47.6, 92.1, 47.1, 91.75]], ["C", [46.6, 91.4, 45.8, 91.6]], ["C", [45, 91.8, 44.5, 92.2]], ["C", [44, 92.6, 43.5, 93]], ["C", [42.7, 93.5, 41.9, 94.1]], ["C", [41.1, 94.7, 40.3, 95.2]], ["C", [38.9, 96, 37.25, 96.65]], ["C", [35.6, 97.3, 33.9, 97.9]], ["C", [33.2, 98.1, 32.5, 98.2]], ["C", [31.8, 98.3, 31, 98.5]], ["C", [30.5, 98.7, 30, 98.65]], ["C", [29.5, 98.6, 29, 98.7]], ["L", [28.3, 98.7]], ["C", [27.8, 98.9, 26.85, 98.9]], ["C", [25.9, 98.9, 25.4, 98.8]], ["C", [24.9, 98.8, 24.5, 98.75]], ["C", [24.1, 98.7, 23.6, 98.7]], ["C", [22.6, 98.5, 21.6, 98.4]], ["C", [20.6, 98.3, 19.7, 98.1]], ["C", [18.4, 97.7, 17.35, 97.4]], ["C", [16.3, 97.1, 15.2, 96.6]], ["C", [12.9, 95.6, 10.85, 94.05]], ["C", [8.8, 92.5, 7.5, 90.7]], ["C", [7, 90, 6.55, 89.3]], ["C", [6.1, 88.6, 5.6, 87.8]], ["C", [5.2, 87.1, 4.95, 86.4]], ["C", [4.7, 85.7, 4.4, 84.9]], ["C", [3.9, 83.5, 3.6, 81.95]], ["C", [3.3, 80.4, 3.3, 78.6]], ["L", [3.3, 76.3]], ["C", [3.4, 76, 3.4, 75.65]], ["C", [3.4, 75.3, 3.5, 75]], ["C", [3.7, 74.2, 3.8, 73.5]], ["C", [3.9, 72.8, 4.1, 72.1]], ["C", [5.2, 68.7, 7.35, 66]], ["C", [9.5, 63.3, 12.1, 61.3]], ["C", [13.8, 60.1, 15.8, 58.8]], ["C", [16.4, 58.4, 17.05, 58.05]], ["C", [17.7, 57.7, 18, 56.9]], ["C", [18.3, 55.9, 17.6, 54.9]], ["C", [16.9, 53.9, 16.5, 53.4]], ["C", [14.7, 50.8, 13.6, 48]], ["C", [13.3, 47.3, 13.15, 46.6]], ["C", [13, 45.9, 12.8, 45.1]], ["C", [12.3, 43.4, 12.45, 41.2]], ["C", [12.6, 39, 13.1, 37.6]], ["C", [14.5, 33.4, 17.1, 30.95]], ["C", [19.7, 28.5, 23.6, 26.8]], ["C", [24.7, 26.4, 25.8, 26.2]], ["C", [26.9, 26, 28.1, 25.7]], ["C", [28.7, 25.7, 29.3, 25.65]], ["C", [29.9, 25.6, 30.5, 25.5]], ["C", [36.8, 25.4, 41.3, 27.65]], ["C", [45.8, 29.9, 48.2, 33.7]], ["C", [48.5, 34.3, 48.75, 34.9]], ["C", [49, 35.5, 49.3, 36.1]], ["C", [50.1, 38.1, 50.45, 41.05]], ["C", [50.8, 44, 50, 46.5]], ["C", [49.6, 47.8, 49.15, 49]]]; __motifs["*"] = [["M", [16.4, 29.4]], ["C", [16.5, 29, 16.4, 28.65]], ["C", [16.3, 28.3, 16.5, 27.9]], ["C", [16.8, 26.7, 17.9, 26.3]], ["C", [18.1, 26.3, 18.35, 26.25]], ["C", [18.6, 26.2, 18.9, 26.2]], ["C", [20.5, 26.1, 21.95, 26.2]], ["C", [23.4, 26.3, 23.9, 27.4]], ["C", [24.1, 27.9, 24.1, 28.6]], ["C", [24.1, 29.3, 24.1, 30.1]], ["C", [24.1, 31.2, 24.15, 32.2]], ["C", [24.2, 33.2, 24.2, 34.2]], ["C", [24.2, 35.2, 24.3, 36.05]], ["C", [24.4, 36.9, 24.9, 37.3]], ["C", [25.4, 37.6, 26.05, 37.65]], ["C", [26.7, 37.7, 27.3, 37.5]], ["C", [28.7, 37, 30.05, 36.45]], ["C", [31.4, 35.9, 32.8, 35.4]], ["C", [33.6, 35.1, 34.55, 35.1]], ["C", [35.5, 35.1, 36, 35.7]], ["C", [36.4, 36.2, 36.65, 36.75]], ["C", [36.9, 37.3, 37.1, 37.9]], ["C", [37.3, 38.4, 37.4, 38.85]], ["C", [37.5, 39.3, 37.7, 39.8]], ["C", [38, 41.2, 37.2, 41.75]], ["C", [36.4, 42.3, 35.6, 42.7]], ["C", [34.3, 43.2, 32.9, 43.65]], ["C", [31.5, 44.1, 30.2, 44.6]], ["C", [29.5, 44.9, 28.85, 45.15]], ["C", [28.2, 45.4, 28, 46.2]], ["C", [27.7, 47.1, 28.35, 47.95]], ["C", [29, 48.8, 29.4, 49.3]], ["C", [30.2, 50.4, 30.9, 51.4]], ["C", [31.6, 52.4, 32.4, 53.5]], ["C", [32.6, 53.8, 32.9, 54.3]], ["C", [33.2, 54.8, 33, 55.5]], ["C", [32.8, 56.4, 32.1, 56.95]], ["C", [31.4, 57.5, 30.7, 58]], ["C", [30.2, 58.3, 29.75, 58.7]], ["C", [29.3, 59.1, 28.7, 59.3]], ["C", [27.5, 59.7, 26.8, 58.95]], ["C", [26.1, 58.2, 25.6, 57.6]], ["C", [24.9, 56.6, 24.2, 55.65]], ["C", [23.5, 54.7, 22.7, 53.7]], ["C", [22.3, 53.1, 21.8, 52.4]], ["C", [21.3, 51.7, 20.4, 51.5]], ["C", [19.6, 51.3, 19, 52]], ["C", [18.4, 52.7, 18.1, 53.1]], ["L", [15.4, 57]], ["C", [15, 57.5, 14.75, 58]], ["C", [14.5, 58.5, 14, 58.8]], ["C", [13.6, 59.1, 13, 59.25]], ["C", [12.4, 59.4, 11.8, 59.2]], ["C", [11.2, 59, 10.7, 58.6]], ["C", [10.2, 58.2, 9.7, 57.8]], ["C", [9.2, 57.4, 8.6, 56.95]], ["C", [8, 56.5, 7.7, 55.8]], ["C", [7.5, 55.3, 7.65, 54.7]], ["C", [7.8, 54.1, 8, 53.8]], ["C", [8.7, 52.6, 9.55, 51.5]], ["C", [10.4, 50.4, 11.2, 49.3]], ["C", [11.6, 48.8, 12.25, 47.9]], ["C", [12.9, 47, 12.6, 46.1]], ["C", [12.3, 45.3, 11.6, 45]], ["C", [10.9, 44.7, 10.1, 44.4]], ["C", [8.9, 44, 7.65, 43.65]], ["C", [6.4, 43.3, 5.3, 42.8]], ["C", [4.3, 42.3, 3.5, 41.7]], ["C", [2.7, 41.1, 3.2, 39.6]], ["C", [3.3, 39.1, 3.45, 38.7]], ["C", [3.6, 38.3, 3.8, 37.8]], ["C", [4, 37.2, 4.2, 36.6]], ["C", [4.4, 36, 4.9, 35.6]], ["C", [6, 34.7, 7.4, 35.2]], ["C", [8.8, 35.7, 10.05, 36.2]], ["C", [11.3, 36.7, 12.6, 37.2]], ["C", [13.3, 37.5, 14.3, 37.65]], ["C", [15.3, 37.8, 15.8, 37.1]], ["C", [16.4, 36.3, 16.35, 34.35]], ["C", [16.3, 32.4, 16.3, 31]], ["C", [16.3, 30.6, 16.3, 30.15]], ["C", [16.3, 29.7, 16.4, 29.4]]]; __motifs["("] = [["M", [26.5, 24.45]], ["C", [27.4, 24.5, 28.05, 24.85]], ["C", [28.7, 25.15, 28.9, 25.7]], ["C", [29.1, 26.3, 28.85, 26.95]], ["C", [28.6, 27.55, 28.4, 27.9]], ["C", [27.9, 29.05, 27.4, 30.15]], ["C", [26.9, 31.35, 26.4, 32.4]], ["C", [25.3, 35.25, 24.45, 38.15]], ["C", [23.6, 41, 22.6, 43.95]], ["C", [22.1, 45.4, 21.85, 47.05]], ["C", [21.6, 48.7, 21.2, 50.25]], ["C", [20.7, 51.95, 20.6, 53.55]], ["C", [20.5, 55.2, 20.1, 56.9]], ["C", [20, 57.4, 20, 58]], ["C", [20, 58.55, 19.9, 59.1]], ["C", [19.7, 60.25, 19.7, 61.5]], ["C", [19.7, 62.85, 19.5, 63.9]], ["C", [19.3, 64.55, 19.4, 65.2]], ["C", [19.5, 65.8, 19.4, 66.35]], ["L", [19.4, 68.65]], ["C", [19.2, 69.6, 19.4, 70.55]], ["C", [19.4, 71.15, 19.35, 71.7]], ["C", [19.3, 72.3, 19.4, 72.85]], ["L", [19.4, 74.1]], ["C", [19.6, 74.75, 19.5, 75.5]], ["C", [19.4, 76.2, 19.6, 76.85]], ["C", [19.6, 77.25, 19.65, 77.55]], ["C", [19.7, 77.8, 19.7, 78.2]], ["C", [19.9, 79.15, 19.9, 80.1]], ["C", [19.9, 81.15, 20.1, 82.1]], ["C", [20.3, 83.25, 20.35, 84.2]], ["C", [20.4, 85.25, 20.6, 86.3]], ["C", [20.8, 87, 20.85, 87.75]], ["C", [20.9, 88.4, 21.1, 89.1]], ["C", [21.4, 90.4, 21.65, 91.75]], ["C", [21.9, 93, 22.3, 94.25]], ["C", [22.8, 96.25, 23.25, 98.05]], ["C", [23.7, 99.85, 24.3, 101.6]], ["C", [24.5, 102.25, 24.65, 102.75]], ["C", [24.8, 103.3, 25, 103.95]], ["C", [25.8, 105.6, 26.4, 107.4]], ["C", [27, 109.2, 27.8, 110.95]], ["C", [28.1, 111.5, 28.6, 112.65]], ["C", [29.1, 113.7, 28.8, 114.55]], ["C", [28.5, 115.2, 27.4, 115.4]], ["C", [27.2, 115.5, 27, 115.45]], ["C", [26.8, 115.4, 26.6, 115.5]], ["L", [22.6, 115.5]], ["C", [21.6, 115.5, 20.7, 115.5]], ["C", [19.8, 115.5, 19, 115.2]], ["C", [17.9, 114.75, 17.35, 113.6]], ["C", [16.8, 112.55, 16.2, 111.5]], ["C", [14.8, 109.2, 13.7, 106.7]], ["C", [12.6, 104.15, 11.5, 101.5]], ["C", [10.7, 99.85, 10.1, 98.1]], ["C", [9.5, 96.35, 9, 94.6]], ["C", [8.6, 93.65, 8.4, 92.6]], ["C", [8.2, 91.65, 7.9, 90.6]], ["L", [6.7, 85.55]], ["C", [6.3, 84, 6.2, 82.45]], ["C", [6.1, 80.95, 5.8, 79.55]], ["C", [5.7, 79.05, 5.7, 78.55]], ["C", [5.7, 78.1, 5.6, 77.65]], ["C", [5.5, 76.75, 5.45, 75.8]], ["C", [5.4, 74.95, 5.4, 74]], ["L", [5.4, 72.55]], ["C", [5.2, 72, 5.25, 71.45]], ["C", [5.3, 70.95, 5.3, 70.4]], ["C", [5.3, 69.9, 5.25, 69.4]], ["C", [5.2, 68.95, 5.4, 68.45]], ["L", [5.4, 67.4]], ["C", [5.4, 66.95, 5.4, 66.35]], ["C", [5.4, 65.7, 5.5, 65.2]], ["C", [5.5, 64.75, 5.55, 64.25]], ["C", [5.6, 63.7, 5.6, 63.2]], ["L", [6.2, 57.8]], ["C", [6.4, 56.75, 6.55, 55.75]], ["C", [6.7, 54.8, 6.9, 53.7]], ["C", [7.1, 52.8, 7.3, 51.85]], ["C", [7.5, 50.8, 7.7, 49.85]], ["C", [8.4, 47.55, 8.95, 45.15]], ["C", [9.5, 42.8, 10.4, 40.7]], ["C", [10.7, 39.95, 10.9, 39.25]], ["C", [11.1, 38.5, 11.5, 37.75]], ["C", [12.3, 35.65, 13.25, 33.6]], ["C", [14.2, 31.55, 15.3, 29.65]], ["C", [16.1, 28.4, 16.8, 27.1]], ["C", [17.5, 25.7, 18.8, 24.95]], ["C", [19.2, 24.75, 19.65, 24.7]], ["C", [20.1, 24.65, 20.6, 24.5]], ["L", [22.8, 24.5]], ["C", [23.6, 24.5, 24.6, 24.45]], ["C", [25.6, 24.4, 26.5, 24.45]]]; __motifs[")"] = [["M", [8.95, 24.5]], ["C", [9.8, 24.5, 10.6, 24.8]], ["C", [11.7, 25.3, 12.25, 26.4]], ["C", [12.8, 27.5, 13.45, 28.5]], ["C", [14.8, 30.8, 15.9, 33.35]], ["C", [17.05, 35.9, 18.1, 38.5]], ["C", [18.9, 40.2, 19.55, 41.95]], ["C", [20.1, 43.7, 20.6, 45.4]], ["C", [21.05, 46.4, 21.25, 47.4]], ["C", [21.45, 48.4, 21.75, 49.4]], ["L", [22.9, 54.5]], ["C", [23.35, 56, 23.45, 57.55]], ["C", [23.55, 59.05, 23.85, 60.5]], ["C", [23.95, 61, 23.95, 61.45]], ["C", [23.95, 61.9, 24, 62.4]], ["C", [24.1, 63.25, 24.15, 64.2]], ["C", [24.2, 65.1, 24.2, 66]], ["L", [24.2, 67.45]], ["C", [24.4, 68, 24.35, 68.55]], ["C", [24.3, 69.1, 24.3, 69.6]], ["C", [24.3, 70.1, 24.35, 70.6]], ["C", [24.4, 71.1, 24.2, 71.55]], ["L", [24.2, 72.6]], ["C", [24.2, 73.1, 24.2, 73.65]], ["C", [24.2, 74.3, 24.1, 74.8]], ["C", [24.1, 75.3, 24.05, 75.75]], ["C", [24, 76.3, 24, 76.8]], ["L", [23.45, 82.2]], ["C", [23.25, 83.3, 23.1, 84.25]], ["C", [22.9, 85.2, 22.7, 86.3]], ["C", [22.5, 87.2, 22.3, 88.15]], ["C", [22.1, 89.2, 21.9, 90.2]], ["C", [21.25, 92.45, 20.65, 94.85]], ["C", [20.1, 97.2, 19.25, 99.3]], ["C", [18.9, 100.1, 18.7, 100.75]], ["C", [18.5, 101.5, 18.1, 102.3]], ["C", [17.35, 104.4, 16.35, 106.45]], ["C", [15.45, 108.5, 14.3, 110.4]], ["C", [13.55, 111.6, 12.8, 112.95]], ["C", [12.1, 114.3, 10.8, 115.1]], ["C", [10.4, 115.25, 9.95, 115.3]], ["C", [9.5, 115.35, 9, 115.5]], ["L", [6.8, 115.5]], ["C", [6, 115.5, 5.05, 115.55]], ["C", [4, 115.6, 3.15, 115.55]], ["C", [2.2, 115.5, 1.5, 115.2]], ["C", [0.85, 114.9, 0.7, 114.3]], ["C", [0.5, 113.7, 0.75, 113.1]], ["C", [1.05, 112.5, 1.2, 112.1]], ["C", [1.7, 111, 2.2, 109.85]], ["C", [2.7, 108.7, 3.2, 107.6]], ["C", [4.3, 104.8, 5.2, 101.9]], ["C", [6, 99, 7, 96.1]], ["C", [7.5, 94.6, 7.75, 92.95]], ["C", [8, 91.3, 8.4, 89.8]], ["C", [8.9, 88.1, 9, 86.45]], ["C", [9.1, 84.8, 9.5, 83.1]], ["C", [9.6, 82.6, 9.6, 82]], ["C", [9.6, 81.5, 9.7, 80.9]], ["C", [9.9, 79.8, 9.9, 78.5]], ["C", [9.9, 77.2, 10.1, 76.1]], ["C", [10.3, 75.5, 10.2, 74.85]], ["C", [10.1, 74.2, 10.2, 73.65]], ["L", [10.2, 71.4]], ["C", [10.4, 70.5, 10.2, 69.45]], ["C", [10.2, 68.9, 10.25, 68.3]], ["C", [10.3, 67.7, 10.2, 67.2]], ["L", [10.2, 65.9]], ["C", [10, 65.25, 10.1, 64.55]], ["C", [10.2, 63.8, 10, 63.15]], ["C", [10, 62.8, 9.95, 62.5]], ["C", [9.9, 62.2, 9.9, 61.8]], ["C", [9.7, 60.9, 9.7, 59.9]], ["C", [9.7, 58.9, 9.5, 57.9]], ["C", [9.35, 56.8, 9.3, 55.8]], ["C", [9.25, 54.8, 9.05, 53.7]], ["C", [8.8, 53, 8.75, 52.3]], ["C", [8.7, 51.6, 8.5, 50.9]], ["C", [8.2, 49.6, 7.95, 48.3]], ["C", [7.7, 47, 7.3, 45.8]], ["C", [6.85, 43.8, 6.35, 42]], ["C", [5.9, 40.2, 5.3, 38.4]], ["C", [5.15, 37.8, 5, 37.25]], ["C", [4.85, 36.7, 4.6, 36.05]], ["C", [3.8, 34.4, 3.2, 32.6]], ["C", [2.65, 30.8, 1.8, 29.1]], ["C", [1.5, 28.5, 1.05, 27.4]], ["C", [0.5, 26.3, 0.85, 25.5]], ["C", [1.1, 24.8, 2.2, 24.6]], ["C", [2.4, 24.5, 2.65, 24.55]], ["C", [2.85, 24.6, 3.05, 24.5]], ["L", [7.05, 24.5]], ["C", [8, 24.5, 8.95, 24.5]]]; __motifs["_"] = [["M", [48.8, 105.4]], ["C", [49.1, 105.6, 49.45, 106.3]], ["C", [49.8, 106.9, 49.6, 107.5]], ["C", [49.4, 108.95, 48.7, 109.3]], ["C", [48.1, 109.7, 47.1, 109.75]], ["C", [46.1, 109.8, 45.1, 109.8]], ["L", [5, 109.8]], ["C", [4.1, 109.8, 3.05, 109.8]], ["C", [2, 109.8, 1.3, 109.5]], ["C", [0.2, 109, 0, 107.55]], ["C", [-0.2, 106.1, 0.9, 105.4]], ["C", [1.1, 105.2, 1.45, 105.15]], ["C", [1.8, 105.1, 2.1, 105]], ["C", [2.5, 105, 2.6, 104.9]], ["L", [45.4, 104.9]], ["C", [46.4, 104.9, 47.3, 104.9]], ["C", [48.2, 104.9, 48.8, 105.4]]]; __motifs["+"] = [["M", [34.9, 48.1]], ["C", [35.4, 48.85, 35.4, 50.15]], ["C", [35.4, 51.4, 35.4, 52.6]], ["L", [35.4, 61.65]], ["C", [35.4, 63.1, 35.45, 64.25]], ["C", [35.5, 65.35, 36, 66.2]], ["C", [36.7, 67, 38.4, 67]], ["C", [40.1, 67, 41.5, 67]], ["L", [50.3, 67]], ["C", [51.4, 67, 52.55, 67.05]], ["C", [53.7, 67.1, 54.3, 67.55]], ["C", [55.2, 68.2, 55.2, 69.65]], ["C", [55.2, 71.2, 55.2, 72.6]], ["C", [55.2, 73.5, 55.25, 74.5]], ["C", [55.3, 75.5, 55, 76.05]], ["C", [54.5, 77.3, 53.15, 77.45]], ["C", [51.8, 77.6, 50.1, 77.6]], ["L", [40.2, 77.6]], ["C", [38.8, 77.6, 37.65, 77.7]], ["C", [36.5, 77.75, 35.9, 78.55]], ["C", [35.4, 79.3, 35.4, 80.5]], ["C", [35.4, 81.8, 35.4, 83]], ["L", [35.4, 92.3]], ["C", [35.4, 93.4, 35.4, 94.55]], ["C", [35.4, 95.8, 34.9, 96.45]], ["C", [34.6, 96.85, 34.15, 97]], ["C", [33.7, 97.15, 33.2, 97.4]], ["C", [32.4, 97.6, 31.6, 97.55]], ["C", [30.8, 97.5, 30, 97.5]], ["C", [28.6, 97.5, 27.25, 97.4]], ["C", [25.95, 97.25, 25.3, 96.45]], ["C", [24.8, 95.8, 24.8, 94.45]], ["C", [24.8, 93.15, 24.8, 92]], ["L", [24.8, 82.9]], ["C", [24.8, 81.6, 24.75, 80.35]], ["C", [24.7, 79.2, 24.2, 78.35]], ["C", [23.6, 77.6, 22.3, 77.6]], ["C", [21, 77.6, 19.65, 77.6]], ["L", [9.6, 77.6]], ["C", [8.4, 77.6, 7.25, 77.5]], ["C", [6, 77.4, 5.5, 76.7]], ["C", [5.05, 75.95, 4.95, 74.95]], ["C", [4.9, 73.85, 4.9, 72.8]], ["C", [4.9, 71.1, 4.95, 69.4]], ["C", [5.05, 67.75, 6.3, 67.3]], ["C", [7.15, 67, 8.35, 67]], ["C", [9.6, 67, 10.7, 67]], ["L", [19.3, 67]], ["C", [21, 67, 22.45, 66.9]], ["C", [23.95, 66.8, 24.5, 65.65]], ["C", [24.9, 64.9, 24.85, 63.65]], ["C", [24.8, 62.5, 24.8, 61.35]], ["L", [24.8, 52.75]], ["C", [24.8, 51.7, 24.75, 50.5]], ["C", [24.7, 49.3, 25.1, 48.5]], ["C", [25.4, 47.7, 26.5, 47.3]], ["C", [26.8, 47.2, 27.4, 47.2]], ["C", [28.3, 47.2, 29.45, 47.05]], ["C", [30.6, 46.95, 31.7, 47]], ["C", [32.8, 47.05, 33.7, 47.35]], ["C", [34.6, 47.6, 34.9, 48.1]]]; __motifs["-"] = [["M", [34.4, 64.6]], ["C", [34.9, 65, 35.1, 65.85]], ["C", [35.3, 66.7, 35.35, 67.75]], ["C", [35.4, 68.8, 35.35, 69.9]], ["C", [35.3, 71, 35.3, 71.9]], ["C", [35.3, 72.7, 35.3, 73.5]], ["C", [35.3, 74.2, 35.1, 74.8]], ["C", [34.6, 75.9, 33.5, 76.05]], ["C", [32.4, 76.2, 30.9, 76.2]], ["L", [12.2, 76.2]], ["C", [10.9, 76.2, 9.1, 76.25]], ["C", [7.3, 76.3, 6.5, 75.8]], ["C", [5.9, 75.45, 5.65, 74.55]], ["C", [5.4, 73.7, 5.35, 72.65]], ["C", [5.3, 71.6, 5.35, 70.45]], ["C", [5.4, 69.35, 5.4, 68.4]], ["C", [5.4, 67.5, 5.45, 66.6]], ["C", [5.5, 65.7, 5.8, 65.2]], ["C", [6.2, 64.7, 7.1, 64.3]], ["C", [7.3, 64.3, 7.55, 64.25]], ["C", [7.8, 64.2, 8, 64.2]], ["L", [31.5, 64.2]], ["C", [32.4, 64.2, 33.15, 64.25]], ["C", [33.9, 64.3, 34.4, 64.6]]]; __motifs["="] = [["M", [9.1, 77.7]], ["L", [48, 77.7]], ["C", [48.7, 77.7, 49.5, 77.65]], ["C", [50.3, 77.55, 50.9, 77.7]], ["L", [52, 77.7]], ["C", [53.7, 77.7, 54.3, 78.2]], ["C", [55.2, 78.95, 55.2, 80.7]], ["C", [55.2, 82.5, 55.2, 84]], ["C", [55.2, 84.6, 55.25, 85.25]], ["C", [55.3, 85.85, 55.1, 86.3]], ["C", [54.6, 87.95, 53.3, 88.1]], ["C", [52, 88.2, 50, 88.2]], ["L", [10, 88.2]], ["C", [9.1, 88.2, 8.1, 88.25]], ["C", [7.1, 88.3, 6.3, 88.05]], ["C", [4.9, 87.45, 4.9, 85.7]], ["C", [4.9, 83.95, 4.9, 82]], ["C", [4.9, 81.05, 4.9, 80.1]], ["C", [4.9, 79.25, 5.4, 78.6]], ["C", [5.7, 78.1, 6.2, 78]], ["C", [6.7, 77.9, 7.4, 77.7]], ["C", [7.8, 77.65, 8.3, 77.75]], ["C", [8.8, 77.9, 9.1, 77.7]], ["M", [5.4, 57.15]], ["C", [5.8, 56.8, 6.6, 56.4]], ["C", [6.8, 56.4, 7.1, 56.35]], ["C", [7.4, 56.3, 7.6, 56.3]], ["L", [50.2, 56.3]], ["C", [51.5, 56.3, 52.6, 56.35]], ["C", [53.7, 56.4, 54.4, 56.9]], ["C", [55.2, 57.5, 55.2, 59.35]], ["C", [55.2, 61.25, 55.2, 62.7]], ["C", [55.2, 63.15, 55.25, 63.8]], ["C", [55.3, 64.4, 55.1, 64.9]], ["C", [54.8, 66, 54.1, 66.4]], ["C", [53.5, 66.8, 52.6, 66.8]], ["C", [51.7, 66.8, 50.8, 66.8]], ["L", [9.4, 66.8]], ["C", [8.4, 66.8, 7.45, 66.8]], ["C", [6.5, 66.8, 5.9, 66.4]], ["C", [4.8, 65.65, 4.85, 63.85]], ["C", [4.9, 62, 4.9, 60.3]], ["C", [4.9, 59.35, 4.95, 58.55]], ["C", [5, 57.7, 5.4, 57.15]]]; __motifs["{"] = [["M", [-0.4, 66.6]], ["C", [0.2, 65.55, 1.75, 65.15]], ["C", [3.3, 64.7, 4.3, 64]], ["C", [5.4, 63.25, 6.3, 62.25]], ["C", [7.2, 61.15, 7.7, 60]], ["C", [8.3, 58.4, 8.3, 56.2]], ["C", [8.3, 54, 8.3, 51.8]], ["L", [8.3, 41.8]], ["C", [8.3, 38.45, 8.55, 35.8]], ["C", [8.8, 33.1, 10.1, 31.1]], ["C", [12.6, 26.9, 17, 25.2]], ["C", [17.55, 25, 18.1, 24.85]], ["C", [18.7, 24.7, 19.3, 24.5]], ["C", [19.65, 24.5, 20.15, 24.55]], ["C", [20.7, 24.6, 20.9, 24.4]], ["L", [29, 24.4]], ["C", [30.15, 24.4, 31.1, 24.5]], ["C", [32.15, 24.6, 32.6, 25.2]], ["C", [33.2, 25.95, 33.15, 27.65]], ["C", [33.1, 29.3, 33.1, 30.7]], ["C", [33.1, 31.8, 33.1, 32.75]], ["C", [33.1, 33.7, 32.7, 34.35]], ["C", [32.3, 35, 31.65, 35.15]], ["C", [31, 35.3, 30.2, 35.35]], ["C", [29.4, 35.4, 28.55, 35.4]], ["C", [27.75, 35.4, 26.9, 35.6]], ["C", [23.75, 36.35, 22.7, 39.7]], ["C", [22.3, 40.9, 22.35, 42.4]], ["C", [22.4, 44, 22.4, 45.5]], ["L", [22.4, 52.7]], ["C", [22.4, 53.5, 22.45, 54.45]], ["C", [22.5, 55.4, 22.3, 56.2]], ["L", [22.3, 58.7]], ["C", [22.1, 59.45, 22.1, 60.35]], ["C", [22.1, 61.15, 21.9, 62]], ["C", [21.45, 63.35, 20.65, 64.85]], ["C", [19.9, 66.3, 18.8, 67.1]], ["C", [18.2, 67.55, 17.55, 68]], ["C", [16.8, 68.4, 16.1, 68.9]], ["C", [15.9, 69.1, 15.85, 69.25]], ["C", [15.8, 69.4, 15.65, 69.55]], ["C", [15.65, 69.75, 15.6, 70.05]], ["C", [15.55, 70.3, 15.7, 70.5]], ["C", [16, 71, 17.05, 71.6]], ["C", [18.1, 72.3, 18.6, 72.8]], ["C", [20, 73.75, 20.8, 75.3]], ["C", [21.65, 76.8, 22.1, 78.7]], ["C", [22.3, 79.4, 22.3, 80.1]], ["C", [22.3, 80.9, 22.3, 81.7]], ["L", [22.3, 83.1]], ["C", [22.5, 83.9, 22.45, 84.95]], ["C", [22.4, 86, 22.4, 86.8]], ["L", [22.4, 94.45]], ["C", [22.4, 96.75, 22.55, 98.65]], ["C", [22.7, 100.6, 23.55, 102]], ["C", [24.3, 103.05, 25.25, 103.55]], ["C", [26.2, 104, 27.75, 104.3]], ["L", [28.3, 104.3]], ["C", [28.6, 104.4, 29, 104.35]], ["C", [29.4, 104.3, 29.85, 104.4]], ["L", [30.7, 104.4]], ["C", [32.3, 104.7, 32.7, 105.4]], ["C", [33.1, 106, 33.1, 106.9]], ["C", [33.1, 107.9, 33.1, 108.9]], ["C", [33.1, 110.9, 33.1, 112.8]], ["C", [33.1, 114.7, 31.6, 115.2]], ["C", [31.1, 115.35, 30.35, 115.35]], ["C", [29.6, 115.35, 28.8, 115.35]], ["L", [23.95, 115.35]], ["C", [22.7, 115.35, 21.45, 115.4]], ["C", [20.1, 115.45, 19, 115.2]], ["C", [15.2, 114.3, 12.85, 112.15]], ["C", [10.5, 110, 9.1, 106.7]], ["C", [8.9, 106, 8.8, 105.25]], ["C", [8.7, 104.6, 8.5, 103.8]], ["C", [8.5, 103.5, 8.45, 103.2]], ["C", [8.4, 102.95, 8.4, 102.7]], ["C", [8.2, 101.7, 8.25, 100.35]], ["C", [8.3, 98.95, 8.3, 97.9]], ["L", [8.3, 86.7]], ["C", [8.3, 85.9, 8.4, 84.95]], ["C", [8.5, 83.95, 8.3, 83.2]], ["C", [8.1, 82.7, 8.2, 82.15]], ["C", [8.3, 81.7, 8.1, 81.2]], ["C", [7.6, 79.2, 6.6, 77.85]], ["C", [5.6, 76.6, 4, 75.6]], ["C", [3.2, 75.2, 2.45, 74.95]], ["C", [1.7, 74.7, 1.1, 74.45]], ["C", [0.5, 74.2, 0, 73.65]], ["C", [-0.5, 73.2, -0.7, 72.1]], ["L", [-0.7, 70.1]], ["C", [-0.7, 69.2, -0.7, 68.25]], ["C", [-0.7, 67.3, -0.4, 66.6]]]; __motifs["}"] = [["M", [14.2, 24.7]], ["C", [18, 25.6, 20.35, 27.7]], ["C", [22.7, 29.85, 24.1, 33.2]], ["C", [24.3, 33.9, 24.4, 34.6]], ["C", [24.5, 35.3, 24.7, 36.05]], ["C", [24.7, 36.35, 24.75, 36.65]], ["C", [24.8, 36.9, 24.8, 37.2]], ["C", [25, 38.15, 24.95, 39.55]], ["C", [24.9, 40.9, 24.9, 42]], ["L", [24.9, 53.15]], ["C", [24.9, 54, 24.8, 54.9]], ["C", [24.7, 55.9, 24.9, 56.7]], ["C", [25.1, 57.15, 25, 57.7]], ["C", [24.9, 58.2, 25.1, 58.7]], ["C", [25.6, 60.7, 26.6, 62]], ["C", [27.6, 63.25, 29.2, 64.3]], ["C", [30, 64.8, 30.75, 65]], ["C", [31.5, 65.2, 32.1, 65.4]], ["C", [32.7, 65.65, 33.2, 66.25]], ["C", [33.7, 66.8, 33.9, 67.8]], ["L", [33.9, 69.75]], ["C", [33.9, 70.7, 33.9, 71.6]], ["C", [33.9, 72.6, 33.6, 73.3]], ["C", [33, 74.3, 31.45, 74.75]], ["C", [29.9, 75.2, 28.9, 75.85]], ["C", [27.8, 76.6, 26.9, 77.65]], ["C", [26.05, 78.7, 25.5, 79.85]], ["C", [24.9, 81.5, 24.9, 83.7]], ["C", [24.9, 85.9, 24.9, 88.1]], ["L", [24.9, 98.1]], ["C", [24.9, 101.4, 24.65, 104.1]], ["C", [24.4, 106.8, 23.1, 108.8]], ["C", [20.6, 113, 16.2, 114.7]], ["C", [15.65, 114.9, 15.1, 115.1]], ["C", [14.5, 115.2, 13.9, 115.4]], ["C", [13.55, 115.4, 13.05, 115.35]], ["C", [12.5, 115.3, 12.3, 115.5]], ["L", [4.2, 115.5]], ["C", [3.1, 115.5, 2.1, 115.4]], ["C", [1.05, 115.3, 0.6, 114.7]], ["C", [0, 113.9, 0.05, 112.25]], ["C", [0.1, 110.6, 0.1, 109.15]], ["C", [0.1, 108.1, 0.1, 107.1]], ["C", [0.1, 106.2, 0.5, 105.5]], ["C", [0.9, 104.85, 1.55, 104.75]], ["C", [2.2, 104.6, 3, 104.55]], ["C", [3.8, 104.5, 4.65, 104.5]], ["C", [5.45, 104.5, 6.3, 104.3]], ["C", [9.45, 103.5, 10.5, 100.2]], ["C", [10.9, 98.95, 10.85, 97.45]], ["C", [10.8, 95.9, 10.8, 94.4]], ["L", [10.8, 87.2]], ["C", [10.8, 86.35, 10.75, 85.45]], ["C", [10.7, 84.5, 10.9, 83.7]], ["L", [10.9, 81.2]], ["C", [11.1, 80.4, 11.1, 79.55]], ["C", [11.1, 78.7, 11.3, 77.85]], ["C", [11.75, 76.5, 12.55, 75.05]], ["C", [13.3, 73.55, 14.4, 72.8]], ["C", [15, 72.3, 15.65, 71.85]], ["C", [16.4, 71.45, 17.1, 71]], ["C", [17.3, 70.8, 17.35, 70.65]], ["C", [17.4, 70.5, 17.6, 70.3]], ["C", [17.6, 70.1, 17.65, 69.8]], ["C", [17.7, 69.55, 17.5, 69.4]], ["C", [17.2, 68.9, 16.15, 68.25]], ["C", [15.1, 67.55, 14.6, 67.1]], ["C", [13.2, 66.1, 12.4, 64.6]], ["C", [11.55, 63.1, 11.1, 61.15]], ["C", [10.9, 60.5, 10.9, 59.75]], ["C", [10.9, 58.95, 10.9, 58.2]], ["L", [10.9, 56.8]], ["C", [10.7, 56, 10.75, 54.9]], ["C", [10.8, 53.9, 10.8, 53.05]], ["L", [10.8, 45.4]], ["C", [10.8, 43.1, 10.65, 41.2]], ["C", [10.5, 39.3, 9.65, 37.9]], ["C", [8.9, 36.8, 7.95, 36.3]], ["C", [7, 35.9, 5.45, 35.6]], ["L", [4.9, 35.6]], ["C", [4.6, 35.5, 4.2, 35.55]], ["C", [3.8, 35.6, 3.35, 35.5]], ["L", [2.5, 35.5]], ["C", [0.9, 35.2, 0.5, 34.5]], ["C", [0.1, 33.9, 0.1, 32.95]], ["C", [0.1, 31.95, 0.1, 31]], ["C", [0.1, 29, 0.1, 27.1]], ["C", [0.1, 25.2, 1.6, 24.7]], ["C", [2.1, 24.5, 2.85, 24.5]], ["C", [3.6, 24.5, 4.4, 24.5]], ["L", [9.3, 24.5]], ["C", [10.5, 24.5, 11.8, 24.45]], ["C", [13.1, 24.4, 14.2, 24.7]]]; __motifs["|"] = [["M", [16.45, 23.1]], ["C", [16.4, 25, 16.4, 26.8]], ["L", [16.4, 112.9]], ["C", [16.4, 113.4, 16.45, 114]], ["C", [16.5, 114.6, 16.4, 115.1]], ["C", [16.3, 115.4, 16.35, 115.7]], ["C", [16.4, 116, 16.3, 116.5]], ["C", [16.1, 117.6, 15.55, 118.2]], ["C", [15.2, 118.5, 14.5, 118.6]], ["C", [13.8, 118.7, 13, 118.7]], ["C", [12.2, 118.7, 11.45, 118.65]], ["C", [10.6, 118.6, 10, 118.6]], ["C", [9.25, 118.6, 8.25, 118.65]], ["C", [7.3, 118.7, 6.8, 118.2]], ["C", [6.2, 117.4, 5.9, 116]], ["L", [5.9, 27.7]], ["C", [5.9, 25.6, 5.85, 23.4]], ["C", [5.8, 21.2, 6.4, 19.9]], ["C", [6.7, 19.4, 7.45, 19.2]], ["C", [8.2, 19, 9.15, 19]], ["C", [10, 19, 10.9, 19.05]], ["C", [11.8, 19.1, 12.4, 19.1]], ["L", [14.5, 19.1]], ["C", [15.45, 19.4, 16, 20]], ["C", [16.5, 21.2, 16.45, 23.1]]]; __motifs["["] = [["M", [27.25, 24.45]], ["C", [28.2, 24.4, 29.15, 24.4]], ["C", [30.1, 24.4, 30.9, 24.5]], ["C", [31.7, 24.6, 32.1, 24.9]], ["C", [33.2, 25.7, 33.15, 27.65]], ["C", [33.1, 29.6, 33.1, 31.3]], ["C", [33.1, 32, 33.1, 32.75]], ["C", [33.1, 33.5, 32.9, 34]], ["C", [32.4, 35.3, 30.7, 35.45]], ["C", [29, 35.6, 27.05, 35.5]], ["C", [25.1, 35.4, 23.35, 35.6]], ["C", [21.6, 35.8, 21.1, 37.1]], ["C", [20.9, 37.8, 20.9, 38.75]], ["C", [20.9, 39.7, 20.9, 40.5]], ["L", [20.9, 99.9]], ["C", [20.9, 100.9, 20.95, 101.9]], ["C", [21, 102.9, 21.4, 103.5]], ["C", [22.2, 104.6, 24.2, 104.55]], ["C", [26.2, 104.5, 28, 104.5]], ["C", [28.4, 104.5, 28.85, 104.45]], ["C", [29.3, 104.4, 29.6, 104.5]], ["L", [30.7, 104.5]], ["C", [31.4, 104.7, 31.9, 104.9]], ["C", [32.4, 105.1, 32.7, 105.6]], ["C", [33.1, 106.2, 33.1, 107.15]], ["C", [33.1, 108.1, 33.1, 109]], ["C", [33.1, 111.1, 33.05, 113]], ["C", [33, 114.9, 31.4, 115.4]], ["C", [30.9, 115.6, 30.35, 115.55]], ["C", [29.8, 115.5, 29.2, 115.5]], ["L", [13.4, 115.5]], ["C", [11.9, 115.5, 10, 115.55]], ["C", [8.1, 115.6, 7.45, 114.7]], ["C", [6.9, 113.9, 6.9, 112.6]], ["C", [6.9, 111.3, 6.9, 109.9]], ["L", [6.9, 28.7]], ["C", [6.9, 27.8, 6.9, 26.95]], ["C", [6.9, 26.1, 7.3, 25.5]], ["C", [7.65, 25, 8.6, 24.6]], ["C", [9.3, 24.6, 9.45, 24.5]], ["L", [25.6, 24.5]], ["C", [26.3, 24.5, 27.25, 24.45]]]; __motifs["]"] = [["M", [2.95, 24.45]], ["C", [3.5, 24.5, 4.1, 24.5]], ["L", [19.9, 24.5]], ["C", [21.45, 24.5, 23.3, 24.45]], ["C", [25.2, 24.4, 25.85, 25.3]], ["C", [26.4, 26.1, 26.4, 27.4]], ["C", [26.4, 28.7, 26.4, 30.1]], ["L", [26.4, 111.3]], ["C", [26.4, 112.2, 26.4, 113.05]], ["C", [26.4, 113.9, 26.05, 114.5]], ["C", [25.65, 115, 24.7, 115.4]], ["C", [24, 115.4, 23.85, 115.5]], ["L", [7.7, 115.5]], ["C", [7, 115.5, 6.05, 115.55]], ["C", [5.15, 115.6, 4.15, 115.6]], ["C", [3.2, 115.6, 2.4, 115.5]], ["C", [1.6, 115.4, 1.2, 115.1]], ["C", [0.1, 114.3, 0.15, 112.35]], ["C", [0.2, 110.4, 0.2, 108.7]], ["C", [0.2, 108, 0.2, 107.25]], ["C", [0.2, 106.5, 0.4, 106]], ["C", [0.9, 104.7, 2.6, 104.55]], ["C", [4.3, 104.4, 6.25, 104.5]], ["C", [8.2, 104.6, 9.95, 104.45]], ["C", [11.7, 104.3, 12.2, 102.9]], ["C", [12.4, 102.2, 12.4, 101.25]], ["C", [12.4, 100.3, 12.4, 99.5]], ["L", [12.4, 40.1]], ["C", [12.4, 39.1, 12.35, 38.1]], ["C", [12.3, 37.1, 11.9, 36.5]], ["C", [11.1, 35.4, 9.1, 35.45]], ["C", [7.1, 35.5, 5.3, 35.5]], ["C", [4.9, 35.5, 4.45, 35.55]], ["C", [4, 35.6, 3.7, 35.5]], ["L", [2.6, 35.5]], ["C", [1.9, 35.3, 1.4, 35.1]], ["C", [0.9, 34.9, 0.6, 34.4]], ["C", [0.2, 33.8, 0.2, 32.85]], ["C", [0.2, 31.9, 0.2, 31]], ["C", [0.2, 30, 0.15, 28.95]], ["C", [0.1, 27.9, 0.2, 27]], ["C", [0.3, 26.1, 0.7, 25.5]], ["C", [1.1, 24.9, 1.9, 24.6]], ["C", [2.4, 24.4, 2.95, 24.45]]]; __motifs["\\"] = [["M", [8.55, 24.7]], ["C", [9.5, 24.9, 10.1, 25.3]], ["C", [10.9, 25.8, 11.3, 27.25]], ["C", [11.7, 28.7, 12.2, 29.8]], ["C", [13, 31.8, 13.8, 34]], ["C", [14.6, 36.2, 15.4, 38.2]], ["C", [15.6, 38.7, 15.75, 39.2]], ["C", [15.9, 39.7, 16.1, 40.2]], ["C", [16.8, 41.9, 17.35, 43.6]], ["C", [17.9, 45.3, 18.6, 47]], ["C", [19.2, 48.4, 19.65, 49.75]], ["C", [20.1, 51.1, 20.7, 52.5]], ["C", [22.6, 57.1, 24.2, 61.75]], ["C", [25.8, 66.4, 27.7, 71]], ["C", [27.9, 71.6, 28.1, 72.25]], ["C", [28.3, 72.9, 28.5, 73.5]], ["C", [29.1, 75, 29.65, 76.5]], ["C", [30.2, 78, 30.8, 79.5]], ["C", [31.1, 80.3, 31.35, 81.05]], ["C", [31.6, 81.8, 31.9, 82.6]], ["C", [33, 85.4, 34.05, 88.25]], ["C", [35.1, 91.1, 36.2, 93.9]], ["C", [36.4, 94.4, 36.65, 95.1]], ["C", [36.9, 95.8, 37.05, 96.55]], ["C", [37.2, 97.3, 37.05, 97.9]], ["C", [36.9, 98.5, 36.2, 98.8]], ["C", [35.5, 99.1, 34.55, 99.1]], ["C", [33.6, 99.1, 32.7, 99.1]], ["C", [31.3, 99.1, 29.8, 99.1]], ["C", [28.3, 99.1, 27.4, 98.6]], ["C", [26.6, 98.1, 26.25, 97.25]], ["C", [25.9, 96.4, 25.5, 95.4]], ["C", [24.8, 93.7, 24.25, 91.9]], ["C", [23.7, 90.1, 22.9, 88.3]], ["C", [22, 86.2, 21.25, 83.95]], ["C", [20.5, 81.7, 19.6, 79.6]], ["C", [19.4, 79.1, 19.25, 78.6]], ["C", [19.1, 78.1, 18.9, 77.6]], ["C", [18.2, 76, 17.65, 74.3]], ["C", [17.1, 72.6, 16.4, 71]], ["C", [16.2, 70.5, 16.1, 70.15]], ["C", [16, 69.8, 15.8, 69.4]], ["C", [15.1, 67.7, 14.55, 65.85]], ["C", [14, 64, 13.2, 62.3]], ["C", [11.2, 57.5, 9.55, 52.55]], ["C", [7.9, 47.6, 5.9, 42.8]], ["C", [5.7, 42.3, 5.55, 41.75]], ["C", [5.4, 41.2, 5.2, 40.7]], ["C", [4.4, 38.8, 3.7, 36.8]], ["C", [3, 34.8, 2.2, 32.9]], ["C", [2, 32.3, 1.8, 31.65]], ["C", [1.6, 31, 1.3, 30.4]], ["C", [1, 29.6, 0.75, 28.85]], ["C", [0.5, 28.1, 0.2, 27.3]], ["C", [0.1, 27.1, 0, 26.6]], ["C", [-0.1, 26.1, 0.1, 25.7]], ["C", [0.4, 24.8, 1.3, 24.7]], ["C", [1.5, 24.6, 1.7, 24.65]], ["C", [1.9, 24.7, 2.1, 24.5]], ["C", [3.1, 24.5, 4.25, 24.45]], ["C", [5.4, 24.4, 6.5, 24.45]], ["C", [7.6, 24.5, 8.55, 24.7]]]; __motifs[":"] = [["M", [19.05, 82.2]], ["C", [20.05, 82.2, 20.8, 82.7]], ["C", [21.4, 83.2, 21.5, 84.1]], ["C", [21.6, 85, 21.6, 86.1]], ["L", [21.6, 93.3]], ["C", [21.6, 94.4, 21.5, 95.35]], ["C", [21.4, 96.35, 20.9, 96.7]], ["C", [20.15, 97.2, 19.2, 97.3]], ["C", [18.15, 97.4, 17.1, 97.4]], ["L", [10.4, 97.4]], ["C", [9.3, 97.4, 8.3, 97.3]], ["C", [7.3, 97.2, 6.8, 96.6]], ["C", [6.3, 96, 6.2, 95.05]], ["C", [6.1, 94.1, 6.1, 93]], ["L", [6.1, 86.7]], ["C", [6.1, 85.85, 6.1, 84.8]], ["C", [6.1, 83.85, 6.5, 83.35]], ["C", [6.9, 82.6, 8, 82.2]], ["C", [8.2, 82.2, 8.45, 82.25]], ["C", [8.7, 82.3, 8.9, 82.2]], ["L", [16.8, 82.2]], ["C", [17.95, 82.2, 19.05, 82.2]], ["M", [21.5, 48.8]], ["C", [21.6, 49.7, 21.6, 50.8]], ["L", [21.6, 58]], ["C", [21.6, 59.1, 21.5, 60.05]], ["C", [21.4, 61.05, 20.9, 61.4]], ["C", [20.15, 61.9, 19.2, 62]], ["C", [18.15, 62.1, 17.1, 62.1]], ["L", [10.4, 62.1]], ["C", [9.3, 62.1, 8.3, 62]], ["C", [7.3, 61.9, 6.8, 61.3]], ["C", [6.3, 60.7, 6.2, 59.75]], ["C", [6.1, 58.8, 6.1, 57.7]], ["L", [6.1, 51.4]], ["C", [6.1, 50.55, 6.1, 49.5]], ["C", [6.1, 48.55, 6.5, 48.05]], ["C", [6.9, 47.3, 8, 46.9]], ["C", [8.2, 46.9, 8.45, 46.95]], ["C", [8.7, 47, 8.9, 46.9]], ["L", [16.8, 46.9]], ["C", [17.95, 46.9, 19.05, 46.9]], ["C", [20.05, 46.9, 20.8, 47.4]], ["C", [21.4, 47.9, 21.5, 48.8]]]; __motifs["\""] = [["M", [37.6, 32.5]], ["L", [37.6, 53.4]], ["C", [37.6, 54.4, 37.6, 55.4]], ["C", [37.6, 56.4, 37.2, 57]], ["C", [36.8, 57.8, 35.7, 58]], ["C", [35.2, 58.2, 34.6, 58.15]], ["C", [34, 58.1, 33.4, 58.1]], ["C", [32, 58.1, 30.15, 58.15]], ["C", [28.25, 58.2, 27.7, 57.3]], ["C", [27.2, 56.8, 27.15, 55.95]], ["C", [27.1, 55.1, 27.1, 54.1]], ["L", [27.1, 33.6]], ["C", [27.1, 32.2, 27.05, 30.15]], ["C", [27, 28.1, 27.5, 27.2]], ["C", [27.9, 26.7, 28.8, 26.3]], ["C", [29, 26.3, 29.3, 26.25]], ["C", [29.6, 26.2, 29.8, 26.2]], ["C", [30.6, 26.2, 31.7, 26.15]], ["C", [32.8, 26.1, 33.85, 26.15]], ["C", [34.9, 26.2, 35.75, 26.35]], ["C", [36.6, 26.5, 37, 26.9]], ["C", [37.7, 27.7, 37.65, 29.35]], ["C", [37.6, 31, 37.6, 32.5]], ["M", [18.5, 27]], ["C", [19.1, 27.9, 19.05, 29.55]], ["C", [19, 31.2, 19, 32.6]], ["L", [19, 53.4]], ["C", [19, 54.5, 19, 55.5]], ["C", [19, 56.5, 18.6, 57.1]], ["C", [18.2, 57.8, 17.1, 58]], ["C", [16.6, 58.2, 16, 58.15]], ["C", [15.4, 58.1, 14.8, 58.1]], ["C", [13.3, 58.1, 11.45, 58.15]], ["C", [9.65, 58.2, 9.1, 57.3]], ["C", [8.6, 56.8, 8.55, 55.95]], ["C", [8.5, 55.1, 8.5, 54.1]], ["L", [8.5, 33.6]], ["C", [8.5, 32.2, 8.45, 30.15]], ["C", [8.4, 28.1, 8.9, 27.2]], ["C", [9.3, 26.7, 10.2, 26.3]], ["C", [10.4, 26.3, 10.65, 26.25]], ["C", [10.9, 26.2, 11.2, 26.2]], ["C", [12, 26.2, 13.15, 26.15]], ["C", [14.3, 26.1, 15.35, 26.15]], ["C", [16.4, 26.2, 17.3, 26.4]], ["C", [18.2, 26.6, 18.5, 27]]]; __motifs[";"] = [["M", [19.55, 82.3]], ["C", [20.6, 82.4, 21.1, 83.2]], ["C", [21.6, 83.85, 21.6, 84.7]], ["C", [21.6, 85.65, 21.6, 86.6]], ["L", [21.6, 93.3]], ["C", [21.6, 95, 21.65, 97.1]], ["C", [21.7, 99.2, 21.3, 100.65]], ["C", [20.35, 104.35, 18.7, 106.8]], ["C", [17, 109.2, 14.1, 110.95]], ["C", [12.2, 112.2, 10, 112.95]], ["C", [9.6, 113.15, 9, 113.3]], ["C", [8.4, 113.5, 7.9, 113.4]], ["C", [7.1, 113.2, 6.7, 112.85]], ["C", [6.2, 112.2, 6.15, 110.6]], ["C", [6.1, 108.95, 6.5, 108]], ["C", [6.9, 107, 7.75, 106.55]], ["C", [8.6, 106, 9.4, 105.4]], ["C", [11, 104.35, 12.2, 102.05]], ["C", [12.4, 101.6, 12.75, 100.8]], ["C", [13.1, 100.05, 12.9, 99.3]], ["C", [12.6, 97.95, 11.2, 97.6]], ["C", [10.1, 97.3, 8.95, 97.4]], ["C", [7.8, 97.5, 7, 97]], ["C", [6.4, 96.5, 6.25, 95.5]], ["C", [6.1, 94.5, 6.1, 93.4]], ["L", [6.1, 86.8]], ["C", [6.1, 85.95, 6.1, 84.95]], ["C", [6.1, 84, 6.5, 83.45]], ["C", [7, 82.6, 8.1, 82.3]], ["C", [8.3, 82.3, 8.6, 82.35]], ["C", [8.9, 82.4, 9.1, 82.2]], ["L", [17.3, 82.2]], ["C", [18.5, 82.2, 19.55, 82.3]], ["M", [21.5, 48.8]], ["C", [21.6, 49.7, 21.6, 50.8]], ["L", [21.6, 58]], ["C", [21.6, 59.1, 21.5, 60.05]], ["C", [21.4, 61.05, 20.9, 61.4]], ["C", [20.15, 61.9, 19.2, 62]], ["C", [18.15, 62.1, 17.1, 62.1]], ["L", [10.4, 62.1]], ["C", [9.3, 62.1, 8.3, 62]], ["C", [7.3, 61.9, 6.8, 61.3]], ["C", [6.3, 60.7, 6.2, 59.75]], ["C", [6.1, 58.8, 6.1, 57.7]], ["L", [6.1, 51.4]], ["C", [6.1, 50.55, 6.1, 49.5]], ["C", [6.1, 48.55, 6.5, 48.05]], ["C", [6.9, 47.3, 8, 46.9]], ["C", [8.2, 46.9, 8.45, 46.95]], ["C", [8.7, 47, 8.9, 46.9]], ["L", [16.8, 46.9]], ["C", [17.95, 46.9, 19.05, 46.9]], ["C", [20.05, 46.9, 20.8, 47.4]], ["C", [21.4, 47.9, 21.5, 48.8]]]; __motifs["'"] = [["M", [18.7, 27]], ["C", [19.3, 27.9, 19.25, 29.55]], ["C", [19.2, 31.2, 19.2, 32.6]], ["L", [19.2, 53.4]], ["C", [19.2, 54.5, 19.2, 55.5]], ["C", [19.2, 56.5, 18.8, 57.1]], ["C", [18.4, 57.8, 17.3, 58]], ["C", [16.8, 58.2, 16.2, 58.15]], ["C", [15.6, 58.1, 15, 58.1]], ["C", [13.5, 58.1, 11.65, 58.15]], ["C", [9.9, 58.2, 9.3, 57.3]], ["C", [8.8, 56.8, 8.75, 55.95]], ["C", [8.7, 55.1, 8.7, 54.1]], ["L", [8.7, 33.6]], ["C", [8.7, 32.2, 8.65, 30.15]], ["C", [8.6, 28.1, 9.1, 27.2]], ["C", [9.45, 26.7, 10.4, 26.3]], ["C", [10.6, 26.3, 10.85, 26.25]], ["C", [11.1, 26.2, 11.4, 26.2]], ["C", [12.2, 26.2, 13.35, 26.15]], ["C", [14.5, 26.1, 15.55, 26.15]], ["C", [16.6, 26.2, 17.5, 26.4]], ["C", [18.4, 26.6, 18.7, 27]]]; __motifs["<"] = [["M", [55.3, 49.15]], ["C", [55.3, 49.9, 55.3, 50.7]], ["C", [55.3, 52.4, 55.4, 54.35]], ["C", [55.5, 56.3, 54.7, 57.3]], ["C", [54.3, 57.8, 53.65, 58.15]], ["C", [53, 58.5, 52.2, 58.8]], ["C", [51.1, 59.3, 49.95, 59.7]], ["C", [48.8, 60.1, 47.7, 60.6]], ["C", [43.2, 62.5, 38.65, 64.2]], ["C", [34.1, 65.9, 29.6, 67.8]], ["C", [27.9, 68.6, 26.1, 69.2]], ["C", [24.3, 69.8, 22.7, 70.6]], ["C", [22.3, 70.8, 21.6, 71.2]], ["C", [20.9, 71.6, 21.1, 72.4]], ["C", [21.3, 73.2, 22.05, 73.5]], ["C", [22.8, 73.8, 23.5, 74.1]], ["C", [24.9, 74.8, 26.45, 75.35]], ["C", [28, 75.9, 29.5, 76.5]], ["C", [33.7, 78.3, 37.85, 79.9]], ["C", [42, 81.5, 46.2, 83.2]], ["C", [47.6, 83.8, 48.85, 84.3]], ["C", [50.1, 84.8, 51.4, 85.3]], ["C", [52.2, 85.6, 52.9, 85.85]], ["C", [53.6, 86.1, 54.1, 86.6]], ["C", [55.3, 87.4, 55.3, 89.3]], ["C", [55.3, 91.2, 55.3, 93.2]], ["C", [55.3, 94, 55.35, 94.8]], ["C", [55.4, 95.6, 55.2, 96.2]], ["C", [55, 96.7, 54.75, 96.8]], ["C", [54.5, 96.9, 54, 97.2]], ["C", [52.7, 97.3, 51.7, 96.8]], ["C", [50.7, 96.3, 49.7, 95.9]], ["C", [47.9, 95.1, 46.1, 94.45]], ["C", [44.3, 93.8, 42.5, 93]], ["C", [41.1, 92.5, 39.75, 92]], ["C", [38.4, 91.5, 37, 90.9]], ["C", [32, 88.9, 27, 86.95]], ["C", [22, 85, 17, 82.9]], ["C", [15, 82.1, 13, 81.3]], ["C", [11, 80.5, 9, 79.7]], ["C", [8.1, 79.3, 7.05, 79]], ["C", [6, 78.7, 5.4, 77.9]], ["C", [4.6, 76.8, 4.65, 74.45]], ["C", [4.7, 72.1, 4.7, 70.2]], ["C", [4.7, 69.2, 4.75, 68.3]], ["C", [4.8, 67.4, 5.2, 66.9]], ["C", [5.7, 66.1, 6.65, 65.7]], ["C", [7.6, 65.3, 8.5, 64.9]], ["C", [10.2, 64.1, 12, 63.5]], ["C", [13.8, 62.9, 15.5, 62.1]], ["C", [22.4, 59.2, 29.4, 56.55]], ["C", [36.4, 53.9, 43.3, 51]], ["C", [45.4, 50.2, 47.55, 49.4]], ["C", [49.7, 48.6, 51.7, 47.7]], ["C", [52.5, 47.4, 53.5, 47.25]], ["C", [54.5, 47.1, 55, 47.9]], ["C", [55.3, 48.4, 55.3, 49.15]]]; __motifs[">"] = [["M", [10.3, 48.5]], ["C", [12.1, 49.3, 13.9, 49.95]], ["C", [15.7, 50.6, 17.5, 51.4]], ["C", [18.9, 51.9, 20.25, 52.4]], ["C", [21.6, 52.9, 23, 53.5]], ["C", [28, 55.5, 33, 57.45]], ["C", [38, 59.4, 43, 61.5]], ["C", [45, 62.3, 47, 63.1]], ["C", [49, 63.9, 51, 64.7]], ["C", [51.9, 65.1, 52.95, 65.4]], ["C", [54, 65.7, 54.6, 66.5]], ["C", [55.4, 67.6, 55.35, 69.95]], ["C", [55.3, 72.3, 55.3, 74.2]], ["C", [55.3, 75.2, 55.25, 76.1]], ["C", [55.2, 77, 54.8, 77.5]], ["C", [54.3, 78.3, 53.35, 78.7]], ["C", [52.4, 79.1, 51.5, 79.5]], ["C", [49.8, 80.3, 48, 80.9]], ["C", [46.2, 81.5, 44.5, 82.3]], ["C", [37.6, 85.2, 30.6, 87.85]], ["C", [23.6, 90.5, 16.7, 93.4]], ["C", [14.6, 94.2, 12.45, 95]], ["C", [10.3, 95.8, 8.3, 96.7]], ["C", [7.5, 97, 6.5, 97.15]], ["C", [5.5, 97.3, 5, 96.5]], ["C", [4.7, 96, 4.7, 95.25]], ["C", [4.7, 94.5, 4.7, 93.7]], ["C", [4.7, 92, 4.6, 90.05]], ["C", [4.5, 88.1, 5.3, 87.1]], ["C", [5.7, 86.6, 6.35, 86.25]], ["C", [7, 85.9, 7.8, 85.6]], ["C", [8.9, 85.1, 10.05, 84.7]], ["C", [11.2, 84.3, 12.3, 83.8]], ["C", [16.8, 81.9, 21.35, 80.2]], ["C", [25.9, 78.5, 30.4, 76.6]], ["C", [32.1, 75.8, 33.9, 75.2]], ["C", [35.7, 74.6, 37.3, 73.8]], ["C", [37.7, 73.6, 38.4, 73.2]], ["C", [39.1, 72.8, 38.9, 72]], ["C", [38.7, 71.2, 37.95, 70.9]], ["C", [37.2, 70.6, 36.5, 70.3]], ["C", [35.1, 69.6, 33.55, 69.05]], ["C", [32, 68.5, 30.5, 67.9]], ["C", [26.3, 66.1, 22.15, 64.5]], ["C", [18, 62.9, 13.8, 61.2]], ["C", [12.4, 60.6, 11.15, 60.1]], ["C", [9.9, 59.6, 8.6, 59.1]], ["C", [7.8, 58.8, 7.1, 58.55]], ["C", [6.4, 58.3, 5.9, 57.8]], ["C", [4.7, 57, 4.7, 55.1]], ["C", [4.7, 53.2, 4.7, 51.2]], ["C", [4.7, 50.4, 4.65, 49.6]], ["C", [4.6, 48.8, 4.8, 48.2]], ["C", [5, 47.7, 5.25, 47.6]], ["C", [5.5, 47.5, 6, 47.2]], ["C", [7.3, 47.1, 8.3, 47.6]], ["C", [9.3, 48.1, 10.3, 48.5]]]; __motifs["?"] = [["M", [19.9, 83.1]], ["C", [20.4, 82.5, 21.35, 82.3]], ["C", [21.55, 82.2, 21.75, 82.25]], ["C", [21.9, 82.3, 22.1, 82.2]], ["L", [30.15, 82.2]], ["C", [31.2, 82.2, 32.3, 82.2]], ["C", [33.4, 82.2, 34.05, 82.7]], ["C", [34.5, 83, 34.6, 83.55]], ["C", [34.7, 84, 34.9, 84.6]], ["L", [34.9, 85.4]], ["C", [35, 85.95, 34.95, 86.4]], ["C", [34.9, 86.9, 34.9, 87.4]], ["L", [34.9, 91.3]], ["C", [34.9, 92.05, 35, 92.7]], ["C", [35.1, 93.4, 34.9, 94]], ["L", [34.9, 95]], ["C", [34.7, 95.6, 34.6, 96.1]], ["C", [34.5, 96.6, 34.05, 96.9]], ["C", [33.4, 97.3, 32.5, 97.35]], ["C", [31.65, 97.4, 30.5, 97.4]], ["L", [23.55, 97.4]], ["C", [22.4, 97.4, 21.45, 97.3]], ["C", [20.4, 97.2, 19.9, 96.5]], ["C", [19.55, 95.9, 19.5, 94.95]], ["C", [19.45, 94, 19.45, 93]], ["L", [19.45, 86.5]], ["C", [19.45, 85.65, 19.5, 84.65]], ["C", [19.55, 83.75, 19.9, 83.1]], ["M", [50.2, 35.7]], ["C", [50.9, 36.8, 51.25, 38.1]], ["C", [51.6, 39.4, 52, 40.8]], ["C", [52.2, 41.3, 52.15, 41.75]], ["C", [52.1, 42.2, 52.2, 42.7]], ["C", [52.4, 43.2, 52.4, 44.1]], ["C", [52.4, 45, 52.2, 45.6]], ["C", [52.1, 46.1, 52.15, 46.55]], ["C", [52.2, 47, 52.1, 47.5]], ["C", [51.8, 48.8, 51.55, 49.95]], ["C", [51.3, 51.1, 50.8, 52.2]], ["C", [50, 53.9, 48.9, 55.6]], ["C", [47.8, 57.3, 46.4, 58.4]], ["L", [45.9, 58.9]], ["C", [45.1, 59.5, 44.35, 60.15]], ["C", [43.6, 60.8, 42.8, 61.4]], ["C", [41.4, 62.4, 40.05, 63.4]], ["C", [38.7, 64.4, 37.5, 65.6]], ["C", [35.5, 67.6, 34.6, 70.4]], ["C", [34.2, 71.5, 34.2, 72.95]], ["C", [34.2, 74.4, 33.6, 75.2]], ["C", [33.2, 75.6, 32.7, 75.7]], ["C", [32.2, 75.8, 31.6, 76]], ["L", [29.1, 76]], ["C", [28.2, 76, 27, 76.05]], ["C", [25.8, 76.1, 24.65, 76.05]], ["C", [23.5, 76, 22.6, 75.8]], ["C", [21.7, 75.6, 21.3, 75.1]], ["C", [20.9, 74.6, 20.85, 73.85]], ["C", [20.8, 73.1, 20.8, 72.3]], ["L", [20.8, 71.5]], ["C", [20.9, 71, 20.95, 70.5]], ["C", [21, 70, 21, 69.5]], ["C", [21.4, 68.2, 21.65, 66.95]], ["C", [21.9, 65.7, 22.4, 64.6]], ["C", [23.2, 62.7, 24.5, 60.8]], ["C", [25.8, 58.9, 27.2, 57.8]], ["L", [28.1, 56.9]], ["C", [28.8, 56.4, 29.35, 55.95]], ["C", [29.9, 55.5, 30.5, 55]], ["C", [32.1, 53.9, 33.4, 52.6]], ["C", [34.7, 51.3, 35.7, 49.6]], ["C", [36.1, 48.9, 36.4, 47.8]], ["C", [36.7, 46.7, 36.75, 45.5]], ["C", [36.8, 44.3, 36.65, 43.1]], ["C", [36.5, 41.9, 36.1, 41]], ["C", [35.9, 40.4, 35.55, 39.8]], ["C", [35.2, 39.2, 34.8, 38.7]], ["C", [34.2, 37.9, 33.2, 37.35]], ["C", [32.2, 36.8, 31.1, 36.4]], ["C", [30.7, 36.3, 30.4, 36.3]], ["C", [30.1, 36.3, 29.6, 36.2]], ["C", [29.1, 36.1, 28.45, 36.05]], ["C", [27.8, 36, 27.3, 36.1]], ["C", [26.8, 36.3, 26.3, 36.25]], ["C", [25.8, 36.2, 25.3, 36.4]], ["C", [21, 37.9, 19.2, 41.9]], ["C", [18.9, 42.7, 18.65, 43.55]], ["C", [18.4, 44.4, 18.2, 45.3]], ["C", [17.9, 46.4, 17.75, 47.25]], ["C", [17.6, 48.1, 16.8, 48.6]], ["C", [16.2, 49, 15.3, 49]], ["C", [14.4, 49, 13.5, 49]], ["L", [7.6, 49]], ["C", [6.6, 49, 5.7, 48.95]], ["C", [4.8, 48.9, 4.3, 48.5]], ["C", [3.8, 48.1, 3.6, 47.2]], ["C", [3.4, 46.3, 3.6, 45.4]], ["C", [3.7, 44.8, 3.8, 44.25]], ["C", [3.9, 43.7, 4, 43.1]], ["C", [4.3, 42, 4.6, 40.95]], ["C", [4.9, 39.9, 5.3, 38.9]], ["C", [5.5, 38.4, 5.7, 37.9]], ["C", [5.9, 37.4, 6.2, 36.9]], ["C", [7.2, 35.2, 8.1, 33.8]], ["C", [9.5, 31.8, 11.4, 30.25]], ["C", [13.3, 28.7, 15.5, 27.3]], ["C", [16.2, 26.8, 17, 26.5]], ["C", [17.8, 26.2, 18.6, 25.9]], ["C", [19.9, 25.4, 21.25, 25.2]], ["C", [22.6, 25, 24.1, 24.7]], ["C", [24.7, 24.6, 25.35, 24.55]], ["C", [26, 24.5, 26.7, 24.5]], ["C", [32.3, 24.3, 36.65, 25.5]], ["C", [41, 26.7, 44.2, 29]], ["C", [45.1, 29.7, 46.1, 30.5]], ["C", [47.1, 31.3, 47.8, 32.2]], ["C", [48.2, 32.7, 48.65, 33.25]], ["C", [49.1, 33.8, 49.4, 34.3]], ["C", [49.6, 34.7, 49.8, 35]], ["C", [50, 35.3, 50.2, 35.7]]]; __motifs[","] = [["M", [19.55, 82.3]], ["C", [20.6, 82.4, 21.1, 83.2]], ["C", [21.6, 83.85, 21.6, 84.7]], ["C", [21.6, 85.65, 21.6, 86.6]], ["L", [21.6, 93.3]], ["C", [21.6, 95, 21.65, 97.1]], ["C", [21.7, 99.2, 21.3, 100.65]], ["C", [20.35, 104.35, 18.7, 106.8]], ["C", [17, 109.2, 14.1, 110.95]], ["C", [12.2, 112.2, 10, 112.95]], ["C", [9.6, 113.15, 9, 113.3]], ["C", [8.4, 113.5, 7.9, 113.4]], ["C", [7.1, 113.2, 6.7, 112.85]], ["C", [6.2, 112.2, 6.15, 110.6]], ["C", [6.1, 108.95, 6.5, 108]], ["C", [6.9, 107, 7.75, 106.55]], ["C", [8.6, 106, 9.4, 105.4]], ["C", [11, 104.35, 12.2, 102]], ["C", [12.4, 101.6, 12.75, 100.8]], ["C", [13.1, 100.05, 12.9, 99.3]], ["C", [12.6, 97.9, 11.2, 97.6]], ["C", [10.1, 97.3, 8.95, 97.4]], ["C", [7.8, 97.5, 7, 97]], ["C", [6.4, 96.5, 6.25, 95.5]], ["C", [6.1, 94.5, 6.1, 93.4]], ["L", [6.1, 86.8]], ["C", [6.1, 85.95, 6.1, 84.95]], ["C", [6.1, 84, 6.5, 83.45]], ["C", [7, 82.6, 8.1, 82.3]], ["C", [8.3, 82.3, 8.6, 82.35]], ["C", [8.9, 82.4, 9.1, 82.2]], ["L", [17.3, 82.2]], ["C", [18.5, 82.2, 19.55, 82.3]]]; __motifs["."] = [["M", [19.05, 82.2]], ["C", [20.05, 82.2, 20.8, 82.7]], ["C", [21.4, 83.2, 21.5, 84.1]], ["C", [21.6, 85, 21.6, 86.1]], ["L", [21.6, 93.3]], ["C", [21.6, 94.4, 21.5, 95.35]], ["C", [21.4, 96.35, 20.9, 96.7]], ["C", [20.15, 97.2, 19.2, 97.3]], ["C", [18.15, 97.4, 17.1, 97.4]], ["L", [10.4, 97.4]], ["C", [9.3, 97.4, 8.3, 97.3]], ["C", [7.3, 97.2, 6.8, 96.6]], ["C", [6.3, 96, 6.2, 95.05]], ["C", [6.1, 94.1, 6.1, 93]], ["L", [6.1, 86.7]], ["C", [6.1, 85.85, 6.1, 84.8]], ["C", [6.1, 83.85, 6.5, 83.35]], ["C", [6.9, 82.6, 8, 82.2]], ["C", [8.2, 82.2, 8.45, 82.25]], ["C", [8.7, 82.3, 8.9, 82.2]], ["L", [16.8, 82.2]], ["C", [17.95, 82.2, 19.05, 82.2]]]; __motifs["/"] = [["M", [29.3, 24.6]], ["L", [32.9, 24.6]], ["C", [33.4, 24.6, 33.95, 24.55]], ["C", [34.5, 24.5, 35, 24.6]], ["L", [35.4, 24.6]], ["C", [36, 24.8, 36.45, 25]], ["C", [36.9, 25.2, 37.1, 25.65]], ["C", [37.3, 26.05, 37.2, 26.55]], ["C", [37.1, 27, 37, 27.4]], ["C", [36.8, 28.05, 36.55, 28.75]], ["C", [36.3, 29.4, 36, 30.05]], ["C", [35.8, 30.7, 35.6, 31.25]], ["C", [35.4, 31.8, 35.2, 32.35]], ["C", [34.3, 34.7, 33.5, 36.95]], ["C", [32.7, 39.2, 31.7, 41.5]], ["C", [30.9, 43.6, 30.2, 45.7]], ["C", [29.5, 47.8, 28.6, 49.9]], ["C", [28.4, 50.3, 28.35, 50.65]], ["C", [28.3, 50.95, 28.1, 51.4]], ["C", [27.3, 53.25, 26.7, 55.1]], ["C", [26.1, 56.95, 25.3, 58.9]], ["C", [24.5, 60.7, 23.9, 62.65]], ["C", [23.3, 64.6, 22.5, 66.5]], ["C", [20.5, 71.3, 18.8, 76.15]], ["C", [17.1, 81.1, 15.1, 85.9]], ["C", [14.2, 88.1, 13.45, 90.25]], ["C", [12.7, 92.45, 11.9, 94.65]], ["C", [11.4, 95.8, 11.05, 96.85]], ["C", [10.7, 98, 9.7, 98.55]], ["C", [8.9, 99.05, 7.4, 99.05]], ["C", [5.9, 99.05, 4.5, 99.05]], ["C", [3.6, 99.05, 2.65, 99.05]], ["C", [1.7, 99.05, 1, 98.75]], ["C", [0.4, 98.5, 0.2, 97.95]], ["C", [0, 97.4, 0.1, 96.7]], ["C", [0.2, 96.1, 0.45, 95.45]], ["C", [0.7, 94.75, 0.9, 94.3]], ["C", [2, 91.7, 2.9, 88.95]], ["C", [3.8, 86.15, 4.9, 83.6]], ["C", [5.2, 83, 5.35, 82.3]], ["C", [5.5, 81.7, 5.8, 81.1]], ["C", [6.5, 79.4, 7.05, 77.65]], ["C", [7.6, 75.85, 8.4, 74.05]], ["C", [8.9, 72.8, 9.35, 71.45]], ["C", [9.8, 70.2, 10.3, 68.9]], ["C", [12.3, 64, 14, 58.95]], ["C", [15.7, 54, 17.7, 49.2]], ["C", [18, 48.5, 18.15, 47.9]], ["C", [18.3, 47.3, 18.6, 46.65]], ["C", [19.2, 45.2, 19.75, 43.6]], ["C", [20.3, 42, 20.9, 40.45]], ["C", [21.2, 39.8, 21.45, 39.1]], ["C", [21.7, 38.35, 22, 37.7]], ["C", [22.8, 35.7, 23.45, 33.75]], ["C", [24.1, 31.8, 24.9, 29.8]], ["C", [25.4, 28.7, 25.85, 27.3]], ["C", [26.3, 25.85, 27.2, 25.2]], ["C", [27.5, 24.9, 28.5, 24.7]], ["C", [28.7, 24.6, 28.9, 24.65]], ["C", [29.1, 24.7, 29.3, 24.6]]]; } private static function initializeWidths():void{ __widths[" "] = 28; __widths["A"] = 65; __widths["B"] = 69; __widths["C"] = 72; __widths["D"] = 70; __widths["E"] = 61; __widths["F"] = 57; __widths["G"] = 76; __widths["H"] = 72; __widths["I"] = 26; __widths["J"] = 52; __widths["K"] = 67; __widths["L"] = 56; __widths["M"] = 87; __widths["N"] = 73; __widths["O"] = 76; __widths["P"] = 65; __widths["Q"] = 76; __widths["R"] = 69; __widths["S"] = 65; __widths["T"] = 57; __widths["U"] = 72; __widths["V"] = 61; __widths["W"] = 93; __widths["X"] = 61; __widths["Y"] = 65; __widths["Z"] = 61; __widths["a"] = 54; __widths["b"] = 59; __widths["c"] = 54; __widths["d"] = 59; __widths["e"] = 54; __widths["f"] = 30; __widths["g"] = 57; __widths["h"] = 56; __widths["i"] = 22; __widths["j"] = 22; __widths["k"] = 52; __widths["l"] = 22; __widths["m"] = 86; __widths["n"] = 55; __widths["o"] = 57; __widths["p"] = 59; __widths["q"] = 59; __widths["r"] = 33; __widths["s"] = 50; __widths["t"] = 32; __widths["u"] = 56; __widths["v"] = 50; __widths["w"] = 76; __widths["x"] = 52; __widths["y"] = 50; __widths["z"] = 48; __widths["1"] = 56; __widths["2"] = 56; __widths["3"] = 56; __widths["4"] = 56; __widths["5"] = 56; __widths["6"] = 56; __widths["7"] = 56; __widths["8"] = 56; __widths["9"] = 56; __widths["0"] = 56; __widths["!"] = 26; __widths["@"] = 80; __widths["#"] = 56; __widths["$"] = 56; __widths["%"] = 100; __widths["&"] = 63; __widths["*"] = 35; __widths["("] = 26; __widths[")"] = 26; __widths["_"] = 50; __widths["+"] = 60; __widths["-"] = 39; __widths["="] = 60; __widths["{"] = 33; __widths["}"] = 33; __widths["|"] = 22; __widths["["] = 26; __widths["]"] = 26; __widths["\\"] = 33; __widths[":"] = 28; __widths["\""] = 43; __widths[";"] = 28; __widths["'"] = 28; __widths["<"] = 60; __widths[">"] = 60; __widths["?"] = 56; __widths[","] = 28; __widths["."] = 28; __widths["/"] = 33; } } }//package org.papervision3d.typography.fonts
Section 143
//GeosansLight (org.papervision3d.typography.fonts.GeosansLight) package org.papervision3d.typography.fonts { import org.papervision3d.typography.*; public class GeosansLight extends Font3D { public static var __motifs:Object = {}; public static var __heights:Number = 111; public static var __widths:Object = {}; public static var __initialized:Boolean = false; override public function get motifs():Object{ if (!__initialized){ initialize(); }; return (__motifs); } override public function get widths():Object{ if (!__initialized){ initialize(); }; return (__widths); } override public function get height():Number{ if (!__initialized){ initialize(); }; return (__heights); } private static function initializeMotifsPunctuation():void{ __motifs[" "] = []; __motifs["!"] = [["M", [12.8, 84.6]], ["C", [11.7, 83.5, 10.3, 83.5]], ["C", [6.7, 84.1, 6.7, 87.1]], ["C", [6.7, 90.7, 10.3, 90.7]], ["C", [13.9, 90.1, 13.9, 87.1]], ["C", [13.6, 85.4, 12.8, 84.6]], ["M", [8.2, 18.9]], ["L", [8.2, 75.5]], ["L", [12.2, 75.5]], ["L", [12.2, 18.9]], ["L", [8.2, 18.9]]]; __motifs["\""] = [["M", [6.1, 17.6]], ["L", [7.1, 33.6]], ["L", [9.2, 33.6]], ["L", [10.2, 17.6]], ["L", [6.1, 17.6]], ["M", [17.3, 17.6]], ["L", [18.4, 33.6]], ["L", [20.4, 33.6]], ["L", [21.4, 17.6]], ["L", [17.3, 17.6]]]; __motifs["#"] = [["M", [36.1, 41.1]], ["L", [33.3, 52.6]], ["L", [19.3, 52.6]], ["L", [22, 41.1]], ["L", [36.1, 41.1]], ["M", [52.2, 38.7]], ["L", [39.1, 38.7]], ["L", [42.1, 26]], ["L", [39.7, 26]], ["L", [36.6, 38.7]], ["L", [22.7, 38.7]], ["L", [25.7, 26]], ["L", [23.3, 26]], ["L", [20.2, 38.7]], ["L", [6.3, 38.7]], ["L", [5.5, 41.1]], ["L", [19.6, 41.1]], ["L", [16.8, 52.6]], ["L", [4, 52.6]], ["L", [3.2, 55.1]], ["L", [16.2, 55.1]], ["L", [13.2, 67.7]], ["L", [15.6, 67.7]], ["L", [18.7, 55.1]], ["L", [32.7, 55.1]], ["L", [29.4, 68.2]], ["L", [31.9, 68.2]], ["L", [35.1, 55.1]], ["L", [48.5, 55.1]], ["L", [49.3, 52.6]], ["L", [35.7, 52.6]], ["L", [38.5, 41.1]], ["L", [51.4, 41.1]], ["L", [52.2, 38.7]]]; __motifs["$"] = [["M", [27.3, 86.9]], ["L", [27.3, 54.5]], ["C", [40.6, 59.9, 40.6, 70.8]], ["C", [40.6, 77.7, 37.5, 82]], ["C", [34.1, 86.9, 27.3, 86.9]], ["M", [14.8, 26.7]], ["C", [17.8, 23.4, 23.3, 22.6]], ["L", [23.3, 48.5]], ["C", [17.8, 46.3, 15.2, 43.8]], ["C", [11.6, 40.5, 11.6, 35.4]], ["C", [11.6, 30.2, 14.8, 26.7]], ["M", [27.3, 13.3]], ["L", [23.3, 13.3]], ["L", [23.3, 18.6]], ["C", [16.4, 18.6, 11.9, 23.4]], ["C", [7.4, 28.1, 7.4, 35]], ["C", [7.4, 42.4, 11.9, 46.7]], ["C", [15.3, 50.1, 23.3, 52.9]], ["L", [23.3, 86.9]], ["C", [11.1, 86.9, 7.7, 74.2]], ["L", [3.6, 75.6]], ["C", [5.4, 82.9, 10.6, 87]], ["C", [15.9, 91.1, 23.3, 91.1]], ["L", [23.3, 96.4]], ["L", [27.3, 96.4]], ["L", [27.3, 91]], ["C", [35.8, 91, 40.5, 85]], ["C", [44.7, 79.6, 44.7, 70.8]], ["C", [44.7, 56.9, 27.3, 50.1]], ["L", [27.3, 22.6]], ["C", [34.6, 23.6, 37.9, 29.6]], ["L", [41.7, 27.9]], ["C", [37, 18.6, 27.3, 18.6]], ["L", [27.3, 13.3]]]; __motifs["%"] = [["M", [36.7, 70.4]], ["C", [40.1, 70.4, 42.6, 72.9]], ["C", [45.1, 75.4, 45.1, 78.8]], ["C", [45.1, 82, 42.5, 84.6]], ["C", [39.9, 87, 36.7, 87]], ["C", [33.4, 87, 30.9, 84.5]], ["C", [28.4, 82.1, 28.4, 78.8]], ["C", [28.4, 75.4, 30.9, 72.9]], ["C", [33.3, 70.4, 36.7, 70.4]], ["M", [27.9, 70]], ["C", [24.3, 73.8, 24.3, 78.8]], ["C", [24.3, 83.6, 28.1, 87.4]], ["C", [31.8, 91.1, 36.7, 91.1]], ["C", [41.8, 91.1, 45.6, 87.5]], ["C", [49.2, 84.1, 49.2, 78.8]], ["C", [49.2, 73.7, 45.5, 70]], ["C", [41.8, 66.3, 36.7, 66.3]], ["C", [31.6, 66.3, 27.9, 70]], ["M", [10.9, 27.2]], ["C", [13.3, 24.7, 16.7, 24.7]], ["C", [20.1, 24.7, 22.6, 27.2]], ["C", [25.1, 29.7, 25.1, 33.1]], ["C", [25.1, 36.4, 22.6, 38.9]], ["C", [19.7, 41.3, 16.7, 41.3]], ["C", [13.4, 41.3, 10.9, 38.8]], ["C", [8.4, 36.4, 8.4, 33.1]], ["C", [8.4, 29.7, 10.9, 27.2]], ["M", [7.9, 24.3]], ["C", [4.3, 28.1, 4.3, 33.1]], ["C", [4.3, 37.9, 8.1, 41.7]], ["C", [11.8, 45.4, 16.7, 45.4]], ["C", [21.8, 45.4, 25.6, 41.8]], ["C", [29.2, 38.4, 29.2, 33.1]], ["C", [29.2, 28, 25.5, 24.3]], ["C", [21.8, 20.6, 16.7, 20.6]], ["C", [11.6, 20.6, 7.9, 24.3]], ["M", [45, 18.9]], ["L", [6.2, 90.3]], ["L", [10.2, 90.3]], ["L", [49, 18.9]], ["L", [45, 18.9]]]; __motifs["&"] = [["M", [18.1, 58.75]], ["C", [20.7, 56.8, 24.8, 54]], ["L", [40.6, 77.9]], ["C", [38.9, 79.3, 37.5, 80.25]], ["C", [36.1, 81.2, 35, 81.9]], ["C", [27.3, 86.8, 20.1, 86.8]], ["C", [14.7, 86.8, 11.3, 83.5]], ["C", [7.8, 80.3, 7.8, 75]], ["C", [7.8, 68.3, 14.2, 62]], ["C", [15.5, 60.7, 18.1, 58.75]], ["M", [18.3, 33.6]], ["C", [18.3, 29.3, 21.5, 26.3]], ["C", [24.7, 23.4, 29, 23.4]], ["C", [34.2, 23.4, 37.4, 26]], ["C", [40.5, 28.5, 40.5, 33.7]], ["C", [40.4, 35.5, 40, 36.4]], ["L", [38.6, 39]], ["C", [37.6, 40.4, 36.35, 41.55]], ["C", [35.1, 42.7, 33.7, 43.7]], ["L", [26.1, 48.8]], ["L", [19.4, 38.4]], ["C", [18.3, 36.5, 18.3, 33.6]], ["M", [28.9, 19.7]], ["C", [22.9, 19.7, 18.6, 23.7]], ["C", [14.4, 27.6, 14.4, 33.6]], ["C", [14.4, 36.8, 15.9, 39.9]], ["L", [22.9, 51]], ["L", [11.6, 59.3]], ["C", [3.7, 66.6, 3.7, 75]], ["C", [3.7, 82, 8.2, 86.3]], ["C", [12.8, 90.7, 20, 90.7]], ["C", [30.4, 90.7, 42.6, 80.9]], ["L", [48.9, 90.3]], ["L", [53.6, 90.3]], ["L", [45.7, 78.4]], ["L", [56.3, 69.8]], ["L", [54.1, 66.9]], ["L", [43.7, 75.4]], ["L", [28.1, 51.7]], ["L", [35.4, 46.7]], ["C", [44.2, 40.7, 44.2, 33.7]], ["C", [44.2, 26.9, 40, 23.3]], ["C", [35.8, 19.7, 28.9, 19.7]]]; __motifs["'"] = [["M", [6.1, 18.9]], ["L", [7.1, 34.8]], ["L", [9.3, 34.8]], ["L", [10.3, 18.9]], ["L", [6.1, 18.9]]]; __motifs["("] = [["M", [8.9, 38.2]], ["C", [9.9, 31.6, 11.35, 25.85]], ["C", [12.8, 20.1, 14.8, 14.9]], ["L", [11.3, 14.9]], ["C", [3.8, 34.9, 3.8, 55.7]], ["C", [3.8, 59.6, 4.2, 64.1]], ["C", [4.6, 68.6, 5.4, 73.7]], ["C", [5.9, 76.3, 6.25, 78]], ["C", [6.6, 79.7, 6.8, 80.7]], ["C", [7.2, 82.6, 7.45, 83.9]], ["C", [7.7, 85.2, 7.9, 86]], ["C", [8.6, 88.7, 9.45, 91.3]], ["C", [10.3, 93.9, 11.3, 96.5]], ["L", [14.8, 96.5]], ["C", [7.3, 76.7, 7.3, 55.7]], ["C", [7.3, 52.2, 7.7, 47.8]], ["C", [8.1, 43.4, 8.9, 38.2]]]; __motifs[")"] = [["M", [15, 38.1]], ["C", [13, 25.8, 8.9, 14.9]], ["L", [5.4, 14.9]], ["C", [12.9, 35.5, 12.9, 55.7]], ["C", [12.9, 59.5, 12.5, 63.9]], ["C", [12.1, 68.3, 11.3, 73.3]], ["C", [10.3, 79.6, 8.85, 85.35]], ["C", [7.4, 91.1, 5.4, 96.5]], ["L", [8.9, 96.5]], ["C", [16.4, 77.2, 16.4, 55.7]], ["C", [16.4, 51.3, 16.05, 46.95]], ["C", [15.7, 42.6, 15, 38.1]]]; __motifs["*"] = [["M", [25, 19.7]], ["C", [20, 20.8, 14.8, 27.3]], ["C", [15.7, 25.8, 15.7, 24.6]], ["L", [16.9, 17.4]], ["C", [16.9, 13.6, 14.3, 13.6]], ["C", [11.6, 14.1, 11.6, 17.4]], ["L", [12.2, 22.3]], ["L", [13.7, 27.3]], ["L", [9, 22.5]], ["C", [6.2, 19.7, 3.5, 19.7]], ["C", [1.3, 20.3, 1.3, 22.2]], ["C", [1.3, 24.6, 6, 26.4]], ["L", [9.3, 27.6]], ["L", [13.2, 28.3]], ["C", [1.3, 31.3, 1.3, 34.5]], ["C", [1.3, 36.9, 3.4, 36.9]], ["C", [6.6, 36.3, 9, 33.9]], ["L", [13.7, 29.4]], ["L", [11.8, 36]], ["C", [11.5, 36.8, 11.5, 39.2]], ["C", [11.5, 43, 14.3, 42.9]], ["C", [16.7, 42.8, 16.7, 39]], ["L", [16.2, 34.6]], ["L", [14.8, 29.4]], ["L", [19.7, 34.1]], ["C", [22.4, 36.7, 25, 36.7]], ["C", [27.3, 36.7, 27.3, 34.6]], ["C", [26.7, 31.7, 22.3, 30.1]], ["C", [21.3, 29.6, 19.55, 29.2]], ["C", [17.8, 28.8, 15.3, 28.3]], ["L", [22.7, 26]], ["C", [27.3, 23.7, 27.3, 22]], ["C", [27.1, 19.7, 25, 19.7]]]; __motifs["+"] = [["M", [31.6, 65.9]], ["L", [31.6, 61.8]], ["L", [21.4, 61.8]], ["L", [21.4, 51.6]], ["L", [16.8, 51.6]], ["L", [16.8, 61.8]], ["L", [6.6, 61.8]], ["L", [6.6, 65.9]], ["L", [16.8, 65.9]], ["L", [16.8, 76.1]], ["L", [21.4, 76.1]], ["L", [21.4, 65.9]], ["L", [31.6, 65.9]]]; __motifs[","] = [["M", [12, 83.4]], ["L", [4.6, 99.7]], ["L", [5.9, 100.6]], ["L", [15.5, 84.9]], ["L", [12, 83.4]]]; __motifs["-"] = [["M", [22.9, 61.8]], ["L", [1.8, 61.8]], ["L", [1.8, 65.9]], ["L", [22.9, 65.9]], ["L", [22.9, 61.8]]]; __motifs["."] = [["M", [5.1, 84.3]], ["C", [1.8, 84.9, 1.8, 87.6]], ["C", [1.9, 89.1, 2.8, 90]], ["C", [4, 90.9, 5.1, 90.9]], ["C", [8.4, 90.9, 8.4, 87.6]], ["C", [7.6, 84.3, 5.1, 84.3]]]; __motifs["/"] = [["M", [23.3, 17.4]], ["L", [2.3, 90.3]], ["L", [6.4, 90.3]], ["L", [27.2, 17.4]], ["L", [23.3, 17.4]]]; __motifs[":"] = [["M", [5.1, 87.6]], ["C", [5.2, 89.1, 6.1, 90]], ["C", [7.3, 90.9, 8.4, 90.9]], ["C", [11.7, 90.9, 11.7, 87.6]], ["C", [10.9, 84.3, 8.4, 84.3]], ["C", [5.1, 84.9, 5.1, 87.6]], ["M", [8.4, 54.8]], ["C", [5.1, 55.4, 5.1, 58.1]], ["C", [5.2, 59.6, 6.1, 60.5]], ["C", [7.3, 61.4, 8.4, 61.4]], ["C", [11.7, 61.4, 11.7, 58.1]], ["C", [10.9, 54.8, 8.4, 54.8]]]; __motifs[";"] = [["M", [11.5, 83.4]], ["L", [4.1, 99.7]], ["L", [5.4, 100.6]], ["L", [15, 84.9]], ["L", [11.5, 83.4]], ["M", [10.3, 54.8]], ["C", [7, 55.4, 7, 58.1]], ["C", [7.1, 59.6, 8, 60.5]], ["C", [9.2, 61.4, 10.3, 61.4]], ["C", [13.6, 61.4, 13.6, 58.1]], ["C", [12.8, 54.8, 10.3, 54.8]]]; __motifs["<"] = [["M", [28.3, 74.8]], ["L", [10.5, 64]], ["L", [28.3, 53.2]], ["L", [28.3, 48.7]], ["L", [3.2, 64]], ["L", [28.3, 79.3]], ["L", [28.3, 74.8]]]; __motifs["="] = [["M", [26.3, 68]], ["L", [3.7, 68]], ["L", [3.7, 72]], ["L", [26.3, 72]], ["L", [26.3, 68]], ["M", [26.3, 55.7]], ["L", [3.7, 55.7]], ["L", [3.7, 59.8]], ["L", [26.3, 59.8]], ["L", [26.3, 55.7]]]; __motifs[">"] = [["M", [22.3, 64]], ["L", [4.6, 74.8]], ["L", [4.6, 79.3]], ["L", [29.7, 64]], ["L", [4.6, 48.7]], ["L", [4.6, 53.2]], ["L", [22.3, 64]]]; __motifs["?"] = [["M", [22.4, 83.6]], ["C", [18.9, 84.2, 18.9, 87.1]], ["C", [19.5, 90.6, 22.4, 90.6]], ["C", [25.9, 90.6, 25.9, 87.1]], ["C", [25.3, 83.6, 22.4, 83.6]], ["M", [24.6, 17.9]], ["C", [10.1, 17.9, 4.6, 31.2]], ["L", [8.4, 32.9]], ["C", [11.3, 27.9, 14, 25.7]], ["C", [18.6, 21.9, 24.6, 21.9]], ["C", [30.4, 21.9, 34.5, 24.5]], ["C", [39.1, 27.5, 39.1, 33.1]], ["C", [39.1, 37.4, 35.6, 41.5]], ["C", [34.8, 42.5, 32.9, 44]], ["C", [31, 45.5, 28.1, 47.7]], ["L", [19.6, 54]], ["C", [12.6, 59.2, 12.6, 65.7]], ["C", [12.6, 70.2, 15.8, 72.8]], ["C", [19, 75.4, 22.9, 75.1]], ["L", [25.8, 74.9]], ["L", [28.1, 74.3]], ["C", [30.5, 73.2, 31.6, 72.1]], ["L", [29.2, 68.8]], ["C", [26.6, 70.9, 22.9, 70.9]], ["C", [20.4, 70.9, 18.7, 69.5]], ["C", [17, 68.1, 17, 65.7]], ["C", [17, 60.5, 22, 56.9]], ["L", [30.4, 50.8]], ["C", [34, 48.2, 36.1, 46.6]], ["C", [38.2, 45, 38.7, 44.3]], ["C", [43.2, 39.2, 43.2, 33.1]], ["C", [43.2, 25.6, 37.5, 21.5]], ["C", [32.4, 17.9, 24.6, 17.9]]]; __motifs["@"] = [["M", [35.9, 63.8]], ["C", [38.3, 66.5, 38.3, 70.7]], ["C", [38.3, 75.8, 35.3, 79.1]], ["C", [32.5, 82.3, 27.3, 82.3]], ["C", [18.2, 82.3, 18.2, 72.2]], ["C", [18.2, 67.6, 21.4, 64.4]], ["C", [24.7, 61.1, 29.3, 61.1]], ["C", [33.5, 61.1, 35.9, 63.8]], ["M", [39.6, 64.5]], ["C", [36.9, 58.5, 29.3, 58.5]], ["C", [23.4, 58.5, 19.4, 62.4]], ["C", [15.5, 66.3, 15.5, 72.2]], ["C", [15.5, 78.1, 18.5, 81.5]], ["C", [21.6, 85, 27.3, 85]], ["C", [35.4, 85, 38.6, 79.3]], ["C", [38.9, 81.2, 40.3, 82.9]], ["C", [42.1, 85, 45.2, 85]], ["C", [51, 85, 54, 79.8]], ["C", [56.4, 75.6, 56.4, 69.4]], ["C", [56.4, 58.8, 48.4, 51.7]], ["C", [40.7, 44.9, 29.9, 44.9]], ["C", [18.8, 44.9, 11.1, 52.3]], ["C", [3.4, 59.7, 3.4, 70.6]], ["C", [3.4, 81.3, 10, 88.5]], ["C", [17.1, 96.5, 29.8, 96.5]], ["C", [36, 96.5, 40.8, 94.6]], ["C", [45.7, 92.8, 48, 90.2]], ["L", [46.1, 88.3]], ["C", [43.7, 91.1, 38.5, 92.7]], ["C", [34, 93.9, 30, 93.9]], ["C", [19.4, 93.9, 12.7, 87.5]], ["C", [6, 81.2, 6, 70.6]], ["C", [6, 60.8, 13, 54.2]], ["C", [19.8, 47.5, 29.9, 47.5]], ["C", [39.8, 47.5, 46.6, 53.6]], ["C", [53.8, 59.9, 53.8, 69.4]], ["C", [53.8, 74.6, 51.8, 77.9]], ["C", [49.3, 82.3, 45.6, 82.3]], ["C", [43.6, 82.3, 42.4, 80.8]], ["C", [40.9, 78.7, 41.2, 75.4]], ["L", [42.5, 59.1]], ["L", [40, 59.1]], ["L", [39.6, 64.5]]]; __motifs["["] = [["M", [16.7, 18.3]], ["L", [16.7, 14.8]], ["L", [5.9, 14.8]], ["L", [5.9, 94.9]], ["L", [17, 94.9]], ["L", [17, 91.5]], ["L", [10, 91.5]], ["L", [10, 18.3]], ["L", [16.7, 18.3]]]; __motifs["\\"] = [["M", [2.3, 18.9]], ["L", [22.8, 90.3]], ["L", [26.7, 90.3]], ["L", [6.3, 18.9]], ["L", [2.3, 18.9]]]; __motifs["]"] = [["M", [6.4, 14.8]], ["L", [6.4, 18.3]], ["L", [13.2, 18.3]], ["L", [13.2, 91.5]], ["L", [6.1, 91.5]], ["L", [6.1, 94.9]], ["L", [17.2, 94.9]], ["L", [17.2, 14.8]], ["L", [6.4, 14.8]]]; __motifs["^"] = [["M", [16.2, 24.5]], ["L", [4.1, 52.6]], ["L", [6.7, 52.6]], ["L", [17.9, 32]], ["L", [28.9, 52.6]], ["L", [31.6, 52.6]], ["L", [19.5, 24.5]], ["L", [16.2, 24.5]]]; __motifs["_"] = [["M", [36.8, 107.9]], ["L", [0, 107.9]], ["L", [0, 111.5]], ["L", [36.8, 111.5]], ["L", [36.8, 107.9]]]; __motifs["`"] = [["M", [11.3, 27.7]], ["L", [9.1, 30.1]], ["L", [22.2, 43.4]], ["L", [24.7, 41.1]], ["L", [11.3, 27.7]]]; } public static function initialize():void{ initializeMotifsUppercase(); initializeMotifsLowercase(); initializeMotifsNumbers(); initializeMotifsPunctuation(); initializeWidthsUppercase(); initializeWidthsLowercase(); initializeWidthsNumbers(); initializeWidthsPunctuation(); __initialized = true; } private static function initializeWidthsUppercase():void{ __widths["A"] = 63; __widths["B"] = 56; __widths["C"] = 70; __widths["D"] = 69; __widths["E"] = 47; __widths["F"] = 43; __widths["G"] = 82; __widths["H"] = 62; __widths["I"] = 19; __widths["J"] = 32; __widths["K"] = 52; __widths["L"] = 36; __widths["M"] = 90; __widths["N"] = 72; __widths["O"] = 82; __widths["P"] = 49; __widths["Q"] = 82; __widths["R"] = 48; __widths["S"] = 50; __widths["T"] = 44; __widths["U"] = 56; __widths["V"] = 53; __widths["W"] = 88; __widths["X"] = 53; __widths["Y"] = 51; __widths["Z"] = 55; } private static function initializeMotifsNumbers():void{ __motifs["0"] = [["M", [28, 20.7]], ["C", [39.3, 20.7, 45.2, 32.3]], ["C", [49.9, 41.5, 49.9, 54]], ["C", [49.9, 67.7, 44.4, 76.8]], ["C", [38.3, 87.1, 28, 87.1]], ["C", [16.9, 87.1, 10.9, 75.5]], ["C", [6.2, 66.3, 6.2, 54]], ["C", [6.2, 40.5, 11.7, 31.1]], ["C", [17.9, 20.7, 28, 20.7]], ["M", [7.7, 29.3]], ["C", [1.8, 39.7, 1.8, 54]], ["C", [1.8, 68.2, 7.7, 78.6]], ["C", [14.9, 91.3, 28, 91.3]], ["C", [41.2, 91.3, 48.4, 78.7]], ["C", [54.2, 68.4, 54.2, 54]], ["C", [54.2, 39.9, 48.3, 29.3]], ["C", [41.1, 16.6, 28, 16.6]], ["C", [14.9, 16.6, 7.7, 29.3]]]; __motifs["1"] = [["M", [20.1, 18.9]], ["L", [17.4, 23]], ["L", [29.5, 23]], ["L", [29.5, 90.3]], ["L", [33.6, 90.3]], ["L", [33.6, 18.9]], ["L", [20.1, 18.9]]]; __motifs["2"] = [["M", [43.3, 23.6]], ["C", [37.2, 18.3, 28.7, 18.3]], ["C", [18.8, 18.3, 12.8, 24.9]], ["C", [8.3, 30, 7.6, 35.2]], ["L", [12.1, 35.2]], ["C", [13.2, 30.6, 16, 27.5]], ["C", [20.6, 22.3, 28.7, 22.3]], ["C", [35.3, 22.3, 40.3, 26.6]], ["C", [45.3, 31, 45.3, 37.3]], ["C", [45.3, 43.8, 41.1, 49.8]], ["L", [6.1, 90.3]], ["L", [49.3, 90.3]], ["L", [49.3, 86.2]], ["L", [15.1, 86.2]], ["L", [35.6, 63]], ["C", [38.4, 59.8, 40.2, 57.65]], ["C", [42, 55.5, 42.9, 54.4]], ["C", [49.4, 46, 49.4, 37.3]], ["C", [49.4, 28.8, 43.3, 23.6]]]; __motifs["3"] = [["M", [41.3, 22.3]], ["C", [35.8, 17.3, 27.6, 17.3]], ["C", [19.7, 17.3, 14.5, 21.8]], ["C", [9.3, 26.2, 8.4, 34]], ["L", [13.1, 34]], ["C", [15.6, 21.4, 27.6, 21.4]], ["C", [33.9, 21.4, 37.9, 25.4]], ["C", [41.9, 29.3, 41.9, 35.5]], ["C", [41.9, 42, 38.2, 45.4]], ["C", [34.4, 48.9, 28.1, 48.9]], ["L", [23.9, 48.9]], ["L", [23.9, 54.8]], ["L", [28.1, 54.8]], ["C", [32.7, 54.8, 37.1, 58.3]], ["C", [42.9, 62.9, 42.9, 71]], ["C", [42.9, 77.5, 38.2, 82.2]], ["C", [33.5, 86.7, 26.9, 86.7]], ["C", [21.8, 86.7, 17.5, 83.4]], ["C", [13.1, 80.1, 11.8, 75.2]], ["L", [7.4, 75.2]], ["C", [9.1, 82.6, 14.2, 86.7]], ["C", [19.5, 90.8, 26.9, 90.8]], ["C", [35.8, 90.8, 41.6, 85.3]], ["C", [47.4, 79.9, 47.4, 71]], ["C", [47.4, 56, 33.4, 51.8]], ["C", [46.8, 48.8, 46.8, 35.5]], ["C", [46.8, 27.2, 41.3, 22.3]]]; __motifs["4"] = [["M", [11.9, 72.7]], ["L", [41.3, 30.6]], ["L", [41.3, 72.7]], ["L", [11.9, 72.7]], ["M", [53.8, 72.7]], ["L", [45.5, 72.7]], ["L", [45.5, 17.9]], ["L", [4.6, 76.7]], ["L", [41.3, 76.7]], ["L", [41.3, 90.3]], ["L", [45.5, 90.3]], ["L", [45.5, 76.7]], ["L", [53.8, 76.7]], ["L", [53.8, 72.7]]]; __motifs["5"] = [["M", [46.3, 18.9]], ["L", [18.9, 18.9]], ["L", [11.8, 46.6]], ["C", [15.5, 45.2, 18.9, 45.2]], ["C", [20.4, 44.8, 21.3, 44.8]], ["L", [26, 44.7]], ["C", [34.3, 44.4, 40.6, 49.8]], ["C", [47.3, 55.5, 47.3, 64.8]], ["C", [47.3, 74.3, 41.3, 80.7]], ["C", [35.3, 87.2, 26, 87.2]], ["C", [18.2, 87.2, 13.3, 83.6]], ["C", [9.4, 80.7, 6.5, 74.8]], ["L", [2.7, 76.3]], ["C", [9, 91.3, 26, 91.3]], ["C", [37.3, 91.3, 44.4, 83.8]], ["C", [51.4, 76.4, 51.4, 64.8]], ["C", [51.4, 53.4, 43.4, 46.6]], ["C", [35.6, 40, 26, 40.6]], ["L", [17.8, 41.4]], ["L", [22.1, 23]], ["L", [46.3, 23]], ["L", [46.3, 18.9]]]; __motifs["6"] = [["M", [12.9, 52.9]], ["C", [18.9, 46.9, 27.4, 46.9]], ["C", [36, 46.9, 42, 53]], ["C", [48, 59.2, 48, 67.4]], ["C", [48, 76.2, 42.1, 82.1]], ["C", [36.2, 88, 27.4, 88]], ["C", [18.6, 88, 12.7, 82.1]], ["C", [6.9, 76.3, 6.9, 67.4]], ["C", [6.9, 58.9, 12.9, 52.9]], ["M", [22.9, 43.3]], ["L", [18.6, 44.5]], ["L", [14.4, 46.6]], ["L", [29.6, 18.9]], ["L", [24.9, 18.9]], ["L", [7, 51]], ["C", [6.1, 52.7, 5.3, 54.55]], ["C", [4.5, 56.4, 4, 58.5]], ["C", [3.5, 60.2, 3.3, 61.3]], ["C", [3.1, 62.4, 3, 63]], ["C", [2.9, 63.6, 2.9, 64.2]], ["C", [2.9, 64.7, 2.9, 65.2]], ["L", [2.9, 67.4]], ["C", [2.9, 78.2, 9.7, 85.2]], ["C", [16.5, 92, 27.4, 92]], ["C", [38, 92, 45, 85]], ["C", [52, 78, 52, 67.4]], ["C", [52, 57, 44.9, 49.9]], ["C", [37.9, 42.9, 27.4, 42.9]], ["L", [22.9, 43.3]]]; __motifs["7"] = [["M", [3.1, 23]], ["L", [45.7, 23]], ["L", [2.4, 88.7]], ["L", [5.8, 91.3]], ["L", [53.3, 18.9]], ["L", [3.1, 18.9]], ["L", [3.1, 23]]]; __motifs["8"] = [["M", [39.2, 59.7]], ["C", [44.2, 64.5, 44.2, 71.3]], ["C", [44.2, 78.4, 39.3, 83]], ["C", [34.6, 87.6, 27.3, 87.6]], ["C", [20.1, 87.6, 15.3, 82.8]], ["C", [10.6, 78.1, 10.6, 71.3]], ["C", [10.6, 64.6, 15.6, 59.6]], ["C", [18.1, 57.2, 21, 55.75]], ["C", [23.9, 54.3, 27.3, 54.3]], ["C", [30.8, 54.3, 33.75, 55.75]], ["C", [36.7, 57.2, 39.2, 59.7]], ["M", [13, 36.1]], ["C", [13, 29.9, 17.1, 25.8]], ["C", [21.2, 21.7, 27.3, 21.7]], ["C", [33.5, 21.7, 37.6, 25.8]], ["C", [41.7, 29.9, 41.7, 36.1]], ["C", [41.7, 42.3, 37.6, 46.4]], ["C", [35.6, 48.4, 33.05, 49.6]], ["C", [30.5, 50.8, 27.3, 50.8]], ["C", [24.2, 50.8, 21.65, 49.5]], ["C", [19.1, 48.2, 17.1, 46.2]], ["C", [13, 42.1, 13, 36.1]], ["M", [45.7, 36.1]], ["C", [45.7, 27.9, 40.6, 22.8]], ["C", [35.5, 17.7, 27.3, 17.7]], ["C", [19.2, 17.7, 14.1, 22.9]], ["C", [9, 28, 9, 36.1]], ["C", [9, 41.4, 11.9, 46.1]], ["C", [14.9, 51, 19.9, 52.5]], ["C", [13.6, 54.9, 10.1, 59.8]], ["C", [6.6, 64.8, 6.6, 71.3]], ["C", [6.6, 80.3, 12.5, 86]], ["C", [18.4, 91.6, 27.5, 91.6]], ["C", [36.5, 91.6, 42.4, 85.9]], ["C", [48.2, 80.2, 48.2, 71.3]], ["C", [48.2, 63.4, 43.3, 58.2]], ["C", [39.9, 54.5, 34.5, 52.5]], ["C", [39.8, 50.8, 42.7, 46.3]], ["C", [45.7, 41.7, 45.7, 36.1]]]; __motifs["9"] = [["M", [48.1, 43]], ["C", [48.1, 51.7, 42.2, 57.6]], ["C", [36.3, 63.5, 27.6, 63.5]], ["C", [18.7, 63.5, 12.9, 57.5]], ["C", [7, 51.4, 7, 43]], ["C", [7, 34.2, 12.9, 28.3]], ["C", [18.8, 22.4, 27.6, 22.4]], ["C", [36.4, 22.4, 42.3, 28.3]], ["C", [48.1, 34.1, 48.1, 43]], ["M", [45.1, 25.4]], ["C", [38.2, 18.4, 27.6, 18.4]], ["C", [17, 18.4, 10, 25.4]], ["C", [3, 32.4, 3, 43]], ["C", [3, 53.6, 10, 60.6]], ["C", [17, 67.5, 27.6, 67.5]], ["L", [32.1, 67.1]], ["L", [36.4, 65.9]], ["L", [40.6, 63.8]], ["L", [26.4, 89.5]], ["L", [30.2, 91.3]], ["L", [48, 59.4]], ["C", [49, 57.6, 49.75, 55.75]], ["C", [50.5, 53.9, 51, 51.9]], ["C", [51.6, 49.6, 51.85, 47.35]], ["C", [52.1, 45.1, 52.1, 43]], ["C", [52.1, 32.4, 45.1, 25.4]]]; } private static function initializeWidthsLowercase():void{ __widths["a"] = 51; __widths["b"] = 52; __widths["c"] = 44; __widths["d"] = 52; __widths["e"] = 49; __widths["f"] = 27; __widths["g"] = 51; __widths["h"] = 46; __widths["i"] = 18; __widths["j"] = 19; __widths["k"] = 42; __widths["l"] = 19; __widths["m"] = 64; __widths["n"] = 45; __widths["o"] = 50; __widths["p"] = 51; __widths["q"] = 50; __widths["r"] = 31; __widths["s"] = 33; __widths["t"] = 25; __widths["u"] = 43; __widths["v"] = 44; __widths["w"] = 68; __widths["x"] = 36; __widths["y"] = 45; __widths["z"] = 46; } private static function initializeWidthsNumbers():void{ __widths["0"] = 56; __widths["1"] = 55; __widths["2"] = 55; __widths["3"] = 55; __widths["4"] = 55; __widths["5"] = 55; __widths["6"] = 55; __widths["7"] = 55; __widths["8"] = 55; __widths["9"] = 55; } private static function initializeMotifsLowercase():void{ __motifs["a"] = [["M", [37, 57.5]], ["C", [42.1, 62.6, 42.1, 69.7]], ["C", [42.1, 76.9, 37, 82]], ["C", [32, 87, 24.8, 87]], ["C", [17.7, 87, 12.6, 81.9]], ["C", [7.5, 76.8, 7.5, 69.7]], ["C", [7.5, 62.5, 12.6, 57.4]], ["C", [17.6, 52.4, 24.8, 52.4]], ["C", [31.9, 52.4, 37, 57.5]], ["M", [41.3, 49]], ["L", [41.3, 56.2]], ["C", [34.7, 48.4, 24.8, 48.4]], ["C", [15.8, 48.4, 9.6, 54.6]], ["C", [3.5, 60.7, 3.5, 69.7]], ["C", [3.5, 78.7, 9.7, 84.9]], ["C", [15.8, 91, 24.8, 91]], ["C", [34.8, 91, 41.3, 83.2]], ["L", [41.3, 90.3]], ["L", [45.4, 90.3]], ["L", [45.4, 49]], ["L", [41.3, 49]]]; __motifs["b"] = [["M", [38.7, 57.5]], ["C", [43.8, 62.6, 43.8, 69.7]], ["C", [43.8, 76.9, 38.7, 82]], ["C", [33.7, 87, 26.5, 87]], ["C", [19.4, 87, 14.3, 81.9]], ["C", [9.2, 76.8, 9.2, 69.7]], ["C", [9.2, 62.5, 14.3, 57.4]], ["C", [19.3, 52.4, 26.5, 52.4]], ["C", [33.6, 52.4, 38.7, 57.5]], ["M", [5.5, 16.3]], ["L", [5.5, 90.3]], ["L", [9.6, 90.3]], ["L", [9.6, 82.7]], ["C", [16.2, 91, 26.5, 91]], ["C", [35.5, 91, 41.7, 84.8]], ["C", [47.8, 78.7, 47.8, 69.7]], ["C", [47.8, 60.7, 41.6, 54.5]], ["C", [35.5, 48.4, 26.5, 48.4]], ["C", [16.1, 48.4, 9.6, 56.7]], ["L", [9.6, 16.3]], ["L", [5.5, 16.3]]]; __motifs["c"] = [["M", [38.7, 56.8]], ["L", [38.7, 51.9]], ["C", [34, 48.3, 26.1, 48.3]], ["C", [16.9, 48.3, 10.8, 54.4]], ["C", [4.7, 60.5, 4.7, 69.7]], ["C", [4.7, 78.9, 10.8, 85]], ["C", [16.9, 91.1, 26.1, 91.1]], ["C", [33.1, 91.1, 38.7, 87.4]], ["L", [38.7, 82.3]], ["C", [33.3, 87.1, 26.1, 87.1]], ["C", [18.5, 87.1, 13.6, 82.2]], ["C", [8.7, 77.3, 8.7, 69.7]], ["C", [8.7, 62, 13.6, 57.1]], ["C", [18.4, 52.3, 26.1, 52.3]], ["C", [29.5, 52.3, 33.3, 53.6]], ["L", [38.7, 56.8]]]; __motifs["d"] = [["M", [37.8, 57.5]], ["C", [42.9, 62.6, 42.9, 69.7]], ["C", [42.9, 76.9, 37.8, 82]], ["C", [32.8, 87, 25.6, 87]], ["C", [18.5, 87, 13.4, 81.9]], ["C", [8.3, 76.8, 8.3, 69.7]], ["C", [8.3, 62.5, 13.4, 57.4]], ["C", [18.4, 52.4, 25.6, 52.4]], ["C", [32.7, 52.4, 37.8, 57.5]], ["M", [42.4, 16.3]], ["L", [42.4, 56.5]], ["C", [35.5, 48.4, 25.6, 48.4]], ["C", [16.6, 48.4, 10.4, 54.6]], ["C", [4.3, 60.7, 4.3, 69.7]], ["C", [4.3, 78.7, 10.5, 84.9]], ["C", [16.6, 91, 25.6, 91]], ["C", [35.8, 91, 42.4, 82.9]], ["L", [42.4, 90.3]], ["L", [46.5, 90.3]], ["L", [46.5, 16.3]], ["L", [42.4, 16.3]]]; __motifs["e"] = [["M", [35.6, 55.7]], ["C", [40.5, 59.2, 41.5, 64.9]], ["L", [8, 64.9]], ["C", [12, 52.3, 24.8, 52.3]], ["C", [30.9, 52.3, 35.6, 55.7]], ["M", [3.4, 69.7]], ["C", [3.4, 78.9, 9.5, 85]], ["C", [15.5, 91.1, 24.8, 91.1]], ["C", [28.7, 91.1, 31.8, 90.1]], ["C", [39.9, 87.5, 43.8, 80.1]], ["L", [40.1, 78.4]], ["C", [36.7, 83.9, 32.4, 85.7]], ["C", [29, 87.1, 24.8, 87.1]], ["C", [16.6, 87.1, 11.9, 82.1]], ["C", [7.4, 77.2, 7.4, 68.8]], ["L", [46.1, 68.8]], ["C", [46.1, 59.7, 40, 54]], ["C", [34, 48.3, 24.8, 48.3]], ["C", [15.5, 48.3, 9.4, 54.4]], ["C", [3.4, 60.4, 3.4, 69.7]]]; __motifs["f"] = [["M", [25, 16.9]], ["C", [23.5, 16.2, 22.3, 16.2]], ["C", [21.7, 16, 19.5, 16]], ["C", [9.9, 16, 9.9, 25.5]], ["L", [9.9, 49]], ["L", [4.3, 49]], ["L", [4.3, 53.1]], ["L", [9.9, 53.1]], ["L", [9.9, 90.3]], ["L", [14, 90.3]], ["L", [14, 53.1]], ["L", [23.8, 53.1]], ["L", [23.8, 49]], ["L", [14, 49]], ["L", [14, 26.7]], ["C", [14, 20.1, 19.6, 20.1]], ["L", [25, 21]], ["L", [25, 16.9]]]; __motifs["g"] = [["M", [37, 57.5]], ["C", [42.1, 62.6, 42.1, 69.7]], ["C", [42.1, 76.9, 37, 82]], ["C", [32, 87, 24.8, 87]], ["C", [17.7, 87, 12.6, 81.9]], ["C", [7.5, 76.8, 7.5, 69.7]], ["C", [7.5, 62.5, 12.6, 57.4]], ["C", [17.6, 52.4, 24.8, 52.4]], ["C", [31.9, 52.4, 37, 57.5]], ["M", [41.3, 49]], ["L", [41.3, 56.2]], ["C", [34.7, 48.4, 24.8, 48.4]], ["C", [15.8, 48.4, 9.6, 54.6]], ["C", [3.5, 60.7, 3.5, 69.7]], ["C", [3.5, 78.7, 9.7, 84.9]], ["C", [15.8, 91, 24.8, 91]], ["C", [34.8, 91, 41.3, 83.2]], ["L", [41.3, 89.3]], ["C", [41.3, 97, 37, 101.3]], ["C", [32.8, 105.6, 25.1, 105.6]], ["C", [19.4, 105.6, 15.3, 103.7]], ["C", [10.1, 101.3, 9, 96.4]], ["L", [4.9, 96.4]], ["C", [8.2, 109.7, 25.1, 109.7]], ["C", [34.2, 109.7, 39.8, 104.1]], ["C", [45.4, 98.5, 45.4, 89.4]], ["L", [45.4, 49]], ["L", [41.3, 49]]]; __motifs["h"] = [["M", [7.4, 16.3]], ["L", [7.4, 90.3]], ["L", [11.5, 90.3]], ["L", [11.5, 63.4]], ["C", [11.5, 58.4, 15.2, 55.4]], ["C", [18.8, 52.4, 23.8, 52.4]], ["C", [36, 52.4, 36, 65.5]], ["L", [36, 90.4]], ["L", [40.1, 90.4]], ["L", [40.1, 65.1]], ["C", [40.1, 48.4, 23.8, 48.4]], ["C", [15.2, 48.4, 11.5, 54.5]], ["L", [11.5, 16.3]], ["L", [7.4, 16.3]]]; __motifs["i"] = [["M", [7.3, 49]], ["L", [7.3, 90.3]], ["L", [11.4, 90.3]], ["L", [11.4, 49]], ["L", [7.3, 49]], ["M", [9.4, 35]], ["C", [6.1, 35.6, 6.1, 38.3]], ["C", [6.2, 39.8, 7.1, 40.7]], ["C", [8.3, 41.6, 9.4, 41.6]], ["C", [12.7, 41.6, 12.7, 38.3]], ["C", [11.9, 35, 9.4, 35]]]; __motifs["j"] = [["M", [7.4, 49]], ["L", [7.4, 108.3]], ["L", [11.5, 108.3]], ["L", [11.5, 49]], ["L", [7.4, 49]], ["M", [9.4, 35]], ["C", [6.1, 35.6, 6.1, 38.3]], ["C", [6.2, 39.8, 7.1, 40.7]], ["C", [8.3, 41.6, 9.4, 41.6]], ["C", [12.7, 41.6, 12.7, 38.3]], ["C", [11.9, 35, 9.4, 35]]]; __motifs["k"] = [["M", [28.7, 47.4]], ["L", [10.8, 65.2]], ["L", [10.8, 16.3]], ["L", [6.7, 16.3]], ["L", [6.7, 90.3]], ["L", [10.8, 90.3]], ["L", [10.8, 71.1]], ["L", [13.1, 68.8]], ["L", [34.7, 90.3]], ["L", [40.1, 90.3]], ["L", [15.8, 66]], ["L", [34.5, 47.4]], ["L", [28.7, 47.4]]]; __motifs["l"] = [["M", [7.7, 16.3]], ["L", [7.7, 90.3]], ["L", [11.7, 90.3]], ["L", [11.7, 16.3]], ["L", [7.7, 16.3]]]; __motifs["m"] = [["M", [6.6, 49]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 61.8]], ["C", [10.7, 57.5, 13.5, 55]], ["C", [16.3, 52.4, 20.4, 52.4]], ["C", [24.4, 52.4, 27.3, 55.1]], ["C", [30.1, 57.6, 30.1, 61.8]], ["L", [30.1, 90.3]], ["L", [34.2, 90.3]], ["L", [34.2, 61.8]], ["C", [34.2, 52.4, 43.9, 52.4]], ["C", [48.6, 52.4, 51.1, 55.2]], ["C", [53.6, 58, 53.6, 61.8]], ["L", [53.6, 90.3]], ["L", [57.7, 90.3]], ["L", [57.7, 61.8]], ["C", [57.7, 55.5, 53.9, 51.9]], ["C", [50.1, 48.4, 43.9, 48.4]], ["C", [35.8, 48.4, 32.2, 54.9]], ["C", [28.4, 48.4, 20.4, 48.4]], ["C", [13.7, 48.4, 10.7, 53.1]], ["L", [10.7, 49]], ["L", [6.6, 49]]]; __motifs["n"] = [["M", [6.6, 49]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 65.2]], ["C", [10.7, 59.3, 13.8, 55.9]], ["C", [16.8, 52.5, 22.6, 52.5]], ["C", [34.4, 52.5, 34.4, 65.6]], ["L", [34.4, 90.3]], ["L", [38.5, 90.3]], ["L", [38.5, 65.2]], ["C", [38.5, 57.3, 34.4, 52.9]], ["C", [30.3, 48.5, 22.6, 48.5]], ["C", [13.5, 48.5, 10.7, 54]], ["L", [10.7, 49]], ["L", [6.6, 49]]]; __motifs["o"] = [["M", [37.1, 57.4]], ["C", [42.1, 62.4, 42.1, 69.7]], ["C", [42.1, 76.9, 37, 82]], ["C", [32, 87, 24.8, 87]], ["C", [17.7, 87, 12.6, 81.9]], ["C", [7.5, 76.8, 7.5, 69.7]], ["C", [7.5, 62.7, 12.7, 57.5]], ["C", [17.8, 52.3, 24.8, 52.3]], ["C", [32.1, 52.3, 37.1, 57.4]], ["M", [3.5, 69.7]], ["C", [3.5, 78.7, 9.7, 84.9]], ["C", [15.8, 91, 24.8, 91]], ["C", [33.8, 91, 40, 84.8]], ["C", [46.1, 78.7, 46.1, 69.7]], ["C", [46.1, 60.7, 39.9, 54.5]], ["C", [33.7, 48.3, 24.8, 48.3]], ["C", [15.8, 48.3, 9.7, 54.6]], ["C", [3.5, 60.8, 3.5, 69.7]]]; __motifs["p"] = [["M", [27.5, 87]], ["C", [20.4, 87, 15.3, 81.9]], ["C", [10.2, 76.8, 10.2, 69.7]], ["C", [10.2, 62.5, 15.3, 57.4]], ["C", [20.3, 52.4, 27.5, 52.4]], ["C", [34.6, 52.4, 39.7, 57.5]], ["C", [44.8, 62.6, 44.8, 69.7]], ["C", [44.8, 76.9, 39.7, 82]], ["C", [34.7, 87, 27.5, 87]], ["M", [6.4, 49]], ["L", [6.4, 109.7]], ["L", [10.5, 109.7]], ["L", [10.5, 82.6]], ["C", [17.2, 91, 27.5, 91]], ["C", [36.5, 91, 42.7, 84.8]], ["C", [48.8, 78.7, 48.8, 69.7]], ["C", [48.8, 60.7, 42.6, 54.5]], ["C", [36.5, 48.4, 27.5, 48.4]], ["C", [16.9, 48.4, 10.5, 56.8]], ["L", [10.5, 49]], ["L", [6.4, 49]]]; __motifs["q"] = [["M", [36.5, 57.5]], ["C", [41.6, 62.6, 41.6, 69.7]], ["C", [41.6, 76.9, 36.5, 82]], ["C", [31.5, 87, 24.3, 87]], ["C", [17.2, 87, 12.1, 81.9]], ["C", [7, 76.8, 7, 69.7]], ["C", [7, 62.5, 12.1, 57.4]], ["C", [17.1, 52.4, 24.3, 52.4]], ["C", [31.4, 52.4, 36.5, 57.5]], ["M", [41.1, 49]], ["L", [41.1, 56.5]], ["C", [34.3, 48.4, 24.3, 48.4]], ["C", [15.3, 48.4, 9.1, 54.6]], ["C", [3, 60.7, 3, 69.7]], ["C", [3, 78.7, 9.2, 84.9]], ["C", [15.3, 91, 24.3, 91]], ["C", [34.5, 91, 41.1, 82.9]], ["L", [41.1, 109.7]], ["L", [45.2, 109.7]], ["L", [45.2, 49]], ["L", [41.1, 49]]]; __motifs["r"] = [["M", [18.7, 48.5]], ["C", [16.2, 48.5, 14.1, 50.4]], ["C", [12, 52.3, 10.7, 54.6]], ["L", [10.7, 49]], ["L", [6.6, 49]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 63.1]], ["C", [10.7, 61.5, 11.35, 59.6]], ["C", [12, 57.7, 13.1, 56.15]], ["C", [14.2, 54.6, 15.7, 53.55]], ["C", [17.2, 52.5, 18.9, 52.5]], ["C", [20.9, 52.5, 22.7, 53.2]], ["C", [24.5, 53.9, 26.1, 55.1]], ["L", [28.3, 51.7]], ["C", [25.8, 49.9, 23.8, 49.2]], ["C", [21.8, 48.5, 18.7, 48.5]]]; __motifs["s"] = [["M", [23.4, 72.9]], ["C", [26.7, 75.5, 26.7, 79]], ["C", [26.7, 87, 17.3, 87]], ["C", [13, 87, 10.5, 85.1]], ["C", [8.1, 83.4, 6.4, 80.3]], ["L", [2.9, 82.4]], ["C", [7.7, 91.1, 17.3, 91.1]], ["C", [22.9, 91.1, 26.9, 87.7]], ["C", [30.8, 84.4, 30.8, 79]], ["C", [30.8, 73.4, 26.5, 70.1]], ["C", [25.4, 69.3, 23.2, 68.25]], ["C", [21, 67.2, 17.6, 66]], ["C", [13.7, 64.7, 11.9, 63.3]], ["C", [9.7, 61.5, 9.7, 58.7]], ["C", [9.7, 52.4, 16.9, 52.4]], ["C", [22.2, 52.4, 25.6, 55.8]], ["L", [28.6, 53.2]], ["C", [23.8, 48.4, 16.9, 48.4]], ["C", [11.9, 48.4, 8.8, 51.5]], ["C", [5.6, 54.5, 5.6, 58.7]], ["C", [5.6, 63.6, 8.8, 66.2]], ["C", [11, 68, 16, 69.8]], ["C", [18.7, 70.8, 20.55, 71.55]], ["C", [22.4, 72.3, 23.4, 72.9]]]; __motifs["t"] = [["M", [12.8, 49]], ["L", [12.8, 30.9]], ["L", [8.7, 30.9]], ["L", [8.7, 49]], ["L", [3.1, 49]], ["L", [3.1, 53.1]], ["L", [8.7, 53.1]], ["L", [8.7, 90.3]], ["L", [12.8, 90.3]], ["L", [12.8, 53.1]], ["L", [22.4, 53.1]], ["L", [22.4, 49]], ["L", [12.8, 49]]]; __motifs["u"] = [["M", [32.9, 49]], ["L", [32.9, 74.8]], ["C", [32.9, 87.1, 21.4, 87.1]], ["C", [15.5, 87.1, 12.8, 83.9]], ["C", [10.2, 80.7, 10.2, 74.8]], ["L", [10.2, 49]], ["L", [6.1, 49]], ["L", [6.1, 74.8]], ["C", [6.1, 82.5, 10.1, 86.8]], ["C", [14.1, 91.1, 21.4, 91.1]], ["C", [28.8, 91.1, 32.9, 86.7]], ["C", [36.9, 82.4, 36.9, 74.8]], ["L", [36.9, 49]], ["L", [32.9, 49]]]; __motifs["v"] = [["M", [2.7, 49]], ["L", [22.2, 92.1]], ["L", [41.8, 49]], ["L", [37.2, 49]], ["L", [22.1, 81.9]], ["L", [7.1, 49]], ["L", [2.7, 49]]]; __motifs["w"] = [["M", [61.5, 49]], ["L", [47.7, 80.9]], ["L", [34.5, 47.7]], ["L", [21.2, 81]], ["L", [7.3, 49]], ["L", [2.9, 49]], ["L", [21.4, 92.1]], ["L", [34.5, 59.1]], ["L", [47.4, 92.1]], ["L", [66.1, 49]], ["L", [61.5, 49]]]; __motifs["x"] = [["M", [29.6, 49]], ["L", [18.2, 66.1]], ["L", [6.7, 49]], ["L", [1.9, 49]], ["L", [15.7, 69.5]], ["L", [1.6, 90.3]], ["L", [6.5, 90.3]], ["L", [18.2, 73]], ["L", [29.9, 90.3]], ["L", [34.7, 90.3]], ["L", [20.7, 69.4]], ["L", [34.4, 49]], ["L", [29.6, 49]]]; __motifs["y"] = [["M", [2.8, 49]], ["L", [20.2, 86.5]], ["L", [9.5, 109.7]], ["L", [14.1, 109.7]], ["L", [42.3, 49]], ["L", [37.8, 49]], ["L", [22.6, 81.6]], ["L", [7.2, 49]], ["L", [2.8, 49]]]; __motifs["z"] = [["M", [34.1, 52.9]], ["L", [4.6, 90.3]], ["L", [41.9, 90.3]], ["L", [41.9, 86.2]], ["L", [13.1, 86.2]], ["L", [42.4, 49]], ["L", [6.3, 49]], ["L", [6.3, 52.9]], ["L", [34.1, 52.9]]]; } private static function initializeMotifsUppercase():void{ __motifs["A"] = [["M", [17, 64.8]], ["L", [31.6, 27]], ["L", [46.2, 64.8]], ["L", [17, 64.8]], ["M", [7.1, 90.3]], ["L", [15.4, 68.9]], ["L", [47.9, 68.9]], ["L", [56.1, 90.3]], ["L", [60.2, 90.3]], ["L", [31.6, 16.6]], ["L", [3.1, 90.3]], ["L", [7.1, 90.3]]]; __motifs["B"] = [["M", [11.6, 86.2]], ["L", [11.6, 53.1]], ["L", [30, 53.1]], ["C", [37.7, 53.1, 42.8, 57.5]], ["C", [48.3, 62.1, 48.3, 69.6]], ["C", [48.3, 77, 42.9, 81.6]], ["C", [37.6, 86.2, 30, 86.2]], ["L", [11.6, 86.2]], ["M", [35.5, 45.4]], ["C", [31.7, 49, 25.9, 49]], ["L", [11.6, 49]], ["L", [11.6, 23]], ["L", [25.3, 23]], ["C", [31.2, 23, 35.3, 26.6]], ["C", [39.3, 30, 39.3, 36]], ["C", [39.3, 41.8, 35.5, 45.4]], ["M", [25, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [29.9, 90.3]], ["C", [39.3, 90.3, 45.8, 84.5]], ["C", [52.3, 78.8, 52.3, 69.6]], ["C", [52.3, 61.9, 47.8, 56.6]], ["C", [43.2, 51.3, 35.7, 49.8]], ["C", [43.4, 45.4, 43.4, 36]], ["C", [43.4, 27.8, 38.2, 23.2]], ["C", [33.3, 18.9, 25, 18.9]]]; __motifs["C"] = [["M", [57.6, 25]], ["C", [62.6, 27.1, 66.8, 30.6]], ["L", [66.8, 25.5]], ["C", [62.7, 22.3, 58.3, 20.6]], ["C", [50.9, 17.9, 41.7, 17.9]], ["C", [25.5, 17.9, 15.2, 28.2]], ["C", [5, 38.4, 5, 54.6]], ["C", [5, 70.8, 15.3, 81.1]], ["C", [25.5, 91.3, 41.7, 91.3]], ["C", [43.1, 91.3, 44.4, 91.25]], ["C", [45.7, 91.2, 46.8, 91.1]], ["C", [56.4, 90.2, 62, 86.1]], ["L", [66.8, 82.6]], ["L", [66.8, 77.9]], ["C", [61, 82.1, 57.2, 84]], ["C", [50.6, 87.2, 41.7, 87.2]], ["C", [27.4, 87.2, 18.2, 78]], ["C", [9.1, 68.9, 9.1, 54.6]], ["C", [9.1, 40.3, 18.3, 31.1]], ["C", [27.5, 21.9, 41.7, 21.9]], ["C", [50, 21.9, 57.6, 25]]]; __motifs["D"] = [["M", [31.4, 22.9]], ["C", [44.1, 22.9, 51.9, 32.5]], ["C", [59.2, 41.4, 59.2, 54.5]], ["C", [59.2, 69.2, 50.5, 78]], ["C", [42.4, 86.2, 31.4, 86.2]], ["L", [11.6, 86.2]], ["L", [11.6, 22.9]], ["L", [31.4, 22.9]], ["M", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [31.4, 90.3]], ["C", [45.9, 90.3, 54.9, 79.5]], ["C", [63.3, 69.3, 63.3, 54.5]], ["C", [63.3, 39.8, 54.8, 29.7]], ["C", [45.8, 18.9, 31.4, 18.9]], ["L", [7.6, 18.9]]]; __motifs["E"] = [["M", [41.4, 18.9]], ["L", [7.1, 18.9]], ["L", [7.1, 90.3]], ["L", [41.4, 90.3]], ["L", [41.4, 86.2]], ["L", [11.2, 86.2]], ["L", [11.2, 53.4]], ["L", [41.4, 53.4]], ["L", [41.4, 49]], ["L", [11.2, 49]], ["L", [11.2, 23]], ["L", [41.4, 23]], ["L", [41.4, 18.9]]]; __motifs["F"] = [["M", [11.6, 49]], ["L", [11.6, 23]], ["L", [38.6, 23]], ["L", [38.6, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 53.1]], ["L", [38.6, 53.1]], ["L", [38.6, 49]], ["L", [11.6, 49]]]; __motifs["G"] = [["M", [68.6, 35.1]], ["L", [71.9, 32.6]], ["C", [60.9, 17.9, 41.7, 17.9]], ["C", [25.7, 17.9, 15.3, 28.3]], ["C", [5, 38.6, 5, 54.6]], ["C", [5, 70.8, 15.3, 81.1]], ["C", [25.5, 91.3, 41.7, 91.3]], ["C", [58.7, 91.3, 69, 80.4]], ["C", [78.5, 70.4, 78.5, 55.8]], ["L", [50.4, 55.8]], ["L", [50.4, 59.9]], ["L", [74, 59.9]], ["C", [73, 69.5, 66, 77.1]], ["C", [56.8, 87.2, 41.7, 87.2]], ["C", [27.6, 87.2, 18.2, 78]], ["C", [9, 68.8, 9, 54.6]], ["C", [9, 40.5, 18.3, 31.2]], ["C", [27.6, 21.9, 41.7, 21.9]], ["C", [59, 21.9, 68.6, 35.1]]]; __motifs["H"] = [["M", [50.9, 18.9]], ["L", [50.9, 49]], ["L", [11.6, 49]], ["L", [11.6, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 53.1]], ["L", [50.9, 53.1]], ["L", [50.9, 90.3]], ["L", [55, 90.3]], ["L", [55, 18.9]], ["L", [50.9, 18.9]]]; __motifs["I"] = [["M", [7.7, 18.9]], ["L", [7.7, 90.3]], ["L", [11.7, 90.3]], ["L", [11.7, 18.9]], ["L", [7.7, 18.9]]]; __motifs["J"] = [["M", [21.4, 18.9]], ["L", [21.4, 75.9]], ["C", [21.4, 87, 13.9, 87]], ["C", [9, 87, 6.5, 82.4]], ["L", [3, 84.6]], ["C", [6.5, 91.1, 14, 91.1]], ["C", [25.5, 91.1, 25.5, 76.1]], ["L", [25.5, 18.9]], ["L", [21.4, 18.9]]]; __motifs["K"] = [["M", [42.6, 18.9]], ["L", [10.7, 50.6]], ["L", [10.7, 18.9]], ["L", [6.6, 18.9]], ["L", [6.6, 90.3]], ["L", [10.7, 90.3]], ["L", [10.7, 56.4]], ["L", [11.3, 55.8]], ["L", [45.7, 90.3]], ["L", [51.4, 90.3]], ["L", [14.2, 53]], ["L", [48.4, 18.9]], ["L", [42.6, 18.9]]]; __motifs["L"] = [["M", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [31.7, 90.3]], ["L", [31.7, 86.2]], ["L", [11.6, 86.2]], ["L", [11.6, 18.9]], ["L", [7.6, 18.9]]]; __motifs["M"] = [["M", [88.1, 90.3]], ["L", [69.5, 16.7]], ["L", [45.2, 80.5]], ["L", [20.9, 16.8]], ["L", [2.3, 90.3]], ["L", [6.4, 90.3]], ["L", [21.7, 30.2]], ["L", [45.2, 92.1]], ["L", [68.7, 30.3]], ["L", [83.9, 90.3]], ["L", [88.1, 90.3]]]; __motifs["N"] = [["M", [61, 18.9]], ["L", [61, 80.9]], ["L", [7.7, 18.4]], ["L", [7.7, 90.3]], ["L", [11.7, 90.3]], ["L", [11.7, 29.7]], ["L", [65.1, 91.5]], ["L", [65.1, 18.9]], ["L", [61, 18.9]]]; __motifs["O"] = [["M", [65.3, 31.1]], ["C", [74.4, 40.2, 74.4, 54.6]], ["C", [74.4, 69.1, 65.3, 78.2]], ["C", [56.1, 87.2, 41.7, 87.2]], ["C", [27.4, 87.2, 18.2, 78]], ["C", [9.1, 68.9, 9.1, 54.6]], ["C", [9.1, 40.3, 18.3, 31.1]], ["C", [27.5, 21.9, 41.7, 21.9]], ["C", [56.1, 21.9, 65.3, 31.1]], ["M", [41.7, 17.9]], ["C", [25.5, 17.9, 15.2, 28.2]], ["C", [5, 38.4, 5, 54.6]], ["C", [5, 70.8, 15.3, 81.1]], ["C", [25.5, 91.3, 41.7, 91.3]], ["C", [57.9, 91.3, 68.2, 81]], ["C", [78.5, 70.8, 78.5, 54.6]], ["C", [78.5, 38.4, 68.2, 28.1]], ["C", [57.8, 17.9, 41.7, 17.9]]]; __motifs["P"] = [["M", [35.9, 46.9]], ["C", [31.5, 50.5, 24.9, 50.5]], ["L", [11.6, 50.5]], ["L", [11.6, 23]], ["L", [24.9, 23]], ["C", [31.6, 23, 35.7, 26.4]], ["C", [40.3, 30.1, 40.3, 36.6]], ["C", [40.3, 43.1, 35.9, 46.9]], ["M", [25, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 54.6]], ["L", [25, 54.6]], ["C", [33.2, 54.6, 38.8, 49.6]], ["C", [44.4, 44.8, 44.4, 36.6]], ["C", [44.4, 28.5, 38.8, 23.7]], ["C", [33.2, 18.9, 25, 18.9]]]; __motifs["Q"] = [["M", [42.6, 95.8]], ["L", [42.6, 99.9]], ["L", [63.7, 99.9]], ["L", [63.7, 95.8]], ["L", [42.6, 95.8]], ["M", [66.1, 31.1]], ["C", [75.2, 40.2, 75.2, 54.6]], ["C", [75.2, 69.1, 66.1, 78.2]], ["C", [56.9, 87.2, 42.5, 87.2]], ["C", [28.2, 87.2, 19, 78]], ["C", [9.9, 68.9, 9.9, 54.6]], ["C", [9.9, 40.3, 19.1, 31.1]], ["C", [28.1, 21.9, 42.5, 21.9]], ["C", [56.9, 21.9, 66.1, 31.1]], ["M", [42.5, 17.9]], ["C", [26.3, 17.9, 16, 28.2]], ["C", [5.8, 38.4, 5.8, 54.6]], ["C", [5.8, 70.8, 16.1, 81.1]], ["C", [26.3, 91.3, 42.5, 91.3]], ["C", [58.7, 91.3, 69, 81]], ["C", [79.3, 70.8, 79.3, 54.6]], ["C", [79.3, 38.4, 69, 28.1]], ["C", [58.6, 17.9, 42.5, 17.9]]]; __motifs["R"] = [["M", [30, 23.85]], ["C", [32.8, 24.7, 34.9, 26.35]], ["C", [37, 28, 38.2, 30.55]], ["C", [39.4, 33.1, 39.4, 36.5]], ["C", [39.4, 43.3, 35.45, 46.9]], ["C", [31.5, 50.5, 25.1, 50.5]], ["L", [11.6, 50.5]], ["L", [11.6, 23]], ["L", [24, 23]], ["C", [27.2, 23, 30, 23.85]], ["M", [43.6, 36.6]], ["C", [43.6, 32.3, 42.05, 29]], ["C", [40.5, 25.7, 37.9, 23.45]], ["C", [35.3, 21.2, 31.7, 20.05]], ["C", [28.1, 18.9, 24.1, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 90.3]], ["L", [11.6, 90.3]], ["L", [11.6, 54.6]], ["L", [19.3, 54.6]], ["L", [42, 90.3]], ["L", [46.8, 90.3]], ["L", [23.9, 54.6]], ["C", [28.2, 54.6, 31.8, 53.55]], ["C", [35.4, 52.5, 38.05, 50.3]], ["C", [40.7, 48.1, 42.15, 44.7]], ["C", [43.6, 41.3, 43.6, 36.6]]]; __motifs["S"] = [["M", [35.1, 24.7]], ["C", [37.9, 26.3, 39.9, 29.6]], ["L", [43.8, 27.9]], ["C", [38.6, 18.5, 26, 18.5]], ["C", [18.4, 18.5, 13.2, 23.1]], ["C", [7.9, 27.6, 7.9, 35]], ["C", [7.9, 42.4, 13.1, 46.9]], ["C", [16.2, 49.7, 24.7, 53.5]], ["C", [29.2, 55.5, 32.1, 57.1]], ["C", [35, 58.7, 36.4, 60]], ["C", [41.7, 64.7, 41.7, 71.8]], ["C", [41.7, 79.3, 37.2, 83.2]], ["C", [32.8, 87, 25.1, 87]], ["C", [11.6, 87, 8.1, 74.2]], ["L", [4, 75.6]], ["C", [8.7, 91.1, 25.1, 91.1]], ["C", [30.4, 91.1, 34.3, 89.7]], ["C", [45.8, 85.4, 45.8, 71.8]], ["C", [45.8, 63.3, 40, 57.6]], ["C", [37.9, 55.5, 34.5, 53.45]], ["C", [31.1, 51.4, 26.4, 49.3]], ["C", [18.9, 45.9, 16.4, 43.9]], ["C", [12, 40.1, 12, 35]], ["C", [12, 29.3, 16.2, 25.8]], ["C", [20.1, 22.5, 26, 22.5]], ["C", [31.6, 22.5, 35.1, 24.7]]]; __motifs["T"] = [["M", [40.2, 18.9]], ["L", [4.5, 18.9]], ["L", [4.5, 23]], ["L", [20.3, 23]], ["L", [20.3, 90.3]], ["L", [24.4, 90.3]], ["L", [24.4, 23]], ["L", [40.2, 23]], ["L", [40.2, 18.9]]]; __motifs["U"] = [["M", [44.9, 18.9]], ["L", [44.9, 72.5]], ["C", [44.9, 79.2, 39.8, 83.2]], ["C", [35.1, 86.9, 28.2, 86.9]], ["C", [21.2, 86.9, 16.6, 83.3]], ["C", [11.6, 79.4, 11.6, 72.5]], ["L", [11.6, 18.9]], ["L", [7.6, 18.9]], ["L", [7.6, 72.5]], ["C", [7.6, 81.2, 13.7, 86.3]], ["C", [19.5, 91, 28.2, 91]], ["C", [37.2, 91, 42.7, 86.4]], ["C", [49, 81.2, 49, 72.5]], ["L", [49, 18.9]], ["L", [44.9, 18.9]]]; __motifs["V"] = [["M", [45.4, 18.9]], ["L", [26.6, 77.9]], ["L", [7.9, 18.9]], ["L", [3.7, 18.9]], ["L", [26.6, 91.5]], ["L", [49.7, 18.9]], ["L", [45.4, 18.9]]]; __motifs["W"] = [["M", [3.4, 18.9]], ["L", [26.3, 91.3]], ["L", [44.2, 31.4]], ["L", [62, 91.3]], ["L", [85.1, 18.9]], ["L", [80.9, 18.9]], ["L", [62.2, 77.3]], ["L", [44.2, 17.6]], ["L", [26.1, 77.3]], ["L", [7.4, 18.9]], ["L", [3.4, 18.9]]]; __motifs["X"] = [["M", [44.5, 18.9]], ["L", [26.8, 49.8]], ["L", [9.2, 18.9]], ["L", [4.5, 18.9]], ["L", [24.3, 53.4]], ["L", [3.3, 90.3]], ["L", [7.9, 90.3]], ["L", [26.7, 57.2]], ["L", [45.7, 90.3]], ["L", [50.4, 90.3]], ["L", [29.4, 53.7]], ["L", [49.2, 18.9]], ["L", [44.5, 18.9]]]; __motifs["Y"] = [["M", [43.4, 18.9]], ["L", [25.6, 49.8]], ["L", [8, 18.9]], ["L", [3.3, 18.9]], ["L", [23.6, 54.6]], ["L", [23.6, 90.3]], ["L", [27.7, 90.3]], ["L", [27.7, 54.6]], ["L", [48.1, 18.9]], ["L", [43.4, 18.9]]]; __motifs["Z"] = [["M", [6.3, 23.1]], ["L", [44.8, 23.1]], ["L", [3.9, 90.3]], ["L", [52, 90.3]], ["L", [52, 86.2]], ["L", [11.2, 86.2]], ["L", [52.2, 18.9]], ["L", [6.3, 18.9]], ["L", [6.3, 23.1]]]; } private static function initializeWidthsPunctuation():void{ __widths[" "] = 26; __widths["!"] = 20; __widths["\""] = 27; __widths["#"] = 54; __widths["$"] = 47; __widths["%"] = 53; __widths["&"] = 60; __widths["'"] = 16; __widths["("] = 18; __widths[")"] = 19; __widths["*"] = 29; __widths["+"] = 38; __widths[","] = 18; __widths["-"] = 27; __widths["."] = 11; __widths["/"] = 29; __widths[":"] = 16; __widths[";"] = 20; __widths["<"] = 32; __widths["="] = 30; __widths[">"] = 32; __widths["?"] = 47; __widths["@"] = 60; __widths["["] = 21; __widths["\\"] = 28; __widths["]"] = 21; __widths["^"] = 35; __widths["_"] = 36; __widths["`"] = 33; } } }//package org.papervision3d.typography.fonts
Section 144
//Font3D (org.papervision3d.typography.Font3D) package org.papervision3d.typography { public class Font3D { public function get motifs():Object{ return (new Object()); } public function get widths():Object{ return (new Object()); } public function get height():Number{ return (-1); } } }//package org.papervision3d.typography
Section 145
//Letter3D (org.papervision3d.typography.Letter3D) package org.papervision3d.typography { public interface Letter3D { function get width():Number; function get height():Number; function set width(_arg1:Number):void; function set height(_arg1:Number):void; function get font():Font3D; function set x(_arg1:Number):void; function set y(_arg1:Number):void; function set char(_arg1:String):void; function set z(_arg1:Number):void; function get char():String; function get x():Number; function get y():Number; function get z():Number; function set font(_arg1:Font3D):void; } }//package org.papervision3d.typography
Section 146
//Text3D (org.papervision3d.typography.Text3D) package org.papervision3d.typography { import org.papervision3d.core.proto.*; import org.papervision3d.objects.*; import org.papervision3d.objects.special.*; import org.papervision3d.materials.special.*; public class Text3D extends VectorShape3D { private var _align:String;// = "center" protected var _text:String; public var letters:Array; public var font:Font3D; private var _letterSpacing:Number;// = 0 private var _lineHeight:Number;// = 0 private var _lineSpacing:Number;// = 0 public var lines:Array; public function Text3D(_arg1:String, _arg2:Font3D, _arg3:MaterialObject3D, _arg4:String=null){ super(_arg3, null, _arg4); this.material = _arg3; this.font = _arg2; _text = _arg1.replace(/\r/gi, "\n"); _lineHeight = (_arg2.height + _lineSpacing); createLetters(_arg3); alignLetters(); } public function get align():String{ return (_align); } private function alignLetters():void{ var _local1:Letter3D; var _local2:Letter3D; var _local3:Array; var _local5:Letter3D; var _local6:Letter3D; var _local7:Number; var _local9:int; var _local4:Number = 0; var _local8:int; while (_local8 < lines.length) { _local3 = lines[_local8]; _local4 = (_local8 * -(_lineHeight)); _local5 = _local3[0]; _local6 = _local3[(_local3.length - 1)]; _local9 = 0; while (_local9 < _local3.length) { _local1 = _local3[_local9]; _local1.x = ((_local9 > 0)) ? ((_local2.x + ((_local2.width / 2) + (_local1.width / 2))) + _letterSpacing) : (_local1.width / 2); _local1.y = _local4; _local2 = _local1; _local9++; }; if ((((align == "center")) && (_local6))){ _local7 = ((_local6.x + (_local6.width / 2)) / 2); _local9 = 0; while (_local9 < _local3.length) { DisplayObject3D(_local3[_local9]).x = (DisplayObject3D(_local3[_local9]).x - _local7); _local9++; }; }; if ((((align == "right")) && (_local6))){ _local7 = (_local6.x + (_local6.width / 2)); _local9 = 0; while (_local9 < _local3.length) { DisplayObject3D(_local3[_local9]).x = (DisplayObject3D(_local3[_local9]).x - _local7); _local9++; }; }; _local8++; }; } public function set align(_arg1:String):void{ _align = _arg1; alignLetters(); } public function set lineSpacing(_arg1:Number):void{ _lineSpacing = _arg1; _lineHeight = (font.height + _arg1); alignLetters(); } private function removeLetters():void{ var _local1:DisplayObject3D; for each (_local1 in letters) { removeChild(_local1); }; letters.length = 0; lines.length = 0; } public function get text():String{ return (_text); } public function get lineSpacing():Number{ return (_lineSpacing); } protected function createLetters(_arg1:MaterialObject3D):void{ var _local2:String; var _local4:VectorLetter3D; var _local5:Array; var _local7:int; var _local8:String; lines = []; letters = []; var _local3:Array = _text.split("\n"); var _local6:int; while (_local6 < _local3.length) { _local5 = new Array(); lines[_local6] = _local5; _local2 = _local3[_local6]; _local7 = 0; while (_local7 < _local2.length) { _local8 = _local2.charAt(_local7); _local4 = new VectorLetter3D(_local8, (_arg1 as Letter3DMaterial), font); _local5.push(_local4); if (_local8 != " "){ addChild(_local4); }; letters.push(_local4); _local7++; }; _local6++; }; } public function set text(_arg1:String):void{ _text = _arg1.replace(/\r/gi, "\n"); removeLetters(); createLetters(Letter3DMaterial(material)); alignLetters(); } public function set letterSpacing(_arg1:Number):void{ _letterSpacing = _arg1; alignLetters(); } public function get letterSpacing():Number{ return (_letterSpacing); } } }//package org.papervision3d.typography
Section 147
//VectorLetter3D (org.papervision3d.typography.VectorLetter3D) package org.papervision3d.typography { import org.papervision3d.core.geom.renderables.*; import org.papervision3d.objects.special.*; import org.papervision3d.materials.special.*; public class VectorLetter3D extends VectorShape3D implements Letter3D { private var _height:Number; private var _width:Number; private var _font:Font3D; private var _char:String; public function VectorLetter3D(_arg1:String, _arg2:Letter3DMaterial, _arg3:Font3D){ var _local4:Vertex3D; this._char = _arg1; this._font = _arg3; super(_arg2, null); getLetterFromFont(); for each (_local4 in geometry.vertices) { _local4.x = (_local4.x - (_width / 2)); _local4.y = (_local4.y - (_height / 2)); _local4.y = (_local4.y * -1); }; } public function set height(_arg1:Number):void{ _height = _arg1; } public function get font():Font3D{ return (_font); } protected function getLetterFromFont():void{ _width = _font.widths[_char]; _height = _font.height; createVertices(_font.motifs[_char]); } public function get char():String{ return (_char); } public function set width(_arg1:Number):void{ _width = _arg1; } protected function createVertices(_arg1:Array):void{ var _local2:int; while (_local2 < _arg1.length) { switch (_arg1[_local2][0]){ case "M": graphics.moveTo(_arg1[_local2][1][0], _arg1[_local2][1][1]); break; case "L": graphics.lineTo(_arg1[_local2][1][0], _arg1[_local2][1][1]); break; case "C": graphics.curveTo(_arg1[_local2][1][0], _arg1[_local2][1][1], _arg1[_local2][1][2], _arg1[_local2][1][3]); break; }; _local2++; }; } public function get width():Number{ return (_width); } public function get height():Number{ return (_height); } public function set char(_arg1:String):void{ _char = _arg1; } public function set font(_arg1:Font3D):void{ _font = _arg1; } } }//package org.papervision3d.typography
Section 148
//ViewportLayerSortMode (org.papervision3d.view.layer.util.ViewportLayerSortMode) package org.papervision3d.view.layer.util { public class ViewportLayerSortMode { public static var Z_SORT:String = "z"; public static var ORIGIN_SORT:String = "origin"; public static var NONE:String = "none"; public static var INDEX_SORT:String = "index"; } }//package org.papervision3d.view.layer.util
Section 149
//ViewportBaseLayer (org.papervision3d.view.layer.ViewportBaseLayer) package org.papervision3d.view.layer { import org.papervision3d.view.*; import org.papervision3d.objects.*; public class ViewportBaseLayer extends ViewportLayer { public function ViewportBaseLayer(_arg1:Viewport3D){ super(_arg1, null); } override public function getChildLayer(_arg1:DisplayObject3D, _arg2:Boolean=true, _arg3:Boolean=false):ViewportLayer{ if (layers[_arg1]){ return (layers[_arg1]); }; if (((_arg2) || (_arg1.useOwnContainer))){ return (getChildLayerFor(_arg1, _arg3)); }; return (this); } override public function updateBeforeRender():void{ clear(); var _local1:int = (childLayers.length - 1); while (_local1 >= 0) { if (childLayers[_local1].dynamicLayer){ removeLayerAt(_local1); }; _local1--; }; super.updateBeforeRender(); } } }//package org.papervision3d.view.layer
Section 150
//ViewportLayer (org.papervision3d.view.layer.ViewportLayer) package org.papervision3d.view.layer { import org.papervision3d.view.*; import org.papervision3d.core.render.command.*; import flash.display.*; import org.papervision3d.objects.*; import org.papervision3d.core.log.*; import flash.utils.*; import org.papervision3d.view.layer.util.*; public class ViewportLayer extends Sprite { public var layerIndex:Number; public var layers:Dictionary; public var childLayers:Array; public var weight:Number;// = 0 public var dynamicLayer:Boolean;// = false public var forceDepth:Boolean;// = false public var displayObject3D:DisplayObject3D; public var sortMode:String; protected var viewport:Viewport3D; public var displayObjects:Dictionary; public var graphicsChannel:Graphics; public var originDepth:Number;// = 0 public var screenDepth:Number;// = 0 public function ViewportLayer(_arg1:Viewport3D, _arg2:DisplayObject3D, _arg3:Boolean=false){ layers = new Dictionary(true); displayObjects = new Dictionary(true); sortMode = ViewportLayerSortMode.Z_SORT; super(); this.viewport = _arg1; this.displayObject3D = _arg2; this.dynamicLayer = _arg3; this.graphicsChannel = this.graphics; if (_arg3){ this.filters = _arg2.filters; this.blendMode = _arg2.blendMode; this.alpha = _arg2.alpha; }; if (_arg2){ addDisplayObject3D(_arg2); _arg2.container = this; }; init(); } public function removeLayerAt(_arg1:Number):void{ var _local2:DisplayObject3D; for each (_local2 in childLayers[_arg1].displayObjects) { unlinkChild(_local2); }; removeChild(childLayers[_arg1]); childLayers.splice(_arg1, 1); } private function onChildAdded(_arg1:ViewportLayerEvent):void{ if (_arg1.do3d){ linkChild(_arg1.do3d, _arg1.layer, _arg1); }; } public function addLayer(_arg1:ViewportLayer):void{ var _local2:DisplayObject3D; var _local3:ViewportLayer; if (childLayers.indexOf(_arg1) != -1){ PaperLogger.warning("Child layer already exists in ViewportLayer"); return; }; childLayers.push(_arg1); addChild(_arg1); _arg1.addEventListener(ViewportLayerEvent.CHILD_ADDED, onChildAdded); _arg1.addEventListener(ViewportLayerEvent.CHILD_REMOVED, onChildRemoved); for each (_local2 in _arg1.displayObjects) { linkChild(_local2, _arg1); }; for each (_local3 in _arg1.layers) { for each (_local2 in _local3.displayObjects) { linkChild(_local2, _local3); }; }; } protected function getChildLayerFor(_arg1:DisplayObject3D, _arg2:Boolean=false):ViewportLayer{ var _local3:ViewportLayer; if (_arg1){ _local3 = new ViewportLayer(viewport, _arg1, _arg1.useOwnContainer); addLayer(_local3); if (_arg2){ _arg1.addChildrenToLayer(_arg1, _local3); }; return (_local3); } else { PaperLogger.warning("Needs to be a do3d"); }; return (null); } public function updateAfterRender():void{ var _local1:ViewportLayer; for each (_local1 in childLayers) { _local1.updateAfterRender(); }; } protected function init():void{ childLayers = new Array(); } public function clear():void{ graphicsChannel.clear(); reset(); } public function childLayerIndex(_arg1:DisplayObject3D):Number{ _arg1 = (_arg1.parentContainer) ? _arg1.parentContainer : _arg1; var _local2:int; while (_local2 < childLayers.length) { if (childLayers[_local2].hasDisplayObject3D(_arg1)){ return (_local2); }; _local2++; }; return (-1); } protected function reset():void{ if (!forceDepth){ screenDepth = 0; originDepth = 0; }; this.weight = 0; } public function updateInfo():void{ var _local1:ViewportLayer; for each (_local1 in childLayers) { _local1.updateInfo(); if (!forceDepth){ if (!isNaN(_local1.screenDepth)){ this.weight = (this.weight + _local1.weight); this.screenDepth = (this.screenDepth + (_local1.screenDepth * _local1.weight)); this.originDepth = (this.originDepth + (_local1.originDepth * _local1.weight)); }; }; }; if (!forceDepth){ this.screenDepth = (this.screenDepth / this.weight); this.originDepth = (this.originDepth / this.weight); }; } public function getChildLayer(_arg1:DisplayObject3D, _arg2:Boolean=true, _arg3:Boolean=false):ViewportLayer{ _arg1 = (_arg1.parentContainer) ? _arg1.parentContainer : _arg1; if (layers[_arg1]){ return (layers[_arg1]); }; if (_arg2){ return (getChildLayerFor(_arg1, _arg3)); }; return (null); } protected function orderLayers():void{ var _local2:ViewportLayer; if (sortMode == ViewportLayerSortMode.NONE){ return; }; var _local1:int; while (_local1 < childLayers.length) { _local2 = childLayers[_local1]; if (this.getChildIndex(_local2) != _local1){ this.setChildIndex(_local2, _local1); }; _local2.sortChildLayers(); _local1++; }; } public function updateBeforeRender():void{ var _local1:ViewportLayer; clear(); for each (_local1 in childLayers) { _local1.updateBeforeRender(); }; } public function hasDisplayObject3D(_arg1:DisplayObject3D):Boolean{ return (!((displayObjects[_arg1] == null))); } public function sortChildLayers():void{ switch (sortMode){ case ViewportLayerSortMode.Z_SORT: childLayers.sortOn("screenDepth", (Array.DESCENDING | Array.NUMERIC)); break; case ViewportLayerSortMode.INDEX_SORT: childLayers.sortOn("layerIndex", Array.NUMERIC); break; case ViewportLayerSortMode.ORIGIN_SORT: childLayers.sortOn(["originDepth", "screenDepth"], [(Array.DESCENDING | Array.NUMERIC), (Array.DESCENDING | Array.NUMERIC)]); break; }; orderLayers(); } private function onChildRemoved(_arg1:ViewportLayerEvent):void{ if (_arg1.do3d){ unlinkChild(_arg1.do3d, _arg1); }; } public function removeAllLayers():void{ var _local1:int = (childLayers.length - 1); while (_local1 >= 0) { removeLayerAt(_local1); _local1--; }; } public function processRenderItem(_arg1:RenderableListItem):void{ if (!forceDepth){ if (!isNaN(_arg1.screenZ)){ this.screenDepth = (this.screenDepth + _arg1.screenZ); if (_arg1.instance){ this.originDepth = (this.originDepth + _arg1.instance.world.n34); this.originDepth = (this.originDepth + _arg1.instance.screen.z); }; this.weight++; }; }; } public function removeLayer(_arg1:ViewportLayer):void{ var _local2:int = getChildIndex(_arg1); if (_local2 > -1){ removeLayerAt(_local2); } else { PaperLogger.error("Layer not found for removal."); }; } private function linkChild(_arg1:DisplayObject3D, _arg2:ViewportLayer, _arg3:ViewportLayerEvent=null):void{ layers[_arg1] = _arg2; dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_ADDED, _arg1, _arg2)); } public function addDisplayObject3D(_arg1:DisplayObject3D, _arg2:Boolean=false):void{ if (!_arg1){ return; }; displayObjects[_arg1] = _arg1; dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_ADDED, _arg1, this)); if (_arg2){ _arg1.addChildrenToLayer(_arg1, this); }; } public function removeDisplayObject3D(_arg1:DisplayObject3D):void{ var _local2:DisplayObject3D; displayObjects[_arg1] = null; for each (_local2 in _arg1) { removeDisplayObject3D(_local2); }; dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_REMOVED, _arg1, this)); } private function unlinkChild(_arg1:DisplayObject3D, _arg2:ViewportLayerEvent=null):void{ layers[_arg1] = null; dispatchEvent(new ViewportLayerEvent(ViewportLayerEvent.CHILD_REMOVED, _arg1)); } public function getLayerObjects(_arg1:Array=null):Array{ var _local2:DisplayObject3D; var _local3:ViewportLayer; if (!_arg1){ _arg1 = new Array(); }; for each (_local2 in this.displayObjects) { if (_local2){ _arg1.push(_local2); }; }; for each (_local3 in childLayers) { _local3.getLayerObjects(_arg1); }; return (_arg1); } } }//package org.papervision3d.view.layer
Section 151
//ViewportLayerEvent (org.papervision3d.view.layer.ViewportLayerEvent) package org.papervision3d.view.layer { import org.papervision3d.objects.*; import flash.events.*; public class ViewportLayerEvent extends Event { public var layer:ViewportLayer; public var do3d:DisplayObject3D; public static const CHILD_REMOVED:String = "childRemoved"; public static const CHILD_ADDED:String = "childAdded"; public function ViewportLayerEvent(_arg1:String, _arg2:DisplayObject3D=null, _arg3:ViewportLayer=null){ super(_arg1, false, false); this.do3d = _arg2; this.layer = _arg3; } } }//package org.papervision3d.view.layer
Section 152
//AbstractView (org.papervision3d.view.AbstractView) package org.papervision3d.view { import org.papervision3d.core.proto.*; import flash.display.*; import flash.events.*; import org.papervision3d.core.view.*; import org.papervision3d.render.*; import org.papervision3d.scenes.*; public class AbstractView extends Sprite implements IView { public var renderer:BasicRenderEngine; protected var _camera:CameraObject3D; protected var _width:Number; public var scene:Scene3D; protected var _height:Number; public var viewport:Viewport3D; public function set viewportWidth(_arg1:Number):void{ _width = _arg1; viewport.width = _arg1; } public function singleRender():void{ onRenderTick(); } public function startRendering():void{ addEventListener(Event.ENTER_FRAME, onRenderTick); viewport.containerSprite.cacheAsBitmap = false; } public function get viewportWidth():Number{ return (_width); } protected function onRenderTick(_arg1:Event=null):void{ renderer.renderScene(scene, _camera, viewport); } public function set viewportHeight(_arg1:Number):void{ _height = _arg1; viewport.height = _arg1; } public function get camera():CameraObject3D{ return (_camera); } public function get viewportHeight():Number{ return (_height); } public function stopRendering(_arg1:Boolean=false, _arg2:Boolean=false):void{ removeEventListener(Event.ENTER_FRAME, onRenderTick); if (_arg1){ onRenderTick(); }; if (_arg2){ viewport.containerSprite.cacheAsBitmap = true; } else { viewport.containerSprite.cacheAsBitmap = false; }; } } }//package org.papervision3d.view
Section 153
//BasicView (org.papervision3d.view.BasicView) package org.papervision3d.view { import org.papervision3d.objects.*; import org.papervision3d.cameras.*; import org.papervision3d.core.view.*; import org.papervision3d.render.*; import org.papervision3d.scenes.*; public class BasicView extends AbstractView implements IView { public function BasicView(_arg1:Number=640, _arg2:Number=480, _arg3:Boolean=true, _arg4:Boolean=false, _arg5:String="Target"){ scene = new Scene3D(); viewport = new Viewport3D(_arg1, _arg2, _arg3, _arg4); addChild(viewport); renderer = new BasicRenderEngine(); switch (_arg5){ case CameraType.DEBUG: _camera = new DebugCamera3D(viewport); break; case CameraType.TARGET: _camera = new Camera3D(60); _camera.target = DisplayObject3D.ZERO; break; case CameraType.SPRING: _camera = new SpringCamera3D(); _camera.target = DisplayObject3D.ZERO; break; case CameraType.FREE: default: _camera = new Camera3D(60); break; }; cameraAsCamera3D.update(viewport.sizeRectangle); } public function get cameraAsDebugCamera3D():DebugCamera3D{ return ((_camera as DebugCamera3D)); } public function get cameraAsCamera3D():Camera3D{ return ((_camera as Camera3D)); } } }//package org.papervision3d.view
Section 154
//Viewport3D (org.papervision3d.view.Viewport3D) package org.papervision3d.view { import org.papervision3d.core.render.data.*; import org.papervision3d.core.render.command.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.core.geom.renderables.*; import flash.events.*; import org.papervision3d.view.layer.*; import org.papervision3d.core.log.*; import flash.utils.*; import org.papervision3d.core.culling.*; import org.papervision3d.core.view.*; import org.papervision3d.core.render.*; import org.papervision3d.core.utils.*; public class Viewport3D extends Sprite implements IViewport3D { public var interactiveSceneManager:InteractiveSceneManager; public var lastRenderList:Array; public var cullingRectangle:Rectangle; protected var _interactive:Boolean; private var stageScaleModeSet:Boolean;// = false protected var _autoCulling:Boolean; protected var _viewportObjectFilter:ViewportObjectFilter; public var particleCuller:IParticleCuller; protected var _height:Number; protected var _width:Number; public var lineCuller:ILineCuller; protected var _layerInstances:Dictionary; protected var _autoScaleToStage:Boolean; public var triangleCuller:ITriangleCuller; protected var _lastRenderer:IRenderEngine; protected var _hWidth:Number; protected var _containerSprite:ViewportBaseLayer; protected var _hHeight:Number; public var sizeRectangle:Rectangle; protected var renderHitData:RenderHitData; protected var _autoClipping:Boolean; public function Viewport3D(_arg1:Number=640, _arg2:Number=480, _arg3:Boolean=false, _arg4:Boolean=false, _arg5:Boolean=true, _arg6:Boolean=true){ init(); this.interactive = _arg4; this.viewportWidth = _arg1; this.viewportHeight = _arg2; this.autoClipping = _arg5; this.autoCulling = _arg6; this.autoScaleToStage = _arg3; this._layerInstances = new Dictionary(true); } public function set viewportWidth(_arg1:Number):void{ _width = _arg1; _hWidth = (_arg1 / 2); containerSprite.x = _hWidth; cullingRectangle.x = -(_hWidth); cullingRectangle.width = _arg1; sizeRectangle.width = _arg1; if (_autoClipping){ scrollRect = sizeRectangle; }; } public function get autoCulling():Boolean{ return (_autoCulling); } protected function onStageResize(_arg1:Event=null):void{ if (_autoScaleToStage){ viewportWidth = stage.stageWidth; viewportHeight = stage.stageHeight; }; } public function set autoCulling(_arg1:Boolean):void{ if (_arg1){ triangleCuller = new RectangleTriangleCuller(cullingRectangle); particleCuller = new RectangleParticleCuller(cullingRectangle); lineCuller = new RectangleLineCuller(cullingRectangle); } else { if (!_arg1){ triangleCuller = new DefaultTriangleCuller(); particleCuller = new DefaultParticleCuller(); lineCuller = new DefaultLineCuller(); }; }; _autoCulling = _arg1; } public function getChildLayer(_arg1:DisplayObject3D, _arg2:Boolean=true, _arg3:Boolean=true):ViewportLayer{ return (containerSprite.getChildLayer(_arg1, _arg2, _arg3)); } protected function init():void{ this.renderHitData = new RenderHitData(); lastRenderList = new Array(); sizeRectangle = new Rectangle(); cullingRectangle = new Rectangle(); _containerSprite = new ViewportBaseLayer(this); _containerSprite.doubleClickEnabled = true; addChild(_containerSprite); addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage); } public function get autoClipping():Boolean{ return (_autoClipping); } public function updateAfterRender(_arg1:RenderSessionData):void{ var _local2:ViewportLayer; if (interactive){ interactiveSceneManager.updateAfterRender(); }; if (_arg1.renderLayers){ for each (_local2 in _arg1.renderLayers) { _local2.updateInfo(); _local2.sortChildLayers(); _local2.updateAfterRender(); }; } else { containerSprite.updateInfo(); containerSprite.updateAfterRender(); }; containerSprite.sortChildLayers(); } protected function onAddedToStage(_arg1:Event):void{ if (_autoScaleToStage){ setStageScaleMode(); }; stage.addEventListener(Event.RESIZE, onStageResize); onStageResize(); } public function get containerSprite():ViewportLayer{ return (_containerSprite); } public function set autoClipping(_arg1:Boolean):void{ if (_arg1){ scrollRect = sizeRectangle; } else { scrollRect = null; }; _autoClipping = _arg1; } protected function setStageScaleMode():void{ if (!stageScaleModeSet){ PaperLogger.info("Viewport autoScaleToStage : Papervision has changed the Stage scale mode."); stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stageScaleModeSet = true; }; } public function accessLayerFor(_arg1:RenderableListItem, _arg2:Boolean=false):ViewportLayer{ var _local3:DisplayObject3D; if (_arg1.renderableInstance){ _local3 = _arg1.renderableInstance.instance; _local3 = (_local3.parentContainer) ? _local3.parentContainer : _local3; if (containerSprite.layers[_local3]){ if (_arg2){ _local3.container = containerSprite.layers[_local3]; }; return (containerSprite.layers[_local3]); } else { if (_local3.useOwnContainer){ return (containerSprite.getChildLayer(_local3, true, true)); }; }; }; return (containerSprite); } public function get viewportWidth():Number{ return (_width); } public function set interactive(_arg1:Boolean):void{ if (_arg1 != _interactive){ if (((_interactive) && (interactiveSceneManager))){ interactiveSceneManager.destroy(); interactiveSceneManager = null; }; _interactive = _arg1; if (_arg1){ interactiveSceneManager = new InteractiveSceneManager(this); }; }; } public function set viewportObjectFilter(_arg1:ViewportObjectFilter):void{ _viewportObjectFilter = _arg1; } public function set autoScaleToStage(_arg1:Boolean):void{ _autoScaleToStage = _arg1; if (((_arg1) && (!((stage == null))))){ setStageScaleMode(); onStageResize(); }; } public function set viewportHeight(_arg1:Number):void{ _height = _arg1; _hHeight = (_arg1 / 2); containerSprite.y = _hHeight; cullingRectangle.y = -(_hHeight); cullingRectangle.height = _arg1; sizeRectangle.height = _arg1; if (_autoClipping){ scrollRect = sizeRectangle; }; } public function updateBeforeRender(_arg1:RenderSessionData):void{ var _local2:ViewportLayer; lastRenderList.length = 0; if (_arg1.renderLayers){ for each (_local2 in _arg1.renderLayers) { _local2.updateBeforeRender(); }; } else { _containerSprite.updateBeforeRender(); }; _layerInstances = new Dictionary(true); } public function hitTestMouse():RenderHitData{ var _local1:Point = new Point(containerSprite.mouseX, containerSprite.mouseY); return (hitTestPoint2D(_local1)); } public function get interactive():Boolean{ return (_interactive); } public function get autoScaleToStage():Boolean{ return (_autoScaleToStage); } public function hitTestPointObject(_arg1:Point, _arg2:DisplayObject3D):RenderHitData{ var _local3:RenderableListItem; var _local4:RenderHitData; var _local5:IRenderListItem; var _local6:uint; if (interactive){ _local4 = new RenderHitData(); _local6 = lastRenderList.length; while ((_local5 = lastRenderList[--_local6])) { if ((_local5 is RenderableListItem)){ _local3 = (_local5 as RenderableListItem); if ((_local3.renderableInstance is Triangle3D)){ if (Triangle3D(_local3.renderableInstance).instance != _arg2){ continue; }; } else { continue; }; _local4 = _local3.hitTestPoint2D(_arg1, _local4); if (_local4.hasHit){ return (_local4); }; }; }; }; return (new RenderHitData()); } public function hitTestPoint2D(_arg1:Point):RenderHitData{ var _local2:RenderableListItem; var _local3:RenderHitData; var _local4:IRenderListItem; var _local5:uint; renderHitData.clear(); if (interactive){ _local3 = renderHitData; _local5 = lastRenderList.length; while ((_local4 = lastRenderList[--_local5])) { if ((_local4 is RenderableListItem)){ _local2 = (_local4 as RenderableListItem); _local3 = _local2.hitTestPoint2D(_arg1, _local3); if (_local3.hasHit){ return (_local3); }; }; }; }; return (renderHitData); } protected function onRemovedFromStage(_arg1:Event):void{ stage.removeEventListener(Event.RESIZE, onStageResize); } public function get viewportHeight():Number{ return (_height); } public function destroy():void{ if (interactiveSceneManager){ interactiveSceneManager.destroy(); interactiveSceneManager = null; }; lastRenderList = null; } public function get viewportObjectFilter():ViewportObjectFilter{ return (_viewportObjectFilter); } } }//package org.papervision3d.view
Section 155
//Papervision3D (org.papervision3d.Papervision3D) package org.papervision3d { import org.papervision3d.core.log.*; public class Papervision3D { public static var useDEGREES:Boolean = true; public static var useRIGHTHANDED:Boolean = false; public static var PAPERLOGGER:PaperLogger = PaperLogger.getInstance(); public static var NAME:String = "Papervision3D"; public static var DATE:String = "March 12th, 2009"; public static var AUTHOR:String = "(c) 2006-2008 Copyright by Carlos Ulloa | John Grden | Ralph Hauwert | Tim Knip | Andy Zupko"; public static var VERSION:String = "2.0.0"; public static var usePERCENT:Boolean = false; } }//package org.papervision3d
Section 156
//sound2 (sound2) package { import flash.media.*; public dynamic class sound2 extends Sound { } }//package
Section 157
//sound3 (sound3) package { import flash.media.*; public dynamic class sound3 extends Sound { } }//package
Section 158
//testClass (testClass) package { import org.papervision3d.materials.utils.*; import org.papervision3d.view.*; import flash.display.*; import flash.geom.*; import org.papervision3d.objects.*; import org.papervision3d.objects.special.*; import org.papervision3d.typography.*; import org.papervision3d.materials.*; import org.papervision3d.materials.shaders.*; import flash.events.*; import org.papervision3d.materials.special.*; import org.papervision3d.cameras.*; import org.papervision3d.core.clipping.*; import org.papervision3d.events.*; import org.papervision3d.typography.fonts.*; import org.papervision3d.core.utils.*; import flash.media.*; import org.papervision3d.render.*; import org.papervision3d.objects.primitives.*; import org.papervision3d.scenes.*; import org.papervision3d.lights.*; import flash.text.*; import org.ascollada.*; import flash.net.*; public class testClass extends BasicView { var map_20:Array; public var txts:MovieClip; var map_24:Array; var cmap_12:Array; var map_21:Array; var map_22:Array; var map_23:Array; var map_0:Array; var map_1:Array; var map_2:Array; var map_3:Array; var map_4:Array; var map_5:Array; var map_6:Array; var map_7:Array; var map_8:Array; var map_9:Array; var cmap_13:Array; var cmap_14:Array; var cmap_16:Array; var cmap_18:Array; var cmap_10:Array; var cmap_22:Array; var cmap_17:Array; var cmap_24:Array; var map_25:Array; var cmap_21:Array; var cmap_25:Array; var acti:uint;// = 0 var cmap_19:Array; var cmap_20:Array; var s1:sound3; var s2:sound2; var cmap_15:Array; var cmap_23:Array; var cmap_11:Array; var map2:Array; var sc:SoundChannel; var rs:Number;// = 1.5 var C:Number;// = 0.0174532925199433 var st:SoundTransform; var d:Number;// = 0 var clrs:Array; var rtn:Number;// = 0 var n:uint;// = 0 var cs:Array; var tm:testModel; var ts:Array; var invt:uint;// = 0 var fgrscl;// = 8.5 var onStair:Boolean;// = false public var bobby:MovieClip; var tm2:Letter3DMaterial; var tm3:Letter3DMaterial; var xd:Number;// = 0 var curMap:uint;// = 0 var yd:Number;// = 0 var onceOff:Boolean;// = false var txColor:ColorTransform; var k_keys:Array; public var btn1:SimpleButton; public var btn2:SimpleButton; public var btn3:SimpleButton; var textMaterial:Letter3DMaterial; var cmap_0:Array; var cmap_1:Array; var cmap_2:Array; var cmap_3:Array; var cmap_4:Array; var cmap_5:Array; var cmap_6:Array; var cmap_7:Array; var cmap_8:Array; var cmap_9:Array; var planeMaterial:ColorMaterial; var dist:uint;// = 15 var spd:uint;// = 7 var cs2:Array; var cs3:Array; var pm2:ColorMaterial; var pm3:ColorMaterial; var temp; var map_10:Array; public var vgt:MovieClip; var map_12:Array; var map_13:Array; var map_14:Array; var map_15:Array; var map_16:Array; var map_17:Array; var map_11:Array; var map_19:Array; var map_18:Array; public function testClass(){ var _local4:uint; var _local14:Cube; var _local15:Cube; var _local16:testModel; var _local17:Plane; var _local18:Plane; cs = new Array(); cs2 = new Array(); cs3 = new Array(); ts = new Array(); map2 = new Array(); map_0 = new Array(); map_1 = new Array(); map_2 = new Array(); map_3 = new Array(); map_4 = new Array(); map_5 = new Array(); map_6 = new Array(); map_7 = new Array(); map_8 = new Array(); map_9 = new Array(); map_10 = new Array(); map_11 = new Array(); map_12 = new Array(); map_13 = new Array(); map_14 = new Array(); map_15 = new Array(); map_16 = new Array(); map_17 = new Array(); map_18 = new Array(); map_19 = new Array(); map_20 = new Array(); map_21 = new Array(); map_22 = new Array(); map_23 = new Array(); map_24 = new Array(); map_25 = new Array(); cmap_0 = new Array(); cmap_1 = new Array(); cmap_2 = new Array(); cmap_3 = new Array(); cmap_4 = new Array(); cmap_5 = new Array(); cmap_6 = new Array(); cmap_7 = new Array(); cmap_8 = new Array(); cmap_9 = new Array(); cmap_10 = new Array(); cmap_11 = new Array(); cmap_12 = new Array(); cmap_13 = new Array(); cmap_14 = new Array(); cmap_15 = new Array(); cmap_16 = new Array(); cmap_17 = new Array(); cmap_18 = new Array(); cmap_19 = new Array(); cmap_20 = new Array(); cmap_21 = new Array(); cmap_22 = new Array(); cmap_23 = new Array(); cmap_24 = new Array(); cmap_25 = new Array(); s1 = new sound3(); s2 = new sound2(); clrs = [16446238, 16691745, 16748831, 16672023]; k_keys = new Array(); txColor = new ColorTransform(); super(); sc = s1.play(0, 1000); st = sc.soundTransform; map_0 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 5, 0, 5, 0, 5, 0, 5, 0, 4, 0, 5, 0, 5, 0, 5, 0, 5, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 0, 2, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 1, 0, 0, 6, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 0, 0, 1, 0], [0, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 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]]; map_2 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 7, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 5, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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]]; map_3 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [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, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 6, 0, 5, 0, 5, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 5, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 1, 0, 0, 5, 0, 5, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 5, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 1, 0, 0, 5, 0, 5, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 5, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 5, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 2, 2, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 2, 0, 0, 1, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 7, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_4 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 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, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 7, 0, 5, 5, 5, 2, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 5, 2, 2, 2, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0], [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 5, 5, 5, 2, 2, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 2, 0], [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 5, 5, 5, 2, 2, 0], [0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0], [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 6, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_5 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 0, 6, 5, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 7, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 0, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 0, 0, 5, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 4, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_6 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 0, 0, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 2, 0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 0, 0, 2, 6, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 0, 0, 0, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_7 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 2, 2, 5, 9, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 2, 2, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 0, 0, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_8 = [[0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 8, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 5, 2, 2, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 7, 1, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 4, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 5, 5, 5, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_9 = [[0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 7, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 0, 7, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [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, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 0], [7, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 7], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_10 = [[0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 7, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 7, 0, 0, 0, 7, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 6, 0], [6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 6], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 1, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_11 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 6, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 2, 0], [0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 5, 1, 2, 0], [0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 7, 5, 2, 2, 2, 2, 2, 1, 1, 5, 5, 1, 2, 0], [0, 0, 2, 5, 4, 0, 0, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 2, 0], [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 5, 7, 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_12 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [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, 13, 11, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 5, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0], [0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 5, 8, 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0], [0, 0, 2, 5, 0, 0, 0, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 2, 0], [0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 5, 8, 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_13 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 6, 2, 6, 2, 11, 2, 6, 2, 6, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 6, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 6, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 6, 5, 0, 5, 0, 5, 0, 5, 0, 5, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 5, 2, 6, 2, 6, 2, 6, 2, 6, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_14 = [[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 2, 2, 2, 2, 2, 2, 0], [0, 2, 5, 9, 5, 9, 5, 2, 0], [0, 2, 5, 2, 0, 2, 5, 2, 0], [0, 2, 5, 2, 4, 2, 5, 2, 0], [0, 2, 5, 2, 2, 2, 5, 2, 0], [0, 2, 10, 5, 5, 5, 10, 2, 0], [0, 2, 2, 2, 5, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]; map_15 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 2, 2, 2, 2, 0], [0, 2, 5, 5, 5, 5, 5, 2, 0], [0, 2, 5, 2, 0, 2, 5, 2, 0], [0, 2, 5, 2, 4, 2, 5, 2, 0], [0, 2, 5, 2, 7, 2, 5, 2, 0], [0, 2, 5, 2, 4, 2, 5, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_16 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_17 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_18 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_19 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_20 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_21 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_22 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 5, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_23 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 5, 5, 5, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 0, 2, 0], [0, 0, 0, 2, 4, 2, 0], [0, 0, 0, 2, 7, 2, 0], [0, 0, 0, 2, 2, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_24 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 9, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 2, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0], [0, 0, 0, 2, 2, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; map_25 = [[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]; _local4 = 0; while (_local4 < 26) { root[("cmap_" + _local4)] = compressMap(root[("map_" + _local4)]); _local4++; }; planeMaterial = new ColorMaterial(10348771); planeMaterial.doubleSided = true; pm2 = new ColorMaterial(3221286); pm2.doubleSided = true; pm3 = new ColorMaterial(16709095); pm3.doubleSided = true; var _local1:MaterialsList = new MaterialsList(); _local1.addMaterial(planeMaterial, "front"); _local1.addMaterial(planeMaterial, "back"); _local1.addMaterial(planeMaterial, "left"); _local1.addMaterial(planeMaterial, "right"); _local1.addMaterial(planeMaterial, "top"); _local1.addMaterial(planeMaterial, "bottom"); var _local2:MaterialsList = new MaterialsList(); _local2.addMaterial(pm2, "front"); _local2.addMaterial(pm2, "back"); _local2.addMaterial(pm2, "left"); _local2.addMaterial(pm2, "right"); _local2.addMaterial(pm2, "top"); _local2.addMaterial(pm2, "bottom"); var _local3:MaterialsList = new MaterialsList(); _local3.addMaterial(pm3, "front"); _local3.addMaterial(pm3, "back"); _local3.addMaterial(pm3, "left"); _local3.addMaterial(pm3, "right"); _local3.addMaterial(pm3, "top"); _local3.addMaterial(pm3, "bottom"); camera.target = null; camera.useCulling = false; renderer.clipping = new FrustumClipping(FrustumClipping.NEAR); startRendering(); addEventListener(Event.ENTER_FRAME, ef); _local4 = 0; var _local5:uint; _local4 = 0; while (_local4 < map_0.length) { map2.push(map_0[_local4]); _local5 = 0; while (_local5 < map_0[_local4].length) { if (map_0[_local4][_local5] == 1){ _local14 = new Cube(_local1, 100, 100, 100); _local14.x = ((_local5 * 100) + 50); _local14.z = ((_local4 * 100) + 50); cs.push(_local14); scene.addChild(_local14); } else { if (map_0[_local4][_local5] == 2){ _local15 = new Cube(_local2, 100, 100, 100); _local15.x = ((_local5 * 100) + 50); _local15.z = ((_local4 * 100) + 50); cs.push(_local15); scene.addChild(_local15); } else { if (map_0[_local4][_local5] == 3){ map_0[_local4][_local5] = 0; camera.x = ((_local5 * 100) + 50); camera.z = ((_local4 * 100) + 50); } else { if (map_0[_local4][_local5] == 4){ _local16 = new testModel(pm3, curMap); _local16.x = ((_local5 * 100) + 50); _local16.z = ((_local4 * 100) + 50); _local16.scale = fgrscl; cs2.push(_local16); scene.addChild(_local16); } else { if (map_0[_local4][_local5] == 5){ _local17 = new Plane(planeMaterial, 100, 100); _local17.x = ((_local5 * 100) + 50); _local17.z = ((_local4 * 100) + 50); _local17.y = -50; _local17.rotationX = 90; cs.push(_local17); scene.addChild(_local17); _local18 = new Plane(planeMaterial, 100, 100); _local18.x = ((_local5 * 100) + 50); _local18.z = ((_local4 * 100) + 50); _local18.y = 50; _local18.rotationX = 90; cs.push(_local18); scene.addChild(_local18); }; }; }; }; }; _local5++; }; _local4++; }; camera.x = -257; camera.z = 1425; camera.rotationY = 64; addChild(txts); addChild(vgt); addChild(btn1); addChild(btn2); addChild(bobby); root.scaleX = -1; root.x = 550; textMaterial = new Letter3DMaterial(10348771); textMaterial.doubleSided = true; tm2 = new Letter3DMaterial(10348771); tm2.doubleSided = true; tm3 = new Letter3DMaterial(3221286); tm3.doubleSided = true; var _local6:Font3D = new AlteHaasGrotesk(); var _local7:Text3D = new Text3D("FEIGN:", _local6, textMaterial); _local7.rotationY = (180 + 64); _local7.x = -50; _local7.z = 1508; _local7.y = 113; scene.addChild(_local7); ts.push(_local7); var _local8:Font3D = new GeosansLight(); var _local9:Text3D = new Text3D("GAME BY IAN SNYDER // MUSIC BY BROTHER ANDROID", _local8, textMaterial); _local9.rotationY = (180 + 64); _local9.x = 1531; _local9.z = 2017; _local9.y = 387; scene.addChild(_local9); ts.push(_local9); var _local10:Font3D = new AlteHaasGrotesk(); var _local11:Text3D = new Text3D("COLLECT NINE BODIES", _local10, tm3); _local11.scale = 0.265; _local11.rotationY = (180 + 64); _local11.x = -85; _local11.z = 1513; _local11.y = -73; scene.addChild(_local11); ts.push(_local11); var _local12:Font3D = new GeosansLight(); var _local13:Text3D = new Text3D("USE ARROW KEYS AND A / D TO MOVE", _local12, tm3); _local13.rotationY = (180 + 64); _local13.scale = 0.5; _local13.x = 427; _local13.z = 2061; _local13.y = -350; scene.addChild(_local13); ts.push(_local13); camera.y = 23; btn1.alpha = (btn2.alpha = (btn3.alpha = 0)); addChild(btn1); addChild(btn2); addChild(btn3); btn3.addEventListener(MouseEvent.CLICK, testF); btn1.addEventListener(MouseEvent.CLICK, mySite); btn2.addEventListener(MouseEvent.CLICK, BRO); btn3.addEventListener(MouseEvent.ROLL_OVER, dark); btn3.addEventListener(MouseEvent.ROLL_OUT, light); } public function keyUpListener(_arg1:KeyboardEvent):void{ var _local2:uint; while (_local2 < k_keys.length) { if (k_keys[_local2] == _arg1.keyCode){ k_keys.splice(_local2, 1); break; }; _local2++; }; } public function room14():void{ makeTile(5, 5, -93); makeTile(5, 6, -93); makeTile(5, 7, -93); makeTile(5, 8, -93); makeTile(5, 9, -93); makeTile(5, 5, -94); makeTile(5, 9, -94); makeTile(5, 5, -95); makeTile(5, 9, -95); makeTile(5, 5, -96); makeTile(5, 9, -96); makeTile(5, 5, -97); makeTile(5, 6, -97); makeTile(5, 7, -97); makeTile(5, 8, -97); makeTile(5, 9, -97); makeTile(2, 6, -94); makeTile(2, 7, -94); makeTile(2, 8, -94); makeTile(2, 6, -95); makeTile(4, 7, -95); makeTile(2, 8, -95); makeTile(2, 6, -96); makeTile(2, 8, -96); makeTile(2, 4, -92); makeTile(2, 5, -92); makeTile(2, 6, -92); makeTile(2, 8, -92); makeTile(2, 9, -92); makeTile(2, 10, -92); makeTile(2, 4, -93); makeTile(2, 10, -93); makeTile(2, 4, -94); makeTile(2, 10, -94); makeTile(2, 4, -95); makeTile(2, 10, -95); makeTile(2, 4, -96); makeTile(2, 10, -96); makeTile(2, 4, -97); makeTile(2, 10, -97); makeTile(2, 4, -98); makeTile(2, 5, -98); makeTile(2, 6, -98); makeTile(2, 7, -98); makeTile(2, 8, -98); makeTile(2, 9, -98); makeTile(2, 10, -98); } public function isWall(_arg1:uint):Boolean{ return ((((_arg1 == 1)) || ((_arg1 == 2)))); } public function isOther(_arg1:uint):Boolean{ return ((((((((_arg1 == 4)) || ((_arg1 == 11)))) || ((_arg1 == 12)))) || ((_arg1 == 13)))); } public function zapMap(_arg1:Number, _arg2:Number, _arg3:uint):void{ if (_arg1 < 0){ _arg1 = 0; } else { if (_arg1 > (100 * (map2[0].length - 1))){ _arg1 = (100 * (map2[0].length - 1)); }; }; if (_arg2 < 0){ _arg2 = 0; } else { if (_arg2 > (100 * (map2.length - 1))){ _arg2 = (100 * (map2.length - 1)); }; }; map2[int((_arg2 / 100))][int((_arg1 / 100))] = 0; txts.cntr.nextFrame(); txts.cntr2.nextFrame(); if ((((curMap == 15)) && (!(s2.playing)))){ s2.play(); s2.playing = true; }; if (txts.cntr.currentFrame == 10){ curMap++; newMap(curMap); }; txts.alpha = 1; var _local4:uint; while (_local4 < root[("cmap_" + _arg3)].length) { if (root[("cmap_" + _arg3)][_local4][2] == 4){ root[("cmap_" + _arg3)].splice(_local4, 1); break; }; _local4++; }; } public function compressMap(_arg1:Array):Array{ var _local3:int; var _local5:uint; var _local2:Array = new Array(); var _local4:uint; while (_local4 < _arg1.length) { _local5 = 0; while (_local5 < _arg1[_local4].length) { if (isTile(_arg1[_local4][_local5])){ _local2.push([_local5, _local4, 5]); } else { if (isWall(_arg1[_local4][_local5])){ if (!isWall(_arg1[(_local4 - 1)][_local5])){ _local2.push([_local5, _local4, _arg1[_local4][_local5], 1]); }; if (!isWall(_arg1[_local4][(_local5 + 1)])){ _local2.push([_local5, _local4, _arg1[_local4][_local5], 2]); }; if (!isWall(_arg1[(_local4 + 1)][_local5])){ _local2.push([_local5, _local4, _arg1[_local4][_local5], 3]); }; if (!isWall(_arg1[_local4][(_local5 - 1)])){ _local2.push([_local5, _local4, _arg1[_local4][_local5], 4]); }; } else { if (isOther(_arg1[_local4][_local5])){ _local2.push([_local5, _local4, _arg1[_local4][_local5]]); }; }; }; _local5++; }; _local4++; }; return (_local2); } public function ef(_arg1:Event):void{ if (((!((curMap == 0))) && (ts))){ textMaterial.fillColor = (textMaterial.fillColor - uint(460551)); if (textMaterial.fillColor <= uint(460551)){ n = 0; while (n < ts.length) { scene.removeChild(ts[n]); ts[n] = null; n++; }; ts = null; }; }; if (k_keys.length == 0){ txts.alpha = (txts.alpha + 0.01); } else { txts.alpha = (txts.alpha - 0.025); }; if (txts.alpha > 1){ txts.alpha = 1; } else { if (txts.alpha < 0){ txts.alpha = 0; }; }; if (((!(onceOff)) && ((txts.currentFrame == 2)))){ txts.alpha = 0; }; if (keyDown(39)){ camera.rotationY = (camera.rotationY - 3); bobby.x = (bobby.x + 19); } else { if (keyDown(37)){ camera.rotationY = (camera.rotationY + 3); bobby.x = (bobby.x - 19); }; }; if (((keyDown(40)) || (keyDown((65 + 18))))){ camera.z = (camera.z - (spd * Math.cos((camera.rotationY * C)))); camera.x = (camera.x - (spd * Math.sin((camera.rotationY * C)))); } else { if (((keyDown(38)) || (keyDown((65 + 22))))){ camera.z = (camera.z + (spd * Math.cos((camera.rotationY * C)))); camera.x = (camera.x + (spd * Math.sin((camera.rotationY * C)))); }; }; if (keyDown(65)){ camera.x = (camera.x + (spd * Math.cos((camera.rotationY * C)))); camera.z = (camera.z - (spd * Math.sin((camera.rotationY * C)))); } else { if (keyDown(68)){ camera.x = (camera.x - (spd * Math.cos((camera.rotationY * C)))); camera.z = (camera.z + (spd * Math.sin((camera.rotationY * C)))); }; }; if (bobby.x < (-(bobby.width) / 2)){ bobby.x = 0; } else { if (bobby.x > 0){ bobby.x = (-(bobby.width) / 2); }; }; if (acti < ((txts.cntr.currentFrame - 1) * 1000)){ acti = (acti + 4); }; txColor.color = (planeMaterial.fillColor = avgC(10348771, 0xC2C2C2, (acti / 9000))); pm3.fillColor = clrs[uint((Math.random() * clrs.length))]; if (txts.currentFrame != 1){ txts.cntr.transform.colorTransform = txColor; }; if ((((((curMap == 12)) || ((curMap == 13)))) && (!(s2.playing)))){ st.volume = Math.min((1 - (camera.z / -5000)), 1); if (st.volume < 0){ st.volume = 0; }; sc.soundTransform = st; }; if ((((((camera.z < -3000)) && ((txts.cntr.currentFrame == 1)))) && ((((curMap == 12)) || ((curMap == 13)))))){ if (cs3.length == 0){ room14(); }; if ((((((mapAt2((camera.x - dist), (camera.z - dist)) == 1)) || ((mapAt2((camera.x - dist), (camera.z - dist)) == 2)))) || ((mapAt2((camera.x - dist), (camera.z - dist)) == 2)))){ if ((((camera.x - 300) - dist) % 100) > (((camera.z + 9900) - dist) % 100)){ camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist); } else { camera.z = ((100 * int(((camera.z - dist) / 100))) + dist); }; }; if ((((mapAt2((camera.x + dist), (camera.z + dist)) == 1)) || ((mapAt2((camera.x + dist), (camera.z + dist)) == 2)))){ if ((((camera.x - 300) + dist) % 100) > (((camera.z + 9900) + dist) % 100)){ camera.z = ((100 * int(((camera.z - dist) / 100))) - dist); } else { camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist); }; }; if ((((mapAt2((camera.x + dist), (camera.z - dist)) == 1)) || ((mapAt2((camera.x + dist), (camera.z - dist)) == 2)))){ if (((((camera.x - 300) + dist) % 100) + (((camera.z + 9900) - dist) % 100)) < 100){ camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist); } else { camera.z = ((100 * int(((camera.z - dist) / 100))) + dist); }; }; if ((((mapAt2((camera.x - dist), (camera.z + dist)) == 1)) || ((mapAt2((camera.x - dist), (camera.z + dist)) == 2)))){ if (((((camera.x - 300) - dist) % 100) + (((camera.z + 9900) + dist) % 100)) < 100){ camera.z = ((100 * int(((camera.z - dist) / 100))) - dist); } else { camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist); }; }; if ((((mapAt2(camera.x, camera.z) == 10)) && (!(onStair)))){ curMap = 14; newMap(curMap); camera.x = (camera.x - 300); camera.z = (camera.z + 9900); n = 0; while (n < cs3.length) { scene.removeChild(cs3[n]); n++; }; }; onStair = (mapAt(camera.x, camera.z) == 10); } else { if ((((((mapAt((camera.x - dist), (camera.z - dist)) == 1)) || ((mapAt((camera.x - dist), (camera.z - dist)) == 2)))) || ((mapAt((camera.x - dist), (camera.z - dist)) == 13)))){ if (((camera.x - dist) % 100) > ((camera.z - dist) % 100)){ camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist); } else { camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) + dist); }; }; if ((((((mapAt((camera.x + dist), (camera.z + dist)) == 1)) || ((mapAt((camera.x + dist), (camera.z + dist)) == 2)))) || ((mapAt((camera.x + dist), (camera.z + dist)) == 13)))){ if (((camera.x + dist) % 100) > ((camera.z + dist) % 100)){ camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) - dist); } else { camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist); }; }; if ((((((mapAt((camera.x + dist), (camera.z - dist)) == 1)) || ((mapAt((camera.x + dist), (camera.z - dist)) == 2)))) || ((mapAt((camera.x + dist), (camera.z - dist)) == 13)))){ if ((((camera.x + dist) % 100) + ((camera.z - dist) % 100)) < 100){ camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) - dist); } else { camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) + dist); }; }; if ((((((mapAt((camera.x - dist), (camera.z + dist)) == 1)) || ((mapAt((camera.x - dist), (camera.z + dist)) == 2)))) || ((mapAt((camera.x - dist), (camera.z + dist)) == 13)))){ if ((((camera.x - dist) % 100) + ((camera.z + dist) % 100)) < 100){ camera.z = (((100 * int(((camera.z - dist) / 100))) + 100) - dist); } else { camera.x = (((100 * int(((camera.x - dist) / 100))) + 100) + dist); }; }; if ((((((mapAt(camera.x, camera.z) == 6)) || ((mapAt(camera.x, camera.z) == 8)))) && (!(onStair)))){ curMap--; newMap(curMap); } else { if ((((((mapAt(camera.x, camera.z) == 7)) || ((mapAt(camera.x, camera.z) == 9)))) && (!(onStair)))){ curMap++; newMap(curMap); } else { if (mapAt(camera.x, camera.z) == 4){ zapMap(camera.x, camera.z, curMap); newMap(curMap); }; }; }; onStair = (((((((mapAt(camera.x, camera.z) == 6)) || ((mapAt(camera.x, camera.z) == 7)))) || ((mapAt(camera.x, camera.z) == 9)))) || ((mapAt(camera.x, camera.z) == 8))); }; n = 0; while (n < cs2.length) { xd = (camera.x - cs2[n].x); yd = (camera.z - cs2[n].z); d = Math.sqrt(((xd * xd) + (yd * yd))); n++; }; } public function mapAt(_arg1:Number, _arg2:Number):uint{ if (_arg2 < 0){ _arg2 = 0; } else { if (_arg2 > (100 * (map2.length - 1))){ _arg2 = (100 * (map2.length - 1)); }; }; _arg2 = int((_arg2 / 100)); if (_arg1 < 0){ _arg1 = 0; } else { if (_arg1 > (100 * (map2[_arg2].length - 1))){ _arg1 = (100 * (map2[_arg2].length - 1)); }; }; return (map2[_arg2][int((_arg1 / 100))]); } public function newText2(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:Number, _arg7:Letter3DMaterial):void{ var _local8:Font3D = new AlteHaasGrotesk(); var _local9:Text3D = new Text3D(_arg1, _local8, _arg7); _local9.rotationY = _arg5; _local9.x = _arg2; _local9.y = _arg3; _local9.z = _arg4; _local9.scale = _arg6; scene.addChild(_local9); cs.push(_local9); } public function newText(_arg1:String, _arg2:Number, _arg3:Number, _arg4:Number, _arg5:int, _arg6:Number, _arg7:Letter3DMaterial):void{ var _local8:Font3D = new GeosansLight(); var _local9:Text3D = new Text3D(_arg1, _local8, _arg7); _local9.rotationY = _arg5; _local9.x = _arg2; _local9.y = _arg3; _local9.z = _arg4; _local9.scale = _arg6; scene.addChild(_local9); cs.push(_local9); } public function isTile(_arg1:uint):Boolean{ return ((((((((_arg1 == 5)) || ((_arg1 == 8)))) || ((_arg1 == 9)))) || ((_arg1 == 10)))); } public function mySite(_arg1:MouseEvent):void{ var _local2:URLRequest = new URLRequest("http://ian.janasnyder.com/"); navigateToURL(_local2, "_blank"); } public function light(_arg1:MouseEvent):void{ txts.ttl.gotoAndStop(1); } public function sameWall(_arg1:uint, _arg2:uint):Boolean{ return ((_arg1 == _arg2)); } public function delMap():void{ var _local1:uint; _local1 = 0; while ((((_local1 < cs.length)) || ((_local1 < cs2.length)))) { scene.removeChild(cs[_local1]); cs[_local1] = null; scene.removeChild(cs2[_local1]); cs2[_local1] = null; _local1++; }; cs = []; cs2 = []; map2 = []; } public function mapAt2(_arg1:Number, _arg2:Number):uint{ _arg2 = (_arg2 + 9900); _arg1 = (_arg1 - 300); if (_arg2 < 0){ _arg2 = 0; } else { if (_arg2 > (100 * (map_14.length - 1))){ _arg2 = (100 * (map_14.length - 1)); }; }; _arg2 = int((_arg2 / 100)); if (_arg1 < 0){ _arg1 = 0; } else { if (_arg1 > (100 * (map_14[_arg2].length - 1))){ _arg1 = (100 * (map_14[_arg2].length - 1)); }; }; return (map_14[_arg2][int((_arg1 / 100))]); } public function keyDownListener(_arg1:KeyboardEvent):void{ if (!onceOff){ onceOff = true; }; var _local2:uint; while (_local2 < k_keys.length) { if (k_keys[_local2] == _arg1.keyCode){ break; }; _local2++; }; if (_local2 == k_keys.length){ k_keys.push(_arg1.keyCode); }; } public function dark(_arg1:MouseEvent):void{ txts.ttl.gotoAndStop(2); } public function gameStart():void{ txts.nextFrame(); txts.alpha = 0; } public function newMap(_arg1:uint):void{ var _local9:Plane; var _local10:Plane; var _local11:Plane; var _local12:Plane; var _local13:Plane; var _local14:Plane; var _local15:Plane; var _local16:Plane; var _local17:Plane; var _local18:Plane; var _local19:testModel; var _local20:Plane; var _local21:Plane; delMap(); var _local2:uint; var _local3:uint; var _local4:uint; var _local5:Array = root[("map_" + _arg1)]; var _local6:Array = root[("cmap_" + _arg1)]; temp = null; var _local7:Letter3DMaterial = new Letter3DMaterial(10348771); _local7.doubleSided = true; var _local8:Letter3DMaterial = new Letter3DMaterial(3221286); _local8.doubleSided = true; _local2 = 0; while (_local2 < _local6.length) { if (_local6[_local2][2] == 1){ if (_local6[_local2][3] == 1){ _local9 = new Plane(planeMaterial, 101, 101); _local9.x = ((_local6[_local2][0] * 100) + 50); _local9.z = (_local6[_local2][1] * 100); cs.push(_local9); scene.addChild(_local9); } else { if (_local6[_local2][3] == 2){ _local10 = new Plane(planeMaterial, 101, 101); _local10.x = ((_local6[_local2][0] * 100) + 100); _local10.z = ((_local6[_local2][1] * 100) + 50); _local10.rotationY = 90; cs.push(_local10); scene.addChild(_local10); } else { if (_local6[_local2][3] == 3){ _local11 = new Plane(planeMaterial, 101, 101); _local11.x = ((_local6[_local2][0] * 100) + 50); _local11.z = ((_local6[_local2][1] * 100) + 100); cs.push(_local11); scene.addChild(_local11); } else { if (_local6[_local2][3] == 4){ _local12 = new Plane(planeMaterial, 101, 101); _local12.x = (_local6[_local2][0] * 100); _local12.z = ((_local6[_local2][1] * 100) + 50); _local12.rotationY = 90; cs.push(_local12); scene.addChild(_local12); }; }; }; }; } else { if (_local6[_local2][2] == 2){ if (_local6[_local2][3] == 1){ _local13 = new Plane(pm2, 101, 101); _local13.x = ((_local6[_local2][0] * 100) + 50); _local13.z = (_local6[_local2][1] * 100); cs.push(_local13); scene.addChild(_local13); } else { if (_local6[_local2][3] == 2){ _local14 = new Plane(pm2, 101, 101); _local14.x = ((_local6[_local2][0] * 100) + 100); _local14.z = ((_local6[_local2][1] * 100) + 50); _local14.rotationY = 90; cs.push(_local14); scene.addChild(_local14); } else { if (_local6[_local2][3] == 3){ _local15 = new Plane(pm2, 101, 101); _local15.x = ((_local6[_local2][0] * 100) + 50); _local15.z = ((_local6[_local2][1] * 100) + 100); cs.push(_local15); scene.addChild(_local15); } else { if (_local6[_local2][3] == 4){ _local16 = new Plane(pm2, 101, 101); _local16.x = (_local6[_local2][0] * 100); _local16.z = ((_local6[_local2][1] * 100) + 50); _local16.rotationY = 90; cs.push(_local16); scene.addChild(_local16); }; }; }; }; } else { if (_local6[_local2][2] == 5){ _local17 = new Plane(planeMaterial, 101, 101); _local17.x = ((_local6[_local2][0] * 100) + 50); _local17.z = ((_local6[_local2][1] * 100) + 50); _local17.y = -50; _local17.rotationX = 90; cs.push(_local17); scene.addChild(_local17); _local18 = new Plane(planeMaterial, 101, 101); _local18.x = ((_local6[_local2][0] * 100) + 50); _local18.z = ((_local6[_local2][1] * 100) + 50); _local18.y = 50; _local18.rotationX = 90; cs.push(_local18); scene.addChild(_local18); } else { if (_local6[_local2][2] == 4){ _local19 = new testModel(pm3, curMap); _local19.x = ((_local6[_local2][0] * 100) + 50); _local19.z = ((_local6[_local2][1] * 100) + 50); _local19.scale = fgrscl; cs2.push(_local19); scene.addChild(_local19); } else { if ((((_local6[_local2][2] == 11)) && ((txts.cntr.currentFrame == 1)))){ _local4 = 0; while (_local4 < 100) { _local20 = new Plane(planeMaterial, 100, 100); _local20.x = ((_local6[_local2][0] * 100) + 50); _local20.z = (((_local6[_local2][1] - _local4) * 100) + 50); _local20.y = -50; _local20.rotationX = 90; cs.push(_local20); scene.addChild(_local20); _local21 = new Plane(planeMaterial, 100, 100); _local21.x = ((_local6[_local2][0] * 100) + 50); _local21.z = (((_local6[_local2][1] - _local4) * 100) + 50); _local21.y = 50; _local21.rotationX = 90; cs.push(_local21); scene.addChild(_local21); _local4++; }; } else { if (_local6[_local2][2] == 12){ _local4 = _local6[_local2][1]; _local3 = _local6[_local2][0]; temp = [_local4, _local3]; makeTile(0, _local3, _local4); makeTile(0, _local3, (_local4 + 1)); makeTile(0, _local3, (_local4 + 2)); makeTile(0, _local3, (_local4 + 3)); makeTile(0, _local3, (_local4 + 4)); makeTile(0, _local3, (_local4 + 5)); makeTile(0, (_local3 + 1), _local4); makeTile(0, (_local3 + 2), _local4); makeTile(0, (_local3 + 3), _local4); makeTile(0, (_local3 + 3), (_local4 + 1)); makeTile(0, (_local3 + 3), (_local4 + 2)); makeTile(0, (_local3 + 3), (_local4 + 3)); makeTile(0, (_local3 + 3), (_local4 + 4)); makeTile(0, (_local3 + 3), (_local4 + 5)); makeTile(0, (_local3 + 2), (_local4 + 5)); makeTile(0, (_local3 + 1), (_local4 + 5)); } else { if (_local6[_local2][2] == 13){ _local4 = _local6[_local2][1]; _local3 = _local6[_local2][0]; temp = [_local4, _local3]; makeTile(7, _local3, _local4); makeTile(0, _local3, (_local4 + 1)); makeTile(0, _local3, (_local4 + 2)); makeTile(0, _local3, (_local4 + 3)); makeTile(0, _local3, (_local4 + 4)); makeTile(0, _local3, (_local4 + 5)); makeTile(0, (_local3 + 3), (_local4 + 1)); makeTile(0, (_local3 + 3), (_local4 + 2)); makeTile(0, (_local3 + 3), (_local4 + 3)); makeTile(0, (_local3 + 3), (_local4 + 4)); makeTile(0, (_local3 + 3), (_local4 + 5)); makeTile(0, (_local3 + 2), (_local4 + 5)); makeTile(0, (_local3 + 1), (_local4 + 5)); }; }; }; }; }; }; }; _local2++; }; _local2 = 0; while (_local2 < _local5.length) { map2.push(_local5[_local2]); _local2++; }; if (temp){ _local2 = temp[0]; _local3 = temp[1]; if (txts.cntr.currentFrame >= 2){ makeTile(7, (_local3 + 1), (_local2 + 1)); map2[(_local2 + 1)][(_local3 + 1)] = 1; }; if (txts.cntr.currentFrame >= 3){ makeTile(7, (_local3 + 2), (_local2 + 1)); map2[(_local2 + 1)][(_local3 + 2)] = 1; }; if (txts.cntr.currentFrame >= 4){ makeTile(7, (_local3 + 1), (_local2 + 2)); map2[(_local2 + 2)][(_local3 + 1)] = 1; }; if (txts.cntr.currentFrame >= 5){ makeTile(7, (_local3 + 2), (_local2 + 2)); map2[(_local2 + 2)][(_local3 + 2)] = 1; }; if (txts.cntr.currentFrame >= 6){ makeTile(7, (_local3 + 1), (_local2 + 3)); map2[(_local2 + 3)][(_local3 + 1)] = 1; }; if (txts.cntr.currentFrame >= 7){ makeTile(7, (_local3 + 2), (_local2 + 3)); map2[(_local2 + 3)][(_local3 + 2)] = 1; }; if (txts.cntr.currentFrame >= 8){ makeTile(7, (_local3 + 1), (_local2 + 4)); map2[(_local2 + 4)][(_local3 + 1)] = 1; }; if (txts.cntr.currentFrame >= 9){ makeTile(7, (_local3 + 2), (_local2 + 4)); map2[(_local2 + 4)][(_local3 + 2)] = 1; }; temp = null; }; } public function keyDown(_arg1):Boolean{ var _local2:uint; while (_local2 < k_keys.length) { if (k_keys[_local2] == _arg1){ return (true); }; _local2++; }; return (false); } public function ef2(_arg1:Event):void{ if (invt < 100){ invt++; } else { btn3.removeEventListener(Event.ENTER_FRAME, ef2); }; textMaterial.fillColor = avgC(10348771, 3221286, (invt / 100)); tm3.fillColor = avgC(10348771, 3221286, (1 - (invt / 100))); } public function avgC(_arg1:Number, _arg2:Number, _arg3:Number):Number{ var _local4:* = hexToRGB(_arg1); var _local5:* = hexToRGB(_arg2); if (_arg3 > 1){ _arg3 = 1; }; if (_arg3 < 0){ _arg3 = 0; }; var _local6:* = (1 - _arg3); var _local7:Number = (_local4.r - ((_local4.r - _local5.r) * _arg3)); var _local8:Number = (_local4.g - ((_local4.g - _local5.g) * _arg3)); var _local9:Number = (_local4.b - ((_local4.b - _local5.b) * _arg3)); return (rgbToHex(_local7, _local8, _local9)); } public function makeTile(_arg1:uint, _arg2:int, _arg3:int):void{ var _local7:Cube; var _local8:Cube; var _local9:testModel; var _local10:Plane; var _local11:Plane; var _local12:Plane; var _local4:MaterialsList = new MaterialsList(); _local4.addMaterial(planeMaterial, "front"); _local4.addMaterial(planeMaterial, "back"); _local4.addMaterial(planeMaterial, "left"); _local4.addMaterial(planeMaterial, "right"); _local4.addMaterial(planeMaterial, "top"); _local4.addMaterial(planeMaterial, "bottom"); var _local5:MaterialsList = new MaterialsList(); _local5.addMaterial(pm2, "front"); _local5.addMaterial(pm2, "back"); _local5.addMaterial(pm2, "left"); _local5.addMaterial(pm2, "right"); _local5.addMaterial(pm2, "top"); _local5.addMaterial(pm2, "bottom"); var _local6:MaterialsList = new MaterialsList(); _local6.addMaterial(pm3, "front"); _local6.addMaterial(pm3, "back"); _local6.addMaterial(pm3, "left"); _local6.addMaterial(pm3, "right"); _local6.addMaterial(pm3, "top"); _local6.addMaterial(pm3, "bottom"); if ((((_arg1 == 1)) || ((_arg1 == 7)))){ _local7 = new Cube(_local4, 100, 100, 100); _local7.x = ((_arg2 * 100) + 50); _local7.z = ((_arg3 * 100) + 50); if (_arg1 == 1){ cs3.push(_local7); } else { cs.push(_local7); }; scene.addChild(_local7); } else { if (_arg1 == 2){ _local8 = new Cube(_local5, 100, 100, 100); _local8.x = ((_arg2 * 100) + 50); _local8.z = ((_arg3 * 100) + 50); cs3.push(_local8); scene.addChild(_local8); } else { if (_arg1 == 4){ _local9 = new testModel(pm3, curMap); _local9.x = ((_arg2 * 100) + 50); _local9.z = ((_arg3 * 100) + 50); _local9.scale = fgrscl; cs2.push(_local9); scene.addChild(_local9); } else { if (_arg1 == 5){ _local10 = new Plane(planeMaterial, 100, 100); _local10.x = ((_arg2 * 100) + 50); _local10.z = ((_arg3 * 100) + 50); _local10.y = -50; _local10.rotationX = 90; cs3.push(_local10); scene.addChild(_local10); _local11 = new Plane(planeMaterial, 100, 100); _local11.x = ((_arg2 * 100) + 50); _local11.z = ((_arg3 * 100) + 50); _local11.y = 50; _local11.rotationX = 90; cs3.push(_local11); scene.addChild(_local11); } else { if (_arg1 == 0){ _local12 = new Plane(planeMaterial, 65, 65); _local12.x = ((_arg2 * 100) + 50); _local12.z = ((_arg3 * 100) + 50); _local12.y = -50; _local12.rotationX = 90; cs.push(_local12); scene.addChild(_local12); }; }; }; }; }; } public function rgbToHex(_arg1, _arg2, _arg3):Number{ return ((((_arg1 << 16) | (_arg2 << 8)) | _arg3)); } public function testF(_arg1:MouseEvent):void{ stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); stage.addEventListener(KeyboardEvent.KEY_UP, keyUpListener); btn3.addEventListener(Event.ENTER_FRAME, ef2); btn3.removeEventListener(MouseEvent.ROLL_OVER, dark); btn3.removeEventListener(MouseEvent.ROLL_OUT, light); btn3.removeEventListener(MouseEvent.CLICK, testF); btn1.removeEventListener(MouseEvent.CLICK, mySite); btn2.removeEventListener(MouseEvent.CLICK, BRO); removeChild(btn1); removeChild(btn2); removeChild(btn3); gameStart(); stage.focus = null; } public function hexToRGB(_arg1):Object{ var _local2:* = ((_arg1 & 0xFF0000) >> 16); var _local3:* = ((_arg1 & 0xFF00) >> 8); var _local4:* = (_arg1 & 0xFF); return ({r:_local2, g:_local3, b:_local4}); } public function BRO(_arg1:MouseEvent):void{ var _local2:URLRequest = new URLRequest("http://brotherandroid.110mb.com/"); navigateToURL(_local2, "_blank"); } } }//package

Library Items

Symbol 1 Sound {sound3}
Symbol 2 Sound {sound2}
Symbol 3 BitmapUsed by:4
Symbol 4 GraphicUses:3Used by:5
Symbol 5 MovieClipUses:4Used by:7
Symbol 6 GraphicUsed by:7
Symbol 7 MovieClipUses:5 6Used by:Timeline
Symbol 8 GraphicUsed by:26
Symbol 9 FontUsed by:10 11 12 13 14 15 16 17 18 19 20
Symbol 10 TextUses:9Used by:21
Symbol 11 TextUses:9Used by:21
Symbol 12 TextUses:9Used by:21
Symbol 13 TextUses:9Used by:21
Symbol 14 TextUses:9Used by:21
Symbol 15 TextUses:9Used by:21
Symbol 16 TextUses:9Used by:21
Symbol 17 TextUses:9Used by:21
Symbol 18 TextUses:9Used by:21
Symbol 19 TextUses:9Used by:21
Symbol 20 TextUses:9Used by:21
Symbol 21 MovieClip {feignIGF_fla.Symbol3_4}Uses:10 11 12 13 14 15 16 17 18 19 20Used by:26
Symbol 22 FontUsed by:23 24
Symbol 23 TextUses:22Used by:25
Symbol 24 TextUses:22Used by:25
Symbol 25 MovieClip {feignIGF_fla.Symbol13_5}Uses:23 24Used by:26
Symbol 26 MovieClip {feignIGF_fla.Symbol2_3}Uses:8 21 25Used by:Timeline
Symbol 27 BitmapUsed by:28
Symbol 28 GraphicUses:27Used by:29
Symbol 29 MovieClipUses:28Used by:30
Symbol 30 MovieClipUses:29Used by:Timeline
Symbol 31 GraphicUsed by:32
Symbol 32 ButtonUses:31Used by:Timeline

Instance Names

"vgt"Frame 1Symbol 7 MovieClip
"txts"Frame 1Symbol 26 MovieClip {feignIGF_fla.Symbol2_3}
"bobby"Frame 1Symbol 30 MovieClip
"btn1"Frame 1Symbol 32 Button
"btn3"Frame 1Symbol 32 Button
"btn2"Frame 1Symbol 32 Button
"cntr"Symbol 26 MovieClip {feignIGF_fla.Symbol2_3} Frame 1Symbol 21 MovieClip {feignIGF_fla.Symbol3_4}
"ttl"Symbol 26 MovieClip {feignIGF_fla.Symbol2_3} Frame 1Symbol 25 MovieClip {feignIGF_fla.Symbol13_5}
"cntr2"Symbol 26 MovieClip {feignIGF_fla.Symbol2_3} Frame 2Symbol 21 MovieClip {feignIGF_fla.Symbol3_4}

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS3.
Protect (24)Timeline Frame 131 bytes "..$1$Co$w15nNeUrFEN1/MhY5vSGZ0."




http://swfchan.com/49/241417/info.shtml
Created: 23/7 -2021 09:36:27 Last modified: 23/7 -2021 09:36:27 Server time: 27/04 -2024 23:26:53