<?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>899</bug_id>
          
          <creation_ts>2013-11-07 16:19:33 +0100</creation_ts>
          <short_desc>Jogl blocks other applications that try to retrieve window names</short_desc>
          <delta_ts>2013-11-20 19:37:12 +0100</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>windows</component>
          <version>2</version>
          <rep_platform>pc_x86_64</rep_platform>
          <op_sys>windows</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>907</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>---</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Randolf Schultz">randolf.schultz</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>---</cf_type>
          <cf_scm_refs>ce255aba6475c0a7b12f044a8ea700d5184f2b91</cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3293</commentid>
    <comment_count>0</comment_count>
    <who name="Randolf Schultz">randolf.schultz</who>
    <bug_when>2013-11-07 16:19:33 +0100</bug_when>
    <thetext>Greetings,

our application (using Jogl in a GLJPanel) blocks third party software that
use the EnumWindows()/GetWindowText() Win32 functions to discover/retrieve
window title names.
A potential candidate are the Jogl dummy windows, which are (by error) created
with no wndproc! Well, atleast my Eclipse says, that in the method
public RegisteredClassFactory(String classBaseName, long wndProc)
the wndProc parameter is always 0. However, I see no reason for this,
as the JNI call to getDummyWndProc0 and its C-implementation seem to be
correct. But the 0 would explain why the GetWindowText() hangs, as the
window class associated with the dummy window would then have no WindowProc
that processes events...

regards,
Randolf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3308</commentid>
    <comment_count>1</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-10 14:09:58 +0100</bug_when>
    <thetext>ce255aba6475c0a7b12f044a8ea700d5184f2b91
  Validate whether we propagate WNDPROC as retrieved from &apos;getDummyWndProc0()&apos; in
  RegisteredClassFactory
  Result: Yes we do.

Note: The RegisteredClassFactory mechanism is used for NEWT Windows as well.

GDI.initSingleton() dummyWindowClassFactory RegisteredClassFactory[moduleHandle 0x13f3e0000, _dummyWindow_clazz, wndProc 0x6c101de6, shared[refCount 0, class null]]
GDI.CreateDummyWindow() dummyWindowClassFactory RegisteredClassFactory[moduleHandle 0x13f3e0000, _dummyWindow_clazz, wndProc 0x6c101de6, shared[refCount 1, class RegisteredClass[handle 0x13f3e0000, _dummyWindow_clazz0]]]
GDI.CreateDummyWindow() dummyWindowClass RegisteredClass[handle 0x13f3e0000, _dummyWindow_clazz0]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3342</commentid>
    <comment_count>2</comment_count>
      <attachid>542</attachid>
    <who name="Randolf Schultz">randolf.schultz</who>
    <bug_when>2013-11-18 15:32:10 +0100</bug_when>
    <thetext>Created attachment 542
modified source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3343</commentid>
    <comment_count>3</comment_count>
      <attachid>543</attachid>
    <who name="Randolf Schultz">randolf.schultz</who>
    <bug_when>2013-11-18 15:32:41 +0100</bug_when>
    <thetext>Created attachment 543
modified source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3345</commentid>
    <comment_count>4</comment_count>
    <who name="Randolf Schultz">randolf.schultz</who>
    <bug_when>2013-11-18 15:40:48 +0100</bug_when>
    <thetext>Greetings,

further analysis revealed, that the wndProc is indeed transported
correctly through JNI; I was fooled by Eclipse.

I fixed the issue by changing the dummy window creation process
to occur each in its own thread that then falls into a message
processing loop for this window.
The dummy window destruction also needed to change to not use
DestroyWindow() but to send a WM_CLOSE message instead.
See the attached files.

With these changes in place, our application no longer blocks
other applications.

The thread handling is a bit clumsy; for instance, currently
the application will hang if the CreateWindowEx() fails for some
reason. Nevertheless, I would be grateful, if these changes would
find their way into the trunk.

regards,
Randolf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3354</commentid>
    <comment_count>5</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2013-11-20 19:37:12 +0100</bug_when>
    <thetext>IMHO this bug should have been reopened .. author chose to create a duplicate we use to work on now.

*** This bug has been marked as a duplicate of bug 907 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>542</attachid>
            <date>2013-11-18 15:32:10 +0100</date>
            <delta_ts>2013-11-18 15:32:10 +0100</delta_ts>
            <desc>modified source</desc>
            <filename>GDImisc.c</filename>
            <type>application/octet-stream</type>
            <size>11169</size>
            <attacher name="Randolf Schultz">randolf.schultz</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPGpuaS5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxhc3NlcnQuaD4K
CiNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgojaW5jbHVkZSA8d2luZG93cy5oPgojdW5kZWYg
V0lOMzJfTEVBTl9BTkRfTUVBTgoKI2luY2x1ZGUgPHdpbmdkaS5oPgojaW5jbHVkZSA8c3RkZGVm
Lmg+CgojaW5jbHVkZSA8Z2x1ZWdlbl9zdGRpbnQuaD4KCiNpbmNsdWRlIDxzdGRpby5oPgoKI2lu
Y2x1ZGUgIk5hdGl2ZXdpbmRvd0NvbW1vbi5oIgojaW5jbHVkZSAiam9nYW1wX25hdGl2ZXdpbmRv
d193aW5kb3dzX0dESVV0aWwuaCIKCi8vICNkZWZpbmUgVkVSQk9TRV9PTiAxCgojaWZkZWYgVkVS
Qk9TRV9PTgogICAgI2RlZmluZSBEQkdfUFJJTlQoYXJncy4uLikgZnByaW50ZihzdGRlcnIsIGFy
Z3MpOwojZWxzZQogICAgI2RlZmluZSBEQkdfUFJJTlQoYXJncy4uLikKI2VuZGlmCgpzdGF0aWMg
Y29uc3QgY2hhciAqIGNvbnN0IENsYXp6TmFtZVBvaW50ID0gImphdmF4L21lZGlhL25hdGl2ZXdp
bmRvdy91dGlsL1BvaW50IjsKc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBDbGF6ekFueUNzdHJO
YW1lID0gIjxpbml0PiI7CnN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgQ2xhenpOYW1lUG9pbnRD
c3RyU2lnbmF0dXJlID0gIihJSSlWIjsKCnN0YXRpYyBqY2xhc3MgcG9pbnRDbHogPSBOVUxMOwpz
dGF0aWMgam1ldGhvZElEIHBvaW50Q3N0ciA9IE5VTEw7CgpISU5TVEFOQ0UgR2V0QXBwbGljYXRp
b25IYW5kbGUoKSB7CiAgICByZXR1cm4gR2V0TW9kdWxlSGFuZGxlKE5VTEwpOwp9Cgp0eXBlZGVm
IHN0cnVjdCBUaHJlYWRQYXJhbV9zCnsKICBqbG9uZyBqSEluc3RhbmNlOwogIGNvbnN0IFRDSEFS
KiB3bmRDbGFzc05hbWU7CiAgY29uc3QgVENIQVIqIHduZE5hbWU7CiAgamludCB4OwogIGppbnQg
eTsKICBqaW50IHdpZHRoOwogIGppbnQgaGVpZ2h0OwogIHZvbGF0aWxlIEhXTkQgKmhXbmRQdHI7
Cn0gVGhyZWFkUGFyYW07CgoKRFdPUkQgV0lOQVBJIENyZWF0ZVdpbmRvd1dpdGhNZXNzYWdlTG9v
cChMUFZPSUQgcGFyYW0pCnsKIFRocmVhZFBhcmFtICp0UGFyYW0gPSAoVGhyZWFkUGFyYW0qKXBh
cmFtOwogSElOU1RBTkNFIGhJbnN0YW5jZSA9IChISU5TVEFOQ0UpIChpbnRwdHJfdCkgdFBhcmFt
LT5qSEluc3RhbmNlOwogRFdPUkQgZHdFeFN0eWxlOwogRFdPUkQgZHdTdHlsZTsKCiBkd0V4U3R5
bGUgPSBXU19FWF9BUFBXSU5ET1cgfCBXU19FWF9XSU5ET1dFREdFOwogZHdTdHlsZSA9IFdTX09W
RVJMQVBQRURXSU5ET1c7CgogSFdORCBod25kID0gQ3JlYXRlV2luZG93RXgoIGR3RXhTdHlsZSwK
CQkJICAgIHRQYXJhbS0+d25kQ2xhc3NOYW1lLAoJCQkgICAgdFBhcmFtLT53bmROYW1lLAoJCQkg
ICAgZHdTdHlsZSB8IFdTX0NMSVBTSUJMSU5HUyB8IFdTX0NMSVBDSElMRFJFTiwKCQkJICAgIHRQ
YXJhbS0+eCwgdFBhcmFtLT55LCB0UGFyYW0tPndpZHRoLCB0UGFyYW0tPmhlaWdodCwKCQkJICAg
IE5VTEwsIE5VTEwsIGhJbnN0YW5jZSwgTlVMTCApOwoKIC8qIGluZm9ybSBvdXIgY2FsbGVyIHRo
YXQgdGhlIHdpbmRvdyBpcyBjcmVhdGVkICovCiAqKHRQYXJhbS0+aFduZFB0cikgPSBod25kOwoK
IC8qIHJ1biB0aGUgbWVzc2FnZSBsb29wICovCiBNU0cgbXNnOwogQk9PTCBiUmV0OwoKIHdoaWxl
KCAoYlJldCA9IEdldE1lc3NhZ2UoICZtc2csIGh3bmQsIDAsIDAgKSkgIT0gMCkKICAgeyAKICAg
ICBpZiAoYlJldCA9PSAtMSkKICAgICAgIHsKCSByZXR1cm4gMDsKICAgICAgIH0KICAgICBlbHNl
CiAgICAgICB7CgkgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsgCgkgRGlzcGF0Y2hNZXNzYWdlKCZt
c2cpOyAKICAgICAgIH0KICAgfSAKCiByZXR1cm4gMDsKfQoKCi8qICAgSmF2YS0+QyBnbHVlIGNv
ZGU6CiAqICAgSmF2YSBwYWNrYWdlOiBqb2dhbXAubmF0aXZld2luZG93LndpbmRvd3MuR0RJVXRp
bAogKiAgICBKYXZhIG1ldGhvZDogYm9vbGVhbiBDcmVhdGVXaW5kb3dDbGFzcyhsb25nIGhJbnN0
YW5jZSwgamF2YS5sYW5nLlN0cmluZyBjbGF6ek5hbWUsIGxvbmcgd25kUHJvYykKICogICAgIEMg
ZnVuY3Rpb246IEJPT0wgQ3JlYXRlV2luZG93Q2xhc3MoSEFORExFIGhJbnN0YW5jZSwgTFBDU1RS
IGNsYXp6TmFtZSwgSEFORExFIHduZFByb2MpOwogKi8KSk5JRVhQT1JUIGpib29sZWFuIEpOSUNB
TEwKSmF2YV9qb2dhbXBfbmF0aXZld2luZG93X3dpbmRvd3NfR0RJVXRpbF9DcmVhdGVXaW5kb3dD
bGFzcwogICAgKEpOSUVudiAqZW52LCBqY2xhc3MgX3VudXNlZCwgamxvbmcgakhJbnN0YW5jZSwg
anN0cmluZyBqQ2xhenpOYW1lLCBqbG9uZyB3bmRQcm9jKSAKewogICAgSElOU1RBTkNFIGhJbnN0
YW5jZSA9IChISU5TVEFOQ0UpIChpbnRwdHJfdCkgakhJbnN0YW5jZTsKICAgIGNvbnN0IFRDSEFS
KiBjbGF6ek5hbWUgPSBOVUxMOwogICAgV05EQ0xBU1MgIHdjOwogICAgamJvb2xlYW4gcmVzOwoK
I2lmZGVmIFVOSUNPREUKICAgIGNsYXp6TmFtZSA9IE5ld3RDb21tb25fR2V0TnVsbFRlcm1pbmF0
ZWRTdHJpbmdDaGFycyhlbnYsIGpDbGF6ek5hbWUpOwojZWxzZQogICAgY2xhenpOYW1lID0gKCpl
bnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpDbGF6ek5hbWUsIE5VTEwpOwojZW5kaWYKCiAg
ICBaZXJvTWVtb3J5KCAmd2MsIHNpemVvZiggd2MgKSApOwogICAgaWYoIEdldENsYXNzSW5mbygg
aEluc3RhbmNlLCAgY2xhenpOYW1lLCAmd2MgKSApIHsKICAgICAgICAvLyByZWdpc3RlcmVkIGFs
cmVhZHkKICAgICAgICByZXMgPSBKTklfVFJVRTsKICAgIH0gZWxzZSB7ICAgICAgCiAgICAgICAg
Ly8gcmVnaXN0ZXIgbm93CiAgICAgICAgWmVyb01lbW9yeSggJndjLCBzaXplb2YoIHdjICkgKTsK
ICAgICAgICB3Yy5zdHlsZSA9IENTX0hSRURSQVcgfCBDU19WUkVEUkFXIDsKICAgICAgICB3Yy5s
cGZuV25kUHJvYyA9IChXTkRQUk9DKSAoaW50cHRyX3QpIHduZFByb2M7CiAgICAgICAgd2MuY2JD
bHNFeHRyYSA9IDA7CiAgICAgICAgd2MuY2JXbmRFeHRyYSA9IDA7CiAgICAgICAgd2MuaEluc3Rh
bmNlID0gaEluc3RhbmNlOwogICAgICAgIHdjLmhJY29uID0gTlVMTDsKICAgICAgICB3Yy5oQ3Vy
c29yID0gTG9hZEN1cnNvciggTlVMTCwgSURDX0FSUk9XKTsKICAgICAgICB3Yy5oYnJCYWNrZ3Jv
dW5kID0gTlVMTDsgLy8gbm8gYmFja2dyb3VuZCBwYWludCAtIEdldFN0b2NrT2JqZWN0KEJMQUNL
X0JSVVNIKTsKICAgICAgICB3Yy5scHN6TWVudU5hbWUgPSBOVUxMOwogICAgICAgIHdjLmxwc3pD
bGFzc05hbWUgPSBjbGF6ek5hbWU7CiAgICAgICAgcmVzID0gKCAwICE9IFJlZ2lzdGVyQ2xhc3Mo
ICZ3YyApICkgPyBKTklfVFJVRSA6IEpOSV9GQUxTRSA7CiAgICB9CgojaWZkZWYgVU5JQ09ERQog
ICAgZnJlZSgodm9pZCopIGNsYXp6TmFtZSk7CiNlbHNlCiAgICAoKmVudiktPlJlbGVhc2VTdHJp
bmdVVEZDaGFycyhlbnYsIGpDbGF6ek5hbWUsIGNsYXp6TmFtZSk7CiNlbmRpZgoKICAgIHJldHVy
biByZXM7Cn0KCi8qICAgSmF2YS0+QyBnbHVlIGNvZGU6CiAqICAgSmF2YSBwYWNrYWdlOiBqb2dh
bXAubmF0aXZld2luZG93LndpbmRvd3MuR0RJVXRpbAogKiAgICBKYXZhIG1ldGhvZDogYm9vbGVh
biBEZXN0cm95V2luZG93Q2xhc3MobG9uZyBoSW5zdGFuY2UsIGphdmEubGFuZy5TdHJpbmcgY2xh
c3NOYW1lKQogKiAgICAgQyBmdW5jdGlvbjogQk9PTCBEZXN0cm95V2luZG93Q2xhc3MoSEFORExF
IGhJbnN0YW5jZSwgTFBDU1RSIGNsYXNzTmFtZSk7CiAqLwpKTklFWFBPUlQgamJvb2xlYW4gSk5J
Q0FMTApKYXZhX2pvZ2FtcF9uYXRpdmV3aW5kb3dfd2luZG93c19HRElVdGlsX0Rlc3Ryb3lXaW5k
b3dDbGFzcwogICAgKEpOSUVudiAqZW52LCBqY2xhc3MgX3VudXNlZCwgamxvbmcgakhJbnN0YW5j
ZSwganN0cmluZyBqQ2xhenpOYW1lKSAKewogICAgSElOU1RBTkNFIGhJbnN0YW5jZSA9IChISU5T
VEFOQ0UpIChpbnRwdHJfdCkgakhJbnN0YW5jZTsKICAgIGNvbnN0IFRDSEFSKiBjbGF6ek5hbWUg
PSBOVUxMOwogICAgamJvb2xlYW4gcmVzOwoKI2lmZGVmIFVOSUNPREUKICAgIGNsYXp6TmFtZSA9
IE5ld3RDb21tb25fR2V0TnVsbFRlcm1pbmF0ZWRTdHJpbmdDaGFycyhlbnYsIGpDbGF6ek5hbWUp
OwojZWxzZQogICAgY2xhenpOYW1lID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpD
bGF6ek5hbWUsIE5VTEwpOwojZW5kaWYKCiAgICByZXMgPSAoIDAgIT0gVW5yZWdpc3RlckNsYXNz
KCBjbGF6ek5hbWUsIGhJbnN0YW5jZSApICkgPyBKTklfVFJVRSA6IEpOSV9GQUxTRSA7CgojaWZk
ZWYgVU5JQ09ERQogICAgZnJlZSgodm9pZCopIGNsYXp6TmFtZSk7CiNlbHNlCiAgICAoKmVudikt
PlJlbGVhc2VTdHJpbmdVVEZDaGFycyhlbnYsIGpDbGF6ek5hbWUsIGNsYXp6TmFtZSk7CiNlbmRp
ZgoKICAgIHJldHVybiByZXM7Cn0KCi8qICAgSmF2YS0+QyBnbHVlIGNvZGU6CiAqICAgSmF2YSBw
YWNrYWdlOiBqb2dhbXAubmF0aXZld2luZG93LndpbmRvd3MuR0RJVXRpbAogKiAgICBKYXZhIG1l
dGhvZDogbG9uZyBDcmVhdGVEdW1teVdpbmRvdzAobG9uZyBoSW5zdGFuY2UsIGphdmEubGFuZy5T
dHJpbmcgY2xhc3NOYW1lLCBqYXZhLmxhbmcuU3RyaW5nIHdpbmRvd05hbWUsIGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogKiAgICAgQyBmdW5jdGlvbjogSEFORExFIENyZWF0
ZUR1bW15V2luZG93MChIQU5ETEUgaEluc3RhbmNlLCBMUENTVFIgY2xhc3NOYW1lLCBMUENTVFIg
d2luZG93TmFtZSwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogKi8KSk5J
RVhQT1JUIGpsb25nIEpOSUNBTEwKSmF2YV9qb2dhbXBfbmF0aXZld2luZG93X3dpbmRvd3NfR0RJ
VXRpbF9DcmVhdGVEdW1teVdpbmRvd0FuZE1lc3NhZ2VMb29wCiAgICAoSk5JRW52ICplbnYsIGpj
bGFzcyBfdW51c2VkLCBqbG9uZyBqSEluc3RhbmNlLCBqc3RyaW5nIGpXbmRDbGFzc05hbWUsIGpz
dHJpbmcgalduZE5hbWUsIGppbnQgeCwgamludCB5LCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCkg
CnsKICB2b2xhdGlsZSBIV05EIGhXbmQgPSAwOwogIFRocmVhZFBhcmFtIHRQYXJhbSA9IHswfTsK
CiAgdFBhcmFtLmpISW5zdGFuY2UgPSBqSEluc3RhbmNlOwogIHRQYXJhbS54ID0geDsKICB0UGFy
YW0ueSA9IHk7CiAgdFBhcmFtLndpZHRoID0gd2lkdGg7CiAgdFBhcmFtLmhlaWdodCA9IGhlaWdo
dDsKICB0UGFyYW0uaFduZFB0ciA9ICZoV25kOwoKI2lmZGVmIFVOSUNPREUKICAgIHRQYXJhbS53
bmRDbGFzc05hbWUgPSBOZXd0Q29tbW9uX0dldE51bGxUZXJtaW5hdGVkU3RyaW5nQ2hhcnMoZW52
LCBqV25kQ2xhc3NOYW1lKTsKICAgIHRQYXJhbS53bmROYW1lID0gTmV3dENvbW1vbl9HZXROdWxs
VGVybWluYXRlZFN0cmluZ0NoYXJzKGVudiwgalduZE5hbWUpOwojZWxzZQogICAgdFBhcmFtLndu
ZENsYXNzTmFtZSA9ICgqZW52KS0+R2V0U3RyaW5nVVRGQ2hhcnMoZW52LCBqV25kQ2xhc3NOYW1l
LCBOVUxMKTsKICAgIHRQYXJhbS53bmROYW1lID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhl
bnYsIGpXbmROYW1lLCBOVUxMKTsKI2VuZGlmCgogIENyZWF0ZVRocmVhZChOVUxMLCAwLCBDcmVh
dGVXaW5kb3dXaXRoTWVzc2FnZUxvb3AsICZ0UGFyYW0sIDAsIE5VTEwpOwoKICB3aGlsZSgxKQog
ICAgewogICAgICBpZihoV25kICE9IDApCglicmVhazsKICAgIH0KCiNpZmRlZiBVTklDT0RFCiAg
ICBmcmVlKCh2b2lkKikgdFBhcmFtLnduZENsYXNzTmFtZSk7CiAgICBmcmVlKCh2b2lkKikgdFBh
cmFtLnduZE5hbWUpOwojZWxzZQogICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52
LCBqV25kQ2xhc3NOYW1lLCB0UGFyYW0ud25kQ2xhc3NOYW1lKTsKICAgICgqZW52KS0+UmVsZWFz
ZVN0cmluZ1VURkNoYXJzKGVudiwgalduZE5hbWUsIHRQYXJhbS53bmROYW1lKTsKI2VuZGlmCgog
IHJldHVybiAoamxvbmcpIChpbnRwdHJfdCkgaFduZDsKfQoKLyogICBKYXZhLT5DIGdsdWUgY29k
ZToKICogICBKYXZhIHBhY2thZ2U6IGpvZ2FtcC5uYXRpdmV3aW5kb3cud2luZG93cy5HRElVdGls
CiAqICAgIEphdmEgbWV0aG9kOiBsb25nIENyZWF0ZUR1bW15V2luZG93MChsb25nIGhJbnN0YW5j
ZSwgamF2YS5sYW5nLlN0cmluZyBjbGFzc05hbWUsIGphdmEubGFuZy5TdHJpbmcgd2luZG93TmFt
ZSwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAqICAgICBDIGZ1bmN0aW9u
OiBIQU5ETEUgQ3JlYXRlRHVtbXlXaW5kb3cwKEhBTkRMRSBoSW5zdGFuY2UsIExQQ1NUUiBjbGFz
c05hbWUsIExQQ1NUUiB3aW5kb3dOYW1lLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAqLwpKTklFWFBPUlQgamxvbmcgSk5JQ0FMTApKYXZhX2pvZ2FtcF9uYXRpdmV3aW5k
b3dfd2luZG93c19HRElVdGlsX0NyZWF0ZUR1bW15V2luZG93MAogICAgKEpOSUVudiAqZW52LCBq
Y2xhc3MgX3VudXNlZCwgamxvbmcgakhJbnN0YW5jZSwganN0cmluZyBqV25kQ2xhc3NOYW1lLCBq
c3RyaW5nIGpXbmROYW1lLCBqaW50IHgsIGppbnQgeSwgamludCB3aWR0aCwgamludCBoZWlnaHQp
IAp7CiAgICBISU5TVEFOQ0UgaEluc3RhbmNlID0gKEhJTlNUQU5DRSkgKGludHB0cl90KSBqSElu
c3RhbmNlOwogICAgY29uc3QgVENIQVIqIHduZENsYXNzTmFtZSA9IE5VTEw7CiAgICBjb25zdCBU
Q0hBUiogd25kTmFtZSA9IE5VTEw7CiAgICBEV09SRCAgICAgZHdFeFN0eWxlOwogICAgRFdPUkQg
ICAgIGR3U3R5bGU7CiAgICBIV05EICAgICAgaFduZDsKCiNpZmRlZiBVTklDT0RFCiAgICB3bmRD
bGFzc05hbWUgPSBOZXd0Q29tbW9uX0dldE51bGxUZXJtaW5hdGVkU3RyaW5nQ2hhcnMoZW52LCBq
V25kQ2xhc3NOYW1lKTsKICAgIHduZE5hbWUgPSBOZXd0Q29tbW9uX0dldE51bGxUZXJtaW5hdGVk
U3RyaW5nQ2hhcnMoZW52LCBqV25kTmFtZSk7CiNlbHNlCiAgICB3bmRDbGFzc05hbWUgPSAoKmVu
diktPkdldFN0cmluZ1VURkNoYXJzKGVudiwgalduZENsYXNzTmFtZSwgTlVMTCk7CiAgICB3bmRO
YW1lID0gKCplbnYpLT5HZXRTdHJpbmdVVEZDaGFycyhlbnYsIGpXbmROYW1lLCBOVUxMKTsKI2Vu
ZGlmCgogICAgZHdFeFN0eWxlID0gV1NfRVhfQVBQV0lORE9XIHwgV1NfRVhfV0lORE9XRURHRTsK
ICAgIGR3U3R5bGUgPSBXU19PVkVSTEFQUEVEV0lORE9XOwoKICAgIGhXbmQgPSBDcmVhdGVXaW5k
b3dFeCggZHdFeFN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB3bmRDbGFzc05hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHduZE5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGR3U3R5bGUgfCBXU19DTElQU0lCTElOR1MgfCBXU19DTElQQ0hJTERSRU4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsIE5VTEwsIGhJbnN0YW5jZSwgTlVMTCApOwoKI2lmZGVmIFVOSUNP
REUKICAgIGZyZWUoKHZvaWQqKSB3bmRDbGFzc05hbWUpOwogICAgZnJlZSgodm9pZCopIHduZE5h
bWUpOwojZWxzZQogICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZW52LCBqV25kQ2xh
c3NOYW1lLCB3bmRDbGFzc05hbWUpOwogICAgKCplbnYpLT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMo
ZW52LCBqV25kTmFtZSwgd25kTmFtZSk7CiNlbmRpZgoKICAgIHJldHVybiAoamxvbmcpIChpbnRw
dHJfdCkgaFduZDsKfQoKCi8qCiAqIENsYXNzOiAgICAgam9nYW1wX25hdGl2ZXdpbmRvd193aW5k
b3dzX0dESVV0aWwKICogTWV0aG9kOiAgICBpbml0SURzMAogKiBTaWduYXR1cmU6ICgpWgogKi8K
Sk5JRVhQT1JUIGpib29sZWFuIEpOSUNBTEwgSmF2YV9qb2dhbXBfbmF0aXZld2luZG93X3dpbmRv
d3NfR0RJVXRpbF9pbml0SURzMAogIChKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6KQp7CiAgICBp
ZihOYXRpdmV3aW5kb3dDb21tb25faW5pdChlbnYpKSB7CiAgICAgICAgamNsYXNzIGMgPSAoKmVu
diktPkZpbmRDbGFzcyhlbnYsIENsYXp6TmFtZVBvaW50KTsKICAgICAgICBpZihOVUxMPT1jKSB7
CiAgICAgICAgICAgIE5hdGl2ZXdpbmRvd0NvbW1vbl9GYXRhbEVycm9yKGVudiwgIkZhdGFsRXJy
b3Igam9nYW1wX25hdGl2ZXdpbmRvd193aW5kb3dzX0dESVV0aWw6IGNhbid0IGZpbmQgJXMiLCBD
bGF6ek5hbWVQb2ludCk7CiAgICAgICAgfQogICAgICAgIHBvaW50Q2x6ID0gKGpjbGFzcykoKmVu
diktPk5ld0dsb2JhbFJlZihlbnYsIGMpOwogICAgICAgICgqZW52KS0+RGVsZXRlTG9jYWxSZWYo
ZW52LCBjKTsKICAgICAgICBpZihOVUxMPT1wb2ludENseikgewogICAgICAgICAgICBOYXRpdmV3
aW5kb3dDb21tb25fRmF0YWxFcnJvcihlbnYsICJGYXRhbEVycm9yIGpvZ2FtcF9uYXRpdmV3aW5k
b3dfd2luZG93c19HRElVdGlsOiBjYW4ndCB1c2UgJXMiLCBDbGF6ek5hbWVQb2ludCk7CiAgICAg
ICAgfQogICAgICAgIHBvaW50Q3N0ciA9ICgqZW52KS0+R2V0TWV0aG9kSUQoZW52LCBwb2ludENs
eiwgQ2xhenpBbnlDc3RyTmFtZSwgQ2xhenpOYW1lUG9pbnRDc3RyU2lnbmF0dXJlKTsKICAgICAg
ICBpZihOVUxMPT1wb2ludENzdHIpIHsKICAgICAgICAgICAgTmF0aXZld2luZG93Q29tbW9uX0Zh
dGFsRXJyb3IoZW52LCAiRmF0YWxFcnJvciBqb2dhbXBfbmF0aXZld2luZG93X3dpbmRvd3NfR0RJ
VXRpbDogY2FuJ3QgZmV0Y2ggJXMuJXMgJXMiLAogICAgICAgICAgICAgICAgQ2xhenpOYW1lUG9p
bnQsIENsYXp6QW55Q3N0ck5hbWUsIENsYXp6TmFtZVBvaW50Q3N0clNpZ25hdHVyZSk7CiAgICAg
ICAgfQogICAgfQogICAgcmV0dXJuIEpOSV9UUlVFOwp9CgpMUkVTVUxUIENBTExCQUNLIER1bW15
V25kUHJvYyggSFdORCBoV25kLCBVSU5UIHVNc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCnsKICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLHVNc2csd1BhcmFtLGxQYXJhbSk7Cn0K
Ci8qCiAqIENsYXNzOiAgICAgam9nYW1wX25hdGl2ZXdpbmRvd193aW5kb3dzX0dESVV0aWwKICog
TWV0aG9kOiAgICBnZXREdW1teVduZFByb2MwCiAqIFNpZ25hdHVyZTogKClKCiAqLwpKTklFWFBP
UlQgamxvbmcgSk5JQ0FMTCBKYXZhX2pvZ2FtcF9uYXRpdmV3aW5kb3dfd2luZG93c19HRElVdGls
X2dldER1bW15V25kUHJvYzAKICAoSk5JRW52ICplbnYsIGpjbGFzcyBjbGF6eikKewogIHJldHVy
biAoamxvbmcpIChpbnRwdHJfdCkgRHVtbXlXbmRQcm9jOwp9CgovKgogKiBDbGFzczogICAgIGpv
Z2FtcF9uYXRpdmV3aW5kb3dfd2luZG93c19HRElVdGlsCiAqIE1ldGhvZDogICAgR2V0UmVsYXRp
dmVMb2NhdGlvbjAKICogU2lnbmF0dXJlOiAoSkpJSSlMamF2YXgvbWVkaWEvbmF0aXZld2luZG93
L3V0aWwvUG9pbnQ7CiAqLwpKTklFWFBPUlQgam9iamVjdCBKTklDQUxMIEphdmFfam9nYW1wX25h
dGl2ZXdpbmRvd193aW5kb3dzX0dESVV0aWxfR2V0UmVsYXRpdmVMb2NhdGlvbjAKICAoSk5JRW52
ICplbnYsIGpjbGFzcyB1bnVzZWQsIGpsb25nIGpzcmNfd2luLCBqbG9uZyBqZGVzdF93aW4sIGpp
bnQgc3JjX3gsIGppbnQgc3JjX3kpCnsKICAgIEhXTkQgc3JjX3dpbiA9IChIV05EKSAoaW50cHRy
X3QpIGpzcmNfd2luOwogICAgSFdORCBkZXN0X3dpbiA9IChIV05EKSAoaW50cHRyX3QpIGpkZXN0
X3dpbjsKICAgIFBPSU5UIGRlc3QgPSB7IHNyY194LCBzcmNfeSB9IDsKICAgIGludCByZXM7Cgog
ICAgcmVzID0gTWFwV2luZG93UG9pbnRzKHNyY193aW4sIGRlc3Rfd2luLCAmZGVzdCwgMSk7Cgog
ICAgREJHX1BSSU5UKCIqKiogV2luZG93c1dpbmRvdzogZ2V0UmVsYXRpdmVMb2NhdGlvbjA6ICVw
ICVkLyVkIC0+ICVwICVkLyVkIC0gb2s6ICVkXG4iLAogICAgICAgICh2b2lkKilzcmNfd2luLCBz
cmNfeCwgc3JjX3ksICh2b2lkKilkZXN0X3dpbiwgKGludClkZXN0LngsIChpbnQpZGVzdC55LCBy
ZXMpOwoKICAgIHJldHVybiAoKmVudiktPk5ld09iamVjdChlbnYsIHBvaW50Q2x6LCBwb2ludENz
dHIsIChqaW50KWRlc3QueCwgKGppbnQpZGVzdC55KTsKfQoKLyoKICogQ2xhc3M6ICAgICBqb2dh
bXBfbmF0aXZld2luZG93X3dpbmRvd3NfR0RJVXRpbAogKiBNZXRob2Q6ICAgIElzQ2hpbGQwCiAq
LwpKTklFWFBPUlQgamJvb2xlYW4gSk5JQ0FMTCBKYXZhX2pvZ2FtcF9uYXRpdmV3aW5kb3dfd2lu
ZG93c19HRElVdGlsX0lzQ2hpbGQwCiAgKEpOSUVudiAqZW52LCBqY2xhc3MgdW51c2VkLCBqbG9u
ZyBqd2luKQp7CiAgICBIV05EIGh3bmQgPSAoSFdORCkgKGludHB0cl90KSBqd2luOwogICAgTE9O
RyBzdHlsZSA9IEdldFdpbmRvd0xvbmcoaHduZCwgR1dMX1NUWUxFKTsKICAgIEJPT0wgYklzQ2hp
bGQgPSAwICE9IChzdHlsZSAmIFdTX0NISUxEKSA7CiAgICByZXR1cm4gYklzQ2hpbGQgPyBKTklf
VFJVRSA6IEpOSV9GQUxTRTsKfQoKLyoKICogQ2xhc3M6ICAgICBqb2dhbXBfbmF0aXZld2luZG93
X3dpbmRvd3NfR0RJVXRpbAogKiBNZXRob2Q6ICAgIElzVW5kZWNvcmF0ZWQwCiAqLwpKTklFWFBP
UlQgamJvb2xlYW4gSk5JQ0FMTCBKYXZhX2pvZ2FtcF9uYXRpdmV3aW5kb3dfd2luZG93c19HRElV
dGlsX0lzVW5kZWNvcmF0ZWQwCiAgKEpOSUVudiAqZW52LCBqY2xhc3MgdW51c2VkLCBqbG9uZyBq
d2luKQp7CiAgICBIV05EIGh3bmQgPSAoSFdORCkgKGludHB0cl90KSBqd2luOwogICAgTE9ORyBz
dHlsZSA9IEdldFdpbmRvd0xvbmcoaHduZCwgR1dMX1NUWUxFKTsKICAgIEJPT0wgYklzVW5kZWNv
cmF0ZWQgPSAwICE9IChzdHlsZSAmIChXU19DSElMRHxXU19QT1BVUCkpIDsKICAgIHJldHVybiBi
SXNVbmRlY29yYXRlZCA/IEpOSV9UUlVFIDogSk5JX0ZBTFNFOwp9CgovKgogKiBDbGFzczogICAg
IGpvZ2FtcF9uYXRpdmV3aW5kb3dfd2luZG93c19HRElVdGlsCiAqIE1ldGhvZDogICAgU2VuZENs
b3NlTWVzc2FnZQogKi8KSk5JRVhQT1JUIGpib29sZWFuIEpOSUNBTEwgSmF2YV9qb2dhbXBfbmF0
aXZld2luZG93X3dpbmRvd3NfR0RJVXRpbF9TZW5kQ2xvc2VNZXNzYWdlCihKTklFbnYgKmVudiwg
amNsYXNzIHVudXNlZCwgamxvbmcgandpbikKewogICAgSFdORCBod25kID0gKEhXTkQpIChpbnRw
dHJfdCkgandpbjsKCiAgICBCT09MIHJlcyA9IFBvc3RNZXNzYWdlKGh3bmQsIFdNX0NMT1NFLCAw
LCAwKTsKCiAgICByZXR1cm4gcmVzICE9IDAgPyBKTklfVFJVRSA6IEpOSV9GQUxTRTsKfQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>543</attachid>
            <date>2013-11-18 15:32:41 +0100</date>
            <delta_ts>2013-11-18 15:32:41 +0100</delta_ts>
            <desc>modified source</desc>
            <filename>GDIUtil.java</filename>
            <type>application/octet-stream</type>
            <size>5786</size>
            <attacher name="Randolf Schultz">randolf.schultz</attacher>
            
              <data encoding="base64">LyoqCiAqIENvcHlyaWdodCAyMDExIEpvZ0FtcCBDb21tdW5pdHkuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQogKiBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKICoKICogICAgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKICogICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgogKgogKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAog
KiAgICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwogKiAgICAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
Sm9nQW1wIENvbW11bml0eSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKICog
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgSm9nQW1wIENvbW11
bml0eSBPUgogKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORwogKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKICog
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqCiAqIFRoZSB2aWV3
cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRh
dGlvbiBhcmUgdGhvc2Ugb2YgdGhlCiAqIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJw
cmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2Vk
CiAqIG9yIGltcGxpZWQsIG9mIEpvZ0FtcCBDb21tdW5pdHkuCiAqLwpwYWNrYWdlIGpvZ2FtcC5u
YXRpdmV3aW5kb3cud2luZG93czsKCmltcG9ydCBqYXZheC5tZWRpYS5uYXRpdmV3aW5kb3cudXRp
bC5Qb2ludDsKaW1wb3J0IGphdmF4Lm1lZGlhLm5hdGl2ZXdpbmRvdy5OYXRpdmVXaW5kb3dFeGNl
cHRpb247CmltcG9ydCBqYXZheC5tZWRpYS5uYXRpdmV3aW5kb3cuTmF0aXZlV2luZG93RmFjdG9y
eTsKCmltcG9ydCBqb2dhbXAubmF0aXZld2luZG93Lk5XSk5JTGliTG9hZGVyOwppbXBvcnQgam9n
YW1wLm5hdGl2ZXdpbmRvdy5EZWJ1ZzsKaW1wb3J0IGpvZ2FtcC5uYXRpdmV3aW5kb3cuVG9vbGtp
dFByb3BlcnRpZXM7CgpwdWJsaWMgY2xhc3MgR0RJVXRpbCBpbXBsZW1lbnRzIFRvb2xraXRQcm9w
ZXJ0aWVzIHsKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBEZWJ1Zy5k
ZWJ1ZygiR0RJVXRpbCIpOwoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkdW1teVdp
bmRvd0NsYXNzTmFtZUJhc2UgPSAiX2R1bW15V2luZG93X2NsYXp6IiA7CiAgICBwcml2YXRlIHN0
YXRpYyBSZWdpc3RlcmVkQ2xhc3NGYWN0b3J5IGR1bW15V2luZG93Q2xhc3NGYWN0b3J5OwogICAg
cHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIENh
bGxlZCBieSB7QGxpbmsgTmF0aXZlV2luZG93RmFjdG9yeSNpbml0U2luZ2xldG9uKCl9CiAgICAg
KiBAc2VlIFRvb2xraXRQcm9wZXJ0aWVzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgc3luY2hy
b25pemVkIHZvaWQgaW5pdFNpbmdsZXRvbigpIHsKICAgICAgICBpZighaXNJbml0KSB7CiAgICAg
ICAgICAgIHN5bmNocm9uaXplZChHRElVdGlsLmNsYXNzKSB7CiAgICAgICAgICAgICAgICBpZigh
aXNJbml0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYoREVCVUcpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHREkuaW5pdFNpbmdsZXRvbigpIik7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKCFOV0pOSUxpYkxvYWRlci5s
b2FkTmF0aXZlV2luZG93KCJ3aW4zMiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBOYXRpdmVXaW5kb3dFeGNlcHRpb24oIk5hdGl2ZVdpbmRvdyBXaW5kb3dzIG5hdGl2ZSBs
aWJyYXJ5IGxvYWQgZXJyb3IuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgIGlmKCAhaW5pdElEczAoKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IE5hdGl2ZVdpbmRvd0V4Y2VwdGlvbigiR0RJOiBDb3VsZCBub3QgaW5pdGlhbGl6ZWQgbmF0
aXZlIHN0dWIiKTsKICAgICAgICAgICAgICAgICAgICB9CgkJICAgIGxvbmcgYSA9IGdldER1bW15
V25kUHJvYzAoKTsKICAgICAgICAgICAgICAgICAgICBkdW1teVdpbmRvd0NsYXNzRmFjdG9yeSA9
IG5ldyBSZWdpc3RlcmVkQ2xhc3NGYWN0b3J5KGR1bW15V2luZG93Q2xhc3NOYW1lQmFzZSwgYSk7
CiAgICAgICAgICAgICAgICAgICAgaXNJbml0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENhbGxlZCBieSB7QGxp
bmsgTmF0aXZlV2luZG93RmFjdG9yeSNzaHV0ZG93bigpfQogICAgICogQHNlZSBUb29sa2l0UHJv
cGVydGllcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2h1dGRvd24oKSB7CiAgICB9
CgogICAgLyoqCiAgICAgKiBDYWxsZWQgYnkge0BsaW5rIE5hdGl2ZVdpbmRvd0ZhY3RvcnkjaW5p
dFNpbmdsZXRvbigpfQogICAgICogQHNlZSBUb29sa2l0UHJvcGVydGllcwogICAgICovCiAgICBw
dWJsaWMgc3RhdGljIGJvb2xlYW4gcmVxdWlyZXNUb29sa2l0TG9jaygpIHsgcmV0dXJuIGZhbHNl
OyB9CgogICAgLyoqCiAgICAgKiBDYWxsZWQgYnkge0BsaW5rIE5hdGl2ZVdpbmRvd0ZhY3Rvcnkj
aW5pdFNpbmdsZXRvbigpfQogICAgICogQHNlZSBUb29sa2l0UHJvcGVydGllcwogICAgICovCiAg
ICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaGFzVGhyZWFkaW5nSXNzdWVzKCkgeyByZXR1
cm4gZmFsc2U7IH0KCiAgICBwcml2YXRlIHN0YXRpYyBSZWdpc3RlcmVkQ2xhc3MgZHVtbXlXaW5k
b3dDbGFzcyA9IG51bGw7CiAgICBwcml2YXRlIHN0YXRpYyBPYmplY3QgZHVtbXlXaW5kb3dTeW5j
ID0gbmV3IE9iamVjdCgpOwoKICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBDcmVhdGVEdW1teVdpbmRv
dyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgewogICAgICAgIHN5bmNocm9u
aXplZChkdW1teVdpbmRvd1N5bmMpIHsKICAgICAgICAgICAgZHVtbXlXaW5kb3dDbGFzcyA9IGR1
bW15V2luZG93Q2xhc3NGYWN0b3J5LmdldFNoYXJlZENsYXNzKCk7CiAgICAgICAgICAgIHJldHVy
biBDcmVhdGVEdW1teVdpbmRvd0FuZE1lc3NhZ2VMb29wKGR1bW15V2luZG93Q2xhc3MuZ2V0SElu
c3RhbmNlKCksIGR1bW15V2luZG93Q2xhc3MuZ2V0TmFtZSgpLCBkdW1teVdpbmRvd0NsYXNzLmdl
dE5hbWUoKSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBEZXN0cm95RHVtbXlXaW5kb3cobG9uZyBod25kKSB7CiAgICAgICAg
Ym9vbGVhbiByZXM7CiAgICAgICAgc3luY2hyb25pemVkKGR1bW15V2luZG93U3luYykgewogICAg
ICAgICAgICBpZiggbnVsbCA9PSBkdW1teVdpbmRvd0NsYXNzICkgewogICAgICAgICAgICAgICAg
dGhyb3cgbmV3IEludGVybmFsRXJyb3IoIkdESSBFcnJvciAoIitkdW1teVdpbmRvd0NsYXNzRmFj
dG9yeS5nZXRTaGFyZWRSZWZDb3VudCgpKyIpOiBTaGFyZWRDbGFzcyBpcyBudWxsIik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgcmVzID0gU2VuZENsb3NlTWVzc2FnZShod25kKTsKICAgICAg
ICAgICAgZHVtbXlXaW5kb3dDbGFzc0ZhY3RvcnkucmVsZWFzZVNoYXJlZENsYXNzKCk7CiAgICAg
ICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBQb2ludCBH
ZXRSZWxhdGl2ZUxvY2F0aW9uKGxvbmcgc3JjX3dpbiwgbG9uZyBkZXN0X3dpbiwgaW50IHNyY194
LCBpbnQgc3JjX3kpIHsKICAgICAgICByZXR1cm4gKFBvaW50KSBHZXRSZWxhdGl2ZUxvY2F0aW9u
MChzcmNfd2luLCBkZXN0X3dpbiwgc3JjX3gsIHNyY195KTsKICAgIH0KCiAgICBwdWJsaWMgc3Rh
dGljIGJvb2xlYW4gSXNVbmRlY29yYXRlZChsb25nIHdpbikgewogICAgICAgIHJldHVybiBJc1Vu
ZGVjb3JhdGVkMCh3aW4pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBJc0NoaWxk
KGxvbmcgd2luKSB7CiAgICAgICAgcmV0dXJuIElzQ2hpbGQwKHdpbik7CiAgICB9CgogICAgcHVi
bGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBDcmVhdGVXaW5kb3dDbGFzcyhsb25nIGhJbnN0YW5j
ZSwgU3RyaW5nIGNsYXp6TmFtZSwgbG9uZyB3bmRQcm9jKTsKICAgIHB1YmxpYyBzdGF0aWMgbmF0
aXZlIGJvb2xlYW4gRGVzdHJveVdpbmRvd0NsYXNzKGxvbmcgaEluc3RhbmNlLCBTdHJpbmcgY2xh
c3NOYW1lKTsKCiAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBpbml0SURzMCgpOwog
ICAgc3RhdGljIG5hdGl2ZSBsb25nIGdldER1bW15V25kUHJvYzAoKTsKICAgIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSBPYmplY3QgR2V0UmVsYXRpdmVMb2NhdGlvbjAobG9uZyBzcmNfd2luLCBsb25n
IGRlc3Rfd2luLCBpbnQgc3JjX3gsIGludCBzcmNfeSk7CiAgICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgYm9vbGVhbiBJc0NoaWxkMChsb25nIHdpbik7CiAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
Ym9vbGVhbiBJc1VuZGVjb3JhdGVkMChsb25nIHdpbik7CgogICAgc3RhdGljIG5hdGl2ZSBsb25n
IENyZWF0ZUR1bW15V2luZG93MChsb25nIGhJbnN0YW5jZSwgU3RyaW5nIGNsYXNzTmFtZSwgU3Ry
aW5nIHdpbmRvd05hbWUsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKCiAg
ICBzdGF0aWMgbmF0aXZlIGxvbmcgQ3JlYXRlRHVtbXlXaW5kb3dBbmRNZXNzYWdlTG9vcChsb25n
IGhJbnN0YW5jZSwgU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIHdpbmRvd05hbWUsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBT
ZW5kQ2xvc2VNZXNzYWdlKGxvbmcgd2luKTsKfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>