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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>37798</bug_id>
          
          <creation_ts>2010-04-19 07:26:27 -0700</creation_ts>
          <short_desc>svg/custom/use-instanceRoot-as-event-target.xhtml crashes randomly</short_desc>
          <delta_ts>2010-05-07 11:25:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://build.webkit.org/results/Windows%20Debug%20(Tests)/r57809%20(12324)/results.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>LayoutTestFailure</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>33305</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>214015</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-04-19 07:26:27 -0700</bug_when>
    <thetext>svg/custom/use-instanceRoot-as-event-target.xhtml crashed once on the Windows Debug bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220587</commentid>
    <comment_count>1</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-04 07:54:39 -0700</bug_when>
    <thetext>Reproducable on Mac, using guardmalloc:

(gdb) set env DYLD_INSERT_LIBRARIES /usr/lib/libgmalloc.dylib
(gdb) run
Starting program: /Users/nikolaszimmermann/Coding/WebKit/WebKitBuild/Debug/DumpRenderTree LayoutTests/svg/custom/use-instanceRoot-as-event-target.xhtml
GuardMalloc: Allocations will be placed on 16 byte boundaries.
GuardMalloc:  - Some buffer overruns may not be noticed.
GuardMalloc:  - Applications using vector instructions (e.g., SSE or Altivec) should work.
GuardMalloc: GuardMalloc version 18
GuardMalloc: Allocations will be placed on 16 byte boundaries.
GuardMalloc:  - Some buffer overruns may not be noticed.
GuardMalloc:  - Applications using vector instructions (e.g., SSE or Altivec) should work.
GuardMalloc: GuardMalloc version 18
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
GuardMalloc: Allocations will be placed on 16 byte boundaries.
GuardMalloc:  - Some buffer overruns may not be noticed.
GuardMalloc:  - Applications using vector instructions (e.g., SSE or Altivec) should work.
GuardMalloc: GuardMalloc version 18
Reading symbols for shared libraries ++ done
Reading symbols for shared libraries ..... done
Reading symbols for shared libraries + done
ASSERTION FAILED: m_wrapper || !m_jsFunction
(/Users/nikolaszimmermann/Coding/WebKit/WebCore/bindings/js/JSEventListener.h:83 JSC::JSObject* WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext*) const)

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x00000000 in ?? ()
(gdb) bt
#0  0x00000000 in ?? ()
#1  0x0452f6f7 in WebCore::JSEventListener::jsFunction (this=0xdea91fe0, scriptExecutionContext=0xd995f144) at JSEventListener.h:83
#2  0x045d0afc in WebCore::JSEventListener::handleEvent (this=0xdea91fe0, scriptExecutionContext=0xd995f144, event=0xe2ddaf80) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/bindings/js/JSEventListener.cpp:68
#3  0x0434f842 in WebCore::EventTarget::fireEventListeners (this=0xdd62af00, event=0xe2ddaf80, d=0xdd664fa0, entry=@0xdea97fe0) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/EventTarget.cpp:315
#4  0x0434ff16 in WebCore::EventTarget::fireEventListeners (this=0xdd62af00, event=0xe2ddaf80) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/EventTarget.cpp:276
#5  0x048359d1 in WebCore::Node::handleLocalEvents (this=0xdd62af00, event=0xe2ddaf80) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/Node.cpp:2588
#6  0x0483611d in WebCore::Node::dispatchGenericEvent (this=0xdd62af00, prpEvent=@0xbfffd2ac) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/Node.cpp:2731
#7  0x0483661f in WebCore::Node::dispatchEvent (this=0xdd62af00, prpEvent=@0xbfffd38c) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/Node.cpp:2651
#8  0x048347f5 in WebCore::Node::dispatchMouseEvent (this=0xdd62af00, eventType=@0xd400cdcc, button=-1, detail=0, pageX=50, pageY=50, screenX=-9950, screenY=-9950, ctrlKey=false, altKey=false, shiftKey=false, metaKey=false, isSimulated=false, relatedTargetArg=0xddd13fc0, underlyingEvent=@0xbfffd454) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/Node.cpp:2943
#9  0x04834d01 in WebCore::Node::dispatchMouseEvent (this=0xdd62af00, event=@0xbfffd754, eventType=@0xd400cdcc, detail=0, relatedTarget=0xddd13fc0) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/Node.cpp:2852
#10 0x0433e7be in WebCore::EventHandler::updateMouseEventTargetNode (this=0xd2f65e70, targetNode=0xdd62af00, mouseEvent=@0xbfffd754, fireMouseOverOut=true) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/page/EventHandler.cpp:1792
#11 0x0433e868 in WebCore::EventHandler::dispatchMouseEvent (this=0xd2f65e70, eventType=@0xd400cdbc, targetNode=0xdd62af00, clickCount=0, mouseEvent=@0xbfffd754, setUnder=true) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/page/EventHandler.cpp:1806
#12 0x04342fc3 in WebCore::EventHandler::handleMouseMoveEvent (this=0xd2f65e70, mouseEvent=@0xbfffd754, hoveredNode=0xbfffd6dc) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/page/EventHandler.cpp:1480
#13 0x04343061 in WebCore::EventHandler::mouseMoved (this=0xd2f65e70, event=@0xbfffd754) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/page/EventHandler.cpp:1367
#14 0x043491e5 in WebCore::EventHandler::mouseMoved (this=0xd2f65e70, event=0xe2dbefc0) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/page/mac/EventHandlerMac.mm:610
#15 0x00c1d822 in -[WebHTMLView(WebPrivate) _updateMouseoverWithEvent:] (self=0xd3b1dfa0, _cmd=0xd029b2, event=0xe2dbefc0) at /Users/nikolaszimmermann/Coding/WebKit/WebKit/mac/WebView/WebHTMLView.mm:1617

Will investigate soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221364</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-05 17:00:44 -0700</bug_when>
    <thetext>Also on Leopard:

http://build.webkit.org/results/Leopard%20Intel%20Debug%20(Tests)/r58843%20(13962)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221560</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-06 01:30:55 -0700</bug_when>
    <thetext>*** Bug 36645 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221577</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-06 01:51:29 -0700</bug_when>
    <thetext>Oh my, I know what&apos;s going on, a pretty evil race. Here are some notes from my last gdb session with breakpoints on SVGElementInstance &amp; JSSVGElementInstance constructor/destructors.

#1) Initial creation of SVGElementInstance root object

Breakpoint 7, WebCore::SVGElementInstance::SVGElementInstance (this=0x1bd08a50, useElement=0x1bd5ee40, originalElement=@0xbfffdfcc) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/svg/SVGElementInstance.cpp:49

#2) Initial association between the shadowTreeElement &amp; the SVGElementInstance

Breakpoint 5, WebCore::SVGElementInstance::setShadowTreeElement (this=0x1bd08a50, element=0x1bd5f030) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/svg/SVGElementInstance.cpp:81

#3) Initial creation of the JS wrapper used from the test

Breakpoint 12, WebCore::JSSVGElementInstance::JSSVGElementInstance (this=0xf50380, structure=@0xbfffda84, globalObject=0xf4a940, impl=@0xbfffda88) at /Users/nikolaszimmermann/Coding/WebKit/WebKitBuild/Debug/DerivedSources/WebCore/JSSVGElementInstance.cpp:214

....

At some point, removeAttribute() is called on the correspondingElement of the SVGElementInstance (aka. the original element that the &lt;use&gt; element is referencing), which causes a reclone of the &lt;use shadow tree (lazily! as soon as updateFromElement is called on RenderSVGShadowTreeRootContainer). This is expected, as we&apos;re not trying to synchronize the trees, as it&apos;s too hard to get right (would require lots of changes in core methods like addAttribute/setAttribute/appendChild/etc..)

#4) Recreation of a SVGElementInstance (note that the OLD SVGElementInstance has NOT been destructed yet, as the JSSVGElementInstance is still holding a RefPtr on it)

Breakpoint 7, WebCore::SVGElementInstance::SVGElementInstance (this=0x1bd07f90, useElement=0x1bd5ee40, originalElement=@0xbfffb0bc) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/svg/SVGElementInstance.cpp:49

#5) Reassociation of the SVGElementInstance with its shadowTreeElement

Breakpoint 5, WebCore::SVGElementInstance::setShadowTreeElement (this=0x1bd07f90, element=0x1bd85370) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/svg/SVGElementInstance.cpp:81

#6) Destruction of the OLD JSSVGElementInstance object (with injected hacks to force GC at exactly this point)

Breakpoint 14, WebCore::JSSVGElementInstance::~JSSVGElementInstance (this=0xf50380) at /Users/nikolaszimmermann/Coding/WebKit/WebKitBuild/Debug/DerivedSources/WebCore/JSSVGElementInstance.cpp:218

#7) Assertion fires...

ASSERTION FAILED: m_wrapper || !m_jsFunction
(/Users/nikolaszimmermann/Coding/WebKit/WebCore/bindings/js/JSEventListener.h:83 JSC::JSObject* WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext*) const)

(gdb) p m_wrapper
$4 = {
  &lt;WTFNoncopyable::Noncopyable&gt; = {
    &lt;WTF::FastAllocBase&gt; = {&lt;No data fields&gt;}, &lt;No data fields&gt;}, 
  members of JSC::WeakGCPtr&lt;JSC::JSObject&gt;: 
  m_ptr = 0xf50380

(gdb) p wrapper()
$3 = (class JSC::JSObject *) 0x0

Backtrace is equal to the one I&apos;ve posted before. Here is the analysis:
Stepping up to Node::handleLocalEvents, reveals:

#4  0x047213bd in WebCore::Node::handleLocalEvents (this=0x1bd85370, event=0x1bd79f30) at /Users/nikolaszimmermann/Coding/WebKit/WebCore/dom/Node.cpp:2588

handleLocalEvents has been called on the _NEW_ shadowTreeElement (lookup the this pointer above).
The JSEventListener is associated with the JSSVGEementInstance object that has just been destructed.

A side-note before: SVGElementInstance just pretends to be an EventTarget, but in fact it shares an event listener list with the original correspondingElement (as per SVG spec) -&gt; addEventListener is in fact forwarded to the correspondingElement. But the JSEventListeners (created through JSSVGElementInstance):
    imp-&gt;addEventListener(ustringToAtomicString(args.at(0).toString(exec)), JSEventListener::create(asObject(listener), castedThis, false, currentWorld(exec)), args.at(2).toBoolean(exec));
are created using the _OLD_ JSSVGElementInstance object (which has just been destructed by GC above).

The offending code is:

useElement.instanceRoot.addEventListener(eventHandler, ...);
rectElement.removeAttribute(&quot;foo&quot;) &lt;-- causes reclone, new SVGElementInstances are born
hackToForceGC(); &lt;-- will destruct JSSVGElementInstance
moveMouseOverRectInstance(); &lt;-- should fire eventHandler, but hits assertion, because there is no JSSVGElementInstance object anymore

So the problem basically exists because we have JSEventListeners floating around which have associated wrappers that are destructed. Glad the assertion actually exists, otherwhise I would have never found it...
 
Not yet sure how to fix this, but I wanted to share this analysis, so it&apos;s clear what happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221696</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-06 08:31:54 -0700</bug_when>
    <thetext>Removing PlatformOnly keyword - this happens on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222292</commentid>
    <comment_count>6</comment_count>
      <attachid>55368</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-07 05:31:50 -0700</bug_when>
    <thetext>Created attachment 55368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222401</commentid>
    <comment_count>7</comment_count>
      <attachid>55368</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 08:49:52 -0700</bug_when>
    <thetext>Comment on attachment 55368
Patch

WebCore/ChangeLog:14
 +          it, but residing in the correspondingElement() event listener list (and thus existant!).
The last sentence isn&apos;t entirely english.  registrated and existant aren&apos;t words.

WebCore/svg/SVGElementInstance.cpp:92
 +      if (!element || !element-&gt;document())
I can never remember if this is the right -&gt;document() pointer or ownerDocument().  Should this be element-&gt;inDocument()?

WebCore/svg/SVGElementInstance.cpp:150
 +      ASSERT_NOT_REACHED();
Seems we should add comments in teh code to explain *why* these are ASSERT_NOT_REACHED()

LayoutTests/ChangeLog:8
 +          Make use-instanceRoot-as-event-target.xhtml behave more correctly. Due a copy&amp;paste problem test #7 was not executed. Fixed.
copy &amp; paste

Seems we need TestObject.idl changes to correspond with your codegenerator changes.

Otherwise this looks fantastic!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222479</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-07 10:52:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 55368 [details])
&gt; WebCore/ChangeLog:14
&gt;  +          it, but residing in the correspondingElement() event listener list
&gt; (and thus existant!).
&gt; The last sentence isn&apos;t entirely english.  registrated and existant aren&apos;t
&gt; words.
Fixed.
 
&gt; WebCore/svg/SVGElementInstance.cpp:92
&gt;  +      if (!element || !element-&gt;document())
&gt; I can never remember if this is the right -&gt;document() pointer or
&gt; ownerDocument().  Should this be element-&gt;inDocument()?
I used || !element-&gt;inDocument(). Didn&apos;t know about this shortcut even.

&gt; 
&gt; WebCore/svg/SVGElementInstance.cpp:150
&gt;  +      ASSERT_NOT_REACHED();
&gt; Seems we should add comments in teh code to explain *why* these are
&gt; ASSERT_NOT_REACHED()
Done.

&gt; 
&gt; LayoutTests/ChangeLog:8
&gt;  +          Make use-instanceRoot-as-event-target.xhtml behave more correctly.
&gt; Due a copy&amp;paste problem test #7 was not executed. Fixed.
&gt; copy &amp; paste
Done.

&gt; 
&gt; Seems we need TestObject.idl changes to correspond with your codegenerator
&gt; changes.
No this only affects SVGElementInstance.idl generation, nothing else.

Going to upload a new patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222492</commentid>
    <comment_count>9</comment_count>
      <attachid>55397</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-07 11:06:21 -0700</bug_when>
    <thetext>Created attachment 55397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222498</commentid>
    <comment_count>10</comment_count>
      <attachid>55397</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-07 11:18:45 -0700</bug_when>
    <thetext>Comment on attachment 55397
Patch

Great work and realy tricky bug. r=me.

Reviewed this patch to get bots green again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222502</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-07 11:25:30 -0700</bug_when>
    <thetext>Committed r58960: &lt;http://trac.webkit.org/changeset/58960&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55368</attachid>
            <date>2010-05-07 05:31:50 -0700</date>
            <delta_ts>2010-05-07 11:02:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37798-20100507143140.patch</filename>
            <type>text/plain</type>
            <size>16020</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODk0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDUtMDcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgc3ZnL2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWFzLWV2ZW50LXRhcmdldC54aHRtbCBj
cmFzaGVzIHJhbmRvbWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNzc5OAorCisgICAgICAgIFdoZW4gY3JlYXRpbmcgSlNFdmVudExpc3RlbmVycyB0
aHJvdWdoIGF0dHJpYnV0ZXMgKG9uY2xpY2ssIGV0Yy4uKSBvciBhZGQvcmVtb3ZlRXZlbnRMaXN0
ZW5lcgorICAgICAgICBjYWxscyBvbiBhIFNWR0VsZW1lbnRJbnN0YW5jZSwgZG8gTk9UIHBhc3Mg
dGhlIGVsZW1lbnQgaW5zdGFuY2UgaXRzZWxmIGFzIEpTIHdyYXBwZXIgb2JqZWN0CisgICAgICAg
IGJ1dCB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS4gU1ZHRWxlbWVudEluc3RhbmNlIHJlZGly
ZWN0cyBhbGwgZXZlbnQgbGlzdGVuZXIgcmVnaXN0cmF0aW9ucworICAgICAgICB0byB0aGUgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKSwgYXMgdGhleSBzaGFyZSBhbiBldmVudCBsaXN0ZW5lciBsaXN0
LCBwZXIgU1ZHIHNwZWMuIFRoZSBvbGQKKyAgICAgICAgY29kZSB3YXMgdmVyeSBkYW5nZXJvdXMs
IGxlYWRpbmcgdG8gcmFuZG9tIGFzc2VydGlvbnMsIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHRl
YXJlZCBkb3duCisgICAgICAgIHRoZSBKU1NWR0VsZW1lbnRJbnN0YW5jZSBhbmQgZXZlbnQgbGlz
dGVuZXJzIGZpcmVkLCB3aG9zZSBsaXN0ZW5lcnMgd2VyZSByZWdpc3RyYXRlZCB3aXRoCisgICAg
ICAgIGl0LCBidXQgcmVzaWRpbmcgaW4gdGhlIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkgZXZlbnQg
bGlzdGVuZXIgbGlzdCAoYW5kIHRodXMgZXhpc3RhbnQhKS4KKworICAgICAgICBSZW1vdmVzIHRo
ZSBuZWVkIGZvciBDdXN0b21Ub0pTIGNvZGUgZm9yIEpTU1ZHRWxlbWVudEluc3RhbmNlLCB3aGlj
aCB3YXMgd3JvbmcgYW55d2F5cy4gV2UgaG9wZWQKKyAgICAgICAgdG8ga2VlcCB0aGUgZXZlbnQg
bGlzdGVlcnMgYWxpdmUgYnkganVzdCBjcmVhdGluZyBhIGpzIHdyYXBwZXIgb2YgdGhlIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCksIHRoYXQKKyAgICAgICAgY291bGQgb25seSB3b3JrIGFzIGxvbmcg
YXMgZ2FyYmFnZSBjb2xsZWN0aW9uIGRpZG4ndCB0ZWFyIGl0IGRvd24sIGp1c3QgbHVjay4gQWxz
byByZW1vdmUgdGhlCisgICAgICAgIEN1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSBtYXJrZXIs
IGFzIGl0IGlzIG9ubHkgdXNlZCBmb3IgSlNMYXp5RXZlbnRMaXN0ZW5lcnMgYW5kIG9ubHkgd29y
a3MKKyAgICAgICAgZm9yIEpTTm9kZSBkZXJpdmVkIG9iamVjdHMsIGl0IHdhcyBhIG5vLW9wIGZv
ciBTVkdFbGVtZW50SW5zdGFuY2UsIHRodXMgcmVtb3ZlZCBpdC4KKworICAgICAgICBTaG91bGQg
Zml4IGFsbCByYW5kb20gY3Jhc2hlcy9hc3NlcnRpb25zIHNlZW4gd2l0aCBzdmcvY3VzdG9tL3Vz
ZS1pbnN0YW5jZVJvb3QtYXMtZXZlbnQtdGFyZ2V0LnhodG1sCisgICAgICAgIFNlZSBidWcgcmVw
b3J0IGZvciBhIGRldGFpbGVkIGNyYXNoIGFuYWx5c2lzLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwOiBSZW1vdmUgY3VzdG9tIHRvSlMoKS9w
dXNoRXZlbnRIYW5kbGVyU2NvcGUoKSBoYW5kbGluZywgbm90IG5lY2Vzc2FyeSBhbnltb3JlLgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdFbGVtZW50SW5zdGFuY2U6Om1hcmtDaGlsZHJlbik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IEZvciBKU1NWR0Vs
ZW1lbnRJbnN0YW5jZSBwYXNzIHRoZSBjb3JyZXNwb25kaW5nRWxlbWVudCgpIGFzIEpTIHdyYXBw
ZXIgb2JqZWN0LCBub3QgaXRzZWxmLgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50SW5zdGFuY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxs
SW5zdGFuY2VzT2ZFbGVtZW50KTogQmUgc3VyZSB0byB0cmlnZ2VyIGEgc3R5bGUgdXBkYXRlIGhl
cmUsIHNvIGRpcnR5IHNoYWRvdyB0cmVlcyBmb3IgPHVzZT4gZ2V0IHJlYnVpbGQuIE90aGVyd2hp
c2UgRE9NIG1heSBiZSBvdXQtb2Ytc3luYy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJ
bnN0YW5jZTo6ZXZlbnRUYXJnZXREYXRhKTogQWRkIEFTU0VSVF9OT1RfUkVBQ0hFRCgpLCBhbGwg
ZXZlbnQgbGlzdGVuZXIgY2FsbHMgYXJlIGZvcndhcmRlZCB0byB0aGUgY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0YW5jZTo6ZW5zdXJlRXZl
bnRUYXJnZXREYXRhKTogRGl0dG8uCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5p
ZGw6IFJlbW92ZSBDdXN0b21Ub0pTLCBDdXN0b21QdXNoRXZlbnRIYW5kbGVyU2NvcGUgbWFya2Vy
cy4KKwogMjAxMC0wNS0wNiAgRnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDU4NzUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5jZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIwICsyNSwxNCBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiSlNTVkdFbGVtZW50
SW5zdGFuY2UuaCIKIAotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiSlNFdmVu
dExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSlNTVkdFbGVtZW50LmgiCisjaWYgRU5BQkxFKFNWRykK
ICNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTU1ZHRWxlbWVudEluc3RhbmNlOjptYXJr
Q2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit2b2lkIEpTU1ZHRWxlbWVudEluc3RhbmNl
OjptYXJrQ2hpbGRyZW4oSlNDOjpNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBCYXNlOjpt
YXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKIApAQCAtNDYsMjEgKzQwLDYgQEAgdm9pZCBKU1NWR0Vs
ZW1lbnRJbnN0YW5jZTo6bWFya0NoaWxkcmVuKAogICAgIG1hcmtET01Ob2RlV3JhcHBlcihtYXJr
U3RhY2ssIGltcGwoKS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgaW1wbCgp
LT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKTsKIH0KIAotdm9pZCBKU1NWR0VsZW1lbnRJbnN0YW5j
ZTo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW4mKSBjb25zdAot
ewotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU1ZHRWxlbWVudEluc3RhbmNlKiBvYmplY3QpCi17Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRET01PYmplY3RXcmFwcGVyPEpTU1ZHRWxlbWVudEluc3Rh
bmNlPihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBv
dXIgY29ycmVzcG9uZGluZyBlbGVtZW50IGhhcyBhIEphdmFTY3JpcHQgd3JhcHBlciB0byBrZWVw
IGl0cyBldmVudCBoYW5kbGVycyBhbGl2ZS4KLSAgICBpZiAob2JqZWN0KQotICAgICAgICB0b0pT
KGV4ZWMsIG9iamVjdC0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZH
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiA1ODc1MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMzIgQEAgc3ViIEdlbmVyYXRlSW50
ZXJmYWNlCiAgICAgfQogfQogCitzdWIgR2VuZXJhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyQ2Fs
bAoreworICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkaW1wbFNldHRlckZ1bmN0
aW9uTmFtZSA9IHNoaWZ0OworICAgIG15ICR3aW5kb3dFdmVudExpc3RlbmVyID0gc2hpZnQ7CisK
KyAgICBteSAkd3JhcHBlck9iamVjdCA9ICR3aW5kb3dFdmVudExpc3RlbmVyID8gImdsb2JhbE9i
amVjdCIgOiAidGhpc09iamVjdCI7CisgICAgbXkgQEdlbmVyYXRlRXZlbnRMaXN0ZW5lckltcGwg
PSAoKTsKKworICAgIGlmICgkY2xhc3NOYW1lIGVxICJKU1NWR0VsZW1lbnRJbnN0YW5jZSIpIHsK
KyAgICAgICAgIyBTVkdFbGVtZW50SW5zdGFuY2VzIGhhdmUgdG8gY3JlYXRlIEpTRXZlbnRMaXN0
ZW5lcnMgd2l0aCB0aGUgd3JhcHBlciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQK
KyAgICAgICAgJHdyYXBwZXJPYmplY3QgPSAiYXNPYmplY3QoY29ycmVzcG9uZGluZ0VsZW1lbnRX
cmFwcGVyKSI7CisKKyAgICAgICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCwgPDxF
TkQpOworICAgIEpTVmFsdWUgY29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVyID0gdG9KUyhleGVj
LCBpbXAtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpOworICAgIGlmIChjb3JyZXNwb25kaW5nRWxl
bWVudFdyYXBwZXIuaXNPYmplY3QoKSkKK0VORAorCisgICAgICAgICMgQWRkIGxlYWRpbmcgd2hp
dGVzcGFjZSB0byBmb3JtYXQgdGhlIGltcC0+c2V0Li4uIGxpbmUgY29ycmVjdGx5CisgICAgICAg
IHB1c2goQEdlbmVyYXRlRXZlbnRMaXN0ZW5lckltcGwsICIgICAgIik7CisgICAgfQorCisgICAg
cHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCwgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVy
RnVuY3Rpb25OYW1lKGNyZWF0ZUpTQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwg
JHdyYXBwZXJPYmplY3QpKTtcbiIpOworICAgIHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVy
SW1wbDsKK30KKwogc3ViIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGwKIHsKICAgICBteSAkY2xh
c3NOYW1lID0gc2hpZnQ7CkBAIC0xMzUsMTEgKzE2MSwyMyBAQCBzdWIgR2VuZXJhdGVFdmVudExp
c3RlbmVyQ2FsbAogICAgICRpbXBsSW5jbHVkZXN7IkpTRXZlbnRMaXN0ZW5lci5oIn0gPSAxOwog
CiAgICAgbXkgQEdlbmVyYXRlRXZlbnRMaXN0ZW5lckltcGwgPSAoKTsKKyAgICBteSAkd3JhcHBl
ck9iamVjdCA9ICJjYXN0ZWRUaGlzIjsKKyAgICBpZiAoJGNsYXNzTmFtZSBlcSAiSlNTVkdFbGVt
ZW50SW5zdGFuY2UiKSB7CisgICAgICAgICMgU1ZHRWxlbWVudEluc3RhbmNlcyBoYXZlIHRvIGNy
ZWF0ZSBKU0V2ZW50TGlzdGVuZXJzIHdpdGggdGhlIHdyYXBwZXIgZXF1YWwgdG8gdGhlIGNvcnJl
c3BvbmRpbmdFbGVtZW50CisgICAgICAgICR3cmFwcGVyT2JqZWN0ID0gImFzT2JqZWN0KGNvcnJl
c3BvbmRpbmdFbGVtZW50V3JhcHBlcikiOworCisgICAgICAgIHB1c2goQEdlbmVyYXRlRXZlbnRM
aXN0ZW5lckltcGwsIDw8RU5EKTsKKyAgICBKU1ZhbHVlIGNvcnJlc3BvbmRpbmdFbGVtZW50V3Jh
cHBlciA9IHRvSlMoZXhlYywgaW1wLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKTsKKyAgICBpZiAo
IWNvcnJlc3BvbmRpbmdFbGVtZW50V3JhcHBlci5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKK0VORAorICAgIH0KKwogICAgIHB1c2goQEdlbmVyYXRlRXZlbnRMaXN0
ZW5lckltcGwsIDw8RU5EKTsKICAgICBKU1ZhbHVlIGxpc3RlbmVyID0gYXJncy5hdCgxKTsKICAg
ICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIGltcC0+JHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNT
dHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVj
KSkkcGFzc1JlZlB0ckhhbmRsaW5nLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAg
aW1wLT4ke2Z1bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmpl
Y3QobGlzdGVuZXIpLCAkd3JhcHBlck9iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkk
cGFzc1JlZlB0ckhhbmRsaW5nLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiBFTkQKICAgICByZXR1cm4gQEdlbmVyYXRlRXZlbnRMaXN0ZW5l
ckltcGw7CkBAIC0xNTgxLDExICsxNjE5LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNXb3JrZXJD
b250ZXh0RXJyb3JIYW5kbGVyLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5h
bWUoY3JlYXRlSlNXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyKGV4ZWMsIHZhbHVlLCB0aGlzT2Jq
ZWN0KSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHdpbmRvd0V2ZW50TGlzdGVuZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoY3JlYXRlSlNBdHRyaWJ1dGVFdmVudExp
c3RlbmVyKGV4ZWMsIHZhbHVlLCBnbG9iYWxPYmplY3QpKTtcbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9u
TmFtZShjcmVhdGVKU0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIHRoaXNPYmpl
Y3QpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUF0dHJpYnV0
ZUV2ZW50TGlzdGVuZXJDYWxsKCRjbGFzc05hbWUsICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lLCAk
d2luZG93RXZlbnRMaXN0ZW5lcikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlw
ZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRj
b25zdHJ1Y3RvclR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDU4NzUwKQorKysgV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudEluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCB2
b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6YXBwZW5kQ2hpbGQoUGFzCiAKIHZvaWQgU1ZHRWxlbWVu
dEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KFNWR0VsZW1lbnQqIGVs
ZW1lbnQpCiB7Ci0gICAgaWYgKCFlbGVtZW50KQorICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVu
dC0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGVsZW1lbnQtPmlzU3R5
bGVkKCkgJiYgc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbnN0YW5j
ZVVwZGF0ZXNCbG9ja2VkKCkpCkBAIC0xMDUsNiArMTA1LDkgQEAgdm9pZCBTVkdFbGVtZW50SW5z
dGFuY2U6OmludmFsaWRhdGVBbGxJbgogICAgICAgICBBU1NFUlQoKCppdCktPmNvcnJlc3BvbmRp
bmdFbGVtZW50KCkgPT0gZWxlbWVudCk7CiAgICAgICAgICgqaXQpLT5jb3JyZXNwb25kaW5nVXNl
RWxlbWVudCgpLT5pbnZhbGlkYXRlU2hhZG93VHJlZSgpOwogICAgIH0KKworICAgIC8vIEJlIHN1
cmUgdG8gcmVidWlsZCB1c2UgdHJlZXMsIGlmIG5lZWRlZAorICAgIGVsZW1lbnQtPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogfQogCiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBTVkdFbGVtZW50SW5zdGFuY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdApAQCAtMTQ0LDE1ICsxNDcsMTQgQEAgYm9vbCBTVkdFbGVtZW50SW5zdGFuY2U6
OmRpc3BhdGNoRXZlbnQoUAogCiBFdmVudFRhcmdldERhdGEqIFNWR0VsZW1lbnRJbnN0YW5jZTo6
ZXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50LT5ldmVudFRhcmdldERh
dGEoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogRXZl
bnRUYXJnZXREYXRhKiBTVkdFbGVtZW50SW5zdGFuY2U6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
CiB7Ci0gICAgLy8gQXZvaWQgY3Jhc2hpbmcgLSByZXR1cm4gYSBkZWZhdWx0IGR1bW15IHZhbHVl
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChFdmVudFRhcmdldERhdGEsIGR1bW15RXZlbnRUYXJn
ZXREYXRhLCAoKSk7Ci0gICAgZHVtbXlFdmVudFRhcmdldERhdGEuZXZlbnRMaXN0ZW5lck1hcC5j
bGVhcigpOwotICAgIHJldHVybiAmZHVtbXlFdmVudFRhcmdldERhdGE7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NW
R0VsZW1lbnRJbnN0YW5jZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dEluc3RhbmNlLmlkbAkocmV2aXNpb24gNTg3NTApCisrKyBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50
SW5zdGFuY2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsNyBAQCBtb2R1bGUgc3Zn
IHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPVNWRywKLSAgICAgICAg
Q3VzdG9tTGlzdGVuZXJzLAogICAgICAgICBDdXN0b21NYXJrRnVuY3Rpb24sCi0gICAgICAgIEN1
c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSwKLSAgICAgICAgQ3VzdG9tVG9KUywKICAgICAgICAg
R2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIKICAgICBdIFNWR0VsZW1lbnRJbnN0YW5jZQogI2lmIGRl
ZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpICYmIExBTkdVQUdFX09CSkVDVElWRV9DCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA1ODk0MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA1LTA3ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxu
emltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHN2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQu
eGh0bWwgY3Jhc2hlcyByYW5kb21seQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzc3OTgKKworICAgICAgICBNYWtlIHVzZS1pbnN0YW5jZVJvb3QtYXMt
ZXZlbnQtdGFyZ2V0LnhodG1sIGJlaGF2ZSBtb3JlIGNvcnJlY3RseS4gRHVlIGEgY29weSZwYXN0
ZSBwcm9ibGVtIHRlc3QgIzcgd2FzIG5vdCBleGVjdXRlZC4gRml4ZWQuCisgICAgICAgIE1ha2Ug
ZGVzdHJ1Y3Rpb24gbW9yZSByZWxpYWJsZSwgYnkgdXNpbmcgdGhlIHN0YW5kYXJkIGpzLXRlc3Qt
cG9zdC5qcyBpbmplY3Rpb24gdGhyb3VnaCA8c2NyaXB0PiBiZWZvcmUgY2FsbGluZyBub3RpZnlE
b25lKCksIGFuZCAiVEVTVCBDT01QTEVURSIgbWFnaWNhbGx5IGFwcGVhcnMuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL2Vycm9yLzAxNy1leHBlY3RlZC50eHQ6IFVwZGF0ZSBy
ZXN1bHQsIG5vdyB0aGF0IGludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQoKSwgY29ycmVj
dGx5IHRyaWdnZXJzIDx1c2U+IHNoYWRvdyB0cmVlIHJlYnVpbGRzLgorICAgICAgICAqIHN2Zy9j
dXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0OiBVcGRh
dGUgcmVzdWx0LCB3YXMgbWlzc2luZyBhICJURVNUIENPTVBMRVRFIiBtYXJrZXIsIGFuZCBUZXN0
ICM3IHdhcyBub3QgZXhlY3V0ZWQgYmVmb3JlLgorICAgICAgICAqIHN2Zy9jdXN0b20vdXNlLWlu
c3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQueGh0bWw6IEZpeCB0eXBvLCB0ZXN0ICM3IGlzIG5v
dyBleGVjdXRlZCwgaXQgYWxzbyBoYWQgYSBidWcgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLiAK
KwogMjAxMC0wNS0wNiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IFNraXAgY29tcG9zaXRpbmcvbGF5ZXItY3JlYXRpb24vb3ZlcmZsb3ctc2Nyb2xsLW92ZXJsYXAu
aHRtbCBmcm9tIHI1ODkzNiwgc2luY2UgaGFyZHdhcmUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9zdmcvaGl4aWUvZXJyb3IvMDE3LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL2Vycm9yLzAxNy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDU4NzQ3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9oaXhpZS9l
cnJvci8wMTctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsOCBAQCBsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQg
KDAsMCkgc2l6ZSAweDAKICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHt1c2V9IGF0ICgwLDAp
IHNpemUgMHgwCiAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMCwwKSBzaXpl
IDB4MAorICAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMCwwKSBzaXplIDB4
MAorICAgICAgICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgwLDApIHNpemUgMHgw
CiAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICAg
IFJlbmRlclNWR0NvbnRhaW5lciB7dXNlfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgICAgIFJl
bmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDAsMCkgc2l6ZSAweDAKSW5kZXg6IExheW91dFRlc3Rz
L3N2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1h
cy1ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1ODc0NykKKysrIExheW91dFRl
c3RzL3N2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyMCBAQCBQQVNTIGN1cnJlbnRFdmVudC50
YXJnZXQgPT0gY3VycmVudEV2ZW50CiBQQVNTIGN1cnJlbnRFdmVudC50YXJnZXQuY29ycmVzcG9u
ZGluZ0VsZW1lbnQgPT0gY3VycmVudEV2ZW50LmN1cnJlbnRUYXJnZXQuY29ycmVzcG9uZGluZ0Vs
ZW1lbnQgaXMgdHJ1ZQogUEFTUyBjdXJyZW50RXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VF
bGVtZW50ID09IGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVt
ZW50IGlzIHRydWUKIAorVGVzdCAjNzogVmVyaWZ5IHRoYXQgdGhlIHJlY3JlYXRpbmcgdGhlIG9y
aWdpbmFsIGNsaWNrIGV2ZW50IGxpc3RlbmVyIGR5bmFtaWNhbGx5IHdvcmtlZCBhbmQgdGhlIGV2
ZW50IGlzIHN0aWxsIGRpc3BhdGNoZWQgdG8gdGhlIGluc3RhbmNlIHRyZWUKKworUEFTUyBjdXJy
ZW50RXZlbnQudG9TdHJpbmcoKSBpcyAiW29iamVjdCBNb3VzZUV2ZW50XSIKK1BBU1MgY3VycmVu
dEV2ZW50LnR5cGUudG9TdHJpbmcoKSBpcyAiY2xpY2siCitQQVNTIGN1cnJlbnRFdmVudC50YXJn
ZXQudG9TdHJpbmcoKSBpcyAiW29iamVjdCBTVkdFbGVtZW50SW5zdGFuY2VdIgorUEFTUyBjdXJy
ZW50RXZlbnQuY3VycmVudFRhcmdldC50b1N0cmluZygpIGlzICJbb2JqZWN0IFNWR0VsZW1lbnRJ
bnN0YW5jZV0iCitQQVNTIGN1cnJlbnRFdmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0VsZW1lbnQg
PT0gcmVjdEVsZW1lbnQgaXMgdHJ1ZQorUEFTUyBjdXJyZW50RXZlbnQudGFyZ2V0LmNvcnJlc3Bv
bmRpbmdVc2VFbGVtZW50ID09IHVzZUVsZW1lbnQgaXMgdHJ1ZQorUEFTUyBjdXJyZW50RXZlbnQu
Y3VycmVudFRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudCA9PSByZWN0RWxlbWVudCBpcyB0cnVl
CitQQVNTIGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50
ID09IHVzZUVsZW1lbnQgaXMgdHJ1ZQorUEFTUyBjdXJyZW50RXZlbnQudGFyZ2V0ID09IGN1cnJl
bnRFdmVudC5jdXJyZW50VGFyZ2V0IGlzIHRydWUKK1BBU1MgY3VycmVudEV2ZW50LnRhcmdldC5j
b3JyZXNwb25kaW5nRWxlbWVudCA9PSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldC5jb3JyZXNw
b25kaW5nRWxlbWVudCBpcyB0cnVlCitQQVNTIGN1cnJlbnRFdmVudC50YXJnZXQuY29ycmVzcG9u
ZGluZ1VzZUVsZW1lbnQgPT0gY3VycmVudEV2ZW50LmN1cnJlbnRUYXJnZXQuY29ycmVzcG9uZGlu
Z1VzZUVsZW1lbnQgaXMgdHJ1ZQorCiBUZXN0ICM4OiBWZXJpZnkgdGhhdCB0aGUgc2ltdWxhdGVk
IGNsaWNrIGV2ZW50IGdvdCBkaXNwYXRjaGVkIHRvIHRoZSByaWdodCB0YXJnZXQKIAogUEFTUyBj
dXJyZW50RXZlbnQudG9TdHJpbmcoKSBpcyAiW29iamVjdCBNb3VzZUV2ZW50XSIKQEAgLTk5LDQg
KzExMyw1IEBAIFBBU1MgY3VycmVudEV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWwKIFBBU1Mg
Y3VycmVudEV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCA9PSBjdXJyZW50RXZl
bnQuY3VycmVudFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCBpcyB0cnVlCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKK1RFU1QgQ09NUExFVEUKIApJbmRleDogTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWFzLWV2ZW50LXRhcmdldC54aHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3VzZS1pbnN0YW5jZVJvb3QtYXMt
ZXZlbnQtdGFyZ2V0LnhodG1sCShyZXZpc2lvbiA1ODc0NykKKysrIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQueGh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OSwxNiArMjU5LDE2IEBAIGZ1bmN0aW9uIGV2ZW50VGVzdFNpeCgpCiBmdW5jdGlv
biBldmVudFRlc3RTZXZlbigpCiB7CiAgICAgZGVidWcoIiIpOwotICAgIGRlYnVnKCJUZXN0ICM3
OiBWZXJpZnkgdGhhdCB0aGUgcmVjcmVhdGluZyB0aGUgb3JpZ2luYWwgY2xpY2sgZXZlbnQgbGlz
dGVuZXIgZHluYW1pY2FsbHkgd29ya2VkIGFuZCB0aGUgZXZlbnQgaXMgbm93IGRpc3BhdGNoZWQg
dG8gdGhlIHJlZ3VsYXIgRE9NIik7CisgICAgZGVidWcoIlRlc3QgIzc6IFZlcmlmeSB0aGF0IHRo
ZSByZWNyZWF0aW5nIHRoZSBvcmlnaW5hbCBjbGljayBldmVudCBsaXN0ZW5lciBkeW5hbWljYWxs
eSB3b3JrZWQgYW5kIHRoZSBldmVudCBpcyBzdGlsbCBkaXNwYXRjaGVkIHRvIHRoZSBpbnN0YW5j
ZSB0cmVlIik7CiAgICAgZGVidWcoIiIpOwogCi0gICAgdmVyaWZ5Q2xpY2tFdmVudE9uUmVmZXJl
bmNlZCgpOworICAgIHZlcmlmeUNsaWNrRXZlbnQoKTsKIAogICAgIC8vIFByZXBhcmUgZm9yIG5l
eHQgdGVzdHMKICAgICBmaXJlU2ltdWxhdGVkTW91c2VDbGlja0V2ZW50KCJldmVudFRlc3RFaWdo
dCgpIiwgdXNlRWxlbWVudC5pbnN0YW5jZVJvb3QpOwogfQogCi1mdW5jdGlvbiBldmVudFRlc3RT
ZXZlbigpCitmdW5jdGlvbiBldmVudFRlc3RFaWdodCgpCiB7CiAgICAgZGVidWcoIiIpOwogICAg
IGRlYnVnKCJUZXN0ICM4OiBWZXJpZnkgdGhhdCB0aGUgc2ltdWxhdGVkIGNsaWNrIGV2ZW50IGdv
dCBkaXNwYXRjaGVkIHRvIHRoZSByaWdodCB0YXJnZXQiKTsKQEAgLTI4MSwxNyArMjgxLDE5IEBA
IGZ1bmN0aW9uIGV2ZW50VGVzdFNldmVuKCkKICAgICBmaXJlU2ltdWxhdGVkTW91c2VDbGlja0V2
ZW50KCJjaGVja0V2ZW50TGlzdGVuZXJOb3RSZWFjaGFibGUoKSIsIHVzZUVsZW1lbnQuaW5zdGFu
Y2VSb290KTsKICAgICBmaXJlU2ltdWxhdGVkTW91c2VDbGlja0V2ZW50KCJjaGVja0V2ZW50TGlz
dGVuZXJOb3RSZWFjaGFibGUoKSIsIHJlY3RFbGVtZW50KTsKIAotICAgIGZpbmlzaFRlc3RzKCk7
Ci19CisgICAgLy8gSW5kaWNhdGUgZmluaXNoCisgICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRl
KCJmaWxsIiwgImdyZWVuIik7CiAKLWZ1bmN0aW9uIGZpbmlzaFRlc3RzKCkKLXsKKyAgICAvLyBM
b2FkIHRlc3QgZmluaXNoaW5nIHNjcmlwdAorICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICBzY3JpcHQub25sb2FkID0gY29tcGxldGVUZXN0Owor
ICAgIHNjcmlwdC5zcmMgPSAiLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
IjsKICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoc2NyaXB0KTsKK30KIAotICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZmls
bCIsICJncmVlbiIpOwotICAgIHNob3VsZEJlVHJ1ZSgic3VjY2Vzc2Z1bGx5UGFyc2VkIik7Ci0g
ICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicp
OwotCitmdW5jdGlvbiBjb21wbGV0ZVRlc3QoKQorewogICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55397</attachid>
            <date>2010-05-07 11:06:21 -0700</date>
            <delta_ts>2010-05-07 11:18:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37798-20100507200612.patch</filename>
            <type>text/plain</type>
            <size>16368</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODk1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMDUtMDcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgc3ZnL2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWFzLWV2ZW50LXRhcmdldC54aHRtbCBj
cmFzaGVzIHJhbmRvbWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zNzc5OAorCisgICAgICAgIFdoZW4gY3JlYXRpbmcgSlNFdmVudExpc3RlbmVycyB0
aHJvdWdoIGF0dHJpYnV0ZXMgKG9uY2xpY2ssIGV0Yy4uKSBvciBhZGQvcmVtb3ZlRXZlbnRMaXN0
ZW5lcgorICAgICAgICBjYWxscyBvbiBhIFNWR0VsZW1lbnRJbnN0YW5jZSwgZG8gTk9UIHBhc3Mg
dGhlIGVsZW1lbnQgaW5zdGFuY2UgaXRzZWxmIGFzIEpTIHdyYXBwZXIgb2JqZWN0CisgICAgICAg
IGJ1dCB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS4gU1ZHRWxlbWVudEluc3RhbmNlIHJlZGly
ZWN0cyBhbGwgZXZlbnQgbGlzdGVuZXIgcmVnaXN0cmF0aW9ucworICAgICAgICB0byB0aGUgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKSwgYXMgdGhleSBzaGFyZSBhbiBldmVudCBsaXN0ZW5lciBsaXN0
LCBwZXIgU1ZHIHNwZWMuIFRoZSBvbGQKKyAgICAgICAgY29kZSB3YXMgdmVyeSBkYW5nZXJvdXMs
IGxlYWRpbmcgdG8gcmFuZG9tIGFzc2VydGlvbnMsIHdoZW4gZ2FyYmFnZSBjb2xsZWN0aW9uIHRl
YXJlZCBkb3duCisgICAgICAgIHRoZSBKU1NWR0VsZW1lbnRJbnN0YW5jZSBhbmQgZXZlbnQgbGlz
dGVuZXJzIGZpcmVkLCB3aG9zZSBsaXN0ZW5lcnMgd2VyZSByZWdpc3RlcmVkIHdpdGgKKyAgICAg
ICAgaXQsIGJ1dCByZXNpZGluZyBpbiB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQoKSBldmVudCBs
aXN0ZW5lciBsaXN0LgorCisgICAgICAgIFJlbW92ZXMgdGhlIG5lZWQgZm9yIEN1c3RvbVRvSlMg
Y29kZSBmb3IgSlNTVkdFbGVtZW50SW5zdGFuY2UsIHdoaWNoIHdhcyB3cm9uZyBhbnl3YXlzLiBX
ZSBob3BlZAorICAgICAgICB0byBrZWVwIHRoZSBldmVudCBsaXN0ZWVycyBhbGl2ZSBieSBqdXN0
IGNyZWF0aW5nIGEganMgd3JhcHBlciBvZiB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQoKSwgdGhh
dAorICAgICAgICBjb3VsZCBvbmx5IHdvcmsgYXMgbG9uZyBhcyBnYXJiYWdlIGNvbGxlY3Rpb24g
ZGlkbid0IHRlYXIgaXQgZG93biwganVzdCBsdWNrLiBBbHNvIHJlbW92ZSB0aGUKKyAgICAgICAg
Q3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIG1hcmtlciwgYXMgaXQgaXMgb25seSB1c2VkIGZv
ciBKU0xhenlFdmVudExpc3RlbmVycyBhbmQgb25seSB3b3JrcworICAgICAgICBmb3IgSlNOb2Rl
IGRlcml2ZWQgb2JqZWN0cywgaXQgd2FzIGEgbm8tb3AgZm9yIFNWR0VsZW1lbnRJbnN0YW5jZSwg
dGh1cyByZW1vdmVkIGl0LgorCisgICAgICAgIFNob3VsZCBmaXggYWxsIHJhbmRvbSBjcmFzaGVz
L2Fzc2VydGlvbnMgc2VlbiB3aXRoIHN2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVu
dC10YXJnZXQueGh0bWwKKyAgICAgICAgU2VlIGJ1ZyByZXBvcnQgZm9yIGEgZGV0YWlsZWQgY3Jh
c2ggYW5hbHlzaXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR0VsZW1lbnRJbnN0YW5j
ZUN1c3RvbS5jcHA6IFJlbW92ZSBjdXN0b20gdG9KUygpL3B1c2hFdmVudEhhbmRsZXJTY29wZSgp
IGhhbmRsaW5nLCBub3QgbmVjZXNzYXJ5IGFueW1vcmUuCisgICAgICAgIChXZWJDb3JlOjpKU1NW
R0VsZW1lbnRJbnN0YW5jZTo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogRm9yIEpTU1ZHRWxlbWVudEluc3RhbmNlIHBhc3MgdGhl
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCkgYXMgSlMgd3JhcHBlciBvYmplY3QsIG5vdCBpdHNlbGYu
CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQpOiBC
ZSBzdXJlIHRvIHRyaWdnZXIgYSBzdHlsZSB1cGRhdGUgaGVyZSwgc28gZGlydHkgc2hhZG93IHRy
ZWVzIGZvciA8dXNlPiBnZXQgcmVidWlsZC4gT3RoZXJ3aGlzZSBET00gbWF5IGJlIG91dC1vZi1z
eW5jLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpldmVudFRhcmdldERh
dGEpOiBBZGQgQVNTRVJUX05PVF9SRUFDSEVEKCksIGFsbCBldmVudCBsaXN0ZW5lciBjYWxscyBh
cmUgZm9yd2FyZGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nRWxlbWVudCgpLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjplbnN1cmVFdmVudFRhcmdldERhdGEpOiBEaXR0by4K
KyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNlLmlkbDogUmVtb3ZlIEN1c3RvbVRvSlMs
IEN1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSBtYXJrZXJzLgorCiAyMDEwLTA1LTA2ICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1p
dHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3Rh
bmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxl
bWVudEluc3RhbmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTg5NDQpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMjAgKzI1LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KFNWRykKICNpbmNsdWRlICJKU1NWR0VsZW1lbnRJbnN0YW5jZS5oIgogCi0jaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKLSNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU1NW
R0VsZW1lbnQuaCIKKyNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5j
ZS5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNTVkdFbGVtZW50SW5zdGFuY2U6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFj
aykKK3ZvaWQgSlNTVkdFbGVtZW50SW5zdGFuY2U6Om1hcmtDaGlsZHJlbihKU0M6Ok1hcmtTdGFj
ayYgbWFya1N0YWNrKQogewogICAgIEJhc2U6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOwogCkBA
IC00NiwyMSArNDAsNiBAQCB2b2lkIEpTU1ZHRWxlbWVudEluc3RhbmNlOjptYXJrQ2hpbGRyZW4o
CiAgICAgbWFya0RPTU5vZGVXcmFwcGVyKG1hcmtTdGFjaywgaW1wbCgpLT5jb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5kb2N1bWVudCgpLCBpbXBsKCktPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpOwog
fQogCi12b2lkIEpTU1ZHRWxlbWVudEluc3RhbmNlOjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbiYpIGNvbnN0Ci17Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTVkdF
bGVtZW50SW5zdGFuY2UqIG9iamVjdCkKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdldERPTU9i
amVjdFdyYXBwZXI8SlNTVkdFbGVtZW50SW5zdGFuY2U+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2Jq
ZWN0KTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IG91ciBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaGFz
IGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIGtlZXAgaXRzIGV2ZW50IGhhbmRsZXJzIGFsaXZlLgot
ICAgIGlmIChvYmplY3QpCi0gICAgICAgIHRvSlMoZXhlYywgb2JqZWN0LT5jb3JyZXNwb25kaW5n
RWxlbWVudCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDU4OTQ0KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTI2
LDYgKzEyNiwzMiBAQCBzdWIgR2VuZXJhdGVJbnRlcmZhY2UKICAgICB9CiB9CiAKK3N1YiBHZW5l
cmF0ZUF0dHJpYnV0ZUV2ZW50TGlzdGVuZXJDYWxsCit7CisgICAgbXkgJGNsYXNzTmFtZSA9IHNo
aWZ0OworICAgIG15ICRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lID0gc2hpZnQ7CisgICAgbXkgJHdp
bmRvd0V2ZW50TGlzdGVuZXIgPSBzaGlmdDsKKworICAgIG15ICR3cmFwcGVyT2JqZWN0ID0gJHdp
bmRvd0V2ZW50TGlzdGVuZXIgPyAiZ2xvYmFsT2JqZWN0IiA6ICJ0aGlzT2JqZWN0IjsKKyAgICBt
eSBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCA9ICgpOworCisgICAgaWYgKCRjbGFzc05hbWUg
ZXEgIkpTU1ZHRWxlbWVudEluc3RhbmNlIikgeworICAgICAgICAjIFNWR0VsZW1lbnRJbnN0YW5j
ZXMgaGF2ZSB0byBjcmVhdGUgSlNFdmVudExpc3RlbmVycyB3aXRoIHRoZSB3cmFwcGVyIGVxdWFs
IHRvIHRoZSBjb3JyZXNwb25kaW5nRWxlbWVudAorICAgICAgICAkd3JhcHBlck9iamVjdCA9ICJh
c09iamVjdChjb3JyZXNwb25kaW5nRWxlbWVudFdyYXBwZXIpIjsKKworICAgICAgICBwdXNoKEBH
ZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsLCA8PEVORCk7CisgICAgSlNWYWx1ZSBjb3JyZXNwb25k
aW5nRWxlbWVudFdyYXBwZXIgPSB0b0pTKGV4ZWMsIGltcC0+Y29ycmVzcG9uZGluZ0VsZW1lbnQo
KSk7CisgICAgaWYgKGNvcnJlc3BvbmRpbmdFbGVtZW50V3JhcHBlci5pc09iamVjdCgpKQorRU5E
CisKKyAgICAgICAgIyBBZGQgbGVhZGluZyB3aGl0ZXNwYWNlIHRvIGZvcm1hdCB0aGUgaW1wLT5z
ZXQuLi4gbGluZSBjb3JyZWN0bHkKKyAgICAgICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVy
SW1wbCwgIiAgICAiKTsKKyAgICB9CisKKyAgICBwdXNoKEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJ
bXBsLCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoY3JlYXRlSlNBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCAkd3JhcHBlck9iamVjdCkpO1xuIik7CisgICAg
cmV0dXJuIEBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJJbXBsOworfQorCiBzdWIgR2VuZXJhdGVFdmVu
dExpc3RlbmVyQ2FsbAogewogICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKQEAgLTEzNSwxMSAr
MTYxLDIzIEBAIHN1YiBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsCiAgICAgJGltcGxJbmNsdWRl
c3siSlNFdmVudExpc3RlbmVyLmgifSA9IDE7CiAKICAgICBteSBAR2VuZXJhdGVFdmVudExpc3Rl
bmVySW1wbCA9ICgpOworICAgIG15ICR3cmFwcGVyT2JqZWN0ID0gImNhc3RlZFRoaXMiOworICAg
IGlmICgkY2xhc3NOYW1lIGVxICJKU1NWR0VsZW1lbnRJbnN0YW5jZSIpIHsKKyAgICAgICAgIyBT
VkdFbGVtZW50SW5zdGFuY2VzIGhhdmUgdG8gY3JlYXRlIEpTRXZlbnRMaXN0ZW5lcnMgd2l0aCB0
aGUgd3JhcHBlciBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQKKyAgICAgICAgJHdy
YXBwZXJPYmplY3QgPSAiYXNPYmplY3QoY29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVyKSI7CisK
KyAgICAgICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCwgPDxFTkQpOworICAgIEpT
VmFsdWUgY29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVyID0gdG9KUyhleGVjLCBpbXAtPmNvcnJl
c3BvbmRpbmdFbGVtZW50KCkpOworICAgIGlmICghY29ycmVzcG9uZGluZ0VsZW1lbnRXcmFwcGVy
LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworRU5ECisgICAgfQor
CiAgICAgcHVzaChAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbCwgPDxFTkQpOwogICAgIEpTVmFs
dWUgbGlzdGVuZXIgPSBhcmdzLmF0KDEpOwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaW1wLT4ke2Z1bmN0aW9uTmFtZX1F
dmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCBjYXN0ZWRU
aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGFyZ3Mu
YXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXAtPiR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlz
dGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksICR3cmFwcGVyT2JqZWN0
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSRwYXNzUmVmUHRySGFuZGxpbmcsIGFyZ3MuYXQo
MikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIEVORAogICAg
IHJldHVybiBAR2VuZXJhdGVFdmVudExpc3RlbmVySW1wbDsKQEAgLTE1ODQsMTEgKzE2MjIsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJKU1dvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuaCJ9ID0gMTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZShjcmVhdGVKU1dvcmtlckNvbnRleHRFcnJv
ckhhbmRsZXIoZXhlYywgdmFsdWUsIHRoaXNPYmplY3QpKTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkd2luZG93RXZlbnRMaXN0ZW5lcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9u
TmFtZShjcmVhdGVKU0F0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXhlYywgdmFsdWUsIGdsb2JhbE9i
amVjdCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKGNyZWF0ZUpTQXR0cmlidXRlRXZlbnRM
aXN0ZW5lcihleGVjLCB2YWx1ZSwgdGhpc09iamVjdCkpO1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsIEdlbmVyYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lckNhbGwoJGNsYXNzTmFt
ZSwgJGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUsICR3aW5kb3dFdmVudExpc3RlbmVyKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcAkocmV2
aXNpb24gNTg5NDQpCisrKyBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjphcHBl
bmRDaGlsZChQYXMKIAogdm9pZCBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0
YW5jZXNPZkVsZW1lbnQoU1ZHRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQp
CisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChlbGVtZW50LT5pc1N0eWxlZCgpICYmIHN0YXRpY19jYXN0PFNWR1N0
eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+aW5zdGFuY2VVcGRhdGVzQmxvY2tlZCgpKQpAQCAtMTA1
LDYgKzEwNSw5IEBAIHZvaWQgU1ZHRWxlbWVudEluc3RhbmNlOjppbnZhbGlkYXRlQWxsSW4KICAg
ICAgICAgQVNTRVJUKCgqaXQpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IGVsZW1lbnQpOwog
ICAgICAgICAoKml0KS0+Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKS0+aW52YWxpZGF0ZVNoYWRv
d1RyZWUoKTsKICAgICB9CisKKyAgICAvLyBCZSBzdXJlIHRvIHJlYnVpbGQgdXNlIHRyZWVzLCBp
ZiBuZWVkZWQKKyAgICBlbGVtZW50LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogU1ZHRWxlbWVu
dEluc3RhbmNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTE0NCwxNSArMTQ3
LDE4IEBAIGJvb2wgU1ZHRWxlbWVudEluc3RhbmNlOjpkaXNwYXRjaEV2ZW50KFAKIAogRXZlbnRU
YXJnZXREYXRhKiBTVkdFbGVtZW50SW5zdGFuY2U6OmV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAg
cmV0dXJuIG1fZWxlbWVudC0+ZXZlbnRUYXJnZXREYXRhKCk7CisgICAgLy8gRXZlbnRUYXJnZXQg
d291bGQgdXNlIHRoZXNlIG1ldGhvZHMgaWYgd2Ugd2VyZSBhY3R1YWxseSB1c2luZyBpdHMgYWRk
L3JlbW92ZUV2ZW50TGlzdGVuZXIgbG9naWMuCisgICAgLy8gQXMgd2UncmUgZm9yd2FyZGluZyB0
aG9zZSBjYWxscyB0byB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQoKSwgbm8gb25lIHNob3VsZCBl
dmVyIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKIH0KIAogRXZlbnRUYXJnZXREYXRhKiBTVkdFbGVtZW50SW5zdGFuY2U6OmVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgLy8gQXZvaWQgY3Jhc2hpbmcgLSByZXR1cm4gYSBk
ZWZhdWx0IGR1bW15IHZhbHVlCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChFdmVudFRhcmdldERh
dGEsIGR1bW15RXZlbnRUYXJnZXREYXRhLCAoKSk7Ci0gICAgZHVtbXlFdmVudFRhcmdldERhdGEu
ZXZlbnRMaXN0ZW5lck1hcC5jbGVhcigpOwotICAgIHJldHVybiAmZHVtbXlFdmVudFRhcmdldERh
dGE7CisgICAgLy8gRXZlbnRUYXJnZXQgd291bGQgdXNlIHRoZXNlIG1ldGhvZHMgaWYgd2Ugd2Vy
ZSBhY3R1YWxseSB1c2luZyBpdHMgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXIgbG9naWMuCisgICAg
Ly8gQXMgd2UncmUgZm9yd2FyZGluZyB0aG9zZSBjYWxscyB0byB0aGUgY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKSwgbm8gb25lIHNob3VsZCBldmVyIGNhbGwgdGhpcyBmdW5jdGlvbi4KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudEluc3RhbmNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdF
bGVtZW50SW5zdGFuY2UuaWRsCShyZXZpc2lvbiA1ODk0NCkKKysrIFdlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnRJbnN0YW5jZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCw3IEBAIG1vZHVs
ZSBzdmcgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9U1ZHLAotICAg
ICAgICBDdXN0b21MaXN0ZW5lcnMsCiAgICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKLSAgICAg
ICAgQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlLAotICAgICAgICBDdXN0b21Ub0pTLAogICAg
ICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlcgogICAgIF0gU1ZHRWxlbWVudEluc3RhbmNlCiAj
aWYgZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgJiYgTEFOR1VBR0VfT0JKRUNUSVZFX0MK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU4OTU3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUtMDcgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgc3ZnL2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWFzLWV2ZW50LXRh
cmdldC54aHRtbCBjcmFzaGVzIHJhbmRvbWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzc5OAorCisgICAgICAgIE1ha2UgdXNlLWluc3RhbmNlUm9v
dC1hcy1ldmVudC10YXJnZXQueGh0bWwgYmVoYXZlIG1vcmUgY29ycmVjdGx5LiBEdWUgYSBjb3B5
ICYgcGFzdGUgcHJvYmxlbSB0ZXN0ICM3IHdhcyBub3QgZXhlY3V0ZWQuIEZpeGVkLgorICAgICAg
ICBNYWtlIGRlc3RydWN0aW9uIG1vcmUgcmVsaWFibGUsIGJ5IHVzaW5nIHRoZSBzdGFuZGFyZCBq
cy10ZXN0LXBvc3QuanMgaW5qZWN0aW9uIHRocm91Z2ggPHNjcmlwdD4gYmVmb3JlIGNhbGxpbmcg
bm90aWZ5RG9uZSgpLCBhbmQgIlRFU1QgQ09NUExFVEUiIG1hZ2ljYWxseSBhcHBlYXJzLgorCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL3N2Zy9oaXhpZS9lcnJvci8wMTctZXhwZWN0ZWQudHh0OiBV
cGRhdGUgcmVzdWx0LCBub3cgdGhhdCBpbnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KCks
IGNvcnJlY3RseSB0cmlnZ2VycyA8dXNlPiBzaGFkb3cgdHJlZSByZWJ1aWxkcy4KKyAgICAgICAg
KiBzdmcvY3VzdG9tL3VzZS1pbnN0YW5jZVJvb3QtYXMtZXZlbnQtdGFyZ2V0LWV4cGVjdGVkLnR4
dDogVXBkYXRlIHJlc3VsdCwgd2FzIG1pc3NpbmcgYSAiVEVTVCBDT01QTEVURSIgbWFya2VyLCBh
bmQgVGVzdCAjNyB3YXMgbm90IGV4ZWN1dGVkIGJlZm9yZS4KKyAgICAgICAgKiBzdmcvY3VzdG9t
L3VzZS1pbnN0YW5jZVJvb3QtYXMtZXZlbnQtdGFyZ2V0LnhodG1sOiBGaXggdHlwbywgdGVzdCAj
NyBpcyBub3cgZXhlY3V0ZWQsIGl0IGFsc28gaGFkIGEgYnVnIHdoaWNoIGhhcyBiZWVuIGNvcnJl
Y3RlZC4gCisKIDIwMTAtMDUtMDYgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9zdmcvaGl4aWUvZXJyb3IvMDE3LWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL2hpeGllL2Vycm9yLzAxNy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDU4OTQ0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy9o
aXhpZS9lcnJvci8wMTctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02LDYgKzYsOCBA
QCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7
Z30gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHt1c2V9IGF0
ICgwLDApIHNpemUgMHgwCiAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMCww
KSBzaXplIDB4MAorICAgICAgICAgICAgUmVuZGVyU1ZHQ29udGFpbmVyIHtnfSBhdCAoMCwwKSBz
aXplIDB4MAorICAgICAgICAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgwLDApIHNp
emUgMHgwCiAgICAgICBSZW5kZXJTVkdDb250YWluZXIge2d9IGF0ICgwLDApIHNpemUgMHgwCiAg
ICAgICAgIFJlbmRlclNWR0NvbnRhaW5lciB7dXNlfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAg
ICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDAsMCkgc2l6ZSAweDAKSW5kZXg6IExheW91
dFRlc3RzL3N2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vdXNlLWluc3RhbmNl
Um9vdC1hcy1ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1ODk0NCkKKysrIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwyMCBAQCBQQVNTIGN1cnJlbnRF
dmVudC50YXJnZXQgPT0gY3VycmVudEV2ZW50CiBQQVNTIGN1cnJlbnRFdmVudC50YXJnZXQuY29y
cmVzcG9uZGluZ0VsZW1lbnQgPT0gY3VycmVudEV2ZW50LmN1cnJlbnRUYXJnZXQuY29ycmVzcG9u
ZGluZ0VsZW1lbnQgaXMgdHJ1ZQogUEFTUyBjdXJyZW50RXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRp
bmdVc2VFbGVtZW50ID09IGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0LmNvcnJlc3BvbmRpbmdV
c2VFbGVtZW50IGlzIHRydWUKIAorVGVzdCAjNzogVmVyaWZ5IHRoYXQgdGhlIHJlY3JlYXRpbmcg
dGhlIG9yaWdpbmFsIGNsaWNrIGV2ZW50IGxpc3RlbmVyIGR5bmFtaWNhbGx5IHdvcmtlZCBhbmQg
dGhlIGV2ZW50IGlzIHN0aWxsIGRpc3BhdGNoZWQgdG8gdGhlIGluc3RhbmNlIHRyZWUKKworUEFT
UyBjdXJyZW50RXZlbnQudG9TdHJpbmcoKSBpcyAiW29iamVjdCBNb3VzZUV2ZW50XSIKK1BBU1Mg
Y3VycmVudEV2ZW50LnR5cGUudG9TdHJpbmcoKSBpcyAiY2xpY2siCitQQVNTIGN1cnJlbnRFdmVu
dC50YXJnZXQudG9TdHJpbmcoKSBpcyAiW29iamVjdCBTVkdFbGVtZW50SW5zdGFuY2VdIgorUEFT
UyBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldC50b1N0cmluZygpIGlzICJbb2JqZWN0IFNWR0Vs
ZW1lbnRJbnN0YW5jZV0iCitQQVNTIGN1cnJlbnRFdmVudC50YXJnZXQuY29ycmVzcG9uZGluZ0Vs
ZW1lbnQgPT0gcmVjdEVsZW1lbnQgaXMgdHJ1ZQorUEFTUyBjdXJyZW50RXZlbnQudGFyZ2V0LmNv
cnJlc3BvbmRpbmdVc2VFbGVtZW50ID09IHVzZUVsZW1lbnQgaXMgdHJ1ZQorUEFTUyBjdXJyZW50
RXZlbnQuY3VycmVudFRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudCA9PSByZWN0RWxlbWVudCBp
cyB0cnVlCitQQVNTIGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VF
bGVtZW50ID09IHVzZUVsZW1lbnQgaXMgdHJ1ZQorUEFTUyBjdXJyZW50RXZlbnQudGFyZ2V0ID09
IGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0IGlzIHRydWUKK1BBU1MgY3VycmVudEV2ZW50LnRh
cmdldC5jb3JyZXNwb25kaW5nRWxlbWVudCA9PSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldC5j
b3JyZXNwb25kaW5nRWxlbWVudCBpcyB0cnVlCitQQVNTIGN1cnJlbnRFdmVudC50YXJnZXQuY29y
cmVzcG9uZGluZ1VzZUVsZW1lbnQgPT0gY3VycmVudEV2ZW50LmN1cnJlbnRUYXJnZXQuY29ycmVz
cG9uZGluZ1VzZUVsZW1lbnQgaXMgdHJ1ZQorCiBUZXN0ICM4OiBWZXJpZnkgdGhhdCB0aGUgc2lt
dWxhdGVkIGNsaWNrIGV2ZW50IGdvdCBkaXNwYXRjaGVkIHRvIHRoZSByaWdodCB0YXJnZXQKIAog
UEFTUyBjdXJyZW50RXZlbnQudG9TdHJpbmcoKSBpcyAiW29iamVjdCBNb3VzZUV2ZW50XSIKQEAg
LTk5LDQgKzExMyw1IEBAIFBBU1MgY3VycmVudEV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWwK
IFBBU1MgY3VycmVudEV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCA9PSBjdXJy
ZW50RXZlbnQuY3VycmVudFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCBpcyB0cnVlCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKK1RFU1QgQ09NUExFVEUKIApJbmRleDog
TGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS91c2UtaW5zdGFuY2VSb290LWFzLWV2ZW50LXRhcmdldC54
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3VzZS1pbnN0YW5jZVJv
b3QtYXMtZXZlbnQtdGFyZ2V0LnhodG1sCShyZXZpc2lvbiA1ODk0NCkKKysrIExheW91dFRlc3Rz
L3N2Zy9jdXN0b20vdXNlLWluc3RhbmNlUm9vdC1hcy1ldmVudC10YXJnZXQueGh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTI1OSwxNiArMjU5LDE2IEBAIGZ1bmN0aW9uIGV2ZW50VGVzdFNpeCgpCiBm
dW5jdGlvbiBldmVudFRlc3RTZXZlbigpCiB7CiAgICAgZGVidWcoIiIpOwotICAgIGRlYnVnKCJU
ZXN0ICM3OiBWZXJpZnkgdGhhdCB0aGUgcmVjcmVhdGluZyB0aGUgb3JpZ2luYWwgY2xpY2sgZXZl
bnQgbGlzdGVuZXIgZHluYW1pY2FsbHkgd29ya2VkIGFuZCB0aGUgZXZlbnQgaXMgbm93IGRpc3Bh
dGNoZWQgdG8gdGhlIHJlZ3VsYXIgRE9NIik7CisgICAgZGVidWcoIlRlc3QgIzc6IFZlcmlmeSB0
aGF0IHRoZSByZWNyZWF0aW5nIHRoZSBvcmlnaW5hbCBjbGljayBldmVudCBsaXN0ZW5lciBkeW5h
bWljYWxseSB3b3JrZWQgYW5kIHRoZSBldmVudCBpcyBzdGlsbCBkaXNwYXRjaGVkIHRvIHRoZSBp
bnN0YW5jZSB0cmVlIik7CiAgICAgZGVidWcoIiIpOwogCi0gICAgdmVyaWZ5Q2xpY2tFdmVudE9u
UmVmZXJlbmNlZCgpOworICAgIHZlcmlmeUNsaWNrRXZlbnQoKTsKIAogICAgIC8vIFByZXBhcmUg
Zm9yIG5leHQgdGVzdHMKICAgICBmaXJlU2ltdWxhdGVkTW91c2VDbGlja0V2ZW50KCJldmVudFRl
c3RFaWdodCgpIiwgdXNlRWxlbWVudC5pbnN0YW5jZVJvb3QpOwogfQogCi1mdW5jdGlvbiBldmVu
dFRlc3RTZXZlbigpCitmdW5jdGlvbiBldmVudFRlc3RFaWdodCgpCiB7CiAgICAgZGVidWcoIiIp
OwogICAgIGRlYnVnKCJUZXN0ICM4OiBWZXJpZnkgdGhhdCB0aGUgc2ltdWxhdGVkIGNsaWNrIGV2
ZW50IGdvdCBkaXNwYXRjaGVkIHRvIHRoZSByaWdodCB0YXJnZXQiKTsKQEAgLTI4MSwxNyArMjgx
LDE5IEBAIGZ1bmN0aW9uIGV2ZW50VGVzdFNldmVuKCkKICAgICBmaXJlU2ltdWxhdGVkTW91c2VD
bGlja0V2ZW50KCJjaGVja0V2ZW50TGlzdGVuZXJOb3RSZWFjaGFibGUoKSIsIHVzZUVsZW1lbnQu
aW5zdGFuY2VSb290KTsKICAgICBmaXJlU2ltdWxhdGVkTW91c2VDbGlja0V2ZW50KCJjaGVja0V2
ZW50TGlzdGVuZXJOb3RSZWFjaGFibGUoKSIsIHJlY3RFbGVtZW50KTsKIAotICAgIGZpbmlzaFRl
c3RzKCk7Ci19CisgICAgLy8gSW5kaWNhdGUgZmluaXNoCisgICAgcmVjdEVsZW1lbnQuc2V0QXR0
cmlidXRlKCJmaWxsIiwgImdyZWVuIik7CiAKLWZ1bmN0aW9uIGZpbmlzaFRlc3RzKCkKLXsKKyAg
ICAvLyBMb2FkIHRlc3QgZmluaXNoaW5nIHNjcmlwdAorICAgIHZhciBzY3JpcHQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICBzY3JpcHQub25sb2FkID0gY29tcGxldGVU
ZXN0OworICAgIHNjcmlwdC5zcmMgPSAiLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIjsKICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKK30KIAotICAgIHJlY3RFbGVtZW50LnNldEF0dHJpYnV0
ZSgiZmlsbCIsICJncmVlbiIpOwotICAgIHNob3VsZEJlVHJ1ZSgic3VjY2Vzc2Z1bGx5UGFyc2Vk
Iik7Ci0gICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9z
cGFuPicpOwotCitmdW5jdGlvbiBjb21wbGV0ZVRlc3QoKQorewogICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKIH0K
</data>
<flag name="review"
          id="39570"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>