package Savage.Buildings.SoccerStadium;

import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.fields.*;
import org.web3d.x3d.jsail.Geometry3D.*;
import org.web3d.x3d.jsail.Grouping.*;
import org.web3d.x3d.jsail.Rendering.*;
import org.web3d.x3d.jsail.Shape.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Referee of the game. </p>
 <p> Related links: Catalog page <a href="../../../../Buildings/SoccerStadium/RefereeIndex.html" target="_blank">Referee</a>,  source <a href="../../../../Buildings/SoccerStadium/Referee.java">Referee.java</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dResources.html" target="_blank">X3D Resources</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" target="_blank">X3D Scene Authoring Hints</a>, and <a href="https://www.web3d.org/x3d/content/X3dTooltips.html" target="_blank">X3D Tooltips</a>. </p>
	<table style="color:black; border:0px solid; border-spacing:10px 0px;">
        <caption>Scene Meta Information</caption>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center; padding:10px 0px;"><i>meta tags</i></td>
			<td style="text-align:left;   padding:10px 0px;">&nbsp; Document Metadata </td>
		</tr>

		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> title </i> </td>
			<td> <a href="../../../../Buildings/SoccerStadium/Referee.x3d">Referee.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Referee of the game </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Ignazio Locatelli, Bergamo, Italia LT Christos Kalogrias - Hellenic Navy </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 28 August 2003 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modified </i> </td>
			<td> 20 October 2019 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="http://www.lucia.it/vrml/group/home/ignazio/vmhome.html" target="_blank">http://www.lucia.it/vrml/group/home/ignazio/vmhome.html</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> reference </i> </td>
			<td> <a href="http://www.lucia.it/vrml/projects/frank/frank_e.html" target="_blank">http://www.lucia.it/vrml/projects/frank/frank_e.html</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> identifier </i> </td>
			<td> <a href="https://www.web3d.org/x3d/content/examples/Savage/Buildings/SoccerStadium/Referee.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/Buildings/SoccerStadium/Referee.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> <a href="https://www.web3d.org/x3d/content/README.X3D-Edit.html" target="_blank">https://www.web3d.org/x3d/content/README.X3D-Edit.html</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../Buildings/SoccerStadium/../../license.html">../../license.html</a> </td>
		</tr>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center;" colspan="2">  &nbsp; </td>
		</tr>
	</table>

	<p>
		This program uses the
		<a href="https://www.web3d.org/specifications/java/X3DJSAIL.html" target="_blank">X3D Java Scene Access Interface Library (X3DJSAIL)</a>.
		It has been produced using the 
		<a href="https://www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">X3dToJava.xslt</a>
		stylesheet
	       (<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">version control</a>)
                which is used to create Java source code from an original <code>.x3d</code> model.
	</p>

	* @author Ignazio Locatelli, Bergamo, Italia LT Christos Kalogrias - Hellenic Navy
 */

public class Referee
{
	/** Default constructor to create this object. */
	public Referee ()
	{
	  initialize();
	}

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_IMMERSIVE).setVersion(X3D.VERSION_3_0)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("Referee.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Referee of the game"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Ignazio Locatelli, Bergamo, Italia LT Christos Kalogrias - Hellenic Navy"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("28 August 2003"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("20 October 2019"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://www.lucia.it/vrml/group/home/ignazio/vmhome.html"))
    .addMeta(new meta().setName(meta.NAME_REFERENCE  ).setContent("http://www.lucia.it/vrml/projects/frank/frank_e.html"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/Buildings/SoccerStadium/Referee.x3d"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("https://www.web3d.org/x3d/content/README.X3D-Edit.html"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("Referee.x3d"))
    .addChild(new Transform("Referee").setScale(0.0107,0.0107,0.0107)
      .addChild(new Group()
        .addChild(new Transform("parte_superiore").setTranslation(-8.4,101.0,-23.765)
          .addComments(" This is the upper part ")
          .addChild(new Transform("busto_x").setRotation(1.0,0.0,0.0,0.05)
            .addChild(new Transform("busto_y")
              .addChild(new Transform("busto_z")
                .addChild(new Transform("torace").setScale(0.84,3.0,0.84)
                  .addComments(" Main Body ")
                  .addChild(new Shape("blocco")
                    .addComments(" One peace of the main body. It has four ")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {1,0,6,7,-1,2,1,7,8,-1,3,2,8,9,-1,4,3,9,10,-1,5,4,10,11,-1,0,5,11,6,-1,0,1,2,3,4,5,-1,11,10,9,8,7,6,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-14.85,2.673,6.2055,-7.425,2.673,14.22,7.425,2.673,14.22,14.85,2.673,6.2055,7.425,2.673,-1.809,-7.425,2.673,-1.809,-14.4,0.0,5.8405,-7.2,0.0,13.49,7.2,0.0,13.49,14.4,0.0,5.8405,7.2,0.0,-1.509,-7.2,0.0,-1.509})))))
                  .addChild(new Transform().setScale(1.05,1.4,1.05).setTranslation(0.0,2.6,0.0)
                    .addChild(new Shape().setUSE("blocco"))
                    .addChild(new Transform().setScale(1.05,1.3,1.05).setTranslation(0.0,2.6,0.0)
                      .addChild(new Shape().setUSE("blocco"))
                      .addChild(new Transform().setScale(1.0,0.85,0.9).setTranslation(0.0,2.6,0.0)
                        .addComments(" Upper piece of main body ")
                        .addChild(new Shape()
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                          .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {1,0,6,7,-1,2,1,7,8,-1,3,2,8,9,-1,4,3,9,10,-1,5,4,10,11,-1,0,5,11,6,-1,0,1,2,3,4,5,-1,11,10,9,8,7,6,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-14.85,2.673,6.2055,-7.425,2.673,14.22,7.425,2.673,14.22,14.85,2.673,6.2055,7.425,2.673,-1.809,-7.425,2.673,-1.809,-14.4,0.0,7.0,-7.2,0.0,16.0,7.2,0.0,16.0,14.4,0.0,7.0,7.2,0.0,-2.609,-7.2,0.0,-2.609})))))))))
                .addChild(new Transform("base_collo").setRotation(1.0,-3.07161E-8,1.82376E-7,0.355698).setTranslation(0.0,47.445,3.49)
                  .addComments(" Head ")
                  .addChild(new Shape()
                    .addComments(" Head base ")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {1,0,6,7,-1,2,1,7,8,-1,3,2,8,9,-1,4,3,9,10,-1,5,4,10,11,-1,0,5,11,6,-1,0,1,2,3,4,5,-1,11,10,9,8,7,6,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-6.3,2.223,1.3455,-3.15,2.223,4.5,3.15,2.223,4.5,6.3,2.223,1.3455,3.15,2.223,-1.809,-3.15,2.223,-1.809,-8.1,0.0,2.6955,-4.05,0.0,7.2,4.05,0.0,7.2,8.1,0.0,2.6955,4.05,0.0,-1.809,-4.05,0.0,-1.809})))))
                  .addChild(new Transform().setRotation(1.0,-3.07161E-8,1.82376E-7,-0.355698)
                    .addChild(new Transform("collo_x").setRotation(1.0,0.0,0.0,0.25)
                      .addChild(new Transform("collo_y")
                        .addChild(new Transform("collo_z")
                          .addChild(new Transform("collo").setRotation(-0.577,-0.577,-0.577,2.094).setTranslation(0.0,2.175,0.8079)
                            .addComments(" Head w/out the base ")
                            .addChild(new Shape()
                              .setAppearance(new Appearance()
                                .setMaterial(new Material().setDiffuseColor(1.0,0.7,0.7)))
                              .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {0,1,7,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,0,6,11,-1,6,7,12,-1,7,8,12,-1,8,9,12,-1,9,10,12,-1,10,11,12,-1,11,6,12,-1,5,4,3,2,1,0,-1})
                                .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {4.45152,-2.17003,-1.65596,4.45152,2.45372,-1.65596,0.936255,3.75084,-0.348291,-2.0021,2.45372,0.597931,-2.0021,-2.17003,0.597931,0.936255,-3.46716,-0.348291,4.80862,-2.17003,5.47309,4.80862,2.45372,5.47309,1.05862,3.75084,5.47309,-2.11447,2.45372,5.11166,-2.11447,-2.17003,5.11166,1.05862,-3.74916,5.47309,-0.0247538,0.141844,7.46774})))))
                            .addChild(new Transform("testa").setTranslation(0.0,0.0,2.0)
                              .addComments(" Head w/out the neck ")
                              .addChild(new Shape()
                                .setAppearance(new Appearance()
                                  .setMaterial(new Material().setDiffuseColor(1.0,0.8,0.8)))
                                .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(getIndexedFaceSet_17_41_coordIndex())
                                  .setCoord(new Coordinate().setPoint(getCoordinate_18_41_point())))))))))))
                .addChild(new Transform("clavicola_sinistra").setRotation(0.707,2.10734E-8,0.707,3.14159).setTranslation(3.68,44.23,4.295)
                  .addComments(" Left hand + shoulder ")
                  .addChild(new Shape()
                    .addComments(" Left Shoulder ")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {1,2,0,-1,2,20,0,-1,0,3,19,-1,4,5,0,-1,14,6,15,-1,15,6,16,-1,7,8,2,1,-1,17,9,3,20,-1,3,9,18,19,-1,10,11,5,4,-1,11,12,6,14,5,-1,12,7,1,16,6,-1,13,8,7,-1,13,9,17,-1,13,10,18,-1,13,11,10,-1,13,12,11,-1,13,7,12,-1,15,0,5,-1,15,16,1,-1,1,0,15,-1,20,2,8,17,-1,15,5,14,-1,20,3,0,-1,0,19,4,-1,19,18,10,4,-1,13,18,9,-1,13,17,8,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,1.48143,20.4295,-3.76,6.31898,11.3924,-5.02,1.42392,18.2963,0.0,-2.23765,14.2125,5.02,1.42392,18.2963,3.76,6.26603,11.3768,-0.0073367,13.0624,2.55425,-3.76,6.26604,2.47568,-3.76,0.693588,2.47568,0.0,-4.45516,2.47568,3.76,0.594813,2.47568,3.76,6.26604,2.47568,-0.00678022,13.4975,-3.79546,0.0,0.0,0.0,1.87693,10.1351,7.78251,-8.7608E-4,8.83749,10.5483,-1.88308,10.1224,7.87083,-1.91737,-3.80795,2.47568,1.77166,-3.86248,2.47568,3.49215,-1.35336,16.4408,-2.65838,-0.995574,15.6679})))))
                  .addChild(new Transform("brsup_sin").setRotation(0.707,2.10734E-8,0.707,-3.14159)
                    .addComments(" Left hand ")
                    .addChild(new Transform("spalla_sin").setRotation(1.0,-0.3,0.0,-1.57).setTranslation(16.14,1.03,0.0)
                      .addComments(" rotation of left hand ")
                      .addChild(new Transform("spalla_sinistra").setRotation(0.577,-0.577,0.577,2.094)
                        .addChild(new Shape("avambraccio")
                          .addComments(" Left up hand ")
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                          .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {0,15,14,-1,0,16,15,-1,0,17,16,-1,0,18,17,-1,0,19,18,-1,0,14,19,-1,14,15,2,1,-1,15,16,3,2,-1,16,17,4,3,-1,17,18,5,4,-1,18,19,6,5,-1,19,14,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,7,8,13,-1,8,9,13,-1,9,10,13,-1,10,11,13,-1,11,12,13,-1,12,7,13,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.0472,0.03465,34.8689,2.8112,2.24,31.34,2.8112,-2.24,31.34,-0.0472,-4.3309,31.34,-2.8112,-2.24,31.34,-2.8112,2.24,31.34,-0.0472,4.3309,31.34,4.0,2.81576,2.45392,5.02,-2.15631,2.45392,0.0,-4.28954,2.51143,-5.02,-2.15631,2.45392,-4.0,2.84589,2.45392,-0.132948,5.30748,2.45392,-0.0472,0.03465,0.0,2.43,1.9362,33.1044,2.43,-1.9362,33.1044,-0.0472,-3.7506,33.1044,-2.43,-1.9362,33.1044,-2.43,1.9362,33.1044,-0.0472,3.7506,33.1044})))))
                        .addChild(new Transform().setRotation(0.577,-0.577,0.577,-2.0944)
                          .addChild(new Transform("braccio_sin").setRotation(0.0,0.0,1.0,-2.4).setTranslation(0.0,-31.34,0.0)
                            .addComments(" L lower hand + palm. ")
                            .addComments(" L Ellbow rotation ")
                            .addChild(new Transform("braccio_sinistro").setRotation(0.577,-0.577,0.577,2.0944)
                              .addChild(new Shape()
                                .addComments(" Lower left hand ")
                                .setAppearance(new Appearance()
                                  .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                                .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {0,21,20,-1,0,22,21,-1,0,23,22,-1,0,24,23,-1,0,25,24,-1,0,20,25,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,14,15,13,-1,15,16,13,-1,16,17,13,-1,17,18,13,-1,18,19,13,-1,19,14,13,-1,7,8,15,14,-1,8,9,16,15,-1,9,10,17,16,-1,10,11,18,17,-1,11,12,19,18,-1,12,7,14,19,-1,21,2,1,20,-1,22,3,2,21,-1,23,4,3,22,-1,24,5,4,23,-1,25,6,5,24,-1,20,1,6,25,-1})
                                  .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.0671,0.0,28.8269,1.40855,0.9656,27.02,1.40855,-0.9656,27.02,-0.0671,-1.9312,27.02,-1.40855,-0.9656,27.02,-1.40855,0.9656,27.02,-0.0671,1.9312,27.02,2.75,2.0688,0.0,2.75,-2.0688,0.0,-0.0671,-4.0,0.0,-2.75,-2.0688,0.0,-2.75,2.0688,0.0,-0.0671,4.0,0.0,-0.0671,0.0,-3.52881,2.57455,1.9368,-1.76441,2.57455,-1.9368,-1.76441,-0.0671,-3.464,-1.76441,-2.57455,-1.9368,-1.76441,-2.57455,1.9368,-1.76441,-0.0671,3.464,-1.76441,1.21984,0.836236,27.9234,1.21984,-0.836236,27.9234,0.0,-1.67247,27.9234,-1.21984,-0.836236,27.9234,-1.21984,0.836236,27.9234,0.0,1.67247,27.9234})))))
                              .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.0944).setScale(0.6,0.6,0.6)
                                .addChild(new Transform("mano_sinistra").setRotation(0.0,1.0,0.0,1.57).setScale(0.6,1.1,1.0).setTranslation(0.0,-45.0,0.0)
                                  .addComments(" L palm + fing ")
                                  .addComments(" L palm rotation ")
                                  .addChild(new Shape("palmo")
                                    .setAppearance(new Appearance()
                                      .setMaterial(new Material().setDiffuseColor(1.0,0.7,0.7)))
                                    .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,3,2,1,-1,4,5,0,1,-1,7,6,5,4,-1,0,5,6,11,8,3,-1,8,9,2,3,-1,11,10,9,8,-1,10,7,4,1,2,9,-1,6,7,10,11,-1})
                                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-4.5,0.0,2.5,-4.5,0.0,-2.5,4.5,0.0,-2.5,4.5,0.0,2.5,-10.0,-8.0,-1.5,-10.0,-8.0,1.5,-10.0,-14.0,1.5,-10.0,-14.0,-1.5,8.0,-8.0,1.5,8.0,-8.0,-1.5,8.0,-14.0,-1.5,8.0,-14.0,1.5})))))
                                  .addChild(new Transform("indice_sinistro").setScale(1.6,0.8,1.0).setTranslation(-8.0,-14.0,0.0)
                                    .addChild(new Transform("ind_s_inf").setRotation(1.0,0.0,0.0,0.3)
                                      .addChild(new Shape("ditoinf")
                                        .setAppearance(new Appearance()
                                          .setMaterial(new Material().setDiffuseColor(1.0,0.7,0.7)))
                                        .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,1,2,3,4,5,6,7,-1,15,14,13,12,11,10,9,8,-1,15,7,6,14,-1,15,8,0,7,-1,8,9,1,0,-1,9,10,2,1,-1,10,11,3,2,-1,11,12,4,3,-1,12,13,5,4,-1,13,14,6,5,-1})
                                          .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.8,0.0,1.5,0.8,0.0,1.5,1.3,0.0,0.8,1.3,0.0,-0.8,0.8,0.0,-1.5,-0.8,0.0,-1.5,-1.3,0.0,-0.8,-1.3,0.0,0.8,-0.8,-6.0,1.5,0.8,-6.0,1.5,1.3,-6.0,0.8,1.3,-6.0,-0.8,0.8,-6.0,-1.5,-0.8,-6.0,-1.5,-1.3,-6.0,-0.8,-1.3,-6.0,0.8})))))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("ind_s_sup").setRotation(1.0,0.0,0.0,0.4)
                                          .addChild(new Shape("ditosup")
                                            .setAppearance(new Appearance()
                                              .setMaterial(new Material().setDiffuseColor(1.0,0.7,0.7)))
                                            .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,1,2,3,4,5,6,7,-1,15,14,13,12,11,10,9,8,-1,15,7,6,14,-1,15,8,0,7,-1,8,9,1,0,-1,9,10,2,1,-1,10,11,3,2,-1,11,12,4,3,-1,12,13,5,4,-1,13,14,6,5,-1})
                                              .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.8,0.0,1.5,0.8,0.0,1.5,1.3,0.0,0.8,1.3,0.0,-0.8,0.8,0.0,-1.5,-0.8,0.0,-1.5,-1.3,0.0,-0.8,-1.3,0.0,0.8,-0.6,-6.0,1.0,0.6,-6.0,1.0,0.8,-6.0,0.6,0.8,-6.0,-0.6,0.6,-6.0,-1.0,-0.6,-6.0,-1.0,-0.8,-6.0,-0.6,-0.8,-6.0,0.6})))))))))
                                  .addChild(new Transform("medio_sinistro").setScale(1.8,0.9,1.0).setTranslation(-3.0,-14.0,0.0)
                                    .addChild(new Transform("med_s_inf").setRotation(1.0,0.0,0.0,0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("med_s_sup").setRotation(1.0,0.0,0.0,0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("anulare_sinistro").setScale(1.5,0.8,0.95).setTranslation(1.6,-14.0,0.0)
                                    .addChild(new Transform("an_s_inf").setRotation(1.0,0.0,0.0,0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("an_s_sup").setRotation(1.0,0.0,0.0,0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("mignolo_sinistro").setScale(1.35,0.7,1.0).setTranslation(6.0,-14.0,0.0)
                                    .addChild(new Transform("min_s_inf").setRotation(1.0,0.0,0.0,0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("min_s_sup").setRotation(1.0,0.0,0.0,0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("pollice_sinistro").setRotation(0.0,0.0,1.0,-0.8).setScale(1.3,0.7,1.3).setTranslation(-9.5,-11.0,0.0)
                                    .addChild(new Transform().setRotation(1.0,0.0,0.0,0.2)
                                      .addChild(new Transform("pol_s_inf")
                                        .addChild(new Shape().setUSE("ditoinf"))
                                        .addChild(new Transform().setScale(1.0,0.9,1.0).setTranslation(0.0,-6.0,0.0)
                                          .addChild(new Transform("pol_s_sup")
                                            .addChild(new Shape().setUSE("ditosup"))))))))))))))))
                .addChild(new Transform("clavicola_destra").setRotation(-2.185573E-8,-1.0,7.9466E-9,1.57079).setTranslation(-3.68,44.23,4.295)
                  .addComments(" R hand + shoulder ")
                  .addChild(new Shape()
                    .addComments(" R shoulder ")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {0,2,1,-1,0,20,2,-1,19,3,0,-1,0,5,4,-1,15,6,14,-1,16,6,15,-1,1,2,8,7,-1,20,3,9,17,-1,19,18,9,3,-1,4,5,11,10,-1,5,14,6,12,11,-1,6,16,1,7,12,-1,7,8,13,-1,17,9,13,-1,18,10,13,-1,10,11,13,-1,11,12,13,-1,12,7,13,-1,5,0,15,-1,1,16,15,-1,15,0,1,-1,17,8,2,20,-1,14,5,15,-1,0,3,20,-1,4,19,0,-1,4,10,18,19,-1,9,18,13,-1,8,17,13,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,-1.48143,20.4295,-3.76,-6.31898,11.3924,-5.02,-1.42392,18.2963,0.0,2.23765,14.2125,5.02,-1.42392,18.2963,3.76,-6.26603,11.3768,-0.0073367,-13.0624,2.55425,-3.76,-6.26604,2.47568,-3.76,-0.693588,2.47568,0.0,4.45516,2.47568,3.76,-0.594813,2.47568,3.76,-6.26604,2.47568,-0.00678022,-13.4975,-3.79546,0.0,0.0,0.0,1.87693,-10.1351,7.78251,-8.7608E-4,-8.83749,10.5483,-1.88308,-10.1224,7.87083,-1.91737,3.80795,2.47568,1.77166,3.86248,2.47568,3.49215,1.35336,16.4408,-2.65838,0.995574,15.6679})))))
                  .addChild(new Transform().setRotation(-2.185573E-8,-1.0,7.9466E-9,-1.57079)
                    .addComments(" R hand ")
                    .addChild(new Transform("spalla_des").setRotation(1.0,0.0,0.0,-3.0).setTranslation(-16.14,1.03,0.0)
                      .addComments(" rotation of R hand ")
                      .addChild(new Transform("brsup_des").setRotation(0.577,-0.577,0.577,2.0944)
                        .addChild(new Shape()
                          .addComments(" R up hand ")
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                          .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {0,15,14,-1,0,16,15,-1,0,17,16,-1,0,18,17,-1,0,19,18,-1,0,14,19,-1,14,15,2,1,-1,15,16,3,2,-1,16,17,4,3,-1,17,18,5,4,-1,18,19,6,5,-1,19,14,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,7,8,13,-1,8,9,13,-1,9,10,13,-1,10,11,13,-1,11,12,13,-1,12,7,13,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.0472,0.03465,34.8689,2.8112,2.24,31.34,2.8112,-2.24,31.34,-0.0472,-4.3309,31.34,-2.8112,-2.24,31.34,-2.8112,2.24,31.34,-0.0472,4.3309,31.34,5.02,2.15631,2.45392,4.0,-2.90427,2.45392,-0.0472,-6.45702,2.45392,-4.0,-2.90263,2.45392,-5.02,2.15631,2.45392,0.0,4.28954,2.51143,-0.0472,0.03465,0.0,2.43,1.9362,33.1044,2.43,-1.9362,33.1044,-0.0472,-3.7506,33.1044,-2.43,-1.9362,33.1044,-2.43,1.9362,33.1044,-0.0472,3.7506,33.1044})))))
                        .addChild(new Transform().setRotation(0.577,-0.577,0.577,-2.0944)
                          .addChild(new Transform("braccio_des").setRotation(1.0,0.0,0.0,0.0).setTranslation(0.0,-31.34,0.0)
                            .addComments(" R lower hand + palm ")
                            .addComments(" lower hand rotation ")
                            .addChild(new Transform("brinf_des").setRotation(0.577,-0.577,0.577,2.0944)
                              .addChild(new Shape()
                                .addComments(" R lower hand ")
                                .setAppearance(new Appearance()
                                  .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                                .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {0,21,20,-1,0,22,21,-1,0,23,22,-1,0,24,23,-1,0,25,24,-1,0,20,25,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,14,15,13,-1,15,16,13,-1,16,17,13,-1,17,18,13,-1,18,19,13,-1,19,14,13,-1,7,8,15,14,-1,8,9,16,15,-1,9,10,17,16,-1,10,11,18,17,-1,11,12,19,18,-1,12,7,14,19,-1,21,2,1,20,-1,22,3,2,21,-1,23,4,3,22,-1,24,5,4,23,-1,25,6,5,24,-1,20,1,6,25,-1})
                                  .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.0671,0.0,28.8269,1.40855,0.9656,27.02,1.40855,-0.9656,27.02,-0.0671,-1.9312,27.02,-1.40855,-0.9656,27.02,-1.40855,0.9656,27.02,-0.0671,1.9312,27.02,2.75,2.0688,0.0,2.75,-2.0688,0.0,-0.0671,-4.0,0.0,-2.75,-2.0688,0.0,-2.75,2.0688,0.0,-0.0671,4.0,0.0,-0.0671,0.0,-3.52881,2.57455,1.9368,-1.76441,2.57455,-1.9368,-1.76441,-0.0671,-3.464,-1.76441,-2.57455,-1.9368,-1.76441,-2.57455,1.9368,-1.76441,-0.0671,3.464,-1.76441,1.21984,0.836236,27.9234,1.21984,-0.836236,27.9234,0.0,-1.67247,27.9234,-1.21984,-0.836236,27.9234,-1.21984,0.836236,27.9234,0.0,1.67247,27.9234})))))
                              .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.0944).setScale(0.6,0.6,0.6)
                                .addChild(new Transform("mano_destra").setRotation(0.0,1.0,0.0,3.14).setScale(0.6,1.1,1.0).setTranslation(0.0,-45.0,0.0)
                                  .addComments(" R palm ")
                                  .addComments(" rotation of R palm ")
                                  .addChild(new Shape().setUSE("palmo"))
                                  .addChild(new Transform("indice_destro").setScale(1.6,0.8,1.0).setTranslation(-8.0,-14.0,0.0)
                                    .addChild(new Transform("ind_d_inf").setRotation(1.0,0.0,0.0,-0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("ind_d_sup").setRotation(1.0,0.0,0.0,-0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("medio_destro").setScale(1.8,0.9,1.0).setTranslation(-3.0,-14.0,0.0)
                                    .addChild(new Transform("med_d_inf").setRotation(1.0,0.0,0.0,-0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("med_d_sup").setRotation(1.0,0.0,0.0,-0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("anulare_destro").setScale(1.5,0.8,0.95).setTranslation(1.6,-14.0,0.0)
                                    .addChild(new Transform("an_d_inf").setRotation(1.0,0.0,0.0,-0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("an_d_sup").setRotation(1.0,0.0,0.0,-0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("mignolo_destro").setScale(1.35,0.7,1.0).setTranslation(6.0,-14.0,0.0)
                                    .addChild(new Transform("min_d_inf").setRotation(1.0,0.0,0.0,-0.3)
                                      .addChild(new Shape().setUSE("ditoinf"))
                                      .addChild(new Transform().setTranslation(0.0,-6.0,0.0)
                                        .addChild(new Transform("min_d_sup").setRotation(1.0,0.0,0.0,-0.4)
                                          .addChild(new Shape().setUSE("ditosup"))))))
                                  .addChild(new Transform("pollice_destro").setRotation(0.0,0.0,1.0,-0.8).setScale(1.3,0.7,1.3).setTranslation(-9.5,-11.0,0.0)
                                    .addChild(new Transform().setRotation(1.0,0.0,0.0,-0.2)
                                      .addChild(new Transform("pol_d_inf").setRotation(1.0,0.0,0.0,0.0)
                                        .addChild(new Shape().setUSE("ditoinf"))
                                        .addChild(new Transform().setScale(1.0,0.9,1.0).setTranslation(0.0,-6.0,0.0)
                                          .addChild(new Transform("pol_d_sup").setRotation(1.0,0.0,0.0,0.0)
                                            .addChild(new Shape().setUSE("ditosup"))))))))))))))))))))
        .addChild(new Transform("parte_inferiore").setTranslation(-8.4,101.0,-23.765)
          .addComments(" Lower part ")
          .addChild(new Transform("torso").setRotation(-0.577,-0.577,-0.577,2.0944).setTranslation(0.06,-12.71,7.525)
            .addChild(new Shape()
              .addComments(" waste ")
              .setAppearance(new Appearance()
                .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
              .setGeometry(new IndexedFaceSet().setCreaseAngle(1.0).setCoordIndex(new int[] {8,12,17,16,-1,4,12,8,-1,0,4,8,-1,7,0,8,-1,8,16,7,-1,10,19,18,12,-1,10,12,4,-1,10,4,1,-1,10,1,11,-1,10,11,19,-1,17,15,13,-1,4,0,1,-1,7,16,13,5,-1,16,17,13,-1,19,11,6,14,-1,11,1,3,6,-1,1,0,2,3,-1,0,7,5,2,-1,2,5,9,-1,5,13,9,-1,13,14,9,-1,14,6,9,-1,6,3,9,-1,3,2,9,-1,18,19,14,-1,15,18,14,-1,15,14,13,-1,15,12,18,-1,17,12,15,-1})
                .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-10.1695,-11.252,0.0,-10.1695,11.252,0.0,-7.25989,-6.075,13.5186,-7.25989,6.075,13.5186,-4.54952,0.0,-1.76908,-1.12652,-12.15,12.0597,-1.12652,12.15,12.0597,0.0,-14.3316,0.0,0.0,-8.30424,-2.0,0.0,0.0,16.1,0.0,8.30424,-2.0,0.0,14.947,0.0,0.777966,0.0,-0.517646,6.76335,-7.423,10.6008,6.46148,7.87094,10.6008,5.49435,-0.575459,3.07913,6.34917,-11.1683,0.0,6.43068,-4.06308,0.0,6.41322,4.0032,0.0,6.48024,11.252,0.0})))))
            .addChild(new Transform().setRotation(-0.577,-0.577,-0.577,-2.0944)
              .addComments(" Both legs ")
              .addChild(new Transform("coscia_des").setRotation(1.0,0.0,0.0,0.0).setTranslation(-8.4,0.0,0.0)
                .addComments(" R leg ")
                .addComments(" R leg rotation ")
                .addChild(new Transform("coscia_destra").setRotation(0.57735,-0.57735,0.57735,2.09439)
                  .addChild(new Shape()
                    .addComments(" R up leg ")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,15,14,-1,0,16,15,-1,0,17,16,-1,0,18,17,-1,0,19,18,-1,0,14,19,-1,14,15,2,1,-1,15,16,3,2,-1,16,17,4,3,-1,17,18,5,4,-1,18,19,6,5,-1,19,14,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,20,21,13,-1,21,22,13,-1,22,23,13,-1,23,24,13,-1,24,25,13,-1,25,20,13,-1,21,20,7,8,-1,22,21,8,9,-1,23,22,9,10,-1,24,23,10,11,-1,25,24,11,12,-1,20,25,12,7,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,0.0,45.5983,4.87835,2.43917,40.72,4.87835,-2.43917,40.72,0.0,-4.87835,40.72,-4.87835,-2.43917,40.72,-4.87835,2.43917,40.72,0.0,4.87835,40.72,6.34917,2.76829,0.0,6.43068,-4.33692,0.0,0.0,-8.06858,0.0,-10.1695,-2.852,0.0,-10.1695,2.852,0.0,0.0,5.93159,0.0,0.0,0.0,-10.8845,4.22452,2.11262,43.1591,4.22452,-2.11262,43.1591,0.0,-4.22452,43.1591,-4.22452,-2.11262,43.1591,-4.22452,2.11262,43.1591,0.0,4.22452,43.1591,5.28309,0.295353,-5.44019,6.19037,-2.0145,-5.44019,0.0,-4.73717,-5.44019,-8.71143,-2.37429,-5.44019,-8.5567,0.713856,-5.44019,-0.117189,4.52141,-5.44019})))))
                  .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.09439)
                    .addChild(new Transform("polp_des").setRotation(1.0,0.0,0.0,0.0).setTranslation(0.0,-40.72,0.0)
                      .addComments(" R lower leg + foot ")
                      .addComments(" R knee rotation ")
                      .addChild(new Transform("polpaccio_destro").setRotation(0.57735,-0.57735,0.57735,2.09439)
                        .addChild(new Shape()
                          .addComments(" R lower leg ")
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                          .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,2,1,-1,0,3,2,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,14,15,13,-1,15,16,13,-1,16,17,13,-1,17,18,13,-1,18,19,13,-1,19,14,13,-1,15,14,7,8,-1,14,19,12,7,-1,19,18,11,12,-1,18,17,10,11,-1,17,16,9,10,-1,16,15,8,9,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,0.0,37.983,4.815,2.16675,37.983,4.815,-2.16675,37.983,0.0,-3.745,37.983,-3.745,-2.16675,37.983,-3.745,2.16675,37.983,0.0,3.745,37.983,4.88081,2.44014,0.0,4.88081,-2.44014,0.0,0.0,-4.88081,0.0,-4.88081,-2.44014,0.0,-4.88081,2.44014,0.0,0.0,4.88081,0.0,0.0,0.0,-4.87909,4.22704,2.11325,-2.44127,4.22704,-2.11325,-2.44127,0.0,-4.22704,-2.44127,-4.22704,-2.11325,-2.44127,-4.22704,2.11325,-2.44127,0.0,4.22704,-2.44127})))))
                        .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.09439)
                          .addChild(new Transform("cav_des").setTranslation(0.0,-34.53,0.0)
                            .addComments(" R foot ")
                            .addComments(" R foot rotation ")
                            .addChild(new Transform("caviglia_destra").setRotation(0.57735,-0.57735,0.57735,2.09439)
                              .addChild(new Shape()
                                .setAppearance(new Appearance()
                                  .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.4)))
                                .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {1,0,2,-1,2,0,3,-1,3,0,4,-1,4,0,5,-1,5,0,1,-1,1,2,7,6,-1,2,3,8,7,-1,3,4,9,8,-1,5,10,9,-1,9,4,5,-1,5,1,6,-1,6,10,5,-1})
                                  .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-2.82282,0.0,8.07176,0.0,2.66471,4.65658,-3.44673,3.213,13.04,-3.44673,-2.8833,13.04,0.0,-2.66471,4.65658,0.0,0.0,0.0,11.7663,3.73,7.76141,11.7663,3.28613,13.04,11.7663,-3.28613,13.04,11.7663,-3.73,7.76141,11.7663,0.0,6.20965})))))
                              .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.09439)
                                .addChild(new Transform("piede_des").setRotation(1.0,0.0,0.0,0.0).setTranslation(0.0,-13.04,11.74)
                                  .addChild(new Transform("piede2_destro").setRotation(0.57735,-0.57735,0.57735,2.09439)
                                    .addChild(new Shape()
                                      .setAppearance(new Appearance()
                                        .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.4)))
                                      .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {7,8,14,13,-1,10,6,12,16,-1,13,12,6,7,-1,12,13,14,15,16,-1,15,14,8,9,-1,16,15,9,10,-1})
                                        .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,0.0,0.0,0.0,0.0,-1.13164,0.0,0.0,0.0,-0.074362,-0.274157,-0.958806,-1.2218,-0.333,-0.1336,0.0,-0.6644,-0.1336,0.0273,3.73,-5.26816,0.0273,3.28613,0.010432,0.0273,-3.28613,0.010432,0.0273,-3.73,-5.26816,0.0273,0.0,-6.81992,-0.333,-0.1336,-1.4263,7.20118,2.76803,-3.61711,7.20118,2.47356,0.010432,7.20118,-2.50096,0.010432,7.20118,-2.75649,-3.52969,7.20118,0.0,-4.73182}))))))))))))))))
              .addChild(new Transform("coscia_sin").setRotation(1.0,0.0,0.0,0.0).setTranslation(8.4,0.0,0.0)
                .addComments(" Left leg ")
                .addComments(" L leg rotation ")
                .addChild(new Transform("coscia_sinistra").setRotation(0.57735,-0.57735,0.57735,2.09439)
                  .addComments(" L leg+knee+foot ")
                  .addChild(new Shape()
                    .addComments(" L upper leg ")
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                    .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,15,14,-1,0,16,15,-1,0,17,16,-1,0,18,17,-1,0,19,18,-1,0,14,19,-1,14,15,2,1,-1,15,16,3,2,-1,16,17,4,3,-1,17,18,5,4,-1,18,19,6,5,-1,19,14,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,20,21,13,-1,21,22,13,-1,22,23,13,-1,23,24,13,-1,24,25,13,-1,25,20,13,-1,21,20,7,8,-1,22,21,8,9,-1,23,22,9,10,-1,24,23,10,11,-1,25,24,11,12,-1,20,25,12,7,-1})
                      .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,0.0,45.5983,4.87835,2.43917,40.72,4.87835,-2.43917,40.72,0.0,-4.87835,40.72,-4.87835,-2.43917,40.72,-4.87835,2.43917,40.72,0.0,4.87835,40.72,6.41322,4.39679,0.0,6.48024,-2.852,0.0,0.0,-6.54699,0.0,-10.1695,-2.852,0.0,-10.1695,2.852,0.0,0.0,8.35993,0.0,0.0,0.0,-10.8845,4.22452,2.11262,43.1591,4.22452,-2.11262,43.1591,0.0,-4.22452,43.1591,-4.22452,-2.11262,43.1591,-4.22452,2.11262,43.1591,0.0,4.22452,43.1591,5.57893,2.37318,-5.44019,4.88202,-0.501396,-5.36555,0.0,-4.89339,-5.44019,-8.37244,-0.788649,-5.44019,-8.71143,2.37429,-5.44019,0.0,4.73717,-5.44019})))))
                  .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.09439)
                    .addChild(new Transform("polp_sin").setTranslation(0.0,-40.72,0.0)
                      .addComments(" L foot ")
                      .addComments(" L foot rotation ")
                      .addChild(new Transform("polpaccio_sinistro").setRotation(0.57735,-0.57735,0.57735,2.09439)
                        .addChild(new Shape()
                          .addComments(" L lower leg ")
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))
                          .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {0,2,1,-1,0,3,2,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,14,15,13,-1,15,16,13,-1,16,17,13,-1,17,18,13,-1,18,19,13,-1,19,14,13,-1,15,14,7,8,-1,14,19,12,7,-1,19,18,11,12,-1,18,17,10,11,-1,17,16,9,10,-1,16,15,8,9,-1})
                            .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,0.0,37.983,4.815,2.16675,37.983,4.815,-2.16675,37.983,0.0,-3.745,37.983,-3.745,-2.16675,37.983,-3.745,2.16675,37.983,0.0,3.745,37.983,4.88081,2.44014,0.0,4.88081,-2.44014,0.0,0.0,-4.88081,0.0,-4.88081,-2.44014,0.0,-4.88081,2.44014,0.0,0.0,4.88081,0.0,0.0,0.0,-4.87909,4.22704,2.11325,-2.44127,4.22704,-2.11325,-2.44127,0.0,-4.22704,-2.44127,-4.22704,-2.11325,-2.44127,-4.22704,2.11325,-2.44127,0.0,4.22704,-2.44127})))))
                        .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.09439)
                          .addChild(new Transform("cav_sin").setRotation(1.0,0.0,0.0,0.0).setTranslation(0.0,-34.53,0.0)
                            .addChild(new Transform("piede1_sinistro").setRotation(0.57735,-0.57735,0.57735,2.09439)
                              .addChild(new Shape()
                                .setAppearance(new Appearance()
                                  .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.4)))
                                .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {1,0,2,-1,2,0,3,-1,3,0,4,-1,4,0,5,-1,5,0,1,-1,1,2,7,6,-1,2,3,8,7,-1,3,4,9,8,-1,5,10,9,-1,9,4,5,-1,5,1,6,-1,6,10,5,-1})
                                  .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-2.82282,0.0,8.07176,0.0,2.66471,4.65658,-3.44673,3.213,13.04,-3.44673,-2.8833,13.04,0.0,-2.66471,4.65658,0.0,0.0,0.0,11.7663,3.73,7.76141,11.7663,3.28613,13.04,11.7663,-3.28613,13.04,11.7663,-3.73,7.76141,11.7663,0.0,6.20965})))))
                              .addChild(new Transform().setRotation(0.57735,-0.57735,0.57735,-2.09439)
                                .addChild(new Transform("piede_sin").setRotation(1.0,0.0,0.0,0.0).setTranslation(0.0,-13.04,11.74)
                                  .addChild(new Transform("piede2_sinistro").setRotation(0.57735,-0.57735,0.57735,2.09439)
                                    .addChild(new Shape()
                                      .setAppearance(new Appearance()
                                        .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.4)))
                                      .setGeometry(new IndexedFaceSet().setCreaseAngle(3.0).setCoordIndex(new int[] {7,8,14,13,-1,10,6,12,16,-1,13,12,6,7,-1,12,13,14,15,16,-1,15,14,8,9,-1,16,15,9,10,-1})
                                        .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.0,0.0,0.0,-0.1336,0.0,-0.918231,0.0,-1.4263,-0.4,0.0,0.0,0.0,-0.426383,-0.0456987,-0.903387,-1.2218,0.333,-0.1336,0.0273,3.73,-5.26816,0.0273,3.28613,0.010432,0.0273,-3.28613,0.010432,0.0273,-3.73,-5.26816,0.0273,0.0,-6.81992,0.6644,-0.1336,-1.2218,7.20118,2.76803,-3.61711,7.20118,2.47356,0.010432,7.20118,-2.50096,0.010432,7.20118,-2.75649,-3.52969,7.20118,0.0,-4.73182}))))))))))))))))))))));
            }
            catch (Exception ex)
            {       
                System.err.println ("*** Further hints on X3DJSAIL errors and exceptions at");
                System.err.println ("*** https://www.web3d.org/specifications/java/X3DJSAIL.html");
                throw (ex);
            }
	}
	// end of initialize() method

		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_17_41_coordIndex_1()
		{
			int[] value = {0,2,1,-1,0,3,2,-1,0,4,3,-1,0,5,4,-1,0,6,5,-1,0,1,6,-1,1,2,8,7,-1,2,3,9,8,-1,3,4,10,9,-1,4,5,11,10,-1,5,6,12,11,-1,6,1,7,12,-1,7,8,14,13,-1,8,9,15,14,-1,9,10,16,15,-1,10,11,17,16,-1,11,12,18,17,-1,12,7,13,18,-1,13,14,20,19,-1,14,21,20,-1,15,16,129,22,21,-1,16,17,128,129,-1,17,18,24,23,128,-1,18,13,24,-1,19,20,26,25,-1,20,21,35,27,26,-1,21,22,34,35,-1,22,23,33,34,-1,23,24,32,33,-1,24,19,25,30,32,-1,25,26,31,-1,26,27,31,-1,27,28,31,-1,28,29,31,-1,29,30,31,-1,30,25,31,-1,14,15,21,-1,13,19,24,-1,34,28,27,35,-1,33,29,28,34,-1,32,30,29,33,-1,36,37,38,39,-1,41,43,42,40,-1,43,45,44,42,-1,45,47,46,44,-1,47,49,48,46,-1,49,51,50,48,-1,51,53,52,50,-1,53,55,54,52,-1,55,57,56,54,-1,57,59,58,56,-1,59,61,60,58,-1,61,63,62,60,-1,63,65,64,62,-1,65,67,66,64,-1,67,69,68,66,-1,69,71,70,68,-1,71,73,72,70,-1,73,75,74,72,-1,75,77,76,74,-1,77,79,78,76,-1,79,41,40,78,-1,79,77,75,73,71,69,67,65,63,61,59,57,55,53,51,49,47,45,43,41,-1,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,-1,80,82,83,81,-1,82,84,85,83,-1,84,86,87,85,-1,86,88,89,87,-1,88,90,91,89,-1,90,92,93,91,-1,92,94,95,93,-1,94,96,97,95,-1,96,98,99,97,-1,98,100,101,99,-1,100,102,103,101,-1,102,104,105,103,-1,104,106,107,105,-1,106,108,109,107,-1,108,110,111,109,-1,110,112,113,111,-1,112,114,115,113,-1,114,116,117,115,-1,116,118,119,117,-1,118,80,81,119,-1,81,83,85,87,89,91,93,95,97,99,101,103,105,107,109,111,113,115,117,119,-1,118,116,114,112,110,108,106,104,102,100,98,96,94,92,90,88,86,84,82,80,-1,124,127,126,125,-1,120,123,127,124,-1,122,126,127,123,-1,120,124,125,121,-1,128,23,22,129,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getCoordinate_18_41_point_1()
		{
			double[] value = {3.75199,0.00557172,0.0,-2.11559,2.45726,0.774298,-2.11559,-2.17316,0.774298,1.05919,-3.75457,1.13555,4.81119,-2.17316,1.13555,4.81119,2.45726,1.13555,1.05919,3.75626,1.13555,-1.98176,3.01876,2.6199,-1.96721,-3.02463,2.6199,2.48017,-4.71312,3.04377,7.47234,-2.12938,2.26562,7.45797,2.31758,2.26334,2.45746,4.72046,3.04377,-4.44866,2.2044,4.05771,-4.43802,-2.21759,4.05771,2.483,-5.89232,4.05765,8.91895,-2.19852,3.62664,8.90844,2.22346,3.62498,2.45462,5.89966,4.05765,-9.3863,2.56556,11.1571,-9.37388,-2.59342,11.1571,2.48654,-7.36632,11.1569,9.38619,-2.56556,11.1569,9.37377,2.59343,11.1569,2.45108,7.37366,11.1569,-8.3976,2.19853,20.1157,-8.38695,-2.22346,20.1157,2.48459,-6.55562,20.1157,8.3976,-2.19853,20.1157,8.38695,2.22346,20.1157,2.45303,6.56296,20.1157,2.46882,0.00367026,21.3,2.45219,6.86625,16.7639,8.582,2.29667,18.3429,8.60431,-2.2753,18.2417,2.48524,-6.87152,16.6247,9.03892,-1.68511,6.99805,8.95401,-0.903916,6.06347,8.93312,0.735113,6.03199,9.01667,1.69806,6.93117,0.219811,-8.31043,9.62343,0.134378,-7.73162,9.60773,0.856056,-8.18926,9.79412,0.770614,-7.61045,9.77843,1.41676,-8.07414,10.2347,1.33132,-7.49533,10.219,1.84703,-7.97632,10.9022,1.7616,-7.39752,10.8865,2.10478,-7.90539,11.7311,2.01934,-7.32658,11.7154,2.16474,-7.86829,12.6404,2.0793,-7.28948,12.6248,2.02107,-7.86865,13.5411,1.93564,-7.28984,13.5254,1.68783,-7.90643,14.3449,1.60239,-7.32762,14.3292,1.19762,-7.97794,14.9732,1.11218,-7.39913,14.9575,0.598444,-8.07617,15.3645,0.513002,-7.49736,15.3488,-0.0510553,-8.19151,15.4805,-0.136498,-7.6127,15.4648,-0.687301,-8.31267,15.3098,-0.772734,-7.73386,15.2941,-1.248,-8.4278,14.8692,-1.33344,-7.84899,14.8535,-1.67828,-8.52562,14.2018,-1.76372,-7.94681,14.1861,-1.93602,-8.59655,13.3728,-2.02146,-8.01773,13.3571,-1.99599,-8.63365,12.4635,-2.08143,-8.05483,12.4478,-1.85232,-8.63329,11.5629,-1.93776,-8.05448,11.5472,-1.51906,-8.59551,10.7591,-1.60451,-8.0167,10.7434,-1.02886,-8.524,10.1307,-1.1143,-7.94519,10.1151,-0.429679,-8.42577,9.73945,-0.515121,-7.84696,9.72375,0.23027,7.75592,9.29819,0.144077,7.17707,9.30595,0.866356,7.64094,9.47366,0.780163,7.06208,9.48142,1.42692,7.54303,9.9186,1.34072,6.96418,9.92635,1.85709,7.47179,10.5895,1.77089,6.89292,10.5972,2.11475,7.43417,11.4206,2.02855,6.85532,11.4284,2.17469,7.43388,12.3307,2.08849,6.85501,12.3384,2.03103,7.47092,13.2306,1.94483,6.89206,13.2383,1.69785,7.54168,14.0322,1.61165,6.96282,14.0399,1.20775,7.63924,14.6571,1.12155,7.06038,14.6648,0.608706,7.75404,15.0441,0.522513,7.17518,15.0518};
			return value;
		}
		private double[] getCoordinate_18_41_point_2()
		{
			double[] value = {-0.0406342,7.87484,15.1553,-0.126836,7.29598,15.163,-0.67672,7.98982,14.9798,-0.762922,7.41096,14.9876,-1.23728,8.08773,14.5349,-1.32348,7.50887,14.5427,-1.66745,8.15897,13.864,-1.75365,7.58012,13.8718,-1.92511,8.19659,13.0329,-2.01131,7.61774,13.0406,-1.98505,8.19689,12.1228,-2.07124,7.61803,12.1306,-1.8414,8.15984,11.2229,-1.92759,7.58099,11.2307,-1.50821,8.08908,10.4213,-1.59441,7.51022,10.4291,-1.01811,7.99153,9.7964,-1.10431,7.41266,9.80416,-0.41907,7.87672,9.40942,-0.505272,7.29787,9.41718,9.0899,-0.959294,7.83018,9.0899,-0.350023,12.2864,9.0899,0.0890149,12.2864,9.0899,0.918413,7.83018,10.3688,-0.378663,7.83299,9.26496,-0.348896,12.2864,9.26496,0.0901425,12.2864,10.3785,0.223488,7.83018,8.88037,2.40845,7.35785,8.89189,-2.38204,7.35785};
			return value;
		}

		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=17, element #41, 507 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_17_41_coordIndex()
		{
			MFInt32 IndexedFaceSet_17_41_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_17_41_coordIndex_1()));
			return IndexedFaceSet_17_41_coordIndex;
		}
		/** Large attribute array: Coordinate point field, scene-graph level=18, element #41, 390 total numbers made up of 130 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getCoordinate_18_41_point()
		{
			MFVec3f Coordinate_18_41_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getCoordinate_18_41_point_1()))
				.append(new MFVec3f(getCoordinate_18_41_point_2()));
			return Coordinate_18_41_point;
		}

	/** The initialized model object, created within initialize() method. */
	private X3D x3dModel;

	/** 
	 * Provide a 
	 * <a href="https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim" target="_blank">shallow copy</a>
	 * of the X3D model.
	 * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html">X3D</a>
	 * @return Referee model
	 */
	public X3D getX3dModel()
	{	  
		return x3dModel;
	}
	   
    /** 
     * Default main() method provided for test purposes, uses CommandLine to set global ConfigurationProperties for this object.
     * @param args array of input parameters, provided as arguments
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#handleArguments-java.lang.String:A-">X3D.handleArguments(args)</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#validationReport--">X3D.validationReport()</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html">CommandLine</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html#USAGE">CommandLine.USAGE</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/ConfigurationProperties.html">ConfigurationProperties</a>
     */
    public static void main(String args[])
    {
        System.out.println("Build this X3D model, showing validation diagnostics...");
        X3D thisExampleX3dModel = new Referee().getX3dModel();
//      System.out.println("X3D model construction complete.");
	
        // next handle command line arguments
        boolean hasArguments = (args != null) && (args.length > 0);
        boolean validate = true; // default
        boolean argumentsLoadNewModel = false;
        String  fileName = new String();

        if (args != null)
        {
                for (String arg : args)
                {
                        if (arg.toLowerCase().startsWith("-v") || arg.toLowerCase().contains("validate"))
                        {
                                validate = true; // making sure
                        }
                        if (arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3D) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_CLASSICVRML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3DB) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_VRML97) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_EXI) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_GZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_ZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_HTML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_XHTML))
                        {
                                argumentsLoadNewModel = true;
                                fileName = arg;
                        }
                }
        }
        if      (argumentsLoadNewModel)
                System.out.println("WARNING: \"Savage.Buildings.SoccerStadium.Referee\" model invocation is attempting to load file \"" + fileName + "\" instead of simply validating itself... file loading ignored.");
        else if (hasArguments) // if no arguments provided, this method produces usage warning
                thisExampleX3dModel.handleArguments(args);
	
        if (validate)
        {
            //  System.out.println("--- TODO fix duplicated outputs ---"); // omit when duplicated outputs problem is solved/refactored
		String validationResults = thisExampleX3dModel.validationReport();
            //  System.out.println("-----------------------------------"); // omit when duplicated outputs problem is solved/refactored
                System.out.print("Savage.Buildings.SoccerStadium.Referee self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

                // experimental: test X3DJSAIL output files
                // Buildings/SoccerStadium/Referee_JavaExport.* file validation is checked when building X3D Example Archives
                String filenameX3D  = "Buildings/SoccerStadium/Referee_JavaExport.x3d"; 
                String filenameX3DV = "Buildings/SoccerStadium/Referee_JavaExport.x3dv"; 
                String filenameJSON = "Buildings/SoccerStadium/Referee_JavaExport.json";
                thisExampleX3dModel.toFileX3D        (filenameX3D);
                thisExampleX3dModel.toFileClassicVRML(filenameX3DV);
// TODO         thisExampleX3dModel.toFileJSON       (filenameJSON);
        }
    }
}
