<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>246</bug_id>
          
          <creation_ts>2006-09-17 04:59:33 +0200</creation_ts>
          <short_desc>Please install new JOGL webstart descriptors</short_desc>
          <delta_ts>2015-09-27 03:14:59 +0200</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>macosx</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>WORKSFORME</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>FEATURE</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>262</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:49:34 +0100</bug_when>
    <thetext>


---- Reported by yottzumm 2006-09-17 16:59:33 ----

Please install new JOGL web start jars on the jogl.dev.java.net webstart site
My application works from the command line, but not from web start.  I tried
both the jogl.jnlp and the jogl-jsr-231.jnlp.

See: http://schizophrenics.net/yottzumm/chat3d/orbit.jnlp for stack traces.

This may not be a bug, but if the webstart jars aren&apos;t up to date, please think
about releasing a new version.

My webstart file looks like:
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;jnlp spec=&quot;1.0&quot; 
      codebase=&quot;http://schizophrenics.net/yottzumm/chat3d&quot;
      href=&quot;chat3d.jnlp&quot;&gt;
  &lt;information&gt;
    &lt;title&gt;Orbit&lt;/title&gt;
    &lt;vendor&gt;Schizophrenics.NET&lt;/vendor&gt;
    &lt;homepage href=&quot;http://schizophrenics.net/yottzumm/chat3d&quot;/&gt;
    &lt;description&gt;Orbit&lt;/description&gt;
    &lt;description kind=&quot;short&quot;&gt;Orbit&lt;/description&gt;
    &lt;offline-allowed/&gt;
  &lt;/information&gt;
  &lt;security&gt;
        &lt;all-permissions/&gt;
  &lt;/security&gt;
    &lt;resources&gt;
      &lt;j2se href=&quot;http://java.sun.com/products/autodl/j2se&quot; version=&quot;1.6+&quot;/&gt;
        &lt;jar href=&quot;lircom.jar&quot; main=&quot;true&quot;/&gt;
        &lt;jar href=&quot;jogl-demos-util.jar&quot;/&gt;
        &lt;jar href=&quot;jogl-demos.jar&quot;/&gt;
        &lt;jar href=&quot;jogl-demos-data.jar&quot;/&gt;
        &lt;extension name=&quot;jogl-jsr-231&quot;
href=&quot;https://jogl.dev.java.net/webstart/jogl-jsr-231.jnlp&quot; /&gt;
        &lt;property name=&quot;sun.java2d.opengl&quot; value=&quot;true&quot;/&gt;
    &lt;/resources&gt;
  &lt;application-desc main-class=&quot;lircom.Orbit2&quot;&gt;
  &lt;/application-desc&gt;
&lt;/jnlp&gt;
-----------------------------------
Code minus Animator is:
package lircom;



import java.awt.event.*;

import java.util.*;

import javax.swing.*;



import javax.media.opengl.*;



import demos.util.*;

import gleem.*;

import gleem.linalg.*;



/**

  Wavelength-dependent refraction demo&lt;br&gt;

  It&apos;s a chromatic aberration!&lt;br&gt;

  sgreen@nvidia.com 4/2001&lt;br&gt;&lt;p&gt;



  Currently 3 passes - could do it in 1 with 4 texture units&lt;p&gt;



  Ported to Java, Swing and ARB_fragment_program by Kenneth Russell

*/



public class Orbit2 extends GLJPanel implements WindowListener {

  private boolean useRegisterCombiners;

  private Animator animator;

  private volatile boolean quit;



  static public void main(String args[]) {

        JFrame jf = new JFrame(&quot;JOGL Test Case&quot;);

	Orbit2 canvas = new Orbit2();

	jf.getContentPane().add(canvas);

	jf.setSize(800,500);

	jf.setVisible(true);

	jf.addWindowListener(canvas);

  }

public void 	windowActivated(java.awt.event.WindowEvent e) {}

public void 	windowClosed(java.awt.event.WindowEvent e) {}

public void 	windowClosing(java.awt.event.WindowEvent e) { System.exit(0); }

public void 	windowDeactivated(java.awt.event.WindowEvent e) {}

public void 	windowDeiconified(java.awt.event.WindowEvent e) {}

public void 	windowIconified(java.awt.event.WindowEvent e) {}

public void 	windowOpened(java.awt.event.WindowEvent e) {}



  public Orbit2() {

    super(new GLCapabilities(), null, null);

    setSize(800, 500);

    addGLEventListener(new Listener());

    addMouseListener(new MouseAdapter() {

        public void mouseClicked(MouseEvent e) {

          requestFocus();

        }

      });

    animator = new Animator();

    animator.add(this);

    animator.start();

  }



  class Listener implements GLEventListener {

    private boolean firstRender = true;

    private int vtxProg;

    private int fragProg;

    private int cubemap;

    private int bunnydl;

    private int obj;



    private ExaminerViewer viewer;



    private Time  time = new SystemTime();

    private float animRate = (float) Math.toRadians(-6.0f); // Radians / sec



    private float refract = 1.1f;           // ratio of indicies of refraction

    private float wavelengthDelta = 0.05f;  // difference in refraction for each
&quot;wavelength&quot; (R,G,B)

    private float fresnel = 2.0f;           // Fresnel multiplier



    private boolean wire = false;

    private boolean toggleWire = false;





class coord {

	float x;

	float y;

	float z;

};





int resolution = 100;

float e = 5;

float f = 5;

float g = 5;

float h = 5;



coord points[] = new coord[resolution*resolution];

coord oldpoints[] = new coord[resolution*resolution];

coord morphpoints[] = new coord[resolution*resolution];

coord facenormals[][] = new coord[resolution*resolution][6];

coord vertexnormals[] = new coord[resolution*resolution];



    public void init(GLAutoDrawable drawable) {

      GL gl = drawable.getGL();

      // GLU glu = drawable.getGLU();

      float cc = 0.0f;

      gl.glClearColor(cc, cc, cc, 1);

      gl.glColor3f(1,1,1);

      gl.glEnable(GL.GL_DEPTH_TEST);



      gl.glDisable(GL.GL_CULL_FACE);

      if (firstRender) {

        firstRender = false;



        drawable.addKeyListener(new KeyAdapter() {

            public void keyTyped(KeyEvent e) {

              dispatchKey(e.getKeyChar());

            }

          });



        // Register the window with the ManipManager

        ManipManager manager = ManipManager.getManipManager();

        manager.registerWindow(drawable);



        viewer = new ExaminerViewer(MouseButtonHelper.numMouseButtons());

        viewer.setNoAltKeyMode(true);

        viewer.attach(drawable, new BSphereProvider() {

            public BSphere getBoundingSphere() {

              return new BSphere(new Vec3f(0, 0, 0), 50.0f);

            }

          });

        viewer.setVertFOV((float) (15.0f * Math.PI / 32.0f));

        viewer.setZNear(-10.0f);

        viewer.setZFar(10.0f);

      }



	gl.glShadeModel (GL.GL_SMOOTH);

	gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, new float[] { 1.0f, 1.0f, 1.0f,
1.0f }, 0);

	gl.glMaterialfv(GL.GL_FRONT, GL.GL_SHININESS, new float[] { 50.0f }, 0);

	gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, new float[] { -1.0f, -1.0f, 1.0f,
0.0f }, 0);



	gl.glEnable(GL.GL_LIGHTING);

	gl.glEnable(GL.GL_LIGHT0);

     int i;

     int j;

    for ( i = 0; i &lt; resolution; i++) {

       for ( j = 0; j &lt; resolution; j++) {

	       points[i*resolution+j] = new coord();

	       oldpoints[i*resolution+j] = new coord();

	       morphpoints[i*resolution+j] = new coord();

	       vertexnormals[i*resolution+j] = new coord();

	       facenormals[i*resolution+j] = new coord[6];

	       facenormals[i*resolution+j][0] = new coord();

	       facenormals[i*resolution+j][1] = new coord();

	       facenormals[i*resolution+j][2] = new coord();

	       facenormals[i*resolution+j][3] = new coord();

	       facenormals[i*resolution+j][4] = new coord();

	       facenormals[i*resolution+j][5] = new coord();

      }

    }

    material(gl, GL.GL_FRONT, 0.0215f, 0.1745f, 0.0215f, 0.07568f, 0.61424f,
0.07568f, 0.633f, 0.727811f, 0.633f, 0.6f);

    material(gl, GL.GL_BACK, 1.0f, 1.0f, 1.0f,

		    1.0f, 1.0f, 1.0f,

		    1.0f, 1.0f, 1.0f, 0.6f);

  }

Random random = new Random();

void set_fraction() {

	int choice = random.nextInt(4);

	switch (choice) {

	case 0:

		e += random.nextInt(2) * 2 - 1;

		break;

	case 1:

		f += random.nextInt(2) * 2 - 1;

		break;

	case 2:

		g += random.nextInt(2) * 2 - 1;

		break;

	case 3:

		h += random.nextInt(2) * 2 - 1;

		break;

	}

	if (e &lt; -20) {

		e = -20;

	}

	if (e &gt; 20) {

		e = 20;

	}

	if (f &lt; -20) {

		f = -20;

	}

	if (f &gt; 20) {

		f = 20;

	}

	if (g &lt; 1) {

		g = 1;

	}

	if (g &gt; 12) {

		g = 5;

	}

	if (h &lt; 1) {

		h = 1;

	}

	if (h &gt; 12) {

		h = 5;

	}

}



void generateCoordinates() {

     float theta = 0.0f;

     float phi = 0.0f;

     float delta = (2f * 3.141592653f) / (resolution-1);

     int i;

     int j;



     set_fraction();

     for ( i = 0; i &lt; resolution; i++) {

	for ( j = 0; j &lt; resolution; j++) {

		float rho = e + f * (float)Math.cos(g * theta) * (float)Math.cos(h * phi);

		points[i*resolution+j].x = rho * (float)Math.cos(phi) * (float)Math.cos(theta);

		points[i*resolution+j].y = rho * (float)Math.cos(phi) * (float)Math.sin(theta);

		points[i*resolution+j].z = rho * (float)Math.sin(phi);

		theta += delta;

	}

	phi += delta;

     }

}

void material(GL gl, int frontback, float ambr, float ambg, float ambb,

	     float difr, float difg, float difb,

	     float specr, float specg, float specb, float shine)

{

	gl.glMaterialfv(frontback, GL.GL_AMBIENT, new float[] { ambr, ambg, ambb, 1.0f
}, 0);

	gl.glMaterialfv(frontback, GL.GL_DIFFUSE, new float[] { difr, difg, difb, 1.0f
}, 0);

	gl.glMaterialfv(frontback, GL.GL_SPECULAR, new float[] {specr, specg, specb,
1.0f }, 0);

	gl.glMaterialf(frontback, GL.GL_SHININESS, shine * 128.0f);

}



void averagenormals(coord normal,

		coord normal1, coord normal2, coord normal3,

		coord normal4, coord normal5, coord normal6) {

		normal.x = (normal1.x + normal2.x + normal3.x + normal4.x + normal5.x +
normal6.x) / 6;

		normal.y = (normal1.y + normal2.y + normal3.y + normal4.y + normal5.y +
normal6.y) / 6;

		normal.z = (normal1.z + normal2.z + normal3.z + normal4.z + normal5.z +
normal6.z) / 6;

}



coord ab = new coord();

coord ac = new coord();



void compute_normal(coord normal, coord point0, coord point1, coord point2)  {

	ab.x = point1.x - point0.x;

	ab.y = point1.y - point0.y;

	ab.z = point1.z - point0.z;

	ac.x = point2.x - point0.x;

	ac.y = point2.y - point0.y;

	ac.z = point2.z - point0.z;

	normal.x = ab.y * ac.z - ab.z * ac.y;

	normal.y = ab.z * ac.x - ab.x * ac.z;

	normal.z = ab.x * ac.y - ab.y * ac.x;

}



void morph(int i, float m) {

	morphpoints[i].x = (points[i].x - oldpoints[i].x) * m + oldpoints[i].x;

	morphpoints[i].y = (points[i].y - oldpoints[i].y) * m + oldpoints[i].y;

	morphpoints[i].z = (points[i].z - oldpoints[i].z) * m + oldpoints[i].z;

}



public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean
deviceChanged) {}



public void display(GLAutoDrawable drawable) {

      GL gl = drawable.getGL();

      // GLU glu = drawable.getGLU();

      gl.glClear(GL.GL_COLOR_BUFFER_BIT|GL.GL_DEPTH_BUFFER_BIT);

      viewer.update(gl);

      ManipManager.getManipManager().updateCameraParameters(drawable,
viewer.getCameraParameters());

      ManipManager.getManipManager().render(drawable, gl);



   int i;

   int j;

   float m;



   generateCoordinates();

   for (m = 0; m &lt; 1.0; m+=.0625)

   {

     gl.glClear (GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

     // morph all the points

     for ( i = 0; i &lt; resolution; i++) {

     	for ( j = 0; j &lt; resolution; j++) {

          morph(i*resolution+j, m);

	}

     }

     // compute face normals and vertex normals

     for ( i = 0; i &lt; resolution; i++) {

     	for ( j = 0; j &lt; resolution; j++) {

		int i0 = i * resolution;

		int i0j = i0 + j;

		int ip1 = (i + 1) % resolution * resolution;

		int im1 = (i + resolution - 1) % resolution * resolution;

		int jp1 = (j + 1) % resolution;

		int jm1 = (j + resolution - 1) % resolution;

		compute_normal(facenormals[i0j][0], morphpoints[i0j], morphpoints[i0+jp1],
morphpoints[ip1+j]);

		compute_normal(facenormals[i0j][1], morphpoints[i0j], morphpoints[ip1+j],
morphpoints[ip1+jm1]);

		compute_normal(facenormals[i0j][2], morphpoints[i0j], morphpoints[ip1+jm1],
morphpoints[i0+jm1]);

		compute_normal(facenormals[i0j][3], morphpoints[i0j], morphpoints[i0+jm1],
morphpoints[im1+j]);

		compute_normal(facenormals[i0j][4], morphpoints[i0j], morphpoints[im1+j],
morphpoints[im1+jp1]);

		compute_normal(facenormals[i0j][5], morphpoints[i0j], morphpoints[im1+jp1],
morphpoints[i0+jp1]);

	     averagenormals(vertexnormals[i0j],

		facenormals[i0j][0],

		facenormals[i0j][1],

		facenormals[i0j][2],

		facenormals[i0j][3],

		facenormals[i0j][4],

		facenormals[i0j][5]);

	}

     }

     for ( i = 0; i &lt; resolution-1; i++) {

        gl.glBegin(GL.GL_TRIANGLE_STRIP);

	gl.glColor3f(1.0f, 1.0f, 0.5f);

     	for ( j = 0; j &lt; resolution; j++) {

	     coord point = morphpoints[i*resolution+j];

	     coord normal = vertexnormals[i*resolution+j];

	     gl.glNormal3f(normal.x, normal.y, normal.z);

	     // gl.glNormal3f(point.x, point.y, point.z);

	     gl.glVertex3f(point.x, point.y, point.z);

	     point = morphpoints[(i+1)*resolution+j];

	     normal = vertexnormals[(i+1)*resolution+j];

	     gl.glNormal3f(normal.x, normal.y, normal.z);

	     //gl.glNormal3f(point.x, point.y, point.z);

	     gl.glVertex3f(point.x, point.y, point.z);

	}

   	gl.glEnd();

    }

   }

   for ( i = 0; i &lt; resolution; i++) {

     for ( j = 0; j &lt; resolution; j++) {

	   int i0 = i * resolution;

	   int i0j = i0 + j;

	   oldpoints[i0j].x = points[i0j].x;

	   oldpoints[i0j].y = points[i0j].y;

	   oldpoints[i0j].z = points[i0j].z;

     }

   }

}



public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height)

{

   GL gl = drawable.getGL();

   gl.glViewport (x, y,  width,  height);

   gl.glMatrixMode (GL.GL_PROJECTION);

   gl.glLoadIdentity ();

   gl.glOrtho (-30.0, 30.0, -30.0, 30.0, 30.0, -30.0);

   gl.glMatrixMode (GL.GL_MODELVIEW);

   gl.glLoadIdentity ();

}

    private void dispatchKey(char k) {

    }

}

}



---- Additional Comments From yottzumm 2006-09-17 17:01:00 ----

Created an attachment
Main file, minus Animator (do an import).




---- Additional Comments From yottzumm 2006-09-17 17:01:44 ----

Created an attachment
Java Web Start file




---- Additional Comments From kbr 2006-09-17 17:52:26 ----

The current JOGL extension JNLPs have moved; the one you&apos;re pointing to is
obsolete. Please see the JOGL User&apos;s Guide (linked from the JOGL home page) for
the current one:

http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jnlp

The official 1.0.0 release of JSR-231 was just done this past week. There is a
permanently-archived extension JNLP for this release as well:

http://download.java.net/media/jogl/builds/archive/jsr-231-1.0.0/jogl.jnlp

See the following thread on javagaming.org for more information:

http://www.javagaming.org/forums/index.php?topic=11189.45

Please indicate whether this information solves your problem. I would like to
completely delete the jogl.jnlp and other files from the www/ subdirectory of
jogl.dev.java.net at this point.




---- Additional Comments From kbr 2006-09-17 18:47:15 ----

The submitter indicated using the up-to-date extension JNLP solved the problem.
Closing as &quot;works for me&quot;.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:49 EDT  ---

This bug was previously known as _bug_ 246 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=246
Imported an attachment (id=87)
Imported an attachment (id=88)

The original submitter of attachment 87 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 88 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>87</attachid>
            <date>2006-09-17 17:01:00 +0200</date>
            <delta_ts>2006-09-17 17:01:00 +0200</delta_ts>
            <desc>Main file, minus Animator (do an import).</desc>
            <filename>Orbit2.java</filename>
            <type>text/plain</type>
            <size>11447</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">cGFja2FnZSBsaXJjb207DQoNCmltcG9ydCBqYXZhLmF3dC5ldmVudC4qOw0KaW1wb3J0IGphdmEu
dXRpbC4qOw0KaW1wb3J0IGphdmF4LnN3aW5nLio7DQoNCmltcG9ydCBqYXZheC5tZWRpYS5vcGVu
Z2wuKjsNCg0KaW1wb3J0IGRlbW9zLnV0aWwuKjsNCmltcG9ydCBnbGVlbS4qOw0KaW1wb3J0IGds
ZWVtLmxpbmFsZy4qOw0KDQovKioNCiAgV2F2ZWxlbmd0aC1kZXBlbmRlbnQgcmVmcmFjdGlvbiBk
ZW1vPGJyPg0KICBJdCdzIGEgY2hyb21hdGljIGFiZXJyYXRpb24hPGJyPg0KICBzZ3JlZW5AbnZp
ZGlhLmNvbSA0LzIwMDE8YnI+PHA+DQoNCiAgQ3VycmVudGx5IDMgcGFzc2VzIC0gY291bGQgZG8g
aXQgaW4gMSB3aXRoIDQgdGV4dHVyZSB1bml0czxwPg0KDQogIFBvcnRlZCB0byBKYXZhLCBTd2lu
ZyBhbmQgQVJCX2ZyYWdtZW50X3Byb2dyYW0gYnkgS2VubmV0aCBSdXNzZWxsDQoqLw0KDQpwdWJs
aWMgY2xhc3MgT3JiaXQyIGV4dGVuZHMgR0xKUGFuZWwgaW1wbGVtZW50cyBXaW5kb3dMaXN0ZW5l
ciB7DQogIHByaXZhdGUgYm9vbGVhbiB1c2VSZWdpc3RlckNvbWJpbmVyczsNCiAgcHJpdmF0ZSBB
bmltYXRvciBhbmltYXRvcjsNCiAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIHF1aXQ7DQoNCiAg
c3RhdGljIHB1YmxpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgew0KICAgICAgICBKRnJhbWUg
amYgPSBuZXcgSkZyYW1lKCJKT0dMIFRlc3QgQ2FzZSIpOw0KCU9yYml0MiBjYW52YXMgPSBuZXcg
T3JiaXQyKCk7DQoJamYuZ2V0Q29udGVudFBhbmUoKS5hZGQoY2FudmFzKTsNCglqZi5zZXRTaXpl
KDgwMCw1MDApOw0KCWpmLnNldFZpc2libGUodHJ1ZSk7DQoJamYuYWRkV2luZG93TGlzdGVuZXIo
Y2FudmFzKTsNCiAgfQ0KcHVibGljIHZvaWQgCXdpbmRvd0FjdGl2YXRlZChqYXZhLmF3dC5ldmVu
dC5XaW5kb3dFdmVudCBlKSB7fQ0KcHVibGljIHZvaWQgCXdpbmRvd0Nsb3NlZChqYXZhLmF3dC5l
dmVudC5XaW5kb3dFdmVudCBlKSB7fQ0KcHVibGljIHZvaWQgCXdpbmRvd0Nsb3NpbmcoamF2YS5h
d3QuZXZlbnQuV2luZG93RXZlbnQgZSkgeyBTeXN0ZW0uZXhpdCgwKTsgfQ0KcHVibGljIHZvaWQg
CXdpbmRvd0RlYWN0aXZhdGVkKGphdmEuYXd0LmV2ZW50LldpbmRvd0V2ZW50IGUpIHt9DQpwdWJs
aWMgdm9pZCAJd2luZG93RGVpY29uaWZpZWQoamF2YS5hd3QuZXZlbnQuV2luZG93RXZlbnQgZSkg
e30NCnB1YmxpYyB2b2lkIAl3aW5kb3dJY29uaWZpZWQoamF2YS5hd3QuZXZlbnQuV2luZG93RXZl
bnQgZSkge30NCnB1YmxpYyB2b2lkIAl3aW5kb3dPcGVuZWQoamF2YS5hd3QuZXZlbnQuV2luZG93
RXZlbnQgZSkge30NCg0KICBwdWJsaWMgT3JiaXQyKCkgew0KICAgIHN1cGVyKG5ldyBHTENhcGFi
aWxpdGllcygpLCBudWxsLCBudWxsKTsNCiAgICBzZXRTaXplKDgwMCwgNTAwKTsNCiAgICBhZGRH
TEV2ZW50TGlzdGVuZXIobmV3IExpc3RlbmVyKCkpOw0KICAgIGFkZE1vdXNlTGlzdGVuZXIobmV3
IE1vdXNlQWRhcHRlcigpIHsNCiAgICAgICAgcHVibGljIHZvaWQgbW91c2VDbGlja2VkKE1vdXNl
RXZlbnQgZSkgew0KICAgICAgICAgIHJlcXVlc3RGb2N1cygpOw0KICAgICAgICB9DQogICAgICB9
KTsNCiAgICBhbmltYXRvciA9IG5ldyBBbmltYXRvcigpOw0KICAgIGFuaW1hdG9yLmFkZCh0aGlz
KTsNCiAgICBhbmltYXRvci5zdGFydCgpOw0KICB9DQoNCiAgY2xhc3MgTGlzdGVuZXIgaW1wbGVt
ZW50cyBHTEV2ZW50TGlzdGVuZXIgew0KICAgIHByaXZhdGUgYm9vbGVhbiBmaXJzdFJlbmRlciA9
IHRydWU7DQogICAgcHJpdmF0ZSBpbnQgdnR4UHJvZzsNCiAgICBwcml2YXRlIGludCBmcmFnUHJv
ZzsNCiAgICBwcml2YXRlIGludCBjdWJlbWFwOw0KICAgIHByaXZhdGUgaW50IGJ1bm55ZGw7DQog
ICAgcHJpdmF0ZSBpbnQgb2JqOw0KDQogICAgcHJpdmF0ZSBFeGFtaW5lclZpZXdlciB2aWV3ZXI7
DQoNCiAgICBwcml2YXRlIFRpbWUgIHRpbWUgPSBuZXcgU3lzdGVtVGltZSgpOw0KICAgIHByaXZh
dGUgZmxvYXQgYW5pbVJhdGUgPSAoZmxvYXQpIE1hdGgudG9SYWRpYW5zKC02LjBmKTsgLy8gUmFk
aWFucyAvIHNlYw0KDQogICAgcHJpdmF0ZSBmbG9hdCByZWZyYWN0ID0gMS4xZjsgICAgICAgICAg
IC8vIHJhdGlvIG9mIGluZGljaWVzIG9mIHJlZnJhY3Rpb24NCiAgICBwcml2YXRlIGZsb2F0IHdh
dmVsZW5ndGhEZWx0YSA9IDAuMDVmOyAgLy8gZGlmZmVyZW5jZSBpbiByZWZyYWN0aW9uIGZvciBl
YWNoICJ3YXZlbGVuZ3RoIiAoUixHLEIpDQogICAgcHJpdmF0ZSBmbG9hdCBmcmVzbmVsID0gMi4w
ZjsgICAgICAgICAgIC8vIEZyZXNuZWwgbXVsdGlwbGllcg0KDQogICAgcHJpdmF0ZSBib29sZWFu
IHdpcmUgPSBmYWxzZTsNCiAgICBwcml2YXRlIGJvb2xlYW4gdG9nZ2xlV2lyZSA9IGZhbHNlOw0K
DQoNCmNsYXNzIGNvb3JkIHsNCglmbG9hdCB4Ow0KCWZsb2F0IHk7DQoJZmxvYXQgejsNCn07DQoN
Cg0KaW50IHJlc29sdXRpb24gPSAxMDA7DQpmbG9hdCBlID0gNTsNCmZsb2F0IGYgPSA1Ow0KZmxv
YXQgZyA9IDU7DQpmbG9hdCBoID0gNTsNCg0KY29vcmQgcG9pbnRzW10gPSBuZXcgY29vcmRbcmVz
b2x1dGlvbipyZXNvbHV0aW9uXTsNCmNvb3JkIG9sZHBvaW50c1tdID0gbmV3IGNvb3JkW3Jlc29s
dXRpb24qcmVzb2x1dGlvbl07DQpjb29yZCBtb3JwaHBvaW50c1tdID0gbmV3IGNvb3JkW3Jlc29s
dXRpb24qcmVzb2x1dGlvbl07DQpjb29yZCBmYWNlbm9ybWFsc1tdW10gPSBuZXcgY29vcmRbcmVz
b2x1dGlvbipyZXNvbHV0aW9uXVs2XTsNCmNvb3JkIHZlcnRleG5vcm1hbHNbXSA9IG5ldyBjb29y
ZFtyZXNvbHV0aW9uKnJlc29sdXRpb25dOw0KDQogICAgcHVibGljIHZvaWQgaW5pdChHTEF1dG9E
cmF3YWJsZSBkcmF3YWJsZSkgew0KICAgICAgR0wgZ2wgPSBkcmF3YWJsZS5nZXRHTCgpOw0KICAg
ICAgLy8gR0xVIGdsdSA9IGRyYXdhYmxlLmdldEdMVSgpOw0KICAgICAgZmxvYXQgY2MgPSAwLjBm
Ow0KICAgICAgZ2wuZ2xDbGVhckNvbG9yKGNjLCBjYywgY2MsIDEpOw0KICAgICAgZ2wuZ2xDb2xv
cjNmKDEsMSwxKTsNCiAgICAgIGdsLmdsRW5hYmxlKEdMLkdMX0RFUFRIX1RFU1QpOw0KDQogICAg
ICBnbC5nbERpc2FibGUoR0wuR0xfQ1VMTF9GQUNFKTsNCiAgICAgIGlmIChmaXJzdFJlbmRlcikg
ew0KICAgICAgICBmaXJzdFJlbmRlciA9IGZhbHNlOw0KDQogICAgICAgIGRyYXdhYmxlLmFkZEtl
eUxpc3RlbmVyKG5ldyBLZXlBZGFwdGVyKCkgew0KICAgICAgICAgICAgcHVibGljIHZvaWQga2V5
VHlwZWQoS2V5RXZlbnQgZSkgew0KICAgICAgICAgICAgICBkaXNwYXRjaEtleShlLmdldEtleUNo
YXIoKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gUmVnaXN0
ZXIgdGhlIHdpbmRvdyB3aXRoIHRoZSBNYW5pcE1hbmFnZXINCiAgICAgICAgTWFuaXBNYW5hZ2Vy
IG1hbmFnZXIgPSBNYW5pcE1hbmFnZXIuZ2V0TWFuaXBNYW5hZ2VyKCk7DQogICAgICAgIG1hbmFn
ZXIucmVnaXN0ZXJXaW5kb3coZHJhd2FibGUpOw0KDQogICAgICAgIHZpZXdlciA9IG5ldyBFeGFt
aW5lclZpZXdlcihNb3VzZUJ1dHRvbkhlbHBlci5udW1Nb3VzZUJ1dHRvbnMoKSk7DQogICAgICAg
IHZpZXdlci5zZXROb0FsdEtleU1vZGUodHJ1ZSk7DQogICAgICAgIHZpZXdlci5hdHRhY2goZHJh
d2FibGUsIG5ldyBCU3BoZXJlUHJvdmlkZXIoKSB7DQogICAgICAgICAgICBwdWJsaWMgQlNwaGVy
ZSBnZXRCb3VuZGluZ1NwaGVyZSgpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCU3BoZXJl
KG5ldyBWZWMzZigwLCAwLCAwKSwgNTAuMGYpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0p
Ow0KICAgICAgICB2aWV3ZXIuc2V0VmVydEZPVigoZmxvYXQpICgxNS4wZiAqIE1hdGguUEkgLyAz
Mi4wZikpOw0KICAgICAgICB2aWV3ZXIuc2V0Wk5lYXIoLTEwLjBmKTsNCiAgICAgICAgdmlld2Vy
LnNldFpGYXIoMTAuMGYpOw0KICAgICAgfQ0KDQoJZ2wuZ2xTaGFkZU1vZGVsIChHTC5HTF9TTU9P
VEgpOw0KCWdsLmdsTWF0ZXJpYWxmdihHTC5HTF9GUk9OVCwgR0wuR0xfU1BFQ1VMQVIsIG5ldyBm
bG9hdFtdIHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9LCAwKTsNCglnbC5nbE1hdGVyaWFsZnYo
R0wuR0xfRlJPTlQsIEdMLkdMX1NISU5JTkVTUywgbmV3IGZsb2F0W10geyA1MC4wZiB9LCAwKTsN
CglnbC5nbExpZ2h0ZnYoR0wuR0xfTElHSFQwLCBHTC5HTF9QT1NJVElPTiwgbmV3IGZsb2F0W10g
eyAtMS4wZiwgLTEuMGYsIDEuMGYsIDAuMGYgfSwgMCk7DQoNCglnbC5nbEVuYWJsZShHTC5HTF9M
SUdIVElORyk7DQoJZ2wuZ2xFbmFibGUoR0wuR0xfTElHSFQwKTsNCiAgICAgaW50IGk7DQogICAg
IGludCBqOw0KICAgIGZvciAoIGkgPSAwOyBpIDwgcmVzb2x1dGlvbjsgaSsrKSB7DQogICAgICAg
Zm9yICggaiA9IDA7IGogPCByZXNvbHV0aW9uOyBqKyspIHsNCgkgICAgICAgcG9pbnRzW2kqcmVz
b2x1dGlvbitqXSA9IG5ldyBjb29yZCgpOw0KCSAgICAgICBvbGRwb2ludHNbaSpyZXNvbHV0aW9u
K2pdID0gbmV3IGNvb3JkKCk7DQoJICAgICAgIG1vcnBocG9pbnRzW2kqcmVzb2x1dGlvbitqXSA9
IG5ldyBjb29yZCgpOw0KCSAgICAgICB2ZXJ0ZXhub3JtYWxzW2kqcmVzb2x1dGlvbitqXSA9IG5l
dyBjb29yZCgpOw0KCSAgICAgICBmYWNlbm9ybWFsc1tpKnJlc29sdXRpb24ral0gPSBuZXcgY29v
cmRbNl07DQoJICAgICAgIGZhY2Vub3JtYWxzW2kqcmVzb2x1dGlvbitqXVswXSA9IG5ldyBjb29y
ZCgpOw0KCSAgICAgICBmYWNlbm9ybWFsc1tpKnJlc29sdXRpb24ral1bMV0gPSBuZXcgY29vcmQo
KTsNCgkgICAgICAgZmFjZW5vcm1hbHNbaSpyZXNvbHV0aW9uK2pdWzJdID0gbmV3IGNvb3JkKCk7
DQoJICAgICAgIGZhY2Vub3JtYWxzW2kqcmVzb2x1dGlvbitqXVszXSA9IG5ldyBjb29yZCgpOw0K
CSAgICAgICBmYWNlbm9ybWFsc1tpKnJlc29sdXRpb24ral1bNF0gPSBuZXcgY29vcmQoKTsNCgkg
ICAgICAgZmFjZW5vcm1hbHNbaSpyZXNvbHV0aW9uK2pdWzVdID0gbmV3IGNvb3JkKCk7DQogICAg
ICB9DQogICAgfQ0KICAgIG1hdGVyaWFsKGdsLCBHTC5HTF9GUk9OVCwgMC4wMjE1ZiwgMC4xNzQ1
ZiwgMC4wMjE1ZiwgMC4wNzU2OGYsIDAuNjE0MjRmLCAwLjA3NTY4ZiwgMC42MzNmLCAwLjcyNzgx
MWYsIDAuNjMzZiwgMC42Zik7DQogICAgbWF0ZXJpYWwoZ2wsIEdMLkdMX0JBQ0ssIDEuMGYsIDEu
MGYsIDEuMGYsDQoJCSAgICAxLjBmLCAxLjBmLCAxLjBmLA0KCQkgICAgMS4wZiwgMS4wZiwgMS4w
ZiwgMC42Zik7DQogIH0NClJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7DQp2b2lkIHNldF9m
cmFjdGlvbigpIHsNCglpbnQgY2hvaWNlID0gcmFuZG9tLm5leHRJbnQoNCk7DQoJc3dpdGNoIChj
aG9pY2UpIHsNCgljYXNlIDA6DQoJCWUgKz0gcmFuZG9tLm5leHRJbnQoMikgKiAyIC0gMTsNCgkJ
YnJlYWs7DQoJY2FzZSAxOg0KCQlmICs9IHJhbmRvbS5uZXh0SW50KDIpICogMiAtIDE7DQoJCWJy
ZWFrOw0KCWNhc2UgMjoNCgkJZyArPSByYW5kb20ubmV4dEludCgyKSAqIDIgLSAxOw0KCQlicmVh
azsNCgljYXNlIDM6DQoJCWggKz0gcmFuZG9tLm5leHRJbnQoMikgKiAyIC0gMTsNCgkJYnJlYWs7
DQoJfQ0KCWlmIChlIDwgLTIwKSB7DQoJCWUgPSAtMjA7DQoJfQ0KCWlmIChlID4gMjApIHsNCgkJ
ZSA9IDIwOw0KCX0NCglpZiAoZiA8IC0yMCkgew0KCQlmID0gLTIwOw0KCX0NCglpZiAoZiA+IDIw
KSB7DQoJCWYgPSAyMDsNCgl9DQoJaWYgKGcgPCAxKSB7DQoJCWcgPSAxOw0KCX0NCglpZiAoZyA+
IDEyKSB7DQoJCWcgPSA1Ow0KCX0NCglpZiAoaCA8IDEpIHsNCgkJaCA9IDE7DQoJfQ0KCWlmICho
ID4gMTIpIHsNCgkJaCA9IDU7DQoJfQ0KfQ0KDQp2b2lkIGdlbmVyYXRlQ29vcmRpbmF0ZXMoKSB7
DQogICAgIGZsb2F0IHRoZXRhID0gMC4wZjsNCiAgICAgZmxvYXQgcGhpID0gMC4wZjsNCiAgICAg
ZmxvYXQgZGVsdGEgPSAoMmYgKiAzLjE0MTU5MjY1M2YpIC8gKHJlc29sdXRpb24tMSk7DQogICAg
IGludCBpOw0KICAgICBpbnQgajsNCg0KICAgICBzZXRfZnJhY3Rpb24oKTsNCiAgICAgZm9yICgg
aSA9IDA7IGkgPCByZXNvbHV0aW9uOyBpKyspIHsNCglmb3IgKCBqID0gMDsgaiA8IHJlc29sdXRp
b247IGorKykgew0KCQlmbG9hdCByaG8gPSBlICsgZiAqIChmbG9hdClNYXRoLmNvcyhnICogdGhl
dGEpICogKGZsb2F0KU1hdGguY29zKGggKiBwaGkpOw0KCQlwb2ludHNbaSpyZXNvbHV0aW9uK2pd
LnggPSByaG8gKiAoZmxvYXQpTWF0aC5jb3MocGhpKSAqIChmbG9hdClNYXRoLmNvcyh0aGV0YSk7
DQoJCXBvaW50c1tpKnJlc29sdXRpb24ral0ueSA9IHJobyAqIChmbG9hdClNYXRoLmNvcyhwaGkp
ICogKGZsb2F0KU1hdGguc2luKHRoZXRhKTsNCgkJcG9pbnRzW2kqcmVzb2x1dGlvbitqXS56ID0g
cmhvICogKGZsb2F0KU1hdGguc2luKHBoaSk7DQoJCXRoZXRhICs9IGRlbHRhOw0KCX0NCglwaGkg
Kz0gZGVsdGE7DQogICAgIH0NCn0NCnZvaWQgbWF0ZXJpYWwoR0wgZ2wsIGludCBmcm9udGJhY2ss
IGZsb2F0IGFtYnIsIGZsb2F0IGFtYmcsIGZsb2F0IGFtYmIsDQoJICAgICBmbG9hdCBkaWZyLCBm
bG9hdCBkaWZnLCBmbG9hdCBkaWZiLA0KCSAgICAgZmxvYXQgc3BlY3IsIGZsb2F0IHNwZWNnLCBm
bG9hdCBzcGVjYiwgZmxvYXQgc2hpbmUpDQp7DQoJZ2wuZ2xNYXRlcmlhbGZ2KGZyb250YmFjaywg
R0wuR0xfQU1CSUVOVCwgbmV3IGZsb2F0W10geyBhbWJyLCBhbWJnLCBhbWJiLCAxLjBmIH0sIDAp
Ow0KCWdsLmdsTWF0ZXJpYWxmdihmcm9udGJhY2ssIEdMLkdMX0RJRkZVU0UsIG5ldyBmbG9hdFtd
IHsgZGlmciwgZGlmZywgZGlmYiwgMS4wZiB9LCAwKTsNCglnbC5nbE1hdGVyaWFsZnYoZnJvbnRi
YWNrLCBHTC5HTF9TUEVDVUxBUiwgbmV3IGZsb2F0W10ge3NwZWNyLCBzcGVjZywgc3BlY2IsIDEu
MGYgfSwgMCk7DQoJZ2wuZ2xNYXRlcmlhbGYoZnJvbnRiYWNrLCBHTC5HTF9TSElOSU5FU1MsIHNo
aW5lICogMTI4LjBmKTsNCn0NCg0Kdm9pZCBhdmVyYWdlbm9ybWFscyhjb29yZCBub3JtYWwsDQoJ
CWNvb3JkIG5vcm1hbDEsIGNvb3JkIG5vcm1hbDIsIGNvb3JkIG5vcm1hbDMsDQoJCWNvb3JkIG5v
cm1hbDQsIGNvb3JkIG5vcm1hbDUsIGNvb3JkIG5vcm1hbDYpIHsNCgkJbm9ybWFsLnggPSAobm9y
bWFsMS54ICsgbm9ybWFsMi54ICsgbm9ybWFsMy54ICsgbm9ybWFsNC54ICsgbm9ybWFsNS54ICsg
bm9ybWFsNi54KSAvIDY7DQoJCW5vcm1hbC55ID0gKG5vcm1hbDEueSArIG5vcm1hbDIueSArIG5v
cm1hbDMueSArIG5vcm1hbDQueSArIG5vcm1hbDUueSArIG5vcm1hbDYueSkgLyA2Ow0KCQlub3Jt
YWwueiA9IChub3JtYWwxLnogKyBub3JtYWwyLnogKyBub3JtYWwzLnogKyBub3JtYWw0LnogKyBu
b3JtYWw1LnogKyBub3JtYWw2LnopIC8gNjsNCn0NCg0KY29vcmQgYWIgPSBuZXcgY29vcmQoKTsN
CmNvb3JkIGFjID0gbmV3IGNvb3JkKCk7DQoNCnZvaWQgY29tcHV0ZV9ub3JtYWwoY29vcmQgbm9y
bWFsLCBjb29yZCBwb2ludDAsIGNvb3JkIHBvaW50MSwgY29vcmQgcG9pbnQyKSAgew0KCWFiLngg
PSBwb2ludDEueCAtIHBvaW50MC54Ow0KCWFiLnkgPSBwb2ludDEueSAtIHBvaW50MC55Ow0KCWFi
LnogPSBwb2ludDEueiAtIHBvaW50MC56Ow0KCWFjLnggPSBwb2ludDIueCAtIHBvaW50MC54Ow0K
CWFjLnkgPSBwb2ludDIueSAtIHBvaW50MC55Ow0KCWFjLnogPSBwb2ludDIueiAtIHBvaW50MC56
Ow0KCW5vcm1hbC54ID0gYWIueSAqIGFjLnogLSBhYi56ICogYWMueTsNCglub3JtYWwueSA9IGFi
LnogKiBhYy54IC0gYWIueCAqIGFjLno7DQoJbm9ybWFsLnogPSBhYi54ICogYWMueSAtIGFiLnkg
KiBhYy54Ow0KfQ0KDQp2b2lkIG1vcnBoKGludCBpLCBmbG9hdCBtKSB7DQoJbW9ycGhwb2ludHNb
aV0ueCA9IChwb2ludHNbaV0ueCAtIG9sZHBvaW50c1tpXS54KSAqIG0gKyBvbGRwb2ludHNbaV0u
eDsNCgltb3JwaHBvaW50c1tpXS55ID0gKHBvaW50c1tpXS55IC0gb2xkcG9pbnRzW2ldLnkpICog
bSArIG9sZHBvaW50c1tpXS55Ow0KCW1vcnBocG9pbnRzW2ldLnogPSAocG9pbnRzW2ldLnogLSBv
bGRwb2ludHNbaV0ueikgKiBtICsgb2xkcG9pbnRzW2ldLno7DQp9DQoNCnB1YmxpYyB2b2lkIGRp
c3BsYXlDaGFuZ2VkKEdMQXV0b0RyYXdhYmxlIGRyYXdhYmxlLCBib29sZWFuIG1vZGVDaGFuZ2Vk
LCBib29sZWFuIGRldmljZUNoYW5nZWQpIHt9DQoNCnB1YmxpYyB2b2lkIGRpc3BsYXkoR0xBdXRv
RHJhd2FibGUgZHJhd2FibGUpIHsNCiAgICAgIEdMIGdsID0gZHJhd2FibGUuZ2V0R0woKTsNCiAg
ICAgIC8vIEdMVSBnbHUgPSBkcmF3YWJsZS5nZXRHTFUoKTsNCiAgICAgIGdsLmdsQ2xlYXIoR0wu
R0xfQ09MT1JfQlVGRkVSX0JJVHxHTC5HTF9ERVBUSF9CVUZGRVJfQklUKTsNCiAgICAgIHZpZXdl
ci51cGRhdGUoZ2wpOw0KICAgICAgTWFuaXBNYW5hZ2VyLmdldE1hbmlwTWFuYWdlcigpLnVwZGF0
ZUNhbWVyYVBhcmFtZXRlcnMoZHJhd2FibGUsIHZpZXdlci5nZXRDYW1lcmFQYXJhbWV0ZXJzKCkp
Ow0KICAgICAgTWFuaXBNYW5hZ2VyLmdldE1hbmlwTWFuYWdlcigpLnJlbmRlcihkcmF3YWJsZSwg
Z2wpOw0KDQogICBpbnQgaTsNCiAgIGludCBqOw0KICAgZmxvYXQgbTsNCg0KICAgZ2VuZXJhdGVD
b29yZGluYXRlcygpOw0KICAgZm9yIChtID0gMDsgbSA8IDEuMDsgbSs9LjA2MjUpDQogICB7DQog
ICAgIGdsLmdsQ2xlYXIgKEdMLkdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTC5HTF9ERVBUSF9CVUZG
RVJfQklUKTsNCiAgICAgLy8gbW9ycGggYWxsIHRoZSBwb2ludHMNCiAgICAgZm9yICggaSA9IDA7
IGkgPCByZXNvbHV0aW9uOyBpKyspIHsNCiAgICAgCWZvciAoIGogPSAwOyBqIDwgcmVzb2x1dGlv
bjsgaisrKSB7DQogICAgICAgICAgbW9ycGgoaSpyZXNvbHV0aW9uK2osIG0pOw0KCX0NCiAgICAg
fQ0KICAgICAvLyBjb21wdXRlIGZhY2Ugbm9ybWFscyBhbmQgdmVydGV4IG5vcm1hbHMNCiAgICAg
Zm9yICggaSA9IDA7IGkgPCByZXNvbHV0aW9uOyBpKyspIHsNCiAgICAgCWZvciAoIGogPSAwOyBq
IDwgcmVzb2x1dGlvbjsgaisrKSB7DQoJCWludCBpMCA9IGkgKiByZXNvbHV0aW9uOw0KCQlpbnQg
aTBqID0gaTAgKyBqOw0KCQlpbnQgaXAxID0gKGkgKyAxKSAlIHJlc29sdXRpb24gKiByZXNvbHV0
aW9uOw0KCQlpbnQgaW0xID0gKGkgKyByZXNvbHV0aW9uIC0gMSkgJSByZXNvbHV0aW9uICogcmVz
b2x1dGlvbjsNCgkJaW50IGpwMSA9IChqICsgMSkgJSByZXNvbHV0aW9uOw0KCQlpbnQgam0xID0g
KGogKyByZXNvbHV0aW9uIC0gMSkgJSByZXNvbHV0aW9uOw0KCQljb21wdXRlX25vcm1hbChmYWNl
bm9ybWFsc1tpMGpdWzBdLCBtb3JwaHBvaW50c1tpMGpdLCBtb3JwaHBvaW50c1tpMCtqcDFdLCBt
b3JwaHBvaW50c1tpcDEral0pOw0KCQljb21wdXRlX25vcm1hbChmYWNlbm9ybWFsc1tpMGpdWzFd
LCBtb3JwaHBvaW50c1tpMGpdLCBtb3JwaHBvaW50c1tpcDEral0sIG1vcnBocG9pbnRzW2lwMStq
bTFdKTsNCgkJY29tcHV0ZV9ub3JtYWwoZmFjZW5vcm1hbHNbaTBqXVsyXSwgbW9ycGhwb2ludHNb
aTBqXSwgbW9ycGhwb2ludHNbaXAxK2ptMV0sIG1vcnBocG9pbnRzW2kwK2ptMV0pOw0KCQljb21w
dXRlX25vcm1hbChmYWNlbm9ybWFsc1tpMGpdWzNdLCBtb3JwaHBvaW50c1tpMGpdLCBtb3JwaHBv
aW50c1tpMCtqbTFdLCBtb3JwaHBvaW50c1tpbTEral0pOw0KCQljb21wdXRlX25vcm1hbChmYWNl
bm9ybWFsc1tpMGpdWzRdLCBtb3JwaHBvaW50c1tpMGpdLCBtb3JwaHBvaW50c1tpbTEral0sIG1v
cnBocG9pbnRzW2ltMStqcDFdKTsNCgkJY29tcHV0ZV9ub3JtYWwoZmFjZW5vcm1hbHNbaTBqXVs1
XSwgbW9ycGhwb2ludHNbaTBqXSwgbW9ycGhwb2ludHNbaW0xK2pwMV0sIG1vcnBocG9pbnRzW2kw
K2pwMV0pOw0KCSAgICAgYXZlcmFnZW5vcm1hbHModmVydGV4bm9ybWFsc1tpMGpdLA0KCQlmYWNl
bm9ybWFsc1tpMGpdWzBdLA0KCQlmYWNlbm9ybWFsc1tpMGpdWzFdLA0KCQlmYWNlbm9ybWFsc1tp
MGpdWzJdLA0KCQlmYWNlbm9ybWFsc1tpMGpdWzNdLA0KCQlmYWNlbm9ybWFsc1tpMGpdWzRdLA0K
CQlmYWNlbm9ybWFsc1tpMGpdWzVdKTsNCgl9DQogICAgIH0NCiAgICAgZm9yICggaSA9IDA7IGkg
PCByZXNvbHV0aW9uLTE7IGkrKykgew0KICAgICAgICBnbC5nbEJlZ2luKEdMLkdMX1RSSUFOR0xF
X1NUUklQKTsNCglnbC5nbENvbG9yM2YoMS4wZiwgMS4wZiwgMC41Zik7DQogICAgIAlmb3IgKCBq
ID0gMDsgaiA8IHJlc29sdXRpb247IGorKykgew0KCSAgICAgY29vcmQgcG9pbnQgPSBtb3JwaHBv
aW50c1tpKnJlc29sdXRpb24ral07DQoJICAgICBjb29yZCBub3JtYWwgPSB2ZXJ0ZXhub3JtYWxz
W2kqcmVzb2x1dGlvbitqXTsNCgkgICAgIGdsLmdsTm9ybWFsM2Yobm9ybWFsLngsIG5vcm1hbC55
LCBub3JtYWwueik7DQoJICAgICAvLyBnbC5nbE5vcm1hbDNmKHBvaW50LngsIHBvaW50LnksIHBv
aW50LnopOw0KCSAgICAgZ2wuZ2xWZXJ0ZXgzZihwb2ludC54LCBwb2ludC55LCBwb2ludC56KTsN
CgkgICAgIHBvaW50ID0gbW9ycGhwb2ludHNbKGkrMSkqcmVzb2x1dGlvbitqXTsNCgkgICAgIG5v
cm1hbCA9IHZlcnRleG5vcm1hbHNbKGkrMSkqcmVzb2x1dGlvbitqXTsNCgkgICAgIGdsLmdsTm9y
bWFsM2Yobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7DQoJICAgICAvL2dsLmdsTm9ybWFs
M2YocG9pbnQueCwgcG9pbnQueSwgcG9pbnQueik7DQoJICAgICBnbC5nbFZlcnRleDNmKHBvaW50
LngsIHBvaW50LnksIHBvaW50LnopOw0KCX0NCiAgIAlnbC5nbEVuZCgpOw0KICAgIH0NCiAgIH0N
CiAgIGZvciAoIGkgPSAwOyBpIDwgcmVzb2x1dGlvbjsgaSsrKSB7DQogICAgIGZvciAoIGogPSAw
OyBqIDwgcmVzb2x1dGlvbjsgaisrKSB7DQoJICAgaW50IGkwID0gaSAqIHJlc29sdXRpb247DQoJ
ICAgaW50IGkwaiA9IGkwICsgajsNCgkgICBvbGRwb2ludHNbaTBqXS54ID0gcG9pbnRzW2kwal0u
eDsNCgkgICBvbGRwb2ludHNbaTBqXS55ID0gcG9pbnRzW2kwal0ueTsNCgkgICBvbGRwb2ludHNb
aTBqXS56ID0gcG9pbnRzW2kwal0uejsNCiAgICAgfQ0KICAgfQ0KfQ0KDQpwdWJsaWMgdm9pZCBy
ZXNoYXBlKEdMQXV0b0RyYXdhYmxlIGRyYXdhYmxlLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCkNCnsNCiAgIEdMIGdsID0gZHJhd2FibGUuZ2V0R0woKTsNCiAgIGdsLmdsVmll
d3BvcnQgKHgsIHksICB3aWR0aCwgIGhlaWdodCk7DQogICBnbC5nbE1hdHJpeE1vZGUgKEdMLkdM
X1BST0pFQ1RJT04pOw0KICAgZ2wuZ2xMb2FkSWRlbnRpdHkgKCk7DQogICBnbC5nbE9ydGhvICgt
MzAuMCwgMzAuMCwgLTMwLjAsIDMwLjAsIDMwLjAsIC0zMC4wKTsNCiAgIGdsLmdsTWF0cml4TW9k
ZSAoR0wuR0xfTU9ERUxWSUVXKTsNCiAgIGdsLmdsTG9hZElkZW50aXR5ICgpOw0KfQ0KICAgIHBy
aXZhdGUgdm9pZCBkaXNwYXRjaEtleShjaGFyIGspIHsNCiAgICB9DQp9DQp9DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88</attachid>
            <date>2006-09-17 17:01:00 +0200</date>
            <delta_ts>2006-09-17 17:01:00 +0200</delta_ts>
            <desc>Java Web Start file</desc>
            <filename>orbit.jnlp</filename>
            <type>text/plain</type>
            <size>955</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPGpubHAgc3BlYz0iMS4wIiAK
ICAgICAgY29kZWJhc2U9Imh0dHA6Ly9zY2hpem9waHJlbmljcy5uZXQveW90dHp1bW0vY2hhdDNk
IgogICAgICBocmVmPSJjaGF0M2Quam5scCI+CiAgPGluZm9ybWF0aW9uPgogICAgPHRpdGxlPk9y
Yml0PC90aXRsZT4KICAgIDx2ZW5kb3I+U2NoaXpvcGhyZW5pY3MuTkVUPC92ZW5kb3I+CiAgICA8
aG9tZXBhZ2UgaHJlZj0iaHR0cDovL3NjaGl6b3BocmVuaWNzLm5ldC95b3R0enVtbS9jaGF0M2Qi
Lz4KICAgIDxkZXNjcmlwdGlvbj5PcmJpdDwvZGVzY3JpcHRpb24+CiAgICA8ZGVzY3JpcHRpb24g
a2luZD0ic2hvcnQiPk9yYml0PC9kZXNjcmlwdGlvbj4KICAgIDxvZmZsaW5lLWFsbG93ZWQvPgog
IDwvaW5mb3JtYXRpb24+CiAgPHNlY3VyaXR5PgogICAgICAgIDxhbGwtcGVybWlzc2lvbnMvPgog
IDwvc2VjdXJpdHk+CiAgICA8cmVzb3VyY2VzPgogICAgICA8ajJzZSBocmVmPSJodHRwOi8vamF2
YS5zdW4uY29tL3Byb2R1Y3RzL2F1dG9kbC9qMnNlIiB2ZXJzaW9uPSIxLjYrIi8+CiAgICAgICAg
PGphciBocmVmPSJsaXJjb20uamFyIiBtYWluPSJ0cnVlIi8+Cgk8amFyIGhyZWY9ImpvZ2wtZGVt
b3MtdXRpbC5qYXIiLz4KCTxqYXIgaHJlZj0iam9nbC1kZW1vcy5qYXIiLz4KCTxqYXIgaHJlZj0i
am9nbC1kZW1vcy1kYXRhLmphciIvPgogICAgICAgIDxleHRlbnNpb24gbmFtZT0iam9nbC1qc3It
MjMxIiBocmVmPSJodHRwczovL2pvZ2wuZGV2LmphdmEubmV0L3dlYnN0YXJ0L2pvZ2wtanNyLTIz
MS5qbmxwIiAvPgoJPHByb3BlcnR5IG5hbWU9InN1bi5qYXZhMmQub3BlbmdsIiB2YWx1ZT0idHJ1
ZSIvPgogICAgPC9yZXNvdXJjZXM+CiAgPGFwcGxpY2F0aW9uLWRlc2MgbWFpbi1jbGFzcz0ibGly
Y29tLk9yYml0MiI+CiAgPC9hcHBsaWNhdGlvbi1kZXNjPgo8L2pubHA+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>