<?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>100707</bug_id>
          
          <creation_ts>2012-10-29 15:29:09 -0700</creation_ts>
          <short_desc>[V8] Garbage collection should use opaque roots rather than implicit references</short_desc>
          <delta_ts>2013-01-25 03:57:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>100888</dependson>
          <blocked>100897</blocked>
    
    <blocked>107819</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>pfeldman</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>753804</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-29 15:29:09 -0700</bug_when>
    <thetext>[V8] Garbage collection should use opaque roots rather than implicit references</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753808</commentid>
    <comment_count>1</comment_count>
      <attachid>171325</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-29 15:36:08 -0700</bug_when>
    <thetext>Created attachment 171325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753809</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-29 15:36:44 -0700</bug_when>
    <thetext>You can find the step-by-step construction of this patch in https://github.com/abarth/webkit/compare/master...newgc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753811</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-29 15:38:16 -0700</bug_when>
    <thetext>@pfeldman: One concern I have about this patch is whether it has any interaction with the heap profiler.  Does the WebInspector use the RetainedDOMInfo associated with Node object groups?  No LayoutTests seemed to fail when I removed the RetainedDOMInfo from the object group, but I worry that somehow this functionality isn&apos;t covered by LayoutTests.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754255</commentid>
    <comment_count>4</comment_count>
      <attachid>171325</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-30 05:37:15 -0700</bug_when>
    <thetext>Comment on attachment 171325
Patch

LGTM at a first glance. Will take a detailed look later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754292</commentid>
    <comment_count>5</comment_count>
      <attachid>171325</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-30 06:24:13 -0700</bug_when>
    <thetext>Comment on attachment 171325
Patch

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

The overall approach looks great.

&gt; Source/WebCore/ChangeLog:30
&gt; +        * bindings/scripts/CodeGeneratorV8.pm:

You need to update run-bindings-tests before landing.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:81
&gt; +public:

private

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:152
&gt; +                m_grouper-&gt;keepAlive(wrapper);

I might be wrong: Maybe can you return just after this line?

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:156
&gt; +                m_grouper-&gt;keepAlive(wrapper);

Ditto.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:166
&gt; +// FIXME: This should use opaque GC roots.

Yes, and we want to kill AddImplicitReferences() completely, in a follow-up patch.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:189
&gt; -static Node* rootForGC(Node* node)
&gt; +void* V8GCController::rootForGarbageCollection(Node* node)

I would prefer rootForGC (or opaqueRootForGC) rather than rootForGarbageCollection, as most of other binding code is using GC for GarbageCollection.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:223
&gt; +            m_grouper-&gt;keepAlive(wrapper);

Ditto. Can&apos;t you return just after this line?

&gt; Source/WebCore/bindings/v8/custom/V8NodeListCustom.cpp:63
&gt; +void* V8NodeList::rootForGarbageCollection(void* object, v8::Persistent&lt;v8::Object&gt; wrapper)

wrapper is not used.

BTW, do we need to pass wrapper to rootForGarbageCollection() in the first place?

&gt; Source/WebCore/bindings/v8/custom/V8NodeListCustom.cpp:68
&gt; +    return V8GCController::rootForGarbageCollection(static_cast&lt;DynamicNodeList*&gt;(impl)-&gt;ownerNode());

You need to check if static_cast&lt;DynamicNodeList*&gt;(impl)-&gt;ownerNode() is 0 or not. If 0, you need to return object.

&gt; Source/WebCore/bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:41
&gt; -    Document* emma = impl-&gt;emma();
&gt; -    v8::Persistent&lt;v8::Value&gt; emmaWrapper = store-&gt;domNodeMap().get(emma);
&gt; -    if (!emmaWrapper.IsEmpty())
&gt; -        v8::V8::AddImplicitReferences(wrapper, &amp;emmaWrapper, 1);
&gt; +    return V8GCController::rootForGarbageCollection(impl-&gt;emma());

Is this change correct? Here we are intending to add an implicit reference of not emmaWrapper=&gt;wrapper but wrapper=&gt;emmaWrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754685</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-30 15:00:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 171325 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171325&amp;action=review
&gt; 
&gt; The overall approach looks great.

Thanks!

&gt; &gt; Source/WebCore/ChangeLog:30
&gt; &gt; +        * bindings/scripts/CodeGeneratorV8.pm:
&gt; 
&gt; You need to update run-bindings-tests before landing.

Very true.  Done.

&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:81
&gt; &gt; +public:
&gt; 
&gt; private

Fixed.

&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:152
&gt; &gt; +                m_grouper-&gt;keepAlive(wrapper);
&gt; 
&gt; I might be wrong: Maybe can you return just after this line?

We can today, but that might not be future proof.  Although wrapper won&apos;t be garbage collected, it&apos;s possible that it will share a GC root with another object that isn&apos;t an ActiveDOMObject.

Today, that only happens for nodes, but I wanted to make this work the same way for Nodes and non-Nodes in case someone adds something like that in the future.

&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:156
&gt; &gt; +                m_grouper-&gt;keepAlive(wrapper);
&gt; 
&gt; Ditto.
&gt;
&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:166
&gt; &gt; +// FIXME: This should use opaque GC roots.
&gt; 
&gt; Yes, and we want to kill AddImplicitReferences() completely, in a follow-up patch.

This is the last use of AddImplicitReferences in WebCore.

&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:189
&gt; &gt; -static Node* rootForGC(Node* node)
&gt; &gt; +void* V8GCController::rootForGarbageCollection(Node* node)
&gt; 
&gt; I would prefer rootForGC (or opaqueRootForGC) rather than rootForGarbageCollection, as most of other binding code is using GC for GarbageCollection.

Done.

&gt; &gt; Source/WebCore/bindings/v8/V8GCController.cpp:223
&gt; &gt; +            m_grouper-&gt;keepAlive(wrapper);
&gt; 
&gt; Ditto. Can&apos;t you return just after this line?

For this one, we cannot return early.  The problem is HTMLMediaElement, which will end up both in the libe objects group as well as the node group for all the other nodes in the document.

&gt; &gt; Source/WebCore/bindings/v8/custom/V8NodeListCustom.cpp:63
&gt; &gt; +void* V8NodeList::rootForGarbageCollection(void* object, v8::Persistent&lt;v8::Object&gt; wrapper)
&gt; 
&gt; wrapper is not used.
&gt; 
&gt; BTW, do we need to pass wrapper to rootForGarbageCollection() in the first place?

I meant to use it for ASSERTs, but I forgot.  I&apos;ve added the ASSERTs.

&gt; &gt; Source/WebCore/bindings/v8/custom/V8NodeListCustom.cpp:68
&gt; &gt; +    return V8GCController::rootForGarbageCollection(static_cast&lt;DynamicNodeList*&gt;(impl)-&gt;ownerNode());
&gt; 
&gt; You need to check if static_cast&lt;DynamicNodeList*&gt;(impl)-&gt;ownerNode() is 0 or not. If 0, you need to return object.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:41
&gt; &gt; -    Document* emma = impl-&gt;emma();
&gt; &gt; -    v8::Persistent&lt;v8::Value&gt; emmaWrapper = store-&gt;domNodeMap().get(emma);
&gt; &gt; -    if (!emmaWrapper.IsEmpty())
&gt; &gt; -        v8::V8::AddImplicitReferences(wrapper, &amp;emmaWrapper, 1);
&gt; &gt; +    return V8GCController::rootForGarbageCollection(impl-&gt;emma());
&gt; 
&gt; Is this change correct? Here we are intending to add an implicit reference of not emmaWrapper=&gt;wrapper but wrapper=&gt;emmaWrapper.

I&apos;m not sure I quite understand.  You&apos;re same that the SpeechRecognitionResult should keep the document alive but the document should not keep the SpeechRecognitionResult alive?  That sounds right.

This code in general seems suspect to me.  I need to look more at what the speech code is trying to do.  It&apos;s odd that it needs such special-case treatment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754721</commentid>
    <comment_count>7</comment_count>
      <attachid>171532</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-30 15:26:40 -0700</bug_when>
    <thetext>Created attachment 171532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754726</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-30 15:31:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 171325 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171325&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/bindings/v8/custom/V8SpeechRecognitionResultCustom.cpp:41
&gt; &gt; &gt; -    Document* emma = impl-&gt;emma();
&gt; &gt; &gt; -    v8::Persistent&lt;v8::Value&gt; emmaWrapper = store-&gt;domNodeMap().get(emma);
&gt; &gt; &gt; -    if (!emmaWrapper.IsEmpty())
&gt; &gt; &gt; -        v8::V8::AddImplicitReferences(wrapper, &amp;emmaWrapper, 1);
&gt; &gt; &gt; +    return V8GCController::rootForGarbageCollection(impl-&gt;emma());
&gt; &gt; 
&gt; &gt; Is this change correct? Here we are intending to add an implicit reference of not emmaWrapper=&gt;wrapper but wrapper=&gt;emmaWrapper.
&gt; 
&gt; I&apos;m not sure I quite understand.  You&apos;re same that the SpeechRecognitionResult should keep the document alive but the document should not keep the SpeechRecognitionResult alive?  That sounds right.
&gt; 
&gt; This code in general seems suspect to me.  I need to look more at what the speech code is trying to do.  It&apos;s odd that it needs such special-case treatment.

Re-reading &lt;https://bugs.webkit.org/show_bug.cgi?id=91743&gt;, I now remember the issue.  The issue is that the emma property of SpeechRecognitionResult is a document captive on SpeechRecognitionResult, not the document that&apos;s displayed in the frame.  That means that the SpeechRecognitionResult and the emma Document should live and die together as a group.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754864</commentid>
    <comment_count>9</comment_count>
      <attachid>171532</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-30 18:51:27 -0700</bug_when>
    <thetext>Comment on attachment 171532
Patch

Attachment 171532 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14660073

New failing tests:
animations/suspend-resume-animation-events.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755182</commentid>
    <comment_count>10</comment_count>
      <attachid>171532</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-10-31 05:25:21 -0700</bug_when>
    <thetext>Comment on attachment 171532
Patch

Looks OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755442</commentid>
    <comment_count>11</comment_count>
      <attachid>171532</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 10:33:52 -0700</bug_when>
    <thetext>Comment on attachment 171532
Patch

Clearing flags on attachment: 171532

Committed r133044: &lt;http://trac.webkit.org/changeset/133044&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755443</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 10:33:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755621</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 14:28:46 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 100888</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755646</commentid>
    <comment_count>14</comment_count>
      <attachid>171726</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 14:57:46 -0700</bug_when>
    <thetext>Created attachment 171726
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755648</commentid>
    <comment_count>15</comment_count>
      <attachid>171726</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 14:59:56 -0700</bug_when>
    <thetext>Comment on attachment 171726
Patch for landing

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:213
&gt; +    ASSERT(!wrapper.IsIndependent());

I added this ASSERT.

&gt; Source/WebCore/bindings/v8/V8GCController.cpp:145
&gt; +        if (wrapper.IsIndependent())
&gt; +            return;

I also added this early exist.  There&apos;s no point in trying to group objects that are independent because there&apos;s no point in putting them into groups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755734</commentid>
    <comment_count>16</comment_count>
      <attachid>171726</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 17:05:36 -0700</bug_when>
    <thetext>Comment on attachment 171726
Patch for landing

Rejecting attachment 171726 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/LayoutTests/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/14677306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755771</commentid>
    <comment_count>17</comment_count>
      <attachid>171749</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 18:17:07 -0700</bug_when>
    <thetext>Created attachment 171749
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755806</commentid>
    <comment_count>18</comment_count>
      <attachid>171749</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 19:37:58 -0700</bug_when>
    <thetext>Comment on attachment 171749
Patch for landing

Clearing flags on attachment: 171749

Committed r133113: &lt;http://trac.webkit.org/changeset/133113&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755807</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-31 19:38:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755841</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-10-31 20:48:46 -0700</bug_when>
    <thetext>I think maybe this is/was causing some browser tests to fail; we are going to revert the webkit roll that made this show up downstream ...

http://build.chromium.org/p/chromium.linux/builders/Linux%20%28Precise%29/builds/266/steps/browser_tests/logs/stdio

Annoyingly, it looks like we don&apos;t have any debug testers, so we&apos;re not going to see the dchecks failing on the canaries. I guess we should fix that :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755844</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-31 20:57:56 -0700</bug_when>
    <thetext>Do you mean the first time this patch landed, or the re-landed version with the fix?  The first landed will definitely hit ASSERTs all over the place.  My understanding is that the second version is clean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755856</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-10-31 21:32:00 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Do you mean the first time this patch landed, or the re-landed version with the fix?  The first landed will definitely hit ASSERTs all over the place.  My understanding is that the second version is clean.

first time - r133044.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815392</commentid>
    <comment_count>23</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-01-24 06:09:58 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; @pfeldman: One concern I have about this patch is whether it has any interaction with the heap profiler.  Does the WebInspector use the RetainedDOMInfo associated with Node object groups?  No LayoutTests seemed to fail when I removed the RetainedDOMInfo from the object group, but I worry that somehow this functionality isn&apos;t covered by LayoutTests.  Thanks!

Adam what was the reason for removing RetainedDOMInfo parameter from AddObjectGroup? It broke heap profiler: now each node in a detached dom tree is shown in its own group. There were two types of RetainedDOMInfo:
1) Created for a DOM group with its root node passed as a parameter;
2) Created for DOM nodes that were not part of any DOM group with &gt;1 elements, in which case the node itself was passed as a parameter to RetainedDOMInfo. It seems that when we started to traverse all persistent handles the second case should have been eliminated, but not the first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816095</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-24 19:10:35 -0800</bug_when>
    <thetext>&gt; Adam what was the reason for removing RetainedDOMInfo parameter from AddObjectGroup?

I&apos;m sorry, but I don&apos;t remember.  This patch changed the model for how we do GC grouping.  The issue might have been that we lost the type for the &quot;root&quot; object.  Previously we knew it was a Node* but now we know only that it&apos;s a void*.

I suspect if worked a bit more on the new code we could get the RetainedDOMInfo back.  There weren&apos;t any tests that failed, so I didn&apos;t know if it was needed.

&gt; It broke heap profiler: now each node in a detached dom tree is shown in its own group. There were two types of RetainedDOMInfo:
&gt; 1) Created for a DOM group with its root node passed as a parameter;
&gt; 2) Created for DOM nodes that were not part of any DOM group with &gt;1 elements, in which case the node itself was passed as a parameter to RetainedDOMInfo. It seems that when we started to traverse all persistent handles the second case should have been eliminated, but not the first.

Ok.  Should we open a new bug an try for a fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816097</commentid>
    <comment_count>25</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-24 19:13:15 -0800</bug_when>
    <thetext>Oh, I see bug 107819 is that bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816462</commentid>
    <comment_count>26</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-01-25 03:57:48 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; &gt; Adam what was the reason for removing RetainedDOMInfo parameter from AddObjectGroup?
&gt; 
&gt; I&apos;m sorry, but I don&apos;t remember.  This patch changed the model for how we do GC grouping.  The issue might have been that we lost the type for the &quot;root&quot; object.  Previously we knew it was a Node* but now we know only that it&apos;s a void*.
&gt; 
&gt; I suspect if worked a bit more on the new code we could get the RetainedDOMInfo back.  There weren&apos;t any tests that failed, so I didn&apos;t know if it was needed.
&gt; 
Yes, it is sad that there are no tests for that functionality. I&apos;ll try to write one for it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171325</attachid>
            <date>2012-10-29 15:36:08 -0700</date>
            <delta_ts>2012-10-30 15:26:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100707-20121029153434.patch</filename>
            <type>text/plain</type>
            <size>22703</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNzYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2I0NTRiOGMxYzQ3NmFm
NTFlNWQ4NDFiN2NhYjZjZDkzZWU5ZTNhZC4uMzFjYmExYTU3MzNmZDRlMGViMTM5ZmM5MzFjOWJk
MDM0NzRkYmU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTEwLTI5ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1Y4XSBHYXJiYWdlIGNvbGxl
Y3Rpb24gc2hvdWxkIHVzZSBvcGFxdWUgcm9vdHMgcmF0aGVyIHRoYW4gaW1wbGljaXQgcmVmZXJl
bmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAw
NzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZXBsYWNlcyB2aXNpdERPTVdyYXBwZXIgd2l0aCByb290Rm9yR2FyYmFnZUNvbGxl
Y3Rpb24uIFRoZQorICAgICAgICBmb3JtZXIgdXNlZCB0byBpbmZvcm0gVjggb2YgaW1wbGljaXQg
cmVsYXRpb25zaGlwcyBiZXR3ZWVuIHdyYXBwZXIKKyAgICAgICAgb2JqZWN0cyBvbiBhIHBlci13
cmFwcGVyIGJhc2lzLiBUaGF0IG1lYW50IHRoYXQgd2UgbmVlZGVkIHRvIGtub3cgd2hpY2gKKyAg
ICAgICAgRE9NRGF0YVN0b3JlIGEgZ2l2ZW4gd3JhcHBlciB3YXMgaW4gZHVyaW5nIGdhcmJhZ2Ug
Y29sbGVjdGlvbi4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB3ZSBub3cgdXNlIG9iamVj
dCBncm91cHMgcmF0aGVyIHRoYW4gaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyB0byBpbmZv
cm0gVjggb2YgdGhlc2UgcmVsYXRpb25zaGlwcy4gVGhhdCBoYXMgdHdvIGJlbmVmaXRzOgorCisg
ICAgICAgIDEpIFdlIG5vIGxvbmdlciBuZWVkIHRvIGtub3cgd2hpY2ggRE9NRGF0YVN0b3JlIGEg
d3JhcHBlciBiZWxvbmdzCisgICAgICAgICAgIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBmaW5k
IHRoZSBleGFjdCBzb3VyY2Ugd3JhcHBlciBmb3IgdGhlCisgICAgICAgICAgIGltcGxpY2l0IGNv
bm5lY3Rpb24uCisKKyAgICAgICAgMikgV2UgY2FuIG5vdyBoYW5kbGUgbW9yZSBjb21wbGljYXRl
ZCBpbXBsaWNpdCByZWxhdGlvbnNoaXBzLCBmb3IKKyAgICAgICAgICAgZXhhbXBsZSB3aGVuIHNv
bWUgb2YgdGhlIGludGVydmVuaW5nIG9iamVjdHMgaGF2ZW4ndCBoYWQgdGhlaXIKKyAgICAgICAg
ICAgSmF2YVNjcmlwdCB3cmFwcGVycyBjcmVhdGVkIHlldC4KKworICAgICAgICBUaGlzIHBhdGNo
IGFsc28gdW5sb2NrcyB0byBwYXRocyBvZiBmdXR1cmUgZGV2ZWxvcG1lbnQ6CisgICAgICAgIEEp
IEZpeGluZyB0aGUgcmVtYWluaW5nIGZhaWx1cmVzIGluIGZhc3QvZG9tL2djLTkuaHRtbAorICAg
ICAgICBCKSBFbnVtZXJhdGluZyBET00gd3JhcHBlcnMgZW50aXJlbHkgZnJvbSBWOCByYXRoZXIg
dGhhbiBmcm9tIHRoZQorICAgICAgICAgICBET01XcmFwcGVyTWFwcyAoc28gdGhhdCB3ZSBjYW4g
bW92ZSBtb3JlIG9iamVjdCB0b3dhcmRzIHVzaW5nCisgICAgICAgICAgIEludHJ1c2l2ZURPTVdy
YXBwZXJNYXBzLCB3aGljaCBhcmVuJ3QgZW51bWVyYWJsZSBmcm9tIFdlYkNvcmUpLgorCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChOZWVk
c0N1c3RvbVJvb3RGb3JHYXJiYWdlQ29sbGVjdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVJvb3RG
b3JHYXJiYWdlQ29sbGVjdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChJbXBsaWNpdENvbm5lY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1wbGljaXRDb25uZWN0aW9uOjpJbXBsaWNpdENvbm5lY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1wbGljaXRDb25uZWN0aW9uOjpyb290KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
cGxpY2l0Q29ubmVjdGlvbjo6d3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yPCk6CisgICAgICAgIChXcmFwcGVyR3JvdXBlcik6CisgICAgICAg
IChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6V3JhcHBlckdyb3VwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JhcHBlckdyb3VwZXI6OmFkZFRvR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V3Jh
cHBlckdyb3VwZXI6OmtlZXBBbGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBl
cjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0VmlzaXRvcjo6T2JqZWN0VmlzaXRv
cik6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgor
ICAgICAgICAoT2JqZWN0VmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpWOEdDQ29udHJvbGxl
cjo6cm9vdEZvckdhcmJhZ2VDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVWaXNp
dG9yOjpOb2RlVmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlVmlzaXRvcjo6dmlzaXRO
b2RlV3JhcHBlcik6CisgICAgICAgIChOb2RlVmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpW
OEdDQ29udHJvbGxlcjo6bWFqb3JHQ1Byb2xvZ3VlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OEdDQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChWOEdDQ29udHJv
bGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJUeXBlSW5mbzo6cm9vdEZvckdh
cmJhZ2VDb2xsZWN0aW9uKToKKyAgICAgICAgKFdyYXBwZXJUeXBlSW5mbyk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VjhOb2RlTGlzdDo6cm9vdEZvckdhcmJhZ2VDb2xsZWN0aW9uKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojpyb290Rm9yR2FyYmFnZUNv
bGxlY3Rpb24pOgorCiAyMDEyLTEwLTI4ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBUaGUgc2hhZG93IGVsZW1lbnQgaXMgbm90IHJlcHJvamVjdGVk
IHRvIGEgbmVzdGVkIFNoYWRvd1Jvb3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDM5N2QyYzM4ZTM2MjA0MjdlNmIzZjEw
ZTNhZDgyMTRiZGYwZGZlMjguLjA4MjhlM2ZhYTdhNjUzZTFiOWM3Yjg4NmJlZDcwNDZiODUzOTRm
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtCkBAIC0xODEsNyArMTgxLDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAg
IH0KIH0KIAotc3ViIE5lZWRzVG9WaXNpdERPTVdyYXBwZXIKK3N1YiBOZWVkc0N1c3RvbVJvb3RG
b3JHYXJiYWdlQ29sbGVjdGlvbgogewogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIHJl
dHVybiBHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRkYXRhTm9kZSkgfHwgR2V0Q3VzdG9tSXNSZWFj
aGFibGUoJGRhdGFOb2RlKTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdWIgR2V0Q3VzdG9tSXNSZWFj
aGFibGUKICAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
SXNSZWFjaGFibGUifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3Rv
bUlzUmVhY2hhYmxlIn07CiB9CiAKLXN1YiBHZW5lcmF0ZVZpc2l0RE9NV3JhcHBlcgorc3ViIEdl
bmVyYXRlUm9vdEZvckdhcmJhZ2VDb2xsZWN0aW9uCiB7CiAgICAgbXkgKCRkYXRhTm9kZSwgJGlt
cGxDbGFzc05hbWUpID0gQF87CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBzdWIgR2VuZXJhdGVWaXNp
dERPTVdyYXBwZXIKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotdm9p
ZCBWOCR7aW1wbENsYXNzTmFtZX06OnZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3Jl
LCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCit2b2lk
KiBWOCR7aW1wbENsYXNzTmFtZX06OnJvb3RGb3JHYXJiYWdlQ29sbGVjdGlvbih2b2lkKiBvYmpl
Y3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7CiAgICAgJHtpbXBsQ2xh
c3NOYW1lfSogaW1wbCA9IHN0YXRpY19jYXN0PCR7aW1wbENsYXNzTmFtZX0qPihvYmplY3QpOwog
RU5ECkBAIC0yMTgsNiArMjE4LDggQEAgRU5ECiAgICAgICAgIEdldEdlbmVyYXRlSXNSZWFjaGFi
bGUoJGRhdGFOb2RlKSBlcSAgIkltcGxPd25lck5vZGVSb290IiB8fAogICAgICAgICBHZXRHZW5l
cmF0ZUlzUmVhY2hhYmxlKCRkYXRhTm9kZSkgZXEgICJJbXBsQmFzZVJvb3QiKSB7CiAKKyAgICAg
ICAgJGltcGxJbmNsdWRlc3siVjhHQ0NvbnRyb2xsZXIuaCJ9ID0gMTsKKwogICAgICAgICBteSAk
bWV0aG9kTmFtZTsKICAgICAgICAgJG1ldGhvZE5hbWUgPSAiZG9jdW1lbnQiIGlmIChHZXRHZW5l
cmF0ZUlzUmVhY2hhYmxlKCRkYXRhTm9kZSkgZXEgIkltcGxEb2N1bWVudCIpOwogICAgICAgICAk
bWV0aG9kTmFtZSA9ICJlbGVtZW50IiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5v
ZGUpIGVxICJJbXBsRWxlbWVudFJvb3QiKTsKQEAgLTIyNiwxNyArMjI4LDEzIEBAIEVORAogICAg
ICAgICAkbWV0aG9kTmFtZSA9ICJiYXNlIiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0
YU5vZGUpIGVxICJJbXBsQmFzZVJvb3QiKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOwotICAgIGlmIChOb2RlKiBvd25lciA9IGltcGwtPiR7bWV0aG9kTmFtZX0oKSkgewot
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBvd25lcldyYXBwZXIgPSBzdG9yZS0+
ZG9tTm9kZU1hcCgpLmdldChvd25lcik7Ci0gICAgICAgIGlmICghb3duZXJXcmFwcGVyLklzRW1w
dHkoKSkgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSA9IHdy
YXBwZXI7Ci0gICAgICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyhvd25lcldy
YXBwZXIsICZ2YWx1ZSwgMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKE5vZGUqIG93bmVy
ID0gaW1wbC0+JHttZXRob2ROYW1lfSgpKQorICAgICAgICByZXR1cm4gVjhHQ0NvbnRyb2xsZXI6
OnJvb3RGb3JHYXJiYWdlQ29sbGVjdGlvbihvd25lcik7CiBFTkQKICAgICB9CiAKICAgICBwdXNo
KEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIEVORApAQCAt
Mzg3LDggKzM4NSw4IEBAIEVORAogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKIEVO
RAogCi0gICAgaWYgKE5lZWRzVG9WaXNpdERPTVdyYXBwZXIoJGRhdGFOb2RlKSkgewotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihE
T01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pO1xuIik7Cisg
ICAgaWYgKE5lZWRzQ3VzdG9tUm9vdEZvckdhcmJhZ2VDb2xsZWN0aW9uKCRkYXRhTm9kZSkpIHsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCogcm9vdEZvckdh
cmJhZ2VDb2xsZWN0aW9uKHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7XG4iKTsK
ICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQWN0aXZl
RE9NT2JqZWN0In0pIHsKQEAgLTI1OTQsNyArMjU5Miw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRpbnRlcmZhY2VOYW1lKTsKIAogICAgIG15
ICR0b0FjdGl2ZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFjdGl2ZURPTU9i
amVjdCJ9ID8gIiR7Y2xhc3NOYW1lfTo6dG9BY3RpdmVET01PYmplY3QiIDogIjAiOwotICAgIG15
ICRkb21WaXNpdG9yID0gTmVlZHNUb1Zpc2l0RE9NV3JhcHBlcigkZGF0YU5vZGUpID8gIiR7Y2xh
c3NOYW1lfTo6dmlzaXRET01XcmFwcGVyIiA6ICIwIjsKKyAgICBteSAkcm9vdEZvckdDID0gTmVl
ZHNDdXN0b21Sb290Rm9yR2FyYmFnZUNvbGxlY3Rpb24oJGRhdGFOb2RlKSA/ICIke2NsYXNzTmFt
ZX06OnJvb3RGb3JHYXJiYWdlQ29sbGVjdGlvbiIgOiAiMCI7CiAKICAgICAjIEZpbmQgdGhlIHN1
cGVyIGRlc2NyaXB0b3IuCiAgICAgbXkgJHBhcmVudENsYXNzID0gIiI7CkBAIC0yNjExLDcgKzI2
MDksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgbXkgJFdyYXBwZXJUeXBl
UHJvdG90eXBlID0gJGRhdGFOb2RlLT5pc0V4Y2VwdGlvbiA/ICJXcmFwcGVyVHlwZUVycm9yUHJv
dG90eXBlIiA6ICJXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSI7CiAKLSAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtj
bGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHRvQWN0
aXZlLCAkZG9tVmlzaXRvciwgJHtjbGFzc05hbWV9OjppbnN0YWxsUGVyQ29udGV4dFByb3RvdHlw
ZVByb3BlcnRpZXMsICRwYXJlbnRDbGFzc0luZm8sICRXcmFwcGVyVHlwZVByb3RvdHlwZSB9O1xu
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xh
c3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9
OjpkZXJlZk9iamVjdCwgJHRvQWN0aXZlLCAkcm9vdEZvckdDLCAke2NsYXNzTmFtZX06Omluc3Rh
bGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgJHBhcmVudENsYXNzSW5mbywgJFdyYXBw
ZXJUeXBlUHJvdG90eXBlIH07XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJu
YW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWwge1xuXG4iKTsKIAogICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkg
eyB9XG5cbiIpOwpAQCAtMjY3Miw4ICsyNjcwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgR2VuZXJhdGVSZXBsYWNlYWJsZUF0dHJTZXR0ZXIoJGRhdGFOb2RlLCAkaW1w
bENsYXNzTmFtZSk7CiAgICAgfQogCi0gICAgaWYgKE5lZWRzVG9WaXNpdERPTVdyYXBwZXIoJGRh
dGFOb2RlKSkgewotICAgICAgICBHZW5lcmF0ZVZpc2l0RE9NV3JhcHBlcigkZGF0YU5vZGUsICRp
bXBsQ2xhc3NOYW1lKTsKKyAgICBpZiAoTmVlZHNDdXN0b21Sb290Rm9yR2FyYmFnZUNvbGxlY3Rp
b24oJGRhdGFOb2RlKSkgeworICAgICAgICBHZW5lcmF0ZVJvb3RGb3JHYXJiYWdlQ29sbGVjdGlv
bigkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lKTsKICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggZjU2Y2NhM2I4YTM2YTQ2OTQw
NDlkOTM3NjRhN2VhNjk4ZGRhNGFjNC4uNTVjYzhiYTY3YzZjNDlmNzg5YTdmMTI0NGI2MTA3ZTFj
ZmM5YjdkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVy
LmNwcApAQCAtNjcsMTQgKzY3LDc5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
SW1wbGljaXRDb25uZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBJbXBsaWNpdENvbm5lY3Rpb24odm9p
ZCogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgICAgICA6IG1f
cm9vdChyb290KQorICAgICAgICAsIG1fd3JhcHBlcih3cmFwcGVyKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkKiByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9CisgICAgdjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CisK
K3B1YmxpYzoKKyAgICB2b2lkKiBtX3Jvb3Q7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiBtX3dyYXBwZXI7Cit9OworCitib29sIG9wZXJhdG9yPChjb25zdCBJbXBsaWNpdENvbm5lY3Rp
b24mIGxlZnQsIGNvbnN0IEltcGxpY2l0Q29ubmVjdGlvbiYgcmlnaHQpCit7CisgICAgcmV0dXJu
IGxlZnQucm9vdCgpIDwgcmlnaHQucm9vdCgpOworfQorCitjbGFzcyBXcmFwcGVyR3JvdXBlciB7
CitwdWJsaWM6CisgICAgV3JhcHBlckdyb3VwZXIoKQorICAgIHsKKyAgICAgICAgbV9saXZlT2Jq
ZWN0cy5hcHBlbmQoVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpLT5lbnN1cmVMaXZlUm9vdCgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZFRvR3JvdXAodm9pZCogcm9vdCwgdjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgbV9jb25uZWN0aW9ucy5hcHBl
bmQoSW1wbGljaXRDb25uZWN0aW9uKHJvb3QsIHdyYXBwZXIpKTsKKyAgICB9CisKKyAgICB2b2lk
IGtlZXBBbGl2ZSh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIpCisgICAgeworICAg
ICAgICBtX2xpdmVPYmplY3RzLmFwcGVuZCh3cmFwcGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFw
cGx5KCkKKyAgICB7CisgICAgICAgIGlmIChtX2xpdmVPYmplY3RzLnNpemUoKSA+IDEpCisgICAg
ICAgICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKG1fbGl2ZU9iamVjdHMuZGF0YSgpLCBtX2xp
dmVPYmplY3RzLnNpemUoKSk7CisKKyAgICAgICAgc3RkOjpzb3J0KG1fY29ubmVjdGlvbnMuYmVn
aW4oKSwgbV9jb25uZWN0aW9ucy5lbmQoKSk7CisgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+ID4gZ3JvdXA7CisgICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgd2hp
bGUgKGkgPCBtX2Nvbm5lY3Rpb25zLnNpemUoKSkgeworICAgICAgICAgICAgdm9pZCogcm9vdCA9
IG1fY29ubmVjdGlvbnNbaV0ucm9vdCgpOworCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgZ3JvdXAuYXBwZW5kKG1fY29ubmVjdGlvbnNbaSsrXS53cmFwcGVyKCkpOworICAgICAg
ICAgICAgfSB3aGlsZSAoaSA8IG1fY29ubmVjdGlvbnMuc2l6ZSgpICYmIHJvb3QgPT0gbV9jb25u
ZWN0aW9uc1tpXS5yb290KCkpOworCisgICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkK
KyAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKGdyb3VwLmRhdGEoKSwgZ3Jv
dXAuc2l6ZSgpLCAwKTsKKworICAgICAgICAgICAgZ3JvdXAuc2hyaW5rKDApOworICAgICAgICB9
CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
ID4gbV9saXZlT2JqZWN0czsKKyAgICBWZWN0b3I8SW1wbGljaXRDb25uZWN0aW9uPiBtX2Nvbm5l
Y3Rpb25zOworfTsKKwogY2xhc3MgT2JqZWN0VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyVmlz
aXRvcjx2b2lkPiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgT2JqZWN0VmlzaXRvcihWZWN0b3I8
djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+KiBsaXZlT2JqZWN0cykKLSAgICAgICAgOiBtX2xp
dmVPYmplY3RzKGxpdmVPYmplY3RzKQorICAgIGV4cGxpY2l0IE9iamVjdFZpc2l0b3IoV3JhcHBl
ckdyb3VwZXIqIGdyb3VwZXIpCisgICAgICAgIDogbV9ncm91cGVyKGdyb3VwZXIpCiAgICAgewog
ICAgIH0KIAotICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZv
aWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB2b2lk
IHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewogICAgICAgICBXcmFwcGVyVHlwZUluZm8q
IHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwogCkBAIC04NCwy
MCArMTQ5LDIxIEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGNhbid0
IHRlbGwgdGhlIGRpZmZlcmVuY2UuCiAgICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHN0
YXRpY19jYXN0PE1lc3NhZ2VQb3J0Kj4ob2JqZWN0KTsKICAgICAgICAgICAgIGlmIChwb3J0LT5p
c0VudGFuZ2xlZCgpIHx8IHBvcnQtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQotICAgICAgICAgICAg
ICAgIG1fbGl2ZU9iamVjdHMtPmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBtX2dy
b3VwZXItPmtlZXBBbGl2ZSh3cmFwcGVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2JqZWN0ID0gdHlwZS0+dG9BY3RpdmVET01PYmpl
Y3Qod3JhcHBlcik7CiAgICAgICAgICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2ZURP
TU9iamVjdC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgbV9saXZlT2Jq
ZWN0cy0+YXBwZW5kKHdyYXBwZXIpOworICAgICAgICAgICAgICAgIG1fZ3JvdXBlci0+a2VlcEFs
aXZlKHdyYXBwZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgdHlwZS0+dmlzaXRET01XcmFwcGVy
KHN0b3JlLCBvYmplY3QsIHdyYXBwZXIpOworICAgICAgICBtX2dyb3VwZXItPmFkZFRvR3JvdXAo
dHlwZS0+cm9vdEZvckdhcmJhZ2VDb2xsZWN0aW9uKG9iamVjdCwgd3JhcHBlciksIHdyYXBwZXIp
OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiA+KiBtX2xpdmVPYmplY3RzOworICAgIFdyYXBwZXJHcm91cGVyKiBtX2dyb3VwZXI7CiB9Owog
CisvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIG9wYXF1ZSBHQyByb290cy4KIHN0YXRpYyB2b2lk
IGFkZEltcGxpY2l0UmVmZXJlbmNlc0Zvck5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9k
ZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKICAgICBBU1NFUlQobm9k
ZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKSk7CkBAIC0xMjAsMTUgKzE4NiwxNiBAQCBzdGF0aWMgdm9p
ZCBhZGRJbXBsaWNpdFJlZmVyZW5jZXNGb3JOb2RlV2l0aEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5v
ZGUsIHY4OjpQZXJzaQogICAgIHY4OjpWODo6QWRkSW1wbGljaXRSZWZlcmVuY2VzKHdyYXBwZXIs
IGxpc3RlbmVycy5kYXRhKCksIGxpc3RlbmVycy5zaXplKCkpOwogfQogCi1zdGF0aWMgTm9kZSog
cm9vdEZvckdDKE5vZGUqIG5vZGUpCit2b2lkKiBWOEdDQ29udHJvbGxlcjo6cm9vdEZvckdhcmJh
Z2VDb2xsZWN0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSB8
fCAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykgJiYgc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkpCiAgICAgICAgIHJl
dHVybiBub2RlLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKG5vZGUtPmlzQXR0cmlidXRlTm9kZSgp
KSB7Ci0gICAgICAgIG5vZGUgPSBzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSktPm93bmVyRWxlbWVu
dCgpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
Tm9kZSogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5vZGUpLT5vd25lckVsZW1l
bnQoKTsKKyAgICAgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKKyAgICAgICAgbm9kZSA9IG93bmVyRWxlbWVudDsKICAgICB9CiAKICAgICB3aGlsZSAoTm9k
ZSogcGFyZW50ID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKQpAQCAtMTM3LDMxICsyMDQsMTAg
QEAgc3RhdGljIE5vZGUqIHJvb3RGb3JHQyhOb2RlKiBub2RlKQogICAgIHJldHVybiBub2RlOwog
fQogCi1jbGFzcyBJbXBsaWNpdENvbm5lY3Rpb24gewotcHVibGljOgotICAgIEltcGxpY2l0Q29u
bmVjdGlvbihOb2RlKiByb290LCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIpCi0g
ICAgICAgIDogbV9yb290KHJvb3QpCi0gICAgICAgICwgbV93cmFwcGVyKHdyYXBwZXIpCi0gICAg
ewotICAgIH0KLQotICAgIE5vZGUqIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KLSAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX3dy
YXBwZXI7IH0KLQotcHVibGljOgotICAgIE5vZGUqIG1fcm9vdDsKLSAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IG1fd3JhcHBlcjsKLX07Ci0KLWJvb2wgb3BlcmF0b3I8KGNvbnN0IEltcGxp
Y2l0Q29ubmVjdGlvbiYgbGVmdCwgY29uc3QgSW1wbGljaXRDb25uZWN0aW9uJiByaWdodCkKLXsK
LSAgICByZXR1cm4gbGVmdC5yb290KCkgPCByaWdodC5yb290KCk7Ci19Ci0KIGNsYXNzIE5vZGVW
aXNpdG9yIDogcHVibGljIE5vZGVXcmFwcGVyVmlzaXRvciB7CiBwdWJsaWM6Ci0gICAgZXhwbGlj
aXQgTm9kZVZpc2l0b3IoVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiogbGl2ZU9i
amVjdHMpCi0gICAgICAgIDogbV9saXZlT2JqZWN0cyhsaXZlT2JqZWN0cykKKyAgICBleHBsaWNp
dCBOb2RlVmlzaXRvcihXcmFwcGVyR3JvdXBlciogZ3JvdXBlcikKKyAgICAgICAgOiBtX2dyb3Vw
ZXIoZ3JvdXBlcikKICAgICB7CiAgICAgfQogCkBAIC0xNzQsMzYgKzIyMCwxMyBAQCBwdWJsaWM6
CiAKICAgICAgICAgQWN0aXZlRE9NT2JqZWN0KiBhY3RpdmVET01PYmplY3QgPSB0eXBlLT50b0Fj
dGl2ZURPTU9iamVjdCh3cmFwcGVyKTsKICAgICAgICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBh
Y3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQotICAgICAgICAgICAgbV9saXZl
T2JqZWN0cy0+YXBwZW5kKHdyYXBwZXIpOworICAgICAgICAgICAgbV9ncm91cGVyLT5rZWVwQWxp
dmUod3JhcHBlcik7CiAKLSAgICAgICAgTm9kZSogcm9vdCA9IHJvb3RGb3JHQyhub2RlKTsKLSAg
ICAgICAgaWYgKCFyb290KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2Nvbm5lY3Rp
b25zLmFwcGVuZChJbXBsaWNpdENvbm5lY3Rpb24ocm9vdCwgd3JhcHBlcikpOwotICAgIH0KLQot
ICAgIHZvaWQgYXBwbHlHcm91cGluZygpCi0gICAgewotICAgICAgICBzdGQ6OnNvcnQobV9jb25u
ZWN0aW9ucy5iZWdpbigpLCBtX2Nvbm5lY3Rpb25zLmVuZCgpKTsKLSAgICAgICAgVmVjdG9yPHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBncm91cDsKLSAgICAgICAgc2l6ZV90IGkgPSAwOwot
ICAgICAgICB3aGlsZSAoaSA8IG1fY29ubmVjdGlvbnMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiByb290ID0gbV9jb25uZWN0aW9uc1tpXS5yb290KCk7Ci0KLSAgICAgICAgICAgIGRvIHsK
LSAgICAgICAgICAgICAgICBncm91cC5hcHBlbmQobV9jb25uZWN0aW9uc1tpKytdLndyYXBwZXIo
KSk7Ci0gICAgICAgICAgICB9IHdoaWxlIChpIDwgbV9jb25uZWN0aW9ucy5zaXplKCkgJiYgcm9v
dCA9PSBtX2Nvbm5lY3Rpb25zW2ldLnJvb3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChncm91cC5z
aXplKCkgPiAxKQotICAgICAgICAgICAgICAgIHY4OjpWODo6QWRkT2JqZWN0R3JvdXAoZ3JvdXAu
ZGF0YSgpLCBncm91cC5zaXplKCksIG5ldyBSZXRhaW5lZERPTUluZm8ocm9vdCkpOwotCi0gICAg
ICAgICAgICBncm91cC5zaHJpbmsoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncm91cGVyLT5h
ZGRUb0dyb3VwKFY4R0NDb250cm9sbGVyOjpyb290Rm9yR2FyYmFnZUNvbGxlY3Rpb24obm9kZSks
IHdyYXBwZXIpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPiA+KiBtX2xpdmVPYmplY3RzOwotICAgIFZlY3RvcjxJbXBsaWNpdENvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbnM7CisgICAgV3JhcHBlckdyb3VwZXIqIG1fZ3JvdXBlcjsKIH07CiAK
IHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUodjg6OkdDVHlwZSB0eXBlLCB2ODo6R0ND
YWxsYmFja0ZsYWdzIGZsYWdzKQpAQCAtMjI0LDE3ICsyNDcsMTQgQEAgdm9pZCBWOEdDQ29udHJv
bGxlcjo6bWFqb3JHQ1Byb2xvZ3VlKCkKIAogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKIAot
ICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gbGl2ZU9iamVjdHM7Ci0gICAg
bGl2ZU9iamVjdHMuYXBwZW5kKFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+ZW5zdXJlTGl2
ZVJvb3QoKSk7CisgICAgV3JhcHBlckdyb3VwZXIgZ3JvdXBlcjsKIAotICAgIE5vZGVWaXNpdG9y
IG5vZGVWaXNpdG9yKCZsaXZlT2JqZWN0cyk7CisgICAgTm9kZVZpc2l0b3Igbm9kZVZpc2l0b3Io
Jmdyb3VwZXIpOworICAgIE9iamVjdFZpc2l0b3Igb2JqZWN0VmlzaXRvcigmZ3JvdXBlcik7CiAg
ICAgdmlzaXRBbGxET01Ob2Rlcygmbm9kZVZpc2l0b3IpOwotICAgIG5vZGVWaXNpdG9yLmFwcGx5
R3JvdXBpbmcoKTsKLQotICAgIE9iamVjdFZpc2l0b3Igb2JqZWN0VmlzaXRvcigmbGl2ZU9iamVj
dHMpOwogICAgIHZpc2l0RE9NT2JqZWN0cygmb2JqZWN0VmlzaXRvcik7CiAKLSAgICB2ODo6Vjg6
OkFkZE9iamVjdEdyb3VwKGxpdmVPYmplY3RzLmRhdGEoKSwgbGl2ZU9iamVjdHMuc2l6ZSgpKTsK
KyAgICBncm91cGVyLmFwcGx5KCk7CiAKICAgICBWOFBlcklzb2xhdGVEYXRhKiBkYXRhID0gVjhQ
ZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIGRhdGEtPnN0cmluZ0NhY2hlKCktPmNsZWFy
T25HQygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmgKaW5k
ZXggNTQ0ZDM5ZmEzOGVhODU1NDVmODk0NDcyY2QyYzc4NDYxNDA1ZmRiZi4uYTRlZWE1NDIzY2Jk
ZTZhYjEyYzg2ZGVmN2E1MDQ1NTQ0MjdjMTZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEdDQ29udHJvbGxlci5oCkBAIC0zNSw2ICszNSw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgTm9kZTsKKwogY2xhc3MgVjhHQ0NvbnRyb2xsZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGdjUHJvbG9ndWUodjg6OkdDVHlwZSwgdjg6OkdDQ2FsbGJhY2tGbGFn
cyk7CkBAIC00Nyw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjaGVja01lbW9y
eVVzYWdlKCk7CiAgICAgc3RhdGljIHZvaWQgaGludEZvckNvbGxlY3RHYXJiYWdlKCk7CiAgICAg
c3RhdGljIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKKworICAgIHN0YXRpYyB2b2lkKiByb290Rm9y
R2FyYmFnZUNvbGxlY3Rpb24oTm9kZSopOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAppbmRleCAzYTJkYWQ1ZTdmZDEzNzA0Y2Q3YzI4NmE4
MDcyNjZjNjljYTA3OWFmLi44OTQwNTQ4MmNhNzU4ZDY1ZDc5OTViZmM3NzA1ZGYzNWYxZjQ4NGU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaApAQCAt
NDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpHZXRUZW1wbGF0ZUZ1bmN0aW9uKSgpOwogICAg
IHR5cGVkZWYgdm9pZCAoKkRlcmVmT2JqZWN0RnVuY3Rpb24pKHZvaWQqKTsKICAgICB0eXBlZGVm
IEFjdGl2ZURPTU9iamVjdCogKCpUb0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uKSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KTsKLSAgICB0eXBlZGVmIHZvaWQgKCpET01XcmFwcGVyVmlzaXRvckZ1bmN0
aW9uKShET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwor
ICAgIHR5cGVkZWYgdm9pZCogKCpSb290Rm9yR2FyYmFnZUNvbGxlY3Rpb24pKHZvaWQqLCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFsbFBlckNv
bnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb24pKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4p
OwogCiAgICAgZW51bSBXcmFwcGVyVHlwZVByb3RvdHlwZSB7CkBAIC0xMDIsMTYgKzEwMiwxNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9BY3RpdmVET01PYmpl
Y3RGdW5jdGlvbihvYmplY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNpdERPTVdy
YXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgICAgICB2b2lkKiByb290Rm9yR2FyYmFnZUNvbGxlY3Rp
b24odm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoZG9tV3JhcHBlclZpc2l0b3JGdW5jdGlvbikKLSAgICAg
ICAgICAgICAgICBkb21XcmFwcGVyVmlzaXRvckZ1bmN0aW9uKHN0b3JlLCBvYmplY3QsIHdyYXBw
ZXIpOworICAgICAgICAgICAgaWYgKCFyb290Rm9yR2FyYmFnZUNvbGxlY3Rpb25GdW5jdGlvbikK
KyAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgcmV0dXJuIHJvb3RG
b3JHYXJiYWdlQ29sbGVjdGlvbkZ1bmN0aW9uKG9iamVjdCwgd3JhcHBlcik7CiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBHZXRUZW1wbGF0ZUZ1bmN0aW9uIGdldFRlbXBsYXRlRnVuY3Rpb247
CiAgICAgICAgIGNvbnN0IERlcmVmT2JqZWN0RnVuY3Rpb24gZGVyZWZPYmplY3RGdW5jdGlvbjsK
ICAgICAgICAgY29uc3QgVG9BY3RpdmVET01PYmplY3RGdW5jdGlvbiB0b0FjdGl2ZURPTU9iamVj
dEZ1bmN0aW9uOwotICAgICAgICBjb25zdCBET01XcmFwcGVyVmlzaXRvckZ1bmN0aW9uIGRvbVdy
YXBwZXJWaXNpdG9yRnVuY3Rpb247CisgICAgICAgIGNvbnN0IFJvb3RGb3JHYXJiYWdlQ29sbGVj
dGlvbiByb290Rm9yR2FyYmFnZUNvbGxlY3Rpb25GdW5jdGlvbjsKICAgICAgICAgY29uc3QgSW5z
dGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb24gaW5zdGFsbFBlckNvbnRl
eHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb247CiAgICAgICAgIGNvbnN0IFdyYXBwZXJUeXBl
SW5mbyogcGFyZW50Q2xhc3M7CiAgICAgICAgIGNvbnN0IFdyYXBwZXJUeXBlUHJvdG90eXBlIHdy
YXBwZXJUeXBlUHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCmluZGV4IDRlOGNiNTU3OTQ1ODM2MmE5N2Q5
MzU1MDQwNzE3ZDA2OWFlMDI5NzUuLjMxNTcyOThhNDhiNTlhM2Y5ZWY5YzAzZDUzYzQ4ODc0ODRl
YTVhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5v
ZGVMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOb2RlTGlzdEN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEeW5hbWlj
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01OSwxOSArNjAsMTIgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Tm9kZUxpc3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUKICAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigp
LCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKLXZvaWQgVjhOb2RlTGlzdDo6dmlzaXRET01XcmFw
cGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQqIFY4Tm9kZUxpc3Q6OnJvb3RGb3JHYXJiYWdlQ29sbGVj
dGlvbih2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7
CiAgICAgTm9kZUxpc3QqIGltcGwgPSBzdGF0aWNfY2FzdDxOb2RlTGlzdCo+KG9iamVjdCk7Ci0g
ICAgaWYgKGltcGwtPmlzRHluYW1pY05vZGVMaXN0KCkpIHsKLSAgICAgICAgTm9kZSogb3duZXIg
PSBzdGF0aWNfY2FzdDxEeW5hbWljTm9kZUxpc3QqPihpbXBsKS0+b3duZXJOb2RlKCk7Ci0gICAg
ICAgIGlmIChvd25lcikgewotICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
b3duZXJXcmFwcGVyID0gc3RvcmUtPmRvbU5vZGVNYXAoKS5nZXQob3duZXIpOwotICAgICAgICAg
ICAgaWYgKCFvd25lcldyYXBwZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSA9IHdyYXBwZXI7Ci0gICAgICAgICAgICAgICAgdjg6
OlY4OjpBZGRJbXBsaWNpdFJlZmVyZW5jZXMob3duZXJXcmFwcGVyLCAmdmFsdWUsIDEpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGlmICghaW1wbC0+aXNEeW5hbWljTm9k
ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICByZXR1cm4gVjhHQ0NvbnRyb2xs
ZXI6OnJvb3RGb3JHYXJiYWdlQ29sbGVjdGlvbihzdGF0aWNfY2FzdDxEeW5hbWljTm9kZUxpc3Qq
PihpbXBsKS0+b3duZXJOb2RlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHAKaW5kZXggMzI0OTJjZmI3MmEyMDRk
ZmNkOWVjNWE2NjBjNWY3YjBhMWQ5NWY4OS4uYWZkMDI0ZWIxNzYwMmIyZDk2MGZlNjNiNGU5ZTcz
MzAzZmY5ODRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U3BlZWNoUmVjb2duaXRpb25SZXN1bHRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Q3VzdG9tLmNwcApA
QCAtMzEsMTYgKzMxLDE0IEBACiAKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5o
IgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp2
aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQordm9pZCogVjhTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdDo6cm9vdEZvckdhcmJhZ2VDb2xsZWN0aW9uKHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKICAgICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCog
aW1wbCA9IHN0YXRpY19jYXN0PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Kj4ob2JqZWN0KTsKLSAg
ICBEb2N1bWVudCogZW1tYSA9IGltcGwtPmVtbWEoKTsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+IGVtbWFXcmFwcGVyID0gc3RvcmUtPmRvbU5vZGVNYXAoKS5nZXQoZW1tYSk7Ci0gICAg
aWYgKCFlbW1hV3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHY4OjpWODo6QWRkSW1wbGljaXRS
ZWZlcmVuY2VzKHdyYXBwZXIsICZlbW1hV3JhcHBlciwgMSk7CisgICAgcmV0dXJuIFY4R0NDb250
cm9sbGVyOjpyb290Rm9yR2FyYmFnZUNvbGxlY3Rpb24oaW1wbC0+ZW1tYSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDNiMzY2ZjJkNzFkODg0ZTA1MGIwMjg0ZjE3NmQ1
MmVkNzhkZmMyNDEuLjZlNWM2NmU3YWY0MGEyMTUwYjNiYzg1NzA5YjhjOTQ2OTk5ZDYxYWMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0yOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFtWOF0gR2FyYmFnZSBjb2xsZWN0aW9uIHNob3VsZCB1c2Ugb3Bh
cXVlIHJvb3RzIHJhdGhlciB0aGFuIGltcGxpY2l0IHJlZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDcwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgcHJvZ3Jlc3Npb24uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9nYy05LWV4cGVjdGVkLnR4dDoKKwog
MjAxMi0xMC0yOCAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVGhlIHNoYWRvdyBlbGVtZW50IGlzIG5vdCByZXByb2plY3RlZCB0byBhIG5lc3RlZCBT
aGFkb3dSb290LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFz
dC9kb20vZ2MtOS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9m
YXN0L2RvbS9nYy05LWV4cGVjdGVkLnR4dAppbmRleCBkYWFkOTRjYWZmMDAzZDg0OTIzN2RjY2Fi
YTUwMGNlYzBiYWIxYjRhLi5iNzM3NTVkMjg0YzEzYjRmYTdiOWNkZTNlNGExMTg0YWQ2OTMxNmMw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9nYy05
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2Rv
bS9nYy05LWV4cGVjdGVkLnR4dApAQCAtNjksOCArNjksOCBAQCBQQVNTOiBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnbWFwJylbMF0uYXJlYXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQg
YmUgMQogRkFJTDogZG9jdW1lbnQuYm9keS5zdHlsZS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBi
ZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KIEZBSUw6IGRvY3VtZW50LmJvZHkuc3R5bGUu
Z2V0UHJvcGVydHlDU1NWYWx1ZSgnY29sb3InKS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAx
IGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KIFBBU1M6IGRvY3VtZW50LnN0eWxlU2hlZXRzLm15
Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgotRkFJTDogZG9jdW1lbnQuc3R5bGVT
aGVldHNbMF0ubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1bmRl
ZmluZWQuCi1GQUlMOiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5jc3NSdWxlcy5teUN1c3RvbVBy
b3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KK1BBU1M6IGRvY3Vt
ZW50LnN0eWxlU2hlZXRzWzBdLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgor
UEFTUzogZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXMubXlDdXN0b21Qcm9wZXJ0eSBz
aG91bGQgYmUgMSBhbmQgaXMuCiBGQUlMOiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5jc3NSdWxl
c1swXS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5l
ZC4KIFBBU1M6IG5ldyBYUGF0aEV2YWx1YXRvcigpLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJl
IHVuZGVmaW5lZCBhbmQgaXMuCiBQQVNTOiBuZXcgWFBhdGhFdmFsdWF0b3IoKS5ldmFsdWF0ZSgn
LycsIGRvY3VtZW50LCBudWxsLCAwLCBudWxsKS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSB1
bmRlZmluZWQgYW5kIGlzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171532</attachid>
            <date>2012-10-30 15:26:40 -0700</date>
            <delta_ts>2012-10-31 14:57:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100707-20121030152540.patch</filename>
            <type>text/plain</type>
            <size>22631</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyOTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGU1M2ZmNzVlOWQ0OWEx
MjJmNmZhNmRkYjAyMThmODUzY2VkZDYxNy4uMjIxMzBiZDQ2MjM4MDg1MGQ1NjE3YjNjM2Y4MzEy
MDRmNWNhYTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTEwLTMwICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1Y4XSBHYXJiYWdlIGNvbGxl
Y3Rpb24gc2hvdWxkIHVzZSBvcGFxdWUgcm9vdHMgcmF0aGVyIHRoYW4gaW1wbGljaXQgcmVmZXJl
bmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAw
NzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZXBsYWNlcyB2aXNpdERPTVdyYXBwZXIgd2l0aCBvcGFxdWVSb290Rm9yR0MuIFRo
ZQorICAgICAgICBmb3JtZXIgdXNlZCB0byBpbmZvcm0gVjggb2YgaW1wbGljaXQgcmVsYXRpb25z
aGlwcyBiZXR3ZWVuIHdyYXBwZXIKKyAgICAgICAgb2JqZWN0cyBvbiBhIHBlci13cmFwcGVyIGJh
c2lzLiBUaGF0IG1lYW50IHRoYXQgd2UgbmVlZGVkIHRvIGtub3cgd2hpY2gKKyAgICAgICAgRE9N
RGF0YVN0b3JlIGEgZ2l2ZW4gd3JhcHBlciB3YXMgaW4gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlv
bi4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB3ZSBub3cgdXNlIG9iamVjdCBncm91cHMg
cmF0aGVyIHRoYW4gaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyB0byBpbmZvcm0gVjggb2Yg
dGhlc2UgcmVsYXRpb25zaGlwcy4gVGhhdCBoYXMgdHdvIGJlbmVmaXRzOgorCisgICAgICAgIDEp
IFdlIG5vIGxvbmdlciBuZWVkIHRvIGtub3cgd2hpY2ggRE9NRGF0YVN0b3JlIGEgd3JhcHBlciBi
ZWxvbmdzCisgICAgICAgICAgIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBmaW5kIHRoZSBleGFj
dCBzb3VyY2Ugd3JhcHBlciBmb3IgdGhlCisgICAgICAgICAgIGltcGxpY2l0IGNvbm5lY3Rpb24u
CisKKyAgICAgICAgMikgV2UgY2FuIG5vdyBoYW5kbGUgbW9yZSBjb21wbGljYXRlZCBpbXBsaWNp
dCByZWxhdGlvbnNoaXBzLCBmb3IKKyAgICAgICAgICAgZXhhbXBsZSB3aGVuIHNvbWUgb2YgdGhl
IGludGVydmVuaW5nIG9iamVjdHMgaGF2ZW4ndCBoYWQgdGhlaXIKKyAgICAgICAgICAgSmF2YVNj
cmlwdCB3cmFwcGVycyBjcmVhdGVkIHlldC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gdW5s
b2NrcyB0byBwYXRocyBvZiBmdXR1cmUgZGV2ZWxvcG1lbnQ6CisgICAgICAgIEEpIEZpeGluZyB0
aGUgcmVtYWluaW5nIGZhaWx1cmVzIGluIGZhc3QvZG9tL2djLTkuaHRtbAorICAgICAgICBCKSBF
bnVtZXJhdGluZyBET00gd3JhcHBlcnMgZW50aXJlbHkgZnJvbSBWOCByYXRoZXIgdGhhbiBmcm9t
IHRoZQorICAgICAgICAgICBET01XcmFwcGVyTWFwcyAoc28gdGhhdCB3ZSBjYW4gbW92ZSBtb3Jl
IG9iamVjdCB0b3dhcmRzIHVzaW5nCisgICAgICAgICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXBz
LCB3aGljaCBhcmVuJ3QgZW51bWVyYWJsZSBmcm9tIFdlYkNvcmUpLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChOZWVkc0N1c3RvbU9w
YXF1ZVJvb3RGb3JHQyk6CisgICAgICAgIChHZW5lcmF0ZU9wYXF1ZVJvb3RGb3JHQyk6CisgICAg
ICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChJbXBs
aWNpdENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRDb25uZWN0aW9uOjpJ
bXBsaWNpdENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRDb25uZWN0aW9u
Ojpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0Q29ubmVjdGlvbjo6d3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPCk6CisgICAg
ICAgIChXcmFwcGVyR3JvdXBlcik6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6
V3JhcHBlckdyb3VwZXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OmFkZFRv
R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OmtlZXBBbGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6T2JqZWN0VmlzaXRvcjo6T2JqZWN0VmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpPYmpl
Y3RWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoT2JqZWN0VmlzaXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdDKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVWaXNpdG9yOjpOb2RlVmlzaXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlVmlzaXRvcjo6dmlzaXROb2RlV3JhcHBlcik6CisgICAgICAgIChOb2RlVmlzaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjo6bWFqb3JHQ1Byb2xvZ3VlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChWOEdDQ29udHJvbGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvV3JhcHBl
clR5cGVJbmZvLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBw
ZXJUeXBlSW5mbzo6b3BhcXVlUm9vdEZvckdDKToKKyAgICAgICAgKFdyYXBwZXJUeXBlSW5mbyk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhOb2RlTGlzdDo6b3BhcXVlUm9vdEZvckdDKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGFxdWVSb290Rm9y
R0MpOgorCiAyMDEyLTEwLTMwICBXLiBKYW1lcyBNYWNMZWFuICA8d2ptYWNsZWFuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlc3RyaWN0IGxpbmsgaGlnaGxpZ2h0cyB0byB0
YXJnZXRzIHRoYXQgZGlzcGxheSBhIGhhbmQtY3Vyc29yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDM5N2QyYzM4ZTM2MjA0
MjdlNmIzZjEwZTNhZDgyMTRiZGYwZGZlMjguLmI0Y2M4YjBjNmE1YzBlZGQ4NjQ3MjgwY2QyZjZk
YzE3OGUyZTFlYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCkBAIC0xODEsNyArMTgxLDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9y
VHlwZQogICAgIH0KIH0KIAotc3ViIE5lZWRzVG9WaXNpdERPTVdyYXBwZXIKK3N1YiBOZWVkc0N1
c3RvbU9wYXF1ZVJvb3RGb3JHQwogewogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIHJl
dHVybiBHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRkYXRhTm9kZSkgfHwgR2V0Q3VzdG9tSXNSZWFj
aGFibGUoJGRhdGFOb2RlKTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdWIgR2V0Q3VzdG9tSXNSZWFj
aGFibGUKICAgICByZXR1cm4gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
SXNSZWFjaGFibGUifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJWOEN1c3Rv
bUlzUmVhY2hhYmxlIn07CiB9CiAKLXN1YiBHZW5lcmF0ZVZpc2l0RE9NV3JhcHBlcgorc3ViIEdl
bmVyYXRlT3BhcXVlUm9vdEZvckdDCiB7CiAgICAgbXkgKCRkYXRhTm9kZSwgJGltcGxDbGFzc05h
bWUpID0gQF87CiAKQEAgLTIwOCw3ICsyMDgsNyBAQCBzdWIgR2VuZXJhdGVWaXNpdERPTVdyYXBw
ZXIKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotdm9pZCBWOCR7aW1w
bENsYXNzTmFtZX06OnZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBv
YmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCit2b2lkKiBWOCR7aW1w
bENsYXNzTmFtZX06Om9wYXF1ZVJvb3RGb3JHQyh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7CiAgICAgJHtpbXBsQ2xhc3NOYW1lfSogaW1wbCA9IHN0
YXRpY19jYXN0PCR7aW1wbENsYXNzTmFtZX0qPihvYmplY3QpOwogRU5ECkBAIC0yMTgsNiArMjE4
LDggQEAgRU5ECiAgICAgICAgIEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGRhdGFOb2RlKSBlcSAg
IkltcGxPd25lck5vZGVSb290IiB8fAogICAgICAgICBHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRk
YXRhTm9kZSkgZXEgICJJbXBsQmFzZVJvb3QiKSB7CiAKKyAgICAgICAgJGltcGxJbmNsdWRlc3si
VjhHQ0NvbnRyb2xsZXIuaCJ9ID0gMTsKKwogICAgICAgICBteSAkbWV0aG9kTmFtZTsKICAgICAg
ICAgJG1ldGhvZE5hbWUgPSAiZG9jdW1lbnQiIGlmIChHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRk
YXRhTm9kZSkgZXEgIkltcGxEb2N1bWVudCIpOwogICAgICAgICAkbWV0aG9kTmFtZSA9ICJlbGVt
ZW50IiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5vZGUpIGVxICJJbXBsRWxlbWVu
dFJvb3QiKTsKQEAgLTIyNiwxNyArMjI4LDEzIEBAIEVORAogICAgICAgICAkbWV0aG9kTmFtZSA9
ICJiYXNlIiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5vZGUpIGVxICJJbXBsQmFz
ZVJvb3QiKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgIGlmIChO
b2RlKiBvd25lciA9IGltcGwtPiR7bWV0aG9kTmFtZX0oKSkgewotICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiBvd25lcldyYXBwZXIgPSBzdG9yZS0+ZG9tTm9kZU1hcCgpLmdldChv
d25lcik7Ci0gICAgICAgIGlmICghb3duZXJXcmFwcGVyLklzRW1wdHkoKSkgewotICAgICAgICAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSA9IHdyYXBwZXI7Ci0gICAgICAgICAg
ICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyhvd25lcldyYXBwZXIsICZ2YWx1ZSwgMSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKE5vZGUqIG93bmVyID0gaW1wbC0+JHttZXRob2RO
YW1lfSgpKQorICAgICAgICByZXR1cm4gVjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RGb3JHQyhv
d25lcik7CiBFTkQKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAg
IHJldHVybiBvYmplY3Q7CiB9CiAKIEVORApAQCAtMzg3LDggKzM4NSw4IEBAIEVORAogICAgIHN0
YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKIEVORAogCi0gICAgaWYgKE5lZWRzVG9WaXNpdERP
TVdyYXBwZXIoJGRhdGFOb2RlKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD4pO1xuIik7CisgICAgaWYgKE5lZWRzQ3VzdG9tT3BhcXVlUm9v
dEZvckdDKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgdm9pZCogb3BhcXVlUm9vdEZvckdDKHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0Pik7XG4iKTsKICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQWN0aXZlRE9NT2JqZWN0In0pIHsKQEAgLTI1OTQsNyArMjU5Miw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRpbnRlcmZhY2VOYW1l
KTsKIAogICAgIG15ICR0b0FjdGl2ZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkFjdGl2ZURPTU9iamVjdCJ9ID8gIiR7Y2xhc3NOYW1lfTo6dG9BY3RpdmVET01PYmplY3QiIDog
IjAiOwotICAgIG15ICRkb21WaXNpdG9yID0gTmVlZHNUb1Zpc2l0RE9NV3JhcHBlcigkZGF0YU5v
ZGUpID8gIiR7Y2xhc3NOYW1lfTo6dmlzaXRET01XcmFwcGVyIiA6ICIwIjsKKyAgICBteSAkcm9v
dEZvckdDID0gTmVlZHNDdXN0b21PcGFxdWVSb290Rm9yR0MoJGRhdGFOb2RlKSA/ICIke2NsYXNz
TmFtZX06Om9wYXF1ZVJvb3RGb3JHQyIgOiAiMCI7CiAKICAgICAjIEZpbmQgdGhlIHN1cGVyIGRl
c2NyaXB0b3IuCiAgICAgbXkgJHBhcmVudENsYXNzID0gIiI7CkBAIC0yNjExLDcgKzI2MDksNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgbXkgJFdyYXBwZXJUeXBlUHJvdG90
eXBlID0gJGRhdGFOb2RlLT5pc0V4Y2VwdGlvbiA/ICJXcmFwcGVyVHlwZUVycm9yUHJvdG90eXBl
IiA6ICJXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSI7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05h
bWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHRvQWN0aXZlLCAk
ZG9tVmlzaXRvciwgJHtjbGFzc05hbWV9OjppbnN0YWxsUGVyQ29udGV4dFByb3RvdHlwZVByb3Bl
cnRpZXMsICRwYXJlbnRDbGFzc0luZm8sICRXcmFwcGVyVHlwZVByb3RvdHlwZSB9O1xuXG4iKTsK
KyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xhc3NOYW1l
fTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJl
Zk9iamVjdCwgJHRvQWN0aXZlLCAkcm9vdEZvckdDLCAke2NsYXNzTmFtZX06Omluc3RhbGxQZXJD
b250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgJHBhcmVudENsYXNzSW5mbywgJFdyYXBwZXJUeXBl
UHJvdG90eXBlIH07XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJuYW1lc3Bh
Y2UgJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWwge1xuXG4iKTsKIAogICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkgeyB9XG5c
biIpOwpAQCAtMjY3Miw4ICsyNjcwLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgR2VuZXJhdGVSZXBsYWNlYWJsZUF0dHJTZXR0ZXIoJGRhdGFOb2RlLCAkaW1wbENsYXNz
TmFtZSk7CiAgICAgfQogCi0gICAgaWYgKE5lZWRzVG9WaXNpdERPTVdyYXBwZXIoJGRhdGFOb2Rl
KSkgewotICAgICAgICBHZW5lcmF0ZVZpc2l0RE9NV3JhcHBlcigkZGF0YU5vZGUsICRpbXBsQ2xh
c3NOYW1lKTsKKyAgICBpZiAoTmVlZHNDdXN0b21PcGFxdWVSb290Rm9yR0MoJGRhdGFOb2RlKSkg
eworICAgICAgICBHZW5lcmF0ZU9wYXF1ZVJvb3RGb3JHQygkZGF0YU5vZGUsICRpbXBsQ2xhc3NO
YW1lKTsKICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
VHlwZWRBcnJheSJ9KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEdDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJv
bGxlci5jcHAKaW5kZXggZjU2Y2NhM2I4YTM2YTQ2OTQwNDlkOTM3NjRhN2VhNjk4ZGRhNGFjNC4u
ZTkyOTcyNzBmYmEzZjYyODRhNjIyNzRhNzU1OGJmOGNlMWYwOWVmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcApAQCAtNjcsMTQgKzY3LDc5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1wbGljaXRDb25uZWN0aW9uIHsKK3B1
YmxpYzoKKyAgICBJbXBsaWNpdENvbm5lY3Rpb24odm9pZCogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPiB3cmFwcGVyKQorICAgICAgICA6IG1fcm9vdChyb290KQorICAgICAgICAsIG1f
d3JhcHBlcih3cmFwcGVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkKiByb290KCkgY29uc3Qg
eyByZXR1cm4gbV9yb290OyB9CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVy
KCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCogbV9y
b290OworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gbV93cmFwcGVyOworfTsKKworYm9v
bCBvcGVyYXRvcjwoY29uc3QgSW1wbGljaXRDb25uZWN0aW9uJiBsZWZ0LCBjb25zdCBJbXBsaWNp
dENvbm5lY3Rpb24mIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0LnJvb3QoKSA8IHJpZ2h0LnJv
b3QoKTsKK30KKworY2xhc3MgV3JhcHBlckdyb3VwZXIgeworcHVibGljOgorICAgIFdyYXBwZXJH
cm91cGVyKCkKKyAgICB7CisgICAgICAgIG1fbGl2ZU9iamVjdHMuYXBwZW5kKFY4UGVySXNvbGF0
ZURhdGE6OmN1cnJlbnQoKS0+ZW5zdXJlTGl2ZVJvb3QoKSk7CisgICAgfQorCisgICAgdm9pZCBh
ZGRUb0dyb3VwKHZvaWQqIHJvb3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlcikK
KyAgICB7CisgICAgICAgIG1fY29ubmVjdGlvbnMuYXBwZW5kKEltcGxpY2l0Q29ubmVjdGlvbihy
b290LCB3cmFwcGVyKSk7CisgICAgfQorCisgICAgdm9pZCBrZWVwQWxpdmUodjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgbV9saXZlT2JqZWN0cy5hcHBl
bmQod3JhcHBlcik7CisgICAgfQorCisgICAgdm9pZCBhcHBseSgpCisgICAgeworICAgICAgICBp
ZiAobV9saXZlT2JqZWN0cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgdjg6OlY4OjpBZGRPYmpl
Y3RHcm91cChtX2xpdmVPYmplY3RzLmRhdGEoKSwgbV9saXZlT2JqZWN0cy5zaXplKCkpOworCisg
ICAgICAgIHN0ZDo6c29ydChtX2Nvbm5lY3Rpb25zLmJlZ2luKCksIG1fY29ubmVjdGlvbnMuZW5k
KCkpOworICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdyb3VwOwor
ICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgbV9jb25uZWN0aW9ucy5z
aXplKCkpIHsKKyAgICAgICAgICAgIHZvaWQqIHJvb3QgPSBtX2Nvbm5lY3Rpb25zW2ldLnJvb3Qo
KTsKKworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZChtX2Nv
bm5lY3Rpb25zW2krK10ud3JhcHBlcigpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgPCBtX2Nv
bm5lY3Rpb25zLnNpemUoKSAmJiByb290ID09IG1fY29ubmVjdGlvbnNbaV0ucm9vdCgpKTsKKwor
ICAgICAgICAgICAgaWYgKGdyb3VwLnNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAgdjg6OlY4
OjpBZGRPYmplY3RHcm91cChncm91cC5kYXRhKCksIGdyb3VwLnNpemUoKSwgMCk7CisKKyAgICAg
ICAgICAgIGdyb3VwLnNocmluaygwKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IG1fbGl2ZU9iamVjdHM7CisgICAg
VmVjdG9yPEltcGxpY2l0Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uczsKK307CisKIGNsYXNzIE9i
amVjdFZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlclZpc2l0b3I8dm9pZD4gewogcHVibGljOgot
ICAgIGV4cGxpY2l0IE9iamVjdFZpc2l0b3IoVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gPiogbGl2ZU9iamVjdHMpCi0gICAgICAgIDogbV9saXZlT2JqZWN0cyhsaXZlT2JqZWN0cykK
KyAgICBleHBsaWNpdCBPYmplY3RWaXNpdG9yKFdyYXBwZXJHcm91cGVyKiBncm91cGVyKQorICAg
ICAgICA6IG1fZ3JvdXBlcihncm91cGVyKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHZpc2l0
RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0
YVN0b3JlKiwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQogICAgIHsKICAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gVjhET01XcmFwcGVyOjpk
b21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKIApAQCAtODQsMjAgKzE0OSwyMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlLgog
ICAgICAgICAgICAgTWVzc2FnZVBvcnQqIHBvcnQgPSBzdGF0aWNfY2FzdDxNZXNzYWdlUG9ydCo+
KG9iamVjdCk7CiAgICAgICAgICAgICBpZiAocG9ydC0+aXNFbnRhbmdsZWQoKSB8fCBwb3J0LT5o
YXNQZW5kaW5nQWN0aXZpdHkoKSkKLSAgICAgICAgICAgICAgICBtX2xpdmVPYmplY3RzLT5hcHBl
bmQod3JhcHBlcik7CisgICAgICAgICAgICAgICAgbV9ncm91cGVyLT5rZWVwQWxpdmUod3JhcHBl
cik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBY3RpdmVET01PYmplY3QqIGFjdGl2
ZURPTU9iamVjdCA9IHR5cGUtPnRvQWN0aXZlRE9NT2JqZWN0KHdyYXBwZXIpOwogICAgICAgICAg
ICAgaWYgKGFjdGl2ZURPTU9iamVjdCAmJiBhY3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rp
dml0eSgpKQotICAgICAgICAgICAgICAgIG1fbGl2ZU9iamVjdHMtPmFwcGVuZCh3cmFwcGVyKTsK
KyAgICAgICAgICAgICAgICBtX2dyb3VwZXItPmtlZXBBbGl2ZSh3cmFwcGVyKTsKICAgICAgICAg
fQogCi0gICAgICAgIHR5cGUtPnZpc2l0RE9NV3JhcHBlcihzdG9yZSwgb2JqZWN0LCB3cmFwcGVy
KTsKKyAgICAgICAgbV9ncm91cGVyLT5hZGRUb0dyb3VwKHR5cGUtPm9wYXF1ZVJvb3RGb3JHQyhv
YmplY3QsIHdyYXBwZXIpLCB3cmFwcGVyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9y
PHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiogbV9saXZlT2JqZWN0czsKKyAgICBXcmFwcGVy
R3JvdXBlciogbV9ncm91cGVyOwogfTsKIAorLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBvcGFx
dWUgR0Mgcm9vdHMuCiBzdGF0aWMgdm9pZCBhZGRJbXBsaWNpdFJlZmVyZW5jZXNGb3JOb2RlV2l0
aEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdy
YXBwZXIpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmhhc0V2ZW50TGlzdGVuZXJzKCkpOwpAQCAtMTIw
LDE1ICsxODYsMTYgQEAgc3RhdGljIHZvaWQgYWRkSW1wbGljaXRSZWZlcmVuY2VzRm9yTm9kZVdp
dGhFdmVudExpc3RlbmVycyhOb2RlKiBub2RlLCB2ODo6UGVyc2kKICAgICB2ODo6Vjg6OkFkZElt
cGxpY2l0UmVmZXJlbmNlcyh3cmFwcGVyLCBsaXN0ZW5lcnMuZGF0YSgpLCBsaXN0ZW5lcnMuc2l6
ZSgpKTsKIH0KIAotc3RhdGljIE5vZGUqIHJvb3RGb3JHQyhOb2RlKiBub2RlKQordm9pZCogVjhH
Q0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RGb3JHQyhOb2RlKiBub2RlKQogewogICAgIGlmIChub2Rl
LT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpICYm
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihub2RlKS0+aGFzUGVuZGluZ0FjdGl2aXR5
KCkpKQogICAgICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKTsKIAogICAgIGlmIChub2RlLT5p
c0F0dHJpYnV0ZU5vZGUoKSkgewotICAgICAgICBub2RlID0gc3RhdGljX2Nhc3Q8QXR0cio+KG5v
ZGUpLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIE5vZGUqIG93bmVyRWxlbWVudCA9IHN0YXRpY19jYXN0PEF0dHIqPihu
b2RlKS0+b3duZXJFbGVtZW50KCk7CisgICAgICAgIGlmICghb3duZXJFbGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIG5vZGUgPSBvd25lckVsZW1lbnQ7CiAgICAgfQog
CiAgICAgd2hpbGUgKE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKSkKQEAg
LTEzNywzMSArMjA0LDEwIEBAIHN0YXRpYyBOb2RlKiByb290Rm9yR0MoTm9kZSogbm9kZSkKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotY2xhc3MgSW1wbGljaXRDb25uZWN0aW9uIHsKLXB1YmxpYzoK
LSAgICBJbXBsaWNpdENvbm5lY3Rpb24oTm9kZSogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiB3cmFwcGVyKQotICAgICAgICA6IG1fcm9vdChyb290KQotICAgICAgICAsIG1fd3JhcHBl
cih3cmFwcGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBOb2RlKiByb290KCkgY29uc3QgeyByZXR1
cm4gbV9yb290OyB9Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKCkgY29u
c3QgeyByZXR1cm4gbV93cmFwcGVyOyB9Ci0KLXB1YmxpYzoKLSAgICBOb2RlKiBtX3Jvb3Q7Ci0g
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBtX3dyYXBwZXI7Ci19OwotCi1ib29sIG9wZXJh
dG9yPChjb25zdCBJbXBsaWNpdENvbm5lY3Rpb24mIGxlZnQsIGNvbnN0IEltcGxpY2l0Q29ubmVj
dGlvbiYgcmlnaHQpCi17Ci0gICAgcmV0dXJuIGxlZnQucm9vdCgpIDwgcmlnaHQucm9vdCgpOwot
fQotCiBjbGFzcyBOb2RlVmlzaXRvciA6IHB1YmxpYyBOb2RlV3JhcHBlclZpc2l0b3IgewogcHVi
bGljOgotICAgIGV4cGxpY2l0IE5vZGVWaXNpdG9yKFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+ID4qIGxpdmVPYmplY3RzKQotICAgICAgICA6IG1fbGl2ZU9iamVjdHMobGl2ZU9iamVj
dHMpCisgICAgZXhwbGljaXQgTm9kZVZpc2l0b3IoV3JhcHBlckdyb3VwZXIqIGdyb3VwZXIpCisg
ICAgICAgIDogbV9ncm91cGVyKGdyb3VwZXIpCiAgICAgewogICAgIH0KIApAQCAtMTc0LDM2ICsy
MjAsMTMgQEAgcHVibGljOgogCiAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0aXZlRE9NT2Jq
ZWN0ID0gdHlwZS0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7CiAgICAgICAgIGlmIChhY3Rp
dmVET01PYmplY3QgJiYgYWN0aXZlRE9NT2JqZWN0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkKLSAg
ICAgICAgICAgIG1fbGl2ZU9iamVjdHMtPmFwcGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICAgIG1f
Z3JvdXBlci0+a2VlcEFsaXZlKHdyYXBwZXIpOwogCi0gICAgICAgIE5vZGUqIHJvb3QgPSByb290
Rm9yR0Mobm9kZSk7Ci0gICAgICAgIGlmICghcm9vdCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbV9jb25uZWN0aW9ucy5hcHBlbmQoSW1wbGljaXRDb25uZWN0aW9uKHJvb3QsIHdyYXBw
ZXIpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5R3JvdXBpbmcoKQotICAgIHsKLSAgICAgICAg
c3RkOjpzb3J0KG1fY29ubmVjdGlvbnMuYmVnaW4oKSwgbV9jb25uZWN0aW9ucy5lbmQoKSk7Ci0g
ICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7Ci0gICAgICAg
IHNpemVfdCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGkgPCBtX2Nvbm5lY3Rpb25zLnNpemUoKSkg
ewotICAgICAgICAgICAgTm9kZSogcm9vdCA9IG1fY29ubmVjdGlvbnNbaV0ucm9vdCgpOwotCi0g
ICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKG1fY29ubmVjdGlv
bnNbaSsrXS53cmFwcGVyKCkpOwotICAgICAgICAgICAgfSB3aGlsZSAoaSA8IG1fY29ubmVjdGlv
bnMuc2l6ZSgpICYmIHJvb3QgPT0gbV9jb25uZWN0aW9uc1tpXS5yb290KCkpOwotCi0gICAgICAg
ICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZE9i
amVjdEdyb3VwKGdyb3VwLmRhdGEoKSwgZ3JvdXAuc2l6ZSgpLCBuZXcgUmV0YWluZWRET01JbmZv
KHJvb3QpKTsKLQotICAgICAgICAgICAgZ3JvdXAuc2hyaW5rKDApOwotICAgICAgICB9CisgICAg
ICAgIG1fZ3JvdXBlci0+YWRkVG9Hcm91cChWOEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdD
KG5vZGUpLCB3cmFwcGVyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPHY4OjpQZXJz
aXN0ZW50PHY4OjpWYWx1ZT4gPiogbV9saXZlT2JqZWN0czsKLSAgICBWZWN0b3I8SW1wbGljaXRD
b25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOworICAgIFdyYXBwZXJHcm91cGVyKiBtX2dyb3VwZXI7
CiB9OwogCiB2b2lkIFY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKHY4OjpHQ1R5cGUgdHlwZSwg
djg6OkdDQ2FsbGJhY2tGbGFncyBmbGFncykKQEAgLTIyNCwxNyArMjQ3LDE0IEBAIHZvaWQgVjhH
Q0NvbnRyb2xsZXI6Om1ham9yR0NQcm9sb2d1ZSgpCiAKICAgICB2ODo6SGFuZGxlU2NvcGUgc2Nv
cGU7CiAKLSAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGxpdmVPYmplY3Rz
OwotICAgIGxpdmVPYmplY3RzLmFwcGVuZChWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCktPmVu
c3VyZUxpdmVSb290KCkpOworICAgIFdyYXBwZXJHcm91cGVyIGdyb3VwZXI7CiAKLSAgICBOb2Rl
VmlzaXRvciBub2RlVmlzaXRvcigmbGl2ZU9iamVjdHMpOworICAgIE5vZGVWaXNpdG9yIG5vZGVW
aXNpdG9yKCZncm91cGVyKTsKKyAgICBPYmplY3RWaXNpdG9yIG9iamVjdFZpc2l0b3IoJmdyb3Vw
ZXIpOwogICAgIHZpc2l0QWxsRE9NTm9kZXMoJm5vZGVWaXNpdG9yKTsKLSAgICBub2RlVmlzaXRv
ci5hcHBseUdyb3VwaW5nKCk7Ci0KLSAgICBPYmplY3RWaXNpdG9yIG9iamVjdFZpc2l0b3IoJmxp
dmVPYmplY3RzKTsKICAgICB2aXNpdERPTU9iamVjdHMoJm9iamVjdFZpc2l0b3IpOwogCi0gICAg
djg6OlY4OjpBZGRPYmplY3RHcm91cChsaXZlT2JqZWN0cy5kYXRhKCksIGxpdmVPYmplY3RzLnNp
emUoKSk7CisgICAgZ3JvdXBlci5hcHBseSgpOwogCiAgICAgVjhQZXJJc29sYXRlRGF0YSogZGF0
YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBkYXRhLT5zdHJpbmdDYWNoZSgp
LT5jbGVhck9uR0MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
R0NDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxl
ci5oCmluZGV4IDU0NGQzOWZhMzhlYTg1NTQ1Zjg5NDQ3MmNkMmM3ODQ2MTQwNWZkYmYuLjE1NTE2
ODEyNWI0ZWJiNGMxOTQwY2FhMzNlMGE2NzVlNWRkMzM5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaApAQCAtMzUsNiArMzUsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIE5vZGU7CisKIGNsYXNzIFY4R0NDb250cm9sbGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBnY1Byb2xvZ3VlKHY4OjpHQ1R5cGUsIHY4OjpHQ0NhbGxi
YWNrRmxhZ3MpOwpAQCAtNDcsNiArNDksOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY2hl
Y2tNZW1vcnlVc2FnZSgpOwogICAgIHN0YXRpYyB2b2lkIGhpbnRGb3JDb2xsZWN0R2FyYmFnZSgp
OwogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisKKyAgICBzdGF0aWMgdm9pZCog
b3BhcXVlUm9vdEZvckdDKE5vZGUqKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKaW5kZXggM2EyZGFkNWU3ZmQxMzcwNGNkN2MyODZhODA3
MjY2YzY5Y2EwNzlhZi4uMjdjN2VmNmI3NjkxNzFhMzFiMjIwMTNjYjYwYjdiMjQ2NmM1ZGMwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmgKQEAgLTQ3
LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHR5cGVkZWYgdjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICgqR2V0VGVtcGxhdGVGdW5jdGlvbikoKTsKICAgICB0
eXBlZGVmIHZvaWQgKCpEZXJlZk9iamVjdEZ1bmN0aW9uKSh2b2lkKik7CiAgICAgdHlwZWRlZiBB
Y3RpdmVET01PYmplY3QqICgqVG9BY3RpdmVET01PYmplY3RGdW5jdGlvbikodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pik7Ci0gICAgdHlwZWRlZiB2b2lkICgqRE9NV3JhcHBlclZpc2l0b3JGdW5jdGlv
bikoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKKyAg
ICB0eXBlZGVmIHZvaWQqICgqT3BhcXVlUm9vdEZvckdDKSh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4pOwogICAgIHR5cGVkZWYgdm9pZCAoKkluc3RhbGxQZXJDb250ZXh0UHJvdG90
eXBlUHJvcGVydGllc0Z1bmN0aW9uKSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIAogICAgIGVu
dW0gV3JhcHBlclR5cGVQcm90b3R5cGUgewpAQCAtMTAyLDE2ICsxMDIsMTcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIHRvQWN0aXZlRE9NT2JqZWN0RnVuY3Rpb24o
b2JqZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURh
dGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
d3JhcHBlcikKKyAgICAgICAgdm9pZCogb3BhcXVlUm9vdEZvckdDKHZvaWQqIG9iamVjdCwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKGRvbVdyYXBwZXJWaXNpdG9yRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgZG9tV3JhcHBl
clZpc2l0b3JGdW5jdGlvbihzdG9yZSwgb2JqZWN0LCB3cmFwcGVyKTsKKyAgICAgICAgICAgIGlm
ICghb3BhcXVlUm9vdEZvckdDRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICAgICAgICAgIHJldHVybiBvcGFxdWVSb290Rm9yR0NGdW5jdGlvbihvYmplY3QsIHdy
YXBwZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgR2V0VGVtcGxhdGVGdW5jdGlvbiBn
ZXRUZW1wbGF0ZUZ1bmN0aW9uOwogICAgICAgICBjb25zdCBEZXJlZk9iamVjdEZ1bmN0aW9uIGRl
cmVmT2JqZWN0RnVuY3Rpb247CiAgICAgICAgIGNvbnN0IFRvQWN0aXZlRE9NT2JqZWN0RnVuY3Rp
b24gdG9BY3RpdmVET01PYmplY3RGdW5jdGlvbjsKLSAgICAgICAgY29uc3QgRE9NV3JhcHBlclZp
c2l0b3JGdW5jdGlvbiBkb21XcmFwcGVyVmlzaXRvckZ1bmN0aW9uOworICAgICAgICBjb25zdCBP
cGFxdWVSb290Rm9yR0Mgb3BhcXVlUm9vdEZvckdDRnVuY3Rpb247CiAgICAgICAgIGNvbnN0IElu
c3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllc0Z1bmN0aW9uIGluc3RhbGxQZXJDb250
ZXh0UHJvdG90eXBlUHJvcGVydGllc0Z1bmN0aW9uOwogICAgICAgICBjb25zdCBXcmFwcGVyVHlw
ZUluZm8qIHBhcmVudENsYXNzOwogICAgICAgICBjb25zdCBXcmFwcGVyVHlwZVByb3RvdHlwZSB3
cmFwcGVyVHlwZVByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAppbmRleCA0ZThjYjU1Nzk0NTgzNjJhOTdk
OTM1NTA0MDcxN2QwNjlhZTAyOTc1Li5lNDI1ODllNjliYWMxZGM1ZjM3NDIwOGZlZWNhMTg0ZTQ1
YTI4OWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhO
b2RlTGlzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUxpc3RDdXN0b20uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRHluYW1p
Y05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKKyNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogCiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTksMTkgKzYwLDE2IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOE5vZGVMaXN0OjpuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lCiAgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIo
KSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCi12b2lkIFY4Tm9kZUxpc3Q6OnZpc2l0RE9NV3Jh
cHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCit2b2lkKiBWOE5vZGVMaXN0OjpvcGFxdWVSb290Rm9yR0Modm9p
ZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogeworICAgIEFT
U0VSVChWOE5vZGVMaXN0OjpIYXNJbnN0YW5jZSh3cmFwcGVyKSk7CiAgICAgTm9kZUxpc3QqIGlt
cGwgPSBzdGF0aWNfY2FzdDxOb2RlTGlzdCo+KG9iamVjdCk7Ci0gICAgaWYgKGltcGwtPmlzRHlu
YW1pY05vZGVMaXN0KCkpIHsKLSAgICAgICAgTm9kZSogb3duZXIgPSBzdGF0aWNfY2FzdDxEeW5h
bWljTm9kZUxpc3QqPihpbXBsKS0+b3duZXJOb2RlKCk7Ci0gICAgICAgIGlmIChvd25lcikgewot
ICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gb3duZXJXcmFwcGVyID0gc3Rv
cmUtPmRvbU5vZGVNYXAoKS5nZXQob3duZXIpOwotICAgICAgICAgICAgaWYgKCFvd25lcldyYXBw
ZXIuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiB2YWx1ZSA9IHdyYXBwZXI7Ci0gICAgICAgICAgICAgICAgdjg6OlY4OjpBZGRJbXBsaWNpdFJl
ZmVyZW5jZXMob3duZXJXcmFwcGVyLCAmdmFsdWUsIDEpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQorICAgIGlmICghaW1wbC0+aXNEeW5hbWljTm9kZUxpc3QoKSkKKyAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICBOb2RlKiBvd25lciA9IHN0YXRpY19jYXN0PER5bmFtaWNOb2Rl
TGlzdCo+KGltcGwpLT5vd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyKQorICAgICAgICByZXR1
cm4gb2JqZWN0OworICAgIHJldHVybiBWOEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdDKG93
bmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3BlZWNoUmVjb2duaXRpb25SZXN1bHRDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3BlZWNoUmVjb2duaXRp
b25SZXN1bHRDdXN0b20uY3BwCmluZGV4IDMyNDkyY2ZiNzJhMjA0ZGZjZDllYzVhNjYwYzVmN2Iw
YTFkOTVmODkuLmVmMTQ1NjVmY2UxMmE1NDdiMjkyNWNkOTkzNjU4OWU4MTIxMjA4NGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNwZWVjaFJlY29nbml0
aW9uUmVzdWx0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHAKQEAgLTMxLDE2ICszMSwxNSBA
QAogCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6dmlzaXRET01XcmFwcGVyKERP
TURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gd3JhcHBlcikKK3ZvaWQqIFY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Om9wYXF1ZVJvb3RG
b3JHQyh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7
CisgICAgQVNTRVJUKFY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Okhhc0luc3RhbmNlKHdyYXBw
ZXIpKTsKICAgICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCogaW1wbCA9IHN0YXRpY19jYXN0PFNw
ZWVjaFJlY29nbml0aW9uUmVzdWx0Kj4ob2JqZWN0KTsKLSAgICBEb2N1bWVudCogZW1tYSA9IGlt
cGwtPmVtbWEoKTsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IGVtbWFXcmFwcGVyID0g
c3RvcmUtPmRvbU5vZGVNYXAoKS5nZXQoZW1tYSk7Ci0gICAgaWYgKCFlbW1hV3JhcHBlci5Jc0Vt
cHR5KCkpCi0gICAgICAgIHY4OjpWODo6QWRkSW1wbGljaXRSZWZlcmVuY2VzKHdyYXBwZXIsICZl
bW1hV3JhcHBlciwgMSk7CisgICAgcmV0dXJuIFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9y
R0MoaW1wbC0+ZW1tYSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDI1
NDFkYTk1NDJkNzdjM2E2MWNlNjI4Nzg4MDVkOTJmNzI1NzFjNWUuLjgxMzVhNjVjMDc3MTkwMjE4
YzIxNWM4YjFhYTc5MTllNTQxNTBiN2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMC0z
MCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFtWOF0gR2FyYmFn
ZSBjb2xsZWN0aW9uIHNob3VsZCB1c2Ugb3BhcXVlIHJvb3RzIHJhdGhlciB0aGFuIGltcGxpY2l0
IHJlZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMDcwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3QgcHJvZ3Jlc3Npb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L2RvbS9nYy05LWV4cGVjdGVkLnR4dDoKKwogMjAxMi0xMC0zMCAgVy4gSmFtZXMgTWFjTGVhbiAg
PHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZXN0cmljdCBs
aW5rIGhpZ2hsaWdodHMgdG8gdGFyZ2V0cyB0aGF0IGRpc3BsYXkgYSBoYW5kLWN1cnNvcgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9kb20vZ2MtOS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9nYy05LWV4
cGVjdGVkLnR4dAppbmRleCBkYWFkOTRjYWZmMDAzZDg0OTIzN2RjY2FiYTUwMGNlYzBiYWIxYjRh
Li5iNzM3NTVkMjg0YzEzYjRmYTdiOWNkZTNlNGExMTg0YWQ2OTMxNmMwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9nYy05LWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9nYy05LWV4cGVjdGVk
LnR4dApAQCAtNjksOCArNjksOCBAQCBQQVNTOiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnbWFwJylbMF0uYXJlYXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMQogRkFJTDogZG9j
dW1lbnQuYm9keS5zdHlsZS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFk
IGlzIHVuZGVmaW5lZC4KIEZBSUw6IGRvY3VtZW50LmJvZHkuc3R5bGUuZ2V0UHJvcGVydHlDU1NW
YWx1ZSgnY29sb3InKS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFkIGlz
IHVuZGVmaW5lZC4KIFBBU1M6IGRvY3VtZW50LnN0eWxlU2hlZXRzLm15Q3VzdG9tUHJvcGVydHkg
c2hvdWxkIGJlIDEgYW5kIGlzLgotRkFJTDogZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0ubXlDdXN0
b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1bmRlZmluZWQuCi1GQUlMOiBk
b2N1bWVudC5zdHlsZVNoZWV0c1swXS5jc3NSdWxlcy5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBi
ZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KK1BBU1M6IGRvY3VtZW50LnN0eWxlU2hlZXRz
WzBdLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgorUEFTUzogZG9jdW1lbnQu
c3R5bGVTaGVldHNbMF0uY3NzUnVsZXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBhbmQg
aXMuCiBGQUlMOiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5jc3NSdWxlc1swXS5teUN1c3RvbVBy
b3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KIFBBU1M6IG5ldyBY
UGF0aEV2YWx1YXRvcigpLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIHVuZGVmaW5lZCBhbmQg
aXMuCiBQQVNTOiBuZXcgWFBhdGhFdmFsdWF0b3IoKS5ldmFsdWF0ZSgnLycsIGRvY3VtZW50LCBu
dWxsLCAwLCBudWxsKS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSB1bmRlZmluZWQgYW5kIGlz
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171726</attachid>
            <date>2012-10-31 14:57:46 -0700</date>
            <delta_ts>2012-10-31 18:17:03 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100707-20121031145609.patch</filename>
            <type>text/plain</type>
            <size>22763</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjBhOGI4MWMzNzY2NzIx
ZTYzYWExY2IzN2Y3ZWRkZTE3YTQ2YjliNi4uMmIzNGRlMDI5NzE4YTBmMTFjYjAwYmYxMDEyZGEz
MmVhMDVmYTk3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTEwLTMxICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1Y4XSBHYXJiYWdlIGNvbGxl
Y3Rpb24gc2hvdWxkIHVzZSBvcGFxdWUgcm9vdHMgcmF0aGVyIHRoYW4gaW1wbGljaXQgcmVmZXJl
bmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAw
NzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZXBsYWNlcyB2aXNpdERPTVdyYXBwZXIgd2l0aCBvcGFxdWVSb290Rm9yR0MuIFRo
ZQorICAgICAgICBmb3JtZXIgdXNlZCB0byBpbmZvcm0gVjggb2YgaW1wbGljaXQgcmVsYXRpb25z
aGlwcyBiZXR3ZWVuIHdyYXBwZXIKKyAgICAgICAgb2JqZWN0cyBvbiBhIHBlci13cmFwcGVyIGJh
c2lzLiBUaGF0IG1lYW50IHRoYXQgd2UgbmVlZGVkIHRvIGtub3cgd2hpY2gKKyAgICAgICAgRE9N
RGF0YVN0b3JlIGEgZ2l2ZW4gd3JhcHBlciB3YXMgaW4gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlv
bi4KKworICAgICAgICBBZnRlciB0aGlzIHBhdGNoLCB3ZSBub3cgdXNlIG9iamVjdCBncm91cHMg
cmF0aGVyIHRoYW4gaW1wbGljaXQKKyAgICAgICAgcmVmZXJlbmNlcyB0byBpbmZvcm0gVjggb2Yg
dGhlc2UgcmVsYXRpb25zaGlwcy4gVGhhdCBoYXMgdHdvIGJlbmVmaXRzOgorCisgICAgICAgIDEp
IFdlIG5vIGxvbmdlciBuZWVkIHRvIGtub3cgd2hpY2ggRE9NRGF0YVN0b3JlIGEgd3JhcHBlciBi
ZWxvbmdzCisgICAgICAgICAgIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBmaW5kIHRoZSBleGFj
dCBzb3VyY2Ugd3JhcHBlciBmb3IgdGhlCisgICAgICAgICAgIGltcGxpY2l0IGNvbm5lY3Rpb24u
CisKKyAgICAgICAgMikgV2UgY2FuIG5vdyBoYW5kbGUgbW9yZSBjb21wbGljYXRlZCBpbXBsaWNp
dCByZWxhdGlvbnNoaXBzLCBmb3IKKyAgICAgICAgICAgZXhhbXBsZSB3aGVuIHNvbWUgb2YgdGhl
IGludGVydmVuaW5nIG9iamVjdHMgaGF2ZW4ndCBoYWQgdGhlaXIKKyAgICAgICAgICAgSmF2YVNj
cmlwdCB3cmFwcGVycyBjcmVhdGVkIHlldC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gdW5s
b2NrcyB0byBwYXRocyBvZiBmdXR1cmUgZGV2ZWxvcG1lbnQ6CisgICAgICAgIEEpIEZpeGluZyB0
aGUgcmVtYWluaW5nIGZhaWx1cmVzIGluIGZhc3QvZG9tL2djLTkuaHRtbAorICAgICAgICBCKSBF
bnVtZXJhdGluZyBET00gd3JhcHBlcnMgZW50aXJlbHkgZnJvbSBWOCByYXRoZXIgdGhhbiBmcm9t
IHRoZQorICAgICAgICAgICBET01XcmFwcGVyTWFwcyAoc28gdGhhdCB3ZSBjYW4gbW92ZSBtb3Jl
IG9iamVjdCB0b3dhcmRzIHVzaW5nCisgICAgICAgICAgIEludHJ1c2l2ZURPTVdyYXBwZXJNYXBz
LCB3aGljaCBhcmVuJ3QgZW51bWVyYWJsZSBmcm9tIFdlYkNvcmUpLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChOZWVkc0N1c3RvbU9w
YXF1ZVJvb3RGb3JHQyk6CisgICAgICAgIChHZW5lcmF0ZU9wYXF1ZVJvb3RGb3JHQyk6CisgICAg
ICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHA6CisgICAgICAgIChJbXBs
aWNpdENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRDb25uZWN0aW9uOjpJ
bXBsaWNpdENvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRDb25uZWN0aW9u
Ojpyb290KToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0Q29ubmVjdGlvbjo6d3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPCk6CisgICAg
ICAgIChXcmFwcGVyR3JvdXBlcik6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6
V3JhcHBlckdyb3VwZXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OmFkZFRv
R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OmtlZXBBbGl2ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcmFwcGVyR3JvdXBlcjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6T2JqZWN0VmlzaXRvcjo6T2JqZWN0VmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpPYmpl
Y3RWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoT2JqZWN0VmlzaXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdDKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVWaXNpdG9yOjpOb2RlVmlzaXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlVmlzaXRvcjo6dmlzaXROb2RlV3JhcHBlcik6CisgICAgICAgIChOb2RlVmlzaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpWOEdDQ29udHJvbGxlcjo6bWFqb3JHQ1Byb2xvZ3VlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChWOEdDQ29udHJvbGxlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvV3JhcHBl
clR5cGVJbmZvLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBw
ZXJUeXBlSW5mbzo6b3BhcXVlUm9vdEZvckdDKToKKyAgICAgICAgKFdyYXBwZXJUeXBlSW5mbyk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhOb2RlTGlzdDo6b3BhcXVlUm9vdEZvckdDKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0OjpvcGFxdWVSb290Rm9y
R0MpOgorCiAyMDEyLTEwLTMxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMzMDQ0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0g
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRl
eCAzOTdkMmMzOGUzNjIwNDI3ZTZiM2YxMGUzYWQ4MjE0YmRmMGRmZTI4Li42Zjk5NWNiODRjNDhi
NjgzYTVkYTkzNjQzZDRjZTA3MTIxOWE0N2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMTgxLDcgKzE4MSw3IEBAIHN1
YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICB9CiB9CiAKLXN1YiBOZWVkc1RvVmlzaXRET01XcmFw
cGVyCitzdWIgTmVlZHNDdXN0b21PcGFxdWVSb290Rm9yR0MKIHsKICAgICBteSAkZGF0YU5vZGUg
PSBzaGlmdDsKICAgICByZXR1cm4gR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5vZGUpIHx8
IEdldEN1c3RvbUlzUmVhY2hhYmxlKCRkYXRhTm9kZSk7CkBAIC0xOTksNyArMTk5LDcgQEAgc3Vi
IEdldEN1c3RvbUlzUmVhY2hhYmxlCiAgICAgcmV0dXJuICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUlzUmVhY2hhYmxlIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVjhDdXN0b21Jc1JlYWNoYWJsZSJ9OwogfQogCi1zdWIgR2VuZXJhdGVWaXNpdERP
TVdyYXBwZXIKK3N1YiBHZW5lcmF0ZU9wYXF1ZVJvb3RGb3JHQwogewogICAgIG15ICgkZGF0YU5v
ZGUsICRpbXBsQ2xhc3NOYW1lKSA9IEBfOwogCkBAIC0yMDgsOCArMjA4LDkgQEAgc3ViIEdlbmVy
YXRlVmlzaXRET01XcmFwcGVyCiAgICAgfQogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5E
KTsKLXZvaWQgVjgke2ltcGxDbGFzc05hbWV9Ojp2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3Jl
KiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQordm9pZCogVjgke2ltcGxDbGFzc05hbWV9OjpvcGFxdWVSb290Rm9yR0Modm9pZCogb2JqZWN0
LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogeworICAgIEFTU0VSVCghd3Jh
cHBlci5Jc0luZGVwZW5kZW50KCkpOwogICAgICR7aW1wbENsYXNzTmFtZX0qIGltcGwgPSBzdGF0
aWNfY2FzdDwke2ltcGxDbGFzc05hbWV9Kj4ob2JqZWN0KTsKIEVORAogICAgIGlmIChHZXRHZW5l
cmF0ZUlzUmVhY2hhYmxlKCRkYXRhTm9kZSkgZXEgICJJbXBsRG9jdW1lbnQiIHx8CkBAIC0yMTgs
NiArMjE5LDggQEAgRU5ECiAgICAgICAgIEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGRhdGFOb2Rl
KSBlcSAgIkltcGxPd25lck5vZGVSb290IiB8fAogICAgICAgICBHZXRHZW5lcmF0ZUlzUmVhY2hh
YmxlKCRkYXRhTm9kZSkgZXEgICJJbXBsQmFzZVJvb3QiKSB7CiAKKyAgICAgICAgJGltcGxJbmNs
dWRlc3siVjhHQ0NvbnRyb2xsZXIuaCJ9ID0gMTsKKwogICAgICAgICBteSAkbWV0aG9kTmFtZTsK
ICAgICAgICAgJG1ldGhvZE5hbWUgPSAiZG9jdW1lbnQiIGlmIChHZXRHZW5lcmF0ZUlzUmVhY2hh
YmxlKCRkYXRhTm9kZSkgZXEgIkltcGxEb2N1bWVudCIpOwogICAgICAgICAkbWV0aG9kTmFtZSA9
ICJlbGVtZW50IiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5vZGUpIGVxICJJbXBs
RWxlbWVudFJvb3QiKTsKQEAgLTIyNiwxNyArMjI5LDEzIEBAIEVORAogICAgICAgICAkbWV0aG9k
TmFtZSA9ICJiYXNlIiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5vZGUpIGVxICJJ
bXBsQmFzZVJvb3QiKTsKIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAg
IGlmIChOb2RlKiBvd25lciA9IGltcGwtPiR7bWV0aG9kTmFtZX0oKSkgewotICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBvd25lcldyYXBwZXIgPSBzdG9yZS0+ZG9tTm9kZU1hcCgp
LmdldChvd25lcik7Ci0gICAgICAgIGlmICghb3duZXJXcmFwcGVyLklzRW1wdHkoKSkgewotICAg
ICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSA9IHdyYXBwZXI7Ci0gICAg
ICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyhvd25lcldyYXBwZXIsICZ2YWx1
ZSwgMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKE5vZGUqIG93bmVyID0gaW1wbC0+JHtt
ZXRob2ROYW1lfSgpKQorICAgICAgICByZXR1cm4gVjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RG
b3JHQyhvd25lcik7CiBFTkQKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQp
OworICAgIHJldHVybiBvYmplY3Q7CiB9CiAKIEVORApAQCAtMzg3LDggKzM4Niw4IEBAIEVORAog
ICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKIEVORAogCi0gICAgaWYgKE5lZWRzVG9W
aXNpdERPTVdyYXBwZXIoJGRhdGFOb2RlKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pO1xuIik7CisgICAgaWYgKE5lZWRzQ3VzdG9tT3Bh
cXVlUm9vdEZvckdDKCRkYXRhTm9kZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgdm9pZCogb3BhcXVlUm9vdEZvckdDKHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0Pik7XG4iKTsKICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQWN0aXZlRE9NT2JqZWN0In0pIHsKQEAgLTI1OTQsNyArMjU5Myw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRpbnRlcmZh
Y2VOYW1lKTsKIAogICAgIG15ICR0b0FjdGl2ZSA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkFjdGl2ZURPTU9iamVjdCJ9ID8gIiR7Y2xhc3NOYW1lfTo6dG9BY3RpdmVET01PYmpl
Y3QiIDogIjAiOwotICAgIG15ICRkb21WaXNpdG9yID0gTmVlZHNUb1Zpc2l0RE9NV3JhcHBlcigk
ZGF0YU5vZGUpID8gIiR7Y2xhc3NOYW1lfTo6dmlzaXRET01XcmFwcGVyIiA6ICIwIjsKKyAgICBt
eSAkcm9vdEZvckdDID0gTmVlZHNDdXN0b21PcGFxdWVSb290Rm9yR0MoJGRhdGFOb2RlKSA/ICIk
e2NsYXNzTmFtZX06Om9wYXF1ZVJvb3RGb3JHQyIgOiAiMCI7CiAKICAgICAjIEZpbmQgdGhlIHN1
cGVyIGRlc2NyaXB0b3IuCiAgICAgbXkgJHBhcmVudENsYXNzID0gIiI7CkBAIC0yNjExLDcgKzI2
MTAsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgbXkgJFdyYXBwZXJUeXBl
UHJvdG90eXBlID0gJGRhdGFOb2RlLT5pc0V4Y2VwdGlvbiA/ICJXcmFwcGVyVHlwZUVycm9yUHJv
dG90eXBlIiA6ICJXcmFwcGVyVHlwZU9iamVjdFByb3RvdHlwZSI7CiAKLSAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xhc3NOYW1lfTo6aW5mbyA9IHsgJHtj
bGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9OjpkZXJlZk9iamVjdCwgJHRvQWN0
aXZlLCAkZG9tVmlzaXRvciwgJHtjbGFzc05hbWV9OjppbnN0YWxsUGVyQ29udGV4dFByb3RvdHlw
ZVByb3BlcnRpZXMsICRwYXJlbnRDbGFzc0luZm8sICRXcmFwcGVyVHlwZVByb3RvdHlwZSB9O1xu
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiV3JhcHBlclR5cGVJbmZvICR7Y2xh
c3NOYW1lfTo6aW5mbyA9IHsgJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSwgJHtjbGFzc05hbWV9
OjpkZXJlZk9iamVjdCwgJHRvQWN0aXZlLCAkcm9vdEZvckdDLCAke2NsYXNzTmFtZX06Omluc3Rh
bGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgJHBhcmVudENsYXNzSW5mbywgJFdyYXBw
ZXJUeXBlUHJvdG90eXBlIH07XG5cbiIpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJu
YW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfVY4SW50ZXJuYWwge1xuXG4iKTsKIAogICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdm9pZCBWOF9VU0UoVCkg
eyB9XG5cbiIpOwpAQCAtMjY3Miw4ICsyNjcxLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgR2VuZXJhdGVSZXBsYWNlYWJsZUF0dHJTZXR0ZXIoJGRhdGFOb2RlLCAkaW1w
bENsYXNzTmFtZSk7CiAgICAgfQogCi0gICAgaWYgKE5lZWRzVG9WaXNpdERPTVdyYXBwZXIoJGRh
dGFOb2RlKSkgewotICAgICAgICBHZW5lcmF0ZVZpc2l0RE9NV3JhcHBlcigkZGF0YU5vZGUsICRp
bXBsQ2xhc3NOYW1lKTsKKyAgICBpZiAoTmVlZHNDdXN0b21PcGFxdWVSb290Rm9yR0MoJGRhdGFO
b2RlKSkgeworICAgICAgICBHZW5lcmF0ZU9wYXF1ZVJvb3RGb3JHQygkZGF0YU5vZGUsICRpbXBs
Q2xhc3NOYW1lKTsKICAgICB9CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiVHlwZWRBcnJheSJ9KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEdDQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEdD
Q29udHJvbGxlci5jcHAKaW5kZXggZjU2Y2NhM2I4YTM2YTQ2OTQwNDlkOTM3NjRhN2VhNjk4ZGRh
NGFjNC4uZmY3ZGZiYzljYTg4NDBlNTE2ODExZDQ1YmU2OWUzNThjOTJjZTM5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcApAQCAtNjcsMTUgKzY3
LDgzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1wbGljaXRDb25uZWN0aW9u
IHsKK3B1YmxpYzoKKyAgICBJbXBsaWNpdENvbm5lY3Rpb24odm9pZCogcm9vdCwgdjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgICAgICA6IG1fcm9vdChyb290KQorICAgICAg
ICAsIG1fd3JhcHBlcih3cmFwcGVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkKiByb290KCkg
Y29uc3QgeyByZXR1cm4gbV9yb290OyB9CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3
cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9CisKK3ByaXZhdGU6CisgICAgdm9p
ZCogbV9yb290OworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gbV93cmFwcGVyOworfTsK
KworYm9vbCBvcGVyYXRvcjwoY29uc3QgSW1wbGljaXRDb25uZWN0aW9uJiBsZWZ0LCBjb25zdCBJ
bXBsaWNpdENvbm5lY3Rpb24mIHJpZ2h0KQoreworICAgIHJldHVybiBsZWZ0LnJvb3QoKSA8IHJp
Z2h0LnJvb3QoKTsKK30KKworY2xhc3MgV3JhcHBlckdyb3VwZXIgeworcHVibGljOgorICAgIFdy
YXBwZXJHcm91cGVyKCkKKyAgICB7CisgICAgICAgIG1fbGl2ZU9iamVjdHMuYXBwZW5kKFY4UGVy
SXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+ZW5zdXJlTGl2ZVJvb3QoKSk7CisgICAgfQorCisgICAg
dm9pZCBhZGRUb0dyb3VwKHZvaWQqIHJvb3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3Jh
cHBlcikKKyAgICB7CisgICAgICAgIG1fY29ubmVjdGlvbnMuYXBwZW5kKEltcGxpY2l0Q29ubmVj
dGlvbihyb290LCB3cmFwcGVyKSk7CisgICAgfQorCisgICAgdm9pZCBrZWVwQWxpdmUodjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQorICAgIHsKKyAgICAgICAgbV9saXZlT2JqZWN0
cy5hcHBlbmQod3JhcHBlcik7CisgICAgfQorCisgICAgdm9pZCBhcHBseSgpCisgICAgeworICAg
ICAgICBpZiAobV9saXZlT2JqZWN0cy5zaXplKCkgPiAxKQorICAgICAgICAgICAgdjg6OlY4OjpB
ZGRPYmplY3RHcm91cChtX2xpdmVPYmplY3RzLmRhdGEoKSwgbV9saXZlT2JqZWN0cy5zaXplKCkp
OworCisgICAgICAgIHN0ZDo6c29ydChtX2Nvbm5lY3Rpb25zLmJlZ2luKCksIG1fY29ubmVjdGlv
bnMuZW5kKCkpOworICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IGdy
b3VwOworICAgICAgICBzaXplX3QgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgbV9jb25uZWN0
aW9ucy5zaXplKCkpIHsKKyAgICAgICAgICAgIHZvaWQqIHJvb3QgPSBtX2Nvbm5lY3Rpb25zW2ld
LnJvb3QoKTsKKworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVu
ZChtX2Nvbm5lY3Rpb25zW2krK10ud3JhcHBlcigpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkg
PCBtX2Nvbm5lY3Rpb25zLnNpemUoKSAmJiByb290ID09IG1fY29ubmVjdGlvbnNbaV0ucm9vdCgp
KTsKKworICAgICAgICAgICAgaWYgKGdyb3VwLnNpemUoKSA+IDEpCisgICAgICAgICAgICAgICAg
djg6OlY4OjpBZGRPYmplY3RHcm91cChncm91cC5kYXRhKCksIGdyb3VwLnNpemUoKSwgMCk7CisK
KyAgICAgICAgICAgIGdyb3VwLnNocmluaygwKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+IG1fbGl2ZU9iamVjdHM7
CisgICAgVmVjdG9yPEltcGxpY2l0Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uczsKK307CisKIGNs
YXNzIE9iamVjdFZpc2l0b3IgOiBwdWJsaWMgRE9NV3JhcHBlclZpc2l0b3I8dm9pZD4gewogcHVi
bGljOgotICAgIGV4cGxpY2l0IE9iamVjdFZpc2l0b3IoVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gPiogbGl2ZU9iamVjdHMpCi0gICAgICAgIDogbV9saXZlT2JqZWN0cyhsaXZlT2Jq
ZWN0cykKKyAgICBleHBsaWNpdCBPYmplY3RWaXNpdG9yKFdyYXBwZXJHcm91cGVyKiBncm91cGVy
KQorICAgICAgICA6IG1fZ3JvdXBlcihncm91cGVyKQogICAgIHsKICAgICB9CiAKLSAgICB2b2lk
IHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqIHN0b3JlLCB2b2lkKiBvYmplY3QsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCisgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIo
RE9NRGF0YVN0b3JlKiwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKQogICAgIHsKKyAgICAgICAgaWYgKHdyYXBwZXIuSXNJbmRlcGVuZGVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IFY4RE9N
V3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CiAKICAgICAgICAgaWYgKFY4TWVzc2Fn
ZVBvcnQ6OmluZm8uZXF1YWxzKHR5cGUpKSB7CkBAIC04NCwyMCArMTUyLDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2Uu
CiAgICAgICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHN0YXRpY19jYXN0PE1lc3NhZ2VQb3J0
Kj4ob2JqZWN0KTsKICAgICAgICAgICAgIGlmIChwb3J0LT5pc0VudGFuZ2xlZCgpIHx8IHBvcnQt
Pmhhc1BlbmRpbmdBY3Rpdml0eSgpKQotICAgICAgICAgICAgICAgIG1fbGl2ZU9iamVjdHMtPmFw
cGVuZCh3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICBtX2dyb3VwZXItPmtlZXBBbGl2ZSh3cmFw
cGVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFjdGl2ZURPTU9iamVjdCogYWN0
aXZlRE9NT2JqZWN0ID0gdHlwZS0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7CiAgICAgICAg
ICAgICBpZiAoYWN0aXZlRE9NT2JqZWN0ICYmIGFjdGl2ZURPTU9iamVjdC0+aGFzUGVuZGluZ0Fj
dGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgbV9saXZlT2JqZWN0cy0+YXBwZW5kKHdyYXBwZXIp
OworICAgICAgICAgICAgICAgIG1fZ3JvdXBlci0+a2VlcEFsaXZlKHdyYXBwZXIpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdHlwZS0+dmlzaXRET01XcmFwcGVyKHN0b3JlLCBvYmplY3QsIHdyYXBw
ZXIpOworICAgICAgICBtX2dyb3VwZXItPmFkZFRvR3JvdXAodHlwZS0+b3BhcXVlUm9vdEZvckdD
KG9iamVjdCwgd3JhcHBlciksIHdyYXBwZXIpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0
b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+KiBtX2xpdmVPYmplY3RzOworICAgIFdyYXBw
ZXJHcm91cGVyKiBtX2dyb3VwZXI7CiB9OwogCisvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIG9w
YXF1ZSBHQyByb290cy4KIHN0YXRpYyB2b2lkIGFkZEltcGxpY2l0UmVmZXJlbmNlc0Zvck5vZGVX
aXRoRXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9kZSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4g
d3JhcHBlcikKIHsKICAgICBBU1NFUlQobm9kZS0+aGFzRXZlbnRMaXN0ZW5lcnMoKSk7CkBAIC0x
MjAsMTUgKzE4OSwxNiBAQCBzdGF0aWMgdm9pZCBhZGRJbXBsaWNpdFJlZmVyZW5jZXNGb3JOb2Rl
V2l0aEV2ZW50TGlzdGVuZXJzKE5vZGUqIG5vZGUsIHY4OjpQZXJzaQogICAgIHY4OjpWODo6QWRk
SW1wbGljaXRSZWZlcmVuY2VzKHdyYXBwZXIsIGxpc3RlbmVycy5kYXRhKCksIGxpc3RlbmVycy5z
aXplKCkpOwogfQogCi1zdGF0aWMgTm9kZSogcm9vdEZvckdDKE5vZGUqIG5vZGUpCit2b2lkKiBW
OEdDQ29udHJvbGxlcjo6b3BhcXVlUm9vdEZvckdDKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5v
ZGUtPmluRG9jdW1lbnQoKSB8fCAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykg
JiYgc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG5vZGUpLT5oYXNQZW5kaW5nQWN0aXZp
dHkoKSkpCiAgICAgICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKG5vZGUt
PmlzQXR0cmlidXRlTm9kZSgpKSB7Ci0gICAgICAgIG5vZGUgPSBzdGF0aWNfY2FzdDxBdHRyKj4o
bm9kZSktPm93bmVyRWxlbWVudCgpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgTm9kZSogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8QXR0cio+
KG5vZGUpLT5vd25lckVsZW1lbnQoKTsKKyAgICAgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgbm9kZSA9IG93bmVyRWxlbWVudDsKICAgICB9
CiAKICAgICB3aGlsZSAoTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKQpA
QCAtMTM3LDMxICsyMDcsMTAgQEAgc3RhdGljIE5vZGUqIHJvb3RGb3JHQyhOb2RlKiBub2RlKQog
ICAgIHJldHVybiBub2RlOwogfQogCi1jbGFzcyBJbXBsaWNpdENvbm5lY3Rpb24gewotcHVibGlj
OgotICAgIEltcGxpY2l0Q29ubmVjdGlvbihOb2RlKiByb290LCB2ODo6UGVyc2lzdGVudDx2ODo6
VmFsdWU+IHdyYXBwZXIpCi0gICAgICAgIDogbV9yb290KHJvb3QpCi0gICAgICAgICwgbV93cmFw
cGVyKHdyYXBwZXIpCi0gICAgewotICAgIH0KLQotICAgIE5vZGUqIHJvb3QoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3Q7IH0KLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIoKSBj
b25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KLQotcHVibGljOgotICAgIE5vZGUqIG1fcm9vdDsK
LSAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG1fd3JhcHBlcjsKLX07Ci0KLWJvb2wgb3Bl
cmF0b3I8KGNvbnN0IEltcGxpY2l0Q29ubmVjdGlvbiYgbGVmdCwgY29uc3QgSW1wbGljaXRDb25u
ZWN0aW9uJiByaWdodCkKLXsKLSAgICByZXR1cm4gbGVmdC5yb290KCkgPCByaWdodC5yb290KCk7
Ci19Ci0KIGNsYXNzIE5vZGVWaXNpdG9yIDogcHVibGljIE5vZGVXcmFwcGVyVmlzaXRvciB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgTm9kZVZpc2l0b3IoVmVjdG9yPHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4gPiogbGl2ZU9iamVjdHMpCi0gICAgICAgIDogbV9saXZlT2JqZWN0cyhsaXZlT2Jq
ZWN0cykKKyAgICBleHBsaWNpdCBOb2RlVmlzaXRvcihXcmFwcGVyR3JvdXBlciogZ3JvdXBlcikK
KyAgICAgICAgOiBtX2dyb3VwZXIoZ3JvdXBlcikKICAgICB7CiAgICAgfQogCkBAIC0xNzQsMzYg
KzIyMywxMyBAQCBwdWJsaWM6CiAKICAgICAgICAgQWN0aXZlRE9NT2JqZWN0KiBhY3RpdmVET01P
YmplY3QgPSB0eXBlLT50b0FjdGl2ZURPTU9iamVjdCh3cmFwcGVyKTsKICAgICAgICAgaWYgKGFj
dGl2ZURPTU9iamVjdCAmJiBhY3RpdmVET01PYmplY3QtPmhhc1BlbmRpbmdBY3Rpdml0eSgpKQot
ICAgICAgICAgICAgbV9saXZlT2JqZWN0cy0+YXBwZW5kKHdyYXBwZXIpOwotCi0gICAgICAgIE5v
ZGUqIHJvb3QgPSByb290Rm9yR0Mobm9kZSk7Ci0gICAgICAgIGlmICghcm9vdCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9jb25uZWN0aW9ucy5hcHBlbmQoSW1wbGljaXRDb25uZWN0
aW9uKHJvb3QsIHdyYXBwZXIpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5R3JvdXBpbmcoKQot
ICAgIHsKLSAgICAgICAgc3RkOjpzb3J0KG1fY29ubmVjdGlvbnMuYmVnaW4oKSwgbV9jb25uZWN0
aW9ucy5lbmQoKSk7Ci0gICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4g
Z3JvdXA7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGkgPCBtX2Nvbm5l
Y3Rpb25zLnNpemUoKSkgewotICAgICAgICAgICAgTm9kZSogcm9vdCA9IG1fY29ubmVjdGlvbnNb
aV0ucm9vdCgpOwotCi0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgZ3JvdXAuYXBw
ZW5kKG1fY29ubmVjdGlvbnNbaSsrXS53cmFwcGVyKCkpOwotICAgICAgICAgICAgfSB3aGlsZSAo
aSA8IG1fY29ubmVjdGlvbnMuc2l6ZSgpICYmIHJvb3QgPT0gbV9jb25uZWN0aW9uc1tpXS5yb290
KCkpOworICAgICAgICAgICAgbV9ncm91cGVyLT5rZWVwQWxpdmUod3JhcHBlcik7CiAKLSAgICAg
ICAgICAgIGlmIChncm91cC5zaXplKCkgPiAxKQotICAgICAgICAgICAgICAgIHY4OjpWODo6QWRk
T2JqZWN0R3JvdXAoZ3JvdXAuZGF0YSgpLCBncm91cC5zaXplKCksIG5ldyBSZXRhaW5lZERPTUlu
Zm8ocm9vdCkpOwotCi0gICAgICAgICAgICBncm91cC5zaHJpbmsoMCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgbV9ncm91cGVyLT5hZGRUb0dyb3VwKFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9y
R0Mobm9kZSksIHdyYXBwZXIpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8djg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiA+KiBtX2xpdmVPYmplY3RzOwotICAgIFZlY3RvcjxJbXBsaWNp
dENvbm5lY3Rpb24+IG1fY29ubmVjdGlvbnM7CisgICAgV3JhcHBlckdyb3VwZXIqIG1fZ3JvdXBl
cjsKIH07CiAKIHZvaWQgVjhHQ0NvbnRyb2xsZXI6OmdjUHJvbG9ndWUodjg6OkdDVHlwZSB0eXBl
LCB2ODo6R0NDYWxsYmFja0ZsYWdzIGZsYWdzKQpAQCAtMjI0LDE3ICsyNTAsMTQgQEAgdm9pZCBW
OEdDQ29udHJvbGxlcjo6bWFqb3JHQ1Byb2xvZ3VlKCkKIAogICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKIAotICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gbGl2ZU9iamVj
dHM7Ci0gICAgbGl2ZU9iamVjdHMuYXBwZW5kKFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+
ZW5zdXJlTGl2ZVJvb3QoKSk7CisgICAgV3JhcHBlckdyb3VwZXIgZ3JvdXBlcjsKIAotICAgIE5v
ZGVWaXNpdG9yIG5vZGVWaXNpdG9yKCZsaXZlT2JqZWN0cyk7CisgICAgTm9kZVZpc2l0b3Igbm9k
ZVZpc2l0b3IoJmdyb3VwZXIpOworICAgIE9iamVjdFZpc2l0b3Igb2JqZWN0VmlzaXRvcigmZ3Jv
dXBlcik7CiAgICAgdmlzaXRBbGxET01Ob2Rlcygmbm9kZVZpc2l0b3IpOwotICAgIG5vZGVWaXNp
dG9yLmFwcGx5R3JvdXBpbmcoKTsKLQotICAgIE9iamVjdFZpc2l0b3Igb2JqZWN0VmlzaXRvcigm
bGl2ZU9iamVjdHMpOwogICAgIHZpc2l0RE9NT2JqZWN0cygmb2JqZWN0VmlzaXRvcik7CiAKLSAg
ICB2ODo6Vjg6OkFkZE9iamVjdEdyb3VwKGxpdmVPYmplY3RzLmRhdGEoKSwgbGl2ZU9iamVjdHMu
c2l6ZSgpKTsKKyAgICBncm91cGVyLmFwcGx5KCk7CiAKICAgICBWOFBlcklzb2xhdGVEYXRhKiBk
YXRhID0gVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpOwogICAgIGRhdGEtPnN0cmluZ0NhY2hl
KCktPmNsZWFyT25HQygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhHQ0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250cm9s
bGVyLmgKaW5kZXggNTQ0ZDM5ZmEzOGVhODU1NDVmODk0NDcyY2QyYzc4NDYxNDA1ZmRiZi4uMTU1
MTY4MTI1YjRlYmI0YzE5NDBjYWEzM2UwYTY3NWU1ZGQzMzkyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5oCkBAIC0zNSw2ICszNSw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTm9kZTsKKwogY2xhc3MgVjhHQ0NvbnRyb2xsZXIgewog
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGdjUHJvbG9ndWUodjg6OkdDVHlwZSwgdjg6OkdDQ2Fs
bGJhY2tGbGFncyk7CkBAIC00Nyw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBj
aGVja01lbW9yeVVzYWdlKCk7CiAgICAgc3RhdGljIHZvaWQgaGludEZvckNvbGxlY3RHYXJiYWdl
KCk7CiAgICAgc3RhdGljIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKKworICAgIHN0YXRpYyB2b2lk
KiBvcGFxdWVSb290Rm9yR0MoTm9kZSopOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvV3JhcHBlclR5cGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaAppbmRleCAzYTJkYWQ1ZTdmZDEzNzA0Y2Q3YzI4NmE4
MDcyNjZjNjljYTA3OWFmLi4yN2M3ZWY2Yjc2OTE3MWEzMWIyMjAxM2NiNjBiN2IyNDY2YzVkYzA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8uaApAQCAt
NDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdHlwZWRlZiB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpHZXRUZW1wbGF0ZUZ1bmN0aW9uKSgpOwogICAg
IHR5cGVkZWYgdm9pZCAoKkRlcmVmT2JqZWN0RnVuY3Rpb24pKHZvaWQqKTsKICAgICB0eXBlZGVm
IEFjdGl2ZURPTU9iamVjdCogKCpUb0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uKSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KTsKLSAgICB0eXBlZGVmIHZvaWQgKCpET01XcmFwcGVyVmlzaXRvckZ1bmN0
aW9uKShET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwor
ICAgIHR5cGVkZWYgdm9pZCogKCpPcGFxdWVSb290Rm9yR0MpKHZvaWQqLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pik7CiAgICAgdHlwZWRlZiB2b2lkICgqSW5zdGFsbFBlckNvbnRleHRQcm90
b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb24pKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwogCiAgICAg
ZW51bSBXcmFwcGVyVHlwZVByb3RvdHlwZSB7CkBAIC0xMDIsMTYgKzEwMiwxNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9BY3RpdmVET01PYmplY3RGdW5jdGlv
bihvYmplY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9N
RGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKQorICAgICAgICB2b2lkKiBvcGFxdWVSb290Rm9yR0Modm9pZCogb2JqZWN0LCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoZG9tV3JhcHBlclZpc2l0b3JGdW5jdGlvbikKLSAgICAgICAgICAgICAgICBkb21XcmFw
cGVyVmlzaXRvckZ1bmN0aW9uKHN0b3JlLCBvYmplY3QsIHdyYXBwZXIpOworICAgICAgICAgICAg
aWYgKCFvcGFxdWVSb290Rm9yR0NGdW5jdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgICAgICAgICAgcmV0dXJuIG9wYXF1ZVJvb3RGb3JHQ0Z1bmN0aW9uKG9iamVjdCwg
d3JhcHBlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBHZXRUZW1wbGF0ZUZ1bmN0aW9u
IGdldFRlbXBsYXRlRnVuY3Rpb247CiAgICAgICAgIGNvbnN0IERlcmVmT2JqZWN0RnVuY3Rpb24g
ZGVyZWZPYmplY3RGdW5jdGlvbjsKICAgICAgICAgY29uc3QgVG9BY3RpdmVET01PYmplY3RGdW5j
dGlvbiB0b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uOwotICAgICAgICBjb25zdCBET01XcmFwcGVy
VmlzaXRvckZ1bmN0aW9uIGRvbVdyYXBwZXJWaXNpdG9yRnVuY3Rpb247CisgICAgICAgIGNvbnN0
IE9wYXF1ZVJvb3RGb3JHQyBvcGFxdWVSb290Rm9yR0NGdW5jdGlvbjsKICAgICAgICAgY29uc3Qg
SW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb24gaW5zdGFsbFBlckNv
bnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb247CiAgICAgICAgIGNvbnN0IFdyYXBwZXJU
eXBlSW5mbyogcGFyZW50Q2xhc3M7CiAgICAgICAgIGNvbnN0IFdyYXBwZXJUeXBlUHJvdG90eXBl
IHdyYXBwZXJUeXBlUHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCmluZGV4IDRlOGNiNTU3OTQ1ODM2MmE5
N2Q5MzU1MDQwNzE3ZDA2OWFlMDI5NzUuLmU0MjU4OWU2OWJhYzFkYzVmMzc0MjA4ZmVlY2ExODRl
NDVhMjg5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEeW5h
bWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVjhOb2RlLmgiCiAK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01OSwxOSArNjAsMTYgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4Tm9kZUxpc3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUKICAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRl
cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKLXZvaWQgVjhOb2RlTGlzdDo6dmlzaXRET01X
cmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQqIFY4Tm9kZUxpc3Q6Om9wYXF1ZVJvb3RGb3JHQyh2
b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7CisgICAg
QVNTRVJUKFY4Tm9kZUxpc3Q6Okhhc0luc3RhbmNlKHdyYXBwZXIpKTsKICAgICBOb2RlTGlzdCog
aW1wbCA9IHN0YXRpY19jYXN0PE5vZGVMaXN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoaW1wbC0+aXNE
eW5hbWljTm9kZUxpc3QoKSkgewotICAgICAgICBOb2RlKiBvd25lciA9IHN0YXRpY19jYXN0PER5
bmFtaWNOb2RlTGlzdCo+KGltcGwpLT5vd25lck5vZGUoKTsKLSAgICAgICAgaWYgKG93bmVyKSB7
Ci0gICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBvd25lcldyYXBwZXIgPSBz
dG9yZS0+ZG9tTm9kZU1hcCgpLmdldChvd25lcik7Ci0gICAgICAgICAgICBpZiAoIW93bmVyV3Jh
cHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFs
dWU+IHZhbHVlID0gd3JhcHBlcjsKLSAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0
UmVmZXJlbmNlcyhvd25lcldyYXBwZXIsICZ2YWx1ZSwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgaWYgKCFpbXBsLT5pc0R5bmFtaWNOb2RlTGlzdCgpKQorICAgICAg
ICByZXR1cm4gb2JqZWN0OworICAgIE5vZGUqIG93bmVyID0gc3RhdGljX2Nhc3Q8RHluYW1pY05v
ZGVMaXN0Kj4oaW1wbCktPm93bmVyTm9kZSgpOworICAgIGlmICghb3duZXIpCisgICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgcmV0dXJuIFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0Mo
b3duZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdEN1c3RvbS5jcHAKaW5kZXggMzI0OTJjZmI3MmEyMDRkZmNkOWVjNWE2NjBjNWY3
YjBhMWQ5NWY4OS4uZWYxNDU2NWZjZTEyYTU0N2IyOTI1Y2Q5OTM2NTg5ZTgxMjEyMDg0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3BlZWNoUmVjb2du
aXRpb25SZXN1bHRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Q3VzdG9tLmNwcApAQCAtMzEsMTYgKzMxLDE1
IEBACiAKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4R0NDb250cm9sbGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBWOFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Ojp2aXNpdERPTVdyYXBwZXIo
RE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0PiB3cmFwcGVyKQordm9pZCogVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6b3BhcXVlUm9v
dEZvckdDKHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikK
IHsKKyAgICBBU1NFUlQoVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6SGFzSW5zdGFuY2Uod3Jh
cHBlcikpOwogICAgIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0KiBpbXBsID0gc3RhdGljX2Nhc3Q8
U3BlZWNoUmVjb2duaXRpb25SZXN1bHQqPihvYmplY3QpOwotICAgIERvY3VtZW50KiBlbW1hID0g
aW1wbC0+ZW1tYSgpOwotICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gZW1tYVdyYXBwZXIg
PSBzdG9yZS0+ZG9tTm9kZU1hcCgpLmdldChlbW1hKTsKLSAgICBpZiAoIWVtbWFXcmFwcGVyLklz
RW1wdHkoKSkKLSAgICAgICAgdjg6OlY4OjpBZGRJbXBsaWNpdFJlZmVyZW5jZXMod3JhcHBlciwg
JmVtbWFXcmFwcGVyLCAxKTsKKyAgICByZXR1cm4gVjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RG
b3JHQyhpbXBsLT5lbW1hKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ODFmNjhiMmU3NzVkODhiNjhhODRlZjJjNmYyNDJjYTQ0NDY3MWNlOS4uMTYzNDk1NjI2MWQ0YzFh
ZmE3OTkzODExMjlmODQyODNkMjg4NGYyMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTEw
LTMxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1Y4XSBHYXJi
YWdlIGNvbGxlY3Rpb24gc2hvdWxkIHVzZSBvcGFxdWUgcm9vdHMgcmF0aGVyIHRoYW4gaW1wbGlj
aXQgcmVmZXJlbmNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAwNzA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdCBwcm9ncmVzc2lvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zh
c3QvZG9tL2djLTktZXhwZWN0ZWQudHh0OgorCiAyMDEyLTEwLTMxICBTaGVyaWZmIEJvdCAgPHdl
YmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMTMzMDQ0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
ZmFzdC9kb20vZ2MtOS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS9mYXN0L2RvbS9nYy05LWV4cGVjdGVkLnR4dAppbmRleCBkYWFkOTRjYWZmMDAzZDg0OTIzN2Rj
Y2FiYTUwMGNlYzBiYWIxYjRhLi5iNzM3NTVkMjg0YzEzYjRmYTdiOWNkZTNlNGExMTg0YWQ2OTMx
NmMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0L2RvbS9n
Yy05LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9mYXN0
L2RvbS9nYy05LWV4cGVjdGVkLnR4dApAQCAtNjksOCArNjksOCBAQCBQQVNTOiBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgnbWFwJylbMF0uYXJlYXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91
bGQgYmUgMQogRkFJTDogZG9jdW1lbnQuYm9keS5zdHlsZS5teUN1c3RvbVByb3BlcnR5IHNob3Vs
ZCBiZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KIEZBSUw6IGRvY3VtZW50LmJvZHkuc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZSgnY29sb3InKS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBi
ZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KIFBBU1M6IGRvY3VtZW50LnN0eWxlU2hlZXRz
Lm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgotRkFJTDogZG9jdW1lbnQuc3R5
bGVTaGVldHNbMF0ubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1
bmRlZmluZWQuCi1GQUlMOiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5jc3NSdWxlcy5teUN1c3Rv
bVByb3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVmaW5lZC4KK1BBU1M6IGRv
Y3VtZW50LnN0eWxlU2hlZXRzWzBdLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlz
LgorUEFTUzogZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXMubXlDdXN0b21Qcm9wZXJ0
eSBzaG91bGQgYmUgMSBhbmQgaXMuCiBGQUlMOiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5jc3NS
dWxlc1swXS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGJ1dCBpbnN0ZWFkIGlzIHVuZGVm
aW5lZC4KIFBBU1M6IG5ldyBYUGF0aEV2YWx1YXRvcigpLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxk
IGJlIHVuZGVmaW5lZCBhbmQgaXMuCiBQQVNTOiBuZXcgWFBhdGhFdmFsdWF0b3IoKS5ldmFsdWF0
ZSgnLycsIGRvY3VtZW50LCBudWxsLCAwLCBudWxsKS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBi
ZSB1bmRlZmluZWQgYW5kIGlzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171749</attachid>
            <date>2012-10-31 18:17:07 -0700</date>
            <delta_ts>2012-10-31 19:37:58 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100707-20121031181530.patch</filename>
            <type>text/plain</type>
            <size>22140</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzEwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDEyLTEwLTMxICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1Y4XSBHYXJiYWdlIGNvbGxlY3Rp
b24gc2hvdWxkIHVzZSBvcGFxdWUgcm9vdHMgcmF0aGVyIHRoYW4gaW1wbGljaXQgcmVmZXJlbmNl
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNzA3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VudGFybyBIYXJhLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggcmVwbGFjZXMgdmlzaXRET01XcmFwcGVyIHdpdGggb3BhcXVlUm9vdEZvckdDLiBUaGUKKyAg
ICAgICAgZm9ybWVyIHVzZWQgdG8gaW5mb3JtIFY4IG9mIGltcGxpY2l0IHJlbGF0aW9uc2hpcHMg
YmV0d2VlbiB3cmFwcGVyCisgICAgICAgIG9iamVjdHMgb24gYSBwZXItd3JhcHBlciBiYXNpcy4g
VGhhdCBtZWFudCB0aGF0IHdlIG5lZWRlZCB0byBrbm93IHdoaWNoCisgICAgICAgIERPTURhdGFT
dG9yZSBhIGdpdmVuIHdyYXBwZXIgd2FzIGluIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uCisK
KyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgd2Ugbm93IHVzZSBvYmplY3QgZ3JvdXBzIHJhdGhl
ciB0aGFuIGltcGxpY2l0CisgICAgICAgIHJlZmVyZW5jZXMgdG8gaW5mb3JtIFY4IG9mIHRoZXNl
IHJlbGF0aW9uc2hpcHMuIFRoYXQgaGFzIHR3byBiZW5lZml0czoKKworICAgICAgICAxKSBXZSBu
byBsb25nZXIgbmVlZCB0byBrbm93IHdoaWNoIERPTURhdGFTdG9yZSBhIHdyYXBwZXIgYmVsb25n
cworICAgICAgICAgICBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gZmluZCB0aGUgZXhhY3Qgc291
cmNlIHdyYXBwZXIgZm9yIHRoZQorICAgICAgICAgICBpbXBsaWNpdCBjb25uZWN0aW9uLgorCisg
ICAgICAgIDIpIFdlIGNhbiBub3cgaGFuZGxlIG1vcmUgY29tcGxpY2F0ZWQgaW1wbGljaXQgcmVs
YXRpb25zaGlwcywgZm9yCisgICAgICAgICAgIGV4YW1wbGUgd2hlbiBzb21lIG9mIHRoZSBpbnRl
cnZlbmluZyBvYmplY3RzIGhhdmVuJ3QgaGFkIHRoZWlyCisgICAgICAgICAgIEphdmFTY3JpcHQg
d3JhcHBlcnMgY3JlYXRlZCB5ZXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHVubG9ja3Mg
dG8gcGF0aHMgb2YgZnV0dXJlIGRldmVsb3BtZW50OgorICAgICAgICBBKSBGaXhpbmcgdGhlIHJl
bWFpbmluZyBmYWlsdXJlcyBpbiBmYXN0L2RvbS9nYy05Lmh0bWwKKyAgICAgICAgQikgRW51bWVy
YXRpbmcgRE9NIHdyYXBwZXJzIGVudGlyZWx5IGZyb20gVjggcmF0aGVyIHRoYW4gZnJvbSB0aGUK
KyAgICAgICAgICAgRE9NV3JhcHBlck1hcHMgKHNvIHRoYXQgd2UgY2FuIG1vdmUgbW9yZSBvYmpl
Y3QgdG93YXJkcyB1c2luZworICAgICAgICAgICBJbnRydXNpdmVET01XcmFwcGVyTWFwcywgd2hp
Y2ggYXJlbid0IGVudW1lcmFibGUgZnJvbSBXZWJDb3JlKS4KKworICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoTmVlZHNDdXN0b21PcGFxdWVS
b290Rm9yR0MpOgorICAgICAgICAoR2VuZXJhdGVPcGFxdWVSb290Rm9yR0MpOgorICAgICAgICAo
R2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoSW1wbGljaXRD
b25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0Q29ubmVjdGlvbjo6SW1wbGlj
aXRDb25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0Q29ubmVjdGlvbjo6cm9v
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdENvbm5lY3Rpb246OndyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjwpOgorICAgICAgICAo
V3JhcHBlckdyb3VwZXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OldyYXBw
ZXJHcm91cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJHcm91cGVyOjphZGRUb0dyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZXJHcm91cGVyOjprZWVwQWxpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JhcHBlckdyb3VwZXI6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Ok9i
amVjdFZpc2l0b3I6Ok9iamVjdFZpc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0Vmlz
aXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAgICAgICAgKE9iamVjdFZpc2l0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RGb3JHQyk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVmlzaXRvcjo6Tm9kZVZpc2l0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZVZpc2l0b3I6OnZpc2l0Tm9kZVdyYXBwZXIpOgorICAgICAgICAoTm9kZVZpc2l0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhHQ0NvbnRyb2xsZXI6Om1ham9yR0NQcm9sb2d1ZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoVjhHQ0NvbnRyb2xsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dyYXBwZXJUeXBl
SW5mby5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVyVHlw
ZUluZm86Om9wYXF1ZVJvb3RGb3JHQyk6CisgICAgICAgIChXcmFwcGVyVHlwZUluZm8pOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4Tm9kZUxpc3Q6Om9wYXF1ZVJvb3RGb3JHQyk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U3BlZWNoUmVjb2duaXRpb25SZXN1bHRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6b3BhcXVlUm9vdEZvckdDKToK
KwogMjAxMi0xMC0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
QSBKU0MgcHJpbnRmIChzdXBwb3J0IGZvciAlSitzIGFuZCAlYikuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNp
b24gMTMzMTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBzdWIgQWRkSW5jbHVk
ZXNGb3JUeXBlCiAgICAgfQogfQogCi1zdWIgTmVlZHNUb1Zpc2l0RE9NV3JhcHBlcgorc3ViIE5l
ZWRzQ3VzdG9tT3BhcXVlUm9vdEZvckdDCiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAg
ICAgcmV0dXJuIEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGRhdGFOb2RlKSB8fCBHZXRDdXN0b21J
c1JlYWNoYWJsZSgkZGF0YU5vZGUpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHN1YiBHZXRDdXN0b21J
c1JlYWNoYWJsZQogICAgIHJldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21Jc1JlYWNoYWJsZSJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4
Q3VzdG9tSXNSZWFjaGFibGUifTsKIH0KIAotc3ViIEdlbmVyYXRlVmlzaXRET01XcmFwcGVyCitz
dWIgR2VuZXJhdGVPcGFxdWVSb290Rm9yR0MKIHsKICAgICBteSAoJGRhdGFOb2RlLCAkaW1wbENs
YXNzTmFtZSkgPSBAXzsKIApAQCAtMjA4LDggKzIwOCw5IEBAIHN1YiBHZW5lcmF0ZVZpc2l0RE9N
V3JhcHBlcgogICAgIH0KIAogICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci12b2lkIFY4
JHtpbXBsQ2xhc3NOYW1lfTo6dmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZv
aWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQqIFY4
JHtpbXBsQ2xhc3NOYW1lfTo6b3BhcXVlUm9vdEZvckdDKHZvaWQqIG9iamVjdCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKKyAgICBBU1NFUlQoIXdyYXBwZXIuSXNJbmRl
cGVuZGVudCgpKTsKICAgICAke2ltcGxDbGFzc05hbWV9KiBpbXBsID0gc3RhdGljX2Nhc3Q8JHtp
bXBsQ2xhc3NOYW1lfSo+KG9iamVjdCk7CiBFTkQKICAgICBpZiAoR2V0R2VuZXJhdGVJc1JlYWNo
YWJsZSgkZGF0YU5vZGUpIGVxICAiSW1wbERvY3VtZW50IiB8fApAQCAtMjE4LDYgKzIxOSw4IEBA
IEVORAogICAgICAgICBHZXRHZW5lcmF0ZUlzUmVhY2hhYmxlKCRkYXRhTm9kZSkgZXEgICJJbXBs
T3duZXJOb2RlUm9vdCIgfHwKICAgICAgICAgR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5v
ZGUpIGVxICAiSW1wbEJhc2VSb290IikgewogCisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4R0ND
b250cm9sbGVyLmgifSA9IDE7CisKICAgICAgICAgbXkgJG1ldGhvZE5hbWU7CiAgICAgICAgICRt
ZXRob2ROYW1lID0gImRvY3VtZW50IiBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkZGF0YU5v
ZGUpIGVxICJJbXBsRG9jdW1lbnQiKTsKICAgICAgICAgJG1ldGhvZE5hbWUgPSAiZWxlbWVudCIg
aWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGRhdGFOb2RlKSBlcSAiSW1wbEVsZW1lbnRSb290
Iik7CkBAIC0yMjYsMTcgKzIyOSwxMyBAQCBFTkQKICAgICAgICAgJG1ldGhvZE5hbWUgPSAiYmFz
ZSIgaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGRhdGFOb2RlKSBlcSAiSW1wbEJhc2VSb290
Iik7CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgICBpZiAoTm9kZSog
b3duZXIgPSBpbXBsLT4ke21ldGhvZE5hbWV9KCkpIHsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gb3duZXJXcmFwcGVyID0gc3RvcmUtPmRvbU5vZGVNYXAoKS5nZXQob3duZXIp
OwotICAgICAgICBpZiAoIW93bmVyV3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFsdWUgPSB3cmFwcGVyOwotICAgICAgICAgICAgdjg6
OlY4OjpBZGRJbXBsaWNpdFJlZmVyZW5jZXMob3duZXJXcmFwcGVyLCAmdmFsdWUsIDEpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIGlmIChOb2RlKiBvd25lciA9IGltcGwtPiR7bWV0aG9kTmFtZX0o
KSkKKyAgICAgICAgcmV0dXJuIFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0Mob3duZXIp
OwogRU5ECiAgICAgfQogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgICByZXR1
cm4gb2JqZWN0OwogfQogCiBFTkQKQEAgLTM4Nyw4ICszODYsOCBAQCBFTkQKICAgICBzdGF0aWMg
V3JhcHBlclR5cGVJbmZvIGluZm87CiBFTkQKIAotICAgIGlmIChOZWVkc1RvVmlzaXRET01XcmFw
cGVyKCRkYXRhTm9kZSkpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+KTtcbiIpOworICAgIGlmIChOZWVkc0N1c3RvbU9wYXF1ZVJvb3RGb3JH
QygkZGF0YU5vZGUpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
IHZvaWQqIG9wYXF1ZVJvb3RGb3JHQyh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4p
O1xuIik7CiAgICAgfQogCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkFjdGl2ZURPTU9iamVjdCJ9KSB7CkBAIC0yNTk0LDcgKzI1OTMsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50ZXJmYWNlTmFtZSk7CiAK
ICAgICBteSAkdG9BY3RpdmUgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJBY3Rp
dmVET01PYmplY3QifSA/ICIke2NsYXNzTmFtZX06OnRvQWN0aXZlRE9NT2JqZWN0IiA6ICIwIjsK
LSAgICBteSAkZG9tVmlzaXRvciA9IE5lZWRzVG9WaXNpdERPTVdyYXBwZXIoJGRhdGFOb2RlKSA/
ICIke2NsYXNzTmFtZX06OnZpc2l0RE9NV3JhcHBlciIgOiAiMCI7CisgICAgbXkgJHJvb3RGb3JH
QyA9IE5lZWRzQ3VzdG9tT3BhcXVlUm9vdEZvckdDKCRkYXRhTm9kZSkgPyAiJHtjbGFzc05hbWV9
OjpvcGFxdWVSb290Rm9yR0MiIDogIjAiOwogCiAgICAgIyBGaW5kIHRoZSBzdXBlciBkZXNjcmlw
dG9yLgogICAgIG15ICRwYXJlbnRDbGFzcyA9ICIiOwpAQCAtMjYxMSw3ICsyNjEwLDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15ICRXcmFwcGVyVHlwZVByb3RvdHlwZSA9
ICRkYXRhTm9kZS0+aXNFeGNlcHRpb24gPyAiV3JhcHBlclR5cGVFcnJvclByb3RvdHlwZSIgOiAi
V3JhcHBlclR5cGVPYmplY3RQcm90b3R5cGUiOwogCi0gICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIldyYXBwZXJUeXBlSW5mbyAke2NsYXNzTmFtZX06OmluZm8gPSB7ICR7Y2xhc3NOYW1lfTo6
R2V0VGVtcGxhdGUsICR7Y2xhc3NOYW1lfTo6ZGVyZWZPYmplY3QsICR0b0FjdGl2ZSwgJGRvbVZp
c2l0b3IsICR7Y2xhc3NOYW1lfTo6aW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVz
LCAkcGFyZW50Q2xhc3NJbmZvLCAkV3JhcHBlclR5cGVQcm90b3R5cGUgfTtcblxuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIldyYXBwZXJUeXBlSW5mbyAke2NsYXNzTmFtZX06Omlu
Zm8gPSB7ICR7Y2xhc3NOYW1lfTo6R2V0VGVtcGxhdGUsICR7Y2xhc3NOYW1lfTo6ZGVyZWZPYmpl
Y3QsICR0b0FjdGl2ZSwgJHJvb3RGb3JHQywgJHtjbGFzc05hbWV9OjppbnN0YWxsUGVyQ29udGV4
dFByb3RvdHlwZVByb3BlcnRpZXMsICRwYXJlbnRDbGFzc0luZm8sICRXcmFwcGVyVHlwZVByb3Rv
dHlwZSB9O1xuXG4iKTsKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAibmFtZXNwYWNlICR7
aW50ZXJmYWNlTmFtZX1WOEludGVybmFsIHtcblxuIik7CiAKICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAidGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfVxuXG4iKTsK
QEAgLTI2NzIsOCArMjY3MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
IEdlbmVyYXRlUmVwbGFjZWFibGVBdHRyU2V0dGVyKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUp
OwogICAgIH0KIAotICAgIGlmIChOZWVkc1RvVmlzaXRET01XcmFwcGVyKCRkYXRhTm9kZSkpIHsK
LSAgICAgICAgR2VuZXJhdGVWaXNpdERPTVdyYXBwZXIoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFt
ZSk7CisgICAgaWYgKE5lZWRzQ3VzdG9tT3BhcXVlUm9vdEZvckdDKCRkYXRhTm9kZSkpIHsKKyAg
ICAgICAgR2VuZXJhdGVPcGFxdWVSb290Rm9yR0MoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSk7
CiAgICAgfQogCiAgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVk
QXJyYXkifSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4R0NDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTMzMTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhHQ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNSArNjcsODMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbXBsaWNpdENvbm5lY3Rpb24geworcHVi
bGljOgorICAgIEltcGxpY2l0Q29ubmVjdGlvbih2b2lkKiByb290LCB2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IHdyYXBwZXIpCisgICAgICAgIDogbV9yb290KHJvb3QpCisgICAgICAgICwgbV93
cmFwcGVyKHdyYXBwZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQqIHJvb3QoKSBjb25zdCB7
IHJldHVybiBtX3Jvb3Q7IH0KKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBtX3dyYXBwZXI7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkKiBtX3Jv
b3Q7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBtX3dyYXBwZXI7Cit9OworCitib29s
IG9wZXJhdG9yPChjb25zdCBJbXBsaWNpdENvbm5lY3Rpb24mIGxlZnQsIGNvbnN0IEltcGxpY2l0
Q29ubmVjdGlvbiYgcmlnaHQpCit7CisgICAgcmV0dXJuIGxlZnQucm9vdCgpIDwgcmlnaHQucm9v
dCgpOworfQorCitjbGFzcyBXcmFwcGVyR3JvdXBlciB7CitwdWJsaWM6CisgICAgV3JhcHBlckdy
b3VwZXIoKQorICAgIHsKKyAgICAgICAgbV9saXZlT2JqZWN0cy5hcHBlbmQoVjhQZXJJc29sYXRl
RGF0YTo6Y3VycmVudCgpLT5lbnN1cmVMaXZlUm9vdCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZFRvR3JvdXAodm9pZCogcm9vdCwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQor
ICAgIHsKKyAgICAgICAgbV9jb25uZWN0aW9ucy5hcHBlbmQoSW1wbGljaXRDb25uZWN0aW9uKHJv
b3QsIHdyYXBwZXIpKTsKKyAgICB9CisKKyAgICB2b2lkIGtlZXBBbGl2ZSh2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IHdyYXBwZXIpCisgICAgeworICAgICAgICBtX2xpdmVPYmplY3RzLmFwcGVu
ZCh3cmFwcGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGx5KCkKKyAgICB7CisgICAgICAgIGlm
IChtX2xpdmVPYmplY3RzLnNpemUoKSA+IDEpCisgICAgICAgICAgICB2ODo6Vjg6OkFkZE9iamVj
dEdyb3VwKG1fbGl2ZU9iamVjdHMuZGF0YSgpLCBtX2xpdmVPYmplY3RzLnNpemUoKSk7CisKKyAg
ICAgICAgc3RkOjpzb3J0KG1fY29ubmVjdGlvbnMuYmVnaW4oKSwgbV9jb25uZWN0aW9ucy5lbmQo
KSk7CisgICAgICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gZ3JvdXA7Cisg
ICAgICAgIHNpemVfdCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBtX2Nvbm5lY3Rpb25zLnNp
emUoKSkgeworICAgICAgICAgICAgdm9pZCogcm9vdCA9IG1fY29ubmVjdGlvbnNbaV0ucm9vdCgp
OworCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKG1fY29u
bmVjdGlvbnNbaSsrXS53cmFwcGVyKCkpOworICAgICAgICAgICAgfSB3aGlsZSAoaSA8IG1fY29u
bmVjdGlvbnMuc2l6ZSgpICYmIHJvb3QgPT0gbV9jb25uZWN0aW9uc1tpXS5yb290KCkpOworCisg
ICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICB2ODo6Vjg6
OkFkZE9iamVjdEdyb3VwKGdyb3VwLmRhdGEoKSwgZ3JvdXAuc2l6ZSgpLCAwKTsKKworICAgICAg
ICAgICAgZ3JvdXAuc2hyaW5rKDApOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IFZlY3Rvcjx2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4gbV9saXZlT2JqZWN0czsKKyAgICBW
ZWN0b3I8SW1wbGljaXRDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOworfTsKKwogY2xhc3MgT2Jq
ZWN0VmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyVmlzaXRvcjx2b2lkPiB7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgT2JqZWN0VmlzaXRvcihWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiA+KiBsaXZlT2JqZWN0cykKLSAgICAgICAgOiBtX2xpdmVPYmplY3RzKGxpdmVPYmplY3RzKQor
ICAgIGV4cGxpY2l0IE9iamVjdFZpc2l0b3IoV3JhcHBlckdyb3VwZXIqIGdyb3VwZXIpCisgICAg
ICAgIDogbV9ncm91cGVyKGdyb3VwZXIpCiAgICAgewogICAgIH0KIAotICAgIHZvaWQgdmlzaXRE
T01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKKyAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRh
U3RvcmUqLCB2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIp
CiAgICAgeworICAgICAgICBpZiAod3JhcHBlci5Jc0luZGVwZW5kZW50KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gVjhET01XcmFwcGVy
Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKIAogICAgICAgICBpZiAoVjhNZXNzYWdlUG9ydDo6
aW5mby5lcXVhbHModHlwZSkpIHsKQEAgLTg0LDIwICsxNTIsMjEgQEAgcHVibGljOgogICAgICAg
ICAgICAgLy8gaW1wbGVtZW50YXRpb24gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZS4KICAgICAg
ICAgICAgIE1lc3NhZ2VQb3J0KiBwb3J0ID0gc3RhdGljX2Nhc3Q8TWVzc2FnZVBvcnQqPihvYmpl
Y3QpOwogICAgICAgICAgICAgaWYgKHBvcnQtPmlzRW50YW5nbGVkKCkgfHwgcG9ydC0+aGFzUGVu
ZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgICAgICAgICAgbV9saXZlT2JqZWN0cy0+YXBwZW5kKHdy
YXBwZXIpOworICAgICAgICAgICAgICAgIG1fZ3JvdXBlci0+a2VlcEFsaXZlKHdyYXBwZXIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQWN0aXZlRE9NT2JqZWN0KiBhY3RpdmVET01P
YmplY3QgPSB0eXBlLT50b0FjdGl2ZURPTU9iamVjdCh3cmFwcGVyKTsKICAgICAgICAgICAgIGlm
IChhY3RpdmVET01PYmplY3QgJiYgYWN0aXZlRE9NT2JqZWN0LT5oYXNQZW5kaW5nQWN0aXZpdHko
KSkKLSAgICAgICAgICAgICAgICBtX2xpdmVPYmplY3RzLT5hcHBlbmQod3JhcHBlcik7CisgICAg
ICAgICAgICAgICAgbV9ncm91cGVyLT5rZWVwQWxpdmUod3JhcHBlcik7CiAgICAgICAgIH0KIAot
ICAgICAgICB0eXBlLT52aXNpdERPTVdyYXBwZXIoc3RvcmUsIG9iamVjdCwgd3JhcHBlcik7Cisg
ICAgICAgIG1fZ3JvdXBlci0+YWRkVG9Hcm91cCh0eXBlLT5vcGFxdWVSb290Rm9yR0Mob2JqZWN0
LCB3cmFwcGVyKSwgd3JhcHBlcik7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZlY3Rvcjx2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+ID4qIG1fbGl2ZU9iamVjdHM7CisgICAgV3JhcHBlckdyb3Vw
ZXIqIG1fZ3JvdXBlcjsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugb3BhcXVlIEdD
IHJvb3RzLgogc3RhdGljIHZvaWQgYWRkSW1wbGljaXRSZWZlcmVuY2VzRm9yTm9kZVdpdGhFdmVu
dExpc3RlbmVycyhOb2RlKiBub2RlLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVy
KQogewogICAgIEFTU0VSVChub2RlLT5oYXNFdmVudExpc3RlbmVycygpKTsKQEAgLTEyMCwxNSAr
MTg5LDE2IEBAIHN0YXRpYyB2b2lkIGFkZEltcGxpY2l0UmVmZXJlbmNlc0Zvck5vZGUKICAgICB2
ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyh3cmFwcGVyLCBsaXN0ZW5lcnMuZGF0YSgpLCBs
aXN0ZW5lcnMuc2l6ZSgpKTsKIH0KIAotc3RhdGljIE5vZGUqIHJvb3RGb3JHQyhOb2RlKiBub2Rl
KQordm9pZCogVjhHQ0NvbnRyb2xsZXI6Om9wYXF1ZVJvb3RGb3JHQyhOb2RlKiBub2RlKQogewog
ICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbWdUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihub2RlKS0+aGFzUGVu
ZGluZ0FjdGl2aXR5KCkpKQogICAgICAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKTsKIAogICAg
IGlmIChub2RlLT5pc0F0dHJpYnV0ZU5vZGUoKSkgewotICAgICAgICBub2RlID0gc3RhdGljX2Nh
c3Q8QXR0cio+KG5vZGUpLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIE5vZGUqIG93bmVyRWxlbWVudCA9IHN0YXRpY19j
YXN0PEF0dHIqPihub2RlKS0+b3duZXJFbGVtZW50KCk7CisgICAgICAgIGlmICghb3duZXJFbGVt
ZW50KQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIG5vZGUgPSBvd25lckVsZW1l
bnQ7CiAgICAgfQogCiAgICAgd2hpbGUgKE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE9ySG9z
dE5vZGUoKSkKQEAgLTEzNywzMSArMjA3LDEwIEBAIHN0YXRpYyBOb2RlKiByb290Rm9yR0MoTm9k
ZSogbm9kZSkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotY2xhc3MgSW1wbGljaXRDb25uZWN0aW9u
IHsKLXB1YmxpYzoKLSAgICBJbXBsaWNpdENvbm5lY3Rpb24oTm9kZSogcm9vdCwgdjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyKQotICAgICAgICA6IG1fcm9vdChyb290KQotICAgICAg
ICAsIG1fd3JhcHBlcih3cmFwcGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBOb2RlKiByb290KCkg
Y29uc3QgeyByZXR1cm4gbV9yb290OyB9Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3
cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyOyB9Ci0KLXB1YmxpYzoKLSAgICBOb2Rl
KiBtX3Jvb3Q7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBtX3dyYXBwZXI7Ci19Owot
Ci1ib29sIG9wZXJhdG9yPChjb25zdCBJbXBsaWNpdENvbm5lY3Rpb24mIGxlZnQsIGNvbnN0IElt
cGxpY2l0Q29ubmVjdGlvbiYgcmlnaHQpCi17Ci0gICAgcmV0dXJuIGxlZnQucm9vdCgpIDwgcmln
aHQucm9vdCgpOwotfQotCiBjbGFzcyBOb2RlVmlzaXRvciA6IHB1YmxpYyBOb2RlV3JhcHBlclZp
c2l0b3IgewogcHVibGljOgotICAgIGV4cGxpY2l0IE5vZGVWaXNpdG9yKFZlY3Rvcjx2ODo6UGVy
c2lzdGVudDx2ODo6VmFsdWU+ID4qIGxpdmVPYmplY3RzKQotICAgICAgICA6IG1fbGl2ZU9iamVj
dHMobGl2ZU9iamVjdHMpCisgICAgZXhwbGljaXQgTm9kZVZpc2l0b3IoV3JhcHBlckdyb3VwZXIq
IGdyb3VwZXIpCisgICAgICAgIDogbV9ncm91cGVyKGdyb3VwZXIpCiAgICAgewogICAgIH0KIApA
QCAtMTc0LDM2ICsyMjMsMTMgQEAgcHVibGljOgogCiAgICAgICAgIEFjdGl2ZURPTU9iamVjdCog
YWN0aXZlRE9NT2JqZWN0ID0gdHlwZS0+dG9BY3RpdmVET01PYmplY3Qod3JhcHBlcik7CiAgICAg
ICAgIGlmIChhY3RpdmVET01PYmplY3QgJiYgYWN0aXZlRE9NT2JqZWN0LT5oYXNQZW5kaW5nQWN0
aXZpdHkoKSkKLSAgICAgICAgICAgIG1fbGl2ZU9iamVjdHMtPmFwcGVuZCh3cmFwcGVyKTsKLQot
ICAgICAgICBOb2RlKiByb290ID0gcm9vdEZvckdDKG5vZGUpOwotICAgICAgICBpZiAoIXJvb3Qp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fY29ubmVjdGlvbnMuYXBwZW5kKEltcGxp
Y2l0Q29ubmVjdGlvbihyb290LCB3cmFwcGVyKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBseUdy
b3VwaW5nKCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c29ydChtX2Nvbm5lY3Rpb25zLmJlZ2luKCks
IG1fY29ubmVjdGlvbnMuZW5kKCkpOwotICAgICAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiA+IGdyb3VwOwotICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChp
IDwgbV9jb25uZWN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgICAgIE5vZGUqIHJvb3QgPSBtX2Nv
bm5lY3Rpb25zW2ldLnJvb3QoKTsKLQotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IGdyb3VwLmFwcGVuZChtX2Nvbm5lY3Rpb25zW2krK10ud3JhcHBlcigpKTsKLSAgICAgICAgICAg
IH0gd2hpbGUgKGkgPCBtX2Nvbm5lY3Rpb25zLnNpemUoKSAmJiByb290ID09IG1fY29ubmVjdGlv
bnNbaV0ucm9vdCgpKTsKKyAgICAgICAgICAgIG1fZ3JvdXBlci0+a2VlcEFsaXZlKHdyYXBwZXIp
OwogCi0gICAgICAgICAgICBpZiAoZ3JvdXAuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICB2
ODo6Vjg6OkFkZE9iamVjdEdyb3VwKGdyb3VwLmRhdGEoKSwgZ3JvdXAuc2l6ZSgpLCBuZXcgUmV0
YWluZWRET01JbmZvKHJvb3QpKTsKLQotICAgICAgICAgICAgZ3JvdXAuc2hyaW5rKDApOwotICAg
ICAgICB9CisgICAgICAgIG1fZ3JvdXBlci0+YWRkVG9Hcm91cChWOEdDQ29udHJvbGxlcjo6b3Bh
cXVlUm9vdEZvckdDKG5vZGUpLCB3cmFwcGVyKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVj
dG9yPHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiogbV9saXZlT2JqZWN0czsKLSAgICBWZWN0
b3I8SW1wbGljaXRDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb25zOworICAgIFdyYXBwZXJHcm91cGVy
KiBtX2dyb3VwZXI7CiB9OwogCiB2b2lkIFY4R0NDb250cm9sbGVyOjpnY1Byb2xvZ3VlKHY4OjpH
Q1R5cGUgdHlwZSwgdjg6OkdDQ2FsbGJhY2tGbGFncyBmbGFncykKQEAgLTIyNCwxNyArMjUwLDE0
IEBAIHZvaWQgVjhHQ0NvbnRyb2xsZXI6Om1ham9yR0NQcm9sb2d1ZSgpCiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgc2NvcGU7CiAKLSAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiA+
IGxpdmVPYmplY3RzOwotICAgIGxpdmVPYmplY3RzLmFwcGVuZChWOFBlcklzb2xhdGVEYXRhOjpj
dXJyZW50KCktPmVuc3VyZUxpdmVSb290KCkpOworICAgIFdyYXBwZXJHcm91cGVyIGdyb3VwZXI7
CiAKLSAgICBOb2RlVmlzaXRvciBub2RlVmlzaXRvcigmbGl2ZU9iamVjdHMpOworICAgIE5vZGVW
aXNpdG9yIG5vZGVWaXNpdG9yKCZncm91cGVyKTsKKyAgICBPYmplY3RWaXNpdG9yIG9iamVjdFZp
c2l0b3IoJmdyb3VwZXIpOwogICAgIHZpc2l0QWxsRE9NTm9kZXMoJm5vZGVWaXNpdG9yKTsKLSAg
ICBub2RlVmlzaXRvci5hcHBseUdyb3VwaW5nKCk7Ci0KLSAgICBPYmplY3RWaXNpdG9yIG9iamVj
dFZpc2l0b3IoJmxpdmVPYmplY3RzKTsKICAgICB2aXNpdERPTU9iamVjdHMoJm9iamVjdFZpc2l0
b3IpOwogCi0gICAgdjg6OlY4OjpBZGRPYmplY3RHcm91cChsaXZlT2JqZWN0cy5kYXRhKCksIGxp
dmVPYmplY3RzLnNpemUoKSk7CisgICAgZ3JvdXBlci5hcHBseSgpOwogCiAgICAgVjhQZXJJc29s
YXRlRGF0YSogZGF0YSA9IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBkYXRhLT5z
dHJpbmdDYWNoZSgpLT5jbGVhck9uR0MoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhHQ0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTMzMTA1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIE5vZGU7CisKIGNsYXNzIFY4
R0NDb250cm9sbGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBnY1Byb2xvZ3VlKHY4OjpH
Q1R5cGUsIHY4OjpHQ0NhbGxiYWNrRmxhZ3MpOwpAQCAtNDcsNiArNDksOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgY2hlY2tNZW1vcnlVc2FnZSgpOwogICAgIHN0YXRpYyB2b2lkIGhpbnRG
b3JDb2xsZWN0R2FyYmFnZSgpOwogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisK
KyAgICBzdGF0aWMgdm9pZCogb3BhcXVlUm9vdEZvckdDKE5vZGUqKTsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dyYXBwZXJUeXBlSW5mby5oCShyZXZpc2lv
biAxMzMxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9XcmFwcGVyVHlwZUluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gKCpHZXRUZW1w
bGF0ZUZ1bmN0aW9uKSgpOwogICAgIHR5cGVkZWYgdm9pZCAoKkRlcmVmT2JqZWN0RnVuY3Rpb24p
KHZvaWQqKTsKICAgICB0eXBlZGVmIEFjdGl2ZURPTU9iamVjdCogKCpUb0FjdGl2ZURPTU9iamVj
dEZ1bmN0aW9uKSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKLSAgICB0eXBlZGVmIHZvaWQgKCpE
T01XcmFwcGVyVmlzaXRvckZ1bmN0aW9uKShET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4pOworICAgIHR5cGVkZWYgdm9pZCogKCpPcGFxdWVSb290Rm9yR0Mp
KHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CiAgICAgdHlwZWRlZiB2b2lkICgq
SW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb24pKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4pOwogCiAgICAgZW51bSBXcmFwcGVyVHlwZVByb3RvdHlwZSB7CkBAIC0xMDIs
MTYgKzEwMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9B
Y3RpdmVET01PYmplY3RGdW5jdGlvbihvYmplY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgICAgICB2b2lkKiBvcGFxdWVSb290
Rm9yR0Modm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZG9tV3JhcHBlclZpc2l0b3JGdW5jdGlvbikKLSAg
ICAgICAgICAgICAgICBkb21XcmFwcGVyVmlzaXRvckZ1bmN0aW9uKHN0b3JlLCBvYmplY3QsIHdy
YXBwZXIpOworICAgICAgICAgICAgaWYgKCFvcGFxdWVSb290Rm9yR0NGdW5jdGlvbikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICAgICAgcmV0dXJuIG9wYXF1ZVJvb3RG
b3JHQ0Z1bmN0aW9uKG9iamVjdCwgd3JhcHBlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjb25z
dCBHZXRUZW1wbGF0ZUZ1bmN0aW9uIGdldFRlbXBsYXRlRnVuY3Rpb247CiAgICAgICAgIGNvbnN0
IERlcmVmT2JqZWN0RnVuY3Rpb24gZGVyZWZPYmplY3RGdW5jdGlvbjsKICAgICAgICAgY29uc3Qg
VG9BY3RpdmVET01PYmplY3RGdW5jdGlvbiB0b0FjdGl2ZURPTU9iamVjdEZ1bmN0aW9uOwotICAg
ICAgICBjb25zdCBET01XcmFwcGVyVmlzaXRvckZ1bmN0aW9uIGRvbVdyYXBwZXJWaXNpdG9yRnVu
Y3Rpb247CisgICAgICAgIGNvbnN0IE9wYXF1ZVJvb3RGb3JHQyBvcGFxdWVSb290Rm9yR0NGdW5j
dGlvbjsKICAgICAgICAgY29uc3QgSW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVz
RnVuY3Rpb24gaW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzRnVuY3Rpb247CiAg
ICAgICAgIGNvbnN0IFdyYXBwZXJUeXBlSW5mbyogcGFyZW50Q2xhc3M7CiAgICAgICAgIGNvbnN0
IFdyYXBwZXJUeXBlUHJvdG90eXBlIHdyYXBwZXJUeXBlUHJvdG90eXBlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTMzMTA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlY4Tm9kZS5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNTksMTkgKzYwLDE2
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vZGVMaXN0OjpuYW1lZFAKICAgICByZXR1cm4g
dG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiB9CiAKLXZvaWQgVjhOb2RlTGlzdDo6dmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3Rv
cmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3Zv
aWQqIFY4Tm9kZUxpc3Q6Om9wYXF1ZVJvb3RGb3JHQyh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiB7CisgICAgQVNTRVJUKFY4Tm9kZUxpc3Q6Okhhc0lu
c3RhbmNlKHdyYXBwZXIpKTsKICAgICBOb2RlTGlzdCogaW1wbCA9IHN0YXRpY19jYXN0PE5vZGVM
aXN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoaW1wbC0+aXNEeW5hbWljTm9kZUxpc3QoKSkgewotICAg
ICAgICBOb2RlKiBvd25lciA9IHN0YXRpY19jYXN0PER5bmFtaWNOb2RlTGlzdCo+KGltcGwpLT5v
d25lck5vZGUoKTsKLSAgICAgICAgaWYgKG93bmVyKSB7Ci0gICAgICAgICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiBvd25lcldyYXBwZXIgPSBzdG9yZS0+ZG9tTm9kZU1hcCgpLmdldChv
d25lcik7Ci0gICAgICAgICAgICBpZiAoIW93bmVyV3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlID0gd3JhcHBlcjsKLSAg
ICAgICAgICAgICAgICB2ODo6Vjg6OkFkZEltcGxpY2l0UmVmZXJlbmNlcyhvd25lcldyYXBwZXIs
ICZ2YWx1ZSwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKCFp
bXBsLT5pc0R5bmFtaWNOb2RlTGlzdCgpKQorICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIE5v
ZGUqIG93bmVyID0gc3RhdGljX2Nhc3Q8RHluYW1pY05vZGVMaXN0Kj4oaW1wbCktPm93bmVyTm9k
ZSgpOworICAgIGlmICghb3duZXIpCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJu
IFY4R0NDb250cm9sbGVyOjpvcGFxdWVSb290Rm9yR0Mob3duZXIpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
cGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3BlZWNoUmVjb2duaXRpb25SZXN1bHRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxMzMxMDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDE2ICszMSwxNSBAQAogCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25SZXN1bHQuaCIK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgVjhTcGVlY2hSZWNvZ25pdGlvblJlc3VsdDo6dmlz
aXRET01XcmFwcGVyKERPTURhdGFTdG9yZSogc3RvcmUsIHZvaWQqIG9iamVjdCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQqIFY4U3BlZWNoUmVjb2duaXRpb25SZXN1
bHQ6Om9wYXF1ZVJvb3RGb3JHQyh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpCiB7CisgICAgQVNTRVJUKFY4U3BlZWNoUmVjb2duaXRpb25SZXN1bHQ6Okhh
c0luc3RhbmNlKHdyYXBwZXIpKTsKICAgICBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCogaW1wbCA9
IHN0YXRpY19jYXN0PFNwZWVjaFJlY29nbml0aW9uUmVzdWx0Kj4ob2JqZWN0KTsKLSAgICBEb2N1
bWVudCogZW1tYSA9IGltcGwtPmVtbWEoKTsKLSAgICB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+
IGVtbWFXcmFwcGVyID0gc3RvcmUtPmRvbU5vZGVNYXAoKS5nZXQoZW1tYSk7Ci0gICAgaWYgKCFl
bW1hV3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgIHY4OjpWODo6QWRkSW1wbGljaXRSZWZlcmVu
Y2VzKHdyYXBwZXIsICZlbW1hV3JhcHBlciwgMSk7CisgICAgcmV0dXJuIFY4R0NDb250cm9sbGVy
OjpvcGFxdWVSb290Rm9yR0MoaW1wbC0+ZW1tYSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzMTA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMTAtMzEgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBbVjhdIEdhcmJhZ2UgY29sbGVjdGlvbiBz
aG91bGQgdXNlIG9wYXF1ZSByb290cyByYXRoZXIgdGhhbiBpbXBsaWNpdCByZWZlcmVuY2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA3MDcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBLZW50YXJvIEhhcmEuCisKKyAgICAgICAgVGVzdCBwcm9ncmVz
c2lvbi4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL2djLTktZXhwZWN0
ZWQudHh0OgorCiAyMDEyLTEwLTMxICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZC4gU2tpcCBhbm90aGVyIGZhaWxpbmcgZHJhZyBhbmQgZHJv
cCB0ZXN0LgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vZmFzdC9kb20vZ2Mt
OS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vZmFzdC9kb20vZ2MtOS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEzMzEwNSkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2Zhc3QvZG9tL2djLTktZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw4ICs2OSw4IEBAIFBBU1M6IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdtYXAKIEZBSUw6IGRvY3VtZW50LmJvZHkuc3R5bGUubXlDdXN0b21Qcm9wZXJ0eSBz
aG91bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1bmRlZmluZWQuCiBGQUlMOiBkb2N1bWVudC5ib2R5
LnN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoJ2NvbG9yJykubXlDdXN0b21Qcm9wZXJ0eSBzaG91
bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1bmRlZmluZWQuCiBQQVNTOiBkb2N1bWVudC5zdHlsZVNo
ZWV0cy5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGFuZCBpcy4KLUZBSUw6IGRvY3VtZW50
LnN0eWxlU2hlZXRzWzBdLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYnV0IGluc3RlYWQg
aXMgdW5kZWZpbmVkLgotRkFJTDogZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXMubXlD
dXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1bmRlZmluZWQuCitQQVNT
OiBkb2N1bWVudC5zdHlsZVNoZWV0c1swXS5teUN1c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGFu
ZCBpcy4KK1BBU1M6IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdLmNzc1J1bGVzLm15Q3VzdG9tUHJv
cGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgogRkFJTDogZG9jdW1lbnQuc3R5bGVTaGVldHNbMF0u
Y3NzUnVsZXNbMF0ubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBidXQgaW5zdGVhZCBpcyB1
bmRlZmluZWQuCiBQQVNTOiBuZXcgWFBhdGhFdmFsdWF0b3IoKS5teUN1c3RvbVByb3BlcnR5IHNo
b3VsZCBiZSB1bmRlZmluZWQgYW5kIGlzLgogUEFTUzogbmV3IFhQYXRoRXZhbHVhdG9yKCkuZXZh
bHVhdGUoJy8nLCBkb2N1bWVudCwgbnVsbCwgMCwgbnVsbCkubXlDdXN0b21Qcm9wZXJ0eSBzaG91
bGQgYmUgdW5kZWZpbmVkIGFuZCBpcy4K
</data>

          </attachment>
      

    </bug>

</bugzilla>