<?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>80330</bug_id>
          
          <creation_ts>2012-03-05 14:46:40 -0800</creation_ts>
          <short_desc>Refactor recompileAllJSFunctions() to be less expensive</short_desc>
          <delta_ts>2012-03-29 17:37:00 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80562</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571063</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-05 14:46:40 -0800</bug_when>
    <thetext>recompileAllJSFunctions() is a very expensive function, as it is iterates every single object in the heap. We call it rather frequently, especially when navigating web pages. We can do this much more intelligently by doing essentially the same thing during mark/sweep collection. In doing so, we avoid having to touch every object in the heap, which should benefit page load performance. The standard benchmarks we track should be unaffected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571091</commentid>
    <comment_count>1</comment_count>
      <attachid>130212</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-05 15:21:53 -0800</bug_when>
    <thetext>Created attachment 130212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571095</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-05 15:23:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/10898464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571106</commentid>
    <comment_count>3</comment_count>
      <attachid>130212</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-05 15:34:39 -0800</bug_when>
    <thetext>Comment on attachment 130212
Patch

Attachment 130212 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/11833012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571118</commentid>
    <comment_count>4</comment_count>
      <attachid>130212</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-05 15:53:04 -0800</bug_when>
    <thetext>Comment on attachment 130212
Patch

Attachment 130212 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11833017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571259</commentid>
    <comment_count>5</comment_count>
      <attachid>130212</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-05 17:34:18 -0800</bug_when>
    <thetext>Comment on attachment 130212
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=130212&amp;action=review

It just occurred to me that the solution can be much simpler: Why not just remove the call to recompileAllJSFunctions() from collectAllGarbage()? We only added it to work around inline caches keeping things alive too long, and I think Phil fixed that bug through the weak reference harvester mechanism.

I think you should try that and test the SunSpider result.

Anyway, what follows is a review of your patch as is.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1773
&gt; +    if (m_globalData-&gt;heap.collectionType() == Heap::BerserkerCollection &amp;&amp; !m_globalData-&gt;dynamicGlobalObject) {
&gt; +        if (m_ownerExecutable-&gt;classInfo() == &amp;FunctionExecutable::s_info) {
&gt; +            // Since we got into this unconditional finalizer list, we know our alternative got into the list too,
&gt; +            // so it will get blown away as well. We cast to void here to avoid the unused return value warning.
&gt; +            // If we didn&apos;t release our alternative here, we&apos;d destroy it and then re-encounter it later in the list, 
&gt; +            // which would be very bad because it would no longer have a valid vtable pointer.
&gt; +            if (!!m_alternative)
&gt; +                (void)m_alternative.leakPtr();
&gt; +            static_cast&lt;FunctionExecutable*&gt;(m_ownerExecutable.get())-&gt;discardCodeOfKind(specializationKind());
&gt; +            return;
&gt; +        }
&gt; +    }

It would be clearer and less error-prone if the Executable were &quot;in charge&quot; of finalization -- it&apos;s odd for a child object to manage the lifetime of its parent, and you&apos;ve had to contort the code a bit to accomplish that.

&gt; Source/JavaScriptCore/heap/Heap.h:142
&gt; +        enum CollectionType { NoCollection, NormalCollection, BerserkerCollection };
&gt; +        CollectionType collectionType() { return m_collectionType; }

You can just use the SweepToggle enum. This enum is redundant with it.

&gt; Source/JavaScriptCore/heap/Heap.h:242
&gt; +        CollectionType m_collectionType;

I think this should be a data member of the SlotVisitor, since it only has meaning during the visit cycle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571262</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-05 17:35:57 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 130212 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130212&amp;action=review
&gt; 
&gt; It just occurred to me that the solution can be much simpler: Why not just remove the call to recompileAllJSFunctions() from collectAllGarbage()? We only added it to work around inline caches keeping things alive too long, and I think Phil fixed that bug through the weak reference harvester mechanism.
&gt; 
&gt; I think you should try that and test the SunSpider result.

I tried this and ran membuster on it and it used ~50% more memory on average.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571304</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-05 17:58:14 -0800</bug_when>
    <thetext>&gt; I tried this and ran membuster on it and it used ~50% more memory on average.

Wow! OK, sold :).

More evidence for LLInt...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571338</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-05 18:31:57 -0800</bug_when>
    <thetext>&gt; It would be clearer and less error-prone if the Executable were &quot;in charge&quot; of finalization -- it&apos;s odd for a child object to manage the lifetime of its parent, and you&apos;ve had to contort the code a bit to accomplish that.

The CodeBlock effectively takes charge of its own lifetime. It merely gets its parent to do the dirty work of actually deleting itself. I suppose this could be considered a violation of the semantics of the FunctionExecutable&apos;s OwnPtr? Anyways, the primary reason my code is contorted is because finalizeUnconditionally() is a virtual function, which we can&apos;t add to FunctionExecutable itself. I could think of three ways to get around this:

1) Have a proxy object that we add to the list of unconditional finalizers that would just call discardCode() on the FunctionExecutable. This would require additional (malloc) allocations during the marking phase. 
2) Use CodeBlock&apos;s existing finalizeUnconditionally(). This has been shown to require a tad of smelly hackery.
3) Use (or create) some other mechanism than UnconditionalFinalizer to blow away CodeBlocks on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573090</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-07 11:56:32 -0800</bug_when>
    <thetext>Renaming bug to more accurately reflect what we&apos;re going to do. Instead of leveraging UnconditionalFinalizer for discarding CodeBlocks, we&apos;ll just keep a separate linked list of FunctionExecutables and iterate over them to discard their compiled code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573107</commentid>
    <comment_count>10</comment_count>
      <attachid>130667</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-07 12:21:46 -0800</bug_when>
    <thetext>Created attachment 130667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573115</commentid>
    <comment_count>11</comment_count>
      <attachid>130667</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-07 12:27:18 -0800</bug_when>
    <thetext>Comment on attachment 130667
Patch

r=me

Please apply this to Debugger.cpp too.

I believe you can remove the forEachCell function now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573174</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-07 13:28:03 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 130667 [details])
&gt; r=me
&gt; 
&gt; Please apply this to Debugger.cpp too.
&gt; 
&gt; I believe you can remove the forEachCell function now.

I don&apos;t think we can do that in Debugger just with keeping track of FunctionExecutables. That particular Recompiler actually searches the Heap for JSFunctions, which it then uses to get the scope chain along with the executable. There&apos;s no way to get back from FunctionExecutable to JSFunction so that we would be able to  duplicate that functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573447</commentid>
    <comment_count>13</comment_count>
      <attachid>130667</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 18:14:54 -0800</bug_when>
    <thetext>Comment on attachment 130667
Patch

Clearing flags on attachment: 130667

Committed r110127: &lt;http://trac.webkit.org/changeset/110127&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573448</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 18:14:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573543</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-07 20:30:36 -0800</bug_when>
    <thetext>Rolled out in bug 80562. Reopening.

&gt; +        friend class DoublyLinkedListNode&lt;FunctionExecutable&gt;;

I think this needs to be:

+        friend class WTF::DoublyLinkedListNode&lt;FunctionExecutable&gt;;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591631</commentid>
    <comment_count>16</comment_count>
      <attachid>134681</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-03-29 15:25:34 -0700</bug_when>
    <thetext>Created attachment 134681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591757</commentid>
    <comment_count>17</comment_count>
      <attachid>134681</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 17:36:55 -0700</bug_when>
    <thetext>Comment on attachment 134681
Patch

Clearing flags on attachment: 134681

Committed r112624: &lt;http://trac.webkit.org/changeset/112624&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591758</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 17:37:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130212</attachid>
            <date>2012-03-05 15:21:53 -0800</date>
            <delta_ts>2012-03-07 12:21:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80330-20120305152152.patch</filename>
            <type>text/plain</type>
            <size>12410</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5ODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDEyLTAzLTA1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3ZlIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkgZnJvbSBIZWFwOjpjb2xs
ZWN0QWxsR2FyYmFnZSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04MDMzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp2aXNpdEFnZ3JlZ2F0ZSk6IElmIHdlJ3JlIGdvaW5nIHRvIGdldCBibG93biBhd2F5LCB0aGVy
ZSdzIG5vIHNlbnNlIGluIAorICAgICAgICB2aXNpdGluZyBhbGwgdGhlIHRoaW5ncyB0aGF0IHdl
IHJlZmVyZW5jZSBzbyB3ZSByZXR1cm4gZWFybHkuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBJZiB3ZSdyZSBkb2luZyBhIGJlcnNlcmtlciBHQywg
d2UgdGVsbCBvdXIgCisgICAgICAgIHBhcmVudCBGdW5jdGlvbkV4ZWN1dGFibGUgdG8gZGlzY2Fy
ZCB0aGUgY29kZSBmb3Igb3Vyc2VsdmVzLiBXZSBhbHNvIHJlbGVhc2Ugb3VyIGFsdGVybmF0aXZl
IAorICAgICAgICBDb2RlQmxvY2sgaWYgd2UgaGF2ZSBvbmUgaW4gb3JkZXIgdG8gYXZvaWQgZGVz
dHJveWluZyBpdCBhbmQgdGhlbiByZS1lbmNvdW50ZXJpbmcgaXQgbGF0ZXIgaW4gCisgICAgICAg
IHRoZSBsaXN0IG9mIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZmluYWxpemVkLgorICAgICAgICAq
IGhlYXAvQ29waWVkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpDb3BpZWRTcGFjZTo6Z2V0RnJl
c2hCbG9jayk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6
SGVhcCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6IFdlIGFkZCBhIG5l
dyBDb2xsZWN0aW9uVHlwZSBlbnVtIHRvIGluZGljYXRlIHdoYXQgdHlwZSBvZiBjb2xsZXRpb24g
dGhlIEhlYXAgaXMgCisgICAgICAgIGN1cnJlbnQgZG9pbmc6IE5vcm1hbCwgQmVyc2Vya2VyLCBv
ciBub3RoaW5nLgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0aW9uVHlwZSk6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChK
U0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgICogcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29k
ZSk6IFdlIHNwbGl0IGNsZWFyQ29kZSBpbnRvIHR3byBzZXBhcmF0ZSBmdW5jdGlvbnMgdGhhdCBo
YW5kbGUgCisgICAgICAgIHRoZSBjbGVhcmluZyBvZiBjb2RlIGZvciBib3RoIENvZGVTcGVjaWFs
aXphdGlvbktpbmRzLCBDb2RlRm9yQ2FsbCBhbmQgQ29kZUZvckNvbnN0cnVjdC4gVGhpcyBhbGxv
d3MKKyAgICAgICAgYSBDb2RlQmxvY2sgdGhhdCBhbiBFeGVjdXRhYmxlIG93bnMgdG8gbm90aWZ5
IGl0cyBvd25lciB0aGF0IGl0IGp1c3Qgd2FudHMgdG8gY2xlYXIgdGhlIGNvZGUgCisgICAgICAg
IGZvciBpdHNlbGYgYmVjYXVzZSBpdHMgc2libGluZyBvZiB0aGUgb3RoZXIgS2luZCBjb3VsZCBi
ZSB0aGUgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXIgbGlzdCwgd2hpY2ggCisgICAgICAgIHdvdWxk
IGJlIGJhZCBmb3IgdGhlIHNhbWUgcmVhc29ucyBhcyBub3QgcmVsZWFzaW5nIHRoZSBhbHRlcm5h
dGl2ZSBpbiBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseS4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZUZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGVPZktpbmQpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y2xlYXJDb2RlRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y2xlYXJDb2RlRm9yQ29uc3RydWN0KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKEV4ZWN1dGFibGVCYXNlKToKKyAgICAgICAgKEZ1bmN0aW9uRXhlY3V0YWJs
ZSk6CisKIDIwMTItMDMtMDUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgaG9zdGluZyBsYXllcnMgaW4gdGhlIHdpbmRvdyBzZXJ2ZXIgaW4g
V2ViS2l0MgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDEwOTgwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUzLDcgKzE2NTMsMTMgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogICAgIC8vIGxlYXN0IG9uZSBv
ZiB0aG9zZSB0aGluZ3MgaXMgcHJvYmFibHkgcXVpdGUgY2xvc2UgdG8gMS4gU28gd2UgYWRkIG9u
ZSBubyBtYXR0ZXIgd2hhdAogICAgIC8vIGFuZCB3aGVuIGl0IHJ1bnMsIGl0IGZpZ3VyZXMgb3V0
IHdoZXRoZXIgaXQgaGFzIGFueSB3b3JrIHRvIGRvLgogICAgIHZpc2l0b3IuYWRkVW5jb25kaXRp
b25hbEZpbmFsaXplcih0aGlzKTsKLSAgICAKKyAgIAorICAgIC8vIElmIHdlJ3JlIGdvaW5nIHRv
IGdldCBibG93biBhd2F5LCBkb24ndCB2aXNpdCBhbnl0aGluZyBlbHNlLgorICAgIGlmIChtX2ds
b2JhbERhdGEtPmhlYXAuY29sbGVjdGlvblR5cGUoKSA9PSBIZWFwOjpCZXJzZXJrZXJDb2xsZWN0
aW9uICYmICFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpIHsKKyAgICAgICAgaWYg
KG1fb3duZXJFeGVjdXRhYmxlLT5jbGFzc0luZm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRhYmxlOjpz
X2luZm8pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHNob3VsZEltbWVk
aWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb2Rl
IGJsb2NrIGlzIGxpdmUsIHNvIHNjYW4gYWxsIHJlZmVyZW5jZXMgc3Ryb25nbHkgYW5kIHJldHVy
bi4KICAgICAgICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CkBAIC0x
NzUzLDYgKzE3NTksMTkgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xv
dAogCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQogeworICAgIGlm
IChtX2dsb2JhbERhdGEtPmhlYXAuY29sbGVjdGlvblR5cGUoKSA9PSBIZWFwOjpCZXJzZXJrZXJD
b2xsZWN0aW9uICYmICFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpIHsKKyAgICAg
ICAgaWYgKG1fb3duZXJFeGVjdXRhYmxlLT5jbGFzc0luZm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRh
YmxlOjpzX2luZm8pIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGdvdCBpbnRvIHRoaXMgdW5j
b25kaXRpb25hbCBmaW5hbGl6ZXIgbGlzdCwgd2Uga25vdyBvdXIgYWx0ZXJuYXRpdmUgZ290IGlu
dG8gdGhlIGxpc3QgdG9vLAorICAgICAgICAgICAgLy8gc28gaXQgd2lsbCBnZXQgYmxvd24gYXdh
eSBhcyB3ZWxsLiBXZSBjYXN0IHRvIHZvaWQgaGVyZSB0byBhdm9pZCB0aGUgdW51c2VkIHJldHVy
biB2YWx1ZSB3YXJuaW5nLgorICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IHJlbGVhc2Ugb3Vy
IGFsdGVybmF0aXZlIGhlcmUsIHdlJ2QgZGVzdHJveSBpdCBhbmQgdGhlbiByZS1lbmNvdW50ZXIg
aXQgbGF0ZXIgaW4gdGhlIGxpc3QsIAorICAgICAgICAgICAgLy8gd2hpY2ggd291bGQgYmUgdmVy
eSBiYWQgYmVjYXVzZSBpdCB3b3VsZCBubyBsb25nZXIgaGF2ZSBhIHZhbGlkIHZ0YWJsZSBwb2lu
dGVyLgorICAgICAgICAgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgICAgICAo
dm9pZCltX2FsdGVybmF0aXZlLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG1fb3duZXJFeGVjdXRhYmxlLmdldCgpKS0+ZGlzY2FyZENvZGVP
ZktpbmQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCiAjaWYgRU5BQkxFKEpJVCkKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2VVbmxpbmtpbmcgPSB0cnVlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZFNwYWNlLmNwcAkocmV2aXNpb24gMTA5
ODA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgQ2hlY2tlZEJvb2xlYW4gQ29waWVkU3BhY2U6
OmdldEZyZXNoQmxvYwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChhbGxvY2F0aW9uRWZm
b3J0ID09IEFsbG9jYXRpb25DYW5GYWlsKTsKICAgICAgICAgaWYgKG1faGVhcC0+d2F0ZXJNYXJr
KCkgPj0gbV9oZWFwLT5oaWdoV2F0ZXJNYXJrKCkgJiYgbV9oZWFwLT5tX2lzU2FmZVRvQ29sbGVj
dCkKLSAgICAgICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwKTsKKyAgICAg
ICAgICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVwLCBIZWFwOjpOb3JtYWxDb2xs
ZWN0aW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmICghZ2V0RnJlc2hCbG9jayhBbGxvY2F0aW9u
TXVzdFN1Y2NlZWQsICZibG9jaykpIHsKICAgICAgICAgICAgICpvdXRCbG9jayA9IDA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTA5ODA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2
ICszMjgsNyBAQCBIZWFwOjpIZWFwKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSGVhCiAgICAg
LCBtX2hhbmRsZUhlYXAoZ2xvYmFsRGF0YSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNl
KQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgLCBtX2NvbGxlY3Rpb25UeXBl
KE5vQ29sbGVjdGlvbikKIHsKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsKICAgICBtX251
bWJlck9mRnJlZUJsb2NrcyA9IDA7CkBAIC03NjcsMjAgKzc2OCwyMCBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCi0g
ICAgICAgIG1fZ2xvYmFsRGF0YS0+cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKIAotICAgIGNv
bGxlY3QoRG9Td2VlcCk7CisgICAgY29sbGVjdChEb1N3ZWVwLCBCZXJzZXJrZXJDb2xsZWN0aW9u
KTsKIH0KIAotdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZ2xlKQordm9p
ZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZ2xlLCBDb2xsZWN0aW9uVHlwZSBj
b2xsZWN0aW9uVHlwZSkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2Fy
YmFnZSBDb2xsZWN0aW9uIik7CiAgICAgCiAgICAgR0NQSEFTRShDb2xsZWN0KTsKICAgICBBU1NF
UlQoZ2xvYmFsRGF0YSgpLT5pZGVudGlmaWVyVGFibGUgPT0gd3RmVGhyZWFkRGF0YSgpLmN1cnJl
bnRJZGVudGlmaWVyVGFibGUoKSk7CiAgICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0KTsKKyAg
ICBBU1NFUlQobV9jb2xsZWN0aW9uVHlwZSA9PSBOb0NvbGxlY3Rpb24pOwogICAgIEpBVkFTQ1JJ
UFRDT1JFX0dDX0JFR0lOKCk7CisgICAgbV9jb2xsZWN0aW9uVHlwZSA9IGNvbGxlY3Rpb25UeXBl
OwogI2lmIEVOQUJMRShHR0MpCiAgICAgYm9vbCBmdWxsR0MgPSBzd2VlcFRvZ2dsZSA9PSBEb1N3
ZWVwOwogICAgIGlmICghZnVsbEdDKQpAQCAtODM1LDYgKzgzNiw3IEBAIHZvaWQgSGVhcDo6Y29s
bGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICAgICAgbV9sYXN0RnVsbEdDU2l6ZSA9IG5l
d1NpemU7CiAgICAgICAgIHNldEhpZ2hXYXRlck1hcmsobWF4KHByb3BvcnRpb25hbEJ5dGVzLCBt
X21pbkJ5dGVzUGVyQ3ljbGUpKTsKICAgICB9CisgICAgbV9jb2xsZWN0aW9uVHlwZSA9IE5vQ29s
bGVjdGlvbjsKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19FTkQoKTsKIAogICAgICgqbV9hY3Rpdml0
eUNhbGxiYWNrKSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MTA5ODA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzgsNiArMTM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBn
ZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJvb3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAor
ICAgICAgICBlbnVtIENvbGxlY3Rpb25UeXBlIHsgTm9Db2xsZWN0aW9uLCBOb3JtYWxDb2xsZWN0
aW9uLCBCZXJzZXJrZXJDb2xsZWN0aW9uIH07CisgICAgICAgIENvbGxlY3Rpb25UeXBlIGNvbGxl
Y3Rpb25UeXBlKCkgeyByZXR1cm4gbV9jb2xsZWN0aW9uVHlwZTsgfQorCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE4MSw3ICsxODQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiAgICAgICAg
IAogICAgICAgICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2VlcCB9OwotICAg
ICAgICB2b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOworICAgICAgICB2b2lkIGNvbGxlY3QoU3dl
ZXBUb2dnbGUsIENvbGxlY3Rpb25UeXBlKTsKICAgICAgICAgdm9pZCBzaHJpbmsoKTsKICAgICAg
ICAgdm9pZCByZWxlYXNlRnJlZUJsb2NrcygpOwogICAgICAgICB2b2lkIHN3ZWVwKCk7CkBAIC0y
MzYsNiArMjM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0Nv
bGxlY3Q7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CisgICAgICAgIENv
bGxlY3Rpb25UeXBlIG1fY29sbGVjdGlvblR5cGU7CiAgICAgfTsKIAogICAgIGJvb2wgSGVhcDo6
aXNCdXN5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAkocmV2aXNpb24gMTA5ODA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB2
b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAotICAgIG1faGVhcC0+Y29sbGVjdChIZWFwOjpEb05vdFN3ZWVw
KTsKKyAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RTd2VlcCwgSGVhcDo6Tm9ybWFsQ29s
bGVjdGlvbik7CiAgICAgCiAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAxMDk4MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksMTMgKzQ5LDI1IEBAIHZvaWQgRXhlY3V0YWJsZUJhc2U6
OmRlc3Ryb3koSlNDZWxsKiBjZWwKIAogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFy
Q29kZSgpCiB7CisgICAgY2xlYXJDb2RlRm9yQ2FsbCgpOworICAgIGNsZWFyQ29kZUZvckNvbnN0
cnVjdCgpOworfQorCitpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlRm9yQ2Fs
bCgpCit7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBtX2ppdENvZGVGb3JDYWxsLmNsZWFyKCk7Ci0g
ICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0LmNsZWFyKCk7CiAgICAgbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICNlbmRp
ZgogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElM
RUQ7Cit9CisKK2lubGluZSB2b2lkIEV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVGb3JDb25zdHJ1
Y3QoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0LmNsZWFy
KCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKTsKKyNlbmRpZgogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9
IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKIH0KIApAQCAtNjM4LDYgKzY1MCwyNyBAQCB2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0K
IAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlT2ZLaW5kKENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKK3sKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgeworI2lm
IEVOQUJMRShKSVQpCisgICAgICAgIC8vIFRoaXMgZmlyc3QgY2hlY2tzIGlzIHRvIGhhbmRsZSB0
aGUgcmFyZSBjYXNlIHdoZXJlCisgICAgICAgIC8vIHdlIGFyZSB0cnlpbmcgdG8gZXZpY3QgY29k
ZSBmb3IgYSBmdW5jdGlvbiBkdXJpbmcgaXRzCisgICAgICAgIC8vIGNvZGVnZW4uCisgICAgICAg
IGlmICghbV9qaXRDb2RlRm9yQ2FsbCAmJiBtX2NvZGVCbG9ja0ZvckNhbGwpCisgICAgICAgICAg
ICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgY2xlYXJDb2RlRm9yQ2FsbCgpOworICAgIH0gZWxz
ZSBpZiAoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAg
ICAgaWYgKCFtX2ppdENvZGVGb3JDb25zdHJ1Y3QgJiYgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qp
CisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgY2xlYXJDb2RlRm9yQ29uc3Ry
dWN0KCk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUoKQogewogI2lmIEVOQUJMRShKSVQp
CkBAIC02NTksMTUgKzY5MiwyNiBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluYWxpemUo
SlNDZWxsCiAKIGlubGluZSB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKIHsK
KyAgICBjbGVhckNvZGVGb3JDYWxsKCk7CisgICAgY2xlYXJDb2RlRm9yQ29uc3RydWN0KCk7Cit9
CisKK2lubGluZSB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlRm9yQ2FsbCgpCit7
CiAgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbCkgewogICAgICAgICBtX2NvZGVCbG9ja0ZvckNh
bGwtPmNsZWFyRXZhbENhY2hlKCk7CiAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVhcigp
OwotICAgIH0KKyAgICB9IAorICAgIEJhc2U6OmNsZWFyQ29kZUZvckNhbGwoKTsKK30KKworaW5s
aW5lIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGVGb3JDb25zdHJ1Y3QoKQorewog
ICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkgewogICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+Y2xlYXJFdmFsQ2FjaGUoKTsKICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuY2xlYXIoKTsKLSAgICB9Ci0gICAgQmFzZTo6Y2xlYXJDb2RlKCk7CisgICAgfSAKKyAg
ICBCYXNlOjpjbGVhckNvZGVGb3JDb25zdHJ1Y3QoKTsKIH0KIAogdm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OnVubGlua0NhbGxzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDEwOTgwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYgKzE3Niw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2s7CiAjZW5kaWYKICAgICAgICAgdm9pZCBjbGVhckNv
ZGUoKTsKKyAgICAgICAgdm9pZCBjbGVhckNvZGVGb3JDYWxsKCk7CisgICAgICAgIHZvaWQgY2xl
YXJDb2RlRm9yQ29uc3RydWN0KCk7CiAgICAgfTsKIAogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFi
bGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewpAQCAtNjM4LDYgKzY0MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7
IHJldHVybiBtX3N5bWJvbFRhYmxlOyB9CiAKICAgICAgICAgdm9pZCBkaXNjYXJkQ29kZSgpOwor
ICAgICAgICB2b2lkIGRpc2NhcmRDb2RlT2ZLaW5kKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwog
ICAgICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAgICAgICAgIHN0YXRpYyBGdW5jdGlvbkV4ZWN1dGFibGUqIGZyb21HbG9iYWxDb2RlKGNvbnN0
IElkZW50aWZpZXImLCBFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBK
U09iamVjdCoqIGV4Y2VwdGlvbik7CiAgICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG8pCkBAIC02NTEsNiArNjU0LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgY2xlYXJDb2RlKCk7CisgICAgICAgIHZv
aWQgY2xlYXJDb2RlRm9yQ2FsbCgpOworICAgICAgICB2b2lkIGNsZWFyQ29kZUZvckNvbnN0cnVj
dCgpOwogICAgICAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKIAogICAgICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130667</attachid>
            <date>2012-03-07 12:21:46 -0800</date>
            <delta_ts>2012-03-29 15:25:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80330-20120307122145.patch</filename>
            <type>text/plain</type>
            <size>11213</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTQ0M2I2ZTExM2ZkZDkyMmU1ODkwNzQwNTFlYmFjYzhkYzVkOTExLi45ZTNhOTI2ZDM4Mzk1NjI0
MTg0MzcyYTJiYzYwZDEzNTVmOWUzMTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxMi0wMy0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkgdG8g
YmUgbGVzcyBleHBlbnNpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCBvbiB0aGUgSlMgYmVu
Y2htYXJrcyB3ZSB0cmFjay4gSXQncyBtb3N0bHkgdG8gaW1wcm92ZSBwYWdlIAorICAgICAgICBs
b2FkIHBlcmZvcm1hbmNlLCB3aGljaCBjdXJyZW50bHkgZG9lcyBhdCBsZWFzdCBhIGNvdXBsZSBm
dWxsIEdDcyBwZXIgbmF2aWdhdGlvbi4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6OmRpc2NhcmRBbGxDb21waWxlZENvZGUpOiBSZW5hbWUgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnMgdG8gZGlzY2FyZEFsbENvbXBpbGVkQ29kZSAKKyAgICAgICAgYmVjYXVz
ZSB0aGUgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSByZWNvbXBpbGUgYW55dGhpbmcgKGFuZCBu
ZXZlciBkaWQpOyBpdCBzaW1wbHkgdGhyb3dzIGNvZGUKKyAgICAgICAgYXdheSBmb3IgaXQgdG8g
YmUgcmVjb21waWxlZCBsYXRlciBpZiB3ZSBkZXRlcm1pbmUgd2Ugc2hvdWxkIGRvIHNvLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjphZGRGdW5jdGlvbkV4ZWN1dGFibGUpOiBBZGRzIGEgbmV3bHkgY3Jl
YXRlZCBGdW5jdGlvbkV4ZWN1dGFibGUgdG8gdGhlIEhlYXAncyBsaXN0LgorICAgICAgICAoSlND
OjpIZWFwOjpyZW1vdmVGdW5jdGlvbkV4ZWN1dGFibGUpOiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQg
RnVuY3Rpb25FeGVjdXRhYmxlIGZyb20gdGhlIEhlYXAncyBsaXN0LgorICAgICAgICAqIGhlYXAv
SGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhlYXApOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5jcHA6IEFkZGVkIG5leHQgYW5kIHByZXYgZmllbGRzIHRvIEZ1bmN0aW9u
RXhlY3V0YWJsZXMgc28gdGhhdCB0aGV5IGNhbiAKKyAgICAgICAgYmUgdXNlZCBpbiBEb3VibHlM
aW5rZWRMaXN0cy4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmFsaXplKTog
UmVtb3ZlcyB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlIGZyb20gdGhlIEhlYXAncyBsaXN0LgorICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxl
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOiBBZGRzIHRoZSBG
dW5jdGlvbkV4ZWN1dGFibGUgdG8gdGhlIEhlYXAncyBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcDogUmVtb3ZlIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zLCBhcyBpdCdz
IHRoZSBIZWFwJ3Mgam9iIHRvIG93biBhbmQgbWFuYWdlIAorICAgICAgICB0aGUgbGlzdCBvZiBG
dW5jdGlvbkV4ZWN1dGFibGVzLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6Cisg
ICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFtaWNHbG9i
YWxPYmplY3RTY29wZSk6IFVzZSB0aGUgbmV3IGRpc2NhcmRBbGxDb21waWxlZENvZGUuCisKIDIw
MTItMDMtMDYgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBHQ0FjdGl2aXR5Q2FsbGJhY2sgdGltZXIgc2hvdWxkIHZhcnkgd2l0aCB0aGUgbGVuZ3Ro
IG9mIHRoZSBwcmV2aW91cyBHQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBh
NWQ0YTA2M2ZiMWIxZWVkZmU2Y2ZkNjU4NjBmMTFhZGU3MzZiZjA0Li5kNTVhYWM4MTI2YjE4YWJh
YTUwMTI0ZTg4MmMzZjhhOTJkNWZhYzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cApAQCAtNzY0LDEyICs3NjQsMjIgQEAgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IEhlYXA6Om9i
amVjdFR5cGVDb3VudHMoKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLmZvckVhY2hDZWxsPFJl
Y29yZFR5cGU+KCk7CiB9CiAKK3ZvaWQgSGVhcDo6ZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpCit7
CisgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIHJlY29t
cGlsZSwgc2luY2Ugd2UnbGwgZW5kCisgICAgLy8gdXAgdGhyb3dpbmcgYXdheSBjb2RlIHRoYXQg
aXMgbGl2ZSBvbiB0aGUgc3RhY2suCisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmR5bmFtaWNH
bG9iYWxPYmplY3QpOworICAgIAorICAgIGZvciAoRnVuY3Rpb25FeGVjdXRhYmxlKiBjdXJyZW50
ID0gbV9mdW5jdGlvbnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgp
KQorICAgICAgICBjdXJyZW50LT5kaXNjYXJkQ29kZSgpOworfQorCiB2b2lkIEhlYXA6OmNvbGxl
Y3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKCFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCi0gICAg
ICAgIG1fZ2xvYmFsRGF0YS0+cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKKyAgICAgICAgZGlz
Y2FyZEFsbENvbXBpbGVkQ29kZSgpOwogCiAgICAgY29sbGVjdChEb1N3ZWVwKTsKIH0KQEAgLTky
NCw0ICs5MzQsMTQgQEAgdm9pZCBIZWFwOjpGaW5hbGl6ZXJPd25lcjo6ZmluYWxpemUoSGFuZGxl
PFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKICAgICBmaW5hbGl6ZXIod2Vhay5nZXQo
KSk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkRnVuY3Rpb25FeGVjdXRhYmxlKEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSkKK3sKKyAgICBtX2Z1bmN0aW9ucy5hcHBlbmQoZXhlY3V0YWJsZSk7
Cit9CisKK3ZvaWQgSGVhcDo6cmVtb3ZlRnVuY3Rpb25FeGVjdXRhYmxlKEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSkKK3sKKyAgICBtX2Z1bmN0aW9ucy5yZW1vdmUoZXhlY3V0YWJsZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4
IDA5YTk1ODgyYjhlNjdmMTI5NjgxYmZlYWRhYjFjYjA3M2Q5NmE0MjcuLmQ0NGQyM2Y1OGFmODMz
NjM2ZDUyOTQ2OGQwZTQ4ZWVmOGMwMzFiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgK
QEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb3BpZWRTcGFj
ZTsKICAgICBjbGFzcyBDb2RlQmxvY2s7CisgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwog
ICAgIGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFjazsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7
CiAgICAgY2xhc3MgSGVhcDsKQEAgLTEwNSw2ICsxMDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB0eXBlZGVmIHZvaWQgKCpGaW5hbGl6ZXIpKEpTQ2VsbCopOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOworICAg
ICAgICB2b2lkIGFkZEZ1bmN0aW9uRXhlY3V0YWJsZShGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAg
ICAgICAgdm9pZCByZW1vdmVGdW5jdGlvbkV4ZWN1dGFibGUoRnVuY3Rpb25FeGVjdXRhYmxlKik7
CiAKICAgICAgICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xs
ZWN0ID0gdHJ1ZTsgfQogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3RBbGxH
YXJiYWdlKCk7CkBAIC0xNDAsNiArMTQzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
ZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0dXJuIG1fbGFzdEdDTGVuZ3RoOyB9CiAKKyAgICAg
ICAgdm9pZCBkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCk7CisKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwpAQCAtMjM5LDYgKzI0NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogICAgICAgICBkb3VibGUgbV9sYXN0R0NM
ZW5ndGg7CisKKyAgICAgICAgRG91Ymx5TGlua2VkTGlzdDxGdW5jdGlvbkV4ZWN1dGFibGU+IG1f
ZnVuY3Rpb25zOwogICAgIH07CiAKICAgICBib29sIEhlYXA6OmlzQnVzeSgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IGVhMGI0MmJlZmFkMGNh
MDJhZWI1MDc4OTNkZTA5YzEwYjJiNDliYTkuLmUxNmUyODYwZWQ2ZGYyNTVhNjA4MDNjMTJmMjkw
ODBjYzc1MTA0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCkBAIC0xNDYsNiArMTQ2LDggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBJZGVudGlmaWUKICAgICAs
IG1fbmFtZShuYW1lKQogICAgICwgbV9pbmZlcnJlZE5hbWUoaW5mZXJyZWROYW1lLmlzTnVsbCgp
ID8gZ2xvYmFsRGF0YS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5h
bWUpCiAgICAgLCBtX3N5bWJvbFRhYmxlKDApCisgICAgLCBtX25leHQoMCkKKyAgICAsIG1fcHJl
digwKQogewogfQogCkBAIC0xNTcsNiArMTU5LDggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5j
dGlvbkV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLAog
ICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX2luZmVycmVkTmFtZShpbmZlcnJlZE5hbWUuaXNO
dWxsKCkgPyBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
IDogaW5mZXJyZWROYW1lKQogICAgICwgbV9zeW1ib2xUYWJsZSgwKQorICAgICwgbV9uZXh0KDAp
CisgICAgLCBtX3ByZXYoMCkKIHsKIH0KIApAQCAtNjU0LDcgKzY1OCw5IEBAIHZvaWQgRnVuY3Rp
b25FeGVjdXRhYmxlOjpkaXNjYXJkQ29kZSgpCiAKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpm
aW5hbGl6ZShKU0NlbGwqIGNlbGwpCiB7Ci0gICAganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNlbGwpLT5jbGVhckNvZGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CisgICAgSGVhcDo6aGVhcChleGVj
dXRhYmxlKS0+cmVtb3ZlRnVuY3Rpb25FeGVjdXRhYmxlKGV4ZWN1dGFibGUpOworICAgIGV4ZWN1
dGFibGUtPmNsZWFyQ29kZSgpOwogfQogCiBpbmxpbmUgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmNsZWFyQ29kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgK
aW5kZXggMzA2ZmVjZjkxYTM0Y2FiMzFhNjNiN2Y0NDI4NTgxNTY0ZWJjZDQwOC4uYjkzNmIxZTQ5
ZTIyODRiYmZmNTgzMjdlNjE2NzJlNThhMDZkZGU3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaApAQCAtNDYzLDkgKzQ2MywxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsK
ICAgICB9OwogCi0gICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4
ZWN1dGFibGUgeworICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZSA6IHB1YmxpYyBTY3JpcHRF
eGVjdXRhYmxlLCBwdWJsaWMgRG91Ymx5TGlua2VkTGlzdE5vZGU8RnVuY3Rpb25FeGVjdXRhYmxl
PiB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEb3VibHlMaW5rZWRMaXN0
Tm9kZTxGdW5jdGlvbkV4ZWN1dGFibGU+OwogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBT
Y3JpcHRFeGVjdXRhYmxlIEJhc2U7CiAKQEAgLTQ3Myw2ICs0NzQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgewogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25FeGVjdXRhYmxlPigqZXhlYy0+
aGVhcCgpKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGV4ZWMsIG5hbWUsIGluZmVycmVkTmFtZSwgc291
cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMsIHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0KTsK
ICAgICAgICAgICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmFtZSwgZmlyc3RMaW5lLCBsYXN0TGluZSk7CisgICAgICAgICAgICBleGVjLT5nbG9iYWxE
YXRhKCkuaGVhcC5hZGRGdW5jdGlvbkV4ZWN1dGFibGUoZXhlY3V0YWJsZSk7CiAgICAgICAgICAg
ICBleGVjLT5nbG9iYWxEYXRhKCkuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJsZSwgJmZpbmFs
aXplKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9CkBAIC00ODEs
NiArNDgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1
bmN0aW9uRXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgRnVuY3Rpb25FeGVjdXRhYmxlKGds
b2JhbERhdGEsIG5hbWUsIGluZmVycmVkTmFtZSwgc291cmNlLCBmb3JjZVVzZXNBcmd1bWVudHMs
IHBhcmFtZXRlcnMsIGlzSW5TdHJpY3RDb250ZXh0KTsKICAgICAgICAgICAgIGV4ZWN1dGFibGUt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEsIG5hbWUsIGZpcnN0TGluZSwgbGFzdExpbmUpOwor
ICAgICAgICAgICAgZ2xvYmFsRGF0YS5oZWFwLmFkZEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjdXRh
YmxlKTsKICAgICAgICAgICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGaW5hbGl6ZXIoZXhlY3V0YWJs
ZSwgJmZpbmFsaXplKTsKICAgICAgICAgICAgIHJldHVybiBleGVjdXRhYmxlOwogICAgICAgICB9
CkBAIC02ODgsNiArNjkxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIElkZW50aWZpZXIg
bV9pbmZlcnJlZE5hbWU7CiAgICAgICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9uYW1lVmFs
dWU7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOworICAgICAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIG1fbmV4dDsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBt
X3ByZXY7CiAgICAgfTsKIAogICAgIGlubGluZSBGdW5jdGlvbkV4ZWN1dGFibGUqIEpTRnVuY3Rp
b246OmpzRXhlY3V0YWJsZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCBmMTM4ZTc1ZmJjODBhZjA4ZDU2NTk3NGM2MjdjMjQ1
ZDlhYThhNWNlLi41OTYzZjA3ZDdlZGU4MzcwNWI3OGY3NzgxMTEzYzc3OWYwNmE1NjViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAgLTY4
LDI3ICs2OCw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKLW5hbWVzcGFjZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBKU0M7Ci0KLWNsYXNzIFJlY29tcGlsZXIgOiBwdWJsaWMgTWFya2VkQmxv
Y2s6OlZvaWRGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7
Ci19OwotCi1pbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkK
LXsKLSAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpzX2luZm8pKQotICAgICAg
ICByZXR1cm47Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGNlbGwpOwot
ICAgIGlmICghZnVuY3Rpb24tPmV4ZWN1dGFibGUoKSB8fCBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgp
LT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgZnVuY3Rpb24tPmpzRXhl
Y3V0YWJsZSgpLT5kaXNjYXJkQ29kZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZQotCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheUNvbnN0cnVjdG9yVGFibGU7
CkBAIC00NDMsMTUgKzQyMiw2IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShF
eGVjU3RhdGUqIGV4ZWMpCiAjZW5kaWYKIH0KIAotdm9pZCBKU0dsb2JhbERhdGE6OnJlY29tcGls
ZUFsbEpTRnVuY3Rpb25zKCkKLXsKLSAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0
J3Mgbm90IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKLSAgICAvLyB1cCB0aHJv
d2luZyBhd2F5IGNvZGUgdGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KLSAgICBBU1NFUlQoIWR5
bmFtaWNHbG9iYWxPYmplY3QpOwotICAgIAotICAgIGhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNo
Q2VsbDxSZWNvbXBpbGVyPigpOwotfQotCiBzdHJ1Y3QgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxl
ciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewogICAgIEhhc2hTZXQ8RnVuY3Rp
b25FeGVjdXRhYmxlKj4gY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zOwogICAgIHZvaWQgb3Bl
cmF0b3IoKShKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCmluZGV4IGFjYmNlZTgxNjlhOTJmNzJmZmIwMWIyOWVlMWEzMTNlODNlYTAw
ZDcuLmJmMDU2ZDEwNTc0NDZiMmQ3YTQxODkzYzYwYjJhYmE3OGQ3NGZlMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCkBAIC0zMjQsNyArMzI0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3RhcnRT
YW1wbGluZygpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0b3BTYW1wbGluZygp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0
ZSogZXhlYyk7Ci0gICAgICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKKyAgICAg
ICAgdm9pZCBkaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCk7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBy
ZWdFeHBDYWNoZSgpIHsgcmV0dXJuIG1fcmVnRXhwQ2FjaGU7IH0KICNpZiBFTkFCTEUoUkVHRVhQ
X1RSQUNJTkcpCiAgICAgICAgIHZvaWQgYWRkUmVnRXhwVG9UcmFjZShQYXNzUmVmUHRyPFJlZ0V4
cD4gcmVnRXhwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAppbmRleCA4ZDM5NzU4NDgwODM1YmQ2ZmI0YjczYjk5YmVlYTg3MzYxZjI4ZDY2
Li5kZGFmMjMzNWQwZTdmYzYxYzU5ZGQ3YjYxYmM4NWQ1MTNiNjIzYTM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC00NjAsNyAr
NDYwLDcgQEAgRHluYW1pY0dsb2JhbE9iamVjdFNjb3BlOjpEeW5hbWljR2xvYmFsT2JqZWN0U2Nv
cGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0cKICAgICBpZiAoIW1fZHluYW1pY0dsb2Jh
bE9iamVjdFNsb3QpIHsKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBpZiAoRXhlY3V0
YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpKQotICAgICAgICAgICAgZ2xvYmFs
RGF0YS5yZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5o
ZWFwLmRpc2NhcmRBbGxDb21waWxlZENvZGUoKTsKICNlbmRpZgogCiAgICAgICAgIG1fZHluYW1p
Y0dsb2JhbE9iamVjdFNsb3QgPSBkeW5hbWljR2xvYmFsT2JqZWN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134681</attachid>
            <date>2012-03-29 15:25:34 -0700</date>
            <delta_ts>2012-03-29 17:36:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80330-20120329152533.patch</filename>
            <type>text/plain</type>
            <size>11214</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NzA0YWIyNjE3NjQ5ZmVlOTJiNGY2YmUyNWMxZDQ1MTgzODkyZTI3Li42MTliNzBkNzNiYmEzZWJk
ZjY3ZWE0NWJhYjE0NDVhYTgyMGIyYTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxMi0wMy0yOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkgdG8g
YmUgbGVzcyBleHBlbnNpdmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgwMzMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgcGVyZm9ybWFuY2UgbmV1dHJhbCBvbiB0aGUgSlMgYmVu
Y2htYXJrcyB3ZSB0cmFjay4gSXQncyBtb3N0bHkgdG8gaW1wcm92ZSBwYWdlIAorICAgICAgICBs
b2FkIHBlcmZvcm1hbmNlLCB3aGljaCBjdXJyZW50bHkgZG9lcyBhdCBsZWFzdCBhIGNvdXBsZSBm
dWxsIEdDcyBwZXIgbmF2aWdhdGlvbi4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6OmRpc2NhcmRBbGxDb21waWxlZENvZGUpOiBSZW5hbWUgcmVjb21waWxl
QWxsSlNGdW5jdGlvbnMgdG8gZGlzY2FyZEFsbENvbXBpbGVkQ29kZSAKKyAgICAgICAgYmVjYXVz
ZSB0aGUgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSByZWNvbXBpbGUgYW55dGhpbmcgKGFuZCBu
ZXZlciBkaWQpOyBpdCBzaW1wbHkgdGhyb3dzIGNvZGUKKyAgICAgICAgYXdheSBmb3IgaXQgdG8g
YmUgcmVjb21waWxlZCBsYXRlciBpZiB3ZSBkZXRlcm1pbmUgd2Ugc2hvdWxkIGRvIHNvLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2UpOgorICAg
ICAgICAoSlNDOjpIZWFwOjphZGRGdW5jdGlvbkV4ZWN1dGFibGUpOiBBZGRzIGEgbmV3bHkgY3Jl
YXRlZCBGdW5jdGlvbkV4ZWN1dGFibGUgdG8gdGhlIEhlYXAncyBsaXN0LgorICAgICAgICAoSlND
OjpIZWFwOjpyZW1vdmVGdW5jdGlvbkV4ZWN1dGFibGUpOiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQg
RnVuY3Rpb25FeGVjdXRhYmxlIGZyb20gdGhlIEhlYXAncyBsaXN0LgorICAgICAgICAqIGhlYXAv
SGVhcC5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEhlYXApOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5jcHA6IEFkZGVkIG5leHQgYW5kIHByZXYgZmllbGRzIHRvIEZ1bmN0aW9u
RXhlY3V0YWJsZXMgc28gdGhhdCB0aGV5IGNhbiAKKyAgICAgICAgYmUgdXNlZCBpbiBEb3VibHlM
aW5rZWRMaXN0cy4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4
ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmFsaXplKTog
UmVtb3ZlcyB0aGUgRnVuY3Rpb25FeGVjdXRhYmxlIGZyb20gdGhlIEhlYXAncyBsaXN0LgorICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoRnVuY3Rpb25FeGVjdXRhYmxl
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGUpOiBBZGRzIHRoZSBG
dW5jdGlvbkV4ZWN1dGFibGUgdG8gdGhlIEhlYXAncyBsaXN0LgorICAgICAgICAqIHJ1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcDogUmVtb3ZlIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zLCBhcyBpdCdz
IHRoZSBIZWFwJ3Mgam9iIHRvIG93biBhbmQgbWFuYWdlIAorICAgICAgICB0aGUgbGlzdCBvZiBG
dW5jdGlvbkV4ZWN1dGFibGVzLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6Cisg
ICAgICAgIChKU0dsb2JhbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGU6OkR5bmFtaWNHbG9i
YWxPYmplY3RTY29wZSk6IFVzZSB0aGUgbmV3IGRpc2NhcmRBbGxDb21waWxlZENvZGUuCisKIDIw
MTItMDMtMjkgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQnVpbGQgZml4IGZvciAhRU5BQkxFKFlBUlJfSklUKSBhZnRlciByMTEyNDU0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCA2MjQxZmIzZGYzYjMxZTk4MjU0ZmJiYmUwNDA0
ZjVjNjBmMGEzMTQ5Li5jNTRiYTc3YjZlNGZiYTkzMjZkY2ViOTFlNTU1YWJiNjRmMDJiZjcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNzY1LDEyICs3NjUsMjIgQEAgUGFz
c093blB0cjxUeXBlQ291bnRTZXQ+IEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQogICAgIHJldHVy
biBtX29iamVjdFNwYWNlLmZvckVhY2hDZWxsPFJlY29yZFR5cGU+KCk7CiB9CiAKK3ZvaWQgSGVh
cDo6ZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpCit7CisgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBy
dW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIHJlY29tcGlsZSwgc2luY2Ugd2UnbGwgZW5kCisgICAg
Ly8gdXAgdGhyb3dpbmcgYXdheSBjb2RlIHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCisgICAg
QVNTRVJUKCFtX2dsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpOworICAgIAorICAgIGZv
ciAoRnVuY3Rpb25FeGVjdXRhYmxlKiBjdXJyZW50ID0gbV9mdW5jdGlvbnMuaGVhZCgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQorICAgICAgICBjdXJyZW50LT5kaXNjYXJk
Q29kZSgpOworfQorCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKIHsKICAgICBpZiAo
IW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtX2dsb2JhbERh
dGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCi0gICAgICAgIG1fZ2xvYmFsRGF0YS0+cmVjb21waWxl
QWxsSlNGdW5jdGlvbnMoKTsKKyAgICAgICAgZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpOwogCiAg
ICAgY29sbGVjdChEb1N3ZWVwKTsKIH0KQEAgLTkyNSw0ICs5MzUsMTQgQEAgdm9pZCBIZWFwOjpG
aW5hbGl6ZXJPd25lcjo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29u
dGV4dCkKICAgICBmaW5hbGl6ZXIod2Vhay5nZXQoKSk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkRnVu
Y3Rpb25FeGVjdXRhYmxlKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKK3sKKyAgICBt
X2Z1bmN0aW9ucy5hcHBlbmQoZXhlY3V0YWJsZSk7Cit9CisKK3ZvaWQgSGVhcDo6cmVtb3ZlRnVu
Y3Rpb25FeGVjdXRhYmxlKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKK3sKKyAgICBt
X2Z1bmN0aW9ucy5yZW1vdmUoZXhlY3V0YWJsZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IDAyMzRmMjc0ZDVlMDdlMThhNDExNjQ1NjM4
ZTk4OWZhOWExNDlkMmYuLmM3OGM4NTYyOGExNGRjN2FmN2Y5NWQ3NTg3MDZkMDZkZGMwZDFjYmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBDb3BpZWRTcGFjZTsKICAgICBjbGFzcyBDb2RlQmxvY2s7Cisg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIEdDQWN0aXZpdHlDYWxsYmFj
azsKICAgICBjbGFzcyBHbG9iYWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgSGVhcDsKQEAgLTEwNSw2
ICsxMDYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIHZvaWQgKCpGaW5h
bGl6ZXIpKEpTQ2VsbCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEZpbmFs
aXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOworICAgICAgICB2b2lkIGFkZEZ1bmN0aW9uRXhlY3V0
YWJsZShGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAgICAgdm9pZCByZW1vdmVGdW5jdGlvbkV4
ZWN1dGFibGUoRnVuY3Rpb25FeGVjdXRhYmxlKik7CiAKICAgICAgICAgdm9pZCBub3RpZnlJc1Nh
ZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3RBbGxHYXJiYWdlKCk7CkBAIC0xNDAsNiArMTQzLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZG91YmxlIGxhc3RHQ0xlbmd0aCgpIHsgcmV0
dXJuIG1fbGFzdEdDTGVuZ3RoOyB9CiAKKyAgICAgICAgdm9pZCBkaXNjYXJkQWxsQ29tcGlsZWRD
b2RlKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMjQwLDYgKzI0
NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOwogICAgICAgICBkb3VibGUgbV9sYXN0R0NMZW5ndGg7CisKKyAgICAgICAgRG91Ymx5TGlu
a2VkTGlzdDxGdW5jdGlvbkV4ZWN1dGFibGU+IG1fZnVuY3Rpb25zOwogICAgIH07CiAKICAgICBp
bmxpbmUgYm9vbCBIZWFwOjpzaG91bGRDb2xsZWN0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggZWE0MDQ0N2U0NWU3MjdlNGFiZmUzNTRkMzNj
Y2IxMzlhY2U4YWEyYy4uOTM0NTMzYzQ2ZGMyYmRhMzA0NGQxN2Y1YTFlZTUyMDJhOTVkYTA4OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKQEAgLTE0
Niw2ICsxNDYsOCBAQCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IElkZW50aWZpZQogICAgICwgbV9uYW1lKG5hbWUp
CiAgICAgLCBtX2luZmVycmVkTmFtZShpbmZlcnJlZE5hbWUuaXNOdWxsKCkgPyBnbG9iYWxEYXRh
LnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciA6IGluZmVycmVkTmFtZSkKICAgICAsIG1f
c3ltYm9sVGFibGUoMCkKKyAgICAsIG1fbmV4dCgwKQorICAgICwgbV9wcmV2KDApCiB7CiB9CiAK
QEAgLTE1Nyw2ICsxNTksOCBAQCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJs
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsCiAgICAgLCBtX25hbWUo
bmFtZSkKICAgICAsIG1faW5mZXJyZWROYW1lKGluZmVycmVkTmFtZS5pc051bGwoKSA/IGV4ZWMt
Pmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIgOiBpbmZlcnJlZE5h
bWUpCiAgICAgLCBtX3N5bWJvbFRhYmxlKDApCisgICAgLCBtX25leHQoMCkKKyAgICAsIG1fcHJl
digwKQogewogfQogCkBAIC02NTQsNyArNjU4LDkgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmRpc2NhcmRDb2RlKCkKIAogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmFsaXplKEpTQ2Vs
bCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPmNsZWFy
Q29kZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBIZWFwOjpoZWFwKGV4ZWN1dGFibGUpLT5yZW1v
dmVGdW5jdGlvbkV4ZWN1dGFibGUoZXhlY3V0YWJsZSk7CisgICAgZXhlY3V0YWJsZS0+Y2xlYXJD
b2RlKCk7CiB9CiAKIGlubGluZSB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCAxYWU0NGI3
ZWFmYmVlOGNlYjk1MmI4YTkwZjc1YmUzMTJkOWY4MGM0Li5kODIxNjQ2YTg0MDQ5ODdiMmIyOGU4
MzI1OTVmN2JiNGE2ZWFjMGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCkBAIC00NjMsOSArNDYzLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBP
d25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOwogICAgIH07CiAKLSAg
ICBjbGFzcyBGdW5jdGlvbkV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7Cisg
ICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUsIHB1
YmxpYyBEb3VibHlMaW5rZWRMaXN0Tm9kZTxGdW5jdGlvbkV4ZWN1dGFibGU+IHsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8RnVu
Y3Rpb25FeGVjdXRhYmxlPjsKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgU2NyaXB0RXhl
Y3V0YWJsZSBCYXNlOwogCkBAIC00NzMsNiArNDc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKmV4ZWMtPmhlYXAoKSkp
IEZ1bmN0aW9uRXhlY3V0YWJsZShleGVjLCBuYW1lLCBpbmZlcnJlZE5hbWUsIHNvdXJjZSwgZm9y
Y2VVc2VzQXJndW1lbnRzLCBwYXJhbWV0ZXJzLCBpc0luU3RyaWN0Q29udGV4dCk7CiAgICAgICAg
ICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIG5hbWUs
IGZpcnN0TGluZSwgbGFzdExpbmUpOworICAgICAgICAgICAgZXhlYy0+Z2xvYmFsRGF0YSgpLmhl
YXAuYWRkRnVuY3Rpb25FeGVjdXRhYmxlKGV4ZWN1dGFibGUpOwogICAgICAgICAgICAgZXhlYy0+
Z2xvYmFsRGF0YSgpLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5hbGl6ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQpAQCAtNDgxLDYgKzQ4Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxGdW5jdGlvbkV4
ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIEZ1bmN0aW9uRXhlY3V0YWJsZShnbG9iYWxEYXRh
LCBuYW1lLCBpbmZlcnJlZE5hbWUsIHNvdXJjZSwgZm9yY2VVc2VzQXJndW1lbnRzLCBwYXJhbWV0
ZXJzLCBpc0luU3RyaWN0Q29udGV4dCk7CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhLCBuYW1lLCBmaXJzdExpbmUsIGxhc3RMaW5lKTsKKyAgICAgICAg
ICAgIGdsb2JhbERhdGEuaGVhcC5hZGRGdW5jdGlvbkV4ZWN1dGFibGUoZXhlY3V0YWJsZSk7CiAg
ICAgICAgICAgICBnbG9iYWxEYXRhLmhlYXAuYWRkRmluYWxpemVyKGV4ZWN1dGFibGUsICZmaW5h
bGl6ZSk7CiAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZTsKICAgICAgICAgfQpAQCAtNjg4
LDYgKzY5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJZGVudGlmaWVyIG1faW5mZXJy
ZWROYW1lOwogICAgICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fbmFtZVZhbHVlOwogICAg
ICAgICBTaGFyZWRTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKKyAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBtX25leHQ7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9wcmV2Owog
ICAgIH07CiAKICAgICBpbmxpbmUgRnVuY3Rpb25FeGVjdXRhYmxlKiBKU0Z1bmN0aW9uOjpqc0V4
ZWN1dGFibGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAKaW5kZXggNmViZDI1YTM1MWJlYzU3OTkwYmJjMzhiNTA3ZTM0OTI3MWQ3NmNi
OS4uOTE3NTZkNjcwOWMzODUwNGIxNDYyZTFjMGU5NGRiMzBlNGFhMmVmYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCkBAIC02OCwyNyArNjgs
NiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCi1uYW1lc3BhY2UgewotCi11c2luZyBuYW1l
c3BhY2UgSlNDOwotCi1jbGFzcyBSZWNvbXBpbGVyIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCopOwotfTsKLQot
aW5saW5lIHZvaWQgUmVjb21waWxlcjo6b3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCi17Ci0gICAg
aWYgKCFjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsK
LSAgICBpZiAoIWZ1bmN0aW9uLT5leGVjdXRhYmxlKCkgfHwgZnVuY3Rpb24tPmV4ZWN1dGFibGUo
KS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZ1bmN0aW9uLT5qc0V4
ZWN1dGFibGUoKS0+ZGlzY2FyZENvZGUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQogbmFtZXNw
YWNlIEpTQyB7CiAKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclRhYmxl
OwpAQCAtNDQzLDE1ICs0MjIsNiBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEo
RXhlY1N0YXRlKiBleGVjKQogI2VuZGlmCiB9CiAKLXZvaWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucygpCi17Ci0gICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBp
dCdzIG5vdCBzYWZlIHRvIHJlY29tcGlsZSwgc2luY2Ugd2UnbGwgZW5kCi0gICAgLy8gdXAgdGhy
b3dpbmcgYXdheSBjb2RlIHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCi0gICAgQVNTRVJUKCFk
eW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICAKLSAgICBoZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFj
aENlbGw8UmVjb21waWxlcj4oKTsKLX0KLQogc3RydWN0IFN0YWNrUHJlc2VydmluZ1JlY29tcGls
ZXIgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKICAgICBIYXNoU2V0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+IGN1cnJlbnRseUV4ZWN1dGluZ0Z1bmN0aW9uczsKICAgICB2b2lkIG9w
ZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAppbmRleCBjYzcwNjk4YTkwMjRhOTc4ZjNkODhiYWM3YmFjYThkNDY0NzRj
YjhhLi4zOWFhNTM3MzllNDg5YTgyNGQ3ZmExMzYxMDljNWVmOTlhY2JjZDUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMzI0LDcgKzMyNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHN0YXJ0
U2FtcGxpbmcoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdG9wU2FtcGxpbmco
KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wU2FtcGxlRGF0YShFeGVjU3Rh
dGUqIGV4ZWMpOwotICAgICAgICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCk7CisgICAg
ICAgIHZvaWQgZGlzY2FyZEFsbENvbXBpbGVkQ29kZSgpOwogICAgICAgICBSZWdFeHBDYWNoZSog
cmVnRXhwQ2FjaGUoKSB7IHJldHVybiBtX3JlZ0V4cENhY2hlOyB9CiAjaWYgRU5BQkxFKFJFR0VY
UF9UUkFDSU5HKQogICAgICAgICB2b2lkIGFkZFJlZ0V4cFRvVHJhY2UoUGFzc1JlZlB0cjxSZWdF
eHA+IHJlZ0V4cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKaW5kZXggOGQzOTc1ODQ4MDgzNWJkNmZiNGI3M2I5OWJlZWE4NzM2MWYyOGQ2
Ni4uZGRhZjIzMzVkMGU3ZmM2MWM1OWRkN2I2MWJjODVkNTEzYjYyM2EzOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtNDYwLDcg
KzQ2MCw3IEBAIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZTo6RHluYW1pY0dsb2JhbE9iamVjdFNj
b3BlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHCiAgICAgaWYgKCFtX2R5bmFtaWNHbG9i
YWxPYmplY3RTbG90KSB7CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAgICAgaWYgKEV4ZWN1
dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKSkKLSAgICAgICAgICAgIGdsb2Jh
bERhdGEucmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKTsKKyAgICAgICAgICAgIGdsb2JhbERhdGEu
aGVhcC5kaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCk7CiAjZW5kaWYKIAogICAgICAgICBtX2R5bmFt
aWNHbG9iYWxPYmplY3RTbG90ID0gZHluYW1pY0dsb2JhbE9iamVjdDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>