<?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>93524</bug_id>
          
          <creation_ts>2012-08-08 14:23:40 -0700</creation_ts>
          <short_desc>[chromium] Add resource transfer functions to CCResourceProvider</short_desc>
          <delta_ts>2012-08-16 21:25:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>94283</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Labour">piman</reporter>
          <assigned_to name="Antoine Labour">piman</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>epenner</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>690729</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 14:23:40 -0700</bug_when>
    <thetext>[chromium] Add resource transfer functions to CCResourceProvider</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690740</commentid>
    <comment_count>1</comment_count>
      <attachid>157296</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 14:27:30 -0700</bug_when>
    <thetext>Created attachment 157296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690743</commentid>
    <comment_count>2</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 14:29:34 -0700</bug_when>
    <thetext>This will need to be reconciled with https://bugs.webkit.org/show_bug.cgi?id=93442 obviously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690761</commentid>
    <comment_count>3</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 14:43:26 -0700</bug_when>
    <thetext>The public calls can be added to the base class as pure virtual methods.  Hopefully with a few tweaks, this API can also be made to work with software compositing.  In that case, we will be pushing a software pixel blob to a method in Nat&apos;s new WebCompositorOutputSurface.  Perhaps we can make WebCompositorOutputSurface also generate a &quot;mailbox&quot; string identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691129</commentid>
    <comment_count>4</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 20:08:27 -0700</bug_when>
    <thetext>On second thought, this isn&apos;t needed at all for software compositing, since we can just treat an &quot;upload()&quot; as a transfer to the root compositor there.

Hmm, since I gather this is just for accelerated painting, it seems like it would make a more straightforward data pipeline to send up the Ganesh commands to create or modify the texture to the root compositor as a form of &quot;upload&quot;.  Is there something preventing that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691147</commentid>
    <comment_count>5</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 20:28:26 -0700</bug_when>
    <thetext>This is not just accelerated painting, it&apos;s for all resource types (webgl, canvas, pepper, video, etc.) on top of tiles which may or may not be accelerated.
Besides, AFAIK Ganesh doesn&apos;t serialize across processes, it keeps some data by reference.

Finally, even if upload() will results as a transfer to the root compositor (which I think at least in the short term would allow the renderer to overload the browser), you still need to synchronize wrt drawing by the parent compositor, i.e. you can&apos;t send the IPC at upload() time, you need to keep it around until the sendFrameToParent, at which point you need to gather the uploads for all the resources you want to send. This may be what comes out of prepareSendToParent (which would add a list of resource/shm handle/copy rects).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691183</commentid>
    <comment_count>6</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 21:54:38 -0700</bug_when>
    <thetext>Sounds reasonable, I agree this model is more robust against client misbehavior and we may as well use it in all cases.  Apology for the late design question, I went back to read your resource management doc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691195</commentid>
    <comment_count>7</comment_count>
      <attachid>157296</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-08 22:11:10 -0700</bug_when>
    <thetext>Comment on attachment 157296
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:337
&gt; +        deleteResource(*it);

This will call deleteTexture on the context3d.  Is that intended?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691250</commentid>
    <comment_count>8</comment_count>
      <attachid>157296</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-08 23:14:43 -0700</bug_when>
    <thetext>Comment on attachment 157296
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:337
&gt;&gt; +        deleteResource(*it);
&gt; 
&gt; This will call deleteTexture on the context3d.  Is that intended?

It is intended, corresponding to the createTexture() done in receiveFromChild. The idea is that the child owns the resource, and it&apos;s only lent to the parent while it&apos;s used by a quad. So when it&apos;s returned to the child, we delete it from the parent.
In transferResource above, we put it into the mailbox, which &quot;disconnects&quot; the data from the texture name, so the delete here doesn&apos;t delete the data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695401</commentid>
    <comment_count>9</comment_count>
      <attachid>158416</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-14 14:34:11 -0700</bug_when>
    <thetext>Created attachment 158416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695459</commentid>
    <comment_count>10</comment_count>
      <attachid>158416</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-14 16:01:22 -0700</bug_when>
    <thetext>Comment on attachment 158416
Patch

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

Looks pretty good, but I really want whoever lands the next patch adding a parameter to Resource to fix it up so the initialization is readable.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:112
&gt; +    Resource resource = {textureId, pool, 0, false, false, false, size, format};

I gave this feedback to Alex too, but the pile of 0s and bool literals is unreadable to me. These parameters need readable enum names or the construction of resources has to be done by a builder or something - no mortal can remember the difference between &quot;0, false, false, false&quot; and &quot;0, false, true, false&quot; in the middle of an argument or initializer list.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:305
&gt; +    for (Vector&lt;ResourceId&gt;::const_iterator it = resources.begin(); it != resources.end(); ++it) {

looks like Vector&lt;ResourceId&gt; should have a typedef, it&apos;s repeated several times in this file

&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:361
&gt; +    for (Vector&lt;TransferableResource&gt;::const_iterator it = resources.resources.begin(); it != resources.resources.end(); ++it) {

same for Vector&lt;TransferableResource&gt; re typedef

&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:369
&gt; +        m_mailboxes.append(it-&gt;mailbox);

should we worry about keeping a bound on the # of mailboxes the rootmost compositor gets? it looks like it&apos;ll have the set of all mailboxes any child compositors have ever needed. is there any overhead to these on the service side over time? is there any way to discard them?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.h:68
&gt; +    struct TransferableResourceList {

this guy gets big pretty fast - sizeof(TransferableResource) is 196b if my math is right, and the first allocation in the vector will allocate space for 16 elements or around 3kb

&gt; Source/WebKit/chromium/tests/CCResourceProviderTest.cpp:54
&gt; +    Texture(const IntSize&amp; size_, WGC3Denum format_)

we don&apos;t typically do the trailing underscore thing in webkit - &quot;: size(size)&quot; in the initializer list should work on all our build systems, afaik

&gt; Source/WebKit/chromium/tests/CCResourceProviderTest.cpp:244
&gt; +    explicit ResourceProviderContext(const Attributes&amp; attrs, ContextSharedData* sharedData)

no explicit for 2-arg c&apos;tors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696631</commentid>
    <comment_count>11</comment_count>
      <attachid>158691</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-15 19:14:38 -0700</bug_when>
    <thetext>Created attachment 158691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696648</commentid>
    <comment_count>12</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-15 19:28:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 158416 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158416&amp;action=review
&gt; 
&gt; Looks pretty good, but I really want whoever lands the next patch adding a parameter to Resource to fix it up so the initialization is readable.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:112
&gt; &gt; +    Resource resource = {textureId, pool, 0, false, false, false, size, format};
&gt; 
&gt; I gave this feedback to Alex too, but the pile of 0s and bool literals is unreadable to me. These parameters need readable enum names or the construction of resources has to be done by a builder or something - no mortal can remember the difference between &quot;0, false, false, false&quot; and &quot;0, false, true, false&quot; in the middle of an argument or initializer list.

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:305
&gt; &gt; +    for (Vector&lt;ResourceId&gt;::const_iterator it = resources.begin(); it != resources.end(); ++it) {
&gt; 
&gt; looks like Vector&lt;ResourceId&gt; should have a typedef, it&apos;s repeated several times in this file

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:361
&gt; &gt; +    for (Vector&lt;TransferableResource&gt;::const_iterator it = resources.resources.begin(); it != resources.resources.end(); ++it) {
&gt; 
&gt; same for Vector&lt;TransferableResource&gt; re typedef

Done.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:369
&gt; &gt; +        m_mailboxes.append(it-&gt;mailbox);
&gt; 
&gt; should we worry about keeping a bound on the # of mailboxes the rootmost compositor gets? it looks like it&apos;ll have the set of all mailboxes any child compositors have ever needed. is there any overhead to these on the service side over time? is there any way to discard them?

So, first, there&apos;s no way to &quot;discard&quot; them. At the same time, they don&apos;t hold any resources at all on the GPU process side. They&apos;re just signed unguessable unique IDs.
The other thing is, the root compositor sends back the mailbox name when recycling the resources to the child (i.e. it removes it from its deque). Essentially, in steady state, the root compositor will have exactly 1 mailbox name for each resource that was sent to it by children, so it shouldn&apos;t grow unbounded (unless it destroys resources without giving them back to a child, but it doesn&apos;t do that today).

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.h:68
&gt; &gt; +    struct TransferableResourceList {
&gt; 
&gt; this guy gets big pretty fast - sizeof(TransferableResource) is 196b if my math is right, and the first allocation in the vector will allocate space for 16 elements or around 3kb

I count 80b and my compiler agrees ;) For the Vector allocating too much capacity by default, I don&apos;t think it&apos;s a problem since this is a transient data structure anyway (i.e. generate it, stick the data into an IPC, destroy it, and on the other side, receive it from IPC then pass it to another one of these methods, and destroy it). If the capacity vs size overhead becomes high for some reason we could call shrinkToFit but since it involves copying the data, I don&apos;t think we necessarily need it.

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCResourceProviderTest.cpp:54
&gt; &gt; +    Texture(const IntSize&amp; size_, WGC3Denum format_)
&gt; 
&gt; we don&apos;t typically do the trailing underscore thing in webkit - &quot;: size(size)&quot; in the initializer list should work on all our build systems, afaik

Done.

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCResourceProviderTest.cpp:244
&gt; &gt; +    explicit ResourceProviderContext(const Attributes&amp; attrs, ContextSharedData* sharedData)
&gt; 
&gt; no explicit for 2-arg c&apos;tors

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697275</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-16 10:52:55 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:369
&gt; &gt; &gt; +        m_mailboxes.append(it-&gt;mailbox);
&gt; &gt; 
&gt; &gt; should we worry about keeping a bound on the # of mailboxes the rootmost compositor gets? it looks like it&apos;ll have the set of all mailboxes any child compositors have ever needed. is there any overhead to these on the service side over time? is there any way to discard them?
&gt; 
&gt; So, first, there&apos;s no way to &quot;discard&quot; them. At the same time, they don&apos;t hold any resources at all on the GPU process side. They&apos;re just signed unguessable unique IDs.
&gt; The other thing is, the root compositor sends back the mailbox name when recycling the resources to the child (i.e. it removes it from its deque). Essentially, in steady state, the root compositor will have exactly 1 mailbox name for each resource that was sent to it by children, so it shouldn&apos;t grow unbounded (unless it destroys resources without giving them back to a child, but it doesn&apos;t do that today).
&gt; 

True, but the parent will see many children come and go over the course of its lifetime.  Is there any mechanism by which mailboxes from children that go away are cleared? destroyChild() clears resources, but it doesn&apos;t clear mailboxes AFAICT, and it seems like new mailboxes are always created by children.  It&apos;s not the biggest deal - they aren&apos;t all that big - but it seems like a logical leak unless I&apos;m missing part of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697277</commentid>
    <comment_count>14</comment_count>
      <attachid>158691</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-16 10:53:49 -0700</bug_when>
    <thetext>Comment on attachment 158691
Patch

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697285</commentid>
    <comment_count>15</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-16 11:01:02 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:369
&gt; &gt; &gt; &gt; +        m_mailboxes.append(it-&gt;mailbox);
&gt; &gt; &gt; 
&gt; &gt; &gt; should we worry about keeping a bound on the # of mailboxes the rootmost compositor gets? it looks like it&apos;ll have the set of all mailboxes any child compositors have ever needed. is there any overhead to these on the service side over time? is there any way to discard them?
&gt; &gt; 
&gt; &gt; So, first, there&apos;s no way to &quot;discard&quot; them. At the same time, they don&apos;t hold any resources at all on the GPU process side. They&apos;re just signed unguessable unique IDs.
&gt; &gt; The other thing is, the root compositor sends back the mailbox name when recycling the resources to the child (i.e. it removes it from its deque). Essentially, in steady state, the root compositor will have exactly 1 mailbox name for each resource that was sent to it by children, so it shouldn&apos;t grow unbounded (unless it destroys resources without giving them back to a child, but it doesn&apos;t do that today).
&gt; &gt; 
&gt; 
&gt; True, but the parent will see many children come and go over the course of its lifetime.  Is there any mechanism by which mailboxes from children that go away are cleared? destroyChild() clears resources, but it doesn&apos;t clear mailboxes AFAICT, and it seems like new mailboxes are always created by children.  It&apos;s not the biggest deal - they aren&apos;t all that big - but it seems like a logical leak unless I&apos;m missing part of it.

Good point, maybe I can trim the deque to the number of child resources when a child dies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697628</commentid>
    <comment_count>16</comment_count>
      <attachid>158932</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-16 15:51:58 -0700</bug_when>
    <thetext>Created attachment 158932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697629</commentid>
    <comment_count>17</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-16 15:53:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.cpp:369
&gt; &gt; &gt; &gt; &gt; +        m_mailboxes.append(it-&gt;mailbox);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; should we worry about keeping a bound on the # of mailboxes the rootmost compositor gets? it looks like it&apos;ll have the set of all mailboxes any child compositors have ever needed. is there any overhead to these on the service side over time? is there any way to discard them?
&gt; &gt; &gt; 
&gt; &gt; &gt; So, first, there&apos;s no way to &quot;discard&quot; them. At the same time, they don&apos;t hold any resources at all on the GPU process side. They&apos;re just signed unguessable unique IDs.
&gt; &gt; &gt; The other thing is, the root compositor sends back the mailbox name when recycling the resources to the child (i.e. it removes it from its deque). Essentially, in steady state, the root compositor will have exactly 1 mailbox name for each resource that was sent to it by children, so it shouldn&apos;t grow unbounded (unless it destroys resources without giving them back to a child, but it doesn&apos;t do that today).
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; True, but the parent will see many children come and go over the course of its lifetime.  Is there any mechanism by which mailboxes from children that go away are cleared? destroyChild() clears resources, but it doesn&apos;t clear mailboxes AFAICT, and it seems like new mailboxes are always created by children.  It&apos;s not the biggest deal - they aren&apos;t all that big - but it seems like a logical leak unless I&apos;m missing part of it.
&gt; 
&gt; Good point, maybe I can trim the deque to the number of child resources when a child dies.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697682</commentid>
    <comment_count>18</comment_count>
      <attachid>158932</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 16:54:53 -0700</bug_when>
    <thetext>Comment on attachment 158932
Patch

Rejecting attachment 158932 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: 2

Last 500 characters of output:
rceProvider::upload(unsigned int&amp;, uint8_t [4], WebCore::IntRect&amp;, WebCore::IntRect&amp;, WebCore::IntRect&amp;)&apos;
Source/WebCore/platform/graphics/chromium/cc/CCResourceProvider.h:101: note: candidates are: void WebCore::CCResourceProvider::upload(unsigned int, const uint8_t*, const WebCore::IntRect&amp;, const WebCore::IntRect&amp;, const WebCore::IntSize&amp;)
make: *** [out/Debug/obj.target/webkit_unit_tests/Source/WebKit/chromium/tests/CCResourceProviderTest.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/13515594</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697684</commentid>
    <comment_count>19</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-16 16:56:31 -0700</bug_when>
    <thetext>Sorry about that.  Needs rebase on Bug 94154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697695</commentid>
    <comment_count>20</comment_count>
      <attachid>158951</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-16 17:06:01 -0700</bug_when>
    <thetext>Created attachment 158951
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697765</commentid>
    <comment_count>21</comment_count>
      <attachid>158951</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 18:16:58 -0700</bug_when>
    <thetext>Comment on attachment 158951
Patch for landing

Clearing flags on attachment: 158951

Committed r125838: &lt;http://trac.webkit.org/changeset/125838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697766</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 18:17:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697793</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 18:44:48 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697829</commentid>
    <comment_count>24</comment_count>
      <attachid>158984</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-08-16 19:55:39 -0700</bug_when>
    <thetext>Created attachment 158984
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697858</commentid>
    <comment_count>25</comment_count>
      <attachid>158984</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 21:25:35 -0700</bug_when>
    <thetext>Comment on attachment 158984
Patch for landing

Clearing flags on attachment: 158984

Committed r125851: &lt;http://trac.webkit.org/changeset/125851&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697859</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-16 21:25:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157296</attachid>
            <date>2012-08-08 14:27:30 -0700</date>
            <delta_ts>2012-08-14 14:34:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93524-20120808142704.patch</filename>
            <type>text/plain</type>
            <size>29820</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY3NjJkMDM4MDNlYWE1
YTdlYzgxODRhM2Q0Nzc0NTk1NzljZDdjMy4uMGQzYzg3ZDQ2NjQxZDQ3Y2IyMTlmNGQ4MWMxODIz
YzkzY2JiMTk4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTA4ICBBbnRv
aW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFk
ZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRo
b2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAg
ICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRl
c3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6Omdl
dENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChNYWlsYm94KToK
KyAgICAgICAgKFRyYW5zZmVyYWJsZVJlc291cmNlKToKKyAgICAgICAgKFRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoUmVz
b3VyY2UpOgorICAgICAgICAoQ2hpbGQpOgorCiAyMDEyLTA4LTA4ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEyNTA0Nik6IEJy
ZWFrcyBkZWJ1ZyBidWlsZCAoYXNzZXJ0aW9uIGluIHByb3RvY29sIHR5cGUgY2hlY2tzKSAoUmVx
dWVzdGVkIGJ5IHBmZWxkbWFuIG9uICN3ZWJraXQpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCBhYWQ5NjZiMDI5NmUyZTM5Zjg3N2IwYjJmNGJlMmYzYjNjNDUwZDI0Li41NjM4YmFhZDM0
MmI2YjRiMDRiNjA2MGY0Y2M5MTZmNTcyYjZkZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA4LTA4ICBBbnRvaW5lIExhYm91ciAgPHBpbWFuQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCByZXNvdXJjZSB0cmFuc2ZlciBm
dW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRob2RzIHRvIENDUmVzb3VyY2VQcm92
aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAgICByZXNvdXJjZXMgZnJvbSBhIGNo
aWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRlc3QgdG8gQ0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdC4KKworICAgICAgICAqIHRlc3RzL0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0Ojp0ZXh0dXJlU2l6ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAgKFRleHR1cmUpOgorICAgICAg
ICAoQ29udGV4dFNoYXJlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVkRGF0
YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERhdGE6Omluc2VydFN5
bmNQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRTaGFyZWREYXRhOjpnZW5NYWlsYm94
KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERhdGE6OnByb2R1Y2VUZXh0dXJlKToK
KyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERhdGE6OmNvbnN1bWVUZXh0dXJlKToKKyAg
ICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERhdGE6OkNvbnRleHRTaGFyZWREYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAg
IChSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJv
dmlkZXJDb250ZXh0OjppbnNlcnRTeW5jUG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZVByb3ZpZGVyQ29udGV4dDo6d2FpdFN5bmNQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlUHJvdmlkZXJDb250ZXh0OjpnZW5NYWlsYm94Q0hST01JVU0pOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6cHJvZHVjZVRleHR1cmVDSFJPTUlVTSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojpjb25zdW1lVGV4dHVyZUNIUk9N
SVVNKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OlJlc291cmNl
UHJvdmlkZXJDb250ZXh0KToKKyAgICAgICAgKFBlbmRpbmdQcm9kdWNlVGV4dHVyZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNDUmVzb3VyY2VQcm92aWRlclRlc3Q6OkNDUmVzb3VyY2VQcm92aWRlclRl
c3QpOgorICAgICAgICAoQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCk6CisgICAgICAgIChXZWJLaXQ6
OlRFU1RfRik6CisKIDIwMTItMDgtMDggIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBFbmFibGUgb2NjbHVzaW9uIHRyYWNrZXIgaW4gdGhl
IG9jY2x1c2lvbiB0ZXN0cyBmb3Igc3VyZmFjZSBjYWNoZWluZwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVz
b3VyY2VQcm92aWRlci5jcHAKaW5kZXggMmM3ODc1MTQ5N2RmZTQ4MWI0ZmFlNjNkYjE5MTBlM2Q2
OGNkNDA0YS4uNjQ4YzU1OTE0MGM4NDVhYjlkMzdjNGU3ZjhiM2IzN2M1YzI3YzJkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wg
Q0NSZXNvdXJjZVByb3ZpZGVyOjppblVzZUJ5Q29uc3VtZXIoUmVzb3VyY2VJZCBpZCkKICAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlTWFwOjppdGVyYXRv
ciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOwogICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNl
cy5lbmQoKSk7Ci0gICAgcmV0dXJuICEhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50OworICAg
IHJldHVybiAhIWl0LT5zZWNvbmQubG9ja0ZvclJlYWRDb3VudCB8fCBpdC0+c2Vjb25kLmV4cG9y
dGVkOwogfQogCiBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3Zp
ZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVu
dW0gZm9ybWF0LCBUZXh0dXJlVXNhZ2VIaW50IGhpbnQpCkBAIC0xMTAsNyArMTEwLDcgQEAgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVz
b3VyY2UoaW50IHBvb2wsIGNvbnMKICAgICB9IGVsc2UKICAgICAgICAgR0xDKGNvbnRleHQzZCwg
Y29udGV4dDNkLT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBm
b3JtYXQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSwgMCkpOwogICAgIFJlc291cmNlSWQgaWQgPSBtX25leHRJ
ZCsrOwotICAgIFJlc291cmNlIHJlc291cmNlID0ge3RleHR1cmVJZCwgcG9vbCwgMCwgZmFsc2Us
IGZhbHNlLCBzaXplLCBmb3JtYXR9OworICAgIFJlc291cmNlIHJlc291cmNlID0ge3RleHR1cmVJ
ZCwgcG9vbCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgc2l6ZSwgZm9ybWF0fTsKICAgICBtX3Jl
c291cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKICAgICByZXR1cm4gaWQ7CiB9CkBAIC0xMTksNyAr
MTE5LDcgQEAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92aWRl
cjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXgKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwogICAgIFJlc291cmNlSWQgaWQgPSBtX25leHRJZCsrOwotICAgIFJl
c291cmNlIHJlc291cmNlID0ge3RleHR1cmVJZCwgMCwgMCwgZmFsc2UsIHRydWUsIEludFNpemUo
KSwgMH07CisgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4dHVyZUlkLCAwLCAwLCBmYWxzZSwg
dHJ1ZSwgZmFsc2UsIEludFNpemUoKSwgMH07CiAgICAgbV9yZXNvdXJjZXMuYWRkKGlkLCByZXNv
dXJjZSk7CiAgICAgcmV0dXJuIGlkOwogfQpAQCAtMjI5LDYgKzIyOSw3IEBAIHZvaWQgQ0NSZXNv
dXJjZVByb3ZpZGVyOjp1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQgaWQpCiBDQ1Jlc291cmNlUHJv
dmlkZXI6OkNDUmVzb3VyY2VQcm92aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9uZXh0SWQoMSkKKyAgICAsIG1fbmV4dENo
aWxkKDEpCiAgICAgLCBtX3VzZVRleHR1cmVTdG9yYWdlRXh0KGZhbHNlKQogICAgICwgbV91c2VU
ZXh0dXJlVXNhZ2VIaW50KGZhbHNlKQogICAgICwgbV91c2VTaGFsbG93Rmx1c2goZmFsc2UpCkBA
IC0yNjUsNCArMjY2LDE1MCBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6aW5pdGlhbGl6ZSgp
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2ludCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZUNo
aWxkKGludCBwb29sKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Cisg
ICAgQ2hpbGQgY2hpbGRJbmZvOworICAgIGNoaWxkSW5mby5wb29sID0gcG9vbDsKKyAgICBpbnQg
Y2hpbGQgPSBtX25leHRDaGlsZCsrOworICAgIG1fY2hpbGRyZW4uYWRkKGNoaWxkLCBjaGlsZElu
Zm8pOworICAgIHJldHVybiBjaGlsZDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRl
c3Ryb3lDaGlsZChpbnQgY2hpbGQpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKKyAgICBDaGlsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQp
OworICAgIEFTU0VSVChpdCAhPSBtX2NoaWxkcmVuLmVuZCgpKTsKKyAgICBkZWxldGVPd25lZFJl
c291cmNlcyhpdC0+c2Vjb25kLnBvb2wpOworICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGl0KTsKK30K
KworY29uc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkTWFwJiBDQ1Jlc291cmNlUHJv
dmlkZXI6OmdldENoaWxkVG9QYXJlbnRNYXAoaW50IGNoaWxkKSBjb25zdAoreworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQ2hpbGRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9jaGlsZHJl
bi5lbmQoKSk7CisgICAgcmV0dXJuIGl0LT5zZWNvbmQuY2hpbGRUb1BhcmVudE1hcDsKK30KKwor
Q0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgQ0NSZXNvdXJjZVBy
b3ZpZGVyOjpwcmVwYXJlU2VuZFRvUGFyZW50KGNvbnN0IFZlY3RvcjxSZXNvdXJjZUlkPiYgcmVz
b3VyY2VzKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVHJh
bnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3Q7CisgICAgbGlzdC5zeW5jUG9pbnQgPSAwOworICAg
IFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQzRCgp
OworICAgIGlmICghY29udGV4dDNkIHx8ICFjb250ZXh0M2QtPm1ha2VDb250ZXh0Q3VycmVudCgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBj
b21wb3NpdGluZy4KKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorICAgIGZvciAoVmVjdG9y
PFJlc291cmNlSWQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSByZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2Ug
cmVzb3VyY2U7CisgICAgICAgIGlmICh0cmFuc2ZlclJlc291cmNlKGNvbnRleHQzZCwgKml0LCAm
cmVzb3VyY2UpKSB7CisgICAgICAgICAgICBtX3Jlc291cmNlcy5maW5kKCppdCktPnNlY29uZC5l
eHBvcnRlZCA9IHRydWU7CisgICAgICAgICAgICBsaXN0LnJlc291cmNlcy5hcHBlbmQocmVzb3Vy
Y2UpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChsaXN0LnJlc291cmNlcy5zaXplKCkpCisg
ICAgICAgIGxpc3Quc3luY1BvaW50ID0gY29udGV4dDNkLT5pbnNlcnRTeW5jUG9pbnQoKTsKKyAg
ICByZXR1cm4gbGlzdDsKK30KKworQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNv
dXJjZUxpc3QgQ0NSZXNvdXJjZVByb3ZpZGVyOjpwcmVwYXJlU2VuZFRvQ2hpbGQoaW50IGNoaWxk
LCBjb25zdCBWZWN0b3I8UmVzb3VyY2VJZD4mIHJlc291cmNlcykKK3sKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBsaXN0
OworICAgIGxpc3Quc3luY1BvaW50ID0gMDsKKyAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQzZCB8fCAh
Y29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCisgICAgICAgIHJldHVy
biBsaXN0OworICAgIH0KKyAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNo
aWxkKS0+c2Vjb25kOworICAgIGZvciAoVmVjdG9yPFJlc291cmNlSWQ+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2UgcmVzb3VyY2U7CisgICAgICAgIGlmICghdHJh
bnNmZXJSZXNvdXJjZShjb250ZXh0M2QsICppdCwgJnJlc291cmNlKSkKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXNvdXJjZS5pZCA9IGNoaWxkSW5mby5wYXJl
bnRUb0NoaWxkTWFwLmdldCgqaXQpOworICAgICAgICBjaGlsZEluZm8ucGFyZW50VG9DaGlsZE1h
cC5yZW1vdmUoKml0KTsKKyAgICAgICAgY2hpbGRJbmZvLmNoaWxkVG9QYXJlbnRNYXAucmVtb3Zl
KHJlc291cmNlLmlkKTsKKyAgICAgICAgbGlzdC5yZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlKTsK
KyAgICAgICAgZGVsZXRlUmVzb3VyY2UoKml0KTsKKyAgICB9CisgICAgaWYgKGxpc3QucmVzb3Vy
Y2VzLnNpemUoKSkKKyAgICAgICAgbGlzdC5zeW5jUG9pbnQgPSBjb250ZXh0M2QtPmluc2VydFN5
bmNQb2ludCgpOworICAgIHJldHVybiBsaXN0OworfQorCit2b2lkIENDUmVzb3VyY2VQcm92aWRl
cjo6cmVjZWl2ZUZyb21DaGlsZChpbnQgY2hpbGQsIGNvbnN0IFRyYW5zZmVyYWJsZVJlc291cmNl
TGlzdCYgcmVzb3VyY2VzKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4
dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRleHQzZC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3
YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChyZXNvdXJj
ZXMuc3luY1BvaW50KSB7CisgICAgICAgIC8vIE5PVEU6IElmIHRoZSBwYXJlbnQgaXMgYSBicm93
c2VyIGFuZCB0aGUgY2hpbGQgYSByZW5kZXJlciwgdGhlIHBhcmVudAorICAgICAgICAvLyBpcyBu
b3Qgc3VwcG9zZWQgdG8gaGF2ZSBpdHMgY29udGV4dCB3YWl0LCBiZWNhdXNlIHRoYXQgY291bGQg
aW5kdWNlCisgICAgICAgIC8vIGRlYWRsb2NrcyBhbmQvb3Igc2VjdXJpdHkgaXNzdWVzLiBUaGUg
Y2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICAvLyB3YWl0aW5nIGFzeW5jaHJvbm91
c2x5LCBhbmQgcmVzZXR0aW5nIHN5bmNQb2ludCBiZWZvcmUgY2FsbGluZyB0aGlzLgorICAgICAg
ICAvLyBIb3dldmVyIGlmIHRoZSBwYXJlbnQgaXMgYSByZW5kZXJlciAoZS5nLiBicm93c2VyIHRh
ZyksIGl0IG1heSBiZSBvaworICAgICAgICAvLyAoYW5kIGlzIHNpbXBsZXIpIHRvIHdhaXQuCisg
ICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+d2FpdFN5bmNQb2ludChyZXNvdXJjZXMu
c3luY1BvaW50KSk7CisgICAgfQorICAgIENoaWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZp
bmQoY2hpbGQpLT5zZWNvbmQ7CisgICAgZm9yIChWZWN0b3I8VHJhbnNmZXJhYmxlUmVzb3VyY2U+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
cmVzb3VyY2VzLnJlc291cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAgICB1bnNpZ25lZCB0ZXh0
dXJlSWQ7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIHRleHR1cmVJZCA9IGNvbnRleHQzZC0+Y3Jl
YXRlVGV4dHVyZSgpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisgICAgICAg
IEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+Y29uc3VtZVRleHR1cmVDSFJPTUlVTShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPm1haWxib3gubmFtZSkpOworICAgICAgICBSZXNv
dXJjZUlkIGlkID0gbV9uZXh0SWQrKzsKKyAgICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4
dHVyZUlkLCBjaGlsZEluZm8ucG9vbCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgaXQtPnNpemUs
IGl0LT5mb3JtYXR9OworICAgICAgICBtX3Jlc291cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKKyAg
ICAgICAgbV9tYWlsYm94ZXMuYXBwZW5kKGl0LT5tYWlsYm94KTsKKyAgICAgICAgY2hpbGRJbmZv
LnBhcmVudFRvQ2hpbGRNYXAuYWRkKGlkLCBpdC0+aWQpOworICAgICAgICBjaGlsZEluZm8uY2hp
bGRUb1BhcmVudE1hcC5hZGQoaXQtPmlkLCBpZCk7CisgICAgfQorfQorCit2b2lkIENDUmVzb3Vy
Y2VQcm92aWRlcjo6cmVjZWl2ZUZyb21QYXJlbnQoY29uc3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VM
aXN0JiByZXNvdXJjZXMpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
KyAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0
M0QoKTsKKyAgICBpZiAoIWNvbnRleHQzZCB8fCAhY29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdh
cmUgY29tcG9zaXRpbmcuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHJlc291cmNl
cy5zeW5jUG9pbnQpCisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+d2FpdFN5bmNQ
b2ludChyZXNvdXJjZXMuc3luY1BvaW50KSk7CisgICAgZm9yIChWZWN0b3I8VHJhbnNmZXJhYmxl
UmVzb3VyY2U+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHJlc291cmNlcy5yZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gcmVzb3VyY2VzLnJlc291cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBSZXNv
dXJjZSYgcmVzb3VyY2UgPSBtX3Jlc291cmNlcy5maW5kKGl0LT5pZCktPnNlY29uZDsKKyAgICAg
ICAgQVNTRVJUKHJlc291cmNlLmV4cG9ydGVkKTsKKyAgICAgICAgcmVzb3VyY2UuZXhwb3J0ZWQg
PSBmYWxzZTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UuZ2xJZCkpOworICAgICAgICBH
TEMoY29udGV4dDNkLCBjb250ZXh0M2QtPmNvbnN1bWVUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5tYWlsYm94Lm5hbWUpKTsKKyAgICAgICAgbV9tYWls
Ym94ZXMuYXBwZW5kKGl0LT5tYWlsYm94KTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NSZXNvdXJjZVBy
b3ZpZGVyOjp0cmFuc2ZlclJlc291cmNlKFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBS
ZXNvdXJjZUlkIGlkLCBUcmFuc2ZlcmFibGVSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBSZXNvdXJjZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9yZXNv
dXJjZXMuZW5kKCkgJiYgIWl0LT5zZWNvbmQubG9ja2VkRm9yV3JpdGUgJiYgIWl0LT5zZWNvbmQu
bG9ja0ZvclJlYWRDb3VudCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCk7CisgICAgaWYgKGl0LT5z
ZWNvbmQuZXhwb3J0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXNvdXJjZS0+aWQg
PSBpZDsKKyAgICByZXNvdXJjZS0+Zm9ybWF0ID0gaXQtPnNlY29uZC5mb3JtYXQ7CisgICAgcmVz
b3VyY2UtPnNpemUgPSBpdC0+c2Vjb25kLnNpemU7CisgICAgaWYgKCFtX21haWxib3hlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJlc291cmNlLT5tYWlsYm94ID0gbV9tYWlsYm94ZXMudGFrZUZpcnN0
KCk7CisgICAgZWxzZQorICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+Z2VuTWFpbGJveENI
Uk9NSVVNKHJlc291cmNlLT5tYWlsYm94Lm5hbWUpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0LT5zZWNvbmQu
Z2xJZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5wcm9kdWNlVGV4dHVyZUNIUk9NSVVN
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZXNvdXJjZS0+bWFpbGJveC5uYW1lKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVy
LmgKaW5kZXggMDY3Y2FkNDkwZDQ1MDQ5NjM5OWNjNzBkODJlOTFkMDQ4YzJkYjM1OS4uMTQ1YzY5
ZDJiMGIwZjJmMWQ4ZmQ1NmQxYWE2OGMzMzdmZGEyM2Y0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmgKQEAgLTI5LDExICsyOSwxMyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC01NCw2ICs1NiwyMCBA
QCBjbGFzcyBDQ1Jlc291cmNlUHJvdmlkZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgdW5zaWdu
ZWQgUmVzb3VyY2VJZDsKICAgICBlbnVtIFRleHR1cmVVc2FnZUhpbnQgeyBUZXh0dXJlVXNhZ2VB
bnksIFRleHR1cmVVc2FnZUZyYW1lYnVmZmVyIH07CisgICAgc3RydWN0IE1haWxib3ggeworICAg
ICAgICBHQzNEYnl0ZSBuYW1lWzY0XTsKKyAgICB9OworICAgIHN0cnVjdCBUcmFuc2ZlcmFibGVS
ZXNvdXJjZSB7CisgICAgICAgIHVuc2lnbmVkIGlkOworICAgICAgICBHQzNEZW51bSBmb3JtYXQ7
CisgICAgICAgIEludFNpemUgc2l6ZTsKKyAgICAgICAgTWFpbGJveCBtYWlsYm94OworICAgIH07
CisgICAgc3RydWN0IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCB7CisgICAgICAgIFZlY3RvcjxU
cmFuc2ZlcmFibGVSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgICAgICB1bnNpZ25lZCBzeW5jUG9p
bnQ7CisgICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVzb3VyY2VJZCwgUmVzb3VyY2VJZD4g
UmVzb3VyY2VJZE1hcDsKIAogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVzb3VyY2VQcm92aWRl
cj4gY3JlYXRlKENDR3JhcGhpY3NDb250ZXh0Kik7CiAKQEAgLTkwLDYgKzEwNiw0MiBAQCBwdWJs
aWM6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFsbG93IGZsdXNoIG9jY3VycmVkLCBm
YWxzZSBvdGhlcndpc2UuCiAgICAgYm9vbCBzaGFsbG93Rmx1c2hJZlN1cHBvcnRlZCgpOwogCisg
ICAgLy8gQ3JlYXRlcyBhY2NvdW50aW5nIGZvciBhIGNoaWxkLCBhbmQgYXNzb2NpYXRlIGl0IHdp
dGggYSBwb29sLiBSZXNvdXJjZXMKKyAgICAvLyB0cmFuc2ZlcmVkIGZyb20gdGhhdCBjaGlsZCB3
aWxsIGdvIHRvIHRoYXQgcG9vbC4gUmV0dXJucyBhIGNoaWxkIElELgorICAgIGludCBjcmVhdGVD
aGlsZChpbnQgcG9vbCk7CisKKyAgICAvLyBEZXN0cm95cyBhY2NvdW50aW5nIGZvciB0aGUgY2hp
bGQsIGRlbGV0aW5nIGFsbCByZXNvdXJjZXMgZnJvbSB0aGF0IHBvb2wuCisgICAgdm9pZCBkZXN0
cm95Q2hpbGQoaW50IGNoaWxkKTsKKworICAgIC8vIEdldHMgdGhlIGNoaWxkLT5wYXJlbnQgcmVz
b3VyY2UgSUQgbWFwLgorICAgIGNvbnN0IFJlc291cmNlSWRNYXAmIGdldENoaWxkVG9QYXJlbnRN
YXAoaW50IGNoaWxkKSBjb25zdDsKKworICAgIC8vIFByZXBhcmVzIHJlc291cmNlcyB0byBiZSB0
cmFuc2ZlcmVkIHRvIHRoZSBwYXJlbnQsIG1vdmluZyB0aGVtIHRvCisgICAgLy8gbWFpbGJveGVz
IGFuZCBzZXJpYWxpemluZyBtZXRhLWRhdGEgaW50byBUcmFuc2ZlcmFibGVSZXNvdXJjZXMuCisg
ICAgLy8gUmVzb3VyY2VzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSBDQ1Jlc291cmNlUHJvdmlk
ZXIsIGJ1dCBhcmUgbWFya2VzIGFzCisgICAgLy8gImluIHVzZSIuCisgICAgVHJhbnNmZXJhYmxl
UmVzb3VyY2VMaXN0IHByZXBhcmVTZW5kVG9QYXJlbnQoY29uc3QgVmVjdG9yPFJlc291cmNlSWQ+
Jik7CisKKyAgICAvLyBQcmVwYXJlcyByZXNvdXJjZXMgdG8gYmUgdHJhbnNmZXJlZCBiYWNrIHRv
IHRoZSBjaGlsZCwgbW92aW5nIHRoZW0gdG8KKyAgICAvLyBtYWlsYm94ZXMgYW5kIHNlcmlhbGl6
aW5nIG1ldGEtZGF0YSBpbnRvIFRyYW5zZmVyYWJsZVJlc291cmNlcy4KKyAgICAvLyBSZXNvdXJj
ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgQ0NSZXNvdXJjZVByb3ZpZGVyLiBOb3RlOiB0aGUgcmVz
b3VyY2UgSURzCisgICAgLy8gcGFzc2VkIGFyZSBpbiB0aGUgcGFyZW50IG5hbWVzcGFjZSBhbmQg
d2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRoZSBjaGlsZAorICAgIC8vIG5hbWVzcGFjZSB3aGVuIHJl
dHVybmVkLgorICAgIFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBwcmVwYXJlU2VuZFRvQ2hpbGQo
aW50IGNoaWxkLCBjb25zdCBWZWN0b3I8UmVzb3VyY2VJZD4mKTsKKworICAgIC8vIFJlY2VpdmVz
IHJlc291cmNlcyBmcm9tIGEgY2hpbGQsIG1vdmluZyB0aGVtIGZyb20gbWFpbGJveGVzLiBSZXNv
dXJjZSBJRHMKKyAgICAvLyBwYXNzZWQgYXJlIGluIHRoZSBjaGlsZCBuYW1lc3BhY2UsIGFuZCB3
aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdGhlIHBhcmVudAorICAgIC8vIG5hbWVzcGFjZSwgYWRkZWQg
dG8gdGhlIGNoaWxkLT5wYXJlbnQgbWFwLgorICAgIC8vIE5PVEU6IGlmIHRoZSBzeW5jUG9pbnQg
ZmlsZWQgaW4gVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGlzIHNldCwgdGhpcworICAgIC8vIHdp
bGwgd2FpdCBvbiBpdC4KKyAgICB2b2lkIHJlY2VpdmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25z
dCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmKTsKKworICAgIC8vIFJlY2VpdmVzIHJlc291cmNl
cyBmcm9tIHRoZSBwYXJlbnQsIG1vdmluZyB0aGVtIGZyb20gbWFpbGJveGVzLiBSZXNvdXJjZSBJ
RHMKKyAgICAvLyBwYXNzZWQgYXJlIGluIHRoZSBjaGlsZCBuYW1lc3BhY2UuCisgICAgLy8gTk9U
RTogaWYgdGhlIHN5bmNQb2ludCBmaWxlZCBpbiBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgaXMg
c2V0LCB0aGlzCisgICAgLy8gd2lsbCB3YWl0IG9uIGl0LgorICAgIHZvaWQgcmVjZWl2ZUZyb21Q
YXJlbnQoY29uc3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0Jik7CisKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZDsKICAgICBmcmllbmQgY2xh
c3MgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZTsKQEAgLTEwMCwxMCArMTUyLDE3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGludCBsb2NrRm9yUmVhZENvdW50OwogICAgICAgICBib29sIGxvY2tl
ZEZvcldyaXRlOwogICAgICAgICBib29sIGV4dGVybmFsOworICAgICAgICBib29sIGV4cG9ydGVk
OwogICAgICAgICBJbnRTaXplIHNpemU7CiAgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAgICB9
OwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZXNvdXJjZUlkLCBSZXNvdXJjZT4gUmVzb3VyY2VNYXA7
CisgICAgc3RydWN0IENoaWxkIHsKKyAgICAgICAgaW50IHBvb2w7CisgICAgICAgIFJlc291cmNl
SWRNYXAgY2hpbGRUb1BhcmVudE1hcDsKKyAgICAgICAgUmVzb3VyY2VJZE1hcCBwYXJlbnRUb0No
aWxkTWFwOworICAgIH07CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgQ2hpbGQ+IENoaWxkTWFw
OwogCiAgICAgZXhwbGljaXQgQ0NSZXNvdXJjZVByb3ZpZGVyKENDR3JhcGhpY3NDb250ZXh0Kik7
CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CkBAIC0xMTYsOSArMTc1LDE1IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbG9ja0ZvclJlYWQoUmVzb3VyY2VJZCk7CiAgICAgdm9pZCB1bmxvY2tGb3JS
ZWFkKFJlc291cmNlSWQpOwogCisgICAgYm9vbCB0cmFuc2ZlclJlc291cmNlKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0QqLCBSZXNvdXJjZUlkLCBUcmFuc2ZlcmFibGVSZXNvdXJjZSopOwor
CiAgICAgQ0NHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKICAgICBSZXNvdXJjZUlkIG1fbmV4
dElkOwogICAgIFJlc291cmNlTWFwIG1fcmVzb3VyY2VzOworICAgIGludCBtX25leHRDaGlsZDsK
KyAgICBDaGlsZE1hcCBtX2NoaWxkcmVuOworCisgICAgRGVxdWU8TWFpbGJveD4gbV9tYWlsYm94
ZXM7CiAKICAgICBib29sIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7CiAgICAgYm9vbCBtX3VzZVRl
eHR1cmVVc2FnZUhpbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1Jlc291cmNlUHJvdmlkZXJUZXN0LmNwcAppbmRleCBiMmM0MWU1MjVkZDk1Y2ZmOWI2YWMw
ZjRlZDA1ZGQyODIwMTYwMmU4Li5mZTYwZGE1MWI4MzRjZWYzM2U3MTExYjVlMzg2ODkwODQ1Y2I4
Nzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVzb3VyY2VQ
cm92aWRlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZXNv
dXJjZVByb3ZpZGVyVGVzdC5jcHAKQEAgLTQxLDkgKzQxLDk4IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKIG5hbWVzcGFjZSB7CiAKK3NpemVfdCB0ZXh0dXJlU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBXR0MzRGVudW0gZm9ybWF0KQoreworICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRz
UGVyUGl4ZWwgPSA0OworICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDE7Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50c1BlclBpeGVs
LCAmYnl0ZXNQZXJDb21wb25lbnQpOworICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhl
aWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Cit9CisKK3N0
cnVjdCBUZXh0dXJlIHsKKyAgICBUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemVfLCBXR0MzRGVu
dW0gZm9ybWF0XykKKyAgICAgICAgOiBzaXplKHNpemVfKQorICAgICAgICAsIGZvcm1hdChmb3Jt
YXRfKQorICAgICAgICAsIGRhdGEoYWRvcHRBcnJheVB0cihuZXcgdWludDhfdFt0ZXh0dXJlU2l6
ZShzaXplLCBmb3JtYXQpXSkpCisgICAgeworICAgIH0KKworICAgIEludFNpemUgc2l6ZTsKKyAg
ICBXR0MzRGVudW0gZm9ybWF0OworICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IGRhdGE7Cit9Owor
CisvLyBTaGFyZWQgZGF0YSBiZXR3ZWVuIG11bHRpcGxlIFJlc291cmNlUHJvdmlkZXJDb250ZXh0
LiBUaGlzIGNvbnRhaW5zIG1haWxib3gKKy8vIGNvbnRlbnRzIGFzIHdlbGwgYXMgaW5mb3JtYXRp
b24gYWJvdXQgc3luYyBwb2ludHMuCitjbGFzcyBDb250ZXh0U2hhcmVkRGF0YSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dFNoYXJlZERhdGE+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDb250ZXh0U2hhcmVkRGF0YSgpKTsgfQorCisgICAgdW5zaWduZWQg
aW5zZXJ0U3luY1BvaW50KCkgeyByZXR1cm4gbV9uZXh0U3luY1BvaW50Kys7IH0KKworICAgIHZv
aWQgZ2VuTWFpbGJveChXR0MzRGJ5dGUqIG1haWxib3gpCisgICAgeworICAgICAgICBtZW1zZXQo
bWFpbGJveCwgMCwgc2l6ZW9mKFdHQzNEYnl0ZVs2NF0pKTsKKyAgICAgICAgbWVtY3B5KG1haWxi
b3gsICZtX25leHRNYWlsQm94LCBzaXplb2YobV9uZXh0TWFpbEJveCkpOworICAgICAgICArK21f
bmV4dE1haWxCb3g7CisgICAgfQorCisgICAgdm9pZCBwcm9kdWNlVGV4dHVyZShjb25zdCBXR0Mz
RGJ5dGUqIG1haWxib3hOYW1lLCB1bnNpZ25lZCBzeW5jUG9pbnQsIFBhc3NPd25QdHI8VGV4dHVy
ZT4gdGV4dHVyZSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1haWxib3ggPSAwOworICAgICAg
ICBtZW1jcHkoJm1haWxib3gsIG1haWxib3hOYW1lLCBzaXplb2YobWFpbGJveCkpOworICAgICAg
ICBBU1NFUlQobWFpbGJveCAmJiBtYWlsYm94IDwgbV9uZXh0TWFpbEJveCk7CisgICAgICAgIG1f
dGV4dHVyZXMuc2V0KG1haWxib3gsIHRleHR1cmUpOworICAgICAgICBBU1NFUlQobV9zeW5jUG9p
bnRGb3JNYWlsYm94LmdldChtYWlsYm94KSA8IHN5bmNQb2ludCk7CisgICAgICAgIG1fc3luY1Bv
aW50Rm9yTWFpbGJveC5zZXQobWFpbGJveCwgc3luY1BvaW50KTsKKyAgICB9CisKKyAgICBQYXNz
T3duUHRyPFRleHR1cmU+IGNvbnN1bWVUZXh0dXJlKGNvbnN0IFdHQzNEYnl0ZSogbWFpbGJveE5h
bWUsIHVuc2lnbmVkIHN5bmNQb2ludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1haWxib3gg
PSAwOworICAgICAgICBtZW1jcHkoJm1haWxib3gsIG1haWxib3hOYW1lLCBzaXplb2YobWFpbGJv
eCkpOworICAgICAgICBBU1NFUlQobWFpbGJveCAmJiBtYWlsYm94IDwgbV9uZXh0TWFpbEJveCk7
CisKKyAgICAgICAgLy8gSWYgdGhlIGxhdGVzdCBzeW5jIHBvaW50IHRoZSBjb250ZXh0IGhhcyB3
YWl0ZWQgb24gaXMgYmVmb3JlIHRoZSBzeW5jCisgICAgICAgIC8vIHBvaW50IGZvciB3aGVuIHRo
ZSBtYWlsYm94IHdhcyBzZXQsIHByZXRlbmQgd2UgbmV2ZXIgc2F3IHRoYXQKKyAgICAgICAgLy8g
cHJvZHVjZVRleHR1cmUuCisgICAgICAgIGlmIChtX3N5bmNQb2ludEZvck1haWxib3guZ2V0KG1h
aWxib3gpIDwgc3luY1BvaW50KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBtX3RleHR1cmVzLnRha2UobWFpbGJveCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENvbnRleHRTaGFyZWREYXRhKCkKKyAgICAgICAgOiBtX25leHRTeW5jUG9pbnQoMSkKKyAgICAg
ICAgLCBtX25leHRNYWlsQm94KDEpCisgICAgeyB9CisKKyAgICB1bnNpZ25lZCBtX25leHRTeW5j
UG9pbnQ7CisgICAgdW5zaWduZWQgbV9uZXh0TWFpbEJveDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
dW5zaWduZWQsIE93blB0cjxUZXh0dXJlPiA+IFRleHR1cmVNYXA7CisgICAgVGV4dHVyZU1hcCBt
X3RleHR1cmVzOworICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX3N5bmNQb2ludEZv
ck1haWxib3g7Cit9OworCiBjbGFzcyBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCA6IHB1YmxpYyBD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxSZXNvdXJjZVByb3ZpZGVyQ29udGV4dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRQdHIobmV3IFJlc291cmNlUHJvdmlkZXJDb250ZXh0KEF0dHJpYnV0ZXMoKSkpOyB9CisgICAg
c3RhdGljIFBhc3NPd25QdHI8UmVzb3VyY2VQcm92aWRlckNvbnRleHQ+IGNyZWF0ZShDb250ZXh0
U2hhcmVkRGF0YSogc2hhcmVkRGF0YSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJlc291cmNlUHJv
dmlkZXJDb250ZXh0KEF0dHJpYnV0ZXMoKSwgc2hhcmVkRGF0YSkpOyB9CisKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGluc2VydFN5bmNQb2ludCgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzeW5j
UG9pbnQgPSBtX3NoYXJlZERhdGEtPmluc2VydFN5bmNQb2ludCgpOworICAgICAgICAvLyBDb21t
aXQgdGhlIHByb2R1Y2VUZXh0dXJlQ0hST01JVU0gY2FsbHMgYXQgdGhpcyBwb2ludCwgc28gdGhh
dAorICAgICAgICAvLyB0aGV5J3JlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3luYyBwb2ludC4KKyAg
ICAgICAgZm9yIChQZW5kaW5nUHJvZHVjZVRleHR1cmVMaXN0OjppdGVyYXRvciBpdCA9IG1fcGVu
ZGluZ1Byb2R1Y2VUZXh0dXJlcy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdQcm9kdWNlVGV4dHVy
ZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBtX3NoYXJlZERhdGEtPnByb2R1Y2VUZXh0dXJl
KCgqaXQpLT5tYWlsYm94LCBzeW5jUG9pbnQsICgqaXQpLT50ZXh0dXJlLnJlbGVhc2UoKSk7Cisg
ICAgICAgIG1fcGVuZGluZ1Byb2R1Y2VUZXh0dXJlcy5jbGVhcigpOworICAgICAgICByZXR1cm4g
c3luY1BvaW50OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB3YWl0U3luY1BvaW50KHVuc2ln
bmVkIHN5bmNQb2ludCkKKyAgICB7CisgICAgICAgIG1fbGFzdFdhaXRlZFN5bmNQb2ludCA9IHN0
ZDo6bWF4KHN5bmNQb2ludCwgbV9sYXN0V2FpdGVkU3luY1BvaW50KTsKKyAgICB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgYmluZFRleHR1cmUoV0dDM0RlbnVtIHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJl
KQogICAgIHsKQEAgLTExMiw2ICsyMDEsMjkgQEAgcHVibGljOgogICAgICAgICBzZXRQaXhlbHMo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKICAgICB9CiAKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuTWFpbGJveENIUk9NSVVNKFdHQzNEYnl0ZSogbWFpbGJveCkgeyByZXR1
cm4gbV9zaGFyZWREYXRhLT5nZW5NYWlsYm94KG1haWxib3gpOyB9CisgICAgdmlydHVhbCB2b2lk
IHByb2R1Y2VUZXh0dXJlQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgY29uc3QgV0dDM0RieXRl
KiBtYWlsYm94KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudFRleHR1cmUpOworICAg
ICAgICBBU1NFUlQodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKKwor
ICAgICAgICAvLyBEZWxheSBtb3ZpbmQgdGhlIHRleHR1cmUgaW50byB0aGUgbWFpbGJveCB1bnRp
bCB0aGUgbmV4dAorICAgICAgICAvLyBpbnNlcnRTeW5jUG9pbnQsIHNvIHRoYXQgaXQgaXMgbm90
IHZpc2libGUgdG8gb3RoZXIgY29udGV4dHMgdGhhdAorICAgICAgICAvLyBoYXZlbid0IHdhaXRl
ZCBvbiB0aGF0IHN5bmMgcG9pbnQuCisgICAgICAgIE93blB0cjxQZW5kaW5nUHJvZHVjZVRleHR1
cmU+IHBlbmRpbmcgPSBhZG9wdFB0cihuZXcgUGVuZGluZ1Byb2R1Y2VUZXh0dXJlKTsKKyAgICAg
ICAgbWVtY3B5KHBlbmRpbmctPm1haWxib3gsIG1haWxib3gsIHNpemVvZihwZW5kaW5nLT5tYWls
Ym94KSk7CisgICAgICAgIHBlbmRpbmctPnRleHR1cmUgPSBtX3RleHR1cmVzLnRha2UobV9jdXJy
ZW50VGV4dHVyZSk7CisgICAgICAgIG1fdGV4dHVyZXMuc2V0KG1fY3VycmVudFRleHR1cmUsIG51
bGxwdHIpOworICAgICAgICBtX3BlbmRpbmdQcm9kdWNlVGV4dHVyZXMuYXBwZW5kKHBlbmRpbmcu
cmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZVRleHR1cmVDSFJP
TUlVTShXR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBXR0MzRGJ5dGUqIG1haWxib3gpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CisgICAgICAgIEFTU0VSVCh0YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworICAgICAgICBtX3RleHR1cmVzLnNl
dChtX2N1cnJlbnRUZXh0dXJlLCBtX3NoYXJlZERhdGEtPmNvbnN1bWVUZXh0dXJlKG1haWxib3gs
IG1fbGFzdFdhaXRlZFN5bmNQb2ludCkpOworICAgIH0KKwogICAgIHZvaWQgZ2V0UGl4ZWxzKGNv
bnN0IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3JtYXQsIHVpbnQ4X3QqIHBpeGVscykKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsKQEAgLTEyNywzNCArMjM5LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZXMuc2l6ZSgpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBzaXplX3QgdGV4dHVyZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV0dDM0Rl
bnVtIGZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4
ZWwgPSA0OwotICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSAxOwotICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVyUGl4
ZWwsICZieXRlc1BlckNvbXBvbmVudCk7Ci0gICAgICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBz
aXplLmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Ci0g
ICAgfQotCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUmVzb3VyY2VQcm92aWRlckNvbnRleHQo
Y29uc3QgQXR0cmlidXRlcyYgYXR0cnMpCisgICAgZXhwbGljaXQgUmVzb3VyY2VQcm92aWRlckNv
bnRleHQoY29uc3QgQXR0cmlidXRlcyYgYXR0cnMsIENvbnRleHRTaGFyZWREYXRhKiBzaGFyZWRE
YXRhKQogICAgICAgICA6IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMp
CisgICAgICAgICwgbV9zaGFyZWREYXRhKHNoYXJlZERhdGEpCiAgICAgICAgICwgbV9jdXJyZW50
VGV4dHVyZSgwKQorICAgICAgICAsIG1fbGFzdFdhaXRlZFN5bmNQb2ludCgwKQogICAgIHsgfQog
CiBwcml2YXRlOgotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgVGV4dHVyZShjb25zdCBJ
bnRTaXplJiBzaXplXywgV0dDM0RlbnVtIGZvcm1hdF8pCi0gICAgICAgICAgICA6IHNpemUoc2l6
ZV8pCi0gICAgICAgICAgICAsIGZvcm1hdChmb3JtYXRfKQotICAgICAgICAgICAgLCBkYXRhKGFk
b3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbdGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KV0pKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBJbnRTaXplIHNpemU7Ci0gICAgICAgIFdHQzNE
ZW51bSBmb3JtYXQ7Ci0gICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgfTsK
LQogICAgIHZvaWQgYWxsb2NhdGVUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemUsIFdHQzNEZW51
bSBmb3JtYXQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CkBAIC0x
ODEsMTQgKzI3NCwyMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxX
ZWJHTElkLCBPd25QdHI8VGV4dHVyZT4gPiBUZXh0dXJlTWFwOworICAgIHN0cnVjdCBQZW5kaW5n
UHJvZHVjZVRleHR1cmUgeworICAgICAgICBXR0MzRGJ5dGUgbWFpbGJveFs2NF07CisgICAgICAg
IE93blB0cjxUZXh0dXJlPiB0ZXh0dXJlOworICAgIH07CisgICAgdHlwZWRlZiBEZXF1ZTxPd25Q
dHI8UGVuZGluZ1Byb2R1Y2VUZXh0dXJlPiA+IFBlbmRpbmdQcm9kdWNlVGV4dHVyZUxpc3Q7Cisg
ICAgQ29udGV4dFNoYXJlZERhdGEqIG1fc2hhcmVkRGF0YTsKICAgICBXZWJHTElkIG1fY3VycmVu
dFRleHR1cmU7CiAgICAgVGV4dHVyZU1hcCBtX3RleHR1cmVzOworICAgIHVuc2lnbmVkIG1fbGFz
dFdhaXRlZFN5bmNQb2ludDsKKyAgICBQZW5kaW5nUHJvZHVjZVRleHR1cmVMaXN0IG1fcGVuZGlu
Z1Byb2R1Y2VUZXh0dXJlczsKIH07CiAKIGNsYXNzIENDUmVzb3VyY2VQcm92aWRlclRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyVGVz
dCgpCi0gICAgICAgIDogbV9jb250ZXh0KENDR3JhcGhpY3NDb250ZXh0OjpjcmVhdGUzRChSZXNv
dXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKCkpKQorICAgICAgICA6IG1fc2hhcmVkRGF0YShD
b250ZXh0U2hhcmVkRGF0YTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9jb250ZXh0KENDR3JhcGhp
Y3NDb250ZXh0OjpjcmVhdGUzRChSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKG1fc2hh
cmVkRGF0YS5nZXQoKSkpKQogICAgICAgICAsIG1fcmVzb3VyY2VQcm92aWRlcihDQ1Jlc291cmNl
UHJvdmlkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQogICAgIHsKICAgICB9CkBAIC0yMDUs
NiArMzA3LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7CisgICAgT3duUHRyPENvbnRleHRTaGFyZWREYXRhPiBtX3NoYXJl
ZERhdGE7CiAgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3du
UHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwogfTsKQEAgLTIxNCw3
ICszMTcsNyBAQCBURVNUX0YoQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCwgQmFzaWMpCiAgICAgSW50
U2l6ZSBzaXplKDEsIDEpOwogICAgIFdHQzNEZW51bSBmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKICAgICBpbnQgcG9vbCA9IDE7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IFJlc291
cmNlUHJvdmlkZXJDb250ZXh0Ojp0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOworICAgIHNpemVf
dCBwaXhlbFNpemUgPSB0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOwogICAgIEFTU0VSVF9FUSg0
VSwgcGl4ZWxTaXplKTsKIAogICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZCA9
IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBD
Q1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CkBAIC0yNTUsNyArMzU4LDcgQEAg
VEVTVF9GKENDUmVzb3VyY2VQcm92aWRlclRlc3QsIFVwbG9hZCkKICAgICBJbnRTaXplIHNpemUo
MiwgMik7CiAgICAgV0dDM0RlbnVtIGZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwog
ICAgIGludCBwb29sID0gMTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gUmVzb3VyY2VQcm92aWRl
ckNvbnRleHQ6OnRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7CisgICAgc2l6ZV90IHBpeGVsU2l6
ZSA9IHRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7CiAgICAgQVNTRVJUX0VRKDE2VSwgcGl4ZWxT
aXplKTsKIAogICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZCA9IG1fcmVzb3Vy
Y2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNl
UHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CkBAIC0zMDIsNCArNDA1LDk3IEBAIFRFU1RfRihD
Q1Jlc291cmNlUHJvdmlkZXJUZXN0LCBVcGxvYWQpCiAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5k
ZWxldGVSZXNvdXJjZShpZCk7CiB9CiAKK1RFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LCBU
cmFuc2ZlclJlc291cmNlcykKK3sKKyAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNoaWxk
Q29udGV4dChDQ0dyYXBoaWNzQ29udGV4dDo6Y3JlYXRlM0QoUmVzb3VyY2VQcm92aWRlckNvbnRl
eHQ6OmNyZWF0ZShtX3NoYXJlZERhdGEuZ2V0KCkpKSk7CisgICAgT3duUHRyPENDUmVzb3VyY2VQ
cm92aWRlcj4gY2hpbGRSZXNvdXJjZVByb3ZpZGVyKENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRl
KGNoaWxkQ29udGV4dC5nZXQoKSkpOworCisgICAgSW50U2l6ZSBzaXplKDEsIDEpOworICAgIFdH
QzNEZW51bSBmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBpbnQgcG9vbCA9
IDE7CisgICAgc2l6ZV90IHBpeGVsU2l6ZSA9IHRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7Cisg
ICAgQVNTRVJUX0VRKDRVLCBwaXhlbFNpemUpOworCisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpS
ZXNvdXJjZUlkIGlkMSA9IGNoaWxkUmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9v
bCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7Cisg
ICAgdWludDhfdCBkYXRhMVs0XSA9IHsxLCAyLCAzLCA0fTsKKyAgICBJbnRSZWN0IHJlY3QoSW50
UG9pbnQoKSwgc2l6ZSk7CisgICAgY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT51cGxvYWQoaWQxLCBk
YXRhMSwgcmVjdCwgcmVjdCwgcmVjdCk7CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291
cmNlSWQgaWQyID0gY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShwb29sLCBz
aXplLCBmb3JtYXQsIENDUmVzb3VyY2VQcm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsKKyAgICB1
aW50OF90IGRhdGEyWzRdID0gezUsIDUsIDUsIDV9OworICAgIGNoaWxkUmVzb3VyY2VQcm92aWRl
ci0+dXBsb2FkKGlkMiwgZGF0YTIsIHJlY3QsIHJlY3QsIHJlY3QpOworCisgICAgaW50IGNoaWxk
UG9vbCA9IDI7CisgICAgaW50IGNoaWxkSWQgPSBtX3Jlc291cmNlUHJvdmlkZXItPmNyZWF0ZUNo
aWxkKGNoaWxkUG9vbCk7CisKKyAgICB7CisgICAgICAgIC8vIFRyYW5zZmVyIHNvbWUgcmVzb3Vy
Y2VzIHRvIHRoZSBwYXJlbnQuCisgICAgICAgIFZlY3RvcjxDQ1Jlc291cmNlUHJvdmlkZXI6OlJl
c291cmNlSWQ+IHJlc291cmNlSWRzVG9UcmFuc2ZlcjsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1Ry
YW5zZmVyLmFwcGVuZChpZDEpOworICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5k
KGlkMik7CisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VM
aXN0IGxpc3QgPSBjaGlsZFJlc291cmNlUHJvdmlkZXItPnByZXBhcmVTZW5kVG9QYXJlbnQocmVz
b3VyY2VJZHNUb1RyYW5zZmVyKTsKKyAgICAgICAgRVhQRUNUX05FKDB1LCBsaXN0LnN5bmNQb2lu
dCk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgbGlzdC5yZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQx
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoaWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNv
bnN1bWVyKGlkMikpOworICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXItPnJlY2VpdmVGcm9tQ2hp
bGQoY2hpbGRJZCwgbGlzdCk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDJ1LCBtX3Jlc291cmNl
UHJvdmlkZXItPm51bVJlc291cmNlcygpKTsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291
cmNlSWRNYXAgcmVzb3VyY2VNYXAgPSBtX3Jlc291cmNlUHJvdmlkZXItPmdldENoaWxkVG9QYXJl
bnRNYXAoY2hpbGRJZCk7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hcHBl
ZElkMSA9IHJlc291cmNlTWFwLmdldChpZDEpOworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBtYXBwZWRJZDIgPSByZXNvdXJjZU1hcC5nZXQoaWQyKTsKKyAgICBFWFBFQ1RfTkUo
MHUsIG1hcHBlZElkMSk7CisgICAgRVhQRUNUX05FKDB1LCBtYXBwZWRJZDIpOworICAgIEVYUEVD
VF9GQUxTRShtX3Jlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDEpKTsKKyAgICBF
WFBFQ1RfRkFMU0UobV9yZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQyKSk7CisK
KyAgICB1aW50OF90IHJlc3VsdFs0XSA9IHswfTsKKyAgICBnZXRSZXNvdXJjZVBpeGVscyhtYXBw
ZWRJZDEsIHNpemUsIGZvcm1hdCwgcmVzdWx0KTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGRh
dGExLCByZXN1bHQsIHBpeGVsU2l6ZSkpOworCisgICAgZ2V0UmVzb3VyY2VQaXhlbHMobWFwcGVk
SWQyLCBzaXplLCBmb3JtYXQsIHJlc3VsdCk7CisgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChkYXRh
MiwgcmVzdWx0LCBwaXhlbFNpemUpKTsKKworICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0
cmFuc2ZlcmluZyBhZ2FpbiB0aGUgc2FtZSByZXNvdXJjZSBmcm9tIHRoZSBjaGlsZCB0byB0aGUK
KyAgICAgICAgLy8gcGFyZW50IGlzIGEgbm9vcC4KKyAgICAgICAgVmVjdG9yPENDUmVzb3VyY2VQ
cm92aWRlcjo6UmVzb3VyY2VJZD4gcmVzb3VyY2VJZHNUb1RyYW5zZmVyOworICAgICAgICByZXNv
dXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKGlkMSk7CisgICAgICAgIENDUmVzb3VyY2VQcm92aWRl
cjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3QgPSBjaGlsZFJlc291cmNlUHJvdmlkZXIt
PnByZXBhcmVTZW5kVG9QYXJlbnQocmVzb3VyY2VJZHNUb1RyYW5zZmVyKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDB1LCBsaXN0LnN5bmNQb2ludCk7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgbGlzdC5y
ZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIFRyYW5zZmVyIHJl
c291cmNlcyBiYWNrIGZyb20gdGhlIHBhcmVudCB0byB0aGUgY2hpbGQuCisgICAgICAgIFZlY3Rv
cjxDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQ+IHJlc291cmNlSWRzVG9UcmFuc2ZlcjsK
KyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVuZChtYXBwZWRJZDEpOworICAgICAg
ICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKG1hcHBlZElkMik7CisgICAgICAgIENDUmVz
b3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3QgPSBtX3Jlc291cmNl
UHJvdmlkZXItPnByZXBhcmVTZW5kVG9DaGlsZChjaGlsZElkLCByZXNvdXJjZUlkc1RvVHJhbnNm
ZXIpOworICAgICAgICBFWFBFQ1RfTkUoMHUsIGxpc3Quc3luY1BvaW50KTsKKyAgICAgICAgRVhQ
RUNUX0VRKDJ1LCBsaXN0LnJlc291cmNlcy5zaXplKCkpOworICAgICAgICBjaGlsZFJlc291cmNl
UHJvdmlkZXItPnJlY2VpdmVGcm9tUGFyZW50KGxpc3QpOworICAgIH0KKworICAgIEVYUEVDVF9G
QUxTRShjaGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDEpKTsKKyAgICBF
WFBFQ1RfRkFMU0UoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQyKSk7
CisKKyAgICBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCogY2hpbGRDb250ZXh0M0QgPSBzdGF0aWNf
Y2FzdDxSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCo+KGNoaWxkQ29udGV4dC0+Y29udGV4dDNEKCkp
OworICAgIHsKKyAgICAgICAgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkIGxvY2soY2hpbGRS
ZXNvdXJjZVByb3ZpZGVyLmdldCgpLCBpZDEpOworICAgICAgICBBU1NFUlRfTkUoMFUsIGxvY2su
dGV4dHVyZUlkKCkpOworICAgICAgICBjaGlsZENvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxvY2sudGV4dHVyZUlkKCkpOworICAgICAgICBjaGls
ZENvbnRleHQzRC0+Z2V0UGl4ZWxzKHNpemUsIGZvcm1hdCwgcmVzdWx0KTsKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIG1lbWNtcChkYXRhMSwgcmVzdWx0LCBwaXhlbFNpemUpKTsKKyAgICB9CisgICAg
eworICAgICAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgbG9jayhjaGlsZFJlc291cmNl
UHJvdmlkZXIuZ2V0KCksIGlkMik7CisgICAgICAgIEFTU0VSVF9ORSgwVSwgbG9jay50ZXh0dXJl
SWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbG9jay50ZXh0dXJlSWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4
dDNELT5nZXRQaXhlbHMoc2l6ZSwgZm9ybWF0LCByZXN1bHQpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgbWVtY21wKGRhdGEyLCByZXN1bHQsIHBpeGVsU2l6ZSkpOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158416</attachid>
            <date>2012-08-14 14:34:11 -0700</date>
            <delta_ts>2012-08-15 19:14:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93524-20120814143338.patch</filename>
            <type>text/plain</type>
            <size>29864</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRmNmRmM2NkNGZiZmFi
NjUxODkzMzIzNWQyZTZhMGI2MzE2MjU4OC4uNTE4ZmU4NDllZDZhMTMxYmFhYTc4N2YwYjEzOWQx
M2U2YzFlMzg1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTA4ICBBbnRv
aW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFk
ZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRo
b2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAg
ICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRl
c3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6Omdl
dENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChNYWlsYm94KToK
KyAgICAgICAgKFRyYW5zZmVyYWJsZVJlc291cmNlKToKKyAgICAgICAgKFRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoUmVz
b3VyY2UpOgorICAgICAgICAoQ2hpbGQpOgorCiAyMDEyLTA4LTE0ICBNaWtoYWlsIFBvemRueWFr
b3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFdlYktpdFRlc3RS
dW5uZXIgbmVlZHMgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyOGJlNGJiMzBmYTYzNjVmYzU2MWQ5ODhi
Y2RmZmJhYWM3NDcxNjVlLi5kNTBjNDM5NTNmNWI5MjQ5ODY2MDQxOTkzY2YxODFjYjU1ZGNhYmZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA4LTA4
ICBBbnRvaW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRk
cyBtZXRob2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAor
ICAgICAgICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFk
ZGVkIHRlc3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHRlc3RzL0ND
UmVzb3VyY2VQcm92aWRlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0ZXh0dXJlU2l6ZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFRleHR1cmUpOgorICAgICAgICAoQ29udGV4dFNoYXJlZERhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpDb250ZXh0U2hhcmVkRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
Q29udGV4dFNoYXJlZERhdGE6Omluc2VydFN5bmNQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRTaGFyZWREYXRhOjpnZW5NYWlsYm94KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNo
YXJlZERhdGE6OnByb2R1Y2VUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJl
ZERhdGE6OmNvbnN1bWVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERh
dGE6OkNvbnRleHRTaGFyZWREYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRl
ckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0OjppbnNlcnRTeW5jUG9pbnQp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6d2FpdFN5bmNQb2lu
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0OjpnZW5NYWlsYm94
Q0hST01JVU0pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6cHJv
ZHVjZVRleHR1cmVDSFJPTUlVTSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJD
b250ZXh0Ojpjb25zdW1lVGV4dHVyZUNIUk9NSVVNKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VQcm92aWRlckNvbnRleHQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0KToKKyAgICAgICAgKFBl
bmRpbmdQcm9kdWNlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkNDUmVzb3VyY2VQcm92aWRl
clRlc3Q6OkNDUmVzb3VyY2VQcm92aWRlclRlc3QpOgorICAgICAgICAoQ0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdCk6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisKIDIwMTItMDgtMTQgIElhaW4g
TWVycmljayAgPGh1c2t5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBh
IHRlc3QgdG8gV2ViRnJhbWVUZXN0IGZvciBzZWxlY3RSYW5nZSBhbmQgdmlzaWJsZVBvc2l0aW9u
Rm9yV2luZG93UG9pbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcAppbmRl
eCBhMGJkMzdjYzhkNWFlODNhMDgzYjkxZGNkNzExYjk5MTk5N2YwZDcwLi5lYjY3MGU1MTRkNjU2
MzhkNGRkNjAyNGY2YzZjNjI0OWVkMzNlNmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQ
cm92aWRlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6Omlu
VXNlQnlDb25zdW1lcihSZXNvdXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmlu
ZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsKLSAgICByZXR1cm4g
ISFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQ7CisgICAgcmV0dXJuICEhaXQtPnNlY29uZC5s
b2NrRm9yUmVhZENvdW50IHx8IGl0LT5zZWNvbmQuZXhwb3J0ZWQ7CiB9CiAKIENDUmVzb3VyY2VQ
cm92aWRlcjo6UmVzb3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGlu
dCBwb29sLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2Fn
ZUhpbnQgaGludCkKQEAgLTEwOSw3ICsxMDksNyBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291
cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwgY29ucwog
ICAgIH0gZWxzZQogICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCAwLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKSk7CiAgICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2UgcmVz
b3VyY2UgPSB7dGV4dHVyZUlkLCBwb29sLCAwLCBmYWxzZSwgZmFsc2UsIHNpemUsIGZvcm1hdH07
CisgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4dHVyZUlkLCBwb29sLCAwLCBmYWxzZSwgZmFs
c2UsIGZhbHNlLCBzaXplLCBmb3JtYXR9OwogICAgIG1fcmVzb3VyY2VzLmFkZChpZCwgcmVzb3Vy
Y2UpOwogICAgIHJldHVybiBpZDsKIH0KQEAgLTExOCw3ICsxMTgsNyBAQCBDQ1Jlc291cmNlUHJv
dmlkZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZUZyb21F
eHRlcm5hbFRleAogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
UmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4
dHVyZUlkLCAwLCAwLCBmYWxzZSwgdHJ1ZSwgSW50U2l6ZSgpLCAwfTsKKyAgICBSZXNvdXJjZSBy
ZXNvdXJjZSA9IHt0ZXh0dXJlSWQsIDAsIDAsIGZhbHNlLCB0cnVlLCBmYWxzZSwgSW50U2l6ZSgp
LCAwfTsKICAgICBtX3Jlc291cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKICAgICByZXR1cm4gaWQ7
CiB9CkBAIC0yMjgsNiArMjI4LDcgQEAgdm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnVubG9ja0Zv
clJlYWQoUmVzb3VyY2VJZCBpZCkKIENDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3Zp
ZGVyKENDR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CiAgICAgLCBtX25leHRJZCgxKQorICAgICwgbV9uZXh0Q2hpbGQoMSkKICAgICAsIG1fdXNlVGV4
dHVyZVN0b3JhZ2VFeHQoZmFsc2UpCiAgICAgLCBtX3VzZVRleHR1cmVVc2FnZUhpbnQoZmFsc2Up
CiAgICAgLCBtX3VzZVNoYWxsb3dGbHVzaChmYWxzZSkKQEAgLTI2NCw0ICsyNjUsMTUwIEBAIGJv
b2wgQ0NSZXNvdXJjZVByb3ZpZGVyOjppbml0aWFsaXplKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAoraW50IENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQoaW50IHBvb2wpCit7CisgICAg
QVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBDaGlsZCBjaGlsZEluZm87Cisg
ICAgY2hpbGRJbmZvLnBvb2wgPSBwb29sOworICAgIGludCBjaGlsZCA9IG1fbmV4dENoaWxkKys7
CisgICAgbV9jaGlsZHJlbi5hZGQoY2hpbGQsIGNoaWxkSW5mbyk7CisgICAgcmV0dXJuIGNoaWxk
OworfQorCit2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6ZGVzdHJveUNoaWxkKGludCBjaGlsZCkK
K3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIENoaWxkTWFwOjpp
dGVyYXRvciBpdCA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCk7CisgICAgQVNTRVJUKGl0ICE9IG1f
Y2hpbGRyZW4uZW5kKCkpOworICAgIGRlbGV0ZU93bmVkUmVzb3VyY2VzKGl0LT5zZWNvbmQucG9v
bCk7CisgICAgbV9jaGlsZHJlbi5yZW1vdmUoaXQpOworfQorCitjb25zdCBDQ1Jlc291cmNlUHJv
dmlkZXI6OlJlc291cmNlSWRNYXAmIENDUmVzb3VyY2VQcm92aWRlcjo6Z2V0Q2hpbGRUb1BhcmVu
dE1hcChpbnQgY2hpbGQpIGNvbnN0Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKKyAgICBDaGlsZE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQo
Y2hpbGQpOworICAgIEFTU0VSVChpdCAhPSBtX2NoaWxkcmVuLmVuZCgpKTsKKyAgICByZXR1cm4g
aXQtPnNlY29uZC5jaGlsZFRvUGFyZW50TWFwOworfQorCitDQ1Jlc291cmNlUHJvdmlkZXI6OlRy
YW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9Q
YXJlbnQoY29uc3QgVmVjdG9yPFJlc291cmNlSWQ+JiByZXNvdXJjZXMpCit7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3Qg
bGlzdDsKKyAgICBsaXN0LnN5bmNQb2ludCA9IDA7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2Qg
fHwgIWNvbnRleHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICBy
ZXR1cm4gbGlzdDsKKyAgICB9CisgICAgZm9yIChWZWN0b3I8UmVzb3VyY2VJZD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5lbmQoKTsgKytp
dCkgeworICAgICAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgaWYg
KHRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJjZSkpIHsKKyAgICAgICAg
ICAgIG1fcmVzb3VyY2VzLmZpbmQoKml0KS0+c2Vjb25kLmV4cG9ydGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGxpc3QucmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKGxpc3QucmVzb3VyY2VzLnNpemUoKSkKKyAgICAgICAgbGlzdC5zeW5jUG9pbnQg
PSBjb250ZXh0M2QtPmluc2VydFN5bmNQb2ludCgpOworICAgIHJldHVybiBsaXN0OworfQorCitD
Q1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJv
dmlkZXI6OnByZXBhcmVTZW5kVG9DaGlsZChpbnQgY2hpbGQsIGNvbnN0IFZlY3RvcjxSZXNvdXJj
ZUlkPiYgcmVzb3VyY2VzKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CisgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3Q7CisgICAgbGlzdC5zeW5jUG9pbnQg
PSAwOworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNv
bnRleHQzRCgpOworICAgIGlmICghY29udGV4dDNkIHx8ICFjb250ZXh0M2QtPm1ha2VDb250ZXh0
Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBz
b2Z0d2FyZSBjb21wb3NpdGluZy4KKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorICAgIENo
aWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT5zZWNvbmQ7CisgICAgZm9y
IChWZWN0b3I8UmVzb3VyY2VJZD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLmJlZ2lu
KCk7IGl0ICE9IHJlc291cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBUcmFuc2ZlcmFibGVS
ZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgaWYgKCF0cmFuc2ZlclJlc291cmNlKGNvbnRleHQz
ZCwgKml0LCAmcmVzb3VyY2UpKQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJlc291cmNlLmlkID0gY2hpbGRJbmZvLnBhcmVudFRvQ2hpbGRNYXAuZ2V0KCppdCk7
CisgICAgICAgIGNoaWxkSW5mby5wYXJlbnRUb0NoaWxkTWFwLnJlbW92ZSgqaXQpOworICAgICAg
ICBjaGlsZEluZm8uY2hpbGRUb1BhcmVudE1hcC5yZW1vdmUocmVzb3VyY2UuaWQpOworICAgICAg
ICBsaXN0LnJlc291cmNlcy5hcHBlbmQocmVzb3VyY2UpOworICAgICAgICBkZWxldGVSZXNvdXJj
ZSgqaXQpOworICAgIH0KKyAgICBpZiAobGlzdC5yZXNvdXJjZXMuc2l6ZSgpKQorICAgICAgICBs
aXN0LnN5bmNQb2ludCA9IGNvbnRleHQzZC0+aW5zZXJ0U3luY1BvaW50KCk7CisgICAgcmV0dXJu
IGxpc3Q7Cit9CisKK3ZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbUNoaWxkKGlu
dCBjaGlsZCwgY29uc3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0JiByZXNvdXJjZXMpCit7Cisg
ICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRl
eHQzZCB8fCAhY29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHJlc291cmNlcy5zeW5jUG9pbnQpIHsKKyAgICAg
ICAgLy8gTk9URTogSWYgdGhlIHBhcmVudCBpcyBhIGJyb3dzZXIgYW5kIHRoZSBjaGlsZCBhIHJl
bmRlcmVyLCB0aGUgcGFyZW50CisgICAgICAgIC8vIGlzIG5vdCBzdXBwb3NlZCB0byBoYXZlIGl0
cyBjb250ZXh0IHdhaXQsIGJlY2F1c2UgdGhhdCBjb3VsZCBpbmR1Y2UKKyAgICAgICAgLy8gZGVh
ZGxvY2tzIGFuZC9vciBzZWN1cml0eSBpc3N1ZXMuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUg
Zm9yCisgICAgICAgIC8vIHdhaXRpbmcgYXN5bmNocm9ub3VzbHksIGFuZCByZXNldHRpbmcgc3lu
Y1BvaW50IGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgICAgICAgIC8vIEhvd2V2ZXIgaWYgdGhlIHBh
cmVudCBpcyBhIHJlbmRlcmVyIChlLmcuIGJyb3dzZXIgdGFnKSwgaXQgbWF5IGJlIG9rCisgICAg
ICAgIC8vIChhbmQgaXMgc2ltcGxlcikgdG8gd2FpdC4KKyAgICAgICAgR0xDKGNvbnRleHQzZCwg
Y29udGV4dDNkLT53YWl0U3luY1BvaW50KHJlc291cmNlcy5zeW5jUG9pbnQpKTsKKyAgICB9Cisg
ICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnNlY29uZDsKKyAg
ICBmb3IgKFZlY3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
cmVzb3VyY2VzLnJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMucmVzb3VyY2VzLmVu
ZCgpOyArK2l0KSB7CisgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKKyAgICAgICAgR0xDKGNv
bnRleHQzZCwgdGV4dHVyZUlkID0gY29udGV4dDNkLT5jcmVhdGVUZXh0dXJlKCkpOworICAgICAg
ICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4
dDNkLT5jb25zdW1lVGV4dHVyZUNIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBpdC0+bWFpbGJveC5uYW1lKSk7CisgICAgICAgIFJlc291cmNlSWQgaWQgPSBtX25leHRJZCsr
OworICAgICAgICBSZXNvdXJjZSByZXNvdXJjZSA9IHt0ZXh0dXJlSWQsIGNoaWxkSW5mby5wb29s
LCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBpdC0+c2l6ZSwgaXQtPmZvcm1hdH07CisgICAgICAg
IG1fcmVzb3VyY2VzLmFkZChpZCwgcmVzb3VyY2UpOworICAgICAgICBtX21haWxib3hlcy5hcHBl
bmQoaXQtPm1haWxib3gpOworICAgICAgICBjaGlsZEluZm8ucGFyZW50VG9DaGlsZE1hcC5hZGQo
aWQsIGl0LT5pZCk7CisgICAgICAgIGNoaWxkSW5mby5jaGlsZFRvUGFyZW50TWFwLmFkZChpdC0+
aWQsIGlkKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJv
bVBhcmVudChjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJlc291cmNlcykKK3sKKyAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFdlYkdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQzRCgpOworICAgIGlmICghY29udGV4
dDNkIHx8ICFjb250ZXh0M2QtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocmVzb3VyY2VzLnN5bmNQb2ludCkKKyAgICAgICAg
R0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT53YWl0U3luY1BvaW50KHJlc291cmNlcy5zeW5jUG9p
bnQpKTsKKyAgICBmb3IgKFZlY3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVzb3VyY2VzLnJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMucmVz
b3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlc291cmNlJiByZXNvdXJjZSA9IG1fcmVz
b3VyY2VzLmZpbmQoaXQtPmlkKS0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzb3VyY2UuZXhw
b3J0ZWQpOworICAgICAgICByZXNvdXJjZS5leHBvcnRlZCA9IGZhbHNlOworICAgICAgICBHTEMo
Y29udGV4dDNkLCBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCByZXNvdXJjZS5nbElkKSk7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQz
ZC0+Y29uc3VtZVRleHR1cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
aXQtPm1haWxib3gubmFtZSkpOworICAgICAgICBtX21haWxib3hlcy5hcHBlbmQoaXQtPm1haWxi
b3gpOworICAgIH0KK30KKworYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyYW5zZmVyUmVzb3Vy
Y2UoV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFJlc291cmNlSWQgaWQsIFRyYW5zZmVy
YWJsZVJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworICAgIFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2Vz
LmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNl
Y29uZC5sb2NrZWRGb3JXcml0ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ICYmICFp
dC0+c2Vjb25kLmV4dGVybmFsKTsKKyAgICBpZiAoaXQtPnNlY29uZC5leHBvcnRlZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlc291cmNlLT5pZCA9IGlkOworICAgIHJlc291cmNlLT5m
b3JtYXQgPSBpdC0+c2Vjb25kLmZvcm1hdDsKKyAgICByZXNvdXJjZS0+c2l6ZSA9IGl0LT5zZWNv
bmQuc2l6ZTsKKyAgICBpZiAoIW1fbWFpbGJveGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzb3Vy
Y2UtPm1haWxib3ggPSBtX21haWxib3hlcy50YWtlRmlyc3QoKTsKKyAgICBlbHNlCisgICAgICAg
IEdMQyhjb250ZXh0LCBjb250ZXh0LT5nZW5NYWlsYm94Q0hST01JVU0ocmVzb3VyY2UtPm1haWxi
b3gubmFtZSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPnNlY29uZC5nbElkKSk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnByb2R1Y2VUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHJlc291cmNlLT5tYWlsYm94Lm5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaAppbmRleCBhZGQ5MDllNWJmZWE1
MDA3NWY2NzYyMjc5ZDY1ODliMzIzMWMwZTI1Li4zYTI2NTQwOGQ2ODAzZDQ5YzI4MmFjMGI5NDBm
YTE3NjFhNzRjNTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaApAQCAtMzAs
MTEgKzMwLDEzIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKQEAgLTU0
LDYgKzU2LDIwIEBAIGNsYXNzIENDUmVzb3VyY2VQcm92aWRlciB7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBSZXNvdXJjZUlkOwogICAgIGVudW0gVGV4dHVyZVVzYWdlSGludCB7IFRl
eHR1cmVVc2FnZUFueSwgVGV4dHVyZVVzYWdlRnJhbWVidWZmZXIgfTsKKyAgICBzdHJ1Y3QgTWFp
bGJveCB7CisgICAgICAgIEdDM0RieXRlIG5hbWVbNjRdOworICAgIH07CisgICAgc3RydWN0IFRy
YW5zZmVyYWJsZVJlc291cmNlIHsKKyAgICAgICAgdW5zaWduZWQgaWQ7CisgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdDsKKyAgICAgICAgSW50U2l6ZSBzaXplOworICAgICAgICBNYWlsYm94IG1haWxi
b3g7CisgICAgfTsKKyAgICBzdHJ1Y3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IHsKKyAgICAg
ICAgVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPiByZXNvdXJjZXM7CisgICAgICAgIHVuc2ln
bmVkIHN5bmNQb2ludDsKKyAgICB9OworICAgIHR5cGVkZWYgSGFzaE1hcDxSZXNvdXJjZUlkLCBS
ZXNvdXJjZUlkPiBSZXNvdXJjZUlkTWFwOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZXNv
dXJjZVByb3ZpZGVyPiBjcmVhdGUoQ0NHcmFwaGljc0NvbnRleHQqKTsKIApAQCAtOTAsNiArMTA2
LDQyIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWxsb3cgZmx1c2gg
b2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICBib29sIHNoYWxsb3dGbHVzaElmU3VwcG9y
dGVkKCk7CiAKKyAgICAvLyBDcmVhdGVzIGFjY291bnRpbmcgZm9yIGEgY2hpbGQsIGFuZCBhc3Nv
Y2lhdGUgaXQgd2l0aCBhIHBvb2wuIFJlc291cmNlcworICAgIC8vIHRyYW5zZmVyZWQgZnJvbSB0
aGF0IGNoaWxkIHdpbGwgZ28gdG8gdGhhdCBwb29sLiBSZXR1cm5zIGEgY2hpbGQgSUQuCisgICAg
aW50IGNyZWF0ZUNoaWxkKGludCBwb29sKTsKKworICAgIC8vIERlc3Ryb3lzIGFjY291bnRpbmcg
Zm9yIHRoZSBjaGlsZCwgZGVsZXRpbmcgYWxsIHJlc291cmNlcyBmcm9tIHRoYXQgcG9vbC4KKyAg
ICB2b2lkIGRlc3Ryb3lDaGlsZChpbnQgY2hpbGQpOworCisgICAgLy8gR2V0cyB0aGUgY2hpbGQt
PnBhcmVudCByZXNvdXJjZSBJRCBtYXAuCisgICAgY29uc3QgUmVzb3VyY2VJZE1hcCYgZ2V0Q2hp
bGRUb1BhcmVudE1hcChpbnQgY2hpbGQpIGNvbnN0OworCisgICAgLy8gUHJlcGFyZXMgcmVzb3Vy
Y2VzIHRvIGJlIHRyYW5zZmVyZWQgdG8gdGhlIHBhcmVudCwgbW92aW5nIHRoZW0gdG8KKyAgICAv
LyBtYWlsYm94ZXMgYW5kIHNlcmlhbGl6aW5nIG1ldGEtZGF0YSBpbnRvIFRyYW5zZmVyYWJsZVJl
c291cmNlcy4KKyAgICAvLyBSZXNvdXJjZXMgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIENDUmVz
b3VyY2VQcm92aWRlciwgYnV0IGFyZSBtYXJrZXMgYXMKKyAgICAvLyAiaW4gdXNlIi4KKyAgICBU
cmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgcHJlcGFyZVNlbmRUb1BhcmVudChjb25zdCBWZWN0b3I8
UmVzb3VyY2VJZD4mKTsKKworICAgIC8vIFByZXBhcmVzIHJlc291cmNlcyB0byBiZSB0cmFuc2Zl
cmVkIGJhY2sgdG8gdGhlIGNoaWxkLCBtb3ZpbmcgdGhlbSB0bworICAgIC8vIG1haWxib3hlcyBh
bmQgc2VyaWFsaXppbmcgbWV0YS1kYXRhIGludG8gVHJhbnNmZXJhYmxlUmVzb3VyY2VzLgorICAg
IC8vIFJlc291cmNlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBDQ1Jlc291cmNlUHJvdmlkZXIuIE5v
dGU6IHRoZSByZXNvdXJjZSBJRHMKKyAgICAvLyBwYXNzZWQgYXJlIGluIHRoZSBwYXJlbnQgbmFt
ZXNwYWNlIGFuZCB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdGhlIGNoaWxkCisgICAgLy8gbmFtZXNw
YWNlIHdoZW4gcmV0dXJuZWQuCisgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IHByZXBhcmVT
ZW5kVG9DaGlsZChpbnQgY2hpbGQsIGNvbnN0IFZlY3RvcjxSZXNvdXJjZUlkPiYpOworCisgICAg
Ly8gUmVjZWl2ZXMgcmVzb3VyY2VzIGZyb20gYSBjaGlsZCwgbW92aW5nIHRoZW0gZnJvbSBtYWls
Ym94ZXMuIFJlc291cmNlIElEcworICAgIC8vIHBhc3NlZCBhcmUgaW4gdGhlIGNoaWxkIG5hbWVz
cGFjZSwgYW5kIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUgcGFyZW50CisgICAgLy8gbmFtZXNw
YWNlLCBhZGRlZCB0byB0aGUgY2hpbGQtPnBhcmVudCBtYXAuCisgICAgLy8gTk9URTogaWYgdGhl
IHN5bmNQb2ludCBmaWxlZCBpbiBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgaXMgc2V0LCB0aGlz
CisgICAgLy8gd2lsbCB3YWl0IG9uIGl0LgorICAgIHZvaWQgcmVjZWl2ZUZyb21DaGlsZChpbnQg
Y2hpbGQsIGNvbnN0IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCYpOworCisgICAgLy8gUmVjZWl2
ZXMgcmVzb3VyY2VzIGZyb20gdGhlIHBhcmVudCwgbW92aW5nIHRoZW0gZnJvbSBtYWlsYm94ZXMu
IFJlc291cmNlIElEcworICAgIC8vIHBhc3NlZCBhcmUgaW4gdGhlIGNoaWxkIG5hbWVzcGFjZS4K
KyAgICAvLyBOT1RFOiBpZiB0aGUgc3luY1BvaW50IGZpbGVkIGluIFRyYW5zZmVyYWJsZVJlc291
cmNlTGlzdCBpcyBzZXQsIHRoaXMKKyAgICAvLyB3aWxsIHdhaXQgb24gaXQuCisgICAgdm9pZCBy
ZWNlaXZlRnJvbVBhcmVudChjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmKTsKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkOwogICAg
IGZyaWVuZCBjbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlOwpAQCAtMTAwLDEwICsx
NTIsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgaW50IGxvY2tGb3JSZWFkQ291bnQ7CiAgICAgICAg
IGJvb2wgbG9ja2VkRm9yV3JpdGU7CiAgICAgICAgIGJvb2wgZXh0ZXJuYWw7CisgICAgICAgIGJv
b2wgZXhwb3J0ZWQ7CiAgICAgICAgIEludFNpemUgc2l6ZTsKICAgICAgICAgR0MzRGVudW0gZm9y
bWF0OwogICAgIH07CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlc291cmNlSWQsIFJlc291cmNlPiBS
ZXNvdXJjZU1hcDsKKyAgICBzdHJ1Y3QgQ2hpbGQgeworICAgICAgICBpbnQgcG9vbDsKKyAgICAg
ICAgUmVzb3VyY2VJZE1hcCBjaGlsZFRvUGFyZW50TWFwOworICAgICAgICBSZXNvdXJjZUlkTWFw
IHBhcmVudFRvQ2hpbGRNYXA7CisgICAgfTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBDaGls
ZD4gQ2hpbGRNYXA7CiAKICAgICBleHBsaWNpdCBDQ1Jlc291cmNlUHJvdmlkZXIoQ0NHcmFwaGlj
c0NvbnRleHQqKTsKICAgICBib29sIGluaXRpYWxpemUoKTsKQEAgLTExNiw5ICsxNzUsMTUgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBsb2NrRm9yUmVhZChSZXNvdXJjZUlkKTsKICAgICB2b2lk
IHVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCk7CiAKKyAgICBib29sIHRyYW5zZmVyUmVzb3VyY2Uo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIFJlc291cmNlSWQsIFRyYW5zZmVyYWJsZVJl
c291cmNlKik7CisKICAgICBDQ0dyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwogICAgIFJlc291
cmNlSWQgbV9uZXh0SWQ7CiAgICAgUmVzb3VyY2VNYXAgbV9yZXNvdXJjZXM7CisgICAgaW50IG1f
bmV4dENoaWxkOworICAgIENoaWxkTWFwIG1fY2hpbGRyZW47CisKKyAgICBEZXF1ZTxNYWlsYm94
PiBtX21haWxib3hlczsKIAogICAgIGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4dDsKICAgICBi
b29sIG1fdXNlVGV4dHVyZVVzYWdlSGludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwCmluZGV4IDQyMjc3NDU5YWVl
MDc0MWE5NmIyMzNhNTJlM2E2MGY4MjFiNDgwYTQuLjFiNjVlOTYyOTdkN2JlNTBlYjYyYWZlYzk5
YTM3OGQxZTBiYTk5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1Jlc291cmNlUHJvdmlkZXJUZXN0LmNwcApAQCAtNDIsOSArNDIsOTggQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIHsKIAorc2l6ZV90IHRleHR1cmVTaXplKGNv
bnN0IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3JtYXQpCit7CisgICAgdW5zaWduZWQgaW50
IGNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7CisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9u
ZW50ID0gMTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJh
bWV0ZXJzKGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25l
bnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCk7CisgICAgcmV0dXJuIHNpemUud2lkdGgo
KSAqIHNpemUuaGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVu
dDsKK30KKworc3RydWN0IFRleHR1cmUgeworICAgIFRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6
ZV8sIFdHQzNEZW51bSBmb3JtYXRfKQorICAgICAgICA6IHNpemUoc2l6ZV8pCisgICAgICAgICwg
Zm9ybWF0KGZvcm1hdF8pCisgICAgICAgICwgZGF0YShhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90
W3RleHR1cmVTaXplKHNpemUsIGZvcm1hdCldKSkKKyAgICB7CisgICAgfQorCisgICAgSW50U2l6
ZSBzaXplOworICAgIFdHQzNEZW51bSBmb3JtYXQ7CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4g
ZGF0YTsKK307CisKKy8vIFNoYXJlZCBkYXRhIGJldHdlZW4gbXVsdGlwbGUgUmVzb3VyY2VQcm92
aWRlckNvbnRleHQuIFRoaXMgY29udGFpbnMgbWFpbGJveAorLy8gY29udGVudHMgYXMgd2VsbCBh
cyBpbmZvcm1hdGlvbiBhYm91dCBzeW5jIHBvaW50cy4KK2NsYXNzIENvbnRleHRTaGFyZWREYXRh
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb250ZXh0U2hhcmVkRGF0YT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvbnRleHRTaGFyZWREYXRhKCkpOyB9CisKKyAg
ICB1bnNpZ25lZCBpbnNlcnRTeW5jUG9pbnQoKSB7IHJldHVybiBtX25leHRTeW5jUG9pbnQrKzsg
fQorCisgICAgdm9pZCBnZW5NYWlsYm94KFdHQzNEYnl0ZSogbWFpbGJveCkKKyAgICB7CisgICAg
ICAgIG1lbXNldChtYWlsYm94LCAwLCBzaXplb2YoV0dDM0RieXRlWzY0XSkpOworICAgICAgICBt
ZW1jcHkobWFpbGJveCwgJm1fbmV4dE1haWxCb3gsIHNpemVvZihtX25leHRNYWlsQm94KSk7Cisg
ICAgICAgICsrbV9uZXh0TWFpbEJveDsKKyAgICB9CisKKyAgICB2b2lkIHByb2R1Y2VUZXh0dXJl
KGNvbnN0IFdHQzNEYnl0ZSogbWFpbGJveE5hbWUsIHVuc2lnbmVkIHN5bmNQb2ludCwgUGFzc093
blB0cjxUZXh0dXJlPiB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFpbGJveCA9
IDA7CisgICAgICAgIG1lbWNweSgmbWFpbGJveCwgbWFpbGJveE5hbWUsIHNpemVvZihtYWlsYm94
KSk7CisgICAgICAgIEFTU0VSVChtYWlsYm94ICYmIG1haWxib3ggPCBtX25leHRNYWlsQm94KTsK
KyAgICAgICAgbV90ZXh0dXJlcy5zZXQobWFpbGJveCwgdGV4dHVyZSk7CisgICAgICAgIEFTU0VS
VChtX3N5bmNQb2ludEZvck1haWxib3guZ2V0KG1haWxib3gpIDwgc3luY1BvaW50KTsKKyAgICAg
ICAgbV9zeW5jUG9pbnRGb3JNYWlsYm94LnNldChtYWlsYm94LCBzeW5jUG9pbnQpOworICAgIH0K
KworICAgIFBhc3NPd25QdHI8VGV4dHVyZT4gY29uc3VtZVRleHR1cmUoY29uc3QgV0dDM0RieXRl
KiBtYWlsYm94TmFtZSwgdW5zaWduZWQgc3luY1BvaW50KQorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgbWFpbGJveCA9IDA7CisgICAgICAgIG1lbWNweSgmbWFpbGJveCwgbWFpbGJveE5hbWUsIHNp
emVvZihtYWlsYm94KSk7CisgICAgICAgIEFTU0VSVChtYWlsYm94ICYmIG1haWxib3ggPCBtX25l
eHRNYWlsQm94KTsKKworICAgICAgICAvLyBJZiB0aGUgbGF0ZXN0IHN5bmMgcG9pbnQgdGhlIGNv
bnRleHQgaGFzIHdhaXRlZCBvbiBpcyBiZWZvcmUgdGhlIHN5bmMKKyAgICAgICAgLy8gcG9pbnQg
Zm9yIHdoZW4gdGhlIG1haWxib3ggd2FzIHNldCwgcHJldGVuZCB3ZSBuZXZlciBzYXcgdGhhdAor
ICAgICAgICAvLyBwcm9kdWNlVGV4dHVyZS4KKyAgICAgICAgaWYgKG1fc3luY1BvaW50Rm9yTWFp
bGJveC5nZXQobWFpbGJveCkgPCBzeW5jUG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIG1fdGV4dHVyZXMudGFrZShtYWlsYm94KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQ29udGV4dFNoYXJlZERhdGEoKQorICAgICAgICA6IG1fbmV4dFN5bmNQb2lu
dCgxKQorICAgICAgICAsIG1fbmV4dE1haWxCb3goMSkKKyAgICB7IH0KKworICAgIHVuc2lnbmVk
IG1fbmV4dFN5bmNQb2ludDsKKyAgICB1bnNpZ25lZCBtX25leHRNYWlsQm94OworICAgIHR5cGVk
ZWYgSGFzaE1hcDx1bnNpZ25lZCwgT3duUHRyPFRleHR1cmU+ID4gVGV4dHVyZU1hcDsKKyAgICBU
ZXh0dXJlTWFwIG1fdGV4dHVyZXM7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1f
c3luY1BvaW50Rm9yTWFpbGJveDsKK307CisKIGNsYXNzIFJlc291cmNlUHJvdmlkZXJDb250ZXh0
IDogcHVibGljIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlc291cmNlUHJvdmlkZXJDb250ZXh0PiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgUmVzb3VyY2VQcm92aWRlckNvbnRleHQoQXR0cmlidXRlcygp
KSk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxSZXNvdXJjZVByb3ZpZGVyQ29udGV4dD4gY3Jl
YXRlKENvbnRleHRTaGFyZWREYXRhKiBzaGFyZWREYXRhKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
UmVzb3VyY2VQcm92aWRlckNvbnRleHQoQXR0cmlidXRlcygpLCBzaGFyZWREYXRhKSk7IH0KKwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW5zZXJ0U3luY1BvaW50KCkKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHN5bmNQb2ludCA9IG1fc2hhcmVkRGF0YS0+aW5zZXJ0U3luY1BvaW50KCk7CisgICAg
ICAgIC8vIENvbW1pdCB0aGUgcHJvZHVjZVRleHR1cmVDSFJPTUlVTSBjYWxscyBhdCB0aGlzIHBv
aW50LCBzbyB0aGF0CisgICAgICAgIC8vIHRoZXkncmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeW5j
IHBvaW50LgorICAgICAgICBmb3IgKFBlbmRpbmdQcm9kdWNlVGV4dHVyZUxpc3Q6Oml0ZXJhdG9y
IGl0ID0gbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fcGVuZGluZ1By
b2R1Y2VUZXh0dXJlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIG1fc2hhcmVkRGF0YS0+cHJv
ZHVjZVRleHR1cmUoKCppdCktPm1haWxib3gsIHN5bmNQb2ludCwgKCppdCktPnRleHR1cmUucmVs
ZWFzZSgpKTsKKyAgICAgICAgbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzLmNsZWFyKCk7CisgICAg
ICAgIHJldHVybiBzeW5jUG9pbnQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHdhaXRTeW5j
UG9pbnQodW5zaWduZWQgc3luY1BvaW50KQorICAgIHsKKyAgICAgICAgbV9sYXN0V2FpdGVkU3lu
Y1BvaW50ID0gc3RkOjptYXgoc3luY1BvaW50LCBtX2xhc3RXYWl0ZWRTeW5jUG9pbnQpOworICAg
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZShXR0MzRGVudW0gdGFyZ2V0LCBXZWJH
TElkIHRleHR1cmUpCiAgICAgewpAQCAtMTEzLDYgKzIwMiwyOSBAQCBwdWJsaWM6CiAgICAgICAg
IHNldFBpeGVscyh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAg
IH0KIAorICAgIHZpcnR1YWwgdm9pZCBnZW5NYWlsYm94Q0hST01JVU0oV0dDM0RieXRlKiBtYWls
Ym94KSB7IHJldHVybiBtX3NoYXJlZERhdGEtPmdlbk1haWxib3gobWFpbGJveCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcHJvZHVjZVRleHR1cmVDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBjb25z
dCBXR0MzRGJ5dGUqIG1haWxib3gpCisgICAgeworICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4
dHVyZSk7CisgICAgICAgIEFTU0VSVCh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQpOworCisgICAgICAgIC8vIERlbGF5IG1vdmluZCB0aGUgdGV4dHVyZSBpbnRvIHRoZSBt
YWlsYm94IHVudGlsIHRoZSBuZXh0CisgICAgICAgIC8vIGluc2VydFN5bmNQb2ludCwgc28gdGhh
dCBpdCBpcyBub3QgdmlzaWJsZSB0byBvdGhlciBjb250ZXh0cyB0aGF0CisgICAgICAgIC8vIGhh
dmVuJ3Qgd2FpdGVkIG9uIHRoYXQgc3luYyBwb2ludC4KKyAgICAgICAgT3duUHRyPFBlbmRpbmdQ
cm9kdWNlVGV4dHVyZT4gcGVuZGluZyA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nUHJvZHVjZVRleHR1
cmUpOworICAgICAgICBtZW1jcHkocGVuZGluZy0+bWFpbGJveCwgbWFpbGJveCwgc2l6ZW9mKHBl
bmRpbmctPm1haWxib3gpKTsKKyAgICAgICAgcGVuZGluZy0+dGV4dHVyZSA9IG1fdGV4dHVyZXMu
dGFrZShtX2N1cnJlbnRUZXh0dXJlKTsKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQobV9jdXJyZW50
VGV4dHVyZSwgbnVsbHB0cik7CisgICAgICAgIG1fcGVuZGluZ1Byb2R1Y2VUZXh0dXJlcy5hcHBl
bmQocGVuZGluZy5yZWxlYXNlKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb25zdW1l
VGV4dHVyZUNIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIGNvbnN0IFdHQzNEYnl0ZSogbWFpbGJv
eCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsKKyAgICAgICAgQVNT
RVJUKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgICAgIG1f
dGV4dHVyZXMuc2V0KG1fY3VycmVudFRleHR1cmUsIG1fc2hhcmVkRGF0YS0+Y29uc3VtZVRleHR1
cmUobWFpbGJveCwgbV9sYXN0V2FpdGVkU3luY1BvaW50KSk7CisgICAgfQorCiAgICAgdm9pZCBn
ZXRQaXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV0dDM0RlbnVtIGZvcm1hdCwgdWludDhfdCog
cGl4ZWxzKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY3VycmVudFRleHR1cmUpOwpAQCAtMTI4
LDM0ICsyNDAsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlcy5zaXplKCk7
CiAgICAgfQogCi0gICAgc3RhdGljIHNpemVfdCB0ZXh0dXJlU2l6ZShjb25zdCBJbnRTaXplJiBz
aXplLCBXR0MzRGVudW0gZm9ybWF0KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvbXBv
bmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVu
dCA9IDE7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgJmNvbXBv
bmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50KTsKLSAgICAgICAgcmV0dXJuIHNpemUu
d2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNv
bXBvbmVudDsKLSAgICB9Ci0KIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBSZXNvdXJjZVByb3Zp
ZGVyQ29udGV4dChjb25zdCBBdHRyaWJ1dGVzJiBhdHRycykKKyAgICBleHBsaWNpdCBSZXNvdXJj
ZVByb3ZpZGVyQ29udGV4dChjb25zdCBBdHRyaWJ1dGVzJiBhdHRycywgQ29udGV4dFNoYXJlZERh
dGEqIHNoYXJlZERhdGEpCiAgICAgICAgIDogQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRChhdHRycykKKyAgICAgICAgLCBtX3NoYXJlZERhdGEoc2hhcmVkRGF0YSkKICAgICAgICAg
LCBtX2N1cnJlbnRUZXh0dXJlKDApCisgICAgICAgICwgbV9sYXN0V2FpdGVkU3luY1BvaW50KDAp
CiAgICAgeyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IFRleHR1cmUgewotICAgICAgICBUZXh0
dXJlKGNvbnN0IEludFNpemUmIHNpemVfLCBXR0MzRGVudW0gZm9ybWF0XykKLSAgICAgICAgICAg
IDogc2l6ZShzaXplXykKLSAgICAgICAgICAgICwgZm9ybWF0KGZvcm1hdF8pCi0gICAgICAgICAg
ICAsIGRhdGEoYWRvcHRBcnJheVB0cihuZXcgdWludDhfdFt0ZXh0dXJlU2l6ZShzaXplLCBmb3Jt
YXQpXSkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEludFNpemUgc2l6ZTsKLSAg
ICAgICAgV0dDM0RlbnVtIGZvcm1hdDsKLSAgICAgICAgT3duQXJyYXlQdHI8dWludDhfdD4gZGF0
YTsKLSAgICB9OwotCiAgICAgdm9pZCBhbGxvY2F0ZVRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgV0dDM0RlbnVtIGZvcm1hdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0
dXJlKTsKQEAgLTE4MiwxNCArMjc1LDIzIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkdMSWQsIE93blB0cjxUZXh0dXJlPiA+IFRleHR1cmVNYXA7CisgICAgc3Ry
dWN0IFBlbmRpbmdQcm9kdWNlVGV4dHVyZSB7CisgICAgICAgIFdHQzNEYnl0ZSBtYWlsYm94WzY0
XTsKKyAgICAgICAgT3duUHRyPFRleHR1cmU+IHRleHR1cmU7CisgICAgfTsKKyAgICB0eXBlZGVm
IERlcXVlPE93blB0cjxQZW5kaW5nUHJvZHVjZVRleHR1cmU+ID4gUGVuZGluZ1Byb2R1Y2VUZXh0
dXJlTGlzdDsKKyAgICBDb250ZXh0U2hhcmVkRGF0YSogbV9zaGFyZWREYXRhOwogICAgIFdlYkdM
SWQgbV9jdXJyZW50VGV4dHVyZTsKICAgICBUZXh0dXJlTWFwIG1fdGV4dHVyZXM7CisgICAgdW5z
aWduZWQgbV9sYXN0V2FpdGVkU3luY1BvaW50OworICAgIFBlbmRpbmdQcm9kdWNlVGV4dHVyZUxp
c3QgbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzOwogfTsKIAogY2xhc3MgQ0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHB1YmxpYzoKICAgICBDQ1Jlc291cmNl
UHJvdmlkZXJUZXN0KCkKLSAgICAgICAgOiBtX2NvbnRleHQoRmFrZVdlYkNvbXBvc2l0b3JPdXRw
dXRTdXJmYWNlOjpjcmVhdGUoUmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OmNyZWF0ZSgpKSkKKyAg
ICAgICAgOiBtX3NoYXJlZERhdGEoQ29udGV4dFNoYXJlZERhdGE6OmNyZWF0ZSgpKQorICAgICAg
ICAsIG1fY29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0ZShSZXNv
dXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKG1fc2hhcmVkRGF0YS5nZXQoKSkpKQogICAgICAg
ICAsIG1fcmVzb3VyY2VQcm92aWRlcihDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShtX2NvbnRl
eHQuZ2V0KCkpKQogICAgIHsKICAgICB9CkBAIC0yMDYsNiArMzA4LDcgQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAg
T3duUHRyPENvbnRleHRTaGFyZWREYXRhPiBtX3NoYXJlZERhdGE7CiAgICAgT3duUHRyPENDR3Jh
cGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4g
bV9yZXNvdXJjZVByb3ZpZGVyOwogfTsKQEAgLTIxNSw3ICszMTgsNyBAQCBURVNUX0YoQ0NSZXNv
dXJjZVByb3ZpZGVyVGVzdCwgQmFzaWMpCiAgICAgSW50U2l6ZSBzaXplKDEsIDEpOwogICAgIFdH
QzNEZW51bSBmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICBpbnQgcG9vbCA9
IDE7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IFJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojp0ZXh0
dXJlU2l6ZShzaXplLCBmb3JtYXQpOworICAgIHNpemVfdCBwaXhlbFNpemUgPSB0ZXh0dXJlU2l6
ZShzaXplLCBmb3JtYXQpOwogICAgIEFTU0VSVF9FUSg0VSwgcGl4ZWxTaXplKTsKIAogICAgIEND
UmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3Jl
YXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1
cmVVc2FnZUFueSk7CkBAIC0yNTYsNyArMzU5LDcgQEAgVEVTVF9GKENDUmVzb3VyY2VQcm92aWRl
clRlc3QsIFVwbG9hZCkKICAgICBJbnRTaXplIHNpemUoMiwgMik7CiAgICAgV0dDM0RlbnVtIGZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwogICAgIGludCBwb29sID0gMTsKLSAgICBz
aXplX3QgcGl4ZWxTaXplID0gUmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OnRleHR1cmVTaXplKHNp
emUsIGZvcm1hdCk7CisgICAgc2l6ZV90IHBpeGVsU2l6ZSA9IHRleHR1cmVTaXplKHNpemUsIGZv
cm1hdCk7CiAgICAgQVNTRVJUX0VRKDE2VSwgcGl4ZWxTaXplKTsKIAogICAgIENDUmVzb3VyY2VQ
cm92aWRlcjo6UmVzb3VyY2VJZCBpZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3Vy
Y2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFu
eSk7CkBAIC0zMDMsNCArNDA2LDk3IEBAIFRFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LCBV
cGxvYWQpCiAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZShpZCk7CiB9CiAK
K1RFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LCBUcmFuc2ZlclJlc291cmNlcykKK3sKKyAg
ICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNoaWxkQ29udGV4dChGYWtlV2ViQ29tcG9zaXRv
ck91dHB1dFN1cmZhY2U6OmNyZWF0ZShSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKG1f
c2hhcmVkRGF0YS5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBjaGls
ZFJlc291cmNlUHJvdmlkZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoY2hpbGRDb250ZXh0
LmdldCgpKSk7CisKKyAgICBJbnRTaXplIHNpemUoMSwgMSk7CisgICAgV0dDM0RlbnVtIGZvcm1h
dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgIGludCBwb29sID0gMTsKKyAgICBzaXpl
X3QgcGl4ZWxTaXplID0gdGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KTsKKyAgICBBU1NFUlRfRVEo
NFUsIHBpeGVsU2l6ZSk7CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgaWQx
ID0gY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShwb29sLCBzaXplLCBmb3Jt
YXQsIENDUmVzb3VyY2VQcm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsKKyAgICB1aW50OF90IGRh
dGExWzRdID0gezEsIDIsIDMsIDR9OworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBzaXpl
KTsKKyAgICBjaGlsZFJlc291cmNlUHJvdmlkZXItPnVwbG9hZChpZDEsIGRhdGExLCByZWN0LCBy
ZWN0LCByZWN0KTsKKworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZDIgPSBj
aGlsZFJlc291cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKHBvb2wsIHNpemUsIGZvcm1hdCwg
Q0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOworICAgIHVpbnQ4X3QgZGF0YTJb
NF0gPSB7NSwgNSwgNSwgNX07CisgICAgY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT51cGxvYWQoaWQy
LCBkYXRhMiwgcmVjdCwgcmVjdCwgcmVjdCk7CisKKyAgICBpbnQgY2hpbGRQb29sID0gMjsKKyAg
ICBpbnQgY2hpbGRJZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlQ2hpbGQoY2hpbGRQb29s
KTsKKworICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgc29tZSByZXNvdXJjZXMgdG8gdGhlIHBh
cmVudC4KKyAgICAgICAgVmVjdG9yPENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZD4gcmVz
b3VyY2VJZHNUb1RyYW5zZmVyOworICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5k
KGlkMSk7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQoaWQyKTsKKyAgICAg
ICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdCA9IGNo
aWxkUmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb1BhcmVudChyZXNvdXJjZUlkc1RvVHJh
bnNmZXIpOworICAgICAgICBFWFBFQ1RfTkUoMHUsIGxpc3Quc3luY1BvaW50KTsKKyAgICAgICAg
RVhQRUNUX0VRKDJ1LCBsaXN0LnJlc291cmNlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShjaGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDEpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQyKSk7
CisgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci0+cmVjZWl2ZUZyb21DaGlsZChjaGlsZElkLCBs
aXN0KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcmVzb3VyY2VQcm92aWRlci0+bnVt
UmVzb3VyY2VzKCkpOworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCByZXNv
dXJjZU1hcCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Z2V0Q2hpbGRUb1BhcmVudE1hcChjaGlsZElk
KTsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFwcGVkSWQxID0gcmVzb3Vy
Y2VNYXAuZ2V0KGlkMSk7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hcHBl
ZElkMiA9IHJlc291cmNlTWFwLmdldChpZDIpOworICAgIEVYUEVDVF9ORSgwdSwgbWFwcGVkSWQx
KTsKKyAgICBFWFBFQ1RfTkUoMHUsIG1hcHBlZElkMik7CisgICAgRVhQRUNUX0ZBTFNFKG1fcmVz
b3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkpOworICAgIEVYUEVDVF9GQUxTRSht
X3Jlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDIpKTsKKworICAgIHVpbnQ4X3Qg
cmVzdWx0WzRdID0gezB9OworICAgIGdldFJlc291cmNlUGl4ZWxzKG1hcHBlZElkMSwgc2l6ZSwg
Zm9ybWF0LCByZXN1bHQpOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0YTEsIHJlc3VsdCwg
cGl4ZWxTaXplKSk7CisKKyAgICBnZXRSZXNvdXJjZVBpeGVscyhtYXBwZWRJZDIsIHNpemUsIGZv
cm1hdCwgcmVzdWx0KTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGRhdGEyLCByZXN1bHQsIHBp
eGVsU2l6ZSkpOworCisgICAgeworICAgICAgICAvLyBDaGVjayB0aGF0IHRyYW5zZmVyaW5nIGFn
YWluIHRoZSBzYW1lIHJlc291cmNlIGZyb20gdGhlIGNoaWxkIHRvIHRoZQorICAgICAgICAvLyBw
YXJlbnQgaXMgYSBub29wLgorICAgICAgICBWZWN0b3I8Q0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNv
dXJjZUlkPiByZXNvdXJjZUlkc1RvVHJhbnNmZXI7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFu
c2Zlci5hcHBlbmQoaWQxKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFi
bGVSZXNvdXJjZUxpc3QgbGlzdCA9IGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRU
b1BhcmVudChyZXNvdXJjZUlkc1RvVHJhbnNmZXIpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGxp
c3Quc3luY1BvaW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBsaXN0LnJlc291cmNlcy5zaXpl
KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgcmVzb3VyY2VzIGJhY2sg
ZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBjaGlsZC4KKyAgICAgICAgVmVjdG9yPENDUmVzb3VyY2VQ
cm92aWRlcjo6UmVzb3VyY2VJZD4gcmVzb3VyY2VJZHNUb1RyYW5zZmVyOworICAgICAgICByZXNv
dXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKG1hcHBlZElkMSk7CisgICAgICAgIHJlc291cmNlSWRz
VG9UcmFuc2Zlci5hcHBlbmQobWFwcGVkSWQyKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdCA9IG1fcmVzb3VyY2VQcm92aWRlci0+cHJl
cGFyZVNlbmRUb0NoaWxkKGNoaWxkSWQsIHJlc291cmNlSWRzVG9UcmFuc2Zlcik7CisgICAgICAg
IEVYUEVDVF9ORSgwdSwgbGlzdC5zeW5jUG9pbnQpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIGxp
c3QucmVzb3VyY2VzLnNpemUoKSk7CisgICAgICAgIGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cmVj
ZWl2ZUZyb21QYXJlbnQobGlzdCk7CisgICAgfQorCisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkUmVz
b3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkpOworICAgIEVYUEVDVF9GQUxTRShj
aGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDIpKTsKKworICAgIFJlc291
cmNlUHJvdmlkZXJDb250ZXh0KiBjaGlsZENvbnRleHQzRCA9IHN0YXRpY19jYXN0PFJlc291cmNl
UHJvdmlkZXJDb250ZXh0Kj4oY2hpbGRDb250ZXh0LT5jb250ZXh0M0QoKSk7CisgICAgeworICAg
ICAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgbG9jayhjaGlsZFJlc291cmNlUHJvdmlk
ZXIuZ2V0KCksIGlkMSk7CisgICAgICAgIEFTU0VSVF9ORSgwVSwgbG9jay50ZXh0dXJlSWQoKSk7
CisgICAgICAgIGNoaWxkQ29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbG9jay50ZXh0dXJlSWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4dDNELT5n
ZXRQaXhlbHMoc2l6ZSwgZm9ybWF0LCByZXN1bHQpOworICAgICAgICBFWFBFQ1RfRVEoMCwgbWVt
Y21wKGRhdGExLCByZXN1bHQsIHBpeGVsU2l6ZSkpOworICAgIH0KKyAgICB7CisgICAgICAgIEND
U2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBsb2NrKGNoaWxkUmVzb3VyY2VQcm92aWRlci5nZXQo
KSwgaWQyKTsKKyAgICAgICAgQVNTRVJUX05FKDBVLCBsb2NrLnRleHR1cmVJZCgpKTsKKyAgICAg
ICAgY2hpbGRDb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBsb2NrLnRleHR1cmVJZCgpKTsKKyAgICAgICAgY2hpbGRDb250ZXh0M0QtPmdldFBpeGVs
cyhzaXplLCBmb3JtYXQsIHJlc3VsdCk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0
YTIsIHJlc3VsdCwgcGl4ZWxTaXplKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158691</attachid>
            <date>2012-08-15 19:14:38 -0700</date>
            <delta_ts>2012-08-16 15:51:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93524-20120815191404.patch</filename>
            <type>text/plain</type>
            <size>31238</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRmNmRmM2NkNGZiZmFi
NjUxODkzMzIzNWQyZTZhMGI2MzE2MjU4OC4uNTE4ZmU4NDllZDZhMTMxYmFhYTc4N2YwYjEzOWQx
M2U2YzFlMzg1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTA4ICBBbnRv
aW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFk
ZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRo
b2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAg
ICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRl
c3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6Omdl
dENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChNYWlsYm94KToK
KyAgICAgICAgKFRyYW5zZmVyYWJsZVJlc291cmNlKToKKyAgICAgICAgKFRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoUmVz
b3VyY2UpOgorICAgICAgICAoQ2hpbGQpOgorCiAyMDEyLTA4LTE0ICBNaWtoYWlsIFBvemRueWFr
b3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFdlYktpdFRlc3RS
dW5uZXIgbmVlZHMgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyOGJlNGJiMzBmYTYzNjVmYzU2MWQ5ODhi
Y2RmZmJhYWM3NDcxNjVlLi5kNTBjNDM5NTNmNWI5MjQ5ODY2MDQxOTkzY2YxODFjYjU1ZGNhYmZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA4LTA4
ICBBbnRvaW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEFkZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRk
cyBtZXRob2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAor
ICAgICAgICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFk
ZGVkIHRlc3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHRlc3RzL0ND
UmVzb3VyY2VQcm92aWRlclRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0ZXh0dXJlU2l6ZSk6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0dXJlOjpUZXh0dXJlKToK
KyAgICAgICAgKFRleHR1cmUpOgorICAgICAgICAoQ29udGV4dFNoYXJlZERhdGEpOgorICAgICAg
ICAoV2ViS2l0OjpDb250ZXh0U2hhcmVkRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
Q29udGV4dFNoYXJlZERhdGE6Omluc2VydFN5bmNQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRTaGFyZWREYXRhOjpnZW5NYWlsYm94KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNo
YXJlZERhdGE6OnByb2R1Y2VUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJl
ZERhdGE6OmNvbnN1bWVUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERh
dGE6OkNvbnRleHRTaGFyZWREYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRl
ckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0OjppbnNlcnRTeW5jUG9pbnQp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6d2FpdFN5bmNQb2lu
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0OjpnZW5NYWlsYm94
Q0hST01JVU0pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6cHJv
ZHVjZVRleHR1cmVDSFJPTUlVTSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJD
b250ZXh0Ojpjb25zdW1lVGV4dHVyZUNIUk9NSVVNKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VQcm92aWRlckNvbnRleHQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0KToKKyAgICAgICAgKFBl
bmRpbmdQcm9kdWNlVGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OkNDUmVzb3VyY2VQcm92aWRl
clRlc3Q6OkNDUmVzb3VyY2VQcm92aWRlclRlc3QpOgorICAgICAgICAoQ0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdCk6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisKIDIwMTItMDgtMTQgIElhaW4g
TWVycmljayAgPGh1c2t5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBh
IHRlc3QgdG8gV2ViRnJhbWVUZXN0IGZvciBzZWxlY3RSYW5nZSBhbmQgdmlzaWJsZVBvc2l0aW9u
Rm9yV2luZG93UG9pbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcAppbmRl
eCBhMGJkMzdjYzhkNWFlODNhMDgzYjkxZGNkNzExYjk5MTk5N2YwZDcwLi45MWJkNGM0Y2ViOWZi
NzQxNGIyM2MzZjMxYzhkZjIzN2IzMDZmOTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQ
cm92aWRlci5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6Omlu
VXNlQnlDb25zdW1lcihSZXNvdXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CiAgICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmlu
ZChpZCk7CiAgICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsKLSAgICByZXR1cm4g
ISFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQ7CisgICAgcmV0dXJuICEhaXQtPnNlY29uZC5s
b2NrRm9yUmVhZENvdW50IHx8IGl0LT5zZWNvbmQuZXhwb3J0ZWQ7CiB9CiAKIENDUmVzb3VyY2VQ
cm92aWRlcjo6UmVzb3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGlu
dCBwb29sLCBjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2Fn
ZUhpbnQgaGludCkKQEAgLTEwOSw3ICsxMDksNyBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291
cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwgY29ucwog
ICAgIH0gZWxzZQogICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCAwLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKSk7CiAgICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2UgcmVz
b3VyY2UgPSB7dGV4dHVyZUlkLCBwb29sLCAwLCBmYWxzZSwgZmFsc2UsIHNpemUsIGZvcm1hdH07
CisgICAgUmVzb3VyY2UgcmVzb3VyY2UodGV4dHVyZUlkLCBwb29sLCBzaXplLCBmb3JtYXQpOwog
ICAgIG1fcmVzb3VyY2VzLmFkZChpZCwgcmVzb3VyY2UpOwogICAgIHJldHVybiBpZDsKIH0KQEAg
LTExOCw3ICsxMTgsOSBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZUZyb21FeHRlcm5hbFRleAogewogICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7
Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4dHVyZUlkLCAwLCAwLCBmYWxzZSwgdHJ1ZSwg
SW50U2l6ZSgpLCAwfTsKKyAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICByZXNvdXJjZS5nbElk
ID0gdGV4dHVyZUlkOworICAgIHJlc291cmNlLmV4dGVybmFsID0gdHJ1ZTsKICAgICBtX3Jlc291
cmNlcy5hZGQoaWQsIHJlc291cmNlKTsKICAgICByZXR1cm4gaWQ7CiB9CkBAIC0xNDEsMTIgKzE0
MywxMiBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2UoUmVzb3VyY2VJ
ZCBpZCkKIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25lZFJlc291cmNlcyhpbnQg
cG9vbCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIFZlY3Rv
cjxSZXNvdXJjZUlkPiB0b0RlbGV0ZTsKKyAgICBSZXNvdXJjZUlkQXJyYXkgdG9EZWxldGU7CiAg
ICAgZm9yIChSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBtX3Jlc291cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoaXQtPnNlY29uZC5w
b29sID09IHBvb2wgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpCiAgICAgICAgICAgICB0b0RlbGV0
ZS5hcHBlbmQoaXQtPmZpcnN0KTsKICAgICB9Ci0gICAgZm9yIChWZWN0b3I8UmVzb3VyY2VJZD46
Oml0ZXJhdG9yIGl0ID0gdG9EZWxldGUuYmVnaW4oKTsgaXQgIT0gdG9EZWxldGUuZW5kKCk7ICsr
aXQpCisgICAgZm9yIChSZXNvdXJjZUlkQXJyYXk6Oml0ZXJhdG9yIGl0ID0gdG9EZWxldGUuYmVn
aW4oKTsgaXQgIT0gdG9EZWxldGUuZW5kKCk7ICsraXQpCiAgICAgICAgIGRlbGV0ZVJlc291cmNl
KCppdCk7CiB9CiAKQEAgLTIyOCw2ICsyMzAsNyBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6
dW5sb2NrRm9yUmVhZChSZXNvdXJjZUlkIGlkKQogQ0NSZXNvdXJjZVByb3ZpZGVyOjpDQ1Jlc291
cmNlUHJvdmlkZXIoQ0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKICAgICAsIG1fbmV4dElkKDEpCisgICAgLCBtX25leHRDaGlsZCgxKQogICAgICwg
bV91c2VUZXh0dXJlU3RvcmFnZUV4dChmYWxzZSkKICAgICAsIG1fdXNlVGV4dHVyZVVzYWdlSGlu
dChmYWxzZSkKICAgICAsIG1fdXNlU2hhbGxvd0ZsdXNoKGZhbHNlKQpAQCAtMjY0LDQgKzI2Nywx
NTAgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OmluaXRpYWxpemUoKQogICAgIHJldHVybiB0
cnVlOwogfQogCitpbnQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVDaGlsZChpbnQgcG9vbCkK
K3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIENoaWxkIGNoaWxk
SW5mbzsKKyAgICBjaGlsZEluZm8ucG9vbCA9IHBvb2w7CisgICAgaW50IGNoaWxkID0gbV9uZXh0
Q2hpbGQrKzsKKyAgICBtX2NoaWxkcmVuLmFkZChjaGlsZCwgY2hpbGRJbmZvKTsKKyAgICByZXR1
cm4gY2hpbGQ7Cit9CisKK3ZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZXN0cm95Q2hpbGQoaW50
IGNoaWxkKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQ2hp
bGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKTsKKyAgICBBU1NFUlQo
aXQgIT0gbV9jaGlsZHJlbi5lbmQoKSk7CisgICAgZGVsZXRlT3duZWRSZXNvdXJjZXMoaXQtPnNl
Y29uZC5wb29sKTsKKyAgICBtX2NoaWxkcmVuLnJlbW92ZShpdCk7Cit9CisKK2NvbnN0IENDUmVz
b3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCYgQ0NSZXNvdXJjZVByb3ZpZGVyOjpnZXRDaGls
ZFRvUGFyZW50TWFwKGludCBjaGlsZCkgY29uc3QKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworICAgIENoaWxkTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY2hpbGRy
ZW4uZmluZChjaGlsZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fY2hpbGRyZW4uZW5kKCkpOworICAg
IHJldHVybiBpdC0+c2Vjb25kLmNoaWxkVG9QYXJlbnRNYXA7Cit9CisKK0NDUmVzb3VyY2VQcm92
aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFy
ZVNlbmRUb1BhcmVudChjb25zdCBSZXNvdXJjZUlkQXJyYXkmIHJlc291cmNlcykKK3sKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFRyYW5zZmVyYWJsZVJlc291cmNl
TGlzdCBsaXN0OworICAgIGxpc3Quc3luY1BvaW50ID0gMDsKKyAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRl
eHQzZCB8fCAhY29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcuCisgICAg
ICAgIHJldHVybiBsaXN0OworICAgIH0KKyAgICBmb3IgKFJlc291cmNlSWRBcnJheTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIFRyYW5zZmVyYWJsZVJlc291cmNlIHJlc291cmNlOworICAgICAgICBp
ZiAodHJhbnNmZXJSZXNvdXJjZShjb250ZXh0M2QsICppdCwgJnJlc291cmNlKSkgeworICAgICAg
ICAgICAgbV9yZXNvdXJjZXMuZmluZCgqaXQpLT5zZWNvbmQuZXhwb3J0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgbGlzdC5yZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAobGlzdC5yZXNvdXJjZXMuc2l6ZSgpKQorICAgICAgICBsaXN0LnN5bmNQb2lu
dCA9IGNvbnRleHQzZC0+aW5zZXJ0U3luY1BvaW50KCk7CisgICAgcmV0dXJuIGxpc3Q7Cit9CisK
K0NDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3VyY2VQ
cm92aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKGludCBjaGlsZCwgY29uc3QgUmVzb3VyY2VJZEFy
cmF5JiByZXNvdXJjZXMpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsK
KyAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdDsKKyAgICBsaXN0LnN5bmNQb2ludCA9
IDA7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29u
dGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRleHQzZC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisgICAgQ2hp
bGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnNlY29uZDsKKyAgICBmb3Ig
KFJlc291cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsg
aXQgIT0gcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRyYW5zZmVyYWJsZVJlc291
cmNlIHJlc291cmNlOworICAgICAgICBpZiAoIXRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAq
aXQsICZyZXNvdXJjZSkpCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmVzb3VyY2UuaWQgPSBjaGlsZEluZm8ucGFyZW50VG9DaGlsZE1hcC5nZXQoKml0KTsKKyAg
ICAgICAgY2hpbGRJbmZvLnBhcmVudFRvQ2hpbGRNYXAucmVtb3ZlKCppdCk7CisgICAgICAgIGNo
aWxkSW5mby5jaGlsZFRvUGFyZW50TWFwLnJlbW92ZShyZXNvdXJjZS5pZCk7CisgICAgICAgIGxp
c3QucmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZSk7CisgICAgICAgIGRlbGV0ZVJlc291cmNlKCpp
dCk7CisgICAgfQorICAgIGlmIChsaXN0LnJlc291cmNlcy5zaXplKCkpCisgICAgICAgIGxpc3Qu
c3luY1BvaW50ID0gY29udGV4dDNkLT5pbnNlcnRTeW5jUG9pbnQoKTsKKyAgICByZXR1cm4gbGlz
dDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tQ2hpbGQoaW50IGNo
aWxkLCBjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJlc291cmNlcykKK3sKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dDNk
IHx8ICFjb250ZXh0M2QtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAocmVzb3VyY2VzLnN5bmNQb2ludCkgeworICAgICAgICAv
LyBOT1RFOiBJZiB0aGUgcGFyZW50IGlzIGEgYnJvd3NlciBhbmQgdGhlIGNoaWxkIGEgcmVuZGVy
ZXIsIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gaXMgbm90IHN1cHBvc2VkIHRvIGhhdmUgaXRzIGNv
bnRleHQgd2FpdCwgYmVjYXVzZSB0aGF0IGNvdWxkIGluZHVjZQorICAgICAgICAvLyBkZWFkbG9j
a3MgYW5kL29yIHNlY3VyaXR5IGlzc3Vlcy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IK
KyAgICAgICAgLy8gd2FpdGluZyBhc3luY2hyb25vdXNseSwgYW5kIHJlc2V0dGluZyBzeW5jUG9p
bnQgYmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAgICAgICAgLy8gSG93ZXZlciBpZiB0aGUgcGFyZW50
IGlzIGEgcmVuZGVyZXIgKGUuZy4gYnJvd3NlciB0YWcpLCBpdCBtYXkgYmUgb2sKKyAgICAgICAg
Ly8gKGFuZCBpcyBzaW1wbGVyKSB0byB3YWl0LgorICAgICAgICBHTEMoY29udGV4dDNkLCBjb250
ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOworICAgIH0KKyAgICBD
aGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKS0+c2Vjb25kOworICAgIGZv
ciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNv
dXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJjZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOworICAgICAgICBHTEMoY29udGV4
dDNkLCB0ZXh0dXJlSWQgPSBjb250ZXh0M2QtPmNyZWF0ZVRleHR1cmUoKSk7CisgICAgICAgIEdM
Qyhjb250ZXh0M2QsIGNvbnRleHQzZC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2Qt
PmNvbnN1bWVUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGl0
LT5tYWlsYm94Lm5hbWUpKTsKKyAgICAgICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Cisg
ICAgICAgIFJlc291cmNlIHJlc291cmNlKHRleHR1cmVJZCwgY2hpbGRJbmZvLnBvb2wsIGl0LT5z
aXplLCBpdC0+Zm9ybWF0KTsKKyAgICAgICAgbV9yZXNvdXJjZXMuYWRkKGlkLCByZXNvdXJjZSk7
CisgICAgICAgIG1fbWFpbGJveGVzLmFwcGVuZChpdC0+bWFpbGJveCk7CisgICAgICAgIGNoaWxk
SW5mby5wYXJlbnRUb0NoaWxkTWFwLmFkZChpZCwgaXQtPmlkKTsKKyAgICAgICAgY2hpbGRJbmZv
LmNoaWxkVG9QYXJlbnRNYXAuYWRkKGl0LT5pZCwgaWQpOworICAgIH0KK30KKwordm9pZCBDQ1Jl
c291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KGNvbnN0IFRyYW5zZmVyYWJsZVJlc291
cmNlTGlzdCYgcmVzb3VyY2VzKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29u
dGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRleHQzZC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNv
ZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChyZXNv
dXJjZXMuc3luY1BvaW50KQorICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPndhaXRT
eW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOworICAgIGZvciAoVmVjdG9yPFRyYW5zZmVy
YWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMucmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
UmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZmluZChpdC0+aWQpLT5zZWNvbmQ7Cisg
ICAgICAgIEFTU0VSVChyZXNvdXJjZS5leHBvcnRlZCk7CisgICAgICAgIHJlc291cmNlLmV4cG9y
dGVkID0gZmFsc2U7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHJlc291cmNlLmdsSWQpKTsKKyAgICAg
ICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5jb25zdW1lVGV4dHVyZUNIUk9NSVVNKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+bWFpbGJveC5uYW1lKSk7CisgICAgICAgIG1f
bWFpbGJveGVzLmFwcGVuZChpdC0+bWFpbGJveCk7CisgICAgfQorfQorCitib29sIENDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZShXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgUmVzb3VyY2VJZCBpZCwgVHJhbnNmZXJhYmxlUmVzb3VyY2UqIHJlc291cmNlKQoreworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgUmVzb3VyY2VNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ICE9IG1f
cmVzb3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZvcldyaXRlICYmICFpdC0+c2Vj
b25kLmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpOworICAgIGlmIChp
dC0+c2Vjb25kLmV4cG9ydGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzb3VyY2Ut
PmlkID0gaWQ7CisgICAgcmVzb3VyY2UtPmZvcm1hdCA9IGl0LT5zZWNvbmQuZm9ybWF0OworICAg
IHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5zaXplOworICAgIGlmICghbV9tYWlsYm94ZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXNvdXJjZS0+bWFpbGJveCA9IG1fbWFpbGJveGVzLnRha2VG
aXJzdCgpOworICAgIGVsc2UKKyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmdlbk1haWxi
b3hDSFJPTUlVTShyZXNvdXJjZS0+bWFpbGJveC5uYW1lKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+c2Vj
b25kLmdsSWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+cHJvZHVjZVRleHR1cmVDSFJP
TUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVzb3VyY2UtPm1haWxib3gubmFt
ZSkpOworICAgIHJldHVybiB0cnVlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92
aWRlci5oCmluZGV4IGFkZDkwOWU1YmZlYTUwMDc1ZjY3NjIyNzlkNjU4OWIzMjMxYzBlMjUuLjVj
MjdhZmIwZDhiZTgxOGI3ODUzZWUzNmYxZmQ1MThjMDM4ZDQ0MGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVzb3VyY2VQcm92aWRlci5oCkBAIC0zMCwxMSArMzAsMTMgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJjYy9DQ0dyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdl
YkdyYXBoaWNzQ29udGV4dDNEOwpAQCAtNTMsNyArNTUsMjMgQEAgY2xhc3MgQ0NSZXNvdXJjZVBy
b3ZpZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Jlc291cmNlUHJvdmlkZXIpOwog
cHVibGljOgogICAgIHR5cGVkZWYgdW5zaWduZWQgUmVzb3VyY2VJZDsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxSZXNvdXJjZUlkPiBSZXNvdXJjZUlkQXJyYXk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJl
c291cmNlSWQsIFJlc291cmNlSWQ+IFJlc291cmNlSWRNYXA7CiAgICAgZW51bSBUZXh0dXJlVXNh
Z2VIaW50IHsgVGV4dHVyZVVzYWdlQW55LCBUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZlciB9OworICAg
IHN0cnVjdCBNYWlsYm94IHsKKyAgICAgICAgR0MzRGJ5dGUgbmFtZVs2NF07CisgICAgfTsKKyAg
ICBzdHJ1Y3QgVHJhbnNmZXJhYmxlUmVzb3VyY2UgeworICAgICAgICB1bnNpZ25lZCBpZDsKKyAg
ICAgICAgR0MzRGVudW0gZm9ybWF0OworICAgICAgICBJbnRTaXplIHNpemU7CisgICAgICAgIE1h
aWxib3ggbWFpbGJveDsKKyAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPFRyYW5zZmVyYWJsZVJl
c291cmNlPiBUcmFuc2ZlcmFibGVSZXNvdXJjZUFycmF5OworICAgIHN0cnVjdCBUcmFuc2ZlcmFi
bGVSZXNvdXJjZUxpc3QgeworICAgICAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZUFycmF5IHJlc291
cmNlczsKKyAgICAgICAgdW5zaWduZWQgc3luY1BvaW50OworICAgIH07CiAKICAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IGNyZWF0ZShDQ0dyYXBoaWNzQ29udGV4dCop
OwogCkBAIC05MCwyMCArMTA4LDgzIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIHNoYWxsb3cgZmx1c2ggb2NjdXJyZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICBib29sIHNo
YWxsb3dGbHVzaElmU3VwcG9ydGVkKCk7CiAKKyAgICAvLyBDcmVhdGVzIGFjY291bnRpbmcgZm9y
IGEgY2hpbGQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBhIHBvb2wuIFJlc291cmNlcworICAgIC8v
IHRyYW5zZmVyZWQgZnJvbSB0aGF0IGNoaWxkIHdpbGwgZ28gdG8gdGhhdCBwb29sLiBSZXR1cm5z
IGEgY2hpbGQgSUQuCisgICAgaW50IGNyZWF0ZUNoaWxkKGludCBwb29sKTsKKworICAgIC8vIERl
c3Ryb3lzIGFjY291bnRpbmcgZm9yIHRoZSBjaGlsZCwgZGVsZXRpbmcgYWxsIHJlc291cmNlcyBm
cm9tIHRoYXQgcG9vbC4KKyAgICB2b2lkIGRlc3Ryb3lDaGlsZChpbnQgY2hpbGQpOworCisgICAg
Ly8gR2V0cyB0aGUgY2hpbGQtPnBhcmVudCByZXNvdXJjZSBJRCBtYXAuCisgICAgY29uc3QgUmVz
b3VyY2VJZE1hcCYgZ2V0Q2hpbGRUb1BhcmVudE1hcChpbnQgY2hpbGQpIGNvbnN0OworCisgICAg
Ly8gUHJlcGFyZXMgcmVzb3VyY2VzIHRvIGJlIHRyYW5zZmVyZWQgdG8gdGhlIHBhcmVudCwgbW92
aW5nIHRoZW0gdG8KKyAgICAvLyBtYWlsYm94ZXMgYW5kIHNlcmlhbGl6aW5nIG1ldGEtZGF0YSBp
bnRvIFRyYW5zZmVyYWJsZVJlc291cmNlcy4KKyAgICAvLyBSZXNvdXJjZXMgYXJlIG5vdCByZW1v
dmVkIGZyb20gdGhlIENDUmVzb3VyY2VQcm92aWRlciwgYnV0IGFyZSBtYXJrZXMgYXMKKyAgICAv
LyAiaW4gdXNlIi4KKyAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgcHJlcGFyZVNlbmRUb1Bh
cmVudChjb25zdCBSZXNvdXJjZUlkQXJyYXkmKTsKKworICAgIC8vIFByZXBhcmVzIHJlc291cmNl
cyB0byBiZSB0cmFuc2ZlcmVkIGJhY2sgdG8gdGhlIGNoaWxkLCBtb3ZpbmcgdGhlbSB0bworICAg
IC8vIG1haWxib3hlcyBhbmQgc2VyaWFsaXppbmcgbWV0YS1kYXRhIGludG8gVHJhbnNmZXJhYmxl
UmVzb3VyY2VzLgorICAgIC8vIFJlc291cmNlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBDQ1Jlc291
cmNlUHJvdmlkZXIuIE5vdGU6IHRoZSByZXNvdXJjZSBJRHMKKyAgICAvLyBwYXNzZWQgYXJlIGlu
IHRoZSBwYXJlbnQgbmFtZXNwYWNlIGFuZCB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdGhlIGNoaWxk
CisgICAgLy8gbmFtZXNwYWNlIHdoZW4gcmV0dXJuZWQuCisgICAgVHJhbnNmZXJhYmxlUmVzb3Vy
Y2VMaXN0IHByZXBhcmVTZW5kVG9DaGlsZChpbnQgY2hpbGQsIGNvbnN0IFJlc291cmNlSWRBcnJh
eSYpOworCisgICAgLy8gUmVjZWl2ZXMgcmVzb3VyY2VzIGZyb20gYSBjaGlsZCwgbW92aW5nIHRo
ZW0gZnJvbSBtYWlsYm94ZXMuIFJlc291cmNlIElEcworICAgIC8vIHBhc3NlZCBhcmUgaW4gdGhl
IGNoaWxkIG5hbWVzcGFjZSwgYW5kIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUgcGFyZW50Cisg
ICAgLy8gbmFtZXNwYWNlLCBhZGRlZCB0byB0aGUgY2hpbGQtPnBhcmVudCBtYXAuCisgICAgLy8g
Tk9URTogaWYgdGhlIHN5bmNQb2ludCBmaWxlZCBpbiBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3Qg
aXMgc2V0LCB0aGlzCisgICAgLy8gd2lsbCB3YWl0IG9uIGl0LgorICAgIHZvaWQgcmVjZWl2ZUZy
b21DaGlsZChpbnQgY2hpbGQsIGNvbnN0IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCYpOworCisg
ICAgLy8gUmVjZWl2ZXMgcmVzb3VyY2VzIGZyb20gdGhlIHBhcmVudCwgbW92aW5nIHRoZW0gZnJv
bSBtYWlsYm94ZXMuIFJlc291cmNlIElEcworICAgIC8vIHBhc3NlZCBhcmUgaW4gdGhlIGNoaWxk
IG5hbWVzcGFjZS4KKyAgICAvLyBOT1RFOiBpZiB0aGUgc3luY1BvaW50IGZpbGVkIGluIFRyYW5z
ZmVyYWJsZVJlc291cmNlTGlzdCBpcyBzZXQsIHRoaXMKKyAgICAvLyB3aWxsIHdhaXQgb24gaXQu
CisgICAgdm9pZCByZWNlaXZlRnJvbVBhcmVudChjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxp
c3QmKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NTY29wZWRMb2NrUmVzb3VyY2VG
b3JSZWFkOwogICAgIGZyaWVuZCBjbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlOwog
CiAgICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgUmVzb3VyY2UoKQorICAgICAgICAgICAg
OiBnbElkKDApCisgICAgICAgICAgICAsIHBvb2woMCkKKyAgICAgICAgICAgICwgbG9ja0ZvclJl
YWRDb3VudCgwKQorICAgICAgICAgICAgLCBsb2NrZWRGb3JXcml0ZShmYWxzZSkKKyAgICAgICAg
ICAgICwgZXh0ZXJuYWwoZmFsc2UpCisgICAgICAgICAgICAsIGV4cG9ydGVkKGZhbHNlKQorICAg
ICAgICAgICAgLCBzaXplKCkKKyAgICAgICAgICAgICwgZm9ybWF0KDApCisgICAgICAgIHsgfQor
ICAgICAgICBSZXNvdXJjZSh1bnNpZ25lZCB0ZXh0dXJlSWQsIGludCBwb29sLCBjb25zdCBJbnRT
aXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCisgICAgICAgICAgICA6IGdsSWQodGV4dHVyZUlk
KQorICAgICAgICAgICAgLCBwb29sKHBvb2wpCisgICAgICAgICAgICAsIGxvY2tGb3JSZWFkQ291
bnQoMCkKKyAgICAgICAgICAgICwgbG9ja2VkRm9yV3JpdGUoZmFsc2UpCisgICAgICAgICAgICAs
IGV4dGVybmFsKGZhbHNlKQorICAgICAgICAgICAgLCBleHBvcnRlZChmYWxzZSkKKyAgICAgICAg
ICAgICwgc2l6ZShzaXplKQorICAgICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQorICAgICAgICB7
IH0KICAgICAgICAgdW5zaWduZWQgZ2xJZDsKICAgICAgICAgaW50IHBvb2w7CiAgICAgICAgIGlu
dCBsb2NrRm9yUmVhZENvdW50OwogICAgICAgICBib29sIGxvY2tlZEZvcldyaXRlOwogICAgICAg
ICBib29sIGV4dGVybmFsOworICAgICAgICBib29sIGV4cG9ydGVkOwogICAgICAgICBJbnRTaXpl
IHNpemU7CiAgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAgICB9OwogICAgIHR5cGVkZWYgSGFz
aE1hcDxSZXNvdXJjZUlkLCBSZXNvdXJjZT4gUmVzb3VyY2VNYXA7CisgICAgc3RydWN0IENoaWxk
IHsKKyAgICAgICAgaW50IHBvb2w7CisgICAgICAgIFJlc291cmNlSWRNYXAgY2hpbGRUb1BhcmVu
dE1hcDsKKyAgICAgICAgUmVzb3VyY2VJZE1hcCBwYXJlbnRUb0NoaWxkTWFwOworICAgIH07Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPGludCwgQ2hpbGQ+IENoaWxkTWFwOwogCiAgICAgZXhwbGljaXQg
Q0NSZXNvdXJjZVByb3ZpZGVyKENDR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgYm9vbCBpbml0aWFs
aXplKCk7CkBAIC0xMTYsOSArMTk3LDE1IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbG9ja0Zv
clJlYWQoUmVzb3VyY2VJZCk7CiAgICAgdm9pZCB1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQpOwog
CisgICAgYm9vbCB0cmFuc2ZlclJlc291cmNlKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Qq
LCBSZXNvdXJjZUlkLCBUcmFuc2ZlcmFibGVSZXNvdXJjZSopOworCiAgICAgQ0NHcmFwaGljc0Nv
bnRleHQqIG1fY29udGV4dDsKICAgICBSZXNvdXJjZUlkIG1fbmV4dElkOwogICAgIFJlc291cmNl
TWFwIG1fcmVzb3VyY2VzOworICAgIGludCBtX25leHRDaGlsZDsKKyAgICBDaGlsZE1hcCBtX2No
aWxkcmVuOworCisgICAgRGVxdWU8TWFpbGJveD4gbV9tYWlsYm94ZXM7CiAKICAgICBib29sIG1f
dXNlVGV4dHVyZVN0b3JhZ2VFeHQ7CiAgICAgYm9vbCBtX3VzZVRleHR1cmVVc2FnZUhpbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVzb3VyY2VQcm92aWRl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Jlc291cmNlUHJvdmlk
ZXJUZXN0LmNwcAppbmRleCA0MjI3NzQ1OWFlZTA3NDFhOTZiMjMzYTUyZTNhNjBmODIxYjQ4MGE0
Li5hYzFkMDM0Mjg4MmJiMjRmMGJlYzAxZjJkMTQ4MmQzZTA4MDMzODAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5j
cHAKQEAgLTQyLDkgKzQyLDk4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFj
ZSB7CiAKK3NpemVfdCB0ZXh0dXJlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBXR0MzRGVudW0g
Zm9ybWF0KQoreworICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWwgPSA0OworICAg
IHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDE7CisgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25l
bnQpOworICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogY29tcG9uZW50
c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Cit9CisKK3N0cnVjdCBUZXh0dXJlIHsKKyAg
ICBUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3JtYXQpCisgICAgICAg
IDogc2l6ZShzaXplKQorICAgICAgICAsIGZvcm1hdChmb3JtYXQpCisgICAgICAgICwgZGF0YShh
ZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W3RleHR1cmVTaXplKHNpemUsIGZvcm1hdCldKSkKKyAg
ICB7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplOworICAgIFdHQzNEZW51bSBmb3JtYXQ7Cisg
ICAgT3duQXJyYXlQdHI8dWludDhfdD4gZGF0YTsKK307CisKKy8vIFNoYXJlZCBkYXRhIGJldHdl
ZW4gbXVsdGlwbGUgUmVzb3VyY2VQcm92aWRlckNvbnRleHQuIFRoaXMgY29udGFpbnMgbWFpbGJv
eAorLy8gY29udGVudHMgYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBhYm91dCBzeW5jIHBvaW50cy4K
K2NsYXNzIENvbnRleHRTaGFyZWREYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDb250ZXh0U2hhcmVkRGF0YT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvbnRl
eHRTaGFyZWREYXRhKCkpOyB9CisKKyAgICB1bnNpZ25lZCBpbnNlcnRTeW5jUG9pbnQoKSB7IHJl
dHVybiBtX25leHRTeW5jUG9pbnQrKzsgfQorCisgICAgdm9pZCBnZW5NYWlsYm94KFdHQzNEYnl0
ZSogbWFpbGJveCkKKyAgICB7CisgICAgICAgIG1lbXNldChtYWlsYm94LCAwLCBzaXplb2YoV0dD
M0RieXRlWzY0XSkpOworICAgICAgICBtZW1jcHkobWFpbGJveCwgJm1fbmV4dE1haWxCb3gsIHNp
emVvZihtX25leHRNYWlsQm94KSk7CisgICAgICAgICsrbV9uZXh0TWFpbEJveDsKKyAgICB9CisK
KyAgICB2b2lkIHByb2R1Y2VUZXh0dXJlKGNvbnN0IFdHQzNEYnl0ZSogbWFpbGJveE5hbWUsIHVu
c2lnbmVkIHN5bmNQb2ludCwgUGFzc093blB0cjxUZXh0dXJlPiB0ZXh0dXJlKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgbWFpbGJveCA9IDA7CisgICAgICAgIG1lbWNweSgmbWFpbGJveCwgbWFp
bGJveE5hbWUsIHNpemVvZihtYWlsYm94KSk7CisgICAgICAgIEFTU0VSVChtYWlsYm94ICYmIG1h
aWxib3ggPCBtX25leHRNYWlsQm94KTsKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQobWFpbGJveCwg
dGV4dHVyZSk7CisgICAgICAgIEFTU0VSVChtX3N5bmNQb2ludEZvck1haWxib3guZ2V0KG1haWxi
b3gpIDwgc3luY1BvaW50KTsKKyAgICAgICAgbV9zeW5jUG9pbnRGb3JNYWlsYm94LnNldChtYWls
Ym94LCBzeW5jUG9pbnQpOworICAgIH0KKworICAgIFBhc3NPd25QdHI8VGV4dHVyZT4gY29uc3Vt
ZVRleHR1cmUoY29uc3QgV0dDM0RieXRlKiBtYWlsYm94TmFtZSwgdW5zaWduZWQgc3luY1BvaW50
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFpbGJveCA9IDA7CisgICAgICAgIG1lbWNweSgm
bWFpbGJveCwgbWFpbGJveE5hbWUsIHNpemVvZihtYWlsYm94KSk7CisgICAgICAgIEFTU0VSVCht
YWlsYm94ICYmIG1haWxib3ggPCBtX25leHRNYWlsQm94KTsKKworICAgICAgICAvLyBJZiB0aGUg
bGF0ZXN0IHN5bmMgcG9pbnQgdGhlIGNvbnRleHQgaGFzIHdhaXRlZCBvbiBpcyBiZWZvcmUgdGhl
IHN5bmMKKyAgICAgICAgLy8gcG9pbnQgZm9yIHdoZW4gdGhlIG1haWxib3ggd2FzIHNldCwgcHJl
dGVuZCB3ZSBuZXZlciBzYXcgdGhhdAorICAgICAgICAvLyBwcm9kdWNlVGV4dHVyZS4KKyAgICAg
ICAgaWYgKG1fc3luY1BvaW50Rm9yTWFpbGJveC5nZXQobWFpbGJveCkgPCBzeW5jUG9pbnQpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fdGV4dHVyZXMudGFr
ZShtYWlsYm94KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ29udGV4dFNoYXJlZERhdGEoKQor
ICAgICAgICA6IG1fbmV4dFN5bmNQb2ludCgxKQorICAgICAgICAsIG1fbmV4dE1haWxCb3goMSkK
KyAgICB7IH0KKworICAgIHVuc2lnbmVkIG1fbmV4dFN5bmNQb2ludDsKKyAgICB1bnNpZ25lZCBt
X25leHRNYWlsQm94OworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgT3duUHRyPFRleHR1
cmU+ID4gVGV4dHVyZU1hcDsKKyAgICBUZXh0dXJlTWFwIG1fdGV4dHVyZXM7CisgICAgSGFzaE1h
cDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fc3luY1BvaW50Rm9yTWFpbGJveDsKK307CisKIGNsYXNz
IFJlc291cmNlUHJvdmlkZXJDb250ZXh0IDogcHVibGljIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlc291cmNlUHJv
dmlkZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUmVzb3VyY2VQcm92
aWRlckNvbnRleHQoQXR0cmlidXRlcygpKSk7IH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxSZXNv
dXJjZVByb3ZpZGVyQ29udGV4dD4gY3JlYXRlKENvbnRleHRTaGFyZWREYXRhKiBzaGFyZWREYXRh
KSB7IHJldHVybiBhZG9wdFB0cihuZXcgUmVzb3VyY2VQcm92aWRlckNvbnRleHQoQXR0cmlidXRl
cygpLCBzaGFyZWREYXRhKSk7IH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW5zZXJ0U3luY1Bv
aW50KCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHN5bmNQb2ludCA9IG1fc2hhcmVkRGF0YS0+
aW5zZXJ0U3luY1BvaW50KCk7CisgICAgICAgIC8vIENvbW1pdCB0aGUgcHJvZHVjZVRleHR1cmVD
SFJPTUlVTSBjYWxscyBhdCB0aGlzIHBvaW50LCBzbyB0aGF0CisgICAgICAgIC8vIHRoZXkncmUg
YXNzb2NpYXRlZCB3aXRoIHRoZSBzeW5jIHBvaW50LgorICAgICAgICBmb3IgKFBlbmRpbmdQcm9k
dWNlVGV4dHVyZUxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzLmJl
Z2luKCk7IGl0ICE9IG1fcGVuZGluZ1Byb2R1Y2VUZXh0dXJlcy5lbmQoKTsgKytpdCkKKyAgICAg
ICAgICAgIG1fc2hhcmVkRGF0YS0+cHJvZHVjZVRleHR1cmUoKCppdCktPm1haWxib3gsIHN5bmNQ
b2ludCwgKCppdCktPnRleHR1cmUucmVsZWFzZSgpKTsKKyAgICAgICAgbV9wZW5kaW5nUHJvZHVj
ZVRleHR1cmVzLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBzeW5jUG9pbnQ7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHdhaXRTeW5jUG9pbnQodW5zaWduZWQgc3luY1BvaW50KQorICAgIHsK
KyAgICAgICAgbV9sYXN0V2FpdGVkU3luY1BvaW50ID0gc3RkOjptYXgoc3luY1BvaW50LCBtX2xh
c3RXYWl0ZWRTeW5jUG9pbnQpOworICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVy
ZShXR0MzRGVudW0gdGFyZ2V0LCBXZWJHTElkIHRleHR1cmUpCiAgICAgewpAQCAtMTEzLDYgKzIw
MiwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHNldFBpeGVscyh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBnZW5NYWlsYm94
Q0hST01JVU0oV0dDM0RieXRlKiBtYWlsYm94KSB7IHJldHVybiBtX3NoYXJlZERhdGEtPmdlbk1h
aWxib3gobWFpbGJveCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJvZHVjZVRleHR1cmVDSFJPTUlV
TShXR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBXR0MzRGJ5dGUqIG1haWxib3gpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CisgICAgICAgIEFTU0VSVCh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworCisgICAgICAgIC8vIERlbGF5IG1vdmlu
ZCB0aGUgdGV4dHVyZSBpbnRvIHRoZSBtYWlsYm94IHVudGlsIHRoZSBuZXh0CisgICAgICAgIC8v
IGluc2VydFN5bmNQb2ludCwgc28gdGhhdCBpdCBpcyBub3QgdmlzaWJsZSB0byBvdGhlciBjb250
ZXh0cyB0aGF0CisgICAgICAgIC8vIGhhdmVuJ3Qgd2FpdGVkIG9uIHRoYXQgc3luYyBwb2ludC4K
KyAgICAgICAgT3duUHRyPFBlbmRpbmdQcm9kdWNlVGV4dHVyZT4gcGVuZGluZyA9IGFkb3B0UHRy
KG5ldyBQZW5kaW5nUHJvZHVjZVRleHR1cmUpOworICAgICAgICBtZW1jcHkocGVuZGluZy0+bWFp
bGJveCwgbWFpbGJveCwgc2l6ZW9mKHBlbmRpbmctPm1haWxib3gpKTsKKyAgICAgICAgcGVuZGlu
Zy0+dGV4dHVyZSA9IG1fdGV4dHVyZXMudGFrZShtX2N1cnJlbnRUZXh0dXJlKTsKKyAgICAgICAg
bV90ZXh0dXJlcy5zZXQobV9jdXJyZW50VGV4dHVyZSwgbnVsbHB0cik7CisgICAgICAgIG1fcGVu
ZGluZ1Byb2R1Y2VUZXh0dXJlcy5hcHBlbmQocGVuZGluZy5yZWxlYXNlKCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lVGV4dHVyZUNIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQs
IGNvbnN0IFdHQzNEYnl0ZSogbWFpbGJveCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2N1cnJl
bnRUZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCk7CisgICAgICAgIG1fdGV4dHVyZXMuc2V0KG1fY3VycmVudFRleHR1cmUsIG1f
c2hhcmVkRGF0YS0+Y29uc3VtZVRleHR1cmUobWFpbGJveCwgbV9sYXN0V2FpdGVkU3luY1BvaW50
KSk7CisgICAgfQorCiAgICAgdm9pZCBnZXRQaXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV0dD
M0RlbnVtIGZvcm1hdCwgdWludDhfdCogcGl4ZWxzKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudFRleHR1cmUpOwpAQCAtMTI4LDM0ICsyNDAsMTUgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV90ZXh0dXJlcy5zaXplKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHNpemVfdCB0ZXh0
dXJlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBXR0MzRGVudW0gZm9ybWF0KQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCA9IDQ7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDE7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9ybWF0LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSwgJmNvbXBvbmVudHNQZXJQaXhlbCwgJmJ5dGVzUGVyQ29tcG9uZW50
KTsKLSAgICAgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiBjb21wb25l
bnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKLSAgICB9Ci0KIHByb3RlY3RlZDoKLSAg
ICBleHBsaWNpdCBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dChjb25zdCBBdHRyaWJ1dGVzJiBhdHRy
cykKKyAgICBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dChjb25zdCBBdHRyaWJ1dGVzJiBhdHRycywg
Q29udGV4dFNoYXJlZERhdGEqIHNoYXJlZERhdGEpCiAgICAgICAgIDogQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykKKyAgICAgICAgLCBtX3NoYXJlZERhdGEoc2hhcmVk
RGF0YSkKICAgICAgICAgLCBtX2N1cnJlbnRUZXh0dXJlKDApCisgICAgICAgICwgbV9sYXN0V2Fp
dGVkU3luY1BvaW50KDApCiAgICAgeyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IFRleHR1cmUg
ewotICAgICAgICBUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemVfLCBXR0MzRGVudW0gZm9ybWF0
XykKLSAgICAgICAgICAgIDogc2l6ZShzaXplXykKLSAgICAgICAgICAgICwgZm9ybWF0KGZvcm1h
dF8pCi0gICAgICAgICAgICAsIGRhdGEoYWRvcHRBcnJheVB0cihuZXcgdWludDhfdFt0ZXh0dXJl
U2l6ZShzaXplLCBmb3JtYXQpXSkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIElu
dFNpemUgc2l6ZTsKLSAgICAgICAgV0dDM0RlbnVtIGZvcm1hdDsKLSAgICAgICAgT3duQXJyYXlQ
dHI8dWludDhfdD4gZGF0YTsKLSAgICB9OwotCiAgICAgdm9pZCBhbGxvY2F0ZVRleHR1cmUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgV0dDM0RlbnVtIGZvcm1hdCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2N1cnJlbnRUZXh0dXJlKTsKQEAgLTE4MiwxNCArMjc1LDIzIEBAIHByaXZhdGU6CiAgICAg
fQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkdMSWQsIE93blB0cjxUZXh0dXJlPiA+IFRleHR1
cmVNYXA7CisgICAgc3RydWN0IFBlbmRpbmdQcm9kdWNlVGV4dHVyZSB7CisgICAgICAgIFdHQzNE
Ynl0ZSBtYWlsYm94WzY0XTsKKyAgICAgICAgT3duUHRyPFRleHR1cmU+IHRleHR1cmU7CisgICAg
fTsKKyAgICB0eXBlZGVmIERlcXVlPE93blB0cjxQZW5kaW5nUHJvZHVjZVRleHR1cmU+ID4gUGVu
ZGluZ1Byb2R1Y2VUZXh0dXJlTGlzdDsKKyAgICBDb250ZXh0U2hhcmVkRGF0YSogbV9zaGFyZWRE
YXRhOwogICAgIFdlYkdMSWQgbV9jdXJyZW50VGV4dHVyZTsKICAgICBUZXh0dXJlTWFwIG1fdGV4
dHVyZXM7CisgICAgdW5zaWduZWQgbV9sYXN0V2FpdGVkU3luY1BvaW50OworICAgIFBlbmRpbmdQ
cm9kdWNlVGV4dHVyZUxpc3QgbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzOwogfTsKIAogY2xhc3Mg
Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKIHB1YmxpYzoK
ICAgICBDQ1Jlc291cmNlUHJvdmlkZXJUZXN0KCkKLSAgICAgICAgOiBtX2NvbnRleHQoRmFrZVdl
YkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoUmVzb3VyY2VQcm92aWRlckNvbnRleHQ6
OmNyZWF0ZSgpKSkKKyAgICAgICAgOiBtX3NoYXJlZERhdGEoQ29udGV4dFNoYXJlZERhdGE6OmNy
ZWF0ZSgpKQorICAgICAgICAsIG1fY29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZh
Y2U6OmNyZWF0ZShSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKG1fc2hhcmVkRGF0YS5n
ZXQoKSkpKQogICAgICAgICAsIG1fcmVzb3VyY2VQcm92aWRlcihDQ1Jlc291cmNlUHJvdmlkZXI6
OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQogICAgIHsKICAgICB9CkBAIC0yMDYsNiArMzA4LDcg
QEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7CisgICAgT3duUHRyPENvbnRleHRTaGFyZWREYXRhPiBtX3NoYXJlZERhdGE7CiAg
ICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPENDUmVz
b3VyY2VQcm92aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwogfTsKQEAgLTIxNSw3ICszMTgsNyBA
QCBURVNUX0YoQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCwgQmFzaWMpCiAgICAgSW50U2l6ZSBzaXpl
KDEsIDEpOwogICAgIFdHQzNEZW51bSBmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsK
ICAgICBpbnQgcG9vbCA9IDE7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IFJlc291cmNlUHJvdmlk
ZXJDb250ZXh0Ojp0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOworICAgIHNpemVfdCBwaXhlbFNp
emUgPSB0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOwogICAgIEFTU0VSVF9FUSg0VSwgcGl4ZWxT
aXplKTsKIAogICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZCA9IG1fcmVzb3Vy
Y2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNl
UHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CkBAIC0yNTYsNyArMzU5LDcgQEAgVEVTVF9GKEND
UmVzb3VyY2VQcm92aWRlclRlc3QsIFVwbG9hZCkKICAgICBJbnRTaXplIHNpemUoMiwgMik7CiAg
ICAgV0dDM0RlbnVtIGZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwogICAgIGludCBw
b29sID0gMTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gUmVzb3VyY2VQcm92aWRlckNvbnRleHQ6
OnRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7CisgICAgc2l6ZV90IHBpeGVsU2l6ZSA9IHRleHR1
cmVTaXplKHNpemUsIGZvcm1hdCk7CiAgICAgQVNTRVJUX0VRKDE2VSwgcGl4ZWxTaXplKTsKIAog
ICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZCA9IG1fcmVzb3VyY2VQcm92aWRl
ci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXI6
OlRleHR1cmVVc2FnZUFueSk7CkBAIC0zMDMsNCArNDA2LDk3IEBAIFRFU1RfRihDQ1Jlc291cmNl
UHJvdmlkZXJUZXN0LCBVcGxvYWQpCiAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNv
dXJjZShpZCk7CiB9CiAKK1RFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LCBUcmFuc2ZlclJl
c291cmNlcykKK3sKKyAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IGNoaWxkQ29udGV4dChG
YWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0ZShSZXNvdXJjZVByb3ZpZGVyQ29u
dGV4dDo6Y3JlYXRlKG1fc2hhcmVkRGF0YS5nZXQoKSkpKTsKKyAgICBPd25QdHI8Q0NSZXNvdXJj
ZVByb3ZpZGVyPiBjaGlsZFJlc291cmNlUHJvdmlkZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVh
dGUoY2hpbGRDb250ZXh0LmdldCgpKSk7CisKKyAgICBJbnRTaXplIHNpemUoMSwgMSk7CisgICAg
V0dDM0RlbnVtIGZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgIGludCBwb29s
ID0gMTsKKyAgICBzaXplX3QgcGl4ZWxTaXplID0gdGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KTsK
KyAgICBBU1NFUlRfRVEoNFUsIHBpeGVsU2l6ZSk7CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWQgaWQxID0gY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShw
b29sLCBzaXplLCBmb3JtYXQsIENDUmVzb3VyY2VQcm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsK
KyAgICB1aW50OF90IGRhdGExWzRdID0gezEsIDIsIDMsIDR9OworICAgIEludFJlY3QgcmVjdChJ
bnRQb2ludCgpLCBzaXplKTsKKyAgICBjaGlsZFJlc291cmNlUHJvdmlkZXItPnVwbG9hZChpZDEs
IGRhdGExLCByZWN0LCByZWN0LCByZWN0KTsKKworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBpZDIgPSBjaGlsZFJlc291cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKHBvb2ws
IHNpemUsIGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOworICAg
IHVpbnQ4X3QgZGF0YTJbNF0gPSB7NSwgNSwgNSwgNX07CisgICAgY2hpbGRSZXNvdXJjZVByb3Zp
ZGVyLT51cGxvYWQoaWQyLCBkYXRhMiwgcmVjdCwgcmVjdCwgcmVjdCk7CisKKyAgICBpbnQgY2hp
bGRQb29sID0gMjsKKyAgICBpbnQgY2hpbGRJZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRl
Q2hpbGQoY2hpbGRQb29sKTsKKworICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgc29tZSByZXNv
dXJjZXMgdG8gdGhlIHBhcmVudC4KKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJj
ZUlkQXJyYXkgcmVzb3VyY2VJZHNUb1RyYW5zZmVyOworICAgICAgICByZXNvdXJjZUlkc1RvVHJh
bnNmZXIuYXBwZW5kKGlkMSk7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQo
aWQyKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxp
c3QgbGlzdCA9IGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb1BhcmVudChyZXNv
dXJjZUlkc1RvVHJhbnNmZXIpOworICAgICAgICBFWFBFQ1RfTkUoMHUsIGxpc3Quc3luY1BvaW50
KTsKKyAgICAgICAgRVhQRUNUX0VRKDJ1LCBsaXN0LnJlc291cmNlcy5zaXplKCkpOworICAgICAg
ICBFWFBFQ1RfVFJVRShjaGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDEp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29u
c3VtZXIoaWQyKSk7CisgICAgICAgIG1fcmVzb3VyY2VQcm92aWRlci0+cmVjZWl2ZUZyb21DaGls
ZChjaGlsZElkLCBsaXN0KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcmVzb3VyY2VQ
cm92aWRlci0+bnVtUmVzb3VyY2VzKCkpOworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3Vy
Y2VJZE1hcCByZXNvdXJjZU1hcCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Z2V0Q2hpbGRUb1BhcmVu
dE1hcChjaGlsZElkKTsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFwcGVk
SWQxID0gcmVzb3VyY2VNYXAuZ2V0KGlkMSk7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNv
dXJjZUlkIG1hcHBlZElkMiA9IHJlc291cmNlTWFwLmdldChpZDIpOworICAgIEVYUEVDVF9ORSgw
dSwgbWFwcGVkSWQxKTsKKyAgICBFWFBFQ1RfTkUoMHUsIG1hcHBlZElkMik7CisgICAgRVhQRUNU
X0ZBTFNFKG1fcmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkpOworICAgIEVY
UEVDVF9GQUxTRShtX3Jlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDIpKTsKKwor
ICAgIHVpbnQ4X3QgcmVzdWx0WzRdID0gezB9OworICAgIGdldFJlc291cmNlUGl4ZWxzKG1hcHBl
ZElkMSwgc2l6ZSwgZm9ybWF0LCByZXN1bHQpOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0
YTEsIHJlc3VsdCwgcGl4ZWxTaXplKSk7CisKKyAgICBnZXRSZXNvdXJjZVBpeGVscyhtYXBwZWRJ
ZDIsIHNpemUsIGZvcm1hdCwgcmVzdWx0KTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGRhdGEy
LCByZXN1bHQsIHBpeGVsU2l6ZSkpOworCisgICAgeworICAgICAgICAvLyBDaGVjayB0aGF0IHRy
YW5zZmVyaW5nIGFnYWluIHRoZSBzYW1lIHJlc291cmNlIGZyb20gdGhlIGNoaWxkIHRvIHRoZQor
ICAgICAgICAvLyBwYXJlbnQgaXMgYSBub29wLgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWRBcnJheSByZXNvdXJjZUlkc1RvVHJhbnNmZXI7CisgICAgICAgIHJlc291cmNl
SWRzVG9UcmFuc2Zlci5hcHBlbmQoaWQxKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpU
cmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdCA9IGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cHJl
cGFyZVNlbmRUb1BhcmVudChyZXNvdXJjZUlkc1RvVHJhbnNmZXIpOworICAgICAgICBFWFBFQ1Rf
RVEoMHUsIGxpc3Quc3luY1BvaW50KTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBsaXN0LnJlc291
cmNlcy5zaXplKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgcmVzb3Vy
Y2VzIGJhY2sgZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBjaGlsZC4KKyAgICAgICAgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpSZXNvdXJjZUlkQXJyYXkgcmVzb3VyY2VJZHNUb1RyYW5zZmVyOworICAgICAg
ICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKG1hcHBlZElkMSk7CisgICAgICAgIHJlc291
cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQobWFwcGVkSWQyKTsKKyAgICAgICAgQ0NSZXNvdXJjZVBy
b3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdCA9IG1fcmVzb3VyY2VQcm92aWRl
ci0+cHJlcGFyZVNlbmRUb0NoaWxkKGNoaWxkSWQsIHJlc291cmNlSWRzVG9UcmFuc2Zlcik7Cisg
ICAgICAgIEVYUEVDVF9ORSgwdSwgbGlzdC5zeW5jUG9pbnQpOworICAgICAgICBFWFBFQ1RfRVEo
MnUsIGxpc3QucmVzb3VyY2VzLnNpemUoKSk7CisgICAgICAgIGNoaWxkUmVzb3VyY2VQcm92aWRl
ci0+cmVjZWl2ZUZyb21QYXJlbnQobGlzdCk7CisgICAgfQorCisgICAgRVhQRUNUX0ZBTFNFKGNo
aWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkpOworICAgIEVYUEVDVF9G
QUxTRShjaGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDIpKTsKKworICAg
IFJlc291cmNlUHJvdmlkZXJDb250ZXh0KiBjaGlsZENvbnRleHQzRCA9IHN0YXRpY19jYXN0PFJl
c291cmNlUHJvdmlkZXJDb250ZXh0Kj4oY2hpbGRDb250ZXh0LT5jb250ZXh0M0QoKSk7CisgICAg
eworICAgICAgICBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJlYWQgbG9jayhjaGlsZFJlc291cmNl
UHJvdmlkZXIuZ2V0KCksIGlkMSk7CisgICAgICAgIEFTU0VSVF9ORSgwVSwgbG9jay50ZXh0dXJl
SWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbG9jay50ZXh0dXJlSWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4
dDNELT5nZXRQaXhlbHMoc2l6ZSwgZm9ybWF0LCByZXN1bHQpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgbWVtY21wKGRhdGExLCByZXN1bHQsIHBpeGVsU2l6ZSkpOworICAgIH0KKyAgICB7CisgICAg
ICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVhZCBsb2NrKGNoaWxkUmVzb3VyY2VQcm92aWRl
ci5nZXQoKSwgaWQyKTsKKyAgICAgICAgQVNTRVJUX05FKDBVLCBsb2NrLnRleHR1cmVJZCgpKTsK
KyAgICAgICAgY2hpbGRDb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBsb2NrLnRleHR1cmVJZCgpKTsKKyAgICAgICAgY2hpbGRDb250ZXh0M0QtPmdl
dFBpeGVscyhzaXplLCBmb3JtYXQsIHJlc3VsdCk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1j
bXAoZGF0YTIsIHJlc3VsdCwgcGl4ZWxTaXplKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFj
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158932</attachid>
            <date>2012-08-16 15:51:58 -0700</date>
            <delta_ts>2012-08-16 17:05:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93524-20120816155123.patch</filename>
            <type>text/plain</type>
            <size>33707</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1ODExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWRmM2VhODcyYzgxZTll
MmViNzY1OTU3ZmNiZWM2N2EwZjI4MzM0Ny4uYzdlYmUzNTVhOGM4YjJkNDdhZDZkOTg3MDJjYjdh
OTc4NmExZmFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTA4ICBBbnRv
aW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFk
ZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRo
b2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAg
ICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRl
c3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6Omdl
dENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChNYWlsYm94KToK
KyAgICAgICAgKFRyYW5zZmVyYWJsZVJlc291cmNlKToKKyAgICAgICAgKFRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoUmVz
b3VyY2UpOgorICAgICAgICAoQ2hpbGQpOgorCiAyMDEyLTA4LTE2ICBNYXggRmVpbCAgPG1mZWls
QHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFNvbWUgbWVkaWEgY29udHJvbHMgYXJl
IG1pc3Bvc2l0aW9uZWQgZm9yIGR5bmFtaWMgbGl2ZSBzdHJlYW1zIChITFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDIyMzgyNmU2MWRkMDE3MTBhMTA2NmMxZTc0ODIyNGNmYjZlOWYw
ZjUuLjFiN2FiMjllMTU4ZTFmZDAyZDczNTBmYzhjNjI3Yzk2YzBiMjExMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTItMDgtMDggIEFudG9pbmUgTGFi
b3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIHJlc291
cmNlIHRyYW5zZmVyIGZ1bmN0aW9ucyB0byBDQ1Jlc291cmNlUHJvdmlkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNTI0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIG1ldGhvZHMgdG8g
Q0NSZXNvdXJjZVByb3ZpZGVyIHRvIGJlIGFibGUgdG8gdHJhbnNwb3J0CisgICAgICAgIHJlc291
cmNlcyBmcm9tIGEgY2hpbGQgdG8gYSBwYXJlbnQuCisKKyAgICAgICAgQWRkZWQgdGVzdCB0byBD
Q1Jlc291cmNlUHJvdmlkZXJUZXN0LgorCisgICAgICAgICogdGVzdHMvQ0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRleHR1cmVTaXplKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OlRleHR1cmU6OlRleHR1cmUpOgorICAgICAgICAoVGV4
dHVyZSk6CisgICAgICAgIChDb250ZXh0U2hhcmVkRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRTaGFyZWREYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVk
RGF0YTo6aW5zZXJ0U3luY1BvaW50KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dFNoYXJlZERh
dGE6Omdlbk1haWxib3gpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVkRGF0YTo6cHJv
ZHVjZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVkRGF0YTo6Y29uc3Vt
ZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVkRGF0YTo6Q29udGV4dFNo
YXJlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6Y3Jl
YXRlKToKKyAgICAgICAgKFJlc291cmNlUHJvdmlkZXJDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6Omluc2VydFN5bmNQb2ludCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojp3YWl0U3luY1BvaW50KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6Omdlbk1haWxib3hDSFJPTUlVTSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojpwcm9kdWNlVGV4dHVyZUNI
Uk9NSVVNKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OmNvbnN1
bWVUZXh0dXJlQ0hST01JVU0pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3ZpZGVyQ29u
dGV4dDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQpOgorICAgICAgICAoUGVuZGluZ1Byb2R1Y2VU
ZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdDo6Q0NSZXNv
dXJjZVByb3ZpZGVyVGVzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXJUZXN0KToKKyAg
ICAgICAgKFdlYktpdDo6VEVTVF9GKToKKwogMjAxMi0wOC0xNiAgRGF2aWQgUmV2ZW1hbiAgPHJl
dmVtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQXZvaWQgYWxpYXNpbmcg
Z2xvYmFsIHN5bWJvbCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQ
cm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCmluZGV4IGEwYmQzN2NjOGQ1YWU4M2EwODNiOTFkY2Q3
MTFiOTkxOTk3ZjBkNzAuLmEwYjA4NWRlMGMxZWMzZDRkNWFjZDViMjZkYzA3ZDY4Njc4YzgwNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVzb3VyY2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVN1YkltYWdlLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94
eS5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAKIHVzaW5nIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q7CiAK
QEAgLTgyLDcgKzgzLDcgQEAgYm9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1l
cihSZXNvdXJjZUlkIGlkKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAg
ICAgUmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7CiAgICAg
QVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpKTsKLSAgICByZXR1cm4gISFpdC0+c2Vjb25k
LmxvY2tGb3JSZWFkQ291bnQ7CisgICAgcmV0dXJuICEhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENv
dW50IHx8IGl0LT5zZWNvbmQuZXhwb3J0ZWQ7CiB9CiAKIENDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25z
dCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQsIFRleHR1cmVVc2FnZUhpbnQgaGludCkK
QEAgLTEwOSw3ICsxMTAsNyBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpjcmVhdGVSZXNvdXJjZShpbnQgcG9vbCwgY29ucwogICAgIH0gZWxzZQog
ICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGZvcm1hdCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCAwLCBmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CiAgICAg
UmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3VyY2UgcmVzb3VyY2UgPSB7dGV4
dHVyZUlkLCBwb29sLCAwLCBmYWxzZSwgZmFsc2UsIHNpemUsIGZvcm1hdH07CisgICAgUmVzb3Vy
Y2UgcmVzb3VyY2UodGV4dHVyZUlkLCBwb29sLCBzaXplLCBmb3JtYXQpOwogICAgIG1fcmVzb3Vy
Y2VzLmFkZChpZCwgcmVzb3VyY2UpOwogICAgIHJldHVybiBpZDsKIH0KQEAgLTExOCw3ICsxMTks
OSBAQCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpj
cmVhdGVSZXNvdXJjZUZyb21FeHRlcm5hbFRleAogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgUmVzb3VyY2VJZCBpZCA9IG1fbmV4dElkKys7Ci0gICAgUmVzb3Vy
Y2UgcmVzb3VyY2UgPSB7dGV4dHVyZUlkLCAwLCAwLCBmYWxzZSwgdHJ1ZSwgSW50U2l6ZSgpLCAw
fTsKKyAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICByZXNvdXJjZS5nbElkID0gdGV4dHVyZUlk
OworICAgIHJlc291cmNlLmV4dGVybmFsID0gdHJ1ZTsKICAgICBtX3Jlc291cmNlcy5hZGQoaWQs
IHJlc291cmNlKTsKICAgICByZXR1cm4gaWQ7CiB9CkBAIC0xNDEsMTIgKzE0NCwxMiBAQCB2b2lk
IENDUmVzb3VyY2VQcm92aWRlcjo6ZGVsZXRlUmVzb3VyY2UoUmVzb3VyY2VJZCBpZCkKIHZvaWQg
Q0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVPd25lZFJlc291cmNlcyhpbnQgcG9vbCkKIHsKICAg
ICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwotICAgIFZlY3RvcjxSZXNvdXJjZUlk
PiB0b0RlbGV0ZTsKKyAgICBSZXNvdXJjZUlkQXJyYXkgdG9EZWxldGU7CiAgICAgZm9yIChSZXNv
dXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291
cmNlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoaXQtPnNlY29uZC5wb29sID09IHBvb2wg
JiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpCiAgICAgICAgICAgICB0b0RlbGV0ZS5hcHBlbmQoaXQt
PmZpcnN0KTsKICAgICB9Ci0gICAgZm9yIChWZWN0b3I8UmVzb3VyY2VJZD46Oml0ZXJhdG9yIGl0
ID0gdG9EZWxldGUuYmVnaW4oKTsgaXQgIT0gdG9EZWxldGUuZW5kKCk7ICsraXQpCisgICAgZm9y
IChSZXNvdXJjZUlkQXJyYXk6Oml0ZXJhdG9yIGl0ID0gdG9EZWxldGUuYmVnaW4oKTsgaXQgIT0g
dG9EZWxldGUuZW5kKCk7ICsraXQpCiAgICAgICAgIGRlbGV0ZVJlc291cmNlKCppdCk7CiB9CiAK
QEAgLTIyOCw2ICsyMzEsNyBAQCB2b2lkIENDUmVzb3VyY2VQcm92aWRlcjo6dW5sb2NrRm9yUmVh
ZChSZXNvdXJjZUlkIGlkKQogQ0NSZXNvdXJjZVByb3ZpZGVyOjpDQ1Jlc291cmNlUHJvdmlkZXIo
Q0NHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAg
ICAsIG1fbmV4dElkKDEpCisgICAgLCBtX25leHRDaGlsZCgxKQogICAgICwgbV91c2VUZXh0dXJl
U3RvcmFnZUV4dChmYWxzZSkKICAgICAsIG1fdXNlVGV4dHVyZVVzYWdlSGludChmYWxzZSkKICAg
ICAsIG1fdXNlU2hhbGxvd0ZsdXNoKGZhbHNlKQpAQCAtMjY0LDQgKzI2OCwxNzcgQEAgYm9vbCBD
Q1Jlc291cmNlUHJvdmlkZXI6OmluaXRpYWxpemUoKQogICAgIHJldHVybiB0cnVlOwogfQogCitp
bnQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGVDaGlsZChpbnQgcG9vbCkKK3sKKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIENoaWxkIGNoaWxkSW5mbzsKKyAgICBj
aGlsZEluZm8ucG9vbCA9IHBvb2w7CisgICAgaW50IGNoaWxkID0gbV9uZXh0Q2hpbGQrKzsKKyAg
ICBtX2NoaWxkcmVuLmFkZChjaGlsZCwgY2hpbGRJbmZvKTsKKyAgICByZXR1cm4gY2hpbGQ7Cit9
CisKK3ZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZXN0cm95Q2hpbGQoaW50IGNoaWxkKQorewor
ICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQ2hpbGRNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9jaGlsZHJlbi5maW5kKGNoaWxkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9jaGls
ZHJlbi5lbmQoKSk7CisgICAgZGVsZXRlT3duZWRSZXNvdXJjZXMoaXQtPnNlY29uZC5wb29sKTsK
KyAgICBtX2NoaWxkcmVuLnJlbW92ZShpdCk7CisgICAgdHJpbU1haWxib3hEZXF1ZSgpOworfQor
Citjb25zdCBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWRNYXAmIENDUmVzb3VyY2VQcm92
aWRlcjo6Z2V0Q2hpbGRUb1BhcmVudE1hcChpbnQgY2hpbGQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBDaGlsZE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOworICAgIEFTU0VSVChpdCAhPSBtX2NoaWxkcmVu
LmVuZCgpKTsKKyAgICByZXR1cm4gaXQtPnNlY29uZC5jaGlsZFRvUGFyZW50TWFwOworfQorCitD
Q1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBDQ1Jlc291cmNlUHJv
dmlkZXI6OnByZXBhcmVTZW5kVG9QYXJlbnQoY29uc3QgUmVzb3VyY2VJZEFycmF5JiByZXNvdXJj
ZXMpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBUcmFuc2Zl
cmFibGVSZXNvdXJjZUxpc3QgbGlzdDsKKyAgICBsaXN0LnN5bmNQb2ludCA9IDA7CisgICAgV2Vi
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7Cisg
ICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRleHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBv
c2l0aW5nLgorICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisgICAgZm9yIChSZXNvdXJjZUlk
QXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291
cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZSByZXNvdXJj
ZTsKKyAgICAgICAgaWYgKHRyYW5zZmVyUmVzb3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJj
ZSkpIHsKKyAgICAgICAgICAgIG1fcmVzb3VyY2VzLmZpbmQoKml0KS0+c2Vjb25kLmV4cG9ydGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGxpc3QucmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxpc3QucmVzb3VyY2VzLnNpemUoKSkKKyAgICAgICAg
bGlzdC5zeW5jUG9pbnQgPSBjb250ZXh0M2QtPmluc2VydFN5bmNQb2ludCgpOworICAgIHJldHVy
biBsaXN0OworfQorCitDQ1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlz
dCBDQ1Jlc291cmNlUHJvdmlkZXI6OnByZXBhcmVTZW5kVG9DaGlsZChpbnQgY2hpbGQsIGNvbnN0
IFJlc291cmNlSWRBcnJheSYgcmVzb3VyY2VzKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CisgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3Q7CisgICAgbGlz
dC5zeW5jUG9pbnQgPSAwOworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBt
X2NvbnRleHQtPmNvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dDNkIHx8ICFjb250ZXh0M2Qt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KKyAgICAgICAgcmV0dXJuIGxpc3Q7Cisg
ICAgfQorICAgIENoaWxkJiBjaGlsZEluZm8gPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpLT5zZWNv
bmQ7CisgICAgZm9yIChSZXNvdXJjZUlkQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBUcmFu
c2ZlcmFibGVSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgaWYgKCF0cmFuc2ZlclJlc291cmNl
KGNvbnRleHQzZCwgKml0LCAmcmVzb3VyY2UpKQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJlc291cmNlLmlkID0gY2hpbGRJbmZvLnBhcmVudFRvQ2hpbGRNYXAu
Z2V0KCppdCk7CisgICAgICAgIGNoaWxkSW5mby5wYXJlbnRUb0NoaWxkTWFwLnJlbW92ZSgqaXQp
OworICAgICAgICBjaGlsZEluZm8uY2hpbGRUb1BhcmVudE1hcC5yZW1vdmUocmVzb3VyY2UuaWQp
OworICAgICAgICBsaXN0LnJlc291cmNlcy5hcHBlbmQocmVzb3VyY2UpOworICAgICAgICBkZWxl
dGVSZXNvdXJjZSgqaXQpOworICAgIH0KKyAgICBpZiAobGlzdC5yZXNvdXJjZXMuc2l6ZSgpKQor
ICAgICAgICBsaXN0LnN5bmNQb2ludCA9IGNvbnRleHQzZC0+aW5zZXJ0U3luY1BvaW50KCk7Cisg
ICAgcmV0dXJuIGxpc3Q7Cit9CisKK3ZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJv
bUNoaWxkKGludCBjaGlsZCwgY29uc3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0JiByZXNvdXJj
ZXMpCit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBXZWJHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBp
ZiAoIWNvbnRleHQzZCB8fCAhY29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUgY29tcG9zaXRp
bmcuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHJlc291cmNlcy5zeW5jUG9pbnQp
IHsKKyAgICAgICAgLy8gTk9URTogSWYgdGhlIHBhcmVudCBpcyBhIGJyb3dzZXIgYW5kIHRoZSBj
aGlsZCBhIHJlbmRlcmVyLCB0aGUgcGFyZW50CisgICAgICAgIC8vIGlzIG5vdCBzdXBwb3NlZCB0
byBoYXZlIGl0cyBjb250ZXh0IHdhaXQsIGJlY2F1c2UgdGhhdCBjb3VsZCBpbmR1Y2UKKyAgICAg
ICAgLy8gZGVhZGxvY2tzIGFuZC9vciBzZWN1cml0eSBpc3N1ZXMuIFRoZSBjYWxsZXIgaXMgcmVz
cG9uc2libGUgZm9yCisgICAgICAgIC8vIHdhaXRpbmcgYXN5bmNocm9ub3VzbHksIGFuZCByZXNl
dHRpbmcgc3luY1BvaW50IGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgICAgICAgIC8vIEhvd2V2ZXIg
aWYgdGhlIHBhcmVudCBpcyBhIHJlbmRlcmVyIChlLmcuIGJyb3dzZXIgdGFnKSwgaXQgbWF5IGJl
IG9rCisgICAgICAgIC8vIChhbmQgaXMgc2ltcGxlcikgdG8gd2FpdC4KKyAgICAgICAgR0xDKGNv
bnRleHQzZCwgY29udGV4dDNkLT53YWl0U3luY1BvaW50KHJlc291cmNlcy5zeW5jUG9pbnQpKTsK
KyAgICB9CisgICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCktPnNl
Y29uZDsKKyAgICBmb3IgKFZlY3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVzb3VyY2VzLnJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMucmVz
b3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsKKyAgICAg
ICAgR0xDKGNvbnRleHQzZCwgdGV4dHVyZUlkID0gY29udGV4dDNkLT5jcmVhdGVUZXh0dXJlKCkp
OworICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQz
ZCwgY29udGV4dDNkLT5jb25zdW1lVGV4dHVyZUNIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBpdC0+bWFpbGJveC5uYW1lKSk7CisgICAgICAgIFJlc291cmNlSWQgaWQgPSBt
X25leHRJZCsrOworICAgICAgICBSZXNvdXJjZSByZXNvdXJjZSh0ZXh0dXJlSWQsIGNoaWxkSW5m
by5wb29sLCBpdC0+c2l6ZSwgaXQtPmZvcm1hdCk7CisgICAgICAgIG1fcmVzb3VyY2VzLmFkZChp
ZCwgcmVzb3VyY2UpOworICAgICAgICBtX21haWxib3hlcy5hcHBlbmQoaXQtPm1haWxib3gpOwor
ICAgICAgICBjaGlsZEluZm8ucGFyZW50VG9DaGlsZE1hcC5hZGQoaWQsIGl0LT5pZCk7CisgICAg
ICAgIGNoaWxkSW5mby5jaGlsZFRvUGFyZW50TWFwLmFkZChpdC0+aWQsIGlkKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpyZWNlaXZlRnJvbVBhcmVudChjb25zdCBUcmFu
c2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJlc291cmNlcykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBt
X2NvbnRleHQtPmNvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dDNkIHx8ICFjb250ZXh0M2Qt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBwYXRoIGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAocmVzb3VyY2VzLnN5bmNQb2ludCkKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29u
dGV4dDNkLT53YWl0U3luY1BvaW50KHJlc291cmNlcy5zeW5jUG9pbnQpKTsKKyAgICBmb3IgKFZl
Y3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmVzb3VyY2Vz
LnJlc291cmNlcy5iZWdpbigpOyBpdCAhPSByZXNvdXJjZXMucmVzb3VyY2VzLmVuZCgpOyArK2l0
KSB7CisgICAgICAgIFJlc291cmNlJiByZXNvdXJjZSA9IG1fcmVzb3VyY2VzLmZpbmQoaXQtPmlk
KS0+c2Vjb25kOworICAgICAgICBBU1NFUlQocmVzb3VyY2UuZXhwb3J0ZWQpOworICAgICAgICBy
ZXNvdXJjZS5leHBvcnRlZCA9IGZhbHNlOworICAgICAgICBHTEMoY29udGV4dDNkLCBjb250ZXh0
M2QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCByZXNvdXJjZS5n
bElkKSk7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+Y29uc3VtZVRleHR1cmVD
SFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaXQtPm1haWxib3gubmFtZSkp
OworICAgICAgICBtX21haWxib3hlcy5hcHBlbmQoaXQtPm1haWxib3gpOworICAgIH0KK30KKwor
Ym9vbCBDQ1Jlc291cmNlUHJvdmlkZXI6OnRyYW5zZmVyUmVzb3VyY2UoV2ViR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFJlc291cmNlSWQgaWQsIFRyYW5zZmVyYWJsZVJlc291cmNlKiByZXNv
dXJjZSkKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmZpbmQoaWQpOworICAgIEFT
U0VSVChpdCAhPSBtX3Jlc291cmNlcy5lbmQoKSAmJiAhaXQtPnNlY29uZC5sb2NrZWRGb3JXcml0
ZSAmJiAhaXQtPnNlY29uZC5sb2NrRm9yUmVhZENvdW50ICYmICFpdC0+c2Vjb25kLmV4dGVybmFs
KTsKKyAgICBpZiAoaXQtPnNlY29uZC5leHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc291cmNlLT5pZCA9IGlkOworICAgIHJlc291cmNlLT5mb3JtYXQgPSBpdC0+c2Vjb25k
LmZvcm1hdDsKKyAgICByZXNvdXJjZS0+c2l6ZSA9IGl0LT5zZWNvbmQuc2l6ZTsKKyAgICBpZiAo
IW1fbWFpbGJveGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzb3VyY2UtPm1haWxib3ggPSBtX21h
aWxib3hlcy50YWtlRmlyc3QoKTsKKyAgICBlbHNlCisgICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT5nZW5NYWlsYm94Q0hST01JVU0ocmVzb3VyY2UtPm1haWxib3gubmFtZSkpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgaXQtPnNlY29uZC5nbElkKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnByb2R1
Y2VUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHJlc291cmNl
LT5tYWlsYm94Lm5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDQ1Jlc291cmNl
UHJvdmlkZXI6OnRyaW1NYWlsYm94RGVxdWUoKQoreworICAgIC8vIFRyaW0gdGhlIG1haWxib3gg
ZGVxdWUgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc291cmNlcyB3ZSBtYXkgbmVlZCB0bwor
ICAgIC8vIHNlbmQuCisgICAgLy8gSWYgd2UgaGF2ZSBhIHBhcmVudCwgYW55IG5vbi1leHRlcm5h
bCByZXNvdXJjZSBub3QgYWxyZWFkeSB0cmFuc2ZlcmVkIGlzCisgICAgLy8gZWxpZ2libGUgdG8g
YmUgc2VudCB0byB0aGUgcGFyZW50LiBPdGhlcndpc2UsIGFsbCByZXNvdXJjZXMgYmVsb25naW5n
IHRvCisgICAgLy8gYSBjaGlsZCBtaWdodCBuZWVkIHRvIGJlIHNlbnQgYmFjayB0byB0aGUgY2hp
bGQuCisgICAgc2l6ZV90IG1heE1haWxib3hDb3VudCA9IDA7CisgICAgaWYgKG1fY29udGV4dC0+
Y2FwYWJpbGl0aWVzKCkuaGFzUGFyZW50Q29tcG9zaXRvcikgeworICAgICAgICBmb3IgKFJlc291
cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3Vy
Y2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoIWl0LT5zZWNvbmQuZXhwb3J0ZWQg
JiYgIWl0LT5zZWNvbmQuZXh0ZXJuYWwpCisgICAgICAgICAgICAgICAgKyttYXhNYWlsYm94Q291
bnQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBIYXNoU2V0PGludD4gY2hpbGRQ
b29sU2V0OworICAgICAgICBmb3IgKENoaWxkTWFwOjppdGVyYXRvciBpdCA9IG1fY2hpbGRyZW4u
YmVnaW4oKTsgaXQgIT0gbV9jaGlsZHJlbi5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIGNoaWxk
UG9vbFNldC5hZGQoaXQtPnNlY29uZC5wb29sKTsKKyAgICAgICAgZm9yIChSZXNvdXJjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBtX3Jlc291cmNlcy5lbmQo
KTsgKytpdCkgeworICAgICAgICAgICAgaWYgKGNoaWxkUG9vbFNldC5jb250YWlucyhpdC0+c2Vj
b25kLnBvb2wpKQorICAgICAgICAgICAgICAgICsrbWF4TWFpbGJveENvdW50OworICAgICAgICB9
CisgICAgfQorICAgIHdoaWxlIChtX21haWxib3hlcy5zaXplKCkgPiBtYXhNYWlsYm94Q291bnQp
CisgICAgICAgIG1fbWFpbGJveGVzLnJlbW92ZUZpcnN0KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQ
cm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZXNvdXJjZVByb3ZpZGVyLmgKaW5kZXggYWRkOTA5ZTViZmVhNTAwNzVmNjc2MjI3OWQ2NTg5
YjMyMzFjMGUyNS4uODAzMDYyYjhmNDg5NWNjOTFhZjE2ZGI5ODFmZGUwY2M0NzJmZTU2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZXNvdXJjZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmgKQEAgLTMwLDExICszMCwxMyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgImNjL0NDR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC01Myw3ICs1NSwyMyBAQCBjbGFz
cyBDQ1Jlc291cmNlUHJvdmlkZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVzb3Vy
Y2VQcm92aWRlcik7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiB1bnNpZ25lZCBSZXNvdXJjZUlkOwor
ICAgIHR5cGVkZWYgVmVjdG9yPFJlc291cmNlSWQ+IFJlc291cmNlSWRBcnJheTsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVzb3VyY2VJZCwgUmVzb3VyY2VJZD4gUmVzb3VyY2VJZE1hcDsKICAgICBl
bnVtIFRleHR1cmVVc2FnZUhpbnQgeyBUZXh0dXJlVXNhZ2VBbnksIFRleHR1cmVVc2FnZUZyYW1l
YnVmZmVyIH07CisgICAgc3RydWN0IE1haWxib3ggeworICAgICAgICBHQzNEYnl0ZSBuYW1lWzY0
XTsKKyAgICB9OworICAgIHN0cnVjdCBUcmFuc2ZlcmFibGVSZXNvdXJjZSB7CisgICAgICAgIHVu
c2lnbmVkIGlkOworICAgICAgICBHQzNEZW51bSBmb3JtYXQ7CisgICAgICAgIEludFNpemUgc2l6
ZTsKKyAgICAgICAgTWFpbGJveCBtYWlsYm94OworICAgIH07CisgICAgdHlwZWRlZiBWZWN0b3I8
VHJhbnNmZXJhYmxlUmVzb3VyY2U+IFRyYW5zZmVyYWJsZVJlc291cmNlQXJyYXk7CisgICAgc3Ry
dWN0IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCB7CisgICAgICAgIFRyYW5zZmVyYWJsZVJlc291
cmNlQXJyYXkgcmVzb3VyY2VzOworICAgICAgICB1bnNpZ25lZCBzeW5jUG9pbnQ7CisgICAgfTsK
IAogICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gY3JlYXRlKENDR3Jh
cGhpY3NDb250ZXh0Kik7CiAKQEAgLTkwLDIwICsxMDgsODYgQEAgcHVibGljOgogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgc2hhbGxvdyBmbHVzaCBvY2N1cnJlZCwgZmFsc2Ugb3RoZXJ3aXNl
LgogICAgIGJvb2wgc2hhbGxvd0ZsdXNoSWZTdXBwb3J0ZWQoKTsKIAorICAgIC8vIENyZWF0ZXMg
YWNjb3VudGluZyBmb3IgYSBjaGlsZCwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGEgcG9vbC4gUmVz
b3VyY2VzCisgICAgLy8gdHJhbnNmZXJlZCBmcm9tIHRoYXQgY2hpbGQgd2lsbCBnbyB0byB0aGF0
IHBvb2wuIFJldHVybnMgYSBjaGlsZCBJRC4KKyAgICBpbnQgY3JlYXRlQ2hpbGQoaW50IHBvb2wp
OworCisgICAgLy8gRGVzdHJveXMgYWNjb3VudGluZyBmb3IgdGhlIGNoaWxkLCBkZWxldGluZyBh
bGwgcmVzb3VyY2VzIGZyb20gdGhhdCBwb29sLgorICAgIHZvaWQgZGVzdHJveUNoaWxkKGludCBj
aGlsZCk7CisKKyAgICAvLyBHZXRzIHRoZSBjaGlsZC0+cGFyZW50IHJlc291cmNlIElEIG1hcC4K
KyAgICBjb25zdCBSZXNvdXJjZUlkTWFwJiBnZXRDaGlsZFRvUGFyZW50TWFwKGludCBjaGlsZCkg
Y29uc3Q7CisKKyAgICAvLyBQcmVwYXJlcyByZXNvdXJjZXMgdG8gYmUgdHJhbnNmZXJlZCB0byB0
aGUgcGFyZW50LCBtb3ZpbmcgdGhlbSB0bworICAgIC8vIG1haWxib3hlcyBhbmQgc2VyaWFsaXpp
bmcgbWV0YS1kYXRhIGludG8gVHJhbnNmZXJhYmxlUmVzb3VyY2VzLgorICAgIC8vIFJlc291cmNl
cyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgQ0NSZXNvdXJjZVByb3ZpZGVyLCBidXQgYXJlIG1h
cmtlcyBhcworICAgIC8vICJpbiB1c2UiLgorICAgIFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBw
cmVwYXJlU2VuZFRvUGFyZW50KGNvbnN0IFJlc291cmNlSWRBcnJheSYpOworCisgICAgLy8gUHJl
cGFyZXMgcmVzb3VyY2VzIHRvIGJlIHRyYW5zZmVyZWQgYmFjayB0byB0aGUgY2hpbGQsIG1vdmlu
ZyB0aGVtIHRvCisgICAgLy8gbWFpbGJveGVzIGFuZCBzZXJpYWxpemluZyBtZXRhLWRhdGEgaW50
byBUcmFuc2ZlcmFibGVSZXNvdXJjZXMuCisgICAgLy8gUmVzb3VyY2VzIGFyZSByZW1vdmVkIGZy
b20gdGhlIENDUmVzb3VyY2VQcm92aWRlci4gTm90ZTogdGhlIHJlc291cmNlIElEcworICAgIC8v
IHBhc3NlZCBhcmUgaW4gdGhlIHBhcmVudCBuYW1lc3BhY2UgYW5kIHdpbGwgYmUgdHJhbnNsYXRl
ZCB0byB0aGUgY2hpbGQKKyAgICAvLyBuYW1lc3BhY2Ugd2hlbiByZXR1cm5lZC4KKyAgICBUcmFu
c2ZlcmFibGVSZXNvdXJjZUxpc3QgcHJlcGFyZVNlbmRUb0NoaWxkKGludCBjaGlsZCwgY29uc3Qg
UmVzb3VyY2VJZEFycmF5Jik7CisKKyAgICAvLyBSZWNlaXZlcyByZXNvdXJjZXMgZnJvbSBhIGNo
aWxkLCBtb3ZpbmcgdGhlbSBmcm9tIG1haWxib3hlcy4gUmVzb3VyY2UgSURzCisgICAgLy8gcGFz
c2VkIGFyZSBpbiB0aGUgY2hpbGQgbmFtZXNwYWNlLCBhbmQgd2lsbCBiZSB0cmFuc2xhdGVkIHRv
IHRoZSBwYXJlbnQKKyAgICAvLyBuYW1lc3BhY2UsIGFkZGVkIHRvIHRoZSBjaGlsZC0+cGFyZW50
IG1hcC4KKyAgICAvLyBOT1RFOiBpZiB0aGUgc3luY1BvaW50IGZpbGVkIGluIFRyYW5zZmVyYWJs
ZVJlc291cmNlTGlzdCBpcyBzZXQsIHRoaXMKKyAgICAvLyB3aWxsIHdhaXQgb24gaXQuCisgICAg
dm9pZCByZWNlaXZlRnJvbUNoaWxkKGludCBjaGlsZCwgY29uc3QgVHJhbnNmZXJhYmxlUmVzb3Vy
Y2VMaXN0Jik7CisKKyAgICAvLyBSZWNlaXZlcyByZXNvdXJjZXMgZnJvbSB0aGUgcGFyZW50LCBt
b3ZpbmcgdGhlbSBmcm9tIG1haWxib3hlcy4gUmVzb3VyY2UgSURzCisgICAgLy8gcGFzc2VkIGFy
ZSBpbiB0aGUgY2hpbGQgbmFtZXNwYWNlLgorICAgIC8vIE5PVEU6IGlmIHRoZSBzeW5jUG9pbnQg
ZmlsZWQgaW4gVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGlzIHNldCwgdGhpcworICAgIC8vIHdp
bGwgd2FpdCBvbiBpdC4KKyAgICB2b2lkIHJlY2VpdmVGcm9tUGFyZW50KGNvbnN0IFRyYW5zZmVy
YWJsZVJlc291cmNlTGlzdCYpOworCisgICAgLy8gT25seSBmb3IgdGVzdGluZworICAgIHNpemVf
dCBtYWlsYm94Q291bnQoKSBjb25zdCB7IHJldHVybiBtX21haWxib3hlcy5zaXplKCk7IH0KKwog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkOwog
ICAgIGZyaWVuZCBjbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlOwogCiAgICAgc3Ry
dWN0IFJlc291cmNlIHsKKyAgICAgICAgUmVzb3VyY2UoKQorICAgICAgICAgICAgOiBnbElkKDAp
CisgICAgICAgICAgICAsIHBvb2woMCkKKyAgICAgICAgICAgICwgbG9ja0ZvclJlYWRDb3VudCgw
KQorICAgICAgICAgICAgLCBsb2NrZWRGb3JXcml0ZShmYWxzZSkKKyAgICAgICAgICAgICwgZXh0
ZXJuYWwoZmFsc2UpCisgICAgICAgICAgICAsIGV4cG9ydGVkKGZhbHNlKQorICAgICAgICAgICAg
LCBzaXplKCkKKyAgICAgICAgICAgICwgZm9ybWF0KDApCisgICAgICAgIHsgfQorICAgICAgICBS
ZXNvdXJjZSh1bnNpZ25lZCB0ZXh0dXJlSWQsIGludCBwb29sLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBHQzNEZW51bSBmb3JtYXQpCisgICAgICAgICAgICA6IGdsSWQodGV4dHVyZUlkKQorICAgICAg
ICAgICAgLCBwb29sKHBvb2wpCisgICAgICAgICAgICAsIGxvY2tGb3JSZWFkQ291bnQoMCkKKyAg
ICAgICAgICAgICwgbG9ja2VkRm9yV3JpdGUoZmFsc2UpCisgICAgICAgICAgICAsIGV4dGVybmFs
KGZhbHNlKQorICAgICAgICAgICAgLCBleHBvcnRlZChmYWxzZSkKKyAgICAgICAgICAgICwgc2l6
ZShzaXplKQorICAgICAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQorICAgICAgICB7IH0KICAgICAg
ICAgdW5zaWduZWQgZ2xJZDsKICAgICAgICAgaW50IHBvb2w7CiAgICAgICAgIGludCBsb2NrRm9y
UmVhZENvdW50OwogICAgICAgICBib29sIGxvY2tlZEZvcldyaXRlOwogICAgICAgICBib29sIGV4
dGVybmFsOworICAgICAgICBib29sIGV4cG9ydGVkOwogICAgICAgICBJbnRTaXplIHNpemU7CiAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICAgICB9OwogICAgIHR5cGVkZWYgSGFzaE1hcDxSZXNv
dXJjZUlkLCBSZXNvdXJjZT4gUmVzb3VyY2VNYXA7CisgICAgc3RydWN0IENoaWxkIHsKKyAgICAg
ICAgaW50IHBvb2w7CisgICAgICAgIFJlc291cmNlSWRNYXAgY2hpbGRUb1BhcmVudE1hcDsKKyAg
ICAgICAgUmVzb3VyY2VJZE1hcCBwYXJlbnRUb0NoaWxkTWFwOworICAgIH07CisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgQ2hpbGQ+IENoaWxkTWFwOwogCiAgICAgZXhwbGljaXQgQ0NSZXNvdXJj
ZVByb3ZpZGVyKENDR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CkBA
IC0xMTYsOSArMjAwLDE2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbG9ja0ZvclJlYWQoUmVz
b3VyY2VJZCk7CiAgICAgdm9pZCB1bmxvY2tGb3JSZWFkKFJlc291cmNlSWQpOwogCisgICAgYm9v
bCB0cmFuc2ZlclJlc291cmNlKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqLCBSZXNvdXJj
ZUlkLCBUcmFuc2ZlcmFibGVSZXNvdXJjZSopOworICAgIHZvaWQgdHJpbU1haWxib3hEZXF1ZSgp
OworCiAgICAgQ0NHcmFwaGljc0NvbnRleHQqIG1fY29udGV4dDsKICAgICBSZXNvdXJjZUlkIG1f
bmV4dElkOwogICAgIFJlc291cmNlTWFwIG1fcmVzb3VyY2VzOworICAgIGludCBtX25leHRDaGls
ZDsKKyAgICBDaGlsZE1hcCBtX2NoaWxkcmVuOworCisgICAgRGVxdWU8TWFpbGJveD4gbV9tYWls
Ym94ZXM7CiAKICAgICBib29sIG1fdXNlVGV4dHVyZVN0b3JhZ2VFeHQ7CiAgICAgYm9vbCBtX3Vz
ZVRleHR1cmVVc2FnZUhpbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1Jlc291cmNlUHJvdmlkZXJUZXN0LmNwcAppbmRleCA0MjI3NzQ1OWFlZTA3NDFhOTZi
MjMzYTUyZTNhNjBmODIxYjQ4MGE0Li41ZDAxZjBjOTAxODU1ZjllMWMwYWMyNzZmYzNiOWRmZTBk
MDIxNThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVzb3Vy
Y2VQcm92aWRlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NS
ZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAKQEAgLTQyLDkgKzQyLDk4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSB7CiAKK3NpemVfdCB0ZXh0dXJlU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplLCBXR0MzRGVudW0gZm9ybWF0KQoreworICAgIHVuc2lnbmVkIGludCBjb21wb25l
bnRzUGVyUGl4ZWwgPSA0OworICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDE7
CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyhm
b3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50c1BlclBp
eGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpOworICAgIHJldHVybiBzaXplLndpZHRoKCkgKiBzaXpl
LmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7Cit9CisK
K3N0cnVjdCBUZXh0dXJlIHsKKyAgICBUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemUsIFdHQzNE
ZW51bSBmb3JtYXQpCisgICAgICAgIDogc2l6ZShzaXplKQorICAgICAgICAsIGZvcm1hdChmb3Jt
YXQpCisgICAgICAgICwgZGF0YShhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W3RleHR1cmVTaXpl
KHNpemUsIGZvcm1hdCldKSkKKyAgICB7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplOworICAg
IFdHQzNEZW51bSBmb3JtYXQ7CisgICAgT3duQXJyYXlQdHI8dWludDhfdD4gZGF0YTsKK307CisK
Ky8vIFNoYXJlZCBkYXRhIGJldHdlZW4gbXVsdGlwbGUgUmVzb3VyY2VQcm92aWRlckNvbnRleHQu
IFRoaXMgY29udGFpbnMgbWFpbGJveAorLy8gY29udGVudHMgYXMgd2VsbCBhcyBpbmZvcm1hdGlv
biBhYm91dCBzeW5jIHBvaW50cy4KK2NsYXNzIENvbnRleHRTaGFyZWREYXRhIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDb250ZXh0U2hhcmVkRGF0YT4gY3JlYXRlKCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IENvbnRleHRTaGFyZWREYXRhKCkpOyB9CisKKyAgICB1bnNpZ25lZCBp
bnNlcnRTeW5jUG9pbnQoKSB7IHJldHVybiBtX25leHRTeW5jUG9pbnQrKzsgfQorCisgICAgdm9p
ZCBnZW5NYWlsYm94KFdHQzNEYnl0ZSogbWFpbGJveCkKKyAgICB7CisgICAgICAgIG1lbXNldCht
YWlsYm94LCAwLCBzaXplb2YoV0dDM0RieXRlWzY0XSkpOworICAgICAgICBtZW1jcHkobWFpbGJv
eCwgJm1fbmV4dE1haWxCb3gsIHNpemVvZihtX25leHRNYWlsQm94KSk7CisgICAgICAgICsrbV9u
ZXh0TWFpbEJveDsKKyAgICB9CisKKyAgICB2b2lkIHByb2R1Y2VUZXh0dXJlKGNvbnN0IFdHQzNE
Ynl0ZSogbWFpbGJveE5hbWUsIHVuc2lnbmVkIHN5bmNQb2ludCwgUGFzc093blB0cjxUZXh0dXJl
PiB0ZXh0dXJlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFpbGJveCA9IDA7CisgICAgICAg
IG1lbWNweSgmbWFpbGJveCwgbWFpbGJveE5hbWUsIHNpemVvZihtYWlsYm94KSk7CisgICAgICAg
IEFTU0VSVChtYWlsYm94ICYmIG1haWxib3ggPCBtX25leHRNYWlsQm94KTsKKyAgICAgICAgbV90
ZXh0dXJlcy5zZXQobWFpbGJveCwgdGV4dHVyZSk7CisgICAgICAgIEFTU0VSVChtX3N5bmNQb2lu
dEZvck1haWxib3guZ2V0KG1haWxib3gpIDwgc3luY1BvaW50KTsKKyAgICAgICAgbV9zeW5jUG9p
bnRGb3JNYWlsYm94LnNldChtYWlsYm94LCBzeW5jUG9pbnQpOworICAgIH0KKworICAgIFBhc3NP
d25QdHI8VGV4dHVyZT4gY29uc3VtZVRleHR1cmUoY29uc3QgV0dDM0RieXRlKiBtYWlsYm94TmFt
ZSwgdW5zaWduZWQgc3luY1BvaW50KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbWFpbGJveCA9
IDA7CisgICAgICAgIG1lbWNweSgmbWFpbGJveCwgbWFpbGJveE5hbWUsIHNpemVvZihtYWlsYm94
KSk7CisgICAgICAgIEFTU0VSVChtYWlsYm94ICYmIG1haWxib3ggPCBtX25leHRNYWlsQm94KTsK
KworICAgICAgICAvLyBJZiB0aGUgbGF0ZXN0IHN5bmMgcG9pbnQgdGhlIGNvbnRleHQgaGFzIHdh
aXRlZCBvbiBpcyBiZWZvcmUgdGhlIHN5bmMKKyAgICAgICAgLy8gcG9pbnQgZm9yIHdoZW4gdGhl
IG1haWxib3ggd2FzIHNldCwgcHJldGVuZCB3ZSBuZXZlciBzYXcgdGhhdAorICAgICAgICAvLyBw
cm9kdWNlVGV4dHVyZS4KKyAgICAgICAgaWYgKG1fc3luY1BvaW50Rm9yTWFpbGJveC5nZXQobWFp
bGJveCkgPCBzeW5jUG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIG1fdGV4dHVyZXMudGFrZShtYWlsYm94KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q29udGV4dFNoYXJlZERhdGEoKQorICAgICAgICA6IG1fbmV4dFN5bmNQb2ludCgxKQorICAgICAg
ICAsIG1fbmV4dE1haWxCb3goMSkKKyAgICB7IH0KKworICAgIHVuc2lnbmVkIG1fbmV4dFN5bmNQ
b2ludDsKKyAgICB1bnNpZ25lZCBtX25leHRNYWlsQm94OworICAgIHR5cGVkZWYgSGFzaE1hcDx1
bnNpZ25lZCwgT3duUHRyPFRleHR1cmU+ID4gVGV4dHVyZU1hcDsKKyAgICBUZXh0dXJlTWFwIG1f
dGV4dHVyZXM7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgdW5zaWduZWQ+IG1fc3luY1BvaW50Rm9y
TWFpbGJveDsKK307CisKIGNsYXNzIFJlc291cmNlUHJvdmlkZXJDb250ZXh0IDogcHVibGljIENv
bXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFJlc291cmNlUHJvdmlkZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgUmVzb3VyY2VQcm92aWRlckNvbnRleHQoQXR0cmlidXRlcygpKSk7IH0KKyAgICBz
dGF0aWMgUGFzc093blB0cjxSZXNvdXJjZVByb3ZpZGVyQ29udGV4dD4gY3JlYXRlKENvbnRleHRT
aGFyZWREYXRhKiBzaGFyZWREYXRhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgUmVzb3VyY2VQcm92
aWRlckNvbnRleHQoQXR0cmlidXRlcygpLCBzaGFyZWREYXRhKSk7IH0KKworICAgIHZpcnR1YWwg
dW5zaWduZWQgaW5zZXJ0U3luY1BvaW50KCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHN5bmNQ
b2ludCA9IG1fc2hhcmVkRGF0YS0+aW5zZXJ0U3luY1BvaW50KCk7CisgICAgICAgIC8vIENvbW1p
dCB0aGUgcHJvZHVjZVRleHR1cmVDSFJPTUlVTSBjYWxscyBhdCB0aGlzIHBvaW50LCBzbyB0aGF0
CisgICAgICAgIC8vIHRoZXkncmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzeW5jIHBvaW50LgorICAg
ICAgICBmb3IgKFBlbmRpbmdQcm9kdWNlVGV4dHVyZUxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV9wZW5k
aW5nUHJvZHVjZVRleHR1cmVzLmJlZ2luKCk7IGl0ICE9IG1fcGVuZGluZ1Byb2R1Y2VUZXh0dXJl
cy5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIG1fc2hhcmVkRGF0YS0+cHJvZHVjZVRleHR1cmUo
KCppdCktPm1haWxib3gsIHN5bmNQb2ludCwgKCppdCktPnRleHR1cmUucmVsZWFzZSgpKTsKKyAg
ICAgICAgbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBz
eW5jUG9pbnQ7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHdhaXRTeW5jUG9pbnQodW5zaWdu
ZWQgc3luY1BvaW50KQorICAgIHsKKyAgICAgICAgbV9sYXN0V2FpdGVkU3luY1BvaW50ID0gc3Rk
OjptYXgoc3luY1BvaW50LCBtX2xhc3RXYWl0ZWRTeW5jUG9pbnQpOworICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBiaW5kVGV4dHVyZShXR0MzRGVudW0gdGFyZ2V0LCBXZWJHTElkIHRleHR1cmUp
CiAgICAgewpAQCAtMTEzLDYgKzIwMiwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHNldFBpeGVscyh4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOwogICAgIH0KIAorICAgIHZp
cnR1YWwgdm9pZCBnZW5NYWlsYm94Q0hST01JVU0oV0dDM0RieXRlKiBtYWlsYm94KSB7IHJldHVy
biBtX3NoYXJlZERhdGEtPmdlbk1haWxib3gobWFpbGJveCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cHJvZHVjZVRleHR1cmVDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBXR0MzRGJ5dGUq
IG1haWxib3gpCisgICAgeworICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CisgICAg
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworCisg
ICAgICAgIC8vIERlbGF5IG1vdmluZCB0aGUgdGV4dHVyZSBpbnRvIHRoZSBtYWlsYm94IHVudGls
IHRoZSBuZXh0CisgICAgICAgIC8vIGluc2VydFN5bmNQb2ludCwgc28gdGhhdCBpdCBpcyBub3Qg
dmlzaWJsZSB0byBvdGhlciBjb250ZXh0cyB0aGF0CisgICAgICAgIC8vIGhhdmVuJ3Qgd2FpdGVk
IG9uIHRoYXQgc3luYyBwb2ludC4KKyAgICAgICAgT3duUHRyPFBlbmRpbmdQcm9kdWNlVGV4dHVy
ZT4gcGVuZGluZyA9IGFkb3B0UHRyKG5ldyBQZW5kaW5nUHJvZHVjZVRleHR1cmUpOworICAgICAg
ICBtZW1jcHkocGVuZGluZy0+bWFpbGJveCwgbWFpbGJveCwgc2l6ZW9mKHBlbmRpbmctPm1haWxi
b3gpKTsKKyAgICAgICAgcGVuZGluZy0+dGV4dHVyZSA9IG1fdGV4dHVyZXMudGFrZShtX2N1cnJl
bnRUZXh0dXJlKTsKKyAgICAgICAgbV90ZXh0dXJlcy5zZXQobV9jdXJyZW50VGV4dHVyZSwgbnVs
bHB0cik7CisgICAgICAgIG1fcGVuZGluZ1Byb2R1Y2VUZXh0dXJlcy5hcHBlbmQocGVuZGluZy5y
ZWxlYXNlKCkpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lVGV4dHVyZUNIUk9N
SVVNKFdHQzNEZW51bSB0YXJnZXQsIGNvbnN0IFdHQzNEYnl0ZSogbWFpbGJveCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgICAgIG1fdGV4dHVyZXMuc2V0
KG1fY3VycmVudFRleHR1cmUsIG1fc2hhcmVkRGF0YS0+Y29uc3VtZVRleHR1cmUobWFpbGJveCwg
bV9sYXN0V2FpdGVkU3luY1BvaW50KSk7CisgICAgfQorCiAgICAgdm9pZCBnZXRQaXhlbHMoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgV0dDM0RlbnVtIGZvcm1hdCwgdWludDhfdCogcGl4ZWxzKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fY3VycmVudFRleHR1cmUpOwpAQCAtMTI4LDM0ICsyNDAsMTUg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlcy5zaXplKCk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHNpemVfdCB0ZXh0dXJlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBXR0MzRGVu
dW0gZm9ybWF0KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhl
bCA9IDQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVudCA9IDE7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMoZm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgJmNvbXBvbmVudHNQZXJQaXhl
bCwgJmJ5dGVzUGVyQ29tcG9uZW50KTsKLSAgICAgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNp
emUuaGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKLSAg
ICB9Ci0KIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dChj
b25zdCBBdHRyaWJ1dGVzJiBhdHRycykKKyAgICBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dChjb25z
dCBBdHRyaWJ1dGVzJiBhdHRycywgQ29udGV4dFNoYXJlZERhdGEqIHNoYXJlZERhdGEpCiAgICAg
ICAgIDogQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykKKyAgICAgICAg
LCBtX3NoYXJlZERhdGEoc2hhcmVkRGF0YSkKICAgICAgICAgLCBtX2N1cnJlbnRUZXh0dXJlKDAp
CisgICAgICAgICwgbV9sYXN0V2FpdGVkU3luY1BvaW50KDApCiAgICAgeyB9CiAKIHByaXZhdGU6
Ci0gICAgc3RydWN0IFRleHR1cmUgewotICAgICAgICBUZXh0dXJlKGNvbnN0IEludFNpemUmIHNp
emVfLCBXR0MzRGVudW0gZm9ybWF0XykKLSAgICAgICAgICAgIDogc2l6ZShzaXplXykKLSAgICAg
ICAgICAgICwgZm9ybWF0KGZvcm1hdF8pCi0gICAgICAgICAgICAsIGRhdGEoYWRvcHRBcnJheVB0
cihuZXcgdWludDhfdFt0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpXSkpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIEludFNpemUgc2l6ZTsKLSAgICAgICAgV0dDM0RlbnVtIGZvcm1h
dDsKLSAgICAgICAgT3duQXJyYXlQdHI8dWludDhfdD4gZGF0YTsKLSAgICB9OwotCiAgICAgdm9p
ZCBhbGxvY2F0ZVRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV0dDM0RlbnVtIGZvcm1hdCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsKQEAgLTE4MiwxNCArMjc1
LDIzIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkdMSWQsIE93
blB0cjxUZXh0dXJlPiA+IFRleHR1cmVNYXA7CisgICAgc3RydWN0IFBlbmRpbmdQcm9kdWNlVGV4
dHVyZSB7CisgICAgICAgIFdHQzNEYnl0ZSBtYWlsYm94WzY0XTsKKyAgICAgICAgT3duUHRyPFRl
eHR1cmU+IHRleHR1cmU7CisgICAgfTsKKyAgICB0eXBlZGVmIERlcXVlPE93blB0cjxQZW5kaW5n
UHJvZHVjZVRleHR1cmU+ID4gUGVuZGluZ1Byb2R1Y2VUZXh0dXJlTGlzdDsKKyAgICBDb250ZXh0
U2hhcmVkRGF0YSogbV9zaGFyZWREYXRhOwogICAgIFdlYkdMSWQgbV9jdXJyZW50VGV4dHVyZTsK
ICAgICBUZXh0dXJlTWFwIG1fdGV4dHVyZXM7CisgICAgdW5zaWduZWQgbV9sYXN0V2FpdGVkU3lu
Y1BvaW50OworICAgIFBlbmRpbmdQcm9kdWNlVGV4dHVyZUxpc3QgbV9wZW5kaW5nUHJvZHVjZVRl
eHR1cmVzOwogfTsKIAogY2xhc3MgQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCA6IHB1YmxpYyB0ZXN0
aW5nOjpUZXN0IHsKIHB1YmxpYzoKICAgICBDQ1Jlc291cmNlUHJvdmlkZXJUZXN0KCkKLSAgICAg
ICAgOiBtX2NvbnRleHQoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoUmVz
b3VyY2VQcm92aWRlckNvbnRleHQ6OmNyZWF0ZSgpKSkKKyAgICAgICAgOiBtX3NoYXJlZERhdGEo
Q29udGV4dFNoYXJlZERhdGE6OmNyZWF0ZSgpKQorICAgICAgICAsIG1fY29udGV4dChGYWtlV2Vi
Q29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0ZShSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6
Y3JlYXRlKG1fc2hhcmVkRGF0YS5nZXQoKSkpKQogICAgICAgICAsIG1fcmVzb3VyY2VQcm92aWRl
cihDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpKQogICAgIHsKICAg
ICB9CkBAIC0yMDYsNiArMzA4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CisgICAgT3duUHRyPENvbnRleHRTaGFyZWRE
YXRhPiBtX3NoYXJlZERhdGE7CiAgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBtX2NvbnRl
eHQ7CiAgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gbV9yZXNvdXJjZVByb3ZpZGVyOwog
fTsKQEAgLTIxNSw3ICszMTgsNyBAQCBURVNUX0YoQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCwgQmFz
aWMpCiAgICAgSW50U2l6ZSBzaXplKDEsIDEpOwogICAgIFdHQzNEZW51bSBmb3JtYXQgPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTsKICAgICBpbnQgcG9vbCA9IDE7Ci0gICAgc2l6ZV90IHBpeGVs
U2l6ZSA9IFJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojp0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQp
OworICAgIHNpemVfdCBwaXhlbFNpemUgPSB0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOwogICAg
IEFTU0VSVF9FUSg0VSwgcGl4ZWxTaXplKTsKIAogICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVz
b3VyY2VJZCBpZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6
ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CkBAIC0yNTYs
NyArMzU5LDcgQEAgVEVTVF9GKENDUmVzb3VyY2VQcm92aWRlclRlc3QsIFVwbG9hZCkKICAgICBJ
bnRTaXplIHNpemUoMiwgMik7CiAgICAgV0dDM0RlbnVtIGZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOwogICAgIGludCBwb29sID0gMTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gUmVz
b3VyY2VQcm92aWRlckNvbnRleHQ6OnRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7CisgICAgc2l6
ZV90IHBpeGVsU2l6ZSA9IHRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7CiAgICAgQVNTRVJUX0VR
KDE2VSwgcGl4ZWxTaXplKTsKIAogICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBp
ZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0
LCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CkBAIC0zMDMsNCArNDA2LDEx
NyBAQCBURVNUX0YoQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCwgVXBsb2FkKQogICAgIG1fcmVzb3Vy
Y2VQcm92aWRlci0+ZGVsZXRlUmVzb3VyY2UoaWQpOwogfQogCitURVNUX0YoQ0NSZXNvdXJjZVBy
b3ZpZGVyVGVzdCwgVHJhbnNmZXJSZXNvdXJjZXMpCit7CisgICAgT3duUHRyPENDR3JhcGhpY3ND
b250ZXh0PiBjaGlsZENvbnRleHQoRmFrZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVh
dGUoUmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OmNyZWF0ZShtX3NoYXJlZERhdGEuZ2V0KCkpKSk7
CisgICAgT3duUHRyPENDUmVzb3VyY2VQcm92aWRlcj4gY2hpbGRSZXNvdXJjZVByb3ZpZGVyKEND
UmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKGNoaWxkQ29udGV4dC5nZXQoKSkpOworCisgICAgSW50
U2l6ZSBzaXplKDEsIDEpOworICAgIFdHQzNEZW51bSBmb3JtYXQgPSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKKyAgICBpbnQgcG9vbCA9IDE7CisgICAgc2l6ZV90IHBpeGVsU2l6ZSA9IHRleHR1
cmVTaXplKHNpemUsIGZvcm1hdCk7CisgICAgQVNTRVJUX0VRKDRVLCBwaXhlbFNpemUpOworCisg
ICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIGlkMSA9IGNoaWxkUmVzb3VyY2VQcm92
aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OlRleHR1cmVVc2FnZUFueSk7CisgICAgdWludDhfdCBkYXRhMVs0XSA9IHsxLCAyLCAzLCA0
fTsKKyAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQoKSwgc2l6ZSk7CisgICAgY2hpbGRSZXNvdXJj
ZVByb3ZpZGVyLT51cGxvYWQoaWQxLCBkYXRhMSwgcmVjdCwgcmVjdCwgcmVjdCk7CisKKyAgICBD
Q1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgaWQyID0gY2hpbGRSZXNvdXJjZVByb3ZpZGVy
LT5jcmVhdGVSZXNvdXJjZShwb29sLCBzaXplLCBmb3JtYXQsIENDUmVzb3VyY2VQcm92aWRlcjo6
VGV4dHVyZVVzYWdlQW55KTsKKyAgICB1aW50OF90IGRhdGEyWzRdID0gezUsIDUsIDUsIDV9Owor
ICAgIGNoaWxkUmVzb3VyY2VQcm92aWRlci0+dXBsb2FkKGlkMiwgZGF0YTIsIHJlY3QsIHJlY3Qs
IHJlY3QpOworCisgICAgaW50IGNoaWxkUG9vbCA9IDI7CisgICAgaW50IGNoaWxkSWQgPSBtX3Jl
c291cmNlUHJvdmlkZXItPmNyZWF0ZUNoaWxkKGNoaWxkUG9vbCk7CisKKyAgICB7CisgICAgICAg
IC8vIFRyYW5zZmVyIHNvbWUgcmVzb3VyY2VzIHRvIHRoZSBwYXJlbnQuCisgICAgICAgIENDUmVz
b3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZEFycmF5IHJlc291cmNlSWRzVG9UcmFuc2ZlcjsKKyAg
ICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVuZChpZDEpOworICAgICAgICByZXNvdXJj
ZUlkc1RvVHJhbnNmZXIuYXBwZW5kKGlkMik7CisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6
VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3QgPSBjaGlsZFJlc291cmNlUHJvdmlkZXItPnBy
ZXBhcmVTZW5kVG9QYXJlbnQocmVzb3VyY2VJZHNUb1RyYW5zZmVyKTsKKyAgICAgICAgRVhQRUNU
X05FKDB1LCBsaXN0LnN5bmNQb2ludCk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgbGlzdC5yZXNv
dXJjZXMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGRSZXNvdXJjZVByb3ZpZGVy
LT5pblVzZUJ5Q29uc3VtZXIoaWQxKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoaWxkUmVzb3Vy
Y2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMikpOworICAgICAgICBtX3Jlc291cmNlUHJv
dmlkZXItPnJlY2VpdmVGcm9tQ2hpbGQoY2hpbGRJZCwgbGlzdCk7CisgICAgfQorCisgICAgRVhQ
RUNUX0VRKDJ1LCBtX3Jlc291cmNlUHJvdmlkZXItPm51bVJlc291cmNlcygpKTsKKyAgICBFWFBF
Q1RfRVEoMnUsIG1fcmVzb3VyY2VQcm92aWRlci0+bWFpbGJveENvdW50KCkpOworICAgIENDUmVz
b3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCByZXNvdXJjZU1hcCA9IG1fcmVzb3VyY2VQcm92
aWRlci0+Z2V0Q2hpbGRUb1BhcmVudE1hcChjaGlsZElkKTsKKyAgICBDQ1Jlc291cmNlUHJvdmlk
ZXI6OlJlc291cmNlSWQgbWFwcGVkSWQxID0gcmVzb3VyY2VNYXAuZ2V0KGlkMSk7CisgICAgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hcHBlZElkMiA9IHJlc291cmNlTWFwLmdldChp
ZDIpOworICAgIEVYUEVDVF9ORSgwdSwgbWFwcGVkSWQxKTsKKyAgICBFWFBFQ1RfTkUoMHUsIG1h
cHBlZElkMik7CisgICAgRVhQRUNUX0ZBTFNFKG1fcmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNv
bnN1bWVyKGlkMSkpOworICAgIEVYUEVDVF9GQUxTRShtX3Jlc291cmNlUHJvdmlkZXItPmluVXNl
QnlDb25zdW1lcihpZDIpKTsKKworICAgIHVpbnQ4X3QgcmVzdWx0WzRdID0gezB9OworICAgIGdl
dFJlc291cmNlUGl4ZWxzKG1hcHBlZElkMSwgc2l6ZSwgZm9ybWF0LCByZXN1bHQpOworICAgIEVY
UEVDVF9FUSgwLCBtZW1jbXAoZGF0YTEsIHJlc3VsdCwgcGl4ZWxTaXplKSk7CisKKyAgICBnZXRS
ZXNvdXJjZVBpeGVscyhtYXBwZWRJZDIsIHNpemUsIGZvcm1hdCwgcmVzdWx0KTsKKyAgICBFWFBF
Q1RfRVEoMCwgbWVtY21wKGRhdGEyLCByZXN1bHQsIHBpeGVsU2l6ZSkpOworCisgICAgeworICAg
ICAgICAvLyBDaGVjayB0aGF0IHRyYW5zZmVyaW5nIGFnYWluIHRoZSBzYW1lIHJlc291cmNlIGZy
b20gdGhlIGNoaWxkIHRvIHRoZQorICAgICAgICAvLyBwYXJlbnQgaXMgYSBub29wLgorICAgICAg
ICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWRBcnJheSByZXNvdXJjZUlkc1RvVHJhbnNm
ZXI7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQoaWQxKTsKKyAgICAgICAg
Q0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdCA9IGNoaWxk
UmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb1BhcmVudChyZXNvdXJjZUlkc1RvVHJhbnNm
ZXIpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGxpc3Quc3luY1BvaW50KTsKKyAgICAgICAgRVhQ
RUNUX0VRKDB1LCBsaXN0LnJlc291cmNlcy5zaXplKCkpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgLy8gVHJhbnNmZXIgcmVzb3VyY2VzIGJhY2sgZnJvbSB0aGUgcGFyZW50IHRvIHRoZSBjaGls
ZC4KKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkQXJyYXkgcmVzb3VyY2VJ
ZHNUb1RyYW5zZmVyOworICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKG1hcHBl
ZElkMSk7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQobWFwcGVkSWQyKTsK
KyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlz
dCA9IG1fcmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb0NoaWxkKGNoaWxkSWQsIHJlc291
cmNlSWRzVG9UcmFuc2Zlcik7CisgICAgICAgIEVYUEVDVF9ORSgwdSwgbGlzdC5zeW5jUG9pbnQp
OworICAgICAgICBFWFBFQ1RfRVEoMnUsIGxpc3QucmVzb3VyY2VzLnNpemUoKSk7CisgICAgICAg
IGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cmVjZWl2ZUZyb21QYXJlbnQobGlzdCk7CisgICAgfQor
ICAgIEVYUEVDVF9FUSgwdSwgbV9yZXNvdXJjZVByb3ZpZGVyLT5tYWlsYm94Q291bnQoKSk7Cisg
ICAgRVhQRUNUX0VRKDJ1LCBjaGlsZFJlc291cmNlUHJvdmlkZXItPm1haWxib3hDb3VudCgpKTsK
KyAgICBFWFBFQ1RfRkFMU0UoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIo
aWQxKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNv
bnN1bWVyKGlkMikpOworCisgICAgUmVzb3VyY2VQcm92aWRlckNvbnRleHQqIGNoaWxkQ29udGV4
dDNEID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VQcm92aWRlckNvbnRleHQqPihjaGlsZENvbnRleHQt
PmNvbnRleHQzRCgpKTsKKyAgICB7CisgICAgICAgIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yUmVh
ZCBsb2NrKGNoaWxkUmVzb3VyY2VQcm92aWRlci5nZXQoKSwgaWQxKTsKKyAgICAgICAgQVNTRVJU
X05FKDBVLCBsb2NrLnRleHR1cmVJZCgpKTsKKyAgICAgICAgY2hpbGRDb250ZXh0M0QtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBsb2NrLnRleHR1cmVJZCgpKTsK
KyAgICAgICAgY2hpbGRDb250ZXh0M0QtPmdldFBpeGVscyhzaXplLCBmb3JtYXQsIHJlc3VsdCk7
CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0YTEsIHJlc3VsdCwgcGl4ZWxTaXplKSk7
CisgICAgfQorICAgIHsKKyAgICAgICAgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JSZWFkIGxvY2so
Y2hpbGRSZXNvdXJjZVByb3ZpZGVyLmdldCgpLCBpZDIpOworICAgICAgICBBU1NFUlRfTkUoMFUs
IGxvY2sudGV4dHVyZUlkKCkpOworICAgICAgICBjaGlsZENvbnRleHQzRC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxvY2sudGV4dHVyZUlkKCkpOworICAgICAg
ICBjaGlsZENvbnRleHQzRC0+Z2V0UGl4ZWxzKHNpemUsIGZvcm1hdCwgcmVzdWx0KTsKKyAgICAg
ICAgRVhQRUNUX0VRKDAsIG1lbWNtcChkYXRhMiwgcmVzdWx0LCBwaXhlbFNpemUpKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIC8vIFRyYW5zZmVyIHJlc291cmNlcyB0byB0aGUgcGFyZW50IGFn
YWluLgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWRBcnJheSByZXNvdXJj
ZUlkc1RvVHJhbnNmZXI7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQoaWQx
KTsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVuZChpZDIpOworICAgICAgICBD
Q1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBsaXN0ID0gY2hpbGRS
ZXNvdXJjZVByb3ZpZGVyLT5wcmVwYXJlU2VuZFRvUGFyZW50KHJlc291cmNlSWRzVG9UcmFuc2Zl
cik7CisgICAgICAgIEVYUEVDVF9ORSgwdSwgbGlzdC5zeW5jUG9pbnQpOworICAgICAgICBFWFBF
Q1RfRVEoMnUsIGxpc3QucmVzb3VyY2VzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNo
aWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkpOworICAgICAgICBFWFBF
Q1RfVFJVRShjaGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDIpKTsKKyAg
ICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5yZWNlaXZlRnJvbUNoaWxkKGNoaWxkSWQsIGxpc3Qp
OworICAgIH0KKworICAgIEVYUEVDVF9FUSgydSwgbV9yZXNvdXJjZVByb3ZpZGVyLT5udW1SZXNv
dXJjZXMoKSk7CisgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZXN0cm95Q2hpbGQoY2hpbGRJZCk7
CisgICAgRVhQRUNUX0VRKDB1LCBtX3Jlc291cmNlUHJvdmlkZXItPm51bVJlc291cmNlcygpKTsK
KyAgICBFWFBFQ1RfRVEoMHUsIG1fcmVzb3VyY2VQcm92aWRlci0+bWFpbGJveENvdW50KCkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158951</attachid>
            <date>2012-08-16 17:06:01 -0700</date>
            <delta_ts>2012-08-16 19:55:31 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93524-20120816170526.patch</filename>
            <type>text/plain</type>
            <size>33722</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE1OWJhZGZkYmNkMTJk
MGZmMzU5ZTQ4OTY0ZmY4MTM4NmEwZjNiZC4uZGEyOGU0ZjlkYWE3MzFjNzQ4NDA2M2ZkNTUwN2Y2
YTExYzlkOTJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTA4ICBBbnRv
aW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFk
ZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRo
b2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAg
ICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRl
c3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6Omdl
dENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChNYWlsYm94KToK
KyAgICAgICAgKFRyYW5zZmVyYWJsZVJlc291cmNlKToKKyAgICAgICAgKFRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoUmVz
b3VyY2UpOgorICAgICAgICAoQ2hpbGQpOgorCiAyMDEyLTA4LTE2ICBBcm5hdWQgUmVuZXZpZXIg
IDxhLnJlbmV2aWVyQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVXBkYXRlIFR5cGVkQXJy
YXlzIHRvIHRocm93IFJhbmdlRXJyb3Igb3Igc2ltaWxhciBpbnN0ZWFkIG9mIElOREVYX1NJWkVf
RVJSCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc5MmYxMDRlNjA4YmEwNTIxNmM5MjA3
NTY2YzYxMjA5Y2RmOWQyNWYuLjU5MDI2MjMwZmU1Yzk0NDNiOTY1NjcwZDM3NTBhNWQyYjI3NmQz
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTItMDgt
MDggIEFudG9pbmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWRkIHJlc291cmNlIHRyYW5zZmVyIGZ1bmN0aW9ucyB0byBDQ1Jlc291cmNlUHJvdmlk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNTI0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgVGhpcyBh
ZGRzIG1ldGhvZHMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyIHRvIGJlIGFibGUgdG8gdHJhbnNwb3J0
CisgICAgICAgIHJlc291cmNlcyBmcm9tIGEgY2hpbGQgdG8gYSBwYXJlbnQuCisKKyAgICAgICAg
QWRkZWQgdGVzdCB0byBDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LgorCisgICAgICAgICogdGVzdHMv
Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRleHR1cmVTaXpl
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlRleHR1cmU6OlRleHR1cmUp
OgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChDb250ZXh0U2hhcmVkRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbnRleHRTaGFyZWREYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZXh0U2hhcmVkRGF0YTo6aW5zZXJ0U3luY1BvaW50KToKKyAgICAgICAgKFdlYktpdDo6
Q29udGV4dFNoYXJlZERhdGE6Omdlbk1haWxib3gpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0
U2hhcmVkRGF0YTo6cHJvZHVjZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hh
cmVkRGF0YTo6Y29uc3VtZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVk
RGF0YTo6Q29udGV4dFNoYXJlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3Zp
ZGVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFJlc291cmNlUHJvdmlkZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6Omluc2VydFN5bmNQb2lu
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojp3YWl0U3luY1Bv
aW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6Omdlbk1haWxi
b3hDSFJPTUlVTSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojpw
cm9kdWNlVGV4dHVyZUNIUk9NSVVNKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRl
ckNvbnRleHQ6OmNvbnN1bWVUZXh0dXJlQ0hST01JVU0pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZVByb3ZpZGVyQ29udGV4dDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQpOgorICAgICAgICAo
UGVuZGluZ1Byb2R1Y2VUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdDo6Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJv
dmlkZXJUZXN0KToKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKwogMjAxMi0wOC0xNiAgQWxl
eGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBS
ZXBsYWNlIGRlc3RSZWN0IHdpdGggZGVzdE9mZnNldCBpbiB0ZXh0dXJlIHVwbG9hZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKaW5kZXggZDIxYzRiNWRjNDMyY2I1NDYzNTY2
Y2ZhMDA5YmJhNWYzNWEyMGZhNy4uOGE5ZTI5MGFlM2QyNWY1M2UxMTc5Yjg4ZjhmMDJlODAzYTc3
YzYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKICNpbmNsdWRlICJjYy9D
Q1Byb3h5LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogdXNpbmcgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RDsKIApAQCAtODIsNyArODMsNyBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNv
bnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIHJldHVybiAhIWl0LT5z
ZWNvbmQubG9ja0ZvclJlYWRDb3VudDsKKyAgICByZXR1cm4gISFpdC0+c2Vjb25kLmxvY2tGb3JS
ZWFkQ291bnQgfHwgaXQtPnNlY29uZC5leHBvcnRlZDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2UoaW50IHBvb2ws
IGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdlSGludCBo
aW50KQpAQCAtMTA5LDcgKzExMCw3IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25zCiAgICAgfSBl
bHNlCiAgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCksIDAsIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsK
ICAgICBSZXNvdXJjZUlkIGlkID0gbV9uZXh0SWQrKzsKLSAgICBSZXNvdXJjZSByZXNvdXJjZSA9
IHt0ZXh0dXJlSWQsIHBvb2wsIDAsIGZhbHNlLCBmYWxzZSwgc2l6ZSwgZm9ybWF0fTsKKyAgICBS
ZXNvdXJjZSByZXNvdXJjZSh0ZXh0dXJlSWQsIHBvb2wsIHNpemUsIGZvcm1hdCk7CiAgICAgbV9y
ZXNvdXJjZXMuYWRkKGlkLCByZXNvdXJjZSk7CiAgICAgcmV0dXJuIGlkOwogfQpAQCAtMTE4LDcg
KzExOSw5IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OmNyZWF0ZVJlc291cmNlRnJvbUV4dGVybmFsVGV4CiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZUlkIGlkID0gbV9uZXh0SWQrKzsKLSAgICBS
ZXNvdXJjZSByZXNvdXJjZSA9IHt0ZXh0dXJlSWQsIDAsIDAsIGZhbHNlLCB0cnVlLCBJbnRTaXpl
KCksIDB9OworICAgIFJlc291cmNlIHJlc291cmNlOworICAgIHJlc291cmNlLmdsSWQgPSB0ZXh0
dXJlSWQ7CisgICAgcmVzb3VyY2UuZXh0ZXJuYWwgPSB0cnVlOwogICAgIG1fcmVzb3VyY2VzLmFk
ZChpZCwgcmVzb3VyY2UpOwogICAgIHJldHVybiBpZDsKIH0KQEAgLTE0MSwxMiArMTQ0LDEyIEBA
IHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVSZXNvdXJjZShSZXNvdXJjZUlkIGlkKQog
dm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29sKQog
ewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgVmVjdG9yPFJlc291
cmNlSWQ+IHRvRGVsZXRlOworICAgIFJlc291cmNlSWRBcnJheSB0b0RlbGV0ZTsKICAgICBmb3Ig
KFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1f
cmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+c2Vjb25kLnBvb2wgPT0g
cG9vbCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCkKICAgICAgICAgICAgIHRvRGVsZXRlLmFwcGVu
ZChpdC0+Zmlyc3QpOwogICAgIH0KLSAgICBmb3IgKFZlY3RvcjxSZXNvdXJjZUlkPjo6aXRlcmF0
b3IgaXQgPSB0b0RlbGV0ZS5iZWdpbigpOyBpdCAhPSB0b0RlbGV0ZS5lbmQoKTsgKytpdCkKKyAg
ICBmb3IgKFJlc291cmNlSWRBcnJheTo6aXRlcmF0b3IgaXQgPSB0b0RlbGV0ZS5iZWdpbigpOyBp
dCAhPSB0b0RlbGV0ZS5lbmQoKTsgKytpdCkKICAgICAgICAgZGVsZXRlUmVzb3VyY2UoKml0KTsK
IH0KIApAQCAtMjI4LDYgKzIzMSw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tG
b3JSZWFkKFJlc291cmNlSWQgaWQpCiBDQ1Jlc291cmNlUHJvdmlkZXI6OkNDUmVzb3VyY2VQcm92
aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0
KQogICAgICwgbV9uZXh0SWQoMSkKKyAgICAsIG1fbmV4dENoaWxkKDEpCiAgICAgLCBtX3VzZVRl
eHR1cmVTdG9yYWdlRXh0KGZhbHNlKQogICAgICwgbV91c2VUZXh0dXJlVXNhZ2VIaW50KGZhbHNl
KQogICAgICwgbV91c2VTaGFsbG93Rmx1c2goZmFsc2UpCkBAIC0yNjQsNCArMjY4LDE3NyBAQCBi
b29sIENDUmVzb3VyY2VQcm92aWRlcjo6aW5pdGlhbGl6ZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2ludCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZUNoaWxkKGludCBwb29sKQoreworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQ2hpbGQgY2hpbGRJbmZvOwor
ICAgIGNoaWxkSW5mby5wb29sID0gcG9vbDsKKyAgICBpbnQgY2hpbGQgPSBtX25leHRDaGlsZCsr
OworICAgIG1fY2hpbGRyZW4uYWRkKGNoaWxkLCBjaGlsZEluZm8pOworICAgIHJldHVybiBjaGls
ZDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlc3Ryb3lDaGlsZChpbnQgY2hpbGQp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBDaGlsZE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOworICAgIEFTU0VSVChpdCAhPSBt
X2NoaWxkcmVuLmVuZCgpKTsKKyAgICBkZWxldGVPd25lZFJlc291cmNlcyhpdC0+c2Vjb25kLnBv
b2wpOworICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGl0KTsKKyAgICB0cmltTWFpbGJveERlcXVlKCk7
Cit9CisKK2NvbnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCYgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpnZXRDaGlsZFRvUGFyZW50TWFwKGludCBjaGlsZCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIENoaWxkTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fY2hp
bGRyZW4uZW5kKCkpOworICAgIHJldHVybiBpdC0+c2Vjb25kLmNoaWxkVG9QYXJlbnRNYXA7Cit9
CisKK0NDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3Vy
Y2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb1BhcmVudChjb25zdCBSZXNvdXJjZUlkQXJyYXkmIHJl
c291cmNlcykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFRy
YW5zZmVyYWJsZVJlc291cmNlTGlzdCBsaXN0OworICAgIGxpc3Quc3luY1BvaW50ID0gMDsKKyAg
ICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0Qo
KTsKKyAgICBpZiAoIWNvbnRleHQzZCB8fCAhY29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUg
Y29tcG9zaXRpbmcuCisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KKyAgICBmb3IgKFJlc291
cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
cmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRyYW5zZmVyYWJsZVJlc291cmNlIHJl
c291cmNlOworICAgICAgICBpZiAodHJhbnNmZXJSZXNvdXJjZShjb250ZXh0M2QsICppdCwgJnJl
c291cmNlKSkgeworICAgICAgICAgICAgbV9yZXNvdXJjZXMuZmluZCgqaXQpLT5zZWNvbmQuZXhw
b3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgbGlzdC5yZXNvdXJjZXMuYXBwZW5kKHJlc291cmNl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobGlzdC5yZXNvdXJjZXMuc2l6ZSgpKQorICAg
ICAgICBsaXN0LnN5bmNQb2ludCA9IGNvbnRleHQzZC0+aW5zZXJ0U3luY1BvaW50KCk7CisgICAg
cmV0dXJuIGxpc3Q7Cit9CisKK0NDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3Vy
Y2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKGludCBjaGlsZCwg
Y29uc3QgUmVzb3VyY2VJZEFycmF5JiByZXNvdXJjZXMpCit7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKKyAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdDsKKyAg
ICBsaXN0LnN5bmNQb2ludCA9IDA7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRl
eHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm4gbGlz
dDsKKyAgICB9CisgICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCkt
PnNlY29uZDsKKyAgICBmb3IgKFJlc291cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
IFRyYW5zZmVyYWJsZVJlc291cmNlIHJlc291cmNlOworICAgICAgICBpZiAoIXRyYW5zZmVyUmVz
b3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJjZSkpCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmVzb3VyY2UuaWQgPSBjaGlsZEluZm8ucGFyZW50VG9DaGls
ZE1hcC5nZXQoKml0KTsKKyAgICAgICAgY2hpbGRJbmZvLnBhcmVudFRvQ2hpbGRNYXAucmVtb3Zl
KCppdCk7CisgICAgICAgIGNoaWxkSW5mby5jaGlsZFRvUGFyZW50TWFwLnJlbW92ZShyZXNvdXJj
ZS5pZCk7CisgICAgICAgIGxpc3QucmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZSk7CisgICAgICAg
IGRlbGV0ZVJlc291cmNlKCppdCk7CisgICAgfQorICAgIGlmIChsaXN0LnJlc291cmNlcy5zaXpl
KCkpCisgICAgICAgIGxpc3Quc3luY1BvaW50ID0gY29udGV4dDNkLT5pbnNlcnRTeW5jUG9pbnQo
KTsKKyAgICByZXR1cm4gbGlzdDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2Vp
dmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJl
c291cmNlcykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQzRCgpOwor
ICAgIGlmICghY29udGV4dDNkIHx8ICFjb250ZXh0M2QtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21w
b3NpdGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocmVzb3VyY2VzLnN5bmNQ
b2ludCkgeworICAgICAgICAvLyBOT1RFOiBJZiB0aGUgcGFyZW50IGlzIGEgYnJvd3NlciBhbmQg
dGhlIGNoaWxkIGEgcmVuZGVyZXIsIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gaXMgbm90IHN1cHBv
c2VkIHRvIGhhdmUgaXRzIGNvbnRleHQgd2FpdCwgYmVjYXVzZSB0aGF0IGNvdWxkIGluZHVjZQor
ICAgICAgICAvLyBkZWFkbG9ja3MgYW5kL29yIHNlY3VyaXR5IGlzc3Vlcy4gVGhlIGNhbGxlciBp
cyByZXNwb25zaWJsZSBmb3IKKyAgICAgICAgLy8gd2FpdGluZyBhc3luY2hyb25vdXNseSwgYW5k
IHJlc2V0dGluZyBzeW5jUG9pbnQgYmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAgICAgICAgLy8gSG93
ZXZlciBpZiB0aGUgcGFyZW50IGlzIGEgcmVuZGVyZXIgKGUuZy4gYnJvd3NlciB0YWcpLCBpdCBt
YXkgYmUgb2sKKyAgICAgICAgLy8gKGFuZCBpcyBzaW1wbGVyKSB0byB3YWl0LgorICAgICAgICBH
TEMoY29udGV4dDNkLCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2lu
dCkpOworICAgIH0KKyAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxk
KS0+c2Vjb25kOworICAgIGZvciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXNvdXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNl
cy5yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOwor
ICAgICAgICBHTEMoY29udGV4dDNkLCB0ZXh0dXJlSWQgPSBjb250ZXh0M2QtPmNyZWF0ZVRleHR1
cmUoKSk7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgICAgICBHTEMoY29u
dGV4dDNkLCBjb250ZXh0M2QtPmNvbnN1bWVUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGl0LT5tYWlsYm94Lm5hbWUpKTsKKyAgICAgICAgUmVzb3VyY2VJZCBp
ZCA9IG1fbmV4dElkKys7CisgICAgICAgIFJlc291cmNlIHJlc291cmNlKHRleHR1cmVJZCwgY2hp
bGRJbmZvLnBvb2wsIGl0LT5zaXplLCBpdC0+Zm9ybWF0KTsKKyAgICAgICAgbV9yZXNvdXJjZXMu
YWRkKGlkLCByZXNvdXJjZSk7CisgICAgICAgIG1fbWFpbGJveGVzLmFwcGVuZChpdC0+bWFpbGJv
eCk7CisgICAgICAgIGNoaWxkSW5mby5wYXJlbnRUb0NoaWxkTWFwLmFkZChpZCwgaXQtPmlkKTsK
KyAgICAgICAgY2hpbGRJbmZvLmNoaWxkVG9QYXJlbnRNYXAuYWRkKGl0LT5pZCwgaWQpOworICAg
IH0KK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KGNvbnN0
IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCYgcmVzb3VyY2VzKQoreworICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRl
eHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChyZXNvdXJjZXMuc3luY1BvaW50KQorICAgICAgICBHTEMoY29udGV4dDNk
LCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOworICAgIGZv
ciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNv
dXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJjZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgUmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZmluZChp
dC0+aWQpLT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXNvdXJjZS5leHBvcnRlZCk7CisgICAg
ICAgIHJlc291cmNlLmV4cG9ydGVkID0gZmFsc2U7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNv
bnRleHQzZC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHJlc291
cmNlLmdsSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5jb25zdW1lVGV4
dHVyZUNIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+bWFpbGJveC5u
YW1lKSk7CisgICAgICAgIG1fbWFpbGJveGVzLmFwcGVuZChpdC0+bWFpbGJveCk7CisgICAgfQor
fQorCitib29sIENDUmVzb3VyY2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZShXZWJHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgUmVzb3VyY2VJZCBpZCwgVHJhbnNmZXJhYmxlUmVzb3VyY2Uq
IHJlc291cmNlKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAg
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Cisg
ICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZv
cldyaXRlICYmICFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0
ZXJuYWwpOworICAgIGlmIChpdC0+c2Vjb25kLmV4cG9ydGVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmVzb3VyY2UtPmlkID0gaWQ7CisgICAgcmVzb3VyY2UtPmZvcm1hdCA9IGl0LT5z
ZWNvbmQuZm9ybWF0OworICAgIHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5zaXplOworICAg
IGlmICghbV9tYWlsYm94ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXNvdXJjZS0+bWFpbGJveCA9
IG1fbWFpbGJveGVzLnRha2VGaXJzdCgpOworICAgIGVsc2UKKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmdlbk1haWxib3hDSFJPTUlVTShyZXNvdXJjZS0+bWFpbGJveC5uYW1lKSk7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBpdC0+c2Vjb25kLmdsSWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
cHJvZHVjZVRleHR1cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVz
b3VyY2UtPm1haWxib3gubmFtZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6dHJpbU1haWxib3hEZXF1ZSgpCit7CisgICAgLy8gVHJpbSB0aGUgbWFp
bGJveCBkZXF1ZSB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzb3VyY2VzIHdlIG1heSBuZWVk
IHRvCisgICAgLy8gc2VuZC4KKyAgICAvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBhbnkgbm9uLWV4
dGVybmFsIHJlc291cmNlIG5vdCBhbHJlYWR5IHRyYW5zZmVyZWQgaXMKKyAgICAvLyBlbGlnaWJs
ZSB0byBiZSBzZW50IHRvIHRoZSBwYXJlbnQuIE90aGVyd2lzZSwgYWxsIHJlc291cmNlcyBiZWxv
bmdpbmcgdG8KKyAgICAvLyBhIGNoaWxkIG1pZ2h0IG5lZWQgdG8gYmUgc2VudCBiYWNrIHRvIHRo
ZSBjaGlsZC4KKyAgICBzaXplX3QgbWF4TWFpbGJveENvdW50ID0gMDsKKyAgICBpZiAobV9jb250
ZXh0LT5jYXBhYmlsaXRpZXMoKS5oYXNQYXJlbnRDb21wb3NpdG9yKSB7CisgICAgICAgIGZvciAo
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9y
ZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC5leHBv
cnRlZCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCkKKyAgICAgICAgICAgICAgICArK21heE1haWxi
b3hDb3VudDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEhhc2hTZXQ8aW50PiBj
aGlsZFBvb2xTZXQ7CisgICAgICAgIGZvciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGls
ZHJlbi5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2l0KQorICAgICAgICAgICAg
Y2hpbGRQb29sU2V0LmFkZChpdC0+c2Vjb25kLnBvb2wpOworICAgICAgICBmb3IgKFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2Vz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoY2hpbGRQb29sU2V0LmNvbnRhaW5zKGl0
LT5zZWNvbmQucG9vbCkpCisgICAgICAgICAgICAgICAgKyttYXhNYWlsYm94Q291bnQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgd2hpbGUgKG1fbWFpbGJveGVzLnNpemUoKSA+IG1heE1haWxib3hD
b3VudCkKKyAgICAgICAgbV9tYWlsYm94ZXMucmVtb3ZlRmlyc3QoKTsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaAppbmRleCAyNTI0MTIxYmY0NTNhMzA3ZmQ4OGU5NDNh
NDY0NTUxMTFiOWQ5ZDc0Li4zYTAzOGJlZTI0ZmM1ZTYzMmI4MzQxOTlkYmIyMmFmNTA3MGRjNzIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Jlc291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaApAQCAtMzAsMTEgKzMwLDEzIEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKQEAgLTUzLDcgKzU1LDIzIEBA
IGNsYXNzIENDUmVzb3VyY2VQcm92aWRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NS
ZXNvdXJjZVByb3ZpZGVyKTsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIFJlc291cmNl
SWQ7CisgICAgdHlwZWRlZiBWZWN0b3I8UmVzb3VyY2VJZD4gUmVzb3VyY2VJZEFycmF5OworICAg
IHR5cGVkZWYgSGFzaE1hcDxSZXNvdXJjZUlkLCBSZXNvdXJjZUlkPiBSZXNvdXJjZUlkTWFwOwog
ICAgIGVudW0gVGV4dHVyZVVzYWdlSGludCB7IFRleHR1cmVVc2FnZUFueSwgVGV4dHVyZVVzYWdl
RnJhbWVidWZmZXIgfTsKKyAgICBzdHJ1Y3QgTWFpbGJveCB7CisgICAgICAgIEdDM0RieXRlIG5h
bWVbNjRdOworICAgIH07CisgICAgc3RydWN0IFRyYW5zZmVyYWJsZVJlc291cmNlIHsKKyAgICAg
ICAgdW5zaWduZWQgaWQ7CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKKyAgICAgICAgSW50U2l6
ZSBzaXplOworICAgICAgICBNYWlsYm94IG1haWxib3g7CisgICAgfTsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT4gVHJhbnNmZXJhYmxlUmVzb3VyY2VBcnJheTsKKyAg
ICBzdHJ1Y3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IHsKKyAgICAgICAgVHJhbnNmZXJhYmxl
UmVzb3VyY2VBcnJheSByZXNvdXJjZXM7CisgICAgICAgIHVuc2lnbmVkIHN5bmNQb2ludDsKKyAg
ICB9OwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBjcmVhdGUo
Q0NHcmFwaGljc0NvbnRleHQqKTsKIApAQCAtOTAsMjAgKzEwOCw4NiBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFsbG93IGZsdXNoIG9jY3VycmVkLCBmYWxzZSBvdGhl
cndpc2UuCiAgICAgYm9vbCBzaGFsbG93Rmx1c2hJZlN1cHBvcnRlZCgpOwogCisgICAgLy8gQ3Jl
YXRlcyBhY2NvdW50aW5nIGZvciBhIGNoaWxkLCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYSBwb29s
LiBSZXNvdXJjZXMKKyAgICAvLyB0cmFuc2ZlcmVkIGZyb20gdGhhdCBjaGlsZCB3aWxsIGdvIHRv
IHRoYXQgcG9vbC4gUmV0dXJucyBhIGNoaWxkIElELgorICAgIGludCBjcmVhdGVDaGlsZChpbnQg
cG9vbCk7CisKKyAgICAvLyBEZXN0cm95cyBhY2NvdW50aW5nIGZvciB0aGUgY2hpbGQsIGRlbGV0
aW5nIGFsbCByZXNvdXJjZXMgZnJvbSB0aGF0IHBvb2wuCisgICAgdm9pZCBkZXN0cm95Q2hpbGQo
aW50IGNoaWxkKTsKKworICAgIC8vIEdldHMgdGhlIGNoaWxkLT5wYXJlbnQgcmVzb3VyY2UgSUQg
bWFwLgorICAgIGNvbnN0IFJlc291cmNlSWRNYXAmIGdldENoaWxkVG9QYXJlbnRNYXAoaW50IGNo
aWxkKSBjb25zdDsKKworICAgIC8vIFByZXBhcmVzIHJlc291cmNlcyB0byBiZSB0cmFuc2ZlcmVk
IHRvIHRoZSBwYXJlbnQsIG1vdmluZyB0aGVtIHRvCisgICAgLy8gbWFpbGJveGVzIGFuZCBzZXJp
YWxpemluZyBtZXRhLWRhdGEgaW50byBUcmFuc2ZlcmFibGVSZXNvdXJjZXMuCisgICAgLy8gUmVz
b3VyY2VzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSBDQ1Jlc291cmNlUHJvdmlkZXIsIGJ1dCBh
cmUgbWFya2VzIGFzCisgICAgLy8gImluIHVzZSIuCisgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2VM
aXN0IHByZXBhcmVTZW5kVG9QYXJlbnQoY29uc3QgUmVzb3VyY2VJZEFycmF5Jik7CisKKyAgICAv
LyBQcmVwYXJlcyByZXNvdXJjZXMgdG8gYmUgdHJhbnNmZXJlZCBiYWNrIHRvIHRoZSBjaGlsZCwg
bW92aW5nIHRoZW0gdG8KKyAgICAvLyBtYWlsYm94ZXMgYW5kIHNlcmlhbGl6aW5nIG1ldGEtZGF0
YSBpbnRvIFRyYW5zZmVyYWJsZVJlc291cmNlcy4KKyAgICAvLyBSZXNvdXJjZXMgYXJlIHJlbW92
ZWQgZnJvbSB0aGUgQ0NSZXNvdXJjZVByb3ZpZGVyLiBOb3RlOiB0aGUgcmVzb3VyY2UgSURzCisg
ICAgLy8gcGFzc2VkIGFyZSBpbiB0aGUgcGFyZW50IG5hbWVzcGFjZSBhbmQgd2lsbCBiZSB0cmFu
c2xhdGVkIHRvIHRoZSBjaGlsZAorICAgIC8vIG5hbWVzcGFjZSB3aGVuIHJldHVybmVkLgorICAg
IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBwcmVwYXJlU2VuZFRvQ2hpbGQoaW50IGNoaWxkLCBj
b25zdCBSZXNvdXJjZUlkQXJyYXkmKTsKKworICAgIC8vIFJlY2VpdmVzIHJlc291cmNlcyBmcm9t
IGEgY2hpbGQsIG1vdmluZyB0aGVtIGZyb20gbWFpbGJveGVzLiBSZXNvdXJjZSBJRHMKKyAgICAv
LyBwYXNzZWQgYXJlIGluIHRoZSBjaGlsZCBuYW1lc3BhY2UsIGFuZCB3aWxsIGJlIHRyYW5zbGF0
ZWQgdG8gdGhlIHBhcmVudAorICAgIC8vIG5hbWVzcGFjZSwgYWRkZWQgdG8gdGhlIGNoaWxkLT5w
YXJlbnQgbWFwLgorICAgIC8vIE5PVEU6IGlmIHRoZSBzeW5jUG9pbnQgZmlsZWQgaW4gVHJhbnNm
ZXJhYmxlUmVzb3VyY2VMaXN0IGlzIHNldCwgdGhpcworICAgIC8vIHdpbGwgd2FpdCBvbiBpdC4K
KyAgICB2b2lkIHJlY2VpdmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBUcmFuc2ZlcmFibGVS
ZXNvdXJjZUxpc3QmKTsKKworICAgIC8vIFJlY2VpdmVzIHJlc291cmNlcyBmcm9tIHRoZSBwYXJl
bnQsIG1vdmluZyB0aGVtIGZyb20gbWFpbGJveGVzLiBSZXNvdXJjZSBJRHMKKyAgICAvLyBwYXNz
ZWQgYXJlIGluIHRoZSBjaGlsZCBuYW1lc3BhY2UuCisgICAgLy8gTk9URTogaWYgdGhlIHN5bmNQ
b2ludCBmaWxlZCBpbiBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgaXMgc2V0LCB0aGlzCisgICAg
Ly8gd2lsbCB3YWl0IG9uIGl0LgorICAgIHZvaWQgcmVjZWl2ZUZyb21QYXJlbnQoY29uc3QgVHJh
bnNmZXJhYmxlUmVzb3VyY2VMaXN0Jik7CisKKyAgICAvLyBPbmx5IGZvciB0ZXN0aW5nCisgICAg
c2l6ZV90IG1haWxib3hDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbGJveGVzLnNpemUoKTsg
fQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJl
YWQ7CiAgICAgZnJpZW5kIGNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGU7CiAKICAg
ICBzdHJ1Y3QgUmVzb3VyY2UgeworICAgICAgICBSZXNvdXJjZSgpCisgICAgICAgICAgICA6IGds
SWQoMCkKKyAgICAgICAgICAgICwgcG9vbCgwKQorICAgICAgICAgICAgLCBsb2NrRm9yUmVhZENv
dW50KDApCisgICAgICAgICAgICAsIGxvY2tlZEZvcldyaXRlKGZhbHNlKQorICAgICAgICAgICAg
LCBleHRlcm5hbChmYWxzZSkKKyAgICAgICAgICAgICwgZXhwb3J0ZWQoZmFsc2UpCisgICAgICAg
ICAgICAsIHNpemUoKQorICAgICAgICAgICAgLCBmb3JtYXQoMCkKKyAgICAgICAgeyB9CisgICAg
ICAgIFJlc291cmNlKHVuc2lnbmVkIHRleHR1cmVJZCwgaW50IHBvb2wsIGNvbnN0IEludFNpemUm
IHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKKyAgICAgICAgICAgIDogZ2xJZCh0ZXh0dXJlSWQpCisg
ICAgICAgICAgICAsIHBvb2wocG9vbCkKKyAgICAgICAgICAgICwgbG9ja0ZvclJlYWRDb3VudCgw
KQorICAgICAgICAgICAgLCBsb2NrZWRGb3JXcml0ZShmYWxzZSkKKyAgICAgICAgICAgICwgZXh0
ZXJuYWwoZmFsc2UpCisgICAgICAgICAgICAsIGV4cG9ydGVkKGZhbHNlKQorICAgICAgICAgICAg
LCBzaXplKHNpemUpCisgICAgICAgICAgICAsIGZvcm1hdChmb3JtYXQpCisgICAgICAgIHsgfQog
ICAgICAgICB1bnNpZ25lZCBnbElkOwogICAgICAgICBpbnQgcG9vbDsKICAgICAgICAgaW50IGxv
Y2tGb3JSZWFkQ291bnQ7CiAgICAgICAgIGJvb2wgbG9ja2VkRm9yV3JpdGU7CiAgICAgICAgIGJv
b2wgZXh0ZXJuYWw7CisgICAgICAgIGJvb2wgZXhwb3J0ZWQ7CiAgICAgICAgIEludFNpemUgc2l6
ZTsKICAgICAgICAgR0MzRGVudW0gZm9ybWF0OwogICAgIH07CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlc291cmNlSWQsIFJlc291cmNlPiBSZXNvdXJjZU1hcDsKKyAgICBzdHJ1Y3QgQ2hpbGQgewor
ICAgICAgICBpbnQgcG9vbDsKKyAgICAgICAgUmVzb3VyY2VJZE1hcCBjaGlsZFRvUGFyZW50TWFw
OworICAgICAgICBSZXNvdXJjZUlkTWFwIHBhcmVudFRvQ2hpbGRNYXA7CisgICAgfTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBDaGlsZD4gQ2hpbGRNYXA7CiAKICAgICBleHBsaWNpdCBDQ1Jl
c291cmNlUHJvdmlkZXIoQ0NHcmFwaGljc0NvbnRleHQqKTsKICAgICBib29sIGluaXRpYWxpemUo
KTsKQEAgLTExNiw5ICsyMDAsMTYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBsb2NrRm9yUmVh
ZChSZXNvdXJjZUlkKTsKICAgICB2b2lkIHVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCk7CiAKKyAg
ICBib29sIHRyYW5zZmVyUmVzb3VyY2UoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIFJl
c291cmNlSWQsIFRyYW5zZmVyYWJsZVJlc291cmNlKik7CisgICAgdm9pZCB0cmltTWFpbGJveERl
cXVlKCk7CisKICAgICBDQ0dyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwogICAgIFJlc291cmNl
SWQgbV9uZXh0SWQ7CiAgICAgUmVzb3VyY2VNYXAgbV9yZXNvdXJjZXM7CisgICAgaW50IG1fbmV4
dENoaWxkOworICAgIENoaWxkTWFwIG1fY2hpbGRyZW47CisKKyAgICBEZXF1ZTxNYWlsYm94PiBt
X21haWxib3hlczsKIAogICAgIGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4dDsKICAgICBib29s
IG1fdXNlVGV4dHVyZVVzYWdlSGludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwCmluZGV4IDIyOGEyMDBjNDRlOTVk
YWM2ZDA1NGQ4ZWQwYzhiMjVhMjhlZjQ3ZTYuLmU4NTJkNmIwN2FiOTU3OWQzYjM1YmQ1NGZjZGY2
OTk5N2M0OWNjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NS
ZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1Jlc291cmNlUHJvdmlkZXJUZXN0LmNwcApAQCAtNDIsOSArNDIsOTggQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIHsKIAorc2l6ZV90IHRleHR1cmVTaXplKGNvbnN0
IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3JtYXQpCit7CisgICAgdW5zaWduZWQgaW50IGNv
bXBvbmVudHNQZXJQaXhlbCA9IDQ7CisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50
ID0gMTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0
ZXJzKGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRz
UGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCk7CisgICAgcmV0dXJuIHNpemUud2lkdGgoKSAq
IHNpemUuaGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsK
K30KKworc3RydWN0IFRleHR1cmUgeworICAgIFRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
V0dDM0RlbnVtIGZvcm1hdCkKKyAgICAgICAgOiBzaXplKHNpemUpCisgICAgICAgICwgZm9ybWF0
KGZvcm1hdCkKKyAgICAgICAgLCBkYXRhKGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbdGV4dHVy
ZVNpemUoc2l6ZSwgZm9ybWF0KV0pKQorICAgIHsKKyAgICB9CisKKyAgICBJbnRTaXplIHNpemU7
CisgICAgV0dDM0RlbnVtIGZvcm1hdDsKKyAgICBPd25BcnJheVB0cjx1aW50OF90PiBkYXRhOwor
fTsKKworLy8gU2hhcmVkIGRhdGEgYmV0d2VlbiBtdWx0aXBsZSBSZXNvdXJjZVByb3ZpZGVyQ29u
dGV4dC4gVGhpcyBjb250YWlucyBtYWlsYm94CisvLyBjb250ZW50cyBhcyB3ZWxsIGFzIGluZm9y
bWF0aW9uIGFib3V0IHN5bmMgcG9pbnRzLgorY2xhc3MgQ29udGV4dFNoYXJlZERhdGEgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbnRleHRTaGFyZWREYXRhPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgQ29udGV4dFNoYXJlZERhdGEoKSk7IH0KKworICAgIHVuc2ln
bmVkIGluc2VydFN5bmNQb2ludCgpIHsgcmV0dXJuIG1fbmV4dFN5bmNQb2ludCsrOyB9CisKKyAg
ICB2b2lkIGdlbk1haWxib3goV0dDM0RieXRlKiBtYWlsYm94KQorICAgIHsKKyAgICAgICAgbWVt
c2V0KG1haWxib3gsIDAsIHNpemVvZihXR0MzRGJ5dGVbNjRdKSk7CisgICAgICAgIG1lbWNweSht
YWlsYm94LCAmbV9uZXh0TWFpbEJveCwgc2l6ZW9mKG1fbmV4dE1haWxCb3gpKTsKKyAgICAgICAg
KyttX25leHRNYWlsQm94OworICAgIH0KKworICAgIHZvaWQgcHJvZHVjZVRleHR1cmUoY29uc3Qg
V0dDM0RieXRlKiBtYWlsYm94TmFtZSwgdW5zaWduZWQgc3luY1BvaW50LCBQYXNzT3duUHRyPFRl
eHR1cmU+IHRleHR1cmUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBtYWlsYm94ID0gMDsKKyAg
ICAgICAgbWVtY3B5KCZtYWlsYm94LCBtYWlsYm94TmFtZSwgc2l6ZW9mKG1haWxib3gpKTsKKyAg
ICAgICAgQVNTRVJUKG1haWxib3ggJiYgbWFpbGJveCA8IG1fbmV4dE1haWxCb3gpOworICAgICAg
ICBtX3RleHR1cmVzLnNldChtYWlsYm94LCB0ZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKG1fc3lu
Y1BvaW50Rm9yTWFpbGJveC5nZXQobWFpbGJveCkgPCBzeW5jUG9pbnQpOworICAgICAgICBtX3N5
bmNQb2ludEZvck1haWxib3guc2V0KG1haWxib3gsIHN5bmNQb2ludCk7CisgICAgfQorCisgICAg
UGFzc093blB0cjxUZXh0dXJlPiBjb25zdW1lVGV4dHVyZShjb25zdCBXR0MzRGJ5dGUqIG1haWxi
b3hOYW1lLCB1bnNpZ25lZCBzeW5jUG9pbnQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBtYWls
Ym94ID0gMDsKKyAgICAgICAgbWVtY3B5KCZtYWlsYm94LCBtYWlsYm94TmFtZSwgc2l6ZW9mKG1h
aWxib3gpKTsKKyAgICAgICAgQVNTRVJUKG1haWxib3ggJiYgbWFpbGJveCA8IG1fbmV4dE1haWxC
b3gpOworCisgICAgICAgIC8vIElmIHRoZSBsYXRlc3Qgc3luYyBwb2ludCB0aGUgY29udGV4dCBo
YXMgd2FpdGVkIG9uIGlzIGJlZm9yZSB0aGUgc3luYworICAgICAgICAvLyBwb2ludCBmb3Igd2hl
biB0aGUgbWFpbGJveCB3YXMgc2V0LCBwcmV0ZW5kIHdlIG5ldmVyIHNhdyB0aGF0CisgICAgICAg
IC8vIHByb2R1Y2VUZXh0dXJlLgorICAgICAgICBpZiAobV9zeW5jUG9pbnRGb3JNYWlsYm94Lmdl
dChtYWlsYm94KSA8IHN5bmNQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gbV90ZXh0dXJlcy50YWtlKG1haWxib3gpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBDb250ZXh0U2hhcmVkRGF0YSgpCisgICAgICAgIDogbV9uZXh0U3luY1BvaW50KDEpCisg
ICAgICAgICwgbV9uZXh0TWFpbEJveCgxKQorICAgIHsgfQorCisgICAgdW5zaWduZWQgbV9uZXh0
U3luY1BvaW50OworICAgIHVuc2lnbmVkIG1fbmV4dE1haWxCb3g7CisgICAgdHlwZWRlZiBIYXNo
TWFwPHVuc2lnbmVkLCBPd25QdHI8VGV4dHVyZT4gPiBUZXh0dXJlTWFwOworICAgIFRleHR1cmVN
YXAgbV90ZXh0dXJlczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9zeW5jUG9p
bnRGb3JNYWlsYm94OworfTsKKwogY2xhc3MgUmVzb3VyY2VQcm92aWRlckNvbnRleHQgOiBwdWJs
aWMgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8UmVzb3VyY2VQcm92aWRlckNvbnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dChBdHRyaWJ1dGVzKCkpKTsgfQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlc291cmNlUHJvdmlkZXJDb250ZXh0PiBjcmVhdGUoQ29u
dGV4dFNoYXJlZERhdGEqIHNoYXJlZERhdGEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZXNvdXJj
ZVByb3ZpZGVyQ29udGV4dChBdHRyaWJ1dGVzKCksIHNoYXJlZERhdGEpKTsgfQorCisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnNlcnRTeW5jUG9pbnQoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c3luY1BvaW50ID0gbV9zaGFyZWREYXRhLT5pbnNlcnRTeW5jUG9pbnQoKTsKKyAgICAgICAgLy8g
Q29tbWl0IHRoZSBwcm9kdWNlVGV4dHVyZUNIUk9NSVVNIGNhbGxzIGF0IHRoaXMgcG9pbnQsIHNv
IHRoYXQKKyAgICAgICAgLy8gdGhleSdyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN5bmMgcG9pbnQu
CisgICAgICAgIGZvciAoUGVuZGluZ1Byb2R1Y2VUZXh0dXJlTGlzdDo6aXRlcmF0b3IgaXQgPSBt
X3BlbmRpbmdQcm9kdWNlVGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nUHJvZHVjZVRl
eHR1cmVzLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgbV9zaGFyZWREYXRhLT5wcm9kdWNlVGV4
dHVyZSgoKml0KS0+bWFpbGJveCwgc3luY1BvaW50LCAoKml0KS0+dGV4dHVyZS5yZWxlYXNlKCkp
OworICAgICAgICBtX3BlbmRpbmdQcm9kdWNlVGV4dHVyZXMuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuIHN5bmNQb2ludDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2FpdFN5bmNQb2ludCh1
bnNpZ25lZCBzeW5jUG9pbnQpCisgICAgeworICAgICAgICBtX2xhc3RXYWl0ZWRTeW5jUG9pbnQg
PSBzdGQ6Om1heChzeW5jUG9pbnQsIG1fbGFzdFdhaXRlZFN5bmNQb2ludCk7CisgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRUZXh0dXJlKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgdGV4
dHVyZSkKICAgICB7CkBAIC0xMTMsNiArMjAyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgc2V0UGl4
ZWxzKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CiAgICAgfQogCisg
ICAgdmlydHVhbCB2b2lkIGdlbk1haWxib3hDSFJPTUlVTShXR0MzRGJ5dGUqIG1haWxib3gpIHsg
cmV0dXJuIG1fc2hhcmVkRGF0YS0+Z2VuTWFpbGJveChtYWlsYm94KTsgfQorICAgIHZpcnR1YWwg
dm9pZCBwcm9kdWNlVGV4dHVyZUNIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIGNvbnN0IFdHQzNE
Ynl0ZSogbWFpbGJveCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsK
KyAgICAgICAgQVNTRVJUKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7
CisKKyAgICAgICAgLy8gRGVsYXkgbW92aW5kIHRoZSB0ZXh0dXJlIGludG8gdGhlIG1haWxib3gg
dW50aWwgdGhlIG5leHQKKyAgICAgICAgLy8gaW5zZXJ0U3luY1BvaW50LCBzbyB0aGF0IGl0IGlz
IG5vdCB2aXNpYmxlIHRvIG90aGVyIGNvbnRleHRzIHRoYXQKKyAgICAgICAgLy8gaGF2ZW4ndCB3
YWl0ZWQgb24gdGhhdCBzeW5jIHBvaW50LgorICAgICAgICBPd25QdHI8UGVuZGluZ1Byb2R1Y2VU
ZXh0dXJlPiBwZW5kaW5nID0gYWRvcHRQdHIobmV3IFBlbmRpbmdQcm9kdWNlVGV4dHVyZSk7Cisg
ICAgICAgIG1lbWNweShwZW5kaW5nLT5tYWlsYm94LCBtYWlsYm94LCBzaXplb2YocGVuZGluZy0+
bWFpbGJveCkpOworICAgICAgICBwZW5kaW5nLT50ZXh0dXJlID0gbV90ZXh0dXJlcy50YWtlKG1f
Y3VycmVudFRleHR1cmUpOworICAgICAgICBtX3RleHR1cmVzLnNldChtX2N1cnJlbnRUZXh0dXJl
LCBudWxscHRyKTsKKyAgICAgICAgbV9wZW5kaW5nUHJvZHVjZVRleHR1cmVzLmFwcGVuZChwZW5k
aW5nLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVUZXh0dXJl
Q0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgY29uc3QgV0dDM0RieXRlKiBtYWlsYm94KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudFRleHR1cmUpOworICAgICAgICBBU1NFUlQodGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKKyAgICAgICAgbV90ZXh0dXJl
cy5zZXQobV9jdXJyZW50VGV4dHVyZSwgbV9zaGFyZWREYXRhLT5jb25zdW1lVGV4dHVyZShtYWls
Ym94LCBtX2xhc3RXYWl0ZWRTeW5jUG9pbnQpKTsKKyAgICB9CisKICAgICB2b2lkIGdldFBpeGVs
cyhjb25zdCBJbnRTaXplJiBzaXplLCBXR0MzRGVudW0gZm9ybWF0LCB1aW50OF90KiBwaXhlbHMp
CiAgICAgewogICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CkBAIC0xMjgsMzQgKzI0
MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3RleHR1cmVzLnNpemUoKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgc2l6ZV90IHRleHR1cmVTaXplKGNvbnN0IEludFNpemUmIHNpemUsIFdH
QzNEZW51bSBmb3JtYXQpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1Bl
clBpeGVsID0gNDsKLSAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50ID0gMTsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVy
cyhmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAmY29tcG9uZW50c1Bl
clBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpOwotICAgICAgICByZXR1cm4gc2l6ZS53aWR0aCgp
ICogc2l6ZS5oZWlnaHQoKSAqIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50
OwotICAgIH0KLQogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IFJlc291cmNlUHJvdmlkZXJDb250
ZXh0KGNvbnN0IEF0dHJpYnV0ZXMmIGF0dHJzKQorICAgIFJlc291cmNlUHJvdmlkZXJDb250ZXh0
KGNvbnN0IEF0dHJpYnV0ZXMmIGF0dHJzLCBDb250ZXh0U2hhcmVkRGF0YSogc2hhcmVkRGF0YSkK
ICAgICAgICAgOiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEKGF0dHJzKQorICAg
ICAgICAsIG1fc2hhcmVkRGF0YShzaGFyZWREYXRhKQogICAgICAgICAsIG1fY3VycmVudFRleHR1
cmUoMCkKKyAgICAgICAgLCBtX2xhc3RXYWl0ZWRTeW5jUG9pbnQoMCkKICAgICB7IH0KIAogcHJp
dmF0ZToKLSAgICBzdHJ1Y3QgVGV4dHVyZSB7Ci0gICAgICAgIFRleHR1cmUoY29uc3QgSW50U2l6
ZSYgc2l6ZV8sIFdHQzNEZW51bSBmb3JtYXRfKQotICAgICAgICAgICAgOiBzaXplKHNpemVfKQot
ICAgICAgICAgICAgLCBmb3JtYXQoZm9ybWF0XykKLSAgICAgICAgICAgICwgZGF0YShhZG9wdEFy
cmF5UHRyKG5ldyB1aW50OF90W3RleHR1cmVTaXplKHNpemUsIGZvcm1hdCldKSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgSW50U2l6ZSBzaXplOwotICAgICAgICBXR0MzRGVudW0g
Zm9ybWF0OwotICAgICAgICBPd25BcnJheVB0cjx1aW50OF90PiBkYXRhOwotICAgIH07Ci0KICAg
ICB2b2lkIGFsbG9jYXRlVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplLCBXR0MzRGVudW0gZm9y
bWF0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fY3VycmVudFRleHR1cmUpOwpAQCAtMTgyLDE0
ICsyNzUsMjMgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViR0xJ
ZCwgT3duUHRyPFRleHR1cmU+ID4gVGV4dHVyZU1hcDsKKyAgICBzdHJ1Y3QgUGVuZGluZ1Byb2R1
Y2VUZXh0dXJlIHsKKyAgICAgICAgV0dDM0RieXRlIG1haWxib3hbNjRdOworICAgICAgICBPd25Q
dHI8VGV4dHVyZT4gdGV4dHVyZTsKKyAgICB9OworICAgIHR5cGVkZWYgRGVxdWU8T3duUHRyPFBl
bmRpbmdQcm9kdWNlVGV4dHVyZT4gPiBQZW5kaW5nUHJvZHVjZVRleHR1cmVMaXN0OworICAgIENv
bnRleHRTaGFyZWREYXRhKiBtX3NoYXJlZERhdGE7CiAgICAgV2ViR0xJZCBtX2N1cnJlbnRUZXh0
dXJlOwogICAgIFRleHR1cmVNYXAgbV90ZXh0dXJlczsKKyAgICB1bnNpZ25lZCBtX2xhc3RXYWl0
ZWRTeW5jUG9pbnQ7CisgICAgUGVuZGluZ1Byb2R1Y2VUZXh0dXJlTGlzdCBtX3BlbmRpbmdQcm9k
dWNlVGV4dHVyZXM7CiB9OwogCiBjbGFzcyBDQ1Jlc291cmNlUHJvdmlkZXJUZXN0IDogcHVibGlj
IHRlc3Rpbmc6OlRlc3QgewogcHVibGljOgogICAgIENDUmVzb3VyY2VQcm92aWRlclRlc3QoKQot
ICAgICAgICA6IG1fY29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6OmNyZWF0
ZShSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKCkpKQorICAgICAgICA6IG1fc2hhcmVk
RGF0YShDb250ZXh0U2hhcmVkRGF0YTo6Y3JlYXRlKCkpCisgICAgICAgICwgbV9jb250ZXh0KEZh
a2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRlKFJlc291cmNlUHJvdmlkZXJDb250
ZXh0OjpjcmVhdGUobV9zaGFyZWREYXRhLmdldCgpKSkpCiAgICAgICAgICwgbV9yZXNvdXJjZVBy
b3ZpZGVyKENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSkpCiAgICAg
ewogICAgIH0KQEAgLTIwNiw2ICszMDgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKKyAgICBPd25QdHI8Q29udGV4dFNo
YXJlZERhdGE+IG1fc2hhcmVkRGF0YTsKICAgICBPd25QdHI8Q0NHcmFwaGljc0NvbnRleHQ+IG1f
Y29udGV4dDsKICAgICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBtX3Jlc291cmNlUHJvdmlk
ZXI7CiB9OwpAQCAtMjE1LDcgKzMxOCw3IEBAIFRFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0
LCBCYXNpYykKICAgICBJbnRTaXplIHNpemUoMSwgMSk7CiAgICAgV0dDM0RlbnVtIGZvcm1hdCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwogICAgIGludCBwb29sID0gMTsKLSAgICBzaXplX3Qg
cGl4ZWxTaXplID0gUmVzb3VyY2VQcm92aWRlckNvbnRleHQ6OnRleHR1cmVTaXplKHNpemUsIGZv
cm1hdCk7CisgICAgc2l6ZV90IHBpeGVsU2l6ZSA9IHRleHR1cmVTaXplKHNpemUsIGZvcm1hdCk7
CiAgICAgQVNTRVJUX0VRKDRVLCBwaXhlbFNpemUpOwogCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkIGlkID0gbV9yZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShwb29s
LCBzaXplLCBmb3JtYXQsIENDUmVzb3VyY2VQcm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsKQEAg
LTI1Niw3ICszNTksNyBAQCBURVNUX0YoQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCwgVXBsb2FkKQog
ICAgIEludFNpemUgc2l6ZSgyLCAyKTsKICAgICBXR0MzRGVudW0gZm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkE7CiAgICAgaW50IHBvb2wgPSAxOwotICAgIHNpemVfdCBwaXhlbFNpemUg
PSBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6dGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KTsKKyAg
ICBzaXplX3QgcGl4ZWxTaXplID0gdGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KTsKICAgICBBU1NF
UlRfRVEoMTZVLCBwaXhlbFNpemUpOwogCiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJj
ZUlkIGlkID0gbV9yZXNvdXJjZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShwb29sLCBzaXplLCBm
b3JtYXQsIENDUmVzb3VyY2VQcm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsKQEAgLTMwMyw0ICs0
MDYsMTE3IEBAIFRFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LCBVcGxvYWQpCiAgICAgbV9y
ZXNvdXJjZVByb3ZpZGVyLT5kZWxldGVSZXNvdXJjZShpZCk7CiB9CiAKK1RFU1RfRihDQ1Jlc291
cmNlUHJvdmlkZXJUZXN0LCBUcmFuc2ZlclJlc291cmNlcykKK3sKKyAgICBPd25QdHI8Q0NHcmFw
aGljc0NvbnRleHQ+IGNoaWxkQ29udGV4dChGYWtlV2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U6
OmNyZWF0ZShSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6Y3JlYXRlKG1fc2hhcmVkRGF0YS5nZXQo
KSkpKTsKKyAgICBPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBjaGlsZFJlc291cmNlUHJvdmlk
ZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUoY2hpbGRDb250ZXh0LmdldCgpKSk7CisKKyAg
ICBJbnRTaXplIHNpemUoMSwgMSk7CisgICAgV0dDM0RlbnVtIGZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOworICAgIGludCBwb29sID0gMTsKKyAgICBzaXplX3QgcGl4ZWxTaXplID0g
dGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KTsKKyAgICBBU1NFUlRfRVEoNFUsIHBpeGVsU2l6ZSk7
CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgaWQxID0gY2hpbGRSZXNvdXJj
ZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShwb29sLCBzaXplLCBmb3JtYXQsIENDUmVzb3VyY2VQ
cm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsKKyAgICB1aW50OF90IGRhdGExWzRdID0gezEsIDIs
IDMsIDR9OworICAgIEludFJlY3QgcmVjdChJbnRQb2ludCgpLCBzaXplKTsKKyAgICBjaGlsZFJl
c291cmNlUHJvdmlkZXItPnVwbG9hZChpZDEsIGRhdGExLCByZWN0LCByZWN0LCBJbnRTaXplKCkp
OworCisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIGlkMiA9IGNoaWxkUmVzb3Vy
Y2VQcm92aWRlci0+Y3JlYXRlUmVzb3VyY2UocG9vbCwgc2l6ZSwgZm9ybWF0LCBDQ1Jlc291cmNl
UHJvdmlkZXI6OlRleHR1cmVVc2FnZUFueSk7CisgICAgdWludDhfdCBkYXRhMls0XSA9IHs1LCA1
LCA1LCA1fTsKKyAgICBjaGlsZFJlc291cmNlUHJvdmlkZXItPnVwbG9hZChpZDIsIGRhdGEyLCBy
ZWN0LCByZWN0LCBJbnRTaXplKCkpOworCisgICAgaW50IGNoaWxkUG9vbCA9IDI7CisgICAgaW50
IGNoaWxkSWQgPSBtX3Jlc291cmNlUHJvdmlkZXItPmNyZWF0ZUNoaWxkKGNoaWxkUG9vbCk7CisK
KyAgICB7CisgICAgICAgIC8vIFRyYW5zZmVyIHNvbWUgcmVzb3VyY2VzIHRvIHRoZSBwYXJlbnQu
CisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZEFycmF5IHJlc291cmNlSWRz
VG9UcmFuc2ZlcjsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVuZChpZDEpOwor
ICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKGlkMik7CisgICAgICAgIENDUmVz
b3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IGxpc3QgPSBjaGlsZFJlc291
cmNlUHJvdmlkZXItPnByZXBhcmVTZW5kVG9QYXJlbnQocmVzb3VyY2VJZHNUb1RyYW5zZmVyKTsK
KyAgICAgICAgRVhQRUNUX05FKDB1LCBsaXN0LnN5bmNQb2ludCk7CisgICAgICAgIEVYUEVDVF9F
USgydSwgbGlzdC5yZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hpbGRS
ZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQxKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGNoaWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMikpOworICAgICAg
ICBtX3Jlc291cmNlUHJvdmlkZXItPnJlY2VpdmVGcm9tQ2hpbGQoY2hpbGRJZCwgbGlzdCk7Cisg
ICAgfQorCisgICAgRVhQRUNUX0VRKDJ1LCBtX3Jlc291cmNlUHJvdmlkZXItPm51bVJlc291cmNl
cygpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcmVzb3VyY2VQcm92aWRlci0+bWFpbGJveENvdW50
KCkpOworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCByZXNvdXJjZU1hcCA9
IG1fcmVzb3VyY2VQcm92aWRlci0+Z2V0Q2hpbGRUb1BhcmVudE1hcChjaGlsZElkKTsKKyAgICBD
Q1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFwcGVkSWQxID0gcmVzb3VyY2VNYXAuZ2V0
KGlkMSk7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkIG1hcHBlZElkMiA9IHJl
c291cmNlTWFwLmdldChpZDIpOworICAgIEVYUEVDVF9ORSgwdSwgbWFwcGVkSWQxKTsKKyAgICBF
WFBFQ1RfTkUoMHUsIG1hcHBlZElkMik7CisgICAgRVhQRUNUX0ZBTFNFKG1fcmVzb3VyY2VQcm92
aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkpOworICAgIEVYUEVDVF9GQUxTRShtX3Jlc291cmNl
UHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDIpKTsKKworICAgIHVpbnQ4X3QgcmVzdWx0WzRd
ID0gezB9OworICAgIGdldFJlc291cmNlUGl4ZWxzKG1hcHBlZElkMSwgc2l6ZSwgZm9ybWF0LCBy
ZXN1bHQpOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0YTEsIHJlc3VsdCwgcGl4ZWxTaXpl
KSk7CisKKyAgICBnZXRSZXNvdXJjZVBpeGVscyhtYXBwZWRJZDIsIHNpemUsIGZvcm1hdCwgcmVz
dWx0KTsKKyAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGRhdGEyLCByZXN1bHQsIHBpeGVsU2l6ZSkp
OworCisgICAgeworICAgICAgICAvLyBDaGVjayB0aGF0IHRyYW5zZmVyaW5nIGFnYWluIHRoZSBz
YW1lIHJlc291cmNlIGZyb20gdGhlIGNoaWxkIHRvIHRoZQorICAgICAgICAvLyBwYXJlbnQgaXMg
YSBub29wLgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWRBcnJheSByZXNv
dXJjZUlkc1RvVHJhbnNmZXI7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQo
aWQxKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxp
c3QgbGlzdCA9IGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb1BhcmVudChyZXNv
dXJjZUlkc1RvVHJhbnNmZXIpOworICAgICAgICBFWFBFQ1RfRVEoMHUsIGxpc3Quc3luY1BvaW50
KTsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBsaXN0LnJlc291cmNlcy5zaXplKCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgcmVzb3VyY2VzIGJhY2sgZnJvbSB0aGUgcGFy
ZW50IHRvIHRoZSBjaGlsZC4KKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlk
QXJyYXkgcmVzb3VyY2VJZHNUb1RyYW5zZmVyOworICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNm
ZXIuYXBwZW5kKG1hcHBlZElkMSk7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBl
bmQobWFwcGVkSWQyKTsKKyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVS
ZXNvdXJjZUxpc3QgbGlzdCA9IG1fcmVzb3VyY2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb0NoaWxk
KGNoaWxkSWQsIHJlc291cmNlSWRzVG9UcmFuc2Zlcik7CisgICAgICAgIEVYUEVDVF9ORSgwdSwg
bGlzdC5zeW5jUG9pbnQpOworICAgICAgICBFWFBFQ1RfRVEoMnUsIGxpc3QucmVzb3VyY2VzLnNp
emUoKSk7CisgICAgICAgIGNoaWxkUmVzb3VyY2VQcm92aWRlci0+cmVjZWl2ZUZyb21QYXJlbnQo
bGlzdCk7CisgICAgfQorICAgIEVYUEVDVF9FUSgwdSwgbV9yZXNvdXJjZVByb3ZpZGVyLT5tYWls
Ym94Q291bnQoKSk7CisgICAgRVhQRUNUX0VRKDJ1LCBjaGlsZFJlc291cmNlUHJvdmlkZXItPm1h
aWxib3hDb3VudCgpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5p
blVzZUJ5Q29uc3VtZXIoaWQxKSk7CisgICAgRVhQRUNUX0ZBTFNFKGNoaWxkUmVzb3VyY2VQcm92
aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMikpOworCisgICAgUmVzb3VyY2VQcm92aWRlckNvbnRl
eHQqIGNoaWxkQ29udGV4dDNEID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VQcm92aWRlckNvbnRleHQq
PihjaGlsZENvbnRleHQtPmNvbnRleHQzRCgpKTsKKyAgICB7CisgICAgICAgIENDU2NvcGVkTG9j
a1Jlc291cmNlRm9yUmVhZCBsb2NrKGNoaWxkUmVzb3VyY2VQcm92aWRlci5nZXQoKSwgaWQxKTsK
KyAgICAgICAgQVNTRVJUX05FKDBVLCBsb2NrLnRleHR1cmVJZCgpKTsKKyAgICAgICAgY2hpbGRD
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBsb2Nr
LnRleHR1cmVJZCgpKTsKKyAgICAgICAgY2hpbGRDb250ZXh0M0QtPmdldFBpeGVscyhzaXplLCBm
b3JtYXQsIHJlc3VsdCk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0YTEsIHJlc3Vs
dCwgcGl4ZWxTaXplKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgQ0NTY29wZWRMb2NrUmVzb3Vy
Y2VGb3JSZWFkIGxvY2soY2hpbGRSZXNvdXJjZVByb3ZpZGVyLmdldCgpLCBpZDIpOworICAgICAg
ICBBU1NFUlRfTkUoMFUsIGxvY2sudGV4dHVyZUlkKCkpOworICAgICAgICBjaGlsZENvbnRleHQz
RC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxvY2sudGV4dHVy
ZUlkKCkpOworICAgICAgICBjaGlsZENvbnRleHQzRC0+Z2V0UGl4ZWxzKHNpemUsIGZvcm1hdCwg
cmVzdWx0KTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChkYXRhMiwgcmVzdWx0LCBwaXhl
bFNpemUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIFRyYW5zZmVyIHJlc291cmNlcyB0
byB0aGUgcGFyZW50IGFnYWluLgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNl
SWRBcnJheSByZXNvdXJjZUlkc1RvVHJhbnNmZXI7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFu
c2Zlci5hcHBlbmQoaWQxKTsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVuZChp
ZDIpOworICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlz
dCBsaXN0ID0gY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5wcmVwYXJlU2VuZFRvUGFyZW50KHJlc291
cmNlSWRzVG9UcmFuc2Zlcik7CisgICAgICAgIEVYUEVDVF9ORSgwdSwgbGlzdC5zeW5jUG9pbnQp
OworICAgICAgICBFWFBFQ1RfRVEoMnUsIGxpc3QucmVzb3VyY2VzLnNpemUoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGNoaWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMSkp
OworICAgICAgICBFWFBFQ1RfVFJVRShjaGlsZFJlc291cmNlUHJvdmlkZXItPmluVXNlQnlDb25z
dW1lcihpZDIpKTsKKyAgICAgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5yZWNlaXZlRnJvbUNoaWxk
KGNoaWxkSWQsIGxpc3QpOworICAgIH0KKworICAgIEVYUEVDVF9FUSgydSwgbV9yZXNvdXJjZVBy
b3ZpZGVyLT5udW1SZXNvdXJjZXMoKSk7CisgICAgbV9yZXNvdXJjZVByb3ZpZGVyLT5kZXN0cm95
Q2hpbGQoY2hpbGRJZCk7CisgICAgRVhQRUNUX0VRKDB1LCBtX3Jlc291cmNlUHJvdmlkZXItPm51
bVJlc291cmNlcygpKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcmVzb3VyY2VQcm92aWRlci0+bWFp
bGJveENvdW50KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158984</attachid>
            <date>2012-08-16 19:55:39 -0700</date>
            <delta_ts>2012-08-16 21:25:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93524-20120816195503.patch</filename>
            <type>text/plain</type>
            <size>33721</size>
            <attacher name="Antoine Labour">piman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE1OWJhZGZkYmNkMTJk
MGZmMzU5ZTQ4OTY0ZmY4MTM4NmEwZjNiZC4uZGEyOGU0ZjlkYWE3MzFjNzQ4NDA2M2ZkNTUwN2Y2
YTExYzlkOTJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA4LTA4ICBBbnRv
aW5lIExhYm91ciAgPHBpbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFk
ZCByZXNvdXJjZSB0cmFuc2ZlciBmdW5jdGlvbnMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzUyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFRoaXMgYWRkcyBtZXRo
b2RzIHRvIENDUmVzb3VyY2VQcm92aWRlciB0byBiZSBhYmxlIHRvIHRyYW5zcG9ydAorICAgICAg
ICByZXNvdXJjZXMgZnJvbSBhIGNoaWxkIHRvIGEgcGFyZW50LgorCisgICAgICAgIEFkZGVkIHRl
c3QgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmluVXNlQnlDb25zdW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2VGcm9tRXh0ZXJuYWxUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Q0NSZXNvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6
OmRlc3Ryb3lDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNlUHJvdmlkZXI6Omdl
dENoaWxkVG9QYXJlbnRNYXApOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZXNvdXJjZVByb3ZpZGVy
OjpwcmVwYXJlU2VuZFRvUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQcm92
aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3VyY2VQ
cm92aWRlcjo6cmVjZWl2ZUZyb21DaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jlc291cmNl
UHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVzb3Vy
Y2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChNYWlsYm94KToK
KyAgICAgICAgKFRyYW5zZmVyYWJsZVJlc291cmNlKToKKyAgICAgICAgKFRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoUmVz
b3VyY2UpOgorICAgICAgICAoQ2hpbGQpOgorCiAyMDEyLTA4LTE2ICBBcm5hdWQgUmVuZXZpZXIg
IDxhLnJlbmV2aWVyQHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVXBkYXRlIFR5cGVkQXJy
YXlzIHRvIHRocm93IFJhbmdlRXJyb3Igb3Igc2ltaWxhciBpbnN0ZWFkIG9mIElOREVYX1NJWkVf
RVJSCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc5MmYxMDRlNjA4YmEwNTIxNmM5MjA3
NTY2YzYxMjA5Y2RmOWQyNWYuLjU5MDI2MjMwZmU1Yzk0NDNiOTY1NjcwZDM3NTBhNWQyYjI3NmQz
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTItMDgt
MDggIEFudG9pbmUgTGFib3VyICA8cGltYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQWRkIHJlc291cmNlIHRyYW5zZmVyIGZ1bmN0aW9ucyB0byBDQ1Jlc291cmNlUHJvdmlk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNTI0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgVGhpcyBh
ZGRzIG1ldGhvZHMgdG8gQ0NSZXNvdXJjZVByb3ZpZGVyIHRvIGJlIGFibGUgdG8gdHJhbnNwb3J0
CisgICAgICAgIHJlc291cmNlcyBmcm9tIGEgY2hpbGQgdG8gYSBwYXJlbnQuCisKKyAgICAgICAg
QWRkZWQgdGVzdCB0byBDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LgorCisgICAgICAgICogdGVzdHMv
Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OnRleHR1cmVTaXpl
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlRleHR1cmU6OlRleHR1cmUp
OgorICAgICAgICAoVGV4dHVyZSk6CisgICAgICAgIChDb250ZXh0U2hhcmVkRGF0YSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvbnRleHRTaGFyZWREYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZXh0U2hhcmVkRGF0YTo6aW5zZXJ0U3luY1BvaW50KToKKyAgICAgICAgKFdlYktpdDo6
Q29udGV4dFNoYXJlZERhdGE6Omdlbk1haWxib3gpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0
U2hhcmVkRGF0YTo6cHJvZHVjZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hh
cmVkRGF0YTo6Y29uc3VtZVRleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0U2hhcmVk
RGF0YTo6Q29udGV4dFNoYXJlZERhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZVByb3Zp
ZGVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFJlc291cmNlUHJvdmlkZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6Omluc2VydFN5bmNQb2lu
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojp3YWl0U3luY1Bv
aW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQ6Omdlbk1haWxi
b3hDSFJPTUlVTSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojpw
cm9kdWNlVGV4dHVyZUNIUk9NSVVNKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VQcm92aWRl
ckNvbnRleHQ6OmNvbnN1bWVUZXh0dXJlQ0hST01JVU0pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZVByb3ZpZGVyQ29udGV4dDo6UmVzb3VyY2VQcm92aWRlckNvbnRleHQpOgorICAgICAgICAo
UGVuZGluZ1Byb2R1Y2VUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6Q0NSZXNvdXJjZVByb3Zp
ZGVyVGVzdDo6Q0NSZXNvdXJjZVByb3ZpZGVyVGVzdCk6CisgICAgICAgIChDQ1Jlc291cmNlUHJv
dmlkZXJUZXN0KToKKyAgICAgICAgKFdlYktpdDo6VEVTVF9GKToKKwogMjAxMi0wOC0xNiAgQWxl
eGFuZHJlIEVsaWFzICA8YWVsaWFzQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBS
ZXBsYWNlIGRlc3RSZWN0IHdpdGggZGVzdE9mZnNldCBpbiB0ZXh0dXJlIHVwbG9hZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVzb3VyY2VQcm92aWRlci5jcHAKaW5kZXggZDIxYzRiNWRjNDMyY2I1NDYzNTY2
Y2ZhMDA5YmJhNWYzNWEyMGZhNy4uOGE5ZTI5MGFlM2QyNWY1M2UxMTc5Yjg4ZjhmMDJlODAzYTc3
YzYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuY3BwCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlU3ViSW1hZ2UuaCIKICNpbmNsdWRlICJjYy9D
Q1Byb3h5LmgiCiAjaW5jbHVkZSA8cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogdXNpbmcgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RDsKIApAQCAtODIsNyArODMsNyBAQCBib29sIENDUmVzb3VyY2VQcm92aWRlcjo6aW5Vc2VCeUNv
bnN1bWVyKFJlc291cmNlSWQgaWQpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgp
KTsKICAgICBSZXNvdXJjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5maW5kKGlkKTsK
ICAgICBBU1NFUlQoaXQgIT0gbV9yZXNvdXJjZXMuZW5kKCkpOwotICAgIHJldHVybiAhIWl0LT5z
ZWNvbmQubG9ja0ZvclJlYWRDb3VudDsKKyAgICByZXR1cm4gISFpdC0+c2Vjb25kLmxvY2tGb3JS
ZWFkQ291bnQgfHwgaXQtPnNlY29uZC5leHBvcnRlZDsKIH0KIAogQ0NSZXNvdXJjZVByb3ZpZGVy
OjpSZXNvdXJjZUlkIENDUmVzb3VyY2VQcm92aWRlcjo6Y3JlYXRlUmVzb3VyY2UoaW50IHBvb2ws
IGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIGZvcm1hdCwgVGV4dHVyZVVzYWdlSGludCBo
aW50KQpAQCAtMTA5LDcgKzExMCw3IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBD
Q1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZVJlc291cmNlKGludCBwb29sLCBjb25zCiAgICAgfSBl
bHNlCiAgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCksIDAsIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsK
ICAgICBSZXNvdXJjZUlkIGlkID0gbV9uZXh0SWQrKzsKLSAgICBSZXNvdXJjZSByZXNvdXJjZSA9
IHt0ZXh0dXJlSWQsIHBvb2wsIDAsIGZhbHNlLCBmYWxzZSwgc2l6ZSwgZm9ybWF0fTsKKyAgICBS
ZXNvdXJjZSByZXNvdXJjZSh0ZXh0dXJlSWQsIHBvb2wsIHNpemUsIGZvcm1hdCk7CiAgICAgbV9y
ZXNvdXJjZXMuYWRkKGlkLCByZXNvdXJjZSk7CiAgICAgcmV0dXJuIGlkOwogfQpAQCAtMTE4LDcg
KzExOSw5IEBAIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBDQ1Jlc291cmNlUHJvdmlk
ZXI6OmNyZWF0ZVJlc291cmNlRnJvbUV4dGVybmFsVGV4CiB7CiAgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKICAgICBSZXNvdXJjZUlkIGlkID0gbV9uZXh0SWQrKzsKLSAgICBS
ZXNvdXJjZSByZXNvdXJjZSA9IHt0ZXh0dXJlSWQsIDAsIDAsIGZhbHNlLCB0cnVlLCBJbnRTaXpl
KCksIDB9OworICAgIFJlc291cmNlIHJlc291cmNlOworICAgIHJlc291cmNlLmdsSWQgPSB0ZXh0
dXJlSWQ7CisgICAgcmVzb3VyY2UuZXh0ZXJuYWwgPSB0cnVlOwogICAgIG1fcmVzb3VyY2VzLmFk
ZChpZCwgcmVzb3VyY2UpOwogICAgIHJldHVybiBpZDsKIH0KQEAgLTE0MSwxMiArMTQ0LDEyIEBA
IHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjpkZWxldGVSZXNvdXJjZShSZXNvdXJjZUlkIGlkKQog
dm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlbGV0ZU93bmVkUmVzb3VyY2VzKGludCBwb29sKQog
ewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7Ci0gICAgVmVjdG9yPFJlc291
cmNlSWQ+IHRvRGVsZXRlOworICAgIFJlc291cmNlSWRBcnJheSB0b0RlbGV0ZTsKICAgICBmb3Ig
KFJlc291cmNlTWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1f
cmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+c2Vjb25kLnBvb2wgPT0g
cG9vbCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCkKICAgICAgICAgICAgIHRvRGVsZXRlLmFwcGVu
ZChpdC0+Zmlyc3QpOwogICAgIH0KLSAgICBmb3IgKFZlY3RvcjxSZXNvdXJjZUlkPjo6aXRlcmF0
b3IgaXQgPSB0b0RlbGV0ZS5iZWdpbigpOyBpdCAhPSB0b0RlbGV0ZS5lbmQoKTsgKytpdCkKKyAg
ICBmb3IgKFJlc291cmNlSWRBcnJheTo6aXRlcmF0b3IgaXQgPSB0b0RlbGV0ZS5iZWdpbigpOyBp
dCAhPSB0b0RlbGV0ZS5lbmQoKTsgKytpdCkKICAgICAgICAgZGVsZXRlUmVzb3VyY2UoKml0KTsK
IH0KIApAQCAtMjI4LDYgKzIzMSw3IEBAIHZvaWQgQ0NSZXNvdXJjZVByb3ZpZGVyOjp1bmxvY2tG
b3JSZWFkKFJlc291cmNlSWQgaWQpCiBDQ1Jlc291cmNlUHJvdmlkZXI6OkNDUmVzb3VyY2VQcm92
aWRlcihDQ0dyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAgICA6IG1fY29udGV4dChjb250ZXh0
KQogICAgICwgbV9uZXh0SWQoMSkKKyAgICAsIG1fbmV4dENoaWxkKDEpCiAgICAgLCBtX3VzZVRl
eHR1cmVTdG9yYWdlRXh0KGZhbHNlKQogICAgICwgbV91c2VUZXh0dXJlVXNhZ2VIaW50KGZhbHNl
KQogICAgICwgbV91c2VTaGFsbG93Rmx1c2goZmFsc2UpCkBAIC0yNjQsNCArMjY4LDE3NyBAQCBi
b29sIENDUmVzb3VyY2VQcm92aWRlcjo6aW5pdGlhbGl6ZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2ludCBDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZUNoaWxkKGludCBwb29sKQoreworICAg
IEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQ2hpbGQgY2hpbGRJbmZvOwor
ICAgIGNoaWxkSW5mby5wb29sID0gcG9vbDsKKyAgICBpbnQgY2hpbGQgPSBtX25leHRDaGlsZCsr
OworICAgIG1fY2hpbGRyZW4uYWRkKGNoaWxkLCBjaGlsZEluZm8pOworICAgIHJldHVybiBjaGls
ZDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OmRlc3Ryb3lDaGlsZChpbnQgY2hpbGQp
Cit7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBDaGlsZE1hcDo6
aXRlcmF0b3IgaXQgPSBtX2NoaWxkcmVuLmZpbmQoY2hpbGQpOworICAgIEFTU0VSVChpdCAhPSBt
X2NoaWxkcmVuLmVuZCgpKTsKKyAgICBkZWxldGVPd25lZFJlc291cmNlcyhpdC0+c2Vjb25kLnBv
b2wpOworICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGl0KTsKKyAgICB0cmltTWFpbGJveERlcXVlKCk7
Cit9CisKK2NvbnN0IENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZE1hcCYgQ0NSZXNvdXJj
ZVByb3ZpZGVyOjpnZXRDaGlsZFRvUGFyZW50TWFwKGludCBjaGlsZCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIENoaWxkTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fY2hp
bGRyZW4uZW5kKCkpOworICAgIHJldHVybiBpdC0+c2Vjb25kLmNoaWxkVG9QYXJlbnRNYXA7Cit9
CisKK0NDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IENDUmVzb3Vy
Y2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb1BhcmVudChjb25zdCBSZXNvdXJjZUlkQXJyYXkmIHJl
c291cmNlcykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFRy
YW5zZmVyYWJsZVJlc291cmNlTGlzdCBsaXN0OworICAgIGxpc3Quc3luY1BvaW50ID0gMDsKKyAg
ICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gbV9jb250ZXh0LT5jb250ZXh0M0Qo
KTsKKyAgICBpZiAoIWNvbnRleHQzZCB8fCAhY29udGV4dDNkLT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgcGF0aCBmb3Igc29mdHdhcmUg
Y29tcG9zaXRpbmcuCisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KKyAgICBmb3IgKFJlc291
cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0g
cmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIFRyYW5zZmVyYWJsZVJlc291cmNlIHJl
c291cmNlOworICAgICAgICBpZiAodHJhbnNmZXJSZXNvdXJjZShjb250ZXh0M2QsICppdCwgJnJl
c291cmNlKSkgeworICAgICAgICAgICAgbV9yZXNvdXJjZXMuZmluZCgqaXQpLT5zZWNvbmQuZXhw
b3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgbGlzdC5yZXNvdXJjZXMuYXBwZW5kKHJlc291cmNl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobGlzdC5yZXNvdXJjZXMuc2l6ZSgpKQorICAg
ICAgICBsaXN0LnN5bmNQb2ludCA9IGNvbnRleHQzZC0+aW5zZXJ0U3luY1BvaW50KCk7CisgICAg
cmV0dXJuIGxpc3Q7Cit9CisKK0NDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3Vy
Y2VMaXN0IENDUmVzb3VyY2VQcm92aWRlcjo6cHJlcGFyZVNlbmRUb0NoaWxkKGludCBjaGlsZCwg
Y29uc3QgUmVzb3VyY2VJZEFycmF5JiByZXNvdXJjZXMpCit7CisgICAgQVNTRVJUKENDUHJveHk6
OmlzSW1wbFRocmVhZCgpKTsKKyAgICBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdDsKKyAg
ICBsaXN0LnN5bmNQb2ludCA9IDA7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRl
eHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm4gbGlz
dDsKKyAgICB9CisgICAgQ2hpbGQmIGNoaWxkSW5mbyA9IG1fY2hpbGRyZW4uZmluZChjaGlsZCkt
PnNlY29uZDsKKyAgICBmb3IgKFJlc291cmNlSWRBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAg
IFRyYW5zZmVyYWJsZVJlc291cmNlIHJlc291cmNlOworICAgICAgICBpZiAoIXRyYW5zZmVyUmVz
b3VyY2UoY29udGV4dDNkLCAqaXQsICZyZXNvdXJjZSkpCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmVzb3VyY2UuaWQgPSBjaGlsZEluZm8ucGFyZW50VG9DaGls
ZE1hcC5nZXQoKml0KTsKKyAgICAgICAgY2hpbGRJbmZvLnBhcmVudFRvQ2hpbGRNYXAucmVtb3Zl
KCppdCk7CisgICAgICAgIGNoaWxkSW5mby5jaGlsZFRvUGFyZW50TWFwLnJlbW92ZShyZXNvdXJj
ZS5pZCk7CisgICAgICAgIGxpc3QucmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZSk7CisgICAgICAg
IGRlbGV0ZVJlc291cmNlKCppdCk7CisgICAgfQorICAgIGlmIChsaXN0LnJlc291cmNlcy5zaXpl
KCkpCisgICAgICAgIGxpc3Quc3luY1BvaW50ID0gY29udGV4dDNkLT5pbnNlcnRTeW5jUG9pbnQo
KTsKKyAgICByZXR1cm4gbGlzdDsKK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2Vp
dmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QmIHJl
c291cmNlcykKK3sKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBtX2NvbnRleHQtPmNvbnRleHQzRCgpOwor
ICAgIGlmICghY29udGV4dDNkIHx8ICFjb250ZXh0M2QtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBwYXRoIGZvciBzb2Z0d2FyZSBjb21w
b3NpdGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocmVzb3VyY2VzLnN5bmNQ
b2ludCkgeworICAgICAgICAvLyBOT1RFOiBJZiB0aGUgcGFyZW50IGlzIGEgYnJvd3NlciBhbmQg
dGhlIGNoaWxkIGEgcmVuZGVyZXIsIHRoZSBwYXJlbnQKKyAgICAgICAgLy8gaXMgbm90IHN1cHBv
c2VkIHRvIGhhdmUgaXRzIGNvbnRleHQgd2FpdCwgYmVjYXVzZSB0aGF0IGNvdWxkIGluZHVjZQor
ICAgICAgICAvLyBkZWFkbG9ja3MgYW5kL29yIHNlY3VyaXR5IGlzc3Vlcy4gVGhlIGNhbGxlciBp
cyByZXNwb25zaWJsZSBmb3IKKyAgICAgICAgLy8gd2FpdGluZyBhc3luY2hyb25vdXNseSwgYW5k
IHJlc2V0dGluZyBzeW5jUG9pbnQgYmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAgICAgICAgLy8gSG93
ZXZlciBpZiB0aGUgcGFyZW50IGlzIGEgcmVuZGVyZXIgKGUuZy4gYnJvd3NlciB0YWcpLCBpdCBt
YXkgYmUgb2sKKyAgICAgICAgLy8gKGFuZCBpcyBzaW1wbGVyKSB0byB3YWl0LgorICAgICAgICBH
TEMoY29udGV4dDNkLCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2lu
dCkpOworICAgIH0KKyAgICBDaGlsZCYgY2hpbGRJbmZvID0gbV9jaGlsZHJlbi5maW5kKGNoaWxk
KS0+c2Vjb25kOworICAgIGZvciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByZXNvdXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNl
cy5yZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOwor
ICAgICAgICBHTEMoY29udGV4dDNkLCB0ZXh0dXJlSWQgPSBjb250ZXh0M2QtPmNyZWF0ZVRleHR1
cmUoKSk7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNvbnRleHQzZC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgICAgICBHTEMoY29u
dGV4dDNkLCBjb250ZXh0M2QtPmNvbnN1bWVUZXh0dXJlQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGl0LT5tYWlsYm94Lm5hbWUpKTsKKyAgICAgICAgUmVzb3VyY2VJZCBp
ZCA9IG1fbmV4dElkKys7CisgICAgICAgIFJlc291cmNlIHJlc291cmNlKHRleHR1cmVJZCwgY2hp
bGRJbmZvLnBvb2wsIGl0LT5zaXplLCBpdC0+Zm9ybWF0KTsKKyAgICAgICAgbV9yZXNvdXJjZXMu
YWRkKGlkLCByZXNvdXJjZSk7CisgICAgICAgIG1fbWFpbGJveGVzLmFwcGVuZChpdC0+bWFpbGJv
eCk7CisgICAgICAgIGNoaWxkSW5mby5wYXJlbnRUb0NoaWxkTWFwLmFkZChpZCwgaXQtPmlkKTsK
KyAgICAgICAgY2hpbGRJbmZvLmNoaWxkVG9QYXJlbnRNYXAuYWRkKGl0LT5pZCwgaWQpOworICAg
IH0KK30KKwordm9pZCBDQ1Jlc291cmNlUHJvdmlkZXI6OnJlY2VpdmVGcm9tUGFyZW50KGNvbnN0
IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCYgcmVzb3VyY2VzKQoreworICAgIEFTU0VSVChDQ1By
b3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQz
ZCA9IG1fY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0M2QgfHwgIWNvbnRl
eHQzZC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIHBhdGggZm9yIHNvZnR3YXJlIGNvbXBvc2l0aW5nLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChyZXNvdXJjZXMuc3luY1BvaW50KQorICAgICAgICBHTEMoY29udGV4dDNk
LCBjb250ZXh0M2QtPndhaXRTeW5jUG9pbnQocmVzb3VyY2VzLnN5bmNQb2ludCkpOworICAgIGZv
ciAoVmVjdG9yPFRyYW5zZmVyYWJsZVJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSByZXNv
dXJjZXMucmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IHJlc291cmNlcy5yZXNvdXJjZXMuZW5kKCk7
ICsraXQpIHsKKyAgICAgICAgUmVzb3VyY2UmIHJlc291cmNlID0gbV9yZXNvdXJjZXMuZmluZChp
dC0+aWQpLT5zZWNvbmQ7CisgICAgICAgIEFTU0VSVChyZXNvdXJjZS5leHBvcnRlZCk7CisgICAg
ICAgIHJlc291cmNlLmV4cG9ydGVkID0gZmFsc2U7CisgICAgICAgIEdMQyhjb250ZXh0M2QsIGNv
bnRleHQzZC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHJlc291
cmNlLmdsSWQpKTsKKyAgICAgICAgR0xDKGNvbnRleHQzZCwgY29udGV4dDNkLT5jb25zdW1lVGV4
dHVyZUNIUk9NSVVNKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpdC0+bWFpbGJveC5u
YW1lKSk7CisgICAgICAgIG1fbWFpbGJveGVzLmFwcGVuZChpdC0+bWFpbGJveCk7CisgICAgfQor
fQorCitib29sIENDUmVzb3VyY2VQcm92aWRlcjo6dHJhbnNmZXJSZXNvdXJjZShXZWJHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgUmVzb3VyY2VJZCBpZCwgVHJhbnNmZXJhYmxlUmVzb3VyY2Uq
IHJlc291cmNlKQoreworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAg
UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuZmluZChpZCk7Cisg
ICAgQVNTRVJUKGl0ICE9IG1fcmVzb3VyY2VzLmVuZCgpICYmICFpdC0+c2Vjb25kLmxvY2tlZEZv
cldyaXRlICYmICFpdC0+c2Vjb25kLmxvY2tGb3JSZWFkQ291bnQgJiYgIWl0LT5zZWNvbmQuZXh0
ZXJuYWwpOworICAgIGlmIChpdC0+c2Vjb25kLmV4cG9ydGVkKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmVzb3VyY2UtPmlkID0gaWQ7CisgICAgcmVzb3VyY2UtPmZvcm1hdCA9IGl0LT5z
ZWNvbmQuZm9ybWF0OworICAgIHJlc291cmNlLT5zaXplID0gaXQtPnNlY29uZC5zaXplOworICAg
IGlmICghbV9tYWlsYm94ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXNvdXJjZS0+bWFpbGJveCA9
IG1fbWFpbGJveGVzLnRha2VGaXJzdCgpOworICAgIGVsc2UKKyAgICAgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPmdlbk1haWxib3hDSFJPTUlVTShyZXNvdXJjZS0+bWFpbGJveC5uYW1lKSk7Cisg
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBpdC0+c2Vjb25kLmdsSWQpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
cHJvZHVjZVRleHR1cmVDSFJPTUlVTShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgcmVz
b3VyY2UtPm1haWxib3gubmFtZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENDUmVz
b3VyY2VQcm92aWRlcjo6dHJpbU1haWxib3hEZXF1ZSgpCit7CisgICAgLy8gVHJpbSB0aGUgbWFp
bGJveCBkZXF1ZSB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzb3VyY2VzIHdlIG1heSBuZWVk
IHRvCisgICAgLy8gc2VuZC4KKyAgICAvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBhbnkgbm9uLWV4
dGVybmFsIHJlc291cmNlIG5vdCBhbHJlYWR5IHRyYW5zZmVyZWQgaXMKKyAgICAvLyBlbGlnaWJs
ZSB0byBiZSBzZW50IHRvIHRoZSBwYXJlbnQuIE90aGVyd2lzZSwgYWxsIHJlc291cmNlcyBiZWxv
bmdpbmcgdG8KKyAgICAvLyBhIGNoaWxkIG1pZ2h0IG5lZWQgdG8gYmUgc2VudCBiYWNrIHRvIHRo
ZSBjaGlsZC4KKyAgICBzaXplX3QgbWF4TWFpbGJveENvdW50ID0gMDsKKyAgICBpZiAobV9jb250
ZXh0LT5jYXBhYmlsaXRpZXMoKS5oYXNQYXJlbnRDb21wb3NpdG9yKSB7CisgICAgICAgIGZvciAo
UmVzb3VyY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gbV9y
ZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGlmICghaXQtPnNlY29uZC5leHBv
cnRlZCAmJiAhaXQtPnNlY29uZC5leHRlcm5hbCkKKyAgICAgICAgICAgICAgICArK21heE1haWxi
b3hDb3VudDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEhhc2hTZXQ8aW50PiBj
aGlsZFBvb2xTZXQ7CisgICAgICAgIGZvciAoQ2hpbGRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9jaGls
ZHJlbi5iZWdpbigpOyBpdCAhPSBtX2NoaWxkcmVuLmVuZCgpOyArK2l0KQorICAgICAgICAgICAg
Y2hpbGRQb29sU2V0LmFkZChpdC0+c2Vjb25kLnBvb2wpOworICAgICAgICBmb3IgKFJlc291cmNl
TWFwOjppdGVyYXRvciBpdCA9IG1fcmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IG1fcmVzb3VyY2Vz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoY2hpbGRQb29sU2V0LmNvbnRhaW5zKGl0
LT5zZWNvbmQucG9vbCkpCisgICAgICAgICAgICAgICAgKyttYXhNYWlsYm94Q291bnQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgd2hpbGUgKG1fbWFpbGJveGVzLnNpemUoKSA+IG1heE1haWxib3hD
b3VudCkKKyAgICAgICAgbV9tYWlsYm94ZXMucmVtb3ZlRmlyc3QoKTsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZXNv
dXJjZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaAppbmRleCAyNTI0MTIxYmY0NTNhMzA3ZmQ4OGU5NDNh
NDY0NTUxMTFiOWQ5ZDc0Li4zYTAzOGJlZTI0ZmM1ZTYzMmI4MzQxOTlkYmIyMmFmNTA3MGRjNzIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Jlc291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1Jlc291cmNlUHJvdmlkZXIuaApAQCAtMzAsMTEgKzMwLDEzIEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiY2MvQ0NHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiBjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKQEAgLTUzLDcgKzU1LDIzIEBA
IGNsYXNzIENDUmVzb3VyY2VQcm92aWRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NS
ZXNvdXJjZVByb3ZpZGVyKTsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIFJlc291cmNl
SWQ7CisgICAgdHlwZWRlZiBWZWN0b3I8UmVzb3VyY2VJZD4gUmVzb3VyY2VJZEFycmF5OworICAg
IHR5cGVkZWYgSGFzaE1hcDxSZXNvdXJjZUlkLCBSZXNvdXJjZUlkPiBSZXNvdXJjZUlkTWFwOwog
ICAgIGVudW0gVGV4dHVyZVVzYWdlSGludCB7IFRleHR1cmVVc2FnZUFueSwgVGV4dHVyZVVzYWdl
RnJhbWVidWZmZXIgfTsKKyAgICBzdHJ1Y3QgTWFpbGJveCB7CisgICAgICAgIEdDM0RieXRlIG5h
bWVbNjRdOworICAgIH07CisgICAgc3RydWN0IFRyYW5zZmVyYWJsZVJlc291cmNlIHsKKyAgICAg
ICAgdW5zaWduZWQgaWQ7CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKKyAgICAgICAgSW50U2l6
ZSBzaXplOworICAgICAgICBNYWlsYm94IG1haWxib3g7CisgICAgfTsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxUcmFuc2ZlcmFibGVSZXNvdXJjZT4gVHJhbnNmZXJhYmxlUmVzb3VyY2VBcnJheTsKKyAg
ICBzdHJ1Y3QgVHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0IHsKKyAgICAgICAgVHJhbnNmZXJhYmxl
UmVzb3VyY2VBcnJheSByZXNvdXJjZXM7CisgICAgICAgIHVuc2lnbmVkIHN5bmNQb2ludDsKKyAg
ICB9OwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZXNvdXJjZVByb3ZpZGVyPiBjcmVhdGUo
Q0NHcmFwaGljc0NvbnRleHQqKTsKIApAQCAtOTAsMjAgKzEwOCw4NiBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFsbG93IGZsdXNoIG9jY3VycmVkLCBmYWxzZSBvdGhl
cndpc2UuCiAgICAgYm9vbCBzaGFsbG93Rmx1c2hJZlN1cHBvcnRlZCgpOwogCisgICAgLy8gQ3Jl
YXRlcyBhY2NvdW50aW5nIGZvciBhIGNoaWxkLCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYSBwb29s
LiBSZXNvdXJjZXMKKyAgICAvLyB0cmFuc2ZlcmVkIGZyb20gdGhhdCBjaGlsZCB3aWxsIGdvIHRv
IHRoYXQgcG9vbC4gUmV0dXJucyBhIGNoaWxkIElELgorICAgIGludCBjcmVhdGVDaGlsZChpbnQg
cG9vbCk7CisKKyAgICAvLyBEZXN0cm95cyBhY2NvdW50aW5nIGZvciB0aGUgY2hpbGQsIGRlbGV0
aW5nIGFsbCByZXNvdXJjZXMgZnJvbSB0aGF0IHBvb2wuCisgICAgdm9pZCBkZXN0cm95Q2hpbGQo
aW50IGNoaWxkKTsKKworICAgIC8vIEdldHMgdGhlIGNoaWxkLT5wYXJlbnQgcmVzb3VyY2UgSUQg
bWFwLgorICAgIGNvbnN0IFJlc291cmNlSWRNYXAmIGdldENoaWxkVG9QYXJlbnRNYXAoaW50IGNo
aWxkKSBjb25zdDsKKworICAgIC8vIFByZXBhcmVzIHJlc291cmNlcyB0byBiZSB0cmFuc2ZlcmVk
IHRvIHRoZSBwYXJlbnQsIG1vdmluZyB0aGVtIHRvCisgICAgLy8gbWFpbGJveGVzIGFuZCBzZXJp
YWxpemluZyBtZXRhLWRhdGEgaW50byBUcmFuc2ZlcmFibGVSZXNvdXJjZXMuCisgICAgLy8gUmVz
b3VyY2VzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSBDQ1Jlc291cmNlUHJvdmlkZXIsIGJ1dCBh
cmUgbWFya2VzIGFzCisgICAgLy8gImluIHVzZSIuCisgICAgVHJhbnNmZXJhYmxlUmVzb3VyY2VM
aXN0IHByZXBhcmVTZW5kVG9QYXJlbnQoY29uc3QgUmVzb3VyY2VJZEFycmF5Jik7CisKKyAgICAv
LyBQcmVwYXJlcyByZXNvdXJjZXMgdG8gYmUgdHJhbnNmZXJlZCBiYWNrIHRvIHRoZSBjaGlsZCwg
bW92aW5nIHRoZW0gdG8KKyAgICAvLyBtYWlsYm94ZXMgYW5kIHNlcmlhbGl6aW5nIG1ldGEtZGF0
YSBpbnRvIFRyYW5zZmVyYWJsZVJlc291cmNlcy4KKyAgICAvLyBSZXNvdXJjZXMgYXJlIHJlbW92
ZWQgZnJvbSB0aGUgQ0NSZXNvdXJjZVByb3ZpZGVyLiBOb3RlOiB0aGUgcmVzb3VyY2UgSURzCisg
ICAgLy8gcGFzc2VkIGFyZSBpbiB0aGUgcGFyZW50IG5hbWVzcGFjZSBhbmQgd2lsbCBiZSB0cmFu
c2xhdGVkIHRvIHRoZSBjaGlsZAorICAgIC8vIG5hbWVzcGFjZSB3aGVuIHJldHVybmVkLgorICAg
IFRyYW5zZmVyYWJsZVJlc291cmNlTGlzdCBwcmVwYXJlU2VuZFRvQ2hpbGQoaW50IGNoaWxkLCBj
b25zdCBSZXNvdXJjZUlkQXJyYXkmKTsKKworICAgIC8vIFJlY2VpdmVzIHJlc291cmNlcyBmcm9t
IGEgY2hpbGQsIG1vdmluZyB0aGVtIGZyb20gbWFpbGJveGVzLiBSZXNvdXJjZSBJRHMKKyAgICAv
LyBwYXNzZWQgYXJlIGluIHRoZSBjaGlsZCBuYW1lc3BhY2UsIGFuZCB3aWxsIGJlIHRyYW5zbGF0
ZWQgdG8gdGhlIHBhcmVudAorICAgIC8vIG5hbWVzcGFjZSwgYWRkZWQgdG8gdGhlIGNoaWxkLT5w
YXJlbnQgbWFwLgorICAgIC8vIE5PVEU6IGlmIHRoZSBzeW5jUG9pbnQgZmlsZWQgaW4gVHJhbnNm
ZXJhYmxlUmVzb3VyY2VMaXN0IGlzIHNldCwgdGhpcworICAgIC8vIHdpbGwgd2FpdCBvbiBpdC4K
KyAgICB2b2lkIHJlY2VpdmVGcm9tQ2hpbGQoaW50IGNoaWxkLCBjb25zdCBUcmFuc2ZlcmFibGVS
ZXNvdXJjZUxpc3QmKTsKKworICAgIC8vIFJlY2VpdmVzIHJlc291cmNlcyBmcm9tIHRoZSBwYXJl
bnQsIG1vdmluZyB0aGVtIGZyb20gbWFpbGJveGVzLiBSZXNvdXJjZSBJRHMKKyAgICAvLyBwYXNz
ZWQgYXJlIGluIHRoZSBjaGlsZCBuYW1lc3BhY2UuCisgICAgLy8gTk9URTogaWYgdGhlIHN5bmNQ
b2ludCBmaWxlZCBpbiBUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgaXMgc2V0LCB0aGlzCisgICAg
Ly8gd2lsbCB3YWl0IG9uIGl0LgorICAgIHZvaWQgcmVjZWl2ZUZyb21QYXJlbnQoY29uc3QgVHJh
bnNmZXJhYmxlUmVzb3VyY2VMaXN0Jik7CisKKyAgICAvLyBPbmx5IGZvciB0ZXN0aW5nCisgICAg
c2l6ZV90IG1haWxib3hDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbGJveGVzLnNpemUoKTsg
fQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDQ1Njb3BlZExvY2tSZXNvdXJjZUZvclJl
YWQ7CiAgICAgZnJpZW5kIGNsYXNzIENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGU7CiAKICAg
ICBzdHJ1Y3QgUmVzb3VyY2UgeworICAgICAgICBSZXNvdXJjZSgpCisgICAgICAgICAgICA6IGds
SWQoMCkKKyAgICAgICAgICAgICwgcG9vbCgwKQorICAgICAgICAgICAgLCBsb2NrRm9yUmVhZENv
dW50KDApCisgICAgICAgICAgICAsIGxvY2tlZEZvcldyaXRlKGZhbHNlKQorICAgICAgICAgICAg
LCBleHRlcm5hbChmYWxzZSkKKyAgICAgICAgICAgICwgZXhwb3J0ZWQoZmFsc2UpCisgICAgICAg
ICAgICAsIHNpemUoKQorICAgICAgICAgICAgLCBmb3JtYXQoMCkKKyAgICAgICAgeyB9CisgICAg
ICAgIFJlc291cmNlKHVuc2lnbmVkIHRleHR1cmVJZCwgaW50IHBvb2wsIGNvbnN0IEludFNpemUm
IHNpemUsIEdDM0RlbnVtIGZvcm1hdCkKKyAgICAgICAgICAgIDogZ2xJZCh0ZXh0dXJlSWQpCisg
ICAgICAgICAgICAsIHBvb2wocG9vbCkKKyAgICAgICAgICAgICwgbG9ja0ZvclJlYWRDb3VudCgw
KQorICAgICAgICAgICAgLCBsb2NrZWRGb3JXcml0ZShmYWxzZSkKKyAgICAgICAgICAgICwgZXh0
ZXJuYWwoZmFsc2UpCisgICAgICAgICAgICAsIGV4cG9ydGVkKGZhbHNlKQorICAgICAgICAgICAg
LCBzaXplKHNpemUpCisgICAgICAgICAgICAsIGZvcm1hdChmb3JtYXQpCisgICAgICAgIHsgfQog
ICAgICAgICB1bnNpZ25lZCBnbElkOwogICAgICAgICBpbnQgcG9vbDsKICAgICAgICAgaW50IGxv
Y2tGb3JSZWFkQ291bnQ7CiAgICAgICAgIGJvb2wgbG9ja2VkRm9yV3JpdGU7CiAgICAgICAgIGJv
b2wgZXh0ZXJuYWw7CisgICAgICAgIGJvb2wgZXhwb3J0ZWQ7CiAgICAgICAgIEludFNpemUgc2l6
ZTsKICAgICAgICAgR0MzRGVudW0gZm9ybWF0OwogICAgIH07CiAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlc291cmNlSWQsIFJlc291cmNlPiBSZXNvdXJjZU1hcDsKKyAgICBzdHJ1Y3QgQ2hpbGQgewor
ICAgICAgICBpbnQgcG9vbDsKKyAgICAgICAgUmVzb3VyY2VJZE1hcCBjaGlsZFRvUGFyZW50TWFw
OworICAgICAgICBSZXNvdXJjZUlkTWFwIHBhcmVudFRvQ2hpbGRNYXA7CisgICAgfTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBDaGlsZD4gQ2hpbGRNYXA7CiAKICAgICBleHBsaWNpdCBDQ1Jl
c291cmNlUHJvdmlkZXIoQ0NHcmFwaGljc0NvbnRleHQqKTsKICAgICBib29sIGluaXRpYWxpemUo
KTsKQEAgLTExNiw5ICsyMDAsMTYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBsb2NrRm9yUmVh
ZChSZXNvdXJjZUlkKTsKICAgICB2b2lkIHVubG9ja0ZvclJlYWQoUmVzb3VyY2VJZCk7CiAKKyAg
ICBib29sIHRyYW5zZmVyUmVzb3VyY2UoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCosIFJl
c291cmNlSWQsIFRyYW5zZmVyYWJsZVJlc291cmNlKik7CisgICAgdm9pZCB0cmltTWFpbGJveERl
cXVlKCk7CisKICAgICBDQ0dyYXBoaWNzQ29udGV4dCogbV9jb250ZXh0OwogICAgIFJlc291cmNl
SWQgbV9uZXh0SWQ7CiAgICAgUmVzb3VyY2VNYXAgbV9yZXNvdXJjZXM7CisgICAgaW50IG1fbmV4
dENoaWxkOworICAgIENoaWxkTWFwIG1fY2hpbGRyZW47CisKKyAgICBEZXF1ZTxNYWlsYm94PiBt
X21haWxib3hlczsKIAogICAgIGJvb2wgbV91c2VUZXh0dXJlU3RvcmFnZUV4dDsKICAgICBib29s
IG1fdXNlVGV4dHVyZVVzYWdlSGludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDUmVzb3VyY2VQcm92aWRlclRlc3QuY3BwCmluZGV4IDIyOGEyMDBjNDRlOTVk
YWM2ZDA1NGQ4ZWQwYzhiMjVhMjhlZjQ3ZTYuLjE5MzNlZTYwMWQxYjE1MTAxODRmZTAzZDM5Zjk1
YjY4ZGZlZjIwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NS
ZXNvdXJjZVByb3ZpZGVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1Jlc291cmNlUHJvdmlkZXJUZXN0LmNwcApAQCAtNDIsOSArNDIsOTggQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIHsKIAorc2l6ZV90IHRleHR1cmVTaXplKGNvbnN0
IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3JtYXQpCit7CisgICAgdW5zaWduZWQgaW50IGNv
bXBvbmVudHNQZXJQaXhlbCA9IDQ7CisgICAgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50
ID0gMTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0
ZXJzKGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRz
UGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCk7CisgICAgcmV0dXJuIHNpemUud2lkdGgoKSAq
IHNpemUuaGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsK
K30KKworc3RydWN0IFRleHR1cmUgeworICAgIFRleHR1cmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
V0dDM0RlbnVtIGZvcm1hdCkKKyAgICAgICAgOiBzaXplKHNpemUpCisgICAgICAgICwgZm9ybWF0
KGZvcm1hdCkKKyAgICAgICAgLCBkYXRhKGFkb3B0QXJyYXlQdHIobmV3IHVpbnQ4X3RbdGV4dHVy
ZVNpemUoc2l6ZSwgZm9ybWF0KV0pKQorICAgIHsKKyAgICB9CisKKyAgICBJbnRTaXplIHNpemU7
CisgICAgV0dDM0RlbnVtIGZvcm1hdDsKKyAgICBPd25BcnJheVB0cjx1aW50OF90PiBkYXRhOwor
fTsKKworLy8gU2hhcmVkIGRhdGEgYmV0d2VlbiBtdWx0aXBsZSBSZXNvdXJjZVByb3ZpZGVyQ29u
dGV4dC4gVGhpcyBjb250YWlucyBtYWlsYm94CisvLyBjb250ZW50cyBhcyB3ZWxsIGFzIGluZm9y
bWF0aW9uIGFib3V0IHN5bmMgcG9pbnRzLgorY2xhc3MgQ29udGV4dFNoYXJlZERhdGEgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENvbnRleHRTaGFyZWREYXRhPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFB0cihuZXcgQ29udGV4dFNoYXJlZERhdGEoKSk7IH0KKworICAgIHVuc2ln
bmVkIGluc2VydFN5bmNQb2ludCgpIHsgcmV0dXJuIG1fbmV4dFN5bmNQb2ludCsrOyB9CisKKyAg
ICB2b2lkIGdlbk1haWxib3goV0dDM0RieXRlKiBtYWlsYm94KQorICAgIHsKKyAgICAgICAgbWVt
c2V0KG1haWxib3gsIDAsIHNpemVvZihXR0MzRGJ5dGVbNjRdKSk7CisgICAgICAgIG1lbWNweSht
YWlsYm94LCAmbV9uZXh0TWFpbEJveCwgc2l6ZW9mKG1fbmV4dE1haWxCb3gpKTsKKyAgICAgICAg
KyttX25leHRNYWlsQm94OworICAgIH0KKworICAgIHZvaWQgcHJvZHVjZVRleHR1cmUoY29uc3Qg
V0dDM0RieXRlKiBtYWlsYm94TmFtZSwgdW5zaWduZWQgc3luY1BvaW50LCBQYXNzT3duUHRyPFRl
eHR1cmU+IHRleHR1cmUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBtYWlsYm94ID0gMDsKKyAg
ICAgICAgbWVtY3B5KCZtYWlsYm94LCBtYWlsYm94TmFtZSwgc2l6ZW9mKG1haWxib3gpKTsKKyAg
ICAgICAgQVNTRVJUKG1haWxib3ggJiYgbWFpbGJveCA8IG1fbmV4dE1haWxCb3gpOworICAgICAg
ICBtX3RleHR1cmVzLnNldChtYWlsYm94LCB0ZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKG1fc3lu
Y1BvaW50Rm9yTWFpbGJveC5nZXQobWFpbGJveCkgPCBzeW5jUG9pbnQpOworICAgICAgICBtX3N5
bmNQb2ludEZvck1haWxib3guc2V0KG1haWxib3gsIHN5bmNQb2ludCk7CisgICAgfQorCisgICAg
UGFzc093blB0cjxUZXh0dXJlPiBjb25zdW1lVGV4dHVyZShjb25zdCBXR0MzRGJ5dGUqIG1haWxi
b3hOYW1lLCB1bnNpZ25lZCBzeW5jUG9pbnQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBtYWls
Ym94ID0gMDsKKyAgICAgICAgbWVtY3B5KCZtYWlsYm94LCBtYWlsYm94TmFtZSwgc2l6ZW9mKG1h
aWxib3gpKTsKKyAgICAgICAgQVNTRVJUKG1haWxib3ggJiYgbWFpbGJveCA8IG1fbmV4dE1haWxC
b3gpOworCisgICAgICAgIC8vIElmIHRoZSBsYXRlc3Qgc3luYyBwb2ludCB0aGUgY29udGV4dCBo
YXMgd2FpdGVkIG9uIGlzIGJlZm9yZSB0aGUgc3luYworICAgICAgICAvLyBwb2ludCBmb3Igd2hl
biB0aGUgbWFpbGJveCB3YXMgc2V0LCBwcmV0ZW5kIHdlIG5ldmVyIHNhdyB0aGF0CisgICAgICAg
IC8vIHByb2R1Y2VUZXh0dXJlLgorICAgICAgICBpZiAobV9zeW5jUG9pbnRGb3JNYWlsYm94Lmdl
dChtYWlsYm94KSA8IHN5bmNQb2ludCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gbV90ZXh0dXJlcy50YWtlKG1haWxib3gpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBDb250ZXh0U2hhcmVkRGF0YSgpCisgICAgICAgIDogbV9uZXh0U3luY1BvaW50KDEpCisg
ICAgICAgICwgbV9uZXh0TWFpbEJveCgxKQorICAgIHsgfQorCisgICAgdW5zaWduZWQgbV9uZXh0
U3luY1BvaW50OworICAgIHVuc2lnbmVkIG1fbmV4dE1haWxCb3g7CisgICAgdHlwZWRlZiBIYXNo
TWFwPHVuc2lnbmVkLCBPd25QdHI8VGV4dHVyZT4gPiBUZXh0dXJlTWFwOworICAgIFRleHR1cmVN
YXAgbV90ZXh0dXJlczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9zeW5jUG9p
bnRGb3JNYWlsYm94OworfTsKKwogY2xhc3MgUmVzb3VyY2VQcm92aWRlckNvbnRleHQgOiBwdWJs
aWMgQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8UmVzb3VyY2VQcm92aWRlckNvbnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dChBdHRyaWJ1dGVzKCkpKTsgfQor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlc291cmNlUHJvdmlkZXJDb250ZXh0PiBjcmVhdGUoQ29u
dGV4dFNoYXJlZERhdGEqIHNoYXJlZERhdGEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBSZXNvdXJj
ZVByb3ZpZGVyQ29udGV4dChBdHRyaWJ1dGVzKCksIHNoYXJlZERhdGEpKTsgfQorCisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnNlcnRTeW5jUG9pbnQoKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c3luY1BvaW50ID0gbV9zaGFyZWREYXRhLT5pbnNlcnRTeW5jUG9pbnQoKTsKKyAgICAgICAgLy8g
Q29tbWl0IHRoZSBwcm9kdWNlVGV4dHVyZUNIUk9NSVVNIGNhbGxzIGF0IHRoaXMgcG9pbnQsIHNv
IHRoYXQKKyAgICAgICAgLy8gdGhleSdyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN5bmMgcG9pbnQu
CisgICAgICAgIGZvciAoUGVuZGluZ1Byb2R1Y2VUZXh0dXJlTGlzdDo6aXRlcmF0b3IgaXQgPSBt
X3BlbmRpbmdQcm9kdWNlVGV4dHVyZXMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nUHJvZHVjZVRl
eHR1cmVzLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgbV9zaGFyZWREYXRhLT5wcm9kdWNlVGV4
dHVyZSgoKml0KS0+bWFpbGJveCwgc3luY1BvaW50LCAoKml0KS0+dGV4dHVyZS5yZWxlYXNlKCkp
OworICAgICAgICBtX3BlbmRpbmdQcm9kdWNlVGV4dHVyZXMuY2xlYXIoKTsKKyAgICAgICAgcmV0
dXJuIHN5bmNQb2ludDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd2FpdFN5bmNQb2ludCh1
bnNpZ25lZCBzeW5jUG9pbnQpCisgICAgeworICAgICAgICBtX2xhc3RXYWl0ZWRTeW5jUG9pbnQg
PSBzdGQ6Om1heChzeW5jUG9pbnQsIG1fbGFzdFdhaXRlZFN5bmNQb2ludCk7CisgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRUZXh0dXJlKFdHQzNEZW51bSB0YXJnZXQsIFdlYkdMSWQgdGV4
dHVyZSkKICAgICB7CkBAIC0xMTMsNiArMjAyLDI5IEBAIHB1YmxpYzoKICAgICAgICAgc2V0UGl4
ZWxzKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CiAgICAgfQogCisg
ICAgdmlydHVhbCB2b2lkIGdlbk1haWxib3hDSFJPTUlVTShXR0MzRGJ5dGUqIG1haWxib3gpIHsg
cmV0dXJuIG1fc2hhcmVkRGF0YS0+Z2VuTWFpbGJveChtYWlsYm94KTsgfQorICAgIHZpcnR1YWwg
dm9pZCBwcm9kdWNlVGV4dHVyZUNIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIGNvbnN0IFdHQzNE
Ynl0ZSogbWFpbGJveCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsK
KyAgICAgICAgQVNTRVJUKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7
CisKKyAgICAgICAgLy8gRGVsYXkgbW92aW5kIHRoZSB0ZXh0dXJlIGludG8gdGhlIG1haWxib3gg
dW50aWwgdGhlIG5leHQKKyAgICAgICAgLy8gaW5zZXJ0U3luY1BvaW50LCBzbyB0aGF0IGl0IGlz
IG5vdCB2aXNpYmxlIHRvIG90aGVyIGNvbnRleHRzIHRoYXQKKyAgICAgICAgLy8gaGF2ZW4ndCB3
YWl0ZWQgb24gdGhhdCBzeW5jIHBvaW50LgorICAgICAgICBPd25QdHI8UGVuZGluZ1Byb2R1Y2VU
ZXh0dXJlPiBwZW5kaW5nKGFkb3B0UHRyKG5ldyBQZW5kaW5nUHJvZHVjZVRleHR1cmUpKTsKKyAg
ICAgICAgbWVtY3B5KHBlbmRpbmctPm1haWxib3gsIG1haWxib3gsIHNpemVvZihwZW5kaW5nLT5t
YWlsYm94KSk7CisgICAgICAgIHBlbmRpbmctPnRleHR1cmUgPSBtX3RleHR1cmVzLnRha2UobV9j
dXJyZW50VGV4dHVyZSk7CisgICAgICAgIG1fdGV4dHVyZXMuc2V0KG1fY3VycmVudFRleHR1cmUs
IG51bGxwdHIpOworICAgICAgICBtX3BlbmRpbmdQcm9kdWNlVGV4dHVyZXMuYXBwZW5kKHBlbmRp
bmcucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZVRleHR1cmVD
SFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBjb25zdCBXR0MzRGJ5dGUqIG1haWxib3gpCisgICAg
eworICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CisgICAgICAgIEFTU0VSVCh0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpOworICAgICAgICBtX3RleHR1cmVz
LnNldChtX2N1cnJlbnRUZXh0dXJlLCBtX3NoYXJlZERhdGEtPmNvbnN1bWVUZXh0dXJlKG1haWxi
b3gsIG1fbGFzdFdhaXRlZFN5bmNQb2ludCkpOworICAgIH0KKwogICAgIHZvaWQgZ2V0UGl4ZWxz
KGNvbnN0IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3JtYXQsIHVpbnQ4X3QqIHBpeGVscykK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRUZXh0dXJlKTsKQEAgLTEyOCwzNCArMjQw
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdGV4dHVyZXMuc2l6ZSgpOwogICAgIH0K
IAotICAgIHN0YXRpYyBzaXplX3QgdGV4dHVyZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgV0dD
M0RlbnVtIGZvcm1hdCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVy
UGl4ZWwgPSA0OwotICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSAxOwot
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJz
KGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsICZjb21wb25lbnRzUGVy
UGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCk7Ci0gICAgICAgIHJldHVybiBzaXplLndpZHRoKCkg
KiBzaXplLmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7
Ci0gICAgfQotCiBwcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUmVzb3VyY2VQcm92aWRlckNvbnRl
eHQoY29uc3QgQXR0cmlidXRlcyYgYXR0cnMpCisgICAgUmVzb3VyY2VQcm92aWRlckNvbnRleHQo
Y29uc3QgQXR0cmlidXRlcyYgYXR0cnMsIENvbnRleHRTaGFyZWREYXRhKiBzaGFyZWREYXRhKQog
ICAgICAgICA6IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0QoYXR0cnMpCisgICAg
ICAgICwgbV9zaGFyZWREYXRhKHNoYXJlZERhdGEpCiAgICAgICAgICwgbV9jdXJyZW50VGV4dHVy
ZSgwKQorICAgICAgICAsIG1fbGFzdFdhaXRlZFN5bmNQb2ludCgwKQogICAgIHsgfQogCiBwcml2
YXRlOgotICAgIHN0cnVjdCBUZXh0dXJlIHsKLSAgICAgICAgVGV4dHVyZShjb25zdCBJbnRTaXpl
JiBzaXplXywgV0dDM0RlbnVtIGZvcm1hdF8pCi0gICAgICAgICAgICA6IHNpemUoc2l6ZV8pCi0g
ICAgICAgICAgICAsIGZvcm1hdChmb3JtYXRfKQotICAgICAgICAgICAgLCBkYXRhKGFkb3B0QXJy
YXlQdHIobmV3IHVpbnQ4X3RbdGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KV0pKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBJbnRTaXplIHNpemU7Ci0gICAgICAgIFdHQzNEZW51bSBm
b3JtYXQ7Ci0gICAgICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgfTsKLQogICAg
IHZvaWQgYWxsb2NhdGVUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemUsIFdHQzNEZW51bSBmb3Jt
YXQpCiAgICAgewogICAgICAgICBBU1NFUlQobV9jdXJyZW50VGV4dHVyZSk7CkBAIC0xODIsMTQg
KzI3NSwyMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJHTElk
LCBPd25QdHI8VGV4dHVyZT4gPiBUZXh0dXJlTWFwOworICAgIHN0cnVjdCBQZW5kaW5nUHJvZHVj
ZVRleHR1cmUgeworICAgICAgICBXR0MzRGJ5dGUgbWFpbGJveFs2NF07CisgICAgICAgIE93blB0
cjxUZXh0dXJlPiB0ZXh0dXJlOworICAgIH07CisgICAgdHlwZWRlZiBEZXF1ZTxPd25QdHI8UGVu
ZGluZ1Byb2R1Y2VUZXh0dXJlPiA+IFBlbmRpbmdQcm9kdWNlVGV4dHVyZUxpc3Q7CisgICAgQ29u
dGV4dFNoYXJlZERhdGEqIG1fc2hhcmVkRGF0YTsKICAgICBXZWJHTElkIG1fY3VycmVudFRleHR1
cmU7CiAgICAgVGV4dHVyZU1hcCBtX3RleHR1cmVzOworICAgIHVuc2lnbmVkIG1fbGFzdFdhaXRl
ZFN5bmNQb2ludDsKKyAgICBQZW5kaW5nUHJvZHVjZVRleHR1cmVMaXN0IG1fcGVuZGluZ1Byb2R1
Y2VUZXh0dXJlczsKIH07CiAKIGNsYXNzIENDUmVzb3VyY2VQcm92aWRlclRlc3QgOiBwdWJsaWMg
dGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyVGVzdCgpCi0g
ICAgICAgIDogbV9jb250ZXh0KEZha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6Y3JlYXRl
KFJlc291cmNlUHJvdmlkZXJDb250ZXh0OjpjcmVhdGUoKSkpCisgICAgICAgIDogbV9zaGFyZWRE
YXRhKENvbnRleHRTaGFyZWREYXRhOjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX2NvbnRleHQoRmFr
ZVdlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlOjpjcmVhdGUoUmVzb3VyY2VQcm92aWRlckNvbnRl
eHQ6OmNyZWF0ZShtX3NoYXJlZERhdGEuZ2V0KCkpKSkKICAgICAgICAgLCBtX3Jlc291cmNlUHJv
dmlkZXIoQ0NSZXNvdXJjZVByb3ZpZGVyOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKSkKICAgICB7
CiAgICAgfQpAQCAtMjA2LDYgKzMwOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOworICAgIE93blB0cjxDb250ZXh0U2hh
cmVkRGF0YT4gbV9zaGFyZWREYXRhOwogICAgIE93blB0cjxDQ0dyYXBoaWNzQ29udGV4dD4gbV9j
b250ZXh0OwogICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IG1fcmVzb3VyY2VQcm92aWRl
cjsKIH07CkBAIC0yMTUsNyArMzE4LDcgQEAgVEVTVF9GKENDUmVzb3VyY2VQcm92aWRlclRlc3Qs
IEJhc2ljKQogICAgIEludFNpemUgc2l6ZSgxLCAxKTsKICAgICBXR0MzRGVudW0gZm9ybWF0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAgICAgaW50IHBvb2wgPSAxOwotICAgIHNpemVfdCBw
aXhlbFNpemUgPSBSZXNvdXJjZVByb3ZpZGVyQ29udGV4dDo6dGV4dHVyZVNpemUoc2l6ZSwgZm9y
bWF0KTsKKyAgICBzaXplX3QgcGl4ZWxTaXplID0gdGV4dHVyZVNpemUoc2l6ZSwgZm9ybWF0KTsK
ICAgICBBU1NFUlRfRVEoNFUsIHBpeGVsU2l6ZSk7CiAKICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6
OlJlc291cmNlSWQgaWQgPSBtX3Jlc291cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKHBvb2ws
IHNpemUsIGZvcm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOwpAQCAt
MjU2LDcgKzM1OSw3IEBAIFRFU1RfRihDQ1Jlc291cmNlUHJvdmlkZXJUZXN0LCBVcGxvYWQpCiAg
ICAgSW50U2l6ZSBzaXplKDIsIDIpOwogICAgIFdHQzNEZW51bSBmb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTsKICAgICBpbnQgcG9vbCA9IDE7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9
IFJlc291cmNlUHJvdmlkZXJDb250ZXh0Ojp0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOworICAg
IHNpemVfdCBwaXhlbFNpemUgPSB0ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOwogICAgIEFTU0VS
VF9FUSgxNlUsIHBpeGVsU2l6ZSk7CiAKICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNl
SWQgaWQgPSBtX3Jlc291cmNlUHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKHBvb2wsIHNpemUsIGZv
cm1hdCwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOwpAQCAtMzAzLDQgKzQw
NiwxMTcgQEAgVEVTVF9GKENDUmVzb3VyY2VQcm92aWRlclRlc3QsIFVwbG9hZCkKICAgICBtX3Jl
c291cmNlUHJvdmlkZXItPmRlbGV0ZVJlc291cmNlKGlkKTsKIH0KIAorVEVTVF9GKENDUmVzb3Vy
Y2VQcm92aWRlclRlc3QsIFRyYW5zZmVyUmVzb3VyY2VzKQoreworICAgIE93blB0cjxDQ0dyYXBo
aWNzQ29udGV4dD4gY2hpbGRDb250ZXh0KEZha2VXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZTo6
Y3JlYXRlKFJlc291cmNlUHJvdmlkZXJDb250ZXh0OjpjcmVhdGUobV9zaGFyZWREYXRhLmdldCgp
KSkpOworICAgIE93blB0cjxDQ1Jlc291cmNlUHJvdmlkZXI+IGNoaWxkUmVzb3VyY2VQcm92aWRl
cihDQ1Jlc291cmNlUHJvdmlkZXI6OmNyZWF0ZShjaGlsZENvbnRleHQuZ2V0KCkpKTsKKworICAg
IEludFNpemUgc2l6ZSgxLCAxKTsKKyAgICBXR0MzRGVudW0gZm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7CisgICAgaW50IHBvb2wgPSAxOworICAgIHNpemVfdCBwaXhlbFNpemUgPSB0
ZXh0dXJlU2l6ZShzaXplLCBmb3JtYXQpOworICAgIEFTU0VSVF9FUSg0VSwgcGl4ZWxTaXplKTsK
KworICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBpZDEgPSBjaGlsZFJlc291cmNl
UHJvdmlkZXItPmNyZWF0ZVJlc291cmNlKHBvb2wsIHNpemUsIGZvcm1hdCwgQ0NSZXNvdXJjZVBy
b3ZpZGVyOjpUZXh0dXJlVXNhZ2VBbnkpOworICAgIHVpbnQ4X3QgZGF0YTFbNF0gPSB7MSwgMiwg
MywgNH07CisgICAgSW50UmVjdCByZWN0KEludFBvaW50KCksIHNpemUpOworICAgIGNoaWxkUmVz
b3VyY2VQcm92aWRlci0+dXBsb2FkKGlkMSwgZGF0YTEsIHJlY3QsIHJlY3QsIEludFNpemUoKSk7
CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgaWQyID0gY2hpbGRSZXNvdXJj
ZVByb3ZpZGVyLT5jcmVhdGVSZXNvdXJjZShwb29sLCBzaXplLCBmb3JtYXQsIENDUmVzb3VyY2VQ
cm92aWRlcjo6VGV4dHVyZVVzYWdlQW55KTsKKyAgICB1aW50OF90IGRhdGEyWzRdID0gezUsIDUs
IDUsIDV9OworICAgIGNoaWxkUmVzb3VyY2VQcm92aWRlci0+dXBsb2FkKGlkMiwgZGF0YTIsIHJl
Y3QsIHJlY3QsIEludFNpemUoKSk7CisKKyAgICBpbnQgY2hpbGRQb29sID0gMjsKKyAgICBpbnQg
Y2hpbGRJZCA9IG1fcmVzb3VyY2VQcm92aWRlci0+Y3JlYXRlQ2hpbGQoY2hpbGRQb29sKTsKKwor
ICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgc29tZSByZXNvdXJjZXMgdG8gdGhlIHBhcmVudC4K
KyAgICAgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkQXJyYXkgcmVzb3VyY2VJZHNU
b1RyYW5zZmVyOworICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKGlkMSk7Cisg
ICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zlci5hcHBlbmQoaWQyKTsKKyAgICAgICAgQ0NSZXNv
dXJjZVByb3ZpZGVyOjpUcmFuc2ZlcmFibGVSZXNvdXJjZUxpc3QgbGlzdCA9IGNoaWxkUmVzb3Vy
Y2VQcm92aWRlci0+cHJlcGFyZVNlbmRUb1BhcmVudChyZXNvdXJjZUlkc1RvVHJhbnNmZXIpOwor
ICAgICAgICBFWFBFQ1RfTkUoMHUsIGxpc3Quc3luY1BvaW50KTsKKyAgICAgICAgRVhQRUNUX0VR
KDJ1LCBsaXN0LnJlc291cmNlcy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGlsZFJl
c291cmNlUHJvdmlkZXItPmluVXNlQnlDb25zdW1lcihpZDEpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQyKSk7CisgICAgICAg
IG1fcmVzb3VyY2VQcm92aWRlci0+cmVjZWl2ZUZyb21DaGlsZChjaGlsZElkLCBsaXN0KTsKKyAg
ICB9CisKKyAgICBFWFBFQ1RfRVEoMnUsIG1fcmVzb3VyY2VQcm92aWRlci0+bnVtUmVzb3VyY2Vz
KCkpOworICAgIEVYUEVDVF9FUSgydSwgbV9yZXNvdXJjZVByb3ZpZGVyLT5tYWlsYm94Q291bnQo
KSk7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyOjpSZXNvdXJjZUlkTWFwIHJlc291cmNlTWFwID0g
bV9yZXNvdXJjZVByb3ZpZGVyLT5nZXRDaGlsZFRvUGFyZW50TWFwKGNoaWxkSWQpOworICAgIEND
UmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZCBtYXBwZWRJZDEgPSByZXNvdXJjZU1hcC5nZXQo
aWQxKTsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWQgbWFwcGVkSWQyID0gcmVz
b3VyY2VNYXAuZ2V0KGlkMik7CisgICAgRVhQRUNUX05FKDB1LCBtYXBwZWRJZDEpOworICAgIEVY
UEVDVF9ORSgwdSwgbWFwcGVkSWQyKTsKKyAgICBFWFBFQ1RfRkFMU0UobV9yZXNvdXJjZVByb3Zp
ZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQxKSk7CisgICAgRVhQRUNUX0ZBTFNFKG1fcmVzb3VyY2VQ
cm92aWRlci0+aW5Vc2VCeUNvbnN1bWVyKGlkMikpOworCisgICAgdWludDhfdCByZXN1bHRbNF0g
PSB7MH07CisgICAgZ2V0UmVzb3VyY2VQaXhlbHMobWFwcGVkSWQxLCBzaXplLCBmb3JtYXQsIHJl
c3VsdCk7CisgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChkYXRhMSwgcmVzdWx0LCBwaXhlbFNpemUp
KTsKKworICAgIGdldFJlc291cmNlUGl4ZWxzKG1hcHBlZElkMiwgc2l6ZSwgZm9ybWF0LCByZXN1
bHQpOworICAgIEVYUEVDVF9FUSgwLCBtZW1jbXAoZGF0YTIsIHJlc3VsdCwgcGl4ZWxTaXplKSk7
CisKKyAgICB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgdHJhbnNmZXJpbmcgYWdhaW4gdGhlIHNh
bWUgcmVzb3VyY2UgZnJvbSB0aGUgY2hpbGQgdG8gdGhlCisgICAgICAgIC8vIHBhcmVudCBpcyBh
IG5vb3AuCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJZEFycmF5IHJlc291
cmNlSWRzVG9UcmFuc2ZlcjsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVuZChp
ZDEpOworICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJlc291cmNlTGlz
dCBsaXN0ID0gY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5wcmVwYXJlU2VuZFRvUGFyZW50KHJlc291
cmNlSWRzVG9UcmFuc2Zlcik7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgbGlzdC5zeW5jUG9pbnQp
OworICAgICAgICBFWFBFQ1RfRVEoMHUsIGxpc3QucmVzb3VyY2VzLnNpemUoKSk7CisgICAgfQor
CisgICAgeworICAgICAgICAvLyBUcmFuc2ZlciByZXNvdXJjZXMgYmFjayBmcm9tIHRoZSBwYXJl
bnQgdG8gdGhlIGNoaWxkLgorICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlJlc291cmNlSWRB
cnJheSByZXNvdXJjZUlkc1RvVHJhbnNmZXI7CisgICAgICAgIHJlc291cmNlSWRzVG9UcmFuc2Zl
ci5hcHBlbmQobWFwcGVkSWQxKTsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5zZmVyLmFwcGVu
ZChtYXBwZWRJZDIpOworICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXI6OlRyYW5zZmVyYWJsZVJl
c291cmNlTGlzdCBsaXN0ID0gbV9yZXNvdXJjZVByb3ZpZGVyLT5wcmVwYXJlU2VuZFRvQ2hpbGQo
Y2hpbGRJZCwgcmVzb3VyY2VJZHNUb1RyYW5zZmVyKTsKKyAgICAgICAgRVhQRUNUX05FKDB1LCBs
aXN0LnN5bmNQb2ludCk7CisgICAgICAgIEVYUEVDVF9FUSgydSwgbGlzdC5yZXNvdXJjZXMuc2l6
ZSgpKTsKKyAgICAgICAgY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5yZWNlaXZlRnJvbVBhcmVudChs
aXN0KTsKKyAgICB9CisgICAgRVhQRUNUX0VRKDB1LCBtX3Jlc291cmNlUHJvdmlkZXItPm1haWxi
b3hDb3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoMnUsIGNoaWxkUmVzb3VyY2VQcm92aWRlci0+bWFp
bGJveENvdW50KCkpOworICAgIEVYUEVDVF9GQUxTRShjaGlsZFJlc291cmNlUHJvdmlkZXItPmlu
VXNlQnlDb25zdW1lcihpZDEpKTsKKyAgICBFWFBFQ1RfRkFMU0UoY2hpbGRSZXNvdXJjZVByb3Zp
ZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQyKSk7CisKKyAgICBSZXNvdXJjZVByb3ZpZGVyQ29udGV4
dCogY2hpbGRDb250ZXh0M0QgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZVByb3ZpZGVyQ29udGV4dCo+
KGNoaWxkQ29udGV4dC0+Y29udGV4dDNEKCkpOworICAgIHsKKyAgICAgICAgQ0NTY29wZWRMb2Nr
UmVzb3VyY2VGb3JSZWFkIGxvY2soY2hpbGRSZXNvdXJjZVByb3ZpZGVyLmdldCgpLCBpZDEpOwor
ICAgICAgICBBU1NFUlRfTkUoMFUsIGxvY2sudGV4dHVyZUlkKCkpOworICAgICAgICBjaGlsZENv
bnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGxvY2su
dGV4dHVyZUlkKCkpOworICAgICAgICBjaGlsZENvbnRleHQzRC0+Z2V0UGl4ZWxzKHNpemUsIGZv
cm1hdCwgcmVzdWx0KTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIG1lbWNtcChkYXRhMSwgcmVzdWx0
LCBwaXhlbFNpemUpKTsKKyAgICB9CisgICAgeworICAgICAgICBDQ1Njb3BlZExvY2tSZXNvdXJj
ZUZvclJlYWQgbG9jayhjaGlsZFJlc291cmNlUHJvdmlkZXIuZ2V0KCksIGlkMik7CisgICAgICAg
IEFTU0VSVF9ORSgwVSwgbG9jay50ZXh0dXJlSWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4dDNE
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbG9jay50ZXh0dXJl
SWQoKSk7CisgICAgICAgIGNoaWxkQ29udGV4dDNELT5nZXRQaXhlbHMoc2l6ZSwgZm9ybWF0LCBy
ZXN1bHQpOworICAgICAgICBFWFBFQ1RfRVEoMCwgbWVtY21wKGRhdGEyLCByZXN1bHQsIHBpeGVs
U2l6ZSkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gVHJhbnNmZXIgcmVzb3VyY2VzIHRv
IHRoZSBwYXJlbnQgYWdhaW4uCisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6UmVzb3VyY2VJ
ZEFycmF5IHJlc291cmNlSWRzVG9UcmFuc2ZlcjsKKyAgICAgICAgcmVzb3VyY2VJZHNUb1RyYW5z
ZmVyLmFwcGVuZChpZDEpOworICAgICAgICByZXNvdXJjZUlkc1RvVHJhbnNmZXIuYXBwZW5kKGlk
Mik7CisgICAgICAgIENDUmVzb3VyY2VQcm92aWRlcjo6VHJhbnNmZXJhYmxlUmVzb3VyY2VMaXN0
IGxpc3QgPSBjaGlsZFJlc291cmNlUHJvdmlkZXItPnByZXBhcmVTZW5kVG9QYXJlbnQocmVzb3Vy
Y2VJZHNUb1RyYW5zZmVyKTsKKyAgICAgICAgRVhQRUNUX05FKDB1LCBsaXN0LnN5bmNQb2ludCk7
CisgICAgICAgIEVYUEVDVF9FUSgydSwgbGlzdC5yZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoY2hpbGRSZXNvdXJjZVByb3ZpZGVyLT5pblVzZUJ5Q29uc3VtZXIoaWQxKSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKGNoaWxkUmVzb3VyY2VQcm92aWRlci0+aW5Vc2VCeUNvbnN1
bWVyKGlkMikpOworICAgICAgICBtX3Jlc291cmNlUHJvdmlkZXItPnJlY2VpdmVGcm9tQ2hpbGQo
Y2hpbGRJZCwgbGlzdCk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDJ1LCBtX3Jlc291cmNlUHJv
dmlkZXItPm51bVJlc291cmNlcygpKTsKKyAgICBtX3Jlc291cmNlUHJvdmlkZXItPmRlc3Ryb3lD
aGlsZChjaGlsZElkKTsKKyAgICBFWFBFQ1RfRVEoMHUsIG1fcmVzb3VyY2VQcm92aWRlci0+bnVt
UmVzb3VyY2VzKCkpOworICAgIEVYUEVDVF9FUSgwdSwgbV9yZXNvdXJjZVByb3ZpZGVyLT5tYWls
Ym94Q291bnQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>