<?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>115352</bug_id>
          
          <creation_ts>2013-04-29 07:45:13 -0700</creation_ts>
          <short_desc>[gstreamer] Make sure gstreamer source element is thread-safe</short_desc>
          <delta_ts>2013-08-27 07:59:10 -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>WebCore Misc.</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>117688</dependson>
    
    <dependson>117141</dependson>
    
    <dependson>117924</dependson>
          <blocked>115354</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andre Moreira Magalhaes">andrunko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>slomo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>882561</commentid>
    <comment_count>0</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 07:45:13 -0700</bug_when>
    <thetext>GStreamer source element may be created by any gstreamer element on any thread by calling gst_element_make_from_uri with the URIs handled by the source element. We should make sure the gstreamer source element is thread-safe to avoid issues with it being created outside the main thread.

Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882562</commentid>
    <comment_count>1</comment_count>
      <attachid>200009</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 07:47:21 -0700</bug_when>
    <thetext>Created attachment 200009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882566</commentid>
    <comment_count>2</comment_count>
      <attachid>200009</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-04-29 07:53:26 -0700</bug_when>
    <thetext>Comment on attachment 200009
Patch

Hrm. It seems odd that we let code outside of WebCore create our private GStreamer elements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882572</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-04-29 07:57:38 -0700</bug_when>
    <thetext>I suppose this is related with some adaptive streaming scenario?

We plan soon to switch the http source element to webkit+http scheme btw, bug 108088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882594</commentid>
    <comment_count>4</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 08:24:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 200009 [details])
&gt; Hrm. It seems odd that we let code outside of WebCore create our private GStreamer elements.

GStreamer will use the webkit source element when creating elements using gst_element_make_from_uri for uris supported by the webkit source element (http://).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882595</commentid>
    <comment_count>5</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 08:27:01 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I suppose this is related with some adaptive streaming scenario?
&gt; 
&gt; We plan soon to switch the http source element to webkit+http scheme btw, bug 108088

Yes, the threading issues were found when testing DASH and MSS support for gstreamer which uses gst-plugins-bad GstUriDownloader which in turn uses the webkit source element when creating http:// elements with gst_element_make_from_uri. GstUriDownloader uses its own threads to download data which leads to some races when using the webkit gst source element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882604</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-04-29 08:37:36 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; I suppose this is related with some adaptive streaming scenario?
&gt; &gt; 
&gt; &gt; We plan soon to switch the http source element to webkit+http scheme btw, bug 108088
&gt; 
&gt; Yes, the threading issues were found when testing DASH and MSS support for gstreamer which uses gst-plugins-bad GstUriDownloader which in turn uses the webkit source element when creating http:// elements with gst_element_make_from_uri. GstUriDownloader uses its own threads to download data which leads to some races when using the webkit gst source element.

This is bad news if the element is interacting with WebCore at all. Interactions with WebCore should all be on the main thread (the WebCore thread) and mutexes around critical sections in the element are not enough to prevent badness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882617</commentid>
    <comment_count>7</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 08:50:31 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; I suppose this is related with some adaptive streaming scenario?
&gt; &gt; &gt; 
&gt; &gt; &gt; We plan soon to switch the http source element to webkit+http scheme btw, bug 108088
&gt; &gt; 
&gt; &gt; Yes, the threading issues were found when testing DASH and MSS support for gstreamer which uses gst-plugins-bad GstUriDownloader which in turn uses the webkit source element when creating http:// elements with gst_element_make_from_uri. GstUriDownloader uses its own threads to download data which leads to some races when using the webkit gst source element.
&gt; 
&gt; This is bad news if the element is interacting with WebCore at all. Interactions with WebCore should all be on the main thread (the WebCore thread) and mutexes around critical sections in the element are not enough to prevent badness.

This patch makes sure all WebCore methods are called from the main thread using g_timeout_add_full (assuming the glib main thread is the same as WebCore main thread for webkit-gtk). This isn&apos;t true without this patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882657</commentid>
    <comment_count>8</comment_count>
      <attachid>200022</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 10:12:03 -0700</bug_when>
    <thetext>Created attachment 200022
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882661</commentid>
    <comment_count>9</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-04-29 10:13:10 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=200022) [details]
&gt; Patch

This new patch removes the dependency on bug 115351.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882665</commentid>
    <comment_count>10</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2013-04-29 10:20:31 -0700</bug_when>
    <thetext>The patch looks basically good to me and also makes conceptionally sense, independent of WebKit exposing an URI handler for http:// etc or not. It&apos;s also broken and not threadsafe in the standard scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882988</commentid>
    <comment_count>11</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2013-04-30 02:06:59 -0700</bug_when>
    <thetext>Note that many of the locks there are not actually needed (but won&apos;t hurt, maybe performance a bit). Don&apos;t have the time now to carefully check which are not needed, but there seems to be some confusion about which thread is (or which threads are) handling which function, and where concurrency can happen at all. It&apos;s a bit too cautious :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884119</commentid>
    <comment_count>12</comment_count>
      <attachid>200022</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2013-05-03 03:12:32 -0700</bug_when>
    <thetext>Comment on attachment 200022
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:453
&gt; +            gst_app_src_set_size(priv-&gt;appsrc, -1);

Any reason why you move these at the very end?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:-632
&gt; -    return g_strdup(WEBKIT_WEB_SRC(handler)-&gt;priv-&gt;uri);

A const gchar* function returning a copy a copy of a string? That looks wrong, but it was like that before already :) But then this is 0.10 code, which was broken exactly because of things like this. So decide for yourself if you want to leak here or potentially crash

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:865
&gt; +    GST_OBJECT_UNLOCK(src);

I think these locks are actually unnecessary, as that function will only be called right after creating the instance and then never again. But they don&apos;t hurt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884143</commentid>
    <comment_count>13</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-05-03 05:13:28 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 200022 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=200022&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:453
&gt; &gt; +            gst_app_src_set_size(priv-&gt;appsrc, -1);
&gt; 
&gt; Any reason why you move these at the very end?
&gt; 
IIRC, it was because of the locks, this call doesn&apos;t need to be done under locks and I refactored this method a bit to avoid locking/unlocking many times.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:-632
&gt; &gt; -    return g_strdup(WEBKIT_WEB_SRC(handler)-&gt;priv-&gt;uri);
&gt; 
&gt; A const gchar* function returning a copy a copy of a string? That looks wrong, but it was like that before already :) But then this is 0.10 code, which was broken exactly because of things like this. So decide for yourself if you want to leak here or potentially crash
&gt; 
Yep, the issue here is that the uri may change, thus we need a lock/dup to get the uri. But as you said this is for 0.10 only so I would rather leak than crash.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:865
&gt; &gt; +    GST_OBJECT_UNLOCK(src);
&gt; 
&gt; I think these locks are actually unnecessary, as that function will only be called right after creating the instance and then never again. But they don&apos;t hurt
Yeah, not change here, but let me know if you want me to remove these extra locks, I wouldn&apos;t mind tbh, they won&apos;t hurt anyway :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>884250</commentid>
    <comment_count>14</comment_count>
      <attachid>200022</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-05-03 11:41:14 -0700</bug_when>
    <thetext>Comment on attachment 200022
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Make sure gstreamer source element is thread-safe.

Sorry to be annoying about this but the  Changelog entry   format is not correct, please check other entries. Usually thee structure is:

bug title
bug link

Reviewed by...

description of change

&gt; Source/WebCore/ChangeLog:15
&gt; +        No new tests (OOPS!).

If no new test is added please remove this line.

&gt; Source/WebCore/ChangeLog:18
&gt; +        (_WebKitWebSrcPrivate):

It would bee good, I think, to have a little summary of each function/method change.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:865
&gt;&gt;&gt; +    GST_OBJECT_UNLOCK(src);
&gt;&gt; 
&gt;&gt; I think these locks are actually unnecessary, as that function will only be called right after creating the instance and then never again. But they don&apos;t hurt
&gt; 
&gt; Yeah, not change here, but let me know if you want me to remove these extra locks, I wouldn&apos;t mind tbh, they won&apos;t hurt anyway :)

Right, please remove these locks :)

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1075
&gt; +    uri = g_strdup(m_src-&gt;priv-&gt;uri);

I think it&apos;d make sense to use a GOwnPtr&lt;gchar&gt; here

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1089
&gt; +    uri = g_strdup(m_src-&gt;priv-&gt;uri);

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>888169</commentid>
    <comment_count>15</comment_count>
      <attachid>200022</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-05-13 03:19:23 -0700</bug_when>
    <thetext>Comment on attachment 200022
Patch

r- as per comments above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891252</commentid>
    <comment_count>16</comment_count>
      <attachid>202292</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-05-20 10:49:12 -0700</bug_when>
    <thetext>Created attachment 202292
Patch

(In reply to comment #14)
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Make sure gstreamer source element is thread-safe.
&gt; 
&gt; Sorry to be annoying about this but the  Changelog entry   format is not correct, please check other entries. Usually thee structure is:
&gt; 
&gt; bug title
&gt; bug link
&gt; 
&gt; Reviewed by...
&gt; 
&gt; description of change
&gt; 
Np, thanks for the review. Changelog updated.

&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        No new tests (OOPS!).
&gt; 
&gt; If no new test is added please remove this line.
&gt; 
Done

&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        (_WebKitWebSrcPrivate):
&gt; 
&gt; It would bee good, I think, to have a little summary of each function/method change.
&gt; 
All changes are adding/removing locks here and there and making sure some methods are called from main thread, so not updated here as it would be difficult to describe changes per function/method.

&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:865
&gt; &gt;&gt;&gt; +    GST_OBJECT_UNLOCK(src);
&gt; &gt;&gt; 
&gt; &gt;&gt; I think these locks are actually unnecessary, as that function will only be called right after creating the instance and then never again. But they don&apos;t hurt
&gt; &gt; 
&gt; &gt; Yeah, not change here, but let me know if you want me to remove these extra locks, I wouldn&apos;t mind tbh, they won&apos;t hurt anyway :)
&gt; 
&gt; Right, please remove these locks :)
&gt; 
Done

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1075
&gt; &gt; +    uri = g_strdup(m_src-&gt;priv-&gt;uri);
&gt; 
&gt; I think it&apos;d make sense to use a GOwnPtr&lt;gchar&gt; here
&gt; 
Done

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1089
&gt; &gt; +    uri = g_strdup(m_src-&gt;priv-&gt;uri);
&gt; 
&gt; Ditto
Done

Thanks everyone for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895910</commentid>
    <comment_count>17</comment_count>
      <attachid>202292</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-31 09:17:37 -0700</bug_when>
    <thetext>Comment on attachment 202292
Patch

Clearing flags on attachment: 202292

Committed r151021: &lt;http://trac.webkit.org/changeset/151021&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895911</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-31 09:17:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902886</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-24 02:29:09 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 117924</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916801</commentid>
    <comment_count>20</comment_count>
      <attachid>208654</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-13 10:56:03 -0700</bug_when>
    <thetext>Created attachment 208654
Updated patch against upstream master

So, first of all, this is the updated patch against upstream master with conflicts fixed, etc.

I investigated the regressions on #117141 and #117688 and here goes my findings:

1 - Bug #117688 (http/tests/security/video-poster-cross-origin-crash.html crash on GTK bots):

Running this test with both upstream/master and upstream/master with the updated patch applied I get the exactly same results:
$ TEST_RUNNER_TEST_PLUGIN_PATH=./WebKitBuild/Debug/TestNetscapePlugin/.libs/libtestnetscapeplugin.so TEST_RUNNER_INJECTED_BUNDLE_FILENAME=WebKitBuild/Debug/Libraries/.libs/libTestRunnerInjectedBundle.so Tools/jhbuild/jhbuild-wrapper --gtk run ./WebKitBuild/Debug/Programs/WebKitTestRunner LayoutTests/http/tests/security/video-poster-cross-origin-crash.html 
Gtk-Message: Failed to load module &quot;overlay-scrollbar&quot;
Gtk-Message: Failed to load module &quot;canberra-gtk-module&quot;
Gtk-Message: Failed to load module &quot;overlay-scrollbar&quot;
Gtk-Message: Failed to load module &quot;canberra-gtk-module&quot;
Content-Type: text/plain
&gt;&gt;&gt;
#EOF
#EOF
#EOF

** (WebKitTestRunner:24868): CRITICAL **: socket_embed_hook: assertion `spi_global_register != NULL&apos; failed
LEAK: 1 WebContext
LEAK: 8 WebCoreNode

2 - Bug #117141 (fast/js/cyclic-proto.html crash on Qt bots):
This bug seems to be crashing on LocalStorage and I can&apos;t see how this patch is related.

That said I believe this bug is not related to the crashes, but if someone can enlighten me here or get me some better backtrace with the crashes I may be able to fix any possible regression. It is good to note that this patch fixes a bunch of thread related issues with the webkit gstreamer source element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916812</commentid>
    <comment_count>21</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-13 11:10:16 -0700</bug_when>
    <thetext>(In reply to comment #20
&gt; 2 - Bug #117141 (fast/js/cyclic-proto.html crash on Qt bots):
&gt; This bug seems to be crashing on LocalStorage and I can&apos;t see how this patch is related.

Sorry, now I saw the full backtrace there, both bugs are crashing in the same place, when calling &quot;request.setHTTPReferrer(priv-&gt;player-&gt;referrer());&quot; from webKitWebSrcStart. I will try to reproduce this crash here again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916925</commentid>
    <comment_count>22</comment_count>
      <attachid>208654</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-13 15:53:00 -0700</bug_when>
    <thetext>Comment on attachment 208654
Updated patch against upstream master

Ignore this patch, I am working on an updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916946</commentid>
    <comment_count>23</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-13 17:00:23 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 208654 [details])
&gt; Ignore this patch, I am working on an updated patch.

I have a semi updated patch that should fix this bug, but the final changes here depend on input on bug #73743 (added some comments there). Once we solve the issue with my comments on bug #73743 I will push a new patch here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917407</commentid>
    <comment_count>24</comment_count>
      <attachid>208788</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-14 21:03:38 -0700</bug_when>
    <thetext>Created attachment 208788
Updated patch against upstream master

This patch should fix the regressions with bug #117141 and bug #117688 by removing the timeout sources (e.g. scheduled start) when state changes to NULL as stop is scheduled to run only on mainloop. It should also fix another issue where the player was being reset on seek.

As discussed on IRC this patch introduces 2 separate code branches, one where the player is available and using CachedResourceLoader and another one where there is no player involved using a ResourceHandle.

I ran some tests with and without this patch and couldn&apos;t find any regression. I also tested the patch with a series of videos (including DASH that requires a new gst version) and everything seems to be working fine. Please let me know what you think.

Also see comments on bug #73743 and bug #108088.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917495</commentid>
    <comment_count>25</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-15 06:40:45 -0700</bug_when>
    <thetext>Marking as WONTFIX as the patch is not required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917496</commentid>
    <comment_count>26</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-15 06:41:50 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; Marking as WONTFIX as the patch is not required.

Arg, this should be on bug 115351, sorry, reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917601</commentid>
    <comment_count>27</comment_count>
      <attachid>208831</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-15 11:48:28 -0700</bug_when>
    <thetext>Created attachment 208831
Updated patch against upstream master

Same as last patch but without reverting fix for bug 116533 (I was basing on an old git version where bug 116533 was not fixed).

I am also investigating bug 85994 and may update this patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917847</commentid>
    <comment_count>28</comment_count>
      <attachid>208831</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-08-16 01:31:05 -0700</bug_when>
    <thetext>Comment on attachment 208831
Updated patch against upstream master

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

&gt; Source/WebCore/ChangeLog:7
&gt; +        Patch by Andre Moreira Magalhaes &lt;andre.magalhaes@collabora.co.uk&gt; on 2013-08-14
&gt; +        Reviewed by Philippe Normand.

Please, don&apos;t submit this as reviewed, since it contains new code that hasn&apos;t been reviewed.

&gt; Source/WebCore/ChangeLog:37
&gt; +        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
&gt; +        (_WebKitWebSrcPrivate):
&gt; +        (webkit_web_src_init):
&gt; +        (webKitWebSrcFinalize):
&gt; +        (webKitWebSrcSetProperty):
&gt; +        (webKitWebSrcGetProperty):
&gt; +        (webKitWebSrcStop):
&gt; +        (webKitWebSrcStart):
&gt; +        (webKitWebSrcChangeState):
&gt; +        (webKitWebSrcQueryWithParent):
&gt; +        (webKitWebSrcGetUri):
&gt; +        (webKitWebSrcSetUri):
&gt; +        (webKitWebSrcNeedDataMainCb):
&gt; +        (webKitWebSrcEnoughDataMainCb):
&gt; +        (webKitWebSrcSeekMainCb):
&gt; +        (webKitWebSrcSeekDataCb):
&gt; +        (webKitWebSrcSetMediaPlayer):
&gt; +        (StreamingClient::StreamingClient):
&gt; +        (StreamingClient::~StreamingClient):
&gt; +        (StreamingClient::didReceiveResponse):
&gt; +        (StreamingClient::didReceiveData):
&gt; +        (StreamingClient::didFinishLoading):
&gt; +        (StreamingClient::wasBlocked):
&gt; +        (StreamingClient::cannotShowURL):

This doesn&apos;t look up to date. You should explain briefly here what you are changing.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:71
&gt; +class StreamingClientHandler {
&gt; +    public:
&gt; +        StreamingClientHandler(WebKitWebSrc*);
&gt; +        virtual ~StreamingClientHandler();
&gt; +
&gt; +        char* getOrCreateReadBuffer(size_t requestedSize, size_t&amp; actualSize);
&gt; +        void responseReceived(const ResourceResponse&amp;);
&gt; +        void dataReceived(const char*, int);
&gt; +        void notifyFinished();
&gt; +
&gt; +    private:
&gt; +        WebKitWebSrc* m_src;
&gt; +};

I wonder if we could add the common implementation to the base class instead of using a new class.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:73
&gt; +// common StreamingClient interface

Comments should start with capital letter and finish with a period.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:80
&gt; +        virtual bool loadFailed() const = 0;
&gt; +        virtual void setDefersLoading(bool) = 0;
&gt; +};

So, instead of an abstract class, we could probably add the common implementation here.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:98
&gt;          WebKitWebSrc* m_src;

This is already in the handler, maybe we could add a getter to the handler, or if we end up using a base class, move this to the base class as protected member.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:99
&gt; +        StreamingClientHandler* m_handler;

If we use the handler this should be OwnPtr&lt;StreamingClientHandler&gt;

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:124
&gt; +
&gt; +        WebKitWebSrc* m_src;
&gt; +        StreamingClientHandler* m_handler;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:-288
&gt; -    if (priv-&gt;buffer) {
&gt; -#ifdef GST_API_VERSION_1
&gt; -        unmapGstBuffer(priv-&gt;buffer.get());
&gt; -#endif
&gt; -        priv-&gt;buffer.clear();
&gt; -    }

Why don&apos;t we need this anymore?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:371
&gt; +        GST_OBJECT_LOCK(src);
&gt;          priv-&gt;iradioMode = g_value_get_boolean(value);
&gt; +        GST_OBJECT_UNLOCK(src);

I wonder if we could add a simple GstMutexLocker class, to simply the locks, you wouldn&apos;t need to unlock the object on every function return, for example.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:439
&gt; +// must be called on main thread and with object unlocked

Comments should start with capital letter and finish with a period.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:443
&gt; +    gboolean seeking;

Declare this when first used, and use bool instead of gboolean.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:500
&gt; +// must be called on main thread and with object unlocked

Comments should start with capital letter and finish with a period.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:558
&gt; +        CachedResourceLoader* loader = priv-&gt;player-&gt;cachedResourceLoader();
&gt; +        if (loader)
&gt; +            priv-&gt;client = new CachedResourceStreamingClient(src, loader, request);

if (CachedResourceLoader* loader = priv-&gt;player-&gt;cachedResourceLoader())
    priv-&gt;client = new CachedResourceStreamingClient(src, loader, request);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:607
&gt; +        priv-&gt;startID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcStart, gst_object_ref(src), (GDestroyNotify) gst_object_unref);

You can use g_idle_add_full with G_PRIORITY_DEFAULT instead of a timeout source with 0 delay. You should use C++ style casts for GSourceFunc and GDestroyNotify.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:615
&gt; +        priv-&gt;stopID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcStop, gst_object_ref(src), (GDestroyNotify) gst_object_unref);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:638
&gt; +        if ((format == GST_FORMAT_BYTES) &amp;&amp; (src-&gt;priv-&gt;size &gt; 0)) {

I know this was already like this, but now that you are modifying it we can take advantage to remove the extra parentheses.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:926
&gt; +// StreamingClientHandler

This comment looks redundant to me.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:935
&gt; +    gst_object_unref(m_src);
&gt; +    m_src = 0;

We should use GRefPtr for this

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1124
&gt; +// CachedResourceStreamingClient

This comment looks redundant too.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1127
&gt; +    , m_handler(new StreamingClientHandler(src))

This should use OwnPtr and adopt the pointer here.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1138
&gt; +    gst_object_unref(m_src);
&gt; +    m_src = 0;

This should use GRefPtr. I think this should be done in the parent class or the handler, but not in both places.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1151
&gt; +    return (!m_resource);

I don&apos;t think the parentheses are need here.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1191
&gt; +// ResourceHandleStreamingClient

This comment looks also redundant.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1194
&gt; +    , m_handler(new StreamingClientHandler(src))

Same comment about OwnPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918783</commentid>
    <comment_count>29</comment_count>
      <attachid>209121</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-19 14:06:30 -0700</bug_when>
    <thetext>Created attachment 209121
Patch

(In reply to comment #28)
&gt; (From update of attachment 208831 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208831&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; +        Patch by Andre Moreira Magalhaes &lt;andre.magalhaes@collabora.co.uk&gt; on 2013-08-14
&gt; &gt; +        Reviewed by Philippe Normand.
&gt; 
&gt; Please, don&apos;t submit this as reviewed, since it contains new code that hasn&apos;t been reviewed.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/ChangeLog:37
&gt; &gt; +        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
&gt; &gt; +        (_WebKitWebSrcPrivate):
&gt; &gt; +        (webkit_web_src_init):
&gt; &gt; +        (webKitWebSrcFinalize):
&gt; &gt; +        (webKitWebSrcSetProperty):
&gt; &gt; +        (webKitWebSrcGetProperty):
&gt; &gt; +        (webKitWebSrcStop):
&gt; &gt; +        (webKitWebSrcStart):
&gt; &gt; +        (webKitWebSrcChangeState):
&gt; &gt; +        (webKitWebSrcQueryWithParent):
&gt; &gt; +        (webKitWebSrcGetUri):
&gt; &gt; +        (webKitWebSrcSetUri):
&gt; &gt; +        (webKitWebSrcNeedDataMainCb):
&gt; &gt; +        (webKitWebSrcEnoughDataMainCb):
&gt; &gt; +        (webKitWebSrcSeekMainCb):
&gt; &gt; +        (webKitWebSrcSeekDataCb):
&gt; &gt; +        (webKitWebSrcSetMediaPlayer):
&gt; &gt; +        (StreamingClient::StreamingClient):
&gt; &gt; +        (StreamingClient::~StreamingClient):
&gt; &gt; +        (StreamingClient::didReceiveResponse):
&gt; &gt; +        (StreamingClient::didReceiveData):
&gt; &gt; +        (StreamingClient::didFinishLoading):
&gt; &gt; +        (StreamingClient::wasBlocked):
&gt; &gt; +        (StreamingClient::cannotShowURL):
&gt; 
&gt; This doesn&apos;t look up to date. You should explain briefly here what you are changing.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:71
&gt; &gt; +class StreamingClientHandler {
&gt; &gt; +    public:
&gt; &gt; +        StreamingClientHandler(WebKitWebSrc*);
&gt; &gt; +        virtual ~StreamingClientHandler();
&gt; &gt; +
&gt; &gt; +        char* getOrCreateReadBuffer(size_t requestedSize, size_t&amp; actualSize);
&gt; &gt; +        void responseReceived(const ResourceResponse&amp;);
&gt; &gt; +        void dataReceived(const char*, int);
&gt; &gt; +        void notifyFinished();
&gt; &gt; +
&gt; &gt; +    private:
&gt; &gt; +        WebKitWebSrc* m_src;
&gt; &gt; +};
&gt; 
&gt; I wonder if we could add the common implementation to the base class instead of using a new class.
&gt; 
Done, made StreamingClient a base class now.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:73
&gt; &gt; +// common StreamingClient interface
&gt; 
&gt; Comments should start with capital letter and finish with a period.
&gt; 
Fixed, removed this one.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:80
&gt; &gt; +        virtual bool loadFailed() const = 0;
&gt; &gt; +        virtual void setDefersLoading(bool) = 0;
&gt; &gt; +};
&gt; 
&gt; So, instead of an abstract class, we could probably add the common implementation here.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:98
&gt; &gt;          WebKitWebSrc* m_src;
&gt; 
&gt; This is already in the handler, maybe we could add a getter to the handler, or if we end up using a base class, move this to the base class as protected member.
&gt; 
Done, using from base class now.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:99
&gt; &gt; +        StreamingClientHandler* m_handler;
&gt; 
&gt; If we use the handler this should be OwnPtr&lt;StreamingClientHandler&gt;
&gt; 
No handler anymore.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:124
&gt; &gt; +
&gt; &gt; +        WebKitWebSrc* m_src;
&gt; &gt; +        StreamingClientHandler* m_handler;
&gt; 
&gt; Ditto.
&gt; 
Ditto :)

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:-288
&gt; &gt; -    if (priv-&gt;buffer) {
&gt; &gt; -#ifdef GST_API_VERSION_1
&gt; &gt; -        unmapGstBuffer(priv-&gt;buffer.get());
&gt; &gt; -#endif
&gt; &gt; -        priv-&gt;buffer.clear();
&gt; &gt; -    }
&gt; 
&gt; Why don&apos;t we need this anymore?
&gt; 
This is not needed. The thing here is that the element will go to NULL state before dispose, thus stop will be called and all resources freed. 
If we kept this code and the element dispose were called before setting the state to NULL many other members (everything reset on stop) would leak, not only the buffer.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:371
&gt; &gt; +        GST_OBJECT_LOCK(src);
&gt; &gt;          priv-&gt;iradioMode = g_value_get_boolean(value);
&gt; &gt; +        GST_OBJECT_UNLOCK(src);
&gt; 
&gt; I wonder if we could add a simple GstMutexLocker class, to simply the locks, you wouldn&apos;t need to unlock the object on every function return, for example.
&gt; 
Added a new class GMutexLocker (generic) in WTF/wtf/gobject/ as discussed with Gustavo Noronha and changed the gst webkitsrc code to use it instead.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:439
&gt; &gt; +// must be called on main thread and with object unlocked
&gt; 
&gt; Comments should start with capital letter and finish with a period.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:443
&gt; &gt; +    gboolean seeking;
&gt; 
&gt; Declare this when first used, and use bool instead of gboolean.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:500
&gt; &gt; +// must be called on main thread and with object unlocked
&gt; 
&gt; Comments should start with capital letter and finish with a period.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:558
&gt; &gt; +        CachedResourceLoader* loader = priv-&gt;player-&gt;cachedResourceLoader();
&gt; &gt; +        if (loader)
&gt; &gt; +            priv-&gt;client = new CachedResourceStreamingClient(src, loader, request);
&gt; 
&gt; if (CachedResourceLoader* loader = priv-&gt;player-&gt;cachedResourceLoader())
&gt;     priv-&gt;client = new CachedResourceStreamingClient(src, loader, request);
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:607
&gt; &gt; +        priv-&gt;startID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcStart, gst_object_ref(src), (GDestroyNotify) gst_object_unref);
&gt; 
&gt; You can use g_idle_add_full with G_PRIORITY_DEFAULT instead of a timeout source with 0 delay. You should use C++ style casts for GSourceFunc and GDestroyNotify.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:615
&gt; &gt; +        priv-&gt;stopID = g_timeout_add_full(G_PRIORITY_DEFAULT, 0, (GSourceFunc) webKitWebSrcStop, gst_object_ref(src), (GDestroyNotify) gst_object_unref);
&gt; 
&gt; Ditto.
&gt; 
Done, also changed other places that were using g_timeout_add to use g_idle_add.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:638
&gt; &gt; +        if ((format == GST_FORMAT_BYTES) &amp;&amp; (src-&gt;priv-&gt;size &gt; 0)) {
&gt; 
&gt; I know this was already like this, but now that you are modifying it we can take advantage to remove the extra parentheses.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:926
&gt; &gt; +// StreamingClientHandler
&gt; 
&gt; This comment looks redundant to me.
&gt; 
Removed.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:935
&gt; &gt; +    gst_object_unref(m_src);
&gt; &gt; +    m_src = 0;
&gt; 
&gt; We should use GRefPtr for this
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1124
&gt; &gt; +// CachedResourceStreamingClient
&gt; 
&gt; This comment looks redundant too.
&gt; 
Removed.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1127
&gt; &gt; +    , m_handler(new StreamingClientHandler(src))
&gt; 
&gt; This should use OwnPtr and adopt the pointer here.
&gt; 
Not needed as we dont have a handler anymore.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1138
&gt; &gt; +    gst_object_unref(m_src);
&gt; &gt; +    m_src = 0;
&gt; 
&gt; This should use GRefPtr. I think this should be done in the parent class or the handler, but not in both places.
&gt; 
Done.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1151
&gt; &gt; +    return (!m_resource);
&gt; 
&gt; I don&apos;t think the parentheses are need here.
&gt; 
Removed.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1191
&gt; &gt; +// ResourceHandleStreamingClient
&gt; 
&gt; This comment looks also redundant.
&gt; 
Removed.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1194
&gt; &gt; +    , m_handler(new StreamingClientHandler(src))
&gt; 
&gt; Same comment about OwnPtr
Also not needed anymore.

Thanks for the review, new patch attached.

I also ran some manual tests and tested the regressions on bug #117141 and bug #117688 and everything looks fine.

$ Tools/Scripts/run-webkit-tests --no-new-test-results --debug-rwt-logging --no-show-results --no-sample-on-timeout --results-directory layout-test-results --debug --webkit-test-runner --gtk fast/js/custom-constructors.html  fast/js/cyclic-proto.html --iteration=100
...
17:39:00.966 22661 Testing completed, Exit status: 0
=&gt; Results: 200/200 tests passed (100.0%)
=&gt; Tests to be fixed (0):
=&gt; Tests that will only be fixed if they crash (WONTFIX) (0):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918788</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-19 14:10:30 -0700</bug_when>
    <thetext>Attachment 209121 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/wtf/gobject/GMutexLocker.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp&apos;]&quot; exit_code: 1
Source/WTF/wtf/gobject/GMutexLocker.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:783:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:817:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:899:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:920:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1021:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1073:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1131:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1197:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1206:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1220:  Declaration has space between type name and * in WebKitWebSrc *src  [whitespace/declaration] [3]
Total errors found: 11 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918818</commentid>
    <comment_count>31</comment_count>
      <attachid>209128</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-19 15:02:55 -0700</bug_when>
    <thetext>Created attachment 209128
Patch

Fix buildbot issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918819</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-19 15:04:42 -0700</bug_when>
    <thetext>Attachment 209128 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/wtf/gobject/GMutexLocker.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp&apos;]&quot; exit_code: 1
Source/WTF/wtf/gobject/GMutexLocker.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918824</commentid>
    <comment_count>33</comment_count>
      <attachid>209131</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-19 15:19:34 -0700</bug_when>
    <thetext>Created attachment 209131
Patch

... and again, now Tools/Scripts/check-webkit-style returns no error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919253</commentid>
    <comment_count>34</comment_count>
      <attachid>209131</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-20 15:10:47 -0700</bug_when>
    <thetext>Comment on attachment 209131
Patch

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

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:39
&gt; +    inline GMutexLocker()
&gt; +        : m_mutex(0)
&gt; +    {
&gt; +    }

This is unused.

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:42
&gt; +        : m_mutex(0)

m_mutex(mutex)

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:62
&gt; +    inline void lock(GMutex *mutex)
&gt; +    {
&gt; +        m_mutex = mutex;
&gt; +        if (m_mutex)
&gt; +            g_mutex_lock(m_mutex);
&gt; +    }
&gt; +
&gt; +    inline void unlock()
&gt; +    {
&gt; +        if (m_mutex) {
&gt; +            g_mutex_unlock(m_mutex);
&gt; +            m_mutex = 0;
&gt; +        }
&gt; +    }

Looks like this should be private.
You have nothing preventing bad use with the current design:

    GMutexLocker foo;
    foo.lock(bar);
    foo.lock(baz);

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:56
&gt; +/* Premisses:
&gt; + * - webkitsrc may be created from any thread inside gstreamer
&gt; + * - webkitsrc may be created without a player involved (e.g.: dash gstreamer element
&gt; + *   internally downloading stream fragments)
&gt; + * - streaming client holds reference to src, so that src is never deleted while client exists
&gt; + * - if the src exists, appsrc also exists
&gt; + * - streaming client is created on start
&gt; + * - streaming client is deleted on stop and cancels resource
&gt; + * - streaming client callbacks are always invoked from main thread
&gt; + */

Wrong comment style.

Honestly this comment does not help. It should have explanation on why your premisses matter.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:60
&gt; +// StreamingClient base class.

Useless comment.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:86
&gt; +        bool loadFailed() const;
&gt; +        void setDefersLoading(bool);

Missing Overrides.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:93
&gt; +        char* getOrCreateReadBuffer(CachedResource*, size_t requestedSize, size_t&amp; actualSize);
&gt; +        void responseReceived(CachedResource*, const ResourceResponse&amp;);
&gt; +        void dataReceived(CachedResource*, const char*, int);
&gt; +        void notifyFinished(CachedResource*);

ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:106
&gt; +        bool loadFailed() const;
&gt; +        void setDefersLoading(bool);

ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:117
&gt; +        char* getOrCreateReadBuffer(size_t requestedSize, size_t&amp; actualSize);
&gt; +        void willSendRequest(ResourceHandle*, ResourceRequest&amp;, const ResourceResponse&amp;);
&gt; +        void didReceiveResponse(ResourceHandle*, const ResourceResponse&amp;);
&gt; +        void didReceiveData(ResourceHandle*, const char*, int, int);
&gt; +        void didFinishLoading(ResourceHandle*, double /*finishTime*/);
&gt; +        void didFail(ResourceHandle*, const ResourceError&amp;);
&gt; +        void wasBlocked(ResourceHandle*);
&gt; +        void cannotShowURL(ResourceHandle*);

ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:492
&gt; +// Must be called on main thread and with object unlocked.

You should have assertions instead of a comment.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:549
&gt; +    if (priv-&gt;player) {
&gt; +        if (CachedResourceLoader* loader = priv-&gt;player-&gt;cachedResourceLoader())
&gt; +            priv-&gt;client = new CachedResourceStreamingClient(src, loader, request);

This looks odd. If you have priv-&gt;player but no loader, you don&apos;t create the client?
Is that intended?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919876</commentid>
    <comment_count>35</comment_count>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-22 07:40:27 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 209131 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209131&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:39
&gt; &gt; +    inline GMutexLocker()
&gt; &gt; +        : m_mutex(0)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; 
&gt; This is unused.
&gt; 
&gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:42
&gt; &gt; +        : m_mutex(0)
&gt; 
&gt; m_mutex(mutex)
&gt; 
&gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:62
&gt; &gt; +    inline void lock(GMutex *mutex)
&gt; &gt; +    {
&gt; &gt; +        m_mutex = mutex;
&gt; &gt; +        if (m_mutex)
&gt; &gt; +            g_mutex_lock(m_mutex);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    inline void unlock()
&gt; &gt; +    {
&gt; &gt; +        if (m_mutex) {
&gt; &gt; +            g_mutex_unlock(m_mutex);
&gt; &gt; +            m_mutex = 0;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Looks like this should be private.
&gt; You have nothing preventing bad use with the current design:
&gt; 
&gt;     GMutexLocker foo;
&gt;     foo.lock(bar);
&gt;     foo.lock(baz);
&gt; 
Tbh, I didn&apos;t want to create this class, I just did it cause Carlos requested on comment #28.

We could make the &quot;lock&quot; method private but we need a public &quot;unlock&quot; method at least as there are some cases we need to unlock it manually.

What do you suggest here? Should I make &quot;lock&quot; private? Should I revert this change and use GST_OBJECT_LOCK as it was before?

Note that having only a public &quot;unlock&quot; method would mean that once the GMutexLocker is unlocked it cannot be reused anymore, e.g.:

  {
    GMutexLocker foo(bar);
    doSomethingThatRequiresLock();
    foo.unlock();

    doSomethingElse();

    // cannot lock bar again using &quot;foo&quot; locker, need to create a new one.
    GMutexLocker foo1(bar);
    doSomethingThatRequiresLock();
  }

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:56
&gt; &gt; +/* Premisses:
&gt; &gt; + * - webkitsrc may be created from any thread inside gstreamer
&gt; &gt; + * - webkitsrc may be created without a player involved (e.g.: dash gstreamer elementissues 
&gt; &gt; + *   internally downloading stream fragments)
&gt; &gt; + * - streaming client holds reference to src, so that src is never deleted while client exists
&gt; &gt; + * - if the src exists, appsrc also exists
&gt; &gt; + * - streaming client is created on start
&gt; &gt; + * - streaming client is deleted on stop and cancels resource
&gt; &gt; + * - streaming client callbacks are always invoked from main thread
&gt; &gt; + */
&gt; 
&gt; Wrong comment style.
&gt; 
&gt; Honestly this comment does not help. It should have explanation on why your premisses matter.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:60
&gt; &gt; +// StreamingClient base class.
&gt; 
&gt; Useless comment.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:86
&gt; &gt; +        bool loadFailed() const;
&gt; &gt; +        void setDefersLoading(bool);
&gt; 
&gt; Missing Overrides.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:93
&gt; &gt; +        char* getOrCreateReadBuffer(CachedResource*, size_t requestedSize, size_t&amp; actualSize);
&gt; &gt; +        void responseReceived(CachedResource*, const ResourceResponse&amp;);
&gt; &gt; +        void dataReceived(CachedResource*, const char*, int);
&gt; &gt; +        void notifyFinished(CachedResource*);
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:106
&gt; &gt; +        bool loadFailed() const;
&gt; &gt; +        void setDefersLoading(bool);
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:117
&gt; &gt; +        char* getOrCreateReadBuffer(size_t requestedSize, size_t&amp; actualSize);
&gt; &gt; +        void willSendRequest(ResourceHandle*, ResourceRequest&amp;, const ResourceResponse&amp;);
&gt; &gt; +        void didReceiveResponse(ResourceHandle*, const ResourceResponse&amp;);
&gt; &gt; +        void didReceiveData(ResourceHandle*, const char*, int, int);
&gt; &gt; +        void didFinishLoading(ResourceHandle*, double /*finishTime*/);
&gt; &gt; +        void didFail(ResourceHandle*, const ResourceError&amp;);
&gt; &gt; +        void wasBlocked(ResourceHandle*);
&gt; &gt; +        void cannotShowURL(ResourceHandle*);
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:492
&gt; &gt; +// Must be called on main thread and with object unlocked.
&gt; 
&gt; You should have assertions instead of a comment.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:549
&gt; &gt; +    if (priv-&gt;player) {
&gt; &gt; +        if (CachedResourceLoader* loader = priv-&gt;player-&gt;cachedResourceLoader())
&gt; &gt; +            priv-&gt;client = new CachedResourceStreamingClient(src, loader, request);
&gt; 
&gt; This looks odd. If you have priv-&gt;player but no loader, you don&apos;t create the client?
&gt; Is that intended?
I will work on a fix for the other comments in the meantime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920227</commentid>
    <comment_count>36</comment_count>
      <attachid>209462</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-23 08:21:18 -0700</bug_when>
    <thetext>Created attachment 209462
GMutexLocker.h attempt

(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; (From update of attachment 209131 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209131&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:39
&gt; &gt; &gt; +    inline GMutexLocker()
&gt; &gt; &gt; +        : m_mutex(0)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; This is unused.
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:42
&gt; &gt; &gt; +        : m_mutex(0)
&gt; &gt; 
&gt; &gt; m_mutex(mutex)
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:62
&gt; &gt; &gt; +    inline void lock(GMutex *mutex)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        m_mutex = mutex;
&gt; &gt; &gt; +        if (m_mutex)
&gt; &gt; &gt; +            g_mutex_lock(m_mutex);
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    inline void unlock()
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        if (m_mutex) {
&gt; &gt; &gt; +            g_mutex_unlock(m_mutex);
&gt; &gt; &gt; +            m_mutex = 0;
&gt; &gt; &gt; +        }
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; Looks like this should be private.
&gt; &gt; You have nothing preventing bad use with the current design:
&gt; &gt; 
&gt; &gt;     GMutexLocker foo;
&gt; &gt;     foo.lock(bar);
&gt; &gt;     foo.lock(baz);
&gt; &gt; 
&gt; Tbh, I didn&apos;t want to create this class, I just did it cause Carlos requested on comment #28.
&gt; 
&gt; We could make the &quot;lock&quot; method private but we need a public &quot;unlock&quot; method at least as there are some cases we need to unlock it manually.
&gt; 
&gt; What do you suggest here? Should I make &quot;lock&quot; private? Should I revert this change and use GST_OBJECT_LOCK as it was before?
&gt; 
&gt; Note that having only a public &quot;unlock&quot; method would mean that once the GMutexLocker is unlocked it cannot be reused anymore, e.g.:
&gt; 
&gt;   {
&gt;     GMutexLocker foo(bar);
&gt;     doSomethingThatRequiresLock();
&gt;     foo.unlock();
&gt; 
&gt;     doSomethingElse();
&gt; 
&gt;     // cannot lock bar again using &quot;foo&quot; locker, need to create a new one.
&gt;     GMutexLocker foo1(bar);
&gt;     doSomethingThatRequiresLock();
&gt;   }
&gt; 

Please check the attached GMutexLocker.h and let me know what you think and I will update the patch accordingly.

The new class design is more similar to QMutexLocker.h (see http://qt.gitorious.org/qt/qt/blobs/HEAD/src/corelib/thread/qmutex.h)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920273</commentid>
    <comment_count>37</comment_count>
      <attachid>209471</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-23 10:18:41 -0700</bug_when>
    <thetext>Created attachment 209471
Patch

New patch addressing all suggestions from comment #34, including updated GMutexLocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920276</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-23 10:20:22 -0700</bug_when>
    <thetext>Attachment 209471 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/wtf/gobject/GMutexLocker.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp&apos;]&quot; exit_code: 1
Source/WTF/wtf/gobject/GMutexLocker.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920281</commentid>
    <comment_count>39</comment_count>
      <attachid>209473</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-23 10:24:07 -0700</bug_when>
    <thetext>Created attachment 209473
Patch

(In reply to comment #37)
&gt; Created an attachment (id=209471) [details]
&gt; Patch
&gt; 
&gt; New patch addressing all suggestions from comment #34, including updated GMutexLocker.

... and new one passing check-style, I always forget :/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921015</commentid>
    <comment_count>40</comment_count>
      <attachid>209473</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-08-26 07:20:19 -0700</bug_when>
    <thetext>Comment on attachment 209473
Patch

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

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:36
&gt; +    inline explicit GMutexLocker(GMutex *mutex)

Misplaced * :)

&gt; Source/WTF/wtf/gobject/GMutexLocker.h:48
&gt; +            g_mutex_lock(m_mutex);

I wonder if instead of _lock here we could _try_lock and ASSERT on failure, would it make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921017</commentid>
    <comment_count>41</comment_count>
      <attachid>209653</attachid>
    <who name="Andre Moreira Magalhaes">andrunko</who>
    <bug_when>2013-08-26 07:32:04 -0700</bug_when>
    <thetext>Created attachment 209653
Patch

(In reply to comment #40)
&gt; (From update of attachment 209473 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209473&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:36
&gt; &gt; +    inline explicit GMutexLocker(GMutex *mutex)
&gt; 
&gt; Misplaced * :)
&gt;
Arg, fixed, strange that check-style didn&apos;t catch it :/.
  
&gt; &gt; Source/WTF/wtf/gobject/GMutexLocker.h:48
&gt; &gt; +            g_mutex_lock(m_mutex);
&gt; 
&gt; I wonder if instead of _lock here we could _try_lock and ASSERT on failure, would it make sense?
hmm, I don&apos;t think we want that actually. &quot;trylock&quot; would just return FALSE if the mutex is already locked by another thread instead of blocking. Quoting from gmutex docs:

  void g_mutex_lock (GMutex *mutex);
  Locks mutex. If mutex is already locked by another thread, the current thread will block until mutex is unlocked by the other thread.
  
  gboolean g_mutex_trylock (GMutex *mutex);
  Tries to lock mutex. If mutex is already locked by another thread, it immediately returns FALSE. Otherwise it locks mutex and returns TRUE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921514</commentid>
    <comment_count>42</comment_count>
      <attachid>209653</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2013-08-27 07:35:56 -0700</bug_when>
    <thetext>Comment on attachment 209653
Patch

Alright, thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921524</commentid>
    <comment_count>43</comment_count>
      <attachid>209653</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-27 07:59:04 -0700</bug_when>
    <thetext>Comment on attachment 209653
Patch

Clearing flags on attachment: 209653

Committed r154683: &lt;http://trac.webkit.org/changeset/154683&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921525</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-27 07:59:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200009</attachid>
            <date>2013-04-29 07:47:21 -0700</date>
            <delta_ts>2013-04-29 10:11:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115352-20130429154627.patch</filename>
            <type>text/plain</type>
            <size>23226</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2U1MDk4NzVjZGVlMWQ3
NzJkMzI3ZTQ1MzQyZWQzOTQ4MTA3OGY0My4uYTFhOTVlZjhlZTg3NmZhNGJhOTI2NDZlZDUyY2Yw
ZDg2YzRiNDBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTA0LTI5ICBBbmRy
ZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgor
CisgICAgICAgIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNh
ZmUuCisKKyAgICAgICAgR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IG1heSBiZSBjcmVhdGVkIGJ5
IGFueSBnc3RyZWFtZXIgZWxlbWVudCBvbiBhbnkgdGhyZWFkIGJ5IGNhbGxpbmcKKyAgICAgICAg
Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSB3aXRoIHRoZSBVUklzIGhhbmRsZWQgYnkgdGhlIHNv
dXJjZSBlbGVtZW50LgorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhlIGdzdHJlYW1l
ciBzb3VyY2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBpdCBi
ZWluZworICAgICAgICBjcmVhdGVkIG91dHNpZGUgdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAg
IE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTM1MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChfV2ViS2l0V2ViU3JjUHJpdmF0ZSk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3NyY19pbml0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFs
aXplKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjU3RhcnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUp
OgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY0dldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdo
RGF0YU1haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0TWVkaWFQ
bGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQpOgorICAg
ICAgICAoU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVh
bWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVu
dDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpkaWRGaW5pc2hM
b2FkaW5nKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tlZCk6CisgICAgICAg
IChTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dVUkwpOgorCiAyMDEzLTA0LTE4ICBTZW9ranUg
S3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBU
b29sYmFyIGljb25zIGFyZSBkaXNwbGF5ZWQgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggNWIyYWRmMjk0ZDQ5ZTQyNjQxMmU5Mzgx
MDJkNWNiZmVkMTVlMDUzMC4uZTg4MGJjNDY0MGVkNzg2MzJlNjZjYjY5YzA0MzQ0YjE1Mjc0ZDIz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTQy
LDYgKzQyLDE2IEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorLyogUHJlbWlzc2VzOgorICogLSB3ZWJraXRzcmMgbWF5
IGJlIGNyZWF0ZWQgZnJvbSBhbnkgdGhyZWFkIGluc2lkZSBnc3RyZWFtZXIKKyAqIC0gY2xpZW50
IGhvbGRzIHJlZmVyZW5jZSB0byBzcmMsIHNvIHRoYXQgc3JjIGlzIG5ldmVyIGRlbGV0ZWQgd2hp
bGUgY2xpZW50IGV4aXN0cworICogLSBpZiB0aGUgc3JjIGV4aXN0cywgYXBwc3JjIGFsc28gZXhp
c3RzCisgKiAtIGNsaWVudCBpcyBjcmVhdGVkIG9uIHN0YXJ0CisgKiAtIGNsaWVudCBpcyBkZWxl
dGVkIG9uIHN0b3AgYWZ0ZXIgY2FuY2VsbGluZyByZXNvdXJjZSBoYW5kbGUKKyAqIC0gY2xpZW50
IGNhbGxiYWNrcyBhcmUgYWx3YXlzIGludm9rZWQgZnJvbSBtYWluIHRocmVhZAorICogLSByZXNv
dXJjZSBoYW5kbGUgbWV0aG9kcyBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgZnJvbSBtYWluIHRocmVh
ZAorICovCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBjbGFzcyBTdHJlYW1pbmdDbGll
bnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewpAQCAtODQsNiArOTQsOCBAQCBzdHJ1
Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZzZXQ7
CiAKKyAgICBndWludCBzdGFydElEOworICAgIGd1aW50IHN0b3BJRDsKICAgICBndWludCBuZWVk
RGF0YUlEOwogICAgIGd1aW50IGVub3VnaERhdGFJRDsKICAgICBndWludCBzZWVrSUQ7CkBAIC0x
MzYsOCArMTQ4LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBT
cmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRpYyB2b2lkIHdlYktp
dFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9m
ZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9w
KFdlYktpdFdlYlNyYyosIGJvb2wpOwotCiBzdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNy
Y0NhbGxiYWNrcyA9IHsKICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiLAogICAgIHdlYktpdFdl
YlNyY0Vub3VnaERhdGFDYiwKQEAgLTIyOSw4ICsyMzksNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgc3JjLT5wcml2ID0gcHJpdjsK
IAotICAgIHByaXYtPmNsaWVudCA9IG5ldyBTdHJlYW1pbmdDbGllbnQoc3JjKTsKLQogICAgIHBy
aXYtPmFwcHNyYyA9IEdTVF9BUFBfU1JDKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3Jj
IiwgMCkpOwogICAgIGlmICghcHJpdi0+YXBwc3JjKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSBhcHBzcmMiKTsKQEAgLTI3OSw3ICsyODcsOCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIGlm
IChwcml2LT5oYXZlQXBwU3JjMjcpCiAgICAgICAgIGdfb2JqZWN0X3NldChwcml2LT5hcHBzcmMs
ICJtaW4tcGVyY2VudCIsIDIwLCBOVUxMKTsKIAotICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBm
YWxzZSk7CisgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKyAgICBn
c3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKIH0KIAogc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCkBAIC0zMDIsOCArMzExLDYgQEAg
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIFdl
YktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsKICAgICBXZWJLaXRXZWJT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgZGVsZXRlIHByaXYtPmNsaWVudDsK
LQogICAgIGdfZnJlZShwcml2LT51cmkpOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNU
X0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwpAQCAtMzE2LDcgKzMyMyw5IEBAIHN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElE
LCBjb25zdCBHVmFsdWUqCiAKICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9J
UkFESU9fTU9ERToKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgICAgIHByaXYt
PmlyYWRpb01vZGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKKyAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9O
OgogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCkBAIC0zMzYsNiArMzQ1LDcgQEAgc3RhdGljIHZv
aWQgd2ViS2l0V2ViU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQs
IEdWYWx1ZSogdmFsdWUKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9i
amVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHN3aXRjaCAocHJvcElEKSB7CiAgICAgY2FzZSBQ
Uk9QX0lSQURJT19NT0RFOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2
LT5pcmFkaW9Nb2RlKTsKQEAgLTM1OSwxMiArMzY5LDIzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZh
bHVlCiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJRCwgcHNwZWMpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKIH0KIAotCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNy
Yyogc3JjLCBib29sIHNlZWtpbmcpCisvLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCBh
bmQgd2l0aCBvYmplY3QgbG9ja2VkCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChX
ZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OworICAgIGdib29sZWFuIHNlZWtpbmc7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKKworICAgIHNlZWtpbmcgPSBwcml2LT5zZWVrSUQ7CisKKyAgICBpZiAocHJpdi0+c3RhcnRJ
RCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c3RhcnRJRCk7CisgICAgICAgIHBy
aXYtPnN0YXJ0SUQgPSAwOworICAgIH0KIAogICAgIGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkg
ewogICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC0zNzIsNiArMzkz
LDExIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJv
b2wgc2Vla2luZykKICAgICB9CiAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUgPSAwOwogCisgICAg
aWYgKHByaXYtPmNsaWVudCkgeworICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50OworICAgICAg
ICBwcml2LT5jbGllbnQgPSAwOworICAgIH0KKwogICAgIGlmIChwcml2LT5mcmFtZSAmJiAhc2Vl
a2luZykKICAgICAgICAgcHJpdi0+ZnJhbWUuY2xlYXIoKTsKIApAQCAtMzg0LDcgKzQxMCw2IEBA
IHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJvb2wgc2Vl
a2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgfQogCi0gICAgR1NUX09C
SkVDVF9MT0NLKHNyYyk7CiAgICAgaWYgKHByaXYtPm5lZWREYXRhSUQpCiAgICAgICAgIGdfc291
cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKICAgICBwcml2LT5uZWVkRGF0YUlEID0gMDsK
QEAgLTM5OCw3ICs0MjMsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdl
YlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAgICAgcHJpdi0+c2Vla0lEID0gMDsKIAogICAgIHBy
aXYtPnBhdXNlZCA9IEZBTFNFOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAKICAgICBn
X2ZyZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgcHJpdi0+aXJhZGlvTmFtZSA9IDA7CkBAIC00
MTIsMTIgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3Jj
KiBzcmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAg
IHByaXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAg
ICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFz
ZWVraW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAt
MSk7Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9
IEZBTFNFOwogCkBAIC00MjYsMTggKzQ0NCwzMyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNT
dG9wKFdlYktpdFdlYlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAgICAgICAgIHByaXYtPnJlcXVl
c3RlZE9mZnNldCA9IDA7CiAgICAgfQogCisgICAgcHJpdi0+c3RvcElEID0gMDsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOworCisgICAgaWYgKHByaXYtPmFwcHNyYykgeworICAgICAgICBn
c3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworICAgICAgICBpZiAoIXNlZWtp
bmcpCisgICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsK
KyAgICB9CisKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOwor
CisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChX
ZWJLaXRXZWJTcmMqIHNyYykKKy8vIG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3
aXRoIG9iamVjdCBsb2NrZWQKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChXZWJL
aXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwogCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgaWYgKCFwcml2LT51cmkpIHsK
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAg
ICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9Ci0g
ICAgCisKICAgICBLVVJMIHVybCA9IEtVUkwoS1VSTCgpLCBwcml2LT51cmkpOwogCiAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKQEAgLTQ3MiwxNSArNTA1LDE3IEBAIHN0YXRpYyBi
b29sIHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIC8vIE5lZWRlZCB0
byB1c2UgRExOQSBzdHJlYW1pbmcgc2VydmVycwogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKCJ0cmFuc2Zlck1vZGUuZGxuYSIsICJTdHJlYW1pbmciKTsKIAorICAgIHByaXYtPmNsaWVu
dCA9IG5ldyBTdHJlYW1pbmdDbGllbnQoc3JjKTsKICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZSA9
IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoY29udGV4dCwgcmVxdWVzdCwgcHJpdi0+Y2xpZW50LCBm
YWxzZSwgZmFsc2UpOwogICAgIGlmICghcHJpdi0+cmVzb3VyY2VIYW5kbGUpIHsKICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzcmMsICJGYWlsZWQgdG8gY3JlYXRlIFJlc291cmNlSGFuZGxlIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
KyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3Rh
cnRlZCByZXF1ZXN0Iik7CiAgICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGFy
dGVkIHJlcXVlc3QiKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBGQUxTRTsKIH0K
IAogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdz
dEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCkBAIC01MTEsMTIg
KzU0NiwxNSBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdl
U3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogICAgIHN3aXRjaCAodHJhbnNpdGlv
bikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CiAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAgICAgICBpZiAoIXdl
YktpdFdlYlNyY1N0YXJ0KHNyYykpCi0gICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdF
X0ZBSUxVUkU7CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgICAgICBwcml2LT5z
dGFydElEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3Vy
Y2VGdW5jKSB3ZWJLaXRXZWJTcmNTdGFydCwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95
Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19S
RUFEWToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7Ci0g
ICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzcmMpOworICAgICAgICBwcml2LT5zdG9wSUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19Q
UklPUklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0b3AsIGdzdF9v
YmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CisgICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtNTI3LDcgKzU2NSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCiB7Ci0gICAgV2ViS2l0
V2ViU3JjKiB3ZWJraXRTcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsK
KyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVu
dCkpOwogICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCiAgICAgc3dpdGNoIChHU1RfUVVF
UllfVFlQRShxdWVyeSkpIHsKQEAgLTUzNiwxNSArNTc0LDE5IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50
LCBHc3RRCiAKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0
LCBOVUxMKTsKIAotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHdlYmtpdFNyYywgImR1cmF0aW9u
IHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAg
ICAgIGlmICgoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpICYmICh3ZWJraXRTcmMtPnByaXYt
PnNpemUgPiAwKSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwg
Zm9ybWF0LCB3ZWJraXRTcmMtPnByaXYtPnNpemUpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUo
Zm9ybWF0KSk7CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgICAgICBpZiAoKGZv
cm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSAmJiAoc3JjLT5wcml2LT5zaXplID4gMCkpIHsKKyAg
ICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgc3JjLT5wcml2
LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIH0KKyAgICAgICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R1NUX1FVRVJZX1VSSTogewotICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgd2Via2l0
U3JjLT5wcml2LT51cmkpOworICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAgICAg
Z3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNyYy0+cHJpdi0+dXJpKTsKKyAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmVzdWx0ID0gVFJVRTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtNTg1LDcgKzYyNywxMyBAQCBjb25zdCBnY2hhciogY29uc3QqIHdlYktpdFdl
YlNyY0dldFByb3RvY29scyhHVHlwZSkKIAogc3RhdGljIGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRV
cmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lU
X1dFQl9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBX
RUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBnY2hhciogcmV0OworCisgICAgR1NUX09CSkVD
VF9MT0NLKHNyYyk7CisgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpOworICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29s
ZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hh
ciogdXJpLCBHRXJyb3IqKiBlcnJvcikKQEAgLTU5OCwyMCArNjQ2LDI1IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2No
YXIqIHVyaSwgR0VyCiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKKyAgICBHU1RfT0JK
RUNUX0xPQ0soc3JjKTsKICAgICBnX2ZyZWUocHJpdi0+dXJpKTsKICAgICBwcml2LT51cmkgPSAw
OwogCi0gICAgaWYgKCF1cmkpCisgICAgaWYgKCF1cmkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQogCiAgICAgS1VSTCB1cmwo
S1VSTCgpLCB1cmkpOwogCiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICF1cmwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAg
ICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX0JBRF9V
UkksICJJbnZhbGlkIFVSSSAnJXMnIiwgdXJpKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAg
IH0KIAogICAgIHByaXYtPnVyaSA9IGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgIHJldHVybiBUUlVFOwogfQogCkBA
IC02MjksNyArNjgyLDEzIEBAIHN0YXRpYyBnY2hhcioqIHdlYktpdFdlYlNyY0dldFByb3RvY29s
cyh2b2lkKQogCiBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYktpdFdlYlNyY0dldFVyaShHc3RVUklI
YW5kbGVyKiBoYW5kbGVyKQogewotICAgIHJldHVybiBnX3N0cmR1cChXRUJLSVRfV0VCX1NSQyho
YW5kbGVyKS0+cHJpdi0+dXJpKTsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJf
U1JDKGhhbmRsZXIpOworICAgIGdjaGFyKiByZXQ7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7CisgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkpCkBA
IC02NDIsMjAgKzcwMSwyNSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkpCiAgICAgICAgIHJldHVybiBG
QUxTRTsKICAgICB9CiAKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKICAgICBnX2ZyZWUocHJp
di0+dXJpKTsKICAgICBwcml2LT51cmkgPSAwOwogCi0gICAgaWYgKCF1cmkpCisgICAgaWYgKCF1
cmkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgfQogCiAgICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOwogCiAgICAgaWYgKCF1cmwu
aXNWYWxpZCgpIHx8ICF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiSW52
YWxpZCBVUkkgJyVzJyIsIHVyaSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAg
ICBwcml2LT51cmkgPSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICByZXR1cm4gVFJVRTsKIH0KICNlbmRpZgpAQCAt
Njc2LDEwICs3NDAsMTYgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY05lZWREYXRhTWFp
bkNiKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYg
PSBzcmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7Ci0KICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAvLyBhbHJlYWR5IHN0
b3BwZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpIHsKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwogICAgIHByaXYtPnBh
dXNlZCA9IEZBTFNFOworICAgIGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkKKyAgICAgICAgcHJp
di0+cmVzb3VyY2VIYW5kbGUtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwogICAgIHByaXYtPm5l
ZWREYXRhSUQgPSAwOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgcmV0dXJuIEZB
TFNFOwpAQCAtNzA2LDEwICs3NzYsMTYgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0Vu
b3VnaERhdGFNYWluQ2IoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJp
dmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIHByaXYtPnJlc291cmNlSGFuZGxlLT5zZXRE
ZWZlcnNMb2FkaW5nKHRydWUpOwotCiAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgLy8g
YWxyZWFkeSBzdG9wcGVkCisgICAgaWYgKCFwcml2LT5lbm91Z2hEYXRhSUQpIHsKKyAgICAgICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwog
ICAgIHByaXYtPnBhdXNlZCA9IFRSVUU7CisgICAgaWYgKHByaXYtPnJlc291cmNlSGFuZGxlKQor
ICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKICAg
ICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAK
QEAgLTczNSw3ICs4MTEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2Io
R3N0QXBwU3JjKiwgZ3BvaW50ZXIgdXNlckRhdGEpCiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRX
ZWJTcmNTZWVrTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogewotICAgIHdlYktpdFdlYlNyY1N0
b3Aoc3JjLCB0cnVlKTsKKyAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CiAgICAgd2ViS2l0V2Vi
U3JjU3RhcnQoc3JjKTsKIAogICAgIHJldHVybiBGQUxTRTsKQEAgLTc0NywyMyArODIzLDI5IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50
NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9
IHNyYy0+cHJpdjsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZz
ZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgaWYgKG9mZnNldCA9PSBwcml2
LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPm9mZnNldCkKKyAgICBH
U1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBw
cml2LT5yZXF1ZXN0ZWRPZmZzZXQgPT0gcHJpdi0+b2Zmc2V0KSB7CisgICAgICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KIAotICAgIGlmICgh
cHJpdi0+c2Vla2FibGUpCisgICAgaWYgKCFwcml2LT5zZWVrYWJsZSkgeworICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKG9mZnNl
dCA+IHByaXYtPnNpemUpCisgICAgfQorICAgIGlmIChvZmZzZXQgPiBwcml2LT5zaXplKSB7Cisg
ICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2Vl
ayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKIAotICAgIEdTVF9PQkpF
Q1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5zZWVrSUQpCiAgICAgICAgIGdfc291cmNlX3Jl
bW92ZShwcml2LT5zZWVrSUQpOwogICAgIHByaXYtPnNlZWtJRCA9IGdfdGltZW91dF9hZGRfZnVs
bChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01h
aW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3Vu
cmVmKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIAorCiAgICAgcmV0dXJuIFRS
VUU7CiB9CiAKQEAgLTc3Niw3NSArODU4LDU3IEBAIHZvaWQgd2ViS2l0V2ViU3JjU2V0TWVkaWFQ
bGF5ZXIoV2ViS2l0V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIpCiAg
ICAgaWYgKGRvY3VtZW50KQogICAgICAgICBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwogCisg
ICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgcHJpdi0+ZnJhbWUgPSBmcmFtZTsKICAgICBw
cml2LT5wbGF5ZXIgPSBwbGF5ZXI7CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAot
U3RyZWFtaW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMpIDogbV9z
cmMoc3JjKQorU3RyZWFtaW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBz
cmMpCisgICAgOiBtX3NyYyhzdGF0aWNfY2FzdDxXZWJLaXRXZWJTcmMqPihnc3Rfb2JqZWN0X3Jl
ZihzcmMpKSkKIHsKIAogfQogCiBTdHJlYW1pbmdDbGllbnQ6On5TdHJlYW1pbmdDbGllbnQoKQog
ewotCisgICAgZ3N0X29iamVjdF91bnJlZihtX3NyYyk7CiB9CiAKIHZvaWQgU3RyZWFtaW5nQ2xp
ZW50Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikKIHsKIH0KIAotdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQordm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNv
dXJjZUhhbmRsZSAqaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsK
ICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CiAKICAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSk7CiAKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOworCiAgICAgLy8g
SWYgd2Ugc2Vla2VkIHdlIG5lZWQgMjA2ID09IFBBUlRJQUxfQ09OVEVOVAotICAgIGlmIChwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsK
KyAgICBpZiAoaGFuZGxlICE9IHByaXYtPnJlc291cmNlSGFuZGxlIHx8IChwcml2LT5yZXF1ZXN0
ZWRPZmZzZXQgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpKSB7CisgICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9z
cmMsIFJFU09VUkNFLCBSRUFELCAoMCksICgwKSk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9v
Zl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChtX3NyYywg
ZmFsc2UpOworICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKG1fc3JjKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGxvbmcgbG9uZyBsZW5ndGggPSByZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID4gMCkgeworICAgIGlmIChsZW5ndGggPiAwKQog
ICAgICAgICBsZW5ndGggKz0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICBnc3RfYXBw
X3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7Ci0KLSNpZm5kZWYgR1NUX0FQSV9W
RVJTSU9OXzEKLSAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKLSAgICAgICAgICAg
IGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNl
Z21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVD
VChwcml2LT5hcHBzcmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKLSAgICAg
ICAgfQotI2VuZGlmCi0gICAgfQogCiAgICAgcHJpdi0+c2l6ZSA9IGxlbmd0aCA+PSAwID8gbGVu
Z3RoIDogMDsKICAgICBwcml2LT5zZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJj
YXNlY21wKCJub25lIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQtUmFuZ2VzIiku
dXRmOCgpLmRhdGEoKSk7CiAKLSAgICAvLyBpY2VjYXN0IHN0dWZmCi0gICAgU3RyaW5nIHZhbHVl
ID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOwotICAgIGlmICghdmFs
dWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOwotICAgICAgICBnaW50
NjQgaWN5TWV0YUludCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5k
cHRyLCAxMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09
ICdcMCcgJiYgaWN5TWV0YUludCA+IDApIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4g
Y2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIs
ICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxM
KSk7Ci0KLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fw
cy5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQog
ICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCk7CiAjZWxzZQog
ICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3KCk7CiAjZW5kaWYKLSAgICB2
YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKKyAgICBTdHJpbmcg
dmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS1uYW1lIik7CiAgICAgaWYgKCF2
YWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAg
ICAgICBwcml2LT5pcmFkaW9OYW1lID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7CkBA
IC04NzMsNiArOTM3LDM4IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlCiAgICAgICAgIGdzdF90
YWdfbGlzdF9hZGQodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJVExFLCBw
cml2LT5pcmFkaW9UaXRsZSwgTlVMTCk7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9VTkxPQ0so
bV9zcmMpOworCisgICAgLy8gbm90aWZ5IHNpemUvZHVyYXRpb24KKyAgICBpZiAobGVuZ3RoID4g
MCkgeworICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7
CisKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBw
U3JjMjcpIHsKKyAgICAgICAgICAgIGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0Vf
U1JDKHByaXYtPmFwcHNyYyktPnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7Cisg
ICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBw
c3JjKSwKKyAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVD
VChwcml2LT5hcHBzcmMpLAorICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBs
ZW5ndGgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIGdzdF9hcHBf
c3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOworCisgICAgLy8gaWNlY2FzdCBzdHVmZgor
ICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOworICAg
IGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOworICAg
ICAgICBnaW50NjQgaWN5TWV0YUludCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0
YSgpLCAmZW5kcHRyLCAxMCk7CisKKyAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdc
MCcgJiYgaWN5TWV0YUludCA+IDApIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2Fw
cyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJt
ZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7
CisKKyAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2Nh
cHMocHJpdi0+YXBwc3JjLCAwKTsKKworICAgIC8vIG5vdGlmeSB0YWdzCiAgICAgaWYgKGdzdF90
YWdfbGlzdF9pc19lbXB0eSh0YWdzKSkKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAg
ICBnc3RfdGFnX2xpc3RfdW5yZWYodGFncyk7CkBAIC04ODAsMTMgKzk3NiwxNSBAQCB2b2lkIFN0
cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZQogICAgICAgICBnc3RfdGFnX2xpc3RfZnJlZSh0YWdzKTsKICNlbmRp
ZgogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFkKEdTVF9FTEVNRU5UKG1fc3Jj
KSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFncyk7CisgICAgICAgIG5vdGlmeUdzdFRhZ3NPblBh
ZChHU1RfRUxFTUVOVChtX3NyYyksIHByaXYtPnNyY3BhZCwgdGFncyk7CiB9CiAKIHZvaWQgU3Ry
ZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0
ZSogcHJpdiA9IG1fc3JjLT5wcml2OwogCisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKKwog
ICAgIEdTVF9MT0dfT0JKRUNUKG1fc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+
YnVmZmVyID8gZ2V0R3N0QnVmZmVyU2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsK
IAogICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyIHx8IGRhdGEgPT0gZ2V0R3N0QnVmZmVyRGF0YVBv
aW50ZXIocHJpdi0+YnVmZmVyLmdldCgpKSk7CkBAIC04OTcsNiArOTk1LDcgQEAgdm9pZCBTdHJl
YW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0
IGNoYXIqIGRhdGEsIGkKICNlbmRpZgogCiAgICAgaWYgKHByaXYtPnNlZWtJRCB8fCBoYW5kbGUg
IT0gcHJpdi0+cmVzb3VyY2VIYW5kbGUpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9z
cmMpOwogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiU2VlayBpbiBwcm9ncmVzcywg
aWdub3JpbmcgZGF0YSIpOwogICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtOTE1LDYgKzEwMTQsOCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAg
IHByaXYtPm9mZnNldCArPSBsZW5ndGg7CiAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKHByaXYt
PmJ1ZmZlci5nZXQoKSkgPSBwcml2LT5vZmZzZXQ7CiAKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyht
X3NyYyk7CisKICAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVy
KHByaXYtPmFwcHNyYywgcHJpdi0+YnVmZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQSV9W
RVJTSU9OXzEKICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19F
T1MpCkBAIC05NDgsOCArMTA0OSwxMiBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNo
TG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9zcmMsICJIYXZlIEVPUyIpOwogCi0gICAgaWYgKCFwcml2LT5zZWVrSUQpCisgICAgR1NUX09C
SkVDVF9MT0NLKG1fc3JjKTsKKyAgICBpZiAoIXByaXYtPnNlZWtJRCkgeworICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhtX3NyYyk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0o
bV9zcmMtPnByaXYtPmFwcHNyYyk7CisgICAgfSBlbHNlCisgICAgICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKG1fc3JjKTsKIH0KIAogdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKQEAgLTk2MSwxNCArMTA2NiwzMCBA
QCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQogCiB2b2lkIFN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tlZChS
ZXNvdXJjZUhhbmRsZSopCiB7CisgICAgZ2NoYXIqIHVyaTsKKwogICAgIEdTVF9FUlJPUl9PQkpF
Q1QobV9zcmMsICJSZXF1ZXN0IHdhcyBibG9ja2VkIik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1Io
bV9zcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQWNjZXNzIHRvIFwiJXNcIiB3YXMgYmxvY2tl
ZCIsIG1fc3JjLT5wcml2LT51cmkpLCAoMCkpOworCisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3Jj
KTsKKyAgICB1cmkgPSBnX3N0cmR1cChtX3NyYy0+cHJpdi0+dXJpKTsKKyAgICBHU1RfT0JKRUNU
X1VOTE9DSyhtX3NyYyk7CisKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihtX3NyYywgUkVTT1VSQ0Us
IE9QRU5fUkVBRCwgKCJBY2Nlc3MgdG8gXCIlc1wiIHdhcyBibG9ja2VkIiwgdXJpKSwgKDApKTsK
KyAgICBnX2ZyZWUodXJpKTsKIH0KIAogdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dV
UkwoUmVzb3VyY2VIYW5kbGUqKQogeworICAgIGdjaGFyKiB1cmk7CisKICAgICBHU1RfRVJST1Jf
T0JKRUNUKG1fc3JjLCAiQ2Fubm90IHNob3cgVVJMIik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1Io
bV9zcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQ2FuJ3Qgc2hvdyBcIiVzXCIiLCBtX3NyYy0+
cHJpdi0+dXJpKSwgKDApKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisgICAgdXJp
ID0gZ19zdHJkdXAobV9zcmMtPnByaXYtPnVyaSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9z
cmMpOworCisgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQs
ICgiQ2FuJ3Qgc2hvdyBcIiVzXCIiLCB1cmkpLCAoMCkpOworICAgIGdfZnJlZSh1cmkpOwogfQog
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200022</attachid>
            <date>2013-04-29 10:12:03 -0700</date>
            <delta_ts>2013-05-20 10:49:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115352-20130429181109.patch</filename>
            <type>text/plain</type>
            <size>23257</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4NjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2U1MDk4NzVjZGVlMWQ3
NzJkMzI3ZTQ1MzQyZWQzOTQ4MTA3OGY0My4uYTFhOTVlZjhlZTg3NmZhNGJhOTI2NDZlZDUyY2Yw
ZDg2YzRiNDBiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTA0LTI5ICBBbmRy
ZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgor
CisgICAgICAgIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNh
ZmUuCisKKyAgICAgICAgR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IG1heSBiZSBjcmVhdGVkIGJ5
IGFueSBnc3RyZWFtZXIgZWxlbWVudCBvbiBhbnkgdGhyZWFkIGJ5IGNhbGxpbmcKKyAgICAgICAg
Z3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSB3aXRoIHRoZSBVUklzIGhhbmRsZWQgYnkgdGhlIHNv
dXJjZSBlbGVtZW50LgorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhlIGdzdHJlYW1l
ciBzb3VyY2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBpdCBi
ZWluZworICAgICAgICBjcmVhdGVkIG91dHNpZGUgdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAg
IE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTM1MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChfV2ViS2l0V2ViU3JjUHJpdmF0ZSk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3NyY19pbml0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFs
aXplKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjU3RhcnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUp
OgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY0dldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdo
RGF0YU1haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0TWVkaWFQ
bGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQpOgorICAg
ICAgICAoU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVh
bWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVu
dDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpkaWRGaW5pc2hM
b2FkaW5nKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tlZCk6CisgICAgICAg
IChTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dVUkwpOgorCiAyMDEzLTA0LTE4ICBTZW9ranUg
S3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBU
b29sYmFyIGljb25zIGFyZSBkaXNwbGF5ZWQgaW5jb3JyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggNWIyYWRmMjk0ZDQ5ZTQyNjQxMmU5Mzgx
MDJkNWNiZmVkMTVlMDUzMC4uNmEyYmFjMTY3MzAwNTZiZGM0ZDI4MWNmOGUwMDQwNjI4YzczNmY3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTQy
LDYgKzQyLDE2IEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorLyogUHJlbWlzc2VzOgorICogLSB3ZWJraXRzcmMgbWF5
IGJlIGNyZWF0ZWQgZnJvbSBhbnkgdGhyZWFkIGluc2lkZSBnc3RyZWFtZXIKKyAqIC0gY2xpZW50
IGhvbGRzIHJlZmVyZW5jZSB0byBzcmMsIHNvIHRoYXQgc3JjIGlzIG5ldmVyIGRlbGV0ZWQgd2hp
bGUgY2xpZW50IGV4aXN0cworICogLSBpZiB0aGUgc3JjIGV4aXN0cywgYXBwc3JjIGFsc28gZXhp
c3RzCisgKiAtIGNsaWVudCBpcyBjcmVhdGVkIG9uIHN0YXJ0CisgKiAtIGNsaWVudCBpcyBkZWxl
dGVkIG9uIHN0b3AgYWZ0ZXIgY2FuY2VsbGluZyByZXNvdXJjZSBoYW5kbGUKKyAqIC0gY2xpZW50
IGNhbGxiYWNrcyBhcmUgYWx3YXlzIGludm9rZWQgZnJvbSBtYWluIHRocmVhZAorICogLSByZXNv
dXJjZSBoYW5kbGUgbWV0aG9kcyBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgZnJvbSBtYWluIHRocmVh
ZAorICovCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBjbGFzcyBTdHJlYW1pbmdDbGll
bnQgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgewpAQCAtODQsNiArOTQsOCBAQCBzdHJ1
Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZzZXQ7
CiAKKyAgICBndWludCBzdGFydElEOworICAgIGd1aW50IHN0b3BJRDsKICAgICBndWludCBuZWVk
RGF0YUlEOwogICAgIGd1aW50IGVub3VnaERhdGFJRDsKICAgICBndWludCBzZWVrSUQ7CkBAIC0x
MzYsOCArMTQ4LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBT
cmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRpYyB2b2lkIHdlYktp
dFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9m
ZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9w
KFdlYktpdFdlYlNyYyosIGJvb2wpOwotCiBzdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNy
Y0NhbGxiYWNrcyA9IHsKICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiLAogICAgIHdlYktpdFdl
YlNyY0Vub3VnaERhdGFDYiwKQEAgLTIyOSw4ICsyMzksNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgc3JjLT5wcml2ID0gcHJpdjsK
IAotICAgIHByaXYtPmNsaWVudCA9IG5ldyBTdHJlYW1pbmdDbGllbnQoc3JjKTsKLQogICAgIHBy
aXYtPmFwcHNyYyA9IEdTVF9BUFBfU1JDKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3Jj
IiwgMCkpOwogICAgIGlmICghcHJpdi0+YXBwc3JjKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSBhcHBzcmMiKTsKQEAgLTI3OSw3ICsyODcsOCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIGlm
IChwcml2LT5oYXZlQXBwU3JjMjcpCiAgICAgICAgIGdfb2JqZWN0X3NldChwcml2LT5hcHBzcmMs
ICJtaW4tcGVyY2VudCIsIDIwLCBOVUxMKTsKIAotICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBm
YWxzZSk7CisgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKyAgICBn
c3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKIH0KIAogc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCkBAIC0zMDIsOCArMzExLDYgQEAg
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIFdl
YktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsKICAgICBXZWJLaXRXZWJT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgZGVsZXRlIHByaXYtPmNsaWVudDsK
LQogICAgIGdfZnJlZShwcml2LT51cmkpOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNU
X0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwpAQCAtMzE2LDcgKzMyMyw5IEBAIHN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElE
LCBjb25zdCBHVmFsdWUqCiAKICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9J
UkFESU9fTU9ERToKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgICAgIHByaXYt
PmlyYWRpb01vZGUgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKKyAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9O
OgogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCkBAIC0zMzYsNiArMzQ1LDcgQEAgc3RhdGljIHZv
aWQgd2ViS2l0V2ViU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQs
IEdWYWx1ZSogdmFsdWUKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9i
amVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHN3aXRjaCAocHJvcElEKSB7CiAgICAgY2FzZSBQ
Uk9QX0lSQURJT19NT0RFOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2
LT5pcmFkaW9Nb2RlKTsKQEAgLTM1OSwxMiArMzY5LDIzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZh
bHVlCiAgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJRCwgcHNwZWMpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKIH0KIAotCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNy
Yyogc3JjLCBib29sIHNlZWtpbmcpCisvLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCBh
bmQgd2l0aCBvYmplY3QgbG9ja2VkCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChX
ZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OworICAgIGdib29sZWFuIHNlZWtpbmc7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKKworICAgIHNlZWtpbmcgPSBwcml2LT5zZWVrSUQ7CisKKyAgICBpZiAocHJpdi0+c3RhcnRJ
RCkgeworICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c3RhcnRJRCk7CisgICAgICAgIHBy
aXYtPnN0YXJ0SUQgPSAwOworICAgIH0KIAogICAgIGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkg
ewogICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC0zNzIsNiArMzkz
LDExIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJv
b2wgc2Vla2luZykKICAgICB9CiAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUgPSAwOwogCisgICAg
aWYgKHByaXYtPmNsaWVudCkgeworICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50OworICAgICAg
ICBwcml2LT5jbGllbnQgPSAwOworICAgIH0KKwogICAgIGlmIChwcml2LT5mcmFtZSAmJiAhc2Vl
a2luZykKICAgICAgICAgcHJpdi0+ZnJhbWUuY2xlYXIoKTsKIApAQCAtMzg0LDcgKzQxMCw2IEBA
IHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJvb2wgc2Vl
a2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgfQogCi0gICAgR1NUX09C
SkVDVF9MT0NLKHNyYyk7CiAgICAgaWYgKHByaXYtPm5lZWREYXRhSUQpCiAgICAgICAgIGdfc291
cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKICAgICBwcml2LT5uZWVkRGF0YUlEID0gMDsK
QEAgLTM5OCw3ICs0MjMsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdl
YlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAgICAgcHJpdi0+c2Vla0lEID0gMDsKIAogICAgIHBy
aXYtPnBhdXNlZCA9IEZBTFNFOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAKICAgICBn
X2ZyZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgcHJpdi0+aXJhZGlvTmFtZSA9IDA7CkBAIC00
MTIsMTIgKzQzNiw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3Jj
KiBzcmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAg
IHByaXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAg
ICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFz
ZWVraW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAt
MSk7Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9
IEZBTFNFOwogCkBAIC00MjYsMTggKzQ0NCwzMyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNT
dG9wKFdlYktpdFdlYlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAgICAgICAgIHByaXYtPnJlcXVl
c3RlZE9mZnNldCA9IDA7CiAgICAgfQogCisgICAgcHJpdi0+c3RvcElEID0gMDsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOworCisgICAgaWYgKHByaXYtPmFwcHNyYykgeworICAgICAgICBn
c3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworICAgICAgICBpZiAoIXNlZWtp
bmcpCisgICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsK
KyAgICB9CisKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOwor
CisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChX
ZWJLaXRXZWJTcmMqIHNyYykKKy8vIG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3
aXRoIG9iamVjdCBsb2NrZWQKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChXZWJL
aXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5w
cml2OwogCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgaWYgKCFwcml2LT51cmkpIHsK
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAg
ICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9Ci0g
ICAgCisKICAgICBLVVJMIHVybCA9IEtVUkwoS1VSTCgpLCBwcml2LT51cmkpOwogCiAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsKTsKQEAgLTQ3MiwxNSArNTA1LDE3IEBAIHN0YXRpYyBi
b29sIHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIC8vIE5lZWRlZCB0
byB1c2UgRExOQSBzdHJlYW1pbmcgc2VydmVycwogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZp
ZWxkKCJ0cmFuc2Zlck1vZGUuZGxuYSIsICJTdHJlYW1pbmciKTsKIAorICAgIHByaXYtPmNsaWVu
dCA9IG5ldyBTdHJlYW1pbmdDbGllbnQoc3JjKTsKICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZSA9
IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoY29udGV4dCwgcmVxdWVzdCwgcHJpdi0+Y2xpZW50LCBm
YWxzZSwgZmFsc2UpOwogICAgIGlmICghcHJpdi0+cmVzb3VyY2VIYW5kbGUpIHsKICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChzcmMsICJGYWlsZWQgdG8gY3JlYXRlIFJlc291cmNlSGFuZGxlIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsK
KyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3Rh
cnRlZCByZXF1ZXN0Iik7CiAgICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGFy
dGVkIHJlcXVlc3QiKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBGQUxTRTsKIH0K
IAogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdz
dEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCkBAIC01MTEsMTIg
KzU0NiwxNSBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdl
U3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogICAgIHN3aXRjaCAodHJhbnNpdGlv
bikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CiAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAgICAgICBpZiAoIXdl
YktpdFdlYlNyY1N0YXJ0KHNyYykpCi0gICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdF
X0ZBSUxVUkU7CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgICAgICBwcml2LT5z
dGFydElEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3Vy
Y2VGdW5jKSB3ZWJLaXRXZWJTcmNTdGFydCwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95
Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19S
RUFEWToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7Ci0g
ICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzcmMpOworICAgICAgICBwcml2LT5zdG9wSUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19Q
UklPUklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0b3AsIGdzdF9v
YmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CisgICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtNTI3LDcgKzU2NSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCiB7Ci0gICAgV2ViS2l0
V2ViU3JjKiB3ZWJraXRTcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsK
KyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVu
dCkpOwogICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCiAgICAgc3dpdGNoIChHU1RfUVVF
UllfVFlQRShxdWVyeSkpIHsKQEAgLTUzNiwxNSArNTc0LDE5IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50
LCBHc3RRCiAKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0
LCBOVUxMKTsKIAotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHdlYmtpdFNyYywgImR1cmF0aW9u
IHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAg
ICAgIGlmICgoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpICYmICh3ZWJraXRTcmMtPnByaXYt
PnNpemUgPiAwKSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwg
Zm9ybWF0LCB3ZWJraXRTcmMtPnByaXYtPnNpemUpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUo
Zm9ybWF0KSk7CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgICAgICBpZiAoKGZv
cm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSAmJiAoc3JjLT5wcml2LT5zaXplID4gMCkpIHsKKyAg
ICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgc3JjLT5wcml2
LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIH0KKyAgICAgICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
R1NUX1FVRVJZX1VSSTogewotICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgd2Via2l0
U3JjLT5wcml2LT51cmkpOworICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAgICAg
Z3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHNyYy0+cHJpdi0+dXJpKTsKKyAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmVzdWx0ID0gVFJVRTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtNTg1LDcgKzYyNywxMyBAQCBjb25zdCBnY2hhciogY29uc3QqIHdlYktpdFdl
YlNyY0dldFByb3RvY29scyhHVHlwZSkKIAogc3RhdGljIGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRV
cmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lU
X1dFQl9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBX
RUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBnY2hhciogcmV0OworCisgICAgR1NUX09CSkVD
VF9MT0NLKHNyYyk7CisgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpOworICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29s
ZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hh
ciogdXJpLCBHRXJyb3IqKiBlcnJvcikKQEAgLTU5OCwyMCArNjQ2LDI1IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2No
YXIqIHVyaSwgR0VyCiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKKyAgICBHU1RfT0JK
RUNUX0xPQ0soc3JjKTsKICAgICBnX2ZyZWUocHJpdi0+dXJpKTsKICAgICBwcml2LT51cmkgPSAw
OwogCi0gICAgaWYgKCF1cmkpCisgICAgaWYgKCF1cmkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQogCiAgICAgS1VSTCB1cmwo
S1VSTCgpLCB1cmkpOwogCiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICF1cmwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAg
ICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHU1RfVVJJX0VSUk9SLCBHU1RfVVJJX0VSUk9SX0JBRF9V
UkksICJJbnZhbGlkIFVSSSAnJXMnIiwgdXJpKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAg
IH0KIAogICAgIHByaXYtPnVyaSA9IGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgIHJldHVybiBUUlVFOwogfQogCkBA
IC02MjksNyArNjgyLDEzIEBAIHN0YXRpYyBnY2hhcioqIHdlYktpdFdlYlNyY0dldFByb3RvY29s
cyh2b2lkKQogCiBzdGF0aWMgY29uc3QgZ2NoYXIqIHdlYktpdFdlYlNyY0dldFVyaShHc3RVUklI
YW5kbGVyKiBoYW5kbGVyKQogewotICAgIHJldHVybiBnX3N0cmR1cChXRUJLSVRfV0VCX1NSQyho
YW5kbGVyKS0+cHJpdi0+dXJpKTsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJf
U1JDKGhhbmRsZXIpOworICAgIGdjaGFyKiByZXQ7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7CisgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkpCkBA
IC02NDIsMjAgKzcwMSwyNSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkpCiAgICAgICAgIHJldHVybiBG
QUxTRTsKICAgICB9CiAKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKICAgICBnX2ZyZWUocHJp
di0+dXJpKTsKICAgICBwcml2LT51cmkgPSAwOwogCi0gICAgaWYgKCF1cmkpCisgICAgaWYgKCF1
cmkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgfQogCiAgICAgS1VSTCB1cmwoS1VSTCgpLCB1cmkpOwogCiAgICAgaWYgKCF1cmwu
aXNWYWxpZCgpIHx8ICF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiSW52
YWxpZCBVUkkgJyVzJyIsIHVyaSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAg
ICBwcml2LT51cmkgPSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICByZXR1cm4gVFJVRTsKIH0KICNlbmRpZgpAQCAt
Njc2LDEyICs3NDAsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY05lZWREYXRhTWFp
bkNiKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYg
PSBzcmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7Ci0KICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAvLyBhbHJlYWR5IHN0
b3BwZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpIHsKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwogICAgIHByaXYtPnBh
dXNlZCA9IEZBTFNFOwogICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwogICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNyYyk7CisKKyAgICBpZiAocHJpdi0+cmVzb3VyY2VIYW5kbGUpCisgICAgICAgIHBy
aXYtPnJlc291cmNlSGFuZGxlLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKQEAgLTcwNiwxMyArNzc3LDE5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRX
ZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZUhhbmRs
ZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLQogICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwor
ICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+ZW5vdWdoRGF0YUlEKSB7Cisg
ICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICB9CisKICAgICBwcml2LT5wYXVzZWQgPSBUUlVFOwogICAgIHByaXYtPmVub3VnaERhdGFJRCA9
IDA7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAorICAgIGlmIChwcml2LT5yZXNvdXJj
ZUhhbmRsZSkKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUtPnNldERlZmVyc0xvYWRpbmco
dHJ1ZSk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC03MzUsNyArODEyLDcgQEAgc3RhdGlj
IHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJE
YXRhKQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla01haW5DYihXZWJLaXRXZWJT
cmMqIHNyYykKIHsKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywgdHJ1ZSk7CisgICAgd2ViS2l0
V2ViU3JjU3RvcChzcmMpOwogICAgIHdlYktpdFdlYlNyY1N0YXJ0KHNyYyk7CiAKICAgICByZXR1
cm4gRkFMU0U7CkBAIC03NDcsMjMgKzgyNCwyOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2Vi
U3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlcgog
ICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKICAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlNlZWtpbmcgdG8gb2Zmc2V0OiAlIiBHX0dVSU5UNjRfRk9STUFULCBv
ZmZzZXQpOwotICAgIGlmIChvZmZzZXQgPT0gcHJpdi0+b2Zmc2V0ICYmIHByaXYtPnJlcXVlc3Rl
ZE9mZnNldCA9PSBwcml2LT5vZmZzZXQpCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAg
aWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID09IHBy
aXYtPm9mZnNldCkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBy
ZXR1cm4gVFJVRTsKKyAgICB9CiAKLSAgICBpZiAoIXByaXYtPnNlZWthYmxlKQorICAgIGlmICgh
cHJpdi0+c2Vla2FibGUpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgIGlmIChvZmZzZXQgPiBwcml2LT5zaXplKQorICAgIH0KKyAg
ICBpZiAob2Zmc2V0ID4gcHJpdi0+c2l6ZSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJEb2luZyByYW5nZS1yZXF1ZXN0IHNlZWsiKTsKICAgICBwcml2LT5yZXF1ZXN0ZWRP
ZmZzZXQgPSBvZmZzZXQ7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKICAgICBpZiAocHJp
di0+c2Vla0lEKQogICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c2Vla0lEKTsKICAgICBw
cml2LT5zZWVrSUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLCAo
R1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyks
IChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CiAgICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKLSAgICAKKwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC03NzYsNzUgKzg1OSw1
NyBAQCB2b2lkIHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdlYktpdFdlYlNyYyogc3JjLCBX
ZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyKQogICAgIGlmIChkb2N1bWVudCkKICAgICAgICAg
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwog
ICAgIHByaXYtPmZyYW1lID0gZnJhbWU7CiAgICAgcHJpdi0+cGxheWVyID0gcGxheWVyOworICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiB9CiAKLVN0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5n
Q2xpZW50KFdlYktpdFdlYlNyYyogc3JjKSA6IG1fc3JjKHNyYykKK1N0cmVhbWluZ0NsaWVudDo6
U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKQorICAgIDogbV9zcmMoc3RhdGljX2Nh
c3Q8V2ViS2l0V2ViU3JjKj4oZ3N0X29iamVjdF9yZWYoc3JjKSkpCiB7CiAKIH0KIAogU3RyZWFt
aW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KCkKIHsKLQorICAgIGdzdF9vYmplY3RfdW5yZWYo
bV9zcmMpOwogfQogCiB2b2lkIFN0cmVhbWluZ0NsaWVudDo6d2lsbFNlbmRSZXF1ZXN0KFJlc291
cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7
CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUgKmhhbmRsZSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IG1fc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlJlY2Vp
dmVkIHJlc3BvbnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwogCisgICAgR1NU
X09CSkVDVF9MT0NLKG1fc3JjKTsKKwogICAgIC8vIElmIHdlIHNlZWtlZCB3ZSBuZWVkIDIwNiA9
PSBQQVJUSUFMX0NPTlRFTlQKLSAgICBpZiAocHJpdi0+cmVxdWVzdGVkT2Zmc2V0ICYmIHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjA2KSB7CisgICAgaWYgKGhhbmRsZSAhPSBwcml2LT5y
ZXNvdXJjZUhhbmRsZSB8fCAocHJpdi0+cmVxdWVzdGVkT2Zmc2V0ICYmIHJlc3BvbnNlLmh0dHBT
dGF0dXNDb2RlKCkgIT0gMjA2KSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7
CiAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAo
MCkpOwogICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0g
ICAgICAgIHdlYktpdFdlYlNyY1N0b3AobV9zcmMsIGZhbHNlKTsKKyAgICAgICAgd2ViS2l0V2Vi
U3JjU3RvcChtX3NyYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBsb25nIGxvbmcg
bGVuZ3RoID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7Ci0gICAgaWYgKGxlbmd0
aCA+IDApIHsKKyAgICBpZiAobGVuZ3RoID4gMCkKICAgICAgICAgbGVuZ3RoICs9IHByaXYtPnJl
cXVlc3RlZE9mZnNldDsKLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3Jj
LCBsZW5ndGgpOwotCi0jaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgICAgIGlmICghcHJp
di0+aGF2ZUFwcFNyYzI3KSB7Ci0gICAgICAgICAgICBnc3Rfc2VnbWVudF9zZXRfZHVyYXRpb24o
JkdTVF9CQVNFX1NSQyhwcml2LT5hcHBzcmMpLT5zZWdtZW50LCBHU1RfRk9STUFUX0JZVEVTLCBs
ZW5ndGgpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5U
KHByaXYtPmFwcHNyYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0
X21lc3NhZ2VfbmV3X2R1cmF0aW9uKEdTVF9PQkpFQ1QocHJpdi0+YXBwc3JjKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NU
X0ZPUk1BVF9CWVRFUywgbGVuZ3RoKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KIAogICAg
IHByaXYtPnNpemUgPSBsZW5ndGggPj0gMCA/IGxlbmd0aCA6IDA7CiAgICAgcHJpdi0+c2Vla2Fi
bGUgPSBsZW5ndGggPiAwICYmIGdfYXNjaWlfc3RyY2FzZWNtcCgibm9uZSIsIHJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZCgiQWNjZXB0LVJhbmdlcyIpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgLy8g
aWNlY2FzdCBzdHVmZgotICAgIFN0cmluZyB2YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiaWN5LW1ldGFpbnQiKTsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICBn
Y2hhciogZW5kcHRyID0gMDsKLSAgICAgICAgZ2ludDY0IGljeU1ldGFJbnQgPSBnX2FzY2lpX3N0
cnRvbGwodmFsdWUudXRmOCgpLmRhdGEoKSwgJmVuZHB0ciwgMTApOwotICAgICAgICAgICAgCi0g
ICAgICAgIGlmIChlbmRwdHIgJiYgKmVuZHB0ciA9PSAnXDAnICYmIGljeU1ldGFJbnQgPiAwKSB7
Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNf
bmV3X3NpbXBsZSgiYXBwbGljYXRpb24veC1pY3kiLCAibWV0YWRhdGEtaW50ZXJ2YWwiLCBHX1RZ
UEVfSU5ULCAoZ2ludCkgaWN5TWV0YUludCwgTlVMTCkpOwotCi0gICAgICAgICAgICBnc3RfYXBw
X3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIGNhcHMuZ2V0KCkpOwotICAgICAgICB9Ci0gICAg
fQotCiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBHc3RUYWdMaXN0KiB0YWdzID0gZ3N0
X3RhZ19saXN0X25ld19lbXB0eSgpOwogI2Vsc2UKICAgICBHc3RUYWdMaXN0KiB0YWdzID0gZ3N0
X3RhZ19saXN0X25ldygpOwogI2VuZGlmCi0gICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoImljeS1uYW1lIik7CisgICAgU3RyaW5nIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKCJpY3ktbmFtZSIpOwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGdfZnJlZShwcml2LT5pcmFkaW9OYW1lKTsKICAgICAgICAgcHJpdi0+aXJhZGlvTmFtZSA9IGdf
c3RyZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwpAQCAtODczLDYgKzkzOCwzOCBAQCB2b2lkIFN0
cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZQogICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ3MsIEdTVF9UQUdf
TUVSR0VfUkVQTEFDRSwgR1NUX1RBR19USVRMRSwgcHJpdi0+aXJhZGlvVGl0bGUsIE5VTEwpOwog
ICAgIH0KIAorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKworICAgIC8vIG5vdGlmeSBz
aXplL2R1cmF0aW9uCisgICAgaWYgKGxlbmd0aCA+IDApIHsKKyAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X3NpemUocHJpdi0+YXBwc3JjLCBsZW5ndGgpOworCisjaWZuZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCisgICAgICAgIGlmICghcHJpdi0+aGF2ZUFwcFNyYzI3KSB7CisgICAgICAgICAgICBnc3Rf
c2VnbWVudF9zZXRfZHVyYXRpb24oJkdTVF9CQVNFX1NSQyhwcml2LT5hcHBzcmMpLT5zZWdtZW50
LCBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9z
dF9tZXNzYWdlKEdTVF9FTEVNRU5UKHByaXYtPmFwcHNyYyksCisgICAgICAgICAgICAgICAgZ3N0
X21lc3NhZ2VfbmV3X2R1cmF0aW9uKEdTVF9PQkpFQ1QocHJpdi0+YXBwc3JjKSwKKyAgICAgICAg
ICAgICAgICAgICAgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3RoKSk7CisgICAgICAgIH0KKyNlbmRp
ZgorICAgIH0gZWxzZQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMs
IC0xKTsKKworICAgIC8vIGljZWNhc3Qgc3R1ZmYKKyAgICB2YWx1ZSA9IHJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZCgiaWN5LW1ldGFpbnQiKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewor
ICAgICAgICBnY2hhciogZW5kcHRyID0gMDsKKyAgICAgICAgZ2ludDY0IGljeU1ldGFJbnQgPSBn
X2FzY2lpX3N0cnRvbGwodmFsdWUudXRmOCgpLmRhdGEoKSwgJmVuZHB0ciwgMTApOworCisgICAg
ICAgIGlmIChlbmRwdHIgJiYgKmVuZHB0ciA9PSAnXDAnICYmIGljeU1ldGFJbnQgPiAwKSB7Cisg
ICAgICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X3NpbXBsZSgiYXBwbGljYXRpb24veC1pY3kiLCAibWV0YWRhdGEtaW50ZXJ2YWwiLCBHX1RZUEVf
SU5ULCAoZ2ludCkgaWN5TWV0YUludCwgTlVMTCkpOworCisgICAgICAgICAgICBnc3RfYXBwX3Ny
Y19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIGNhcHMuZ2V0KCkpOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7CisKKyAg
ICAvLyBub3RpZnkgdGFncwogICAgIGlmIChnc3RfdGFnX2xpc3RfaXNfZW1wdHkodGFncykpCiAj
aWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAgICAgZ3N0X3RhZ19saXN0X3VucmVmKHRhZ3Mp
OwpAQCAtODgwLDEzICs5NzcsMTUgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UKICAgICAgICAg
Z3N0X3RhZ19saXN0X2ZyZWUodGFncyk7CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAgIG5vdGlm
eUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChtX3NyYyksIG1fc3JjLT5wcml2LT5zcmNwYWQsIHRh
Z3MpOworICAgICAgICBub3RpZnlHc3RUYWdzT25QYWQoR1NUX0VMRU1FTlQobV9zcmMpLCBwcml2
LT5zcmNwYWQsIHRhZ3MpOwogfQogCiB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZURh
dGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwg
aW50KQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKIAor
ICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisKICAgICBHU1RfTE9HX09CSkVDVChtX3NyYywg
IkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIHByaXYtPmJ1ZmZlciA/IGdldEdzdEJ1ZmZlclNpemUo
cHJpdi0+YnVmZmVyLmdldCgpKSA6IGxlbmd0aCk7CiAKICAgICBBU1NFUlQoIXByaXYtPmJ1ZmZl
ciB8fCBkYXRhID09IGdldEdzdEJ1ZmZlckRhdGFQb2ludGVyKHByaXYtPmJ1ZmZlci5nZXQoKSkp
OwpAQCAtODk3LDYgKzk5Niw3IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAjZW5kaWYKIAog
ICAgIGlmIChwcml2LT5zZWVrSUQgfHwgaGFuZGxlICE9IHByaXYtPnJlc291cmNlSGFuZGxlKSB7
CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChtX3NyYywgIlNlZWsgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAg
cHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTkxNSw2ICsxMDE1LDgg
QEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGkKICAgICBwcml2LT5vZmZzZXQgKz0gbGVuZ3RoOwog
ICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChwcml2LT5idWZmZXIuZ2V0KCkpID0gcHJpdi0+b2Zm
c2V0OwogCisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOworCiAgICAgR3N0Rmxvd1JldHVy
biByZXQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihwcml2LT5hcHBzcmMsIHByaXYtPmJ1ZmZl
ci5sZWFrUmVmKCkpOwogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgaWYgKHJldCAhPSBH
U1RfRkxPV19PSyAmJiByZXQgIT0gR1NUX0ZMT1dfRU9TKQpAQCAtOTQ4LDggKzEwNTAsMTIgQEAg
dm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBk
b3VibGUpCiAKICAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiSGF2ZSBFT1MiKTsKIAotICAg
IGlmICghcHJpdi0+c2Vla0lEKQorICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisgICAgaWYg
KCFwcml2LT5zZWVrSUQpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwogICAg
ICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworICAg
IH0gZWxzZQorICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7CiB9CiAKIHZvaWQgU3Ry
ZWFtaW5nQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCkBAIC05NjEsMTQgKzEwNjcsMzAgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRp
ZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIAogdm9p
ZCBTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQogeworICAgIGdj
aGFyKiB1cmk7CisKICAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3JjLCAiUmVxdWVzdCB3YXMgYmxv
Y2tlZCIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFE
LCAoIkFjY2VzcyB0byBcIiVzXCIgd2FzIGJsb2NrZWQiLCBtX3NyYy0+cHJpdi0+dXJpKSwgKDAp
KTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisgICAgdXJpID0gZ19zdHJkdXAobV9z
cmMtPnByaXYtPnVyaSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOworCisgICAgR1NU
X0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQWNjZXNzIHRvIFwi
JXNcIiB3YXMgYmxvY2tlZCIsIHVyaSksICgwKSk7CisgICAgZ19mcmVlKHVyaSk7CiB9CiAKIHZv
aWQgU3RyZWFtaW5nQ2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKIHsKKyAg
ICBnY2hhciogdXJpOworCiAgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYywgIkNhbm5vdCBzaG93
IFVSTCIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFE
LCAoIkNhbid0IHNob3cgXCIlc1wiIiwgbV9zcmMtPnByaXYtPnVyaSksICgwKSk7CisKKyAgICBH
U1RfT0JKRUNUX0xPQ0sobV9zcmMpOworICAgIHVyaSA9IGdfc3RyZHVwKG1fc3JjLT5wcml2LT51
cmkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKworICAgIEdTVF9FTEVNRU5UX0VS
Uk9SKG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkNhbid0IHNob3cgXCIlc1wiIiwgdXJp
KSwgKDApKTsKKyAgICBnX2ZyZWUodXJpKTsKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
Cg==
</data>
<flag name="review"
          id="221517"
          type_id="1"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202292</attachid>
            <date>2013-05-20 10:49:12 -0700</date>
            <delta_ts>2013-08-13 10:56:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch_115352.diff</filename>
            <type>text/plain</type>
            <size>23623</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSBiZTE5ZWNhMmM0ZmM0NDRjNzRmZjkzMDE4N2FmODUwYTQ0YmE3ZjZjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMjAgTWF5IDIwMTMg
MTM6NDM6MDkgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlLgoKR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IG1heSBi
ZSBjcmVhdGVkIGJ5IGFueSBnc3RyZWFtZXIgZWxlbWVudCBvbiBhbnkgdGhyZWFkIGJ5IGNhbGxp
bmcKZ3N0X2VsZW1lbnRfbWFrZV9mcm9tX3VyaSB3aXRoIHRoZSBVUklzIGhhbmRsZWQgYnkgdGhl
IHNvdXJjZSBlbGVtZW50LgpUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhlIGdzdHJlYW1lciBzb3Vy
Y2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBpdApiZWluZyBj
cmVhdGVkIG91dHNpZGUgdGhlIG1haW4gdGhyZWFkLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM3ICsrKwogLi4uL2dzdHJlYW1lci9X
ZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwICAgICAgICAgfCAyODIgKysrKysrKysrKysrKysr
LS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDIzNyBpbnNlcnRpb25zKCspLCA4MiBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggY2U1MDk4Ny4uNGU1ZjIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQwIEBACisyMDEzLTA0LTI5ICBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdh
bGhhZXNAY29sbGFib3JhLmNvLnVrPgorCisgICAgICAgIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291
cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRl
ZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisgICAg
ICAgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5IHRo
ZSBzb3VyY2UgZWxlbWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBnc3Ry
ZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdpdGgg
aXQKKyAgICAgICAgYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAoX1dlYktpdFdlYlNyY1ByaXZhdGUpOgorICAgICAgICAod2Via2l0
X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6CisgICAgICAg
ICh3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRQcm9w
ZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKToKKyAgICAgICAgKHdl
YktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRVcmkp
OgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdFdlYlNyY05l
ZWREYXRhTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2IpOgor
ICAgICAgICAod2ViS2l0V2ViU3JjU2Vla01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNT
ZWVrRGF0YUNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKyAgICAg
ICAgKFN0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVhbWlu
Z0NsaWVudDo6flN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVE
YXRhKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAg
ICAgIChTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQpOgorICAgICAgICAoU3RyZWFtaW5nQ2xp
ZW50OjpjYW5ub3RTaG93VVJMKToKKwogMjAxMy0wNC0xOCAgU2Vva2p1IEt3b24gIDxzZW9ranUu
a3dvbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVG9vbGJhciBpY29ucyBh
cmUgZGlzcGxheWVkIGluY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VH
U3RyZWFtZXIuY3BwCmluZGV4IDViMmFkZjIuLjUyODMxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC00Miw2ICs0MiwxNiBAQAogI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
Ky8qIFByZW1pc3NlczoKKyAqIC0gd2Via2l0c3JjIG1heSBiZSBjcmVhdGVkIGZyb20gYW55IHRo
cmVhZCBpbnNpZGUgZ3N0cmVhbWVyCisgKiAtIGNsaWVudCBob2xkcyByZWZlcmVuY2UgdG8gc3Jj
LCBzbyB0aGF0IHNyYyBpcyBuZXZlciBkZWxldGVkIHdoaWxlIGNsaWVudCBleGlzdHMKKyAqIC0g
aWYgdGhlIHNyYyBleGlzdHMsIGFwcHNyYyBhbHNvIGV4aXN0cworICogLSBjbGllbnQgaXMgY3Jl
YXRlZCBvbiBzdGFydAorICogLSBjbGllbnQgaXMgZGVsZXRlZCBvbiBzdG9wIGFmdGVyIGNhbmNl
bGxpbmcgcmVzb3VyY2UgaGFuZGxlCisgKiAtIGNsaWVudCBjYWxsYmFja3MgYXJlIGFsd2F5cyBp
bnZva2VkIGZyb20gbWFpbiB0aHJlYWQKKyAqIC0gcmVzb3VyY2UgaGFuZGxlIG1ldGhvZHMgbXVz
dCBhbHdheXMgYmUgY2FsbGVkIGZyb20gbWFpbiB0aHJlYWQKKyAqLworCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogY2xhc3MgU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291cmNlSGFu
ZGxlQ2xpZW50IHsKQEAgLTg0LDYgKzk0LDggQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRl
IHsKIAogICAgIGd1aW50NjQgcmVxdWVzdGVkT2Zmc2V0OwogCisgICAgZ3VpbnQgc3RhcnRJRDsK
KyAgICBndWludCBzdG9wSUQ7CiAgICAgZ3VpbnQgbmVlZERhdGFJRDsKICAgICBndWludCBlbm91
Z2hEYXRhSUQ7CiAgICAgZ3VpbnQgc2Vla0lEOwpAQCAtMTM2LDggKzE0OCw2IEBAIHN0YXRpYyB2
b2lkIHdlYktpdFdlYlNyY05lZWREYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9p
bnRlciB1c2VyRGF0YSk7CiBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IoR3N0
QXBwU3JjKiwgZ3BvaW50ZXIgdXNlckRhdGEpOwogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNy
Y1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRh
KTsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqLCBib29sKTsK
LQogc3RhdGljIEdzdEFwcFNyY0NhbGxiYWNrcyBhcHBzcmNDYWxsYmFja3MgPSB7CiAgICAgd2Vi
S2l0V2ViU3JjTmVlZERhdGFDYiwKICAgICB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IsCkBAIC0y
MjksOCArMjM5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJT
cmMqIHNyYykKIAogICAgIHNyYy0+cHJpdiA9IHByaXY7CiAKLSAgICBwcml2LT5jbGllbnQgPSBu
ZXcgU3RyZWFtaW5nQ2xpZW50KHNyYyk7Ci0KICAgICBwcml2LT5hcHBzcmMgPSBHU1RfQVBQX1NS
Qyhnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNyYyIsIDApKTsKICAgICBpZiAoIXByaXYt
PmFwcHNyYykgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBjcmVh
dGUgYXBwc3JjIik7CkBAIC0yNzksNyArMjg3LDggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9z
cmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKICAgICBpZiAocHJpdi0+aGF2ZUFwcFNyYzI3KQog
ICAgICAgICBnX29iamVjdF9zZXQocHJpdi0+YXBwc3JjLCAibWluLXBlcmNlbnQiLCAyMCwgTlVM
TCk7CiAKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywgZmFsc2UpOworICAgIGdzdF9hcHBfc3Jj
X3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7CisgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJp
di0+YXBwc3JjLCAtMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09i
amVjdCogb2JqZWN0KQpAQCAtMzAyLDggKzMxMSw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJ
VF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKIAotICAgIGRlbGV0ZSBwcml2LT5jbGllbnQ7Ci0KICAgICBnX2ZyZWUocHJpdi0+dXJp
KTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmpl
Y3QpKTsKQEAgLTMxNiw3ICszMjMsOSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTZXRQcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKgogCiAgICAg
c3dpdGNoIChwcm9wSUQpIHsKICAgICBjYXNlIFBST1BfSVJBRElPX01PREU6CisgICAgICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgICAgICBwcml2LT5pcmFkaW9Nb2RlID0gZ192YWx1ZV9n
ZXRfYm9vbGVhbih2YWx1ZSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9MT0NBVElPTjoKICNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQpAQCAtMzM2LDYgKzM0NSw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgV2Vi
S2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNy
Y1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
ICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9fTU9ERToKICAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+aXJhZGlvTW9kZSk7CkBAIC0zNTks
MTIgKzM2OSwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZQogICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiB9CiAKLQotc3RhdGlj
IHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQor
Ly8gbXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2Vk
CitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYykKIHsK
ICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworICAgIGdib29sZWFu
IHNlZWtpbmc7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKworICAgIHNlZWtpbmcgPSBw
cml2LT5zZWVrSUQ7CisKKyAgICBpZiAocHJpdi0+c3RhcnRJRCkgeworICAgICAgICBnX3NvdXJj
ZV9yZW1vdmUocHJpdi0+c3RhcnRJRCk7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSAwOworICAg
IH0KIAogICAgIGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkgewogICAgICAgICBwcml2LT5yZXNv
dXJjZUhhbmRsZS0+Y2FuY2VsKCk7CkBAIC0zNzIsNiArMzkzLDExIEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICB9CiAg
ICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUgPSAwOwogCisgICAgaWYgKHByaXYtPmNsaWVudCkgewor
ICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50OworICAgICAgICBwcml2LT5jbGllbnQgPSAwOwor
ICAgIH0KKwogICAgIGlmIChwcml2LT5mcmFtZSAmJiAhc2Vla2luZykKICAgICAgICAgcHJpdi0+
ZnJhbWUuY2xlYXIoKTsKIApAQCAtMzg0LDcgKzQxMCw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICAgICAgcHJpdi0+
YnVmZmVyLmNsZWFyKCk7CiAgICAgfQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAg
aWYgKHByaXYtPm5lZWREYXRhSUQpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5uZWVk
RGF0YUlEKTsKICAgICBwcml2LT5uZWVkRGF0YUlEID0gMDsKQEAgLTM5OCw3ICs0MjMsNiBAQCBz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjLCBib29sIHNlZWtp
bmcpCiAgICAgcHJpdi0+c2Vla0lEID0gMDsKIAogICAgIHByaXYtPnBhdXNlZCA9IEZBTFNFOwot
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvTmFt
ZSk7CiAgICAgcHJpdi0+aXJhZGlvTmFtZSA9IDA7CkBAIC00MTIsMTIgKzQzNiw2IEBAIHN0YXRp
YyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykK
ICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAgIHByaXYtPmlyYWRpb1RpdGxlID0g
MDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2Nh
cHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFzZWVraW5nKQotICAgICAgICAgICAg
Z3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7Ci0gICAgfQotCiAgICAgcHJp
di0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9IEZBTFNFOwogCkBAIC00MjYsMTgg
KzQ0NCwzMyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3Jj
LCBib29sIHNlZWtpbmcpCiAgICAgICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IDA7CiAgICAg
fQogCisgICAgcHJpdi0+c3RvcElEID0gMDsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwor
CisgICAgaWYgKHByaXYtPmFwcHNyYykgeworICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhw
cml2LT5hcHBzcmMsIDApOworICAgICAgICBpZiAoIXNlZWtpbmcpCisgICAgICAgICAgICBnc3Rf
YXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKKyAgICB9CisKICAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOworCisgICAgcmV0dXJuIEZBTFNFOwog
fQogCi1zdGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKKy8v
IG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZAor
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogewog
ICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKKyAgICBHU1RfT0JK
RUNUX0xPQ0soc3JjKTsKICAgICBpZiAoIXByaXYtPnVyaSkgewogICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHdlYktpdFdlYlNyY1N0b3Ao
c3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgICAKKwogICAgIEtVUkwgdXJs
ID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dCh1cmwpOwpAQCAtNDcyLDE1ICs1MDUsMTcgQEAgc3RhdGljIGJvb2wgd2ViS2l0V2ViU3JjU3Rh
cnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAgICAgLy8gTmVlZGVkIHRvIHVzZSBETE5BIHN0cmVhbWlu
ZyBzZXJ2ZXJzCiAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoInRyYW5zZmVyTW9kZS5k
bG5hIiwgIlN0cmVhbWluZyIpOwogCisgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0Ns
aWVudChzcmMpOwogICAgIHByaXYtPnJlc291cmNlSGFuZGxlID0gUmVzb3VyY2VIYW5kbGU6OmNy
ZWF0ZShjb250ZXh0LCByZXF1ZXN0LCBwcml2LT5jbGllbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAg
aWYgKCFwcml2LT5yZXNvdXJjZUhhbmRsZSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNy
YywgIkZhaWxlZCB0byBjcmVhdGUgUmVzb3VyY2VIYW5kbGUiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAgICB3ZWJLaXRXZWJT
cmNTdG9wKHNyYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGFydGVkIHJlcXVlc3QiKTsKICAg
ICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0U3RhdGVD
aGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwg
R3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKQEAgLTUxMSwxMiArNTQ2LDE1IEBAIHN0YXRpYyBH
c3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBl
bGVtZW50LCBHc3RTdGF0CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1Rf
U1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJSRUFEWS0+UEFVU0VEIik7Ci0gICAgICAgIGlmICghd2ViS2l0V2ViU3JjU3RhcnQoc3Jj
KSkKLSAgICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX3RpbWVvdXRf
YWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNy
Y1N0YXJ0LCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3Rf
dW5yZWYpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgogICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAgd2ViS2l0V2ViU3Jj
U3RvcChzcmMsIGZhbHNlKTsKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAg
IHByaXYtPnN0b3BJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAs
IChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU3RvcCwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdE
ZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxP
Q0soc3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBA
IC01MjcsNyArNTY1LDcgQEAgc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNy
Y0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXQKIAogc3RhdGljIGdib29s
ZWFuIHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBw
YXJlbnQsIEdzdFF1ZXJ5KiBxdWVyeSkKIHsKLSAgICBXZWJLaXRXZWJTcmMqIHdlYmtpdFNyYyA9
IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOworICAgIFdlYktpdFdlYlNyYyog
c3JjID0gV0VCS0lUX1dFQl9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7CiAgICAgZ2Jvb2xlYW4g
cmVzdWx0ID0gRkFMU0U7CiAKICAgICBzd2l0Y2ggKEdTVF9RVUVSWV9UWVBFKHF1ZXJ5KSkgewpA
QCAtNTM2LDE1ICs1NzQsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1F1ZXJ5V2l0
aFBhcmVudChHc3RQYWQqIHBhZCwgR3N0T2JqZWN0KiBwYXJlbnQsIEdzdFEKIAogICAgICAgICBn
c3RfcXVlcnlfcGFyc2VfZHVyYXRpb24ocXVlcnksICZmb3JtYXQsIE5VTEwpOwogCi0gICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qod2Via2l0U3JjLCAiZHVyYXRpb24gcXVlcnkgaW4gZm9ybWF0ICVz
IiwgZ3N0X2Zvcm1hdF9nZXRfbmFtZShmb3JtYXQpKTsKLSAgICAgICAgaWYgKChmb3JtYXQgPT0g
R1NUX0ZPUk1BVF9CWVRFUykgJiYgKHdlYmtpdFNyYy0+cHJpdi0+c2l6ZSA+IDApKSB7Ci0gICAg
ICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1ZXJ5LCBmb3JtYXQsIHdlYmtpdFNyYy0+
cHJpdi0+c2l6ZSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiZHVyYXRpb24gcXVl
cnkgaW4gZm9ybWF0ICVzIiwgZ3N0X2Zvcm1hdF9nZXRfbmFtZShmb3JtYXQpKTsKKyAgICAgICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAgIGlmICgoZm9ybWF0ID09IEdTVF9GT1JNQVRf
QllURVMpICYmIChzcmMtPnByaXYtPnNpemUgPiAwKSkgeworICAgICAgICAgICAgZ3N0X3F1ZXJ5
X3NldF9kdXJhdGlvbihxdWVyeSwgZm9ybWF0LCBzcmMtPnByaXYtPnNpemUpOwogICAgICAgICAg
ICAgcmVzdWx0ID0gVFJVRTsKICAgICAgICAgfQorICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBHU1RfUVVFUllfVVJJOiB7Ci0g
ICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCB3ZWJraXRTcmMtPnByaXYtPnVyaSk7Cisg
ICAgICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShx
dWVyeSwgc3JjLT5wcml2LT51cmkpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwog
ICAgICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01ODUsNyAr
NjI3LDEzIEBAIGNvbnN0IGdjaGFyKiBjb25zdCogd2ViS2l0V2ViU3JjR2V0UHJvdG9jb2xzKEdU
eXBlKQogCiBzdGF0aWMgZ2NoYXIqIHdlYktpdFdlYlNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBo
YW5kbGVyKQogewotICAgIHJldHVybiBnX3N0cmR1cChXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKS0+
cHJpdi0+dXJpKTsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGhhbmRs
ZXIpOworICAgIGdjaGFyKiByZXQ7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICBy
ZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0
VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcnJvcioqIGVy
cm9yKQpAQCAtNTk4LDIwICs2NDYsMjUgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1Nl
dFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXIKICAgICAg
ICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAg
IGdfZnJlZShwcml2LT51cmkpOwogICAgIHByaXYtPnVyaSA9IDA7CiAKLSAgICBpZiAoIXVyaSkK
KyAgICBpZiAoIXVyaSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CiAKICAgICBLVVJMIHVybChLVVJMKCksIHVyaSk7CiAKICAg
ICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsK
KyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgZ19zZXRfZXJyb3IoZXJy
b3IsIEdTVF9VUklfRVJST1IsIEdTVF9VUklfRVJST1JfQkFEX1VSSSwgIkludmFsaWQgVVJJICcl
cyciLCB1cmkpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgcHJpdi0+dXJp
ID0gZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHNyYyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTYyOSw3ICs2ODIsMTMgQEAg
c3RhdGljIGdjaGFyKiogd2ViS2l0V2ViU3JjR2V0UHJvdG9jb2xzKHZvaWQpCiAKIHN0YXRpYyBj
b25zdCBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCiB7
Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5wcml2LT51cmkp
OworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxlcik7CisgICAg
Z2NoYXIqIHJldDsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIHJldCA9IGdfc3Ry
ZHVwKHNyYy0+cHJpdi0+dXJpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHJl
dHVybiByZXQ7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJ
SGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSkKQEAgLTY0MiwyMCArNzAxLDI1IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxl
ciwgY29uc3QgZ2NoYXIqIHVyaSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAorICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIGdfZnJlZShwcml2LT51cmkpOwogICAgIHByaXYt
PnVyaSA9IDA7CiAKLSAgICBpZiAoIXVyaSkKKyAgICBpZiAoIXVyaSkgeworICAgICAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CiAKICAgICBL
VVJMIHVybChLVVJMKCksIHVyaSk7CiAKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgIXVybC5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3Jj
KTsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJJbnZhbGlkIFVSSSAnJXMnIiwgdXJp
KTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAogICAgIHByaXYtPnVyaSA9IGdfc3Ry
ZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogICAgIHJldHVybiBUUlVFOwogfQogI2VuZGlmCkBAIC02NzYsMTIgKzc0MCwxOSBAQCBz
dGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IoV2ViS2l0V2ViU3JjKiBz
cmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAg
IHByaXYtPnJlc291cmNlSGFuZGxlLT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKLQogICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJp
di0+bmVlZERhdGFJRCkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAg
ICByZXR1cm4gRkFMU0U7CisgICAgfQorCiAgICAgcHJpdi0+cGF1c2VkID0gRkFMU0U7CiAgICAg
cHJpdi0+bmVlZERhdGFJRCA9IDA7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKworICAg
IGlmIChwcml2LT5yZXNvdXJjZUhhbmRsZSkKKyAgICAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUt
PnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwogICAgIHJldHVybiBGQUxTRTsKIH0KIApAQCAtNzA2
LDEzICs3NzcsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWlu
Q2IoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9
IHNyYy0+cHJpdjsKIAotICAgIHByaXYtPnJlc291cmNlSGFuZGxlLT5zZXREZWZlcnNMb2FkaW5n
KHRydWUpOwotCiAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgLy8gYWxyZWFkeSBzdG9w
cGVkCisgICAgaWYgKCFwcml2LT5lbm91Z2hEYXRhSUQpIHsKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwogICAgIHByaXYtPnBh
dXNlZCA9IFRSVUU7CiAgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsKICAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOwogCisgICAgaWYgKHByaXYtPnJlc291cmNlSGFuZGxlKQorICAgICAgICBw
cml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKQEAgLTczNSw3ICs4MTIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNF
bm91Z2hEYXRhQ2IoR3N0QXBwU3JjKiwgZ3BvaW50ZXIgdXNlckRhdGEpCiAKIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogewotICAgIHdl
YktpdFdlYlNyY1N0b3Aoc3JjLCB0cnVlKTsKKyAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CiAg
ICAgd2ViS2l0V2ViU3JjU3RhcnQoc3JjKTsKIAogICAgIHJldHVybiBGQUxTRTsKQEAgLTc0Nywy
MyArODI0LDI5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFw
cFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiAgICAgV2ViS2l0V2ViU3JjUHJp
dmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vl
a2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7Ci0gICAgaWYgKG9m
ZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPm9m
ZnNldCkKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICBpZiAob2Zmc2V0ID09IHByaXYt
Pm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPT0gcHJpdi0+b2Zmc2V0KSB7CisgICAg
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBUUlVFOworICAgIH0K
IAotICAgIGlmICghcHJpdi0+c2Vla2FibGUpCisgICAgaWYgKCFwcml2LT5zZWVrYWJsZSkgewor
ICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICByZXR1cm4gRkFMU0U7Ci0g
ICAgaWYgKG9mZnNldCA+IHByaXYtPnNpemUpCisgICAgfQorICAgIGlmIChvZmZzZXQgPiBwcml2
LT5zaXplKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdl
LXJlcXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKIAot
ICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5zZWVrSUQpCiAgICAgICAg
IGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwogICAgIHByaXYtPnNlZWtJRCA9IGdfdGlt
ZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0
V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBn
c3Rfb2JqZWN0X3VucmVmKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIAorCiAg
ICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTc4MCw3MSArODYzLDUxIEBAIHZvaWQgd2ViS2l0V2Vi
U3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVy
KiBwbGF5ZXIpCiAgICAgcHJpdi0+cGxheWVyID0gcGxheWVyOwogfQogCi1TdHJlYW1pbmdDbGll
bnQ6OlN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYykgOiBtX3NyYyhzcmMpCitTdHJl
YW1pbmdDbGllbnQ6OlN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYykKKyAgICA6IG1f
c3JjKHN0YXRpY19jYXN0PFdlYktpdFdlYlNyYyo+KGdzdF9vYmplY3RfcmVmKHNyYykpKQogewog
CiB9CiAKIFN0cmVhbWluZ0NsaWVudDo6flN0cmVhbWluZ0NsaWVudCgpCiB7Ci0KKyAgICBnc3Rf
b2JqZWN0X3VucmVmKG1fc3JjKTsKIH0KIAogdm9pZCBTdHJlYW1pbmdDbGllbnQ6OndpbGxTZW5k
UmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQogewogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2
b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlICpo
YW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9zcmMsICJSZWNlaXZlZCByZXNwb25zZTogJWQiLCByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
KTsKIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisKICAgICAvLyBJZiB3ZSBzZWVrZWQg
d2UgbmVlZCAyMDYgPT0gUEFSVElBTF9DT05URU5UCi0gICAgaWYgKHByaXYtPnJlcXVlc3RlZE9m
ZnNldCAmJiByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikgeworICAgIGlmIChoYW5k
bGUgIT0gcHJpdi0+cmVzb3VyY2VIYW5kbGUgfHwgKHByaXYtPnJlcXVlc3RlZE9mZnNldCAmJiBy
ZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpICE9IDIwNikpIHsKKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0sobV9zcmMpOwogICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihtX3NyYywgUkVTT1VSQ0Us
IFJFQUQsICgwKSwgKDApKTsKICAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShwcml2
LT5hcHBzcmMpOwotICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKG1fc3JjLCBmYWxzZSk7CisgICAg
ICAgIHdlYktpdFdlYlNyY1N0b3AobV9zcmMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgbG9uZyBsb25nIGxlbmd0aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwot
ICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxlbmd0
aCArPSBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQ7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXpl
KHByaXYtPmFwcHNyYywgbGVuZ3RoKTsKLQotI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAg
ICAgICBpZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgewotICAgICAgICAgICAgZ3N0X3NlZ21lbnRf
c2V0X2R1cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZP
Uk1BVF9CWVRFUywgbGVuZ3RoKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2Fn
ZShHU1RfRUxFTUVOVChwcml2LT5hcHBzcmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNy
YyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOwotICAgICAgICB9Ci0jZW5kaWYK
LSAgICB9CiAKICAgICBwcml2LT5zaXplID0gbGVuZ3RoID49IDAgPyBsZW5ndGggOiAwOwogICAg
IHByaXYtPnNlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAoIm5vbmUi
LCByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkFjY2VwdC1SYW5nZXMiKS51dGY4KCkuZGF0YSgp
KTsKIAotICAgIC8vIGljZWNhc3Qgc3R1ZmYKLSAgICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoImljeS1tZXRhaW50Iik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZ2NoYXIqIGVuZHB0ciA9IDA7Ci0gICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50
ID0gZ19hc2NpaV9zdHJ0b2xsKHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lN
ZXRhSW50ID4gMCkgewotICAgICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWlu
dGVydmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwpKTsKLQotICAgICAg
ICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBzLmdldCgpKTsKLSAg
ICAgICAgfQotICAgIH0KLQogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgR3N0VGFnTGlz
dCogdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkoKTsKICNlbHNlCiAgICAgR3N0VGFnTGlz
dCogdGFncyA9IGdzdF90YWdfbGlzdF9uZXcoKTsKICNlbmRpZgotICAgIHZhbHVlID0gcmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbmFtZSIpOworICAgIFN0cmluZyB2YWx1ZSA9IHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHko
KSkgewogICAgICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgICAgIHByaXYtPmly
YWRpb05hbWUgPSBnX3N0cmR1cCh2YWx1ZS51dGY4KCkuZGF0YSgpKTsKQEAgLTg3Myw2ICs5MzYs
MzggQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0
YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfVElUTEUsIHByaXYtPmlyYWRpb1Rp
dGxlLCBOVUxMKTsKICAgICB9CiAKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7CisKKyAg
ICAvLyBub3RpZnkgc2l6ZS9kdXJhdGlvbgorICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgbGVuZ3RoKTsKKworI2lmbmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBpZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgeworICAg
ICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+YXBw
c3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3RoKTsKKyAgICAgICAgICAgIGdz
dF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChwcml2LT5hcHBzcmMpLAorICAgICAg
ICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNy
YyksCisgICAgICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUo
cHJpdi0+YXBwc3JjLCAtMSk7CisKKyAgICAvLyBpY2VjYXN0IHN0dWZmCisgICAgdmFsdWUgPSBy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS1tZXRhaW50Iik7CisgICAgaWYgKCF2YWx1ZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZ2NoYXIqIGVuZHB0ciA9IDA7CisgICAgICAgIGdpbnQ2NCBp
Y3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xsKHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIs
IDEwKTsKKworICAgICAgICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRh
SW50ID4gMCkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVy
dmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwpKTsKKworICAgICAgICAg
ICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBzLmdldCgpKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBz
cmMsIDApOworCisgICAgLy8gbm90aWZ5IHRhZ3MKICAgICBpZiAoZ3N0X3RhZ19saXN0X2lzX2Vt
cHR5KHRhZ3MpKQogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgICAgIGdzdF90YWdfbGlz
dF91bnJlZih0YWdzKTsKQEAgLTg4MCwxMyArOTc1LDE1IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50
OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlCiAgICAgICAgIGdzdF90YWdfbGlzdF9mcmVlKHRhZ3MpOwogI2VuZGlmCiAgICAgZWxzZQot
ICAgICAgICBub3RpZnlHc3RUYWdzT25QYWQoR1NUX0VMRU1FTlQobV9zcmMpLCBtX3NyYy0+cHJp
di0+c3JjcGFkLCB0YWdzKTsKKyAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFkKEdTVF9FTEVNRU5U
KG1fc3JjKSwgcHJpdi0+c3JjcGFkLCB0YWdzKTsKIH0KIAogdm9pZCBTdHJlYW1pbmdDbGllbnQ6
OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgsIGludCkKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9z
cmMtPnByaXY7CiAKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOworCiAgICAgR1NUX0xPR19P
QkpFQ1QobV9zcmMsICJIYXZlICVkIGJ5dGVzIG9mIGRhdGEiLCBwcml2LT5idWZmZXIgPyBnZXRH
c3RCdWZmZXJTaXplKHByaXYtPmJ1ZmZlci5nZXQoKSkgOiBsZW5ndGgpOwogCiAgICAgQVNTRVJU
KCFwcml2LT5idWZmZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihwcml2LT5i
dWZmZXIuZ2V0KCkpKTsKQEAgLTg5Nyw2ICs5OTQsNyBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6
ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwg
aQogI2VuZGlmCiAKICAgICBpZiAocHJpdi0+c2Vla0lEIHx8IGhhbmRsZSAhPSBwcml2LT5yZXNv
dXJjZUhhbmRsZSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7CiAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRh
Iik7CiAgICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwogICAgICAgICByZXR1cm47CkBAIC05
MTUsNiArMTAxMyw4IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAgICAgcHJpdi0+b2Zmc2V0
ICs9IGxlbmd0aDsKICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQocHJpdi0+YnVmZmVyLmdldCgp
KSA9IHByaXYtPm9mZnNldDsKIAorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKwogICAg
IEdzdEZsb3dSZXR1cm4gcmV0ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIocHJpdi0+YXBwc3Jj
LCBwcml2LT5idWZmZXIubGVha1JlZigpKTsKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAg
IGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykKQEAgLTk0OCw4
ICsxMDQ4LDEyIEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291
cmNlSGFuZGxlKiwgZG91YmxlKQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIkhhdmUg
RU9TIik7CiAKLSAgICBpZiAoIXByaXYtPnNlZWtJRCkKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9z
cmMpOworICAgIGlmICghcHJpdi0+c2Vla0lEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG1fc3JjKTsKICAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+cHJpdi0+
YXBwc3JjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwog
fQogCiB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQpAQCAtOTYxLDE0ICsxMDY1LDI4IEBAIHZvaWQgU3RyZWFt
aW5nQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYg
ZXJyb3IpCiAKIHZvaWQgU3RyZWFtaW5nQ2xpZW50Ojp3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxl
KikKIHsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmk7CisKICAgICBHU1RfRVJST1JfT0JKRUNUKG1f
c3JjLCAiUmVxdWVzdCB3YXMgYmxvY2tlZCIpOwotICAgIEdTVF9FTEVNRU5UX0VSUk9SKG1fc3Jj
LCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkFjY2VzcyB0byBcIiVzXCIgd2FzIGJsb2NrZWQiLCBt
X3NyYy0+cHJpdi0+dXJpKSwgKDApKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7Cisg
ICAgdXJpLnNldChnX3N0cmR1cChtX3NyYy0+cHJpdi0+dXJpKSk7CisgICAgR1NUX09CSkVDVF9V
TkxPQ0sobV9zcmMpOworCisgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBP
UEVOX1JFQUQsICgiQWNjZXNzIHRvIFwiJXNcIiB3YXMgYmxvY2tlZCIsIHVyaS5nZXQoKSksICgw
KSk7CiB9CiAKIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFu
ZGxlKikKIHsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmk7CisKICAgICBHU1RfRVJST1JfT0JKRUNU
KG1fc3JjLCAiQ2Fubm90IHNob3cgVVJMIik7Ci0gICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMs
IFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQ2FuJ3Qgc2hvdyBcIiVzXCIiLCBtX3NyYy0+cHJpdi0+
dXJpKSwgKDApKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisgICAgdXJpLnNldChn
X3N0cmR1cChtX3NyYy0+cHJpdi0+dXJpKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMp
OworCisgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgi
Q2FuJ3Qgc2hvdyBcIiVzXCIiLCB1cmkuZ2V0KCkpLCAoMCkpOwogfQogCiAjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUikKLS0gCjEuOC4xLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208654</attachid>
            <date>2013-08-13 10:56:03 -0700</date>
            <delta_ts>2013-08-13 15:53:00 -0700</delta_ts>
            <desc>Updated patch against upstream master</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>22887</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA5NzAzYWQ5Y2M3YjA1MThjNDYzYmFkMWY1YjE0ZmM0MzMxYmFkMTdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMTMg
MTQ6NDU6MTMgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpQYXRjaCBieSBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyA8YW5kcmUu
bWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4gb24gMjAxMy0wOC0xMwpSZXZpZXdlZCBieSBQaGls
aXBwZSBOb3JtYW5kLgoKR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IG1heSBiZSBjcmVhdGVkIGJ5
IGFueSBnc3RyZWFtZXIgZWxlbWVudCBvbiBhbnkgdGhyZWFkIGJ5IGNhbGxpbmcKZ3N0X2VsZW1l
bnRfbWFrZV9mcm9tX3VyaSB3aXRoIHRoZSBVUklzIGhhbmRsZWQgYnkgdGhlIHNvdXJjZSBlbGVt
ZW50LgpUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhlIGdzdHJlYW1lciBzb3VyY2UgZWxlbWVudCBp
cyB0aHJlYWQtc2FmZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBpdApiZWluZyBjcmVhdGVkIG91dHNp
ZGUgdGhlIG1haW4gdGhyZWFkLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKF9XZWJLaXRXZWJTcmNQcml2YXRlKToKKHdlYmtpdF93
ZWJfc3JjX2luaXQpOgood2ViS2l0V2ViU3JjRmluYWxpemUpOgood2ViS2l0V2ViU3JjU2V0UHJv
cGVydHkpOgood2ViS2l0V2ViU3JjR2V0UHJvcGVydHkpOgood2ViS2l0V2ViU3JjU3RvcCk6Cih3
ZWJLaXRXZWJTcmNTdGFydCk6Cih3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk6Cih3ZWJLaXRXZWJT
cmNRdWVyeVdpdGhQYXJlbnQpOgood2ViS2l0V2ViU3JjR2V0VXJpKToKKHdlYktpdFdlYlNyY1Nl
dFVyaSk6Cih3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hE
YXRhTWFpbkNiKToKKHdlYktpdFdlYlNyY1NlZWtNYWluQ2IpOgood2ViS2l0V2ViU3JjU2Vla0Rh
dGFDYik6Cih3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcik6CihTdHJlYW1pbmdDbGllbnQ6OlN0
cmVhbWluZ0NsaWVudCk6CihTdHJlYW1pbmdDbGllbnQ6On5TdHJlYW1pbmdDbGllbnQpOgooU3Ry
ZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgooU3RyZWFtaW5nQ2xpZW50OjpkaWRS
ZWNlaXZlRGF0YSk6CihTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcpOgooU3RyZWFt
aW5nQ2xpZW50Ojp3YXNCbG9ja2VkKToKKFN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VSTCk6
Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMzggKysrCiAuLi4vZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgICAg
ICAgICB8IDI1NCArKysrKysrKysrKysrKystLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjE2IGlu
c2VydGlvbnMoKyksIDc2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYjBmZjRhLi4zNGE5
OTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTMtMDgtMTMgIEFuZHJlIE1vcmVp
cmEgTWFnYWxoYWVzICA8YW5kcmUubWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4KKworICAgICAg
ICBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzNTIKKworICAg
ICAgICBQYXRjaCBieSBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyA8YW5kcmUubWFnYWxoYWVzQGNv
bGxhYm9yYS5jby51az4gb24gMjAxMy0wOC0xMworICAgICAgICBSZXZpZXdlZCBieSBQaGlsaXBw
ZSBOb3JtYW5kLgorCisgICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3Jl
YXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisg
ICAgICAgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5
IHRoZSBzb3VyY2UgZWxlbWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBn
c3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdp
dGggaXQKKyAgICAgICAgYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAoX1dlYktpdFdlYlNyY1ByaXZhdGUpOgorICAgICAgICAod2Vi
a2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6CisgICAg
ICAgICh3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRQ
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAgICAgICAgKHdlYktpdFdl
YlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRV
cmkpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y05lZWREYXRhTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2Ip
OgorICAgICAgICAod2ViS2l0V2ViU3JjU2Vla01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJT
cmNTZWVrRGF0YUNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKyAg
ICAgICAgKFN0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVh
bWluZ0NsaWVudDo6flN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQpOgorICAgICAgICAoU3RyZWFtaW5n
Q2xpZW50OjpjYW5ub3RTaG93VVJMKToKKwogMjAxMy0wOC0xMiAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEFkZCBTdXBwb3J0
IGZvciBjYW52YXMgYmxlbmQgbW9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKaW5kZXggMGNjNTc1ZS4uNGMyYzRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTQxLDYgKzQxLDE2IEBACiAjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAor
LyogUHJlbWlzc2VzOgorICogLSB3ZWJraXRzcmMgbWF5IGJlIGNyZWF0ZWQgZnJvbSBhbnkgdGhy
ZWFkIGluc2lkZSBnc3RyZWFtZXIKKyAqIC0gY2xpZW50IGhvbGRzIHJlZmVyZW5jZSB0byBzcmMs
IHNvIHRoYXQgc3JjIGlzIG5ldmVyIGRlbGV0ZWQgd2hpbGUgY2xpZW50IGV4aXN0cworICogLSBp
ZiB0aGUgc3JjIGV4aXN0cywgYXBwc3JjIGFsc28gZXhpc3RzCisgKiAtIGNsaWVudCBpcyBjcmVh
dGVkIG9uIHN0YXJ0CisgKiAtIGNsaWVudCBpcyBkZWxldGVkIG9uIHN0b3AgYWZ0ZXIgY2FuY2Vs
bGluZyByZXNvdXJjZSBoYW5kbGUKKyAqIC0gY2xpZW50IGNhbGxiYWNrcyBhcmUgYWx3YXlzIGlu
dm9rZWQgZnJvbSBtYWluIHRocmVhZAorICogLSByZXNvdXJjZSBoYW5kbGUgbWV0aG9kcyBtdXN0
IGFsd2F5cyBiZSBjYWxsZWQgZnJvbSBtYWluIHRocmVhZAorICovCisKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBjbGFzcyBTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVz
b3VyY2VDbGllbnQgewpAQCAtNzcsNiArODcsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZh
dGUgewogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZzZXQ7CiAKKyAgICBndWludCBzdGFydElE
OworICAgIGd1aW50IHN0b3BJRDsKICAgICBndWludCBuZWVkRGF0YUlEOwogICAgIGd1aW50IGVu
b3VnaERhdGFJRDsKICAgICBndWludCBzZWVrSUQ7CkBAIC0xMjksOCArMTQxLDYgQEAgc3RhdGlj
IHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdw
b2ludGVyIHVzZXJEYXRhKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihH
c3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2Vi
U3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlckRh
dGEpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyosIGJvb2wp
OwotCiBzdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNyY0NhbGxiYWNrcyA9IHsKICAgICB3
ZWJLaXRXZWJTcmNOZWVkRGF0YUNiLAogICAgIHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYiwKQEAg
LTIyMiw4ICsyMzIsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdl
YlNyYyogc3JjKQogCiAgICAgc3JjLT5wcml2ID0gcHJpdjsKIAotICAgIHByaXYtPmNsaWVudCA9
IG5ldyBTdHJlYW1pbmdDbGllbnQoc3JjKTsKLQogICAgIHByaXYtPmFwcHNyYyA9IEdTVF9BUFBf
U1JDKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgMCkpOwogICAgIGlmICghcHJp
di0+YXBwc3JjKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNy
ZWF0ZSBhcHBzcmMiKTsKQEAgLTI3Miw3ICsyODAsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIGlmIChwcml2LT5oYXZlQXBwU3JjMjcp
CiAgICAgICAgIGdfb2JqZWN0X3NldChwcml2LT5hcHBzcmMsICJtaW4tcGVyY2VudCIsIDIwLCBO
VUxMKTsKIAotICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgZ3N0X2FwcF9z
cmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShw
cml2LT5hcHBzcmMsIC0xKTsKIH0KIAogc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCkBAIC0yOTcsOCArMzA2LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2Vi
U3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VC
S0lUX1dFQl9TUkMob2JqZWN0KTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OwogCi0gICAgZGVsZXRlIHByaXYtPmNsaWVudDsKLQogICAgIGdfZnJlZShwcml2LT51
cmkpOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9i
amVjdCkpOwpAQCAtMzExLDcgKzMxOCw5IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1NldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqCiAKICAg
ICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9fTU9ERToKKyAgICAgICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgICAgIHByaXYtPmlyYWRpb01vZGUgPSBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCkBAIC0zMzEsNiArMzQwLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjR2V0UHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFsdWUKICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMp
OwogICAgIHN3aXRjaCAocHJvcElEKSB7CiAgICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgogICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pcmFkaW9Nb2RlKTsKQEAgLTM1
NCwxMiArMzY0LDIzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcHNwZWMpOwogICAgICAg
ICBicmVhazsKICAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAotCi1zdGF0
aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjLCBib29sIHNlZWtpbmcp
CisvLyBtdXN0IGJlIGNhbGxlZCBvbiBtYWluIHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2Nr
ZWQKK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQog
ewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisgICAgZ2Jvb2xl
YW4gc2Vla2luZzsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworCisgICAgc2Vla2luZyA9
IHByaXYtPnNlZWtJRDsKKworICAgIGlmIChwcml2LT5zdGFydElEKSB7CisgICAgICAgIGdfc291
cmNlX3JlbW92ZShwcml2LT5zdGFydElEKTsKKyAgICAgICAgcHJpdi0+c3RhcnRJRCA9IDA7Cisg
ICAgfQogCiAgICAgaWYgKHByaXYtPnJlc291cmNlKSB7CiAgICAgICAgIHByaXYtPnJlc291cmNl
LT5yZW1vdmVDbGllbnQocHJpdi0+Y2xpZW50KTsKQEAgLTM3MSw2ICszOTIsOCBAQCBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAg
ICAgICAgIHByaXYtPmNsaWVudCA9IDA7CiAgICAgfQogCisgICAgcHJpdi0+cGxheWVyID0gMDsK
KwogICAgIGlmIChwcml2LT5idWZmZXIpIHsKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAg
ICAgICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5idWZmZXIuZ2V0KCkpOwpAQCAtMzc4LDcgKzQwMSw2
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMsIGJvb2wg
c2Vla2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgfQogCi0gICAgR1NU
X09CSkVDVF9MT0NLKHNyYyk7CiAgICAgaWYgKHByaXYtPm5lZWREYXRhSUQpCiAgICAgICAgIGdf
c291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKICAgICBwcml2LT5uZWVkRGF0YUlEID0g
MDsKQEAgLTM5Miw3ICs0MTQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktp
dFdlYlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAgICAgcHJpdi0+c2Vla0lEID0gMDsKIAogICAg
IHByaXYtPnBhdXNlZCA9IEZBTFNFOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAKICAg
ICBnX2ZyZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgcHJpdi0+aXJhZGlvTmFtZSA9IDA7CkBA
IC00MDYsMTIgKzQyNyw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2Vi
U3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwog
ICAgIHByaXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAg
ICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYg
KCFzZWVraW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3Jj
LCAtMSk7Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJs
ZSA9IEZBTFNFOwogCkBAIC00MjAsMTYgKzQzNSwzMSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNTdG9wKFdlYktpdFdlYlNyYyogc3JjLCBib29sIHNlZWtpbmcpCiAgICAgICAgIHByaXYtPnJl
cXVlc3RlZE9mZnNldCA9IDA7CiAgICAgfQogCisgICAgcHJpdi0+c3RvcElEID0gMDsKKyAgICBH
U1RfT0JKRUNUX1VOTE9DSyhzcmMpOworCisgICAgaWYgKHByaXYtPmFwcHNyYykgeworICAgICAg
ICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworICAgICAgICBpZiAoIXNl
ZWtpbmcpCisgICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0x
KTsKKyAgICB9CisKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIp
OworCisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFy
dChXZWJLaXRXZWJTcmMqIHNyYykKKy8vIG11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkIGFu
ZCB3aXRoIG9iamVjdCB1bmxvY2tlZAorc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0YXJ0
KFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CiAKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKICAgICBpZiAoIXByaXYtPnVy
aSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Cisg
ICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAg
IH0KIAogICAgIEFTU0VSVChwcml2LT5wbGF5ZXIpOwpAQCAtNDgwLDEyICs1MTAsMTMgQEAgc3Rh
dGljIGJvb2wgd2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBpZiAo
IXByaXYtPnJlc291cmNlKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVk
IHRvIHNjaGVkdWxlIHJlc291cmNlIGxvYWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKHNy
Yyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9Ci0KKyAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOwogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhcnRlZCByZXF1ZXN0Iik7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBHc3RTdGF0
ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQpAQCAtNTE2LDEyICs1NDcsMTUgQEAgc3RhdGlj
IEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQq
IGVsZW1lbnQsIEdzdFN0YXQKICAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKICAgICBjYXNlIEdT
VF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlJFQURZLT5QQVVTRUQiKTsKLSAgICAgICAgaWYgKCF3ZWJLaXRXZWJTcmNTdGFydChz
cmMpKQotICAgICAgICAgICAgcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAg
ICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAgICAgcHJpdi0+c3RhcnRJRCA9IGdfdGltZW91
dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0V2Vi
U3JjU3RhcnQsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVj
dF91bnJlZik7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURfVE9fUkVBRFk6CiAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiUEFVU0VELT5SRUFEWSIpOwotICAgICAgICB3ZWJLaXRXZWJT
cmNTdG9wKHNyYywgZmFsc2UpOworICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAg
ICAgcHJpdi0+c3RvcElEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwg
MCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNTdG9wLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAo
R0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICAgICAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzcmMpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
QEAgLTUzMiw3ICs1NjYsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2Vi
U3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogCiBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3Qq
IHBhcmVudCwgR3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdlYktpdFdlYlNyYyogd2Via2l0U3Jj
ID0gV0VCS0lUX1dFQl9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7CisgICAgV2ViS2l0V2ViU3Jj
KiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsKICAgICBnYm9vbGVh
biByZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSB7
CkBAIC01NDEsMTUgKzU3NSwxOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlX
aXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UQogCiAgICAgICAg
IGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbihxdWVyeSwgJmZvcm1hdCwgTlVMTCk7CiAKLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJraXRTcmMsICJkdXJhdGlvbiBxdWVyeSBpbiBmb3JtYXQg
JXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOwotICAgICAgICBpZiAoKGZvcm1hdCA9
PSBHU1RfRk9STUFUX0JZVEVTKSAmJiAod2Via2l0U3JjLT5wcml2LT5zaXplID4gMCkpIHsKLSAg
ICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgd2Via2l0U3Jj
LT5wcml2LT5zaXplKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJkdXJhdGlvbiBx
dWVyeSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOworICAgICAg
ICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAgICAgaWYgKChmb3JtYXQgPT0gR1NUX0ZPUk1B
VF9CWVRFUykgJiYgKHNyYy0+cHJpdi0+c2l6ZSA+IDApKSB7CisgICAgICAgICAgICBnc3RfcXVl
cnlfc2V0X2R1cmF0aW9uKHF1ZXJ5LCBmb3JtYXQsIHNyYy0+cHJpdi0+c2l6ZSk7CiAgICAgICAg
ICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICB9CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KHNyYyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9RVUVSWV9VUkk6IHsK
LSAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHdlYmtpdFNyYy0+cHJpdi0+dXJpKTsK
KyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJp
KHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7
CiAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3
ICs2MjgsMTMgQEAgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMo
R1R5cGUpCiAKIHN0YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIq
IGhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIp
LT5wcml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFu
ZGxlcik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAg
IHJldCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+dXJpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOworICAgIHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNT
ZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiog
ZXJyb3IpCkBAIC02MDMsMjAgKzY0NywyNSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAg
ICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAg
ICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsKIAotICAgIGlmICghdXJp
KQorICAgIGlmICghdXJpKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAg
ICAgIHJldHVybiBUUlVFOworICAgIH0KIAogICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKIAog
ICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkg
eworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBnX3NldF9lcnJvcihl
cnJvciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLCAiSW52YWxpZCBVUkkg
JyVzJyIsIHVyaSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBwcml2LT51
cmkgPSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX09CSkVD
VF9VTkxPQ0soc3JjKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNjM0LDcgKzY4MywxMyBA
QCBzdGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHModm9pZCkKIAogc3RhdGlj
IGNvbnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikK
IHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dFQl9TUkMoaGFuZGxlciktPnByaXYtPnVy
aSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAg
ICBnY2hhciogcmV0OworCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgcmV0ID0gZ19z
dHJkdXAoc3JjLT5wcml2LT51cmkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAg
cmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RV
UklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQpAQCAtNjQ3LDIwICs3MDIsMjUg
QEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5k
bGVyLCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCisg
ICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJp
di0+dXJpID0gMDsKIAotICAgIGlmICghdXJpKQorICAgIGlmICghdXJpKSB7CisgICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KIAogICAg
IEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKIAogICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJs
LnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkludmFsaWQgVVJJICclcyciLCB1
cmkpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgcHJpdi0+dXJpID0gZ19z
dHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KHNyYyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAjZW5kaWYKQEAgLTY4MSwxMiArNzQxLDE5IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYihXZWJLaXRXZWJTcmMq
IHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0g
ICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCiAgICAgR1NUX09C
SkVDVF9MT0NLKHNyYyk7CisgICAgLy8gYWxyZWFkeSBzdG9wcGVkCisgICAgaWYgKCFwcml2LT5u
ZWVkRGF0YUlEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJl
dHVybiBGQUxTRTsKKyAgICB9CisKICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKICAgICBwcml2
LT5uZWVkRGF0YUlEID0gMDsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworCisgICAgaWYg
KHByaXYtPnJlc291cmNlKQorICAgICAgICBwcml2LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC03MTEsMTMgKzc3OCwxOSBAQCBz
dGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRXZWJTcmMq
IHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0g
ICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7Ci0KICAgICBHU1RfT0JK
RUNUX0xPQ0soc3JjKTsKKyAgICAvLyBhbHJlYWR5IHN0b3BwZWQKKyAgICBpZiAoIXByaXYtPmVu
b3VnaERhdGFJRCkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCiAgICAgcHJpdi0+cGF1c2VkID0gVFJVRTsKICAgICBwcml2
LT5lbm91Z2hEYXRhSUQgPSAwOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAKKyAgICBp
ZiAocHJpdi0+cmVzb3VyY2UpCisgICAgICAgIHByaXYtPnJlc291cmNlLT5zZXREZWZlcnNMb2Fk
aW5nKHRydWUpOwogICAgIHJldHVybiBGQUxTRTsKIH0KIApAQCAtNzQwLDcgKzgxMyw3IEBAIHN0
YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1
c2VyRGF0YSkKIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IoV2ViS2l0
V2ViU3JjKiBzcmMpCiB7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIHRydWUpOworICAgIHdl
YktpdFdlYlNyY1N0b3Aoc3JjKTsKICAgICB3ZWJLaXRXZWJTcmNTdGFydChzcmMpOwogCiAgICAg
cmV0dXJuIEZBTFNFOwpAQCAtNzUyLDIxICs4MjUsMjkgQEAgc3RhdGljIGdib29sZWFuIHdlYktp
dFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVz
ZXIKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1B
VCwgb2Zmc2V0KTsKLSAgICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1
ZXN0ZWRPZmZzZXQgPT0gcHJpdi0+b2Zmc2V0KQorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwor
ICAgIGlmIChvZmZzZXQgPT0gcHJpdi0+b2Zmc2V0ICYmIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9
PSBwcml2LT5vZmZzZXQpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgfQogCi0gICAgaWYgKCFwcml2LT5zZWVrYWJsZSkKKyAgICBp
ZiAoIXByaXYtPnNlZWthYmxlKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Cisg
ICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG9mZnNldCA+IHByaXYtPnNpemUp
IHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiRG9pbmcgcmFuZ2UtcmVxdWVz
dCBzZWVrIik7CiAgICAgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID0gb2Zmc2V0OwogCi0gICAgR1NU
X09CSkVDVF9MT0NLKHNyYyk7CiAgICAgaWYgKHByaXYtPnNlZWtJRCkKICAgICAgICAgZ19zb3Vy
Y2VfcmVtb3ZlKHByaXYtPnNlZWtJRCk7CiAgICAgcHJpdi0+c2Vla0lEID0gZ190aW1lb3V0X2Fk
ZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNT
ZWVrTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmpl
Y3RfdW5yZWYpOwogICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Ci0gICAgCisKICAgICByZXR1
cm4gVFJVRTsKIH0KIApAQCAtNzc2LDE0ICs4NTcsMTUgQEAgdm9pZCB3ZWJLaXRXZWJTcmNTZXRN
ZWRpYVBsYXllcihXZWJLaXRXZWJTcmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXll
cikKICAgICBzcmMtPnByaXYtPnBsYXllciA9IHBsYXllcjsKIH0KIAotU3RyZWFtaW5nQ2xpZW50
OjpTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMpIDogbV9zcmMoc3JjKQorU3RyZWFt
aW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMpCisgICAgOiBtX3Ny
YyhzdGF0aWNfY2FzdDxXZWJLaXRXZWJTcmMqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkKIHsKIAog
fQogCiBTdHJlYW1pbmdDbGllbnQ6On5TdHJlYW1pbmdDbGllbnQoKQogewotCisgICAgZ3N0X29i
amVjdF91bnJlZihtX3NyYyk7CiB9CiAKIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJl
Y2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCkBAIC03OTIsNTEgKzg3NCwzMCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVz
cG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUgog
CiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIHJl
c3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwogCisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsK
KwogICAgIC8vIElmIHdlIHNlZWtlZCB3ZSBuZWVkIDIwNiA9PSBQQVJUSUFMX0NPTlRFTlQKLSAg
ICBpZiAocHJpdi0+cmVxdWVzdGVkT2Zmc2V0ICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
IT0gMjA2KSB7CisgICAgaWYgKHJlc291cmNlICE9IHByaXYtPnJlc291cmNlIHx8IChwcml2LT5y
ZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpKSB7Cisg
ICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKICAgICAgICAgR1NUX0VMRU1FTlRfRVJS
T1IobV9zcmMsIFJFU09VUkNFLCBSRUFELCAoMCksICgwKSk7CiAgICAgICAgIGdzdF9hcHBfc3Jj
X2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcCht
X3NyYywgZmFsc2UpOworICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKG1fc3JjKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGxvbmcgbG9uZyBsZW5ndGggPSByZXNwb25zZS5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKTsKLSAgICBpZiAobGVuZ3RoID4gMCkgeworICAgIGlmIChsZW5ndGgg
PiAwKQogICAgICAgICBsZW5ndGggKz0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICBn
c3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7Ci0KLSNpZm5kZWYgR1NU
X0FQSV9WRVJTSU9OXzEKLSAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKLSAgICAg
ICAgICAgIGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNy
YyktPnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7Ci0gICAgICAgICAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NU
X09CSkVDVChwcml2LT5hcHBzcmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgfQogCiAgICAgcHJpdi0+c2l6ZSA9IGxlbmd0aCA+PSAw
ID8gbGVuZ3RoIDogMDsKICAgICBwcml2LT5zZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2Np
aV9zdHJjYXNlY21wKCJub25lIiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQtUmFu
Z2VzIikudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAvLyBpY2VjYXN0IHN0dWZmCi0gICAgU3RyaW5n
IHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOwotICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOwotICAgICAg
ICBnaW50NjQgaWN5TWV0YUludCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgp
LCAmZW5kcHRyLCAxMCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5k
cHRyID09ICdcMCcgJiYgaWN5TWV0YUludCA+IDApIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0
Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94
LWljeSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50
LCBOVUxMKSk7Ci0KLSAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNy
YywgY2Fwcy5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQogICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCk7CiAj
ZWxzZQogICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3KCk7CiAjZW5kaWYK
LSAgICB2YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKKyAgICBT
dHJpbmcgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS1uYW1lIik7CiAgICAg
aWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUp
OwogICAgICAgICBwcml2LT5pcmFkaW9OYW1lID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEo
KSk7CkBAIC04NjUsNiArOTI2LDM4IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJl
Y2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSCiAgICAgICAg
IGdzdF90YWdfbGlzdF9hZGQodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJ
VExFLCBwcml2LT5pcmFkaW9UaXRsZSwgTlVMTCk7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9V
TkxPQ0sobV9zcmMpOworCisgICAgLy8gbm90aWZ5IHNpemUvZHVyYXRpb24KKyAgICBpZiAobGVu
Z3RoID4gMCkgeworICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxl
bmd0aCk7CisKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgaWYgKCFwcml2LT5o
YXZlQXBwU3JjMjcpIHsKKyAgICAgICAgICAgIGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NU
X0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0
aCk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJp
di0+YXBwc3JjKSwKKyAgICAgICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NU
X09CSkVDVChwcml2LT5hcHBzcmMpLAorICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZ
VEVTLCBsZW5ndGgpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIGdz
dF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOworCisgICAgLy8gaWNlY2FzdCBz
dHVmZgorICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIp
OworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGdjaGFyKiBlbmRwdHIgPSAw
OworICAgICAgICBnaW50NjQgaWN5TWV0YUludCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4
KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7CisKKyAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRy
ID09ICdcMCcgJiYgaWN5TWV0YUludCA+IDApIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fw
cz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWlj
eSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBO
VUxMKSk7CisKKyAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywg
Y2Fwcy5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKworICAgIC8vIG5vdGlmeSB0YWdzCiAgICAgaWYg
KGdzdF90YWdfbGlzdF9pc19lbXB0eSh0YWdzKSkKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQog
ICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYodGFncyk7CkBAIC04NzIsMTMgKzk2NSwxNSBAQCB2
b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2UsIGNvbnN0IFJlc291cmNlUgogICAgICAgICBnc3RfdGFnX2xpc3RfZnJlZSh0YWdzKTsK
ICNlbmRpZgogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFkKEdTVF9FTEVNRU5U
KG1fc3JjKSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFncyk7CisgICAgICAgIG5vdGlmeUdzdFRh
Z3NPblBhZChHU1RfRUxFTUVOVChtX3NyYyksIHByaXYtPnNyY3BhZCwgdGFncyk7CiB9CiAKIHZv
aWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZh
dGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisK
ICAgICBHU1RfTE9HX09CSkVDVChtX3NyYywgIkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIHByaXYt
PmJ1ZmZlciA/IGdldEdzdEJ1ZmZlclNpemUocHJpdi0+YnVmZmVyLmdldCgpKSA6IGxlbmd0aCk7
CiAKICAgICBBU1NFUlQoIXByaXYtPmJ1ZmZlciB8fCBkYXRhID09IGdldEdzdEJ1ZmZlckRhdGFQ
b2ludGVyKHByaXYtPmJ1ZmZlci5nZXQoKSkpOwpAQCAtODg5LDYgKzk4NCw3IEBAIHZvaWQgU3Ry
ZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25z
dCBjaGFyKiBkYXRhLCBpCiAjZW5kaWYKIAogICAgIGlmIChwcml2LT5zZWVrSUQgfHwgcmVzb3Vy
Y2UgIT0gcHJpdi0+cmVzb3VyY2UpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMp
OwogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiU2VlayBpbiBwcm9ncmVzcywgaWdu
b3JpbmcgZGF0YSIpOwogICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtOTEzLDYgKzEwMDksOCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgIH0K
ICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQocHJpdi0+YnVmZmVyLmdldCgpKSA9IHByaXYtPm9m
ZnNldDsKIAorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKwogICAgIEdzdEZsb3dSZXR1
cm4gcmV0ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIocHJpdi0+YXBwc3JjLCBwcml2LT5idWZm
ZXIubGVha1JlZigpKTsKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIGlmIChyZXQgIT0g
R1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX0VPUykKQEAgLTk1Niw4ICsxMDU0LDEyIEBA
IHZvaWQgU3RyZWFtaW5nQ2xpZW50Ojpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogcmVz
b3VyY2UpCiAKICAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiSGF2ZSBFT1MiKTsKIAotICAg
IGlmICghcHJpdi0+c2Vla0lEKQorICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3NyYyk7CisgICAgaWYg
KCFwcml2LT5zZWVrSUQpIHsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOwogICAg
ICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworICAg
IH0gZWxzZQorICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7CiB9CiAKICNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKQotLSAKMS44LjEuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208788</attachid>
            <date>2013-08-14 21:03:38 -0700</date>
            <delta_ts>2013-08-15 11:48:28 -0700</delta_ts>
            <desc>Updated patch against upstream master</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>35819</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA3NDY0YTdkMmY3NThhOTQ5MzY3ZmNiN2Y0NjI3Yzc2MmY2NjhhNDdiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMTMg
MTQ6NDU6MTMgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpQYXRjaCBieSBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyA8YW5kcmUu
bWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4gb24gMjAxMy0wOC0xNApSZXZpZXdlZCBieSBQaGls
aXBwZSBOb3JtYW5kLgoKR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IG1heSBiZSBjcmVhdGVkIGJ5
IGFueSBnc3RyZWFtZXIgZWxlbWVudCBvbiBhbnkgdGhyZWFkIGJ5IGNhbGxpbmcKZ3N0X2VsZW1l
bnRfbWFrZV9mcm9tX3VyaSB3aXRoIHRoZSBVUklzIGhhbmRsZWQgYnkgdGhlIHNvdXJjZSBlbGVt
ZW50LgpUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhlIGdzdHJlYW1lciBzb3VyY2UgZWxlbWVudCBp
cyB0aHJlYWQtc2FmZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBpdApiZWluZyBjcmVhdGVkIG91dHNp
ZGUgdGhlIG1haW4gdGhyZWFkLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKF9XZWJLaXRXZWJTcmNQcml2YXRlKToKKHdlYmtpdF93
ZWJfc3JjX2luaXQpOgood2ViS2l0V2ViU3JjRmluYWxpemUpOgood2ViS2l0V2ViU3JjU2V0UHJv
cGVydHkpOgood2ViS2l0V2ViU3JjR2V0UHJvcGVydHkpOgood2ViS2l0V2ViU3JjU3RvcCk6Cih3
ZWJLaXRXZWJTcmNTdGFydCk6Cih3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk6Cih3ZWJLaXRXZWJT
cmNRdWVyeVdpdGhQYXJlbnQpOgood2ViS2l0V2ViU3JjR2V0VXJpKToKKHdlYktpdFdlYlNyY1Nl
dFVyaSk6Cih3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hE
YXRhTWFpbkNiKToKKHdlYktpdFdlYlNyY1NlZWtNYWluQ2IpOgood2ViS2l0V2ViU3JjU2Vla0Rh
dGFDYik6Cih3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcik6CihTdHJlYW1pbmdDbGllbnQ6OlN0
cmVhbWluZ0NsaWVudCk6CihTdHJlYW1pbmdDbGllbnQ6On5TdHJlYW1pbmdDbGllbnQpOgooU3Ry
ZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgooU3RyZWFtaW5nQ2xpZW50OjpkaWRS
ZWNlaXZlRGF0YSk6CihTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcpOgooU3RyZWFt
aW5nQ2xpZW50Ojp3YXNCbG9ja2VkKToKKFN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VSTCk6
Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMzggKysKIC4uLi9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCAgICAg
ICAgIHwgNTc5ICsrKysrKysrKysrKysrKystLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA0OTAgaW5z
ZXJ0aW9ucygrKSwgMTI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYjBmZjRhLi5lMmE5
YWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTMtMDgtMTQgIEFuZHJlIE1vcmVp
cmEgTWFnYWxoYWVzICA8YW5kcmUubWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4KKworICAgICAg
ICBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzNTIKKworICAg
ICAgICBQYXRjaCBieSBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyA8YW5kcmUubWFnYWxoYWVzQGNv
bGxhYm9yYS5jby51az4gb24gMjAxMy0wOC0xNAorICAgICAgICBSZXZpZXdlZCBieSBQaGlsaXBw
ZSBOb3JtYW5kLgorCisgICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3Jl
YXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisg
ICAgICAgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5
IHRoZSBzb3VyY2UgZWxlbWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBn
c3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdp
dGggaXQKKyAgICAgICAgYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAoX1dlYktpdFdlYlNyY1ByaXZhdGUpOgorICAgICAgICAod2Vi
a2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6CisgICAg
ICAgICh3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRQ
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAgICAgICAgKHdlYktpdFdl
YlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRV
cmkpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y05lZWREYXRhTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2Ip
OgorICAgICAgICAod2ViS2l0V2ViU3JjU2Vla01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJT
cmNTZWVrRGF0YUNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKyAg
ICAgICAgKFN0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVh
bWluZ0NsaWVudDo6flN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQpOgorICAgICAgICAoU3RyZWFtaW5n
Q2xpZW50OjpjYW5ub3RTaG93VVJMKToKKwogMjAxMy0wOC0xMiAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEFkZCBTdXBwb3J0
IGZvciBjYW52YXMgYmxlbmQgbW9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKaW5kZXggMGNjNTc1ZS4uMDZjMDczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJH
U3RyZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBz
cmMuaD4KQEAgLTQxLDIyICs0Myw4NiBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKy8qIFByZW1pc3NlczoKKyAqIC0g
d2Via2l0c3JjIG1heSBiZSBjcmVhdGVkIGZyb20gYW55IHRocmVhZCBpbnNpZGUgZ3N0cmVhbWVy
CisgKiAtIHdlYmtpdHNyYyBtYXkgYmUgY3JlYXRlZCB3aXRob3V0IGEgcGxheWVyIGludm9sdmVk
IChlLmcuOiBkYXNoIGdzdHJlYW1lciBlbGVtZW50CisgKiAgIGludGVybmFsbHkgZG93bmxvYWRp
bmcgc3RyZWFtIGZyYWdtZW50cykKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBob2xkcyByZWZlcmVu
Y2UgdG8gc3JjLCBzbyB0aGF0IHNyYyBpcyBuZXZlciBkZWxldGVkIHdoaWxlIGNsaWVudCBleGlz
dHMKKyAqIC0gaWYgdGhlIHNyYyBleGlzdHMsIGFwcHNyYyBhbHNvIGV4aXN0cworICogLSBzdHJl
YW1pbmcgY2xpZW50IGlzIGNyZWF0ZWQgb24gc3RhcnQKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBp
cyBkZWxldGVkIG9uIHN0b3AgYW5kIGNhbmNlbHMgcmVzb3VyY2UKKyAqIC0gc3RyZWFtaW5nIGNs
aWVudCBjYWxsYmFja3MgYXJlIGFsd2F5cyBpbnZva2VkIGZyb20gbWFpbiB0aHJlYWQKKyAqLwor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgU3RyZWFtaW5nQ2xpZW50IDogcHVi
bGljIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
dHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFN0cmVhbWlu
Z0NsaWVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyZWFtaW5nQ2xpZW50SGFu
ZGxlcihXZWJLaXRXZWJTcmMqKTsKKyAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50SGFu
ZGxlcigpOworCisgICAgICAgIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVx
dWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCByZXNwb25zZVJl
Y2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkYXRhUmVjZWl2
ZWQoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFdlYktpdFdlYlNyYyogbV9zcmM7Cit9OworCisvLyBjb21t
b24gU3RyZWFtaW5nQ2xpZW50IGludGVyZmFjZQorY2xhc3MgU3RyZWFtaW5nQ2xpZW50IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqKTsKLSAgICAg
ICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50KCk7CisgICAgICAgIHZpcnR1YWwgflN0cmVhbWlu
Z0NsaWVudCgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKSA9IDA7Cit9
OworCitjbGFzcyBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBDYWNoZWRS
YXdSZXNvdXJjZUNsaWVudCwgcHVibGljIFN0cmVhbWluZ0NsaWVudCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5n
Q2xpZW50KFdlYktpdFdlYlNyYyosIENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xp
ZW50KCk7CisKKyAgICAgICAgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQg
c2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIENhY2hl
ZFJlc291cmNlQ2xpZW50Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVkKENh
Y2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciosIGludCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwotICAg
ICAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSos
IHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAgICBjaGFy
KiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVk
U2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lk
IGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAg
ICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisKKyAgICAgICAgV2ViS2l0
V2ViU3JjKiBtX3NyYzsKKyAgICAgICAgU3RyZWFtaW5nQ2xpZW50SGFuZGxlciogbV9oYW5kbGVy
OworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNv
dXJjZTsKK307CisKK2NsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGlj
IFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtaW5nQ2xpZW50IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VIYW5kbGVTdHJl
YW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
ICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAg
Ym9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhi
b29sKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50Cisg
ICAgICAgIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwg
c2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3Vy
Y2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovKTsKKyAgICAgICAgdm9p
ZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAg
ICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5ub3RT
aG93VVJMKFJlc291cmNlSGFuZGxlKik7CiAKICAgICAgICAgV2ViS2l0V2ViU3JjKiBtX3NyYzsK
KyAgICAgICAgU3RyZWFtaW5nQ2xpZW50SGFuZGxlciogbV9oYW5kbGVyOworICAgICAgICBSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2U7CiB9OwogCiAjZGVmaW5lIFdFQktJVF9XRUJf
U1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX1RZUEVfV0VCX1NSQywgV2ViS2l0V2ViU3JjUHJpdmF0ZSkpCkBAIC02OCw3ICsxMzQs
NiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAgIFdlYkNvcmU6Ok1lZGlhUGxh
eWVyKiBwbGF5ZXI7CiAKICAgICBTdHJlYW1pbmdDbGllbnQqIGNsaWVudDsKLSAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVzb3VyY2U7CiAKICAgICBndWludDY0
IG9mZnNldDsKICAgICBndWludDY0IHNpemU7CkBAIC03Nyw2ICsxNDIsOCBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlNyY1ByaXZhdGUgewogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZzZXQ7CiAKKyAg
ICBndWludCBzdGFydElEOworICAgIGd1aW50IHN0b3BJRDsKICAgICBndWludCBuZWVkRGF0YUlE
OwogICAgIGd1aW50IGVub3VnaERhdGFJRDsKICAgICBndWludCBzZWVrSUQ7CkBAIC0xMjksOCAr
MTk2LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBn
dWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwg
Z3BvaW50ZXIgdXNlckRhdGEpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktp
dFdlYlNyYyosIGJvb2wpOwotCiBzdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNyY0NhbGxi
YWNrcyA9IHsKICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiLAogICAgIHdlYktpdFdlYlNyY0Vu
b3VnaERhdGFDYiwKQEAgLTE4NCw3ICsyNDksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Ny
Y19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbnJlIG9mIHRoZSBzdHJl
YW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNf
U1RSSU5HUykpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFz
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSVJBRElPX1VSTCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
ImlyYWRpby11cmwiLApAQCAtMjIyLDggKzI4Nyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
c3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBzcmMtPnByaXYgPSBwcml2OwogCi0g
ICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMpOwotCiAgICAgcHJpdi0+
YXBwc3JjID0gR1NUX0FQUF9TUkMoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCAw
KSk7CiAgICAgaWYgKCFwcml2LT5hcHBzcmMpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
cmMsICJGYWlsZWQgdG8gY3JlYXRlIGFwcHNyYyIpOwpAQCAtMjcyLDcgKzMzNSw4IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfc3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMpCiAgICAgaWYgKHBy
aXYtPmhhdmVBcHBTcmMyNykKICAgICAgICAgZ19vYmplY3Rfc2V0KHByaXYtPmFwcHNyYywgIm1p
bi1wZXJjZW50IiwgMjAsIE5VTEwpOwogCi0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNl
KTsKKyAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworICAgIGdzdF9h
cHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKQEAgLTI4MCwxMyArMzQ0LDYgQEAgc3Rh
dGljIHZvaWQgd2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1By
aXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBpZiAocHJpdi0+YnVmZmVyKSB7Ci0jaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVy
LmdldCgpKTsKLSNlbmRpZgotICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKLSAgICB9Ci0K
ICAgICBwcml2LT5wbGF5ZXIgPSAwOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NM
QVNTLCBkaXNwb3NlLCAob2JqZWN0KSk7CkBAIC0yOTcsOCArMzU0LDYgQEAgc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIFdlYktpdFdlYlNyYyog
c3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OwogCi0gICAgZGVsZXRlIHByaXYtPmNsaWVudDsKLQogICAgIGdfZnJl
ZShwcml2LT51cmkpOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5h
bGl6ZSwgKG9iamVjdCkpOwpAQCAtMzExLDcgKzM2Niw5IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFs
dWUqCiAKICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9fTU9ERToK
KyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgICAgIHByaXYtPmlyYWRpb01vZGUg
PSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0so
c3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogI2lmZGVmIEdT
VF9BUElfVkVSU0lPTl8xCkBAIC0zMzEsNiArMzg4LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2Vi
U3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFs
dWUKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzcmMpOwogICAgIHN3aXRjaCAocHJvcElEKSB7CiAgICAgY2FzZSBQUk9QX0lSQURJT19N
T0RFOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pcmFkaW9Nb2Rl
KTsKQEAgLTM1NCwxNyArNDEyLDQyIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcHNwZWMp
OwogICAgICAgICBicmVhazsKICAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0K
IAorc3RhdGljIHZvaWQgcmVtb3ZlVGltZW91dFNvdXJjZXMoV2ViS2l0V2ViU3JjKiBzcmMpCit7
CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIGlmIChw
cml2LT5zdGFydElEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c3RhcnRJRCk7Cisg
ICAgcHJpdi0+c3RhcnRJRCA9IDA7CisKKyAgICBpZiAocHJpdi0+bmVlZERhdGFJRCkKKyAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPm5lZWREYXRhSUQpOworICAgIHByaXYtPm5lZWREYXRh
SUQgPSAwOworCisgICAgaWYgKHByaXYtPmVub3VnaERhdGFJRCkKKyAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKHByaXYtPmVub3VnaERhdGFJRCk7CisgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsK
IAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBz
ZWVraW5nKQorICAgIGlmIChwcml2LT5zZWVrSUQpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShw
cml2LT5zZWVrSUQpOworICAgIHByaXYtPnNlZWtJRCA9IDA7Cit9CisKKy8vIG11c3QgYmUgY2Fs
bGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZAorc3RhdGljIGdib29s
ZWFuIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBnYm9vbGVhbiBzZWVraW5nOwogCi0g
ICAgaWYgKHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgIHByaXYtPnJlc291cmNlLT5yZW1vdmVD
bGllbnQocHJpdi0+Y2xpZW50KTsKLSAgICAgICAgcHJpdi0+cmVzb3VyY2UgPSAwOwotICAgIH0K
KyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKworICAgIHNlZWtpbmcgPSBwcml2LT5zZWVrSUQ7
CisKKyAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgIHByaXYtPnN0b3BJRCA9IDA7
CiAKICAgICBpZiAocHJpdi0+Y2xpZW50KSB7CiAgICAgICAgIGRlbGV0ZSBwcml2LT5jbGllbnQ7
CkBAIC0zNzgsMjEgKzQ2MSw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0
V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7
CiAgICAgfQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPm5lZWRE
YXRhSUQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKLSAgICBw
cml2LT5uZWVkRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCi0gICAg
ICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOwotICAgIHByaXYtPmVub3Vn
aERhdGFJRCA9IDA7Ci0KLSAgICBpZiAocHJpdi0+c2Vla0lEKQotICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+c2Vla0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSAwOwotCiAgICAgcHJpdi0+
cGF1c2VkID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAogICAgIGdfZnJl
ZShwcml2LT5pcmFkaW9OYW1lKTsKICAgICBwcml2LT5pcmFkaW9OYW1lID0gMDsKQEAgLTQwNiwz
OSArNDc1LDUzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBz
cmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAgIHBy
aXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAgICAg
Z3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFzZWVr
aW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7
Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9IEZB
TFNFOwogCiAgICAgaWYgKCFzZWVraW5nKSB7CiAgICAgICAgIHByaXYtPnNpemUgPSAwOwogICAg
ICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOworICAgICAgICBwcml2LT5wbGF5ZXIgPSAw
OworICAgIH0KKworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisKKyAgICBpZiAocHJpdi0+
YXBwc3JjKSB7CisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7
CisgICAgICAgIGlmICghc2Vla2luZykKKyAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXpl
KHByaXYtPmFwcHNyYywgLTEpOwogICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
U3RvcHBlZCByZXF1ZXN0Iik7CisKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyBib29s
IHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQorLy8gbXVzdCBiZSBjYWxsZWQg
b24gbWFpbiB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2VkCitzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwor
CisgICAgcHJpdi0+c3RhcnRJRCA9IDA7CisKICAgICBpZiAoIXByaXYtPnVyaSkgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHdlYktp
dFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEFT
U0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xpZW50KTsKIAogICAgIEtV
UkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwotICAgIHJl
cXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisKKyAgICBp
ZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihwcml2LT5w
bGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgLy8gTGV0J3MgZGlzYWJs
ZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdGhlIHJlY2VpdmVk
IHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzU1MiwyNyBAQCBzdGF0aWMgYm9vbCB3ZWJLaXRX
ZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVkZWQgdG8gdXNlIERMTkEg
c3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgidHJhbnNm
ZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVlc3QsIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgRG9Ob3RCdWZm
ZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jv
c3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVz
dHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9IGxvYWRlci0+cmVx
dWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJj
ZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMp
OwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChwcml2LT5jbGllbnQpOwot
ICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogbG9hZGVyID0gcHJpdi0+cGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwor
ICAgICAgICBpZiAobG9hZGVyKQorICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KHNyYywgbG9hZGVyLCByZXF1ZXN0KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBwcml2LT5jbGllbnQgPSBuZXcgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoc3JjLCByZXF1ZXN0KTsKICAgICB9CiAKLSAgICBpZiAoIXByaXYtPnJlc291cmNlKSB7
Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIHNjaGVkdWxlIHJlc291
cmNlIGxvYWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcHJpdi0+Y2xpZW50
IHx8IHByaXYtPmNsaWVudC0+bG9hZEZhaWxlZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc3JjLCAiRmFpbGVkIHRvIHNldHVwIHN0cmVhbWluZyBjbGllbnQiKTsKKyAgICAgICAgaWYg
KHByaXYtPmNsaWVudCkgeworICAgICAgICAgICAgZGVsZXRlIHByaXYtPmNsaWVudDsKKyAgICAg
ICAgICAgIHByaXYtPmNsaWVudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQotCisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2Vi
S2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2Ug
dHJhbnNpdGlvbikKQEAgLTUxNiwxMiArNjAzLDE3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJl
dHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JF
QURZX1RPX1BBVVNFRDoKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFV
U0VEIik7Ci0gICAgICAgIGlmICghd2ViS2l0V2ViU3JjU3RhcnQoc3JjKSkKLSAgICAgICAgICAg
IHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgR1NUX09CSkVDVF9MT0NL
KHNyYyk7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklP
UklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0YXJ0LCBnc3Rfb2Jq
ZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICAgICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9T
VEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNl
KTsKKyAgICAgICAgLy8gY2FuY2VsIHBlbmRpbmcgc291cmNlcworICAgICAgICBHU1RfT0JKRUNU
X0xPQ0soc3JjKTsKKyAgICAgICAgcmVtb3ZlVGltZW91dFNvdXJjZXMoc3JjKTsKKyAgICAgICAg
cHJpdi0+c3RvcElEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwg
KEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNTdG9wLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rl
c3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAg
LTUzMiw3ICs2MjQsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3Jj
Q2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogCiBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBh
cmVudCwgR3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdlYktpdFdlYlNyYyogd2Via2l0U3JjID0g
V0VCS0lUX1dFQl9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7CisgICAgV2ViS2l0V2ViU3JjKiBz
cmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsKICAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSB7CkBA
IC01NDEsMTUgKzYzMywxOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRo
UGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UQogCiAgICAgICAgIGdz
dF9xdWVyeV9wYXJzZV9kdXJhdGlvbihxdWVyeSwgJmZvcm1hdCwgTlVMTCk7CiAKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVCh3ZWJraXRTcmMsICJkdXJhdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMi
LCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOwotICAgICAgICBpZiAoKGZvcm1hdCA9PSBH
U1RfRk9STUFUX0JZVEVTKSAmJiAod2Via2l0U3JjLT5wcml2LT5zaXplID4gMCkpIHsKLSAgICAg
ICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgd2Via2l0U3JjLT5w
cml2LT5zaXplKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJkdXJhdGlvbiBxdWVy
eSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOworICAgICAgICBH
U1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAgICAgaWYgKChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9C
WVRFUykgJiYgKHNyYy0+cHJpdi0+c2l6ZSA+IDApKSB7CisgICAgICAgICAgICBnc3RfcXVlcnlf
c2V0X2R1cmF0aW9uKHF1ZXJ5LCBmb3JtYXQsIHNyYy0+cHJpdi0+c2l6ZSk7CiAgICAgICAgICAg
ICByZXN1bHQgPSBUUlVFOwogICAgICAgICB9CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9RVUVSWV9VUkk6IHsKLSAg
ICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHdlYmtpdFNyYy0+cHJpdi0+dXJpKTsKKyAg
ICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1
ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAg
ICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3ICs2
ODYsMTMgQEAgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5
cGUpCiAKIHN0YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5w
cml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxl
cik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIHJl
dCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+dXJpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OworICAgIHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRV
cmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiogZXJy
b3IpCkBAIC02MDMsMjAgKzcwNSwyNSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0
VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAg
ICByZXR1cm4gRkFMU0U7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAg
Z19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsKIAotICAgIGlmICghdXJpKQor
ICAgIGlmICghdXJpKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KIAogICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKIAogICAg
IGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewor
ICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBnX3NldF9lcnJvcihlcnJv
ciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLCAiSW52YWxpZCBVUkkgJyVz
JyIsIHVyaSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBwcml2LT51cmkg
PSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNjM0LDcgKzc0MSwxMyBAQCBz
dGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHModm9pZCkKIAogc3RhdGljIGNv
bnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsK
LSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dFQl9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7
CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBn
Y2hhciogcmV0OworCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgcmV0ID0gZ19zdHJk
dXAoc3JjLT5wcml2LT51cmkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgcmV0
dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklI
YW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQpAQCAtNjQ3LDIwICs3NjAsMjUgQEAg
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVy
LCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCisgICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+
dXJpID0gMDsKIAotICAgIGlmICghdXJpKQorICAgIGlmICghdXJpKSB7CisgICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KIAogICAgIEtV
UkwgdXJsKEtVUkwoKSwgdXJpKTsKIAogICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OwogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkludmFsaWQgVVJJICclcyciLCB1cmkp
OwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgcHJpdi0+dXJpID0gZ19zdHJk
dXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAjZW5kaWYKQEAgLTY4MSwxMiArNzk5LDE5IEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAg
cHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCiAgICAgR1NUX09CSkVD
VF9MT0NLKHNyYyk7CisgICAgLy8gYWxyZWFkeSBzdG9wcGVkCisgICAgaWYgKCFwcml2LT5uZWVk
RGF0YUlEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKICAgICBwcml2LT5u
ZWVkRGF0YUlEID0gMDsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworCisgICAgaWYgKHBy
aXYtPmNsaWVudCkKKyAgICAgICAgcHJpdi0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNl
KTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTcxMSwxMyArODM2LDE5IEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQog
ewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2
LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLQogICAgIEdTVF9PQkpFQ1RfTE9D
SyhzcmMpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+ZW5vdWdoRGF0
YUlEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKICAgICBwcml2LT5wYXVzZWQgPSBUUlVFOwogICAgIHByaXYtPmVub3Vn
aERhdGFJRCA9IDA7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAorICAgIGlmIChwcml2
LT5jbGllbnQpCisgICAgICAgIHByaXYtPmNsaWVudC0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsK
ICAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTc0MCw3ICs4NzEsMTkgQEAgc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQog
CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla01haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywgdHJ1ZSk7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwor
ICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+c2Vla0lEKSB7CisgICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisK
KyAgICBwcml2LT5zZWVrSUQgPSAwOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisKKyAg
ICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CiAgICAgd2ViS2l0V2ViU3JjU3RhcnQoc3JjKTsKIAog
ICAgIHJldHVybiBGQUxTRTsKQEAgLTc1Miw5MSArODk1LDgyIEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRl
ciB1c2VyCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAogICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJTlQ2NF9G
T1JNQVQsIG9mZnNldCk7Ci0gICAgaWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+
cmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPm9mZnNldCkKKyAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKKyAgICBpZiAob2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0ZWRPZmZz
ZXQgPT0gcHJpdi0+b2Zmc2V0KSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAg
ICAgICAgIHJldHVybiBUUlVFOworICAgIH0KIAotICAgIGlmICghcHJpdi0+c2Vla2FibGUpCisg
ICAgaWYgKCFwcml2LT5zZWVrYWJsZSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChvZmZzZXQgPiBwcml2LT5z
aXplKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJl
cXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKIAotICAg
IEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5zZWVrSUQpCiAgICAgICAgIGdf
c291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwogICAgIHByaXYtPnNlZWtJRCA9IGdfdGltZW91
dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0V2Vi
U3JjU2Vla01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rf
b2JqZWN0X3VucmVmKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIAorCiAgICAg
cmV0dXJuIFRSVUU7CiB9CiAKIHZvaWQgd2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0
V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIpCiB7CiAgICAgQVNTRVJU
KHBsYXllcik7CisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgc3JjLT5wcml2LT5wbGF5
ZXIgPSBwbGF5ZXI7CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAotU3RyZWFtaW5n
Q2xpZW50OjpTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMpIDogbV9zcmMoc3JjKQor
Ly8gU3RyZWFtaW5nQ2xpZW50SGFuZGxlcgorU3RyZWFtaW5nQ2xpZW50SGFuZGxlcjo6U3RyZWFt
aW5nQ2xpZW50SGFuZGxlcihXZWJLaXRXZWJTcmMqIHNyYykKKyAgICA6IG1fc3JjKHN0YXRpY19j
YXN0PFdlYktpdFdlYlNyYyo+KGdzdF9vYmplY3RfcmVmKHNyYykpKQogewotCiB9CiAKLVN0cmVh
bWluZ0NsaWVudDo6flN0cmVhbWluZ0NsaWVudCgpCitTdHJlYW1pbmdDbGllbnRIYW5kbGVyOjp+
U3RyZWFtaW5nQ2xpZW50SGFuZGxlcigpCiB7Ci0KKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fc3Jj
KTsKKyAgICBtX3NyYyA9IDA7CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJl
Y2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit2b2lkIFN0cmVhbWluZ0NsaWVudEhhbmRsZXI6OnJlc3BvbnNlUmVjZWl2ZWQo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJp
dmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywg
IlJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwogCisg
ICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKKwogICAgIC8vIElmIHdlIHNlZWtlZCB3ZSBuZWVk
IDIwNiA9PSBQQVJUSUFMX0NPTlRFTlQKICAgICBpZiAocHJpdi0+cmVxdWVzdGVkT2Zmc2V0ICYm
IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjA2KSB7CisgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKG1fc3JjKTsKICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNF
LCBSRUFELCAoMCksICgwKSk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJp
di0+YXBwc3JjKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChtX3NyYywgZmFsc2UpOworICAg
ICAgICB3ZWJLaXRXZWJTcmNTdG9wKG1fc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGxvbmcgbG9uZyBsZW5ndGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
LSAgICBpZiAobGVuZ3RoID4gMCkgeworICAgIGlmIChsZW5ndGggPiAwKQogICAgICAgICBsZW5n
dGggKz0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6
ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7Ci0KLSNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAg
ICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKLSAgICAgICAgICAgIGdzdF9zZWdtZW50
X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNlZ21lbnQsIEdTVF9G
T1JNQVRfQllURVMsIGxlbmd0aCk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3Nh
Z2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBz
cmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKLSAgICAgICAgfQotI2VuZGlm
Ci0gICAgfQogCiAgICAgcHJpdi0+c2l6ZSA9IGxlbmd0aCA+PSAwID8gbGVuZ3RoIDogMDsKICAg
ICBwcml2LT5zZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJub25l
IiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQtUmFuZ2VzIikudXRmOCgpLmRhdGEo
KSk7CiAKLSAgICAvLyBpY2VjYXN0IHN0dWZmCi0gICAgU3RyaW5nIHZhbHVlID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOwotICAgICAgICBnaW50NjQgaWN5TWV0YUlu
dCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5
TWV0YUludCA+IDApIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1p
bnRlcnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7Ci0KLSAgICAg
ICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIEdzdFRhZ0xp
c3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCk7CiAjZWxzZQogICAgIEdzdFRhZ0xp
c3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3KCk7CiAjZW5kaWYKLSAgICB2YWx1ZSA9IHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKKyAgICBTdHJpbmcgdmFsdWUgPSByZXNw
b25zZS5odHRwSGVhZGVyRmllbGQoImljeS1uYW1lIik7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgICAgICBwcml2LT5p
cmFkaW9OYW1lID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7CkBAIC04NjUsNiArOTk5
LDM4IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSCiAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQo
dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJVExFLCBwcml2LT5pcmFkaW9U
aXRsZSwgTlVMTCk7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOworCisg
ICAgLy8gbm90aWZ5IHNpemUvZHVyYXRpb24KKyAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAg
ICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7CisKKyNpZm5kZWYg
R1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKKyAg
ICAgICAgICAgIGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFw
cHNyYyktPnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7CisgICAgICAgICAgICBn
c3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKKyAgICAg
ICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBz
cmMpLAorICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXpl
KHByaXYtPmFwcHNyYywgLTEpOworCisgICAgLy8gaWNlY2FzdCBzdHVmZgorICAgIHZhbHVlID0g
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOworICAgIGlmICghdmFsdWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOworICAgICAgICBnaW50NjQg
aWN5TWV0YUludCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRy
LCAxMCk7CisKKyAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5TWV0
YUludCA+IDApIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRl
cnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7CisKKyAgICAgICAg
ICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBw
c3JjLCAwKTsKKworICAgIC8vIG5vdGlmeSB0YWdzCiAgICAgaWYgKGdzdF90YWdfbGlzdF9pc19l
bXB0eSh0YWdzKSkKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdGFnX2xp
c3RfdW5yZWYodGFncyk7CkBAIC04NzIsMTMgKzEwMzgsMTUgQEAgdm9pZCBTdHJlYW1pbmdDbGll
bnQ6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNv
dXJjZVIKICAgICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUodGFncyk7CiAjZW5kaWYKICAgICBlbHNl
Ci0gICAgICAgIG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChtX3NyYyksIG1fc3JjLT5w
cml2LT5zcmNwYWQsIHRhZ3MpOworICAgICAgICBub3RpZnlHc3RUYWdzT25QYWQoR1NUX0VMRU1F
TlQobV9zcmMpLCBwcml2LT5zcmNwYWQsIHRhZ3MpOwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVu
dDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCkKK3ZvaWQgU3RyZWFtaW5nQ2xpZW50SGFuZGxlcjo6ZGF0YVJlY2VpdmVk
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0
ZSogcHJpdiA9IG1fc3JjLT5wcml2OwogCisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKKwog
ICAgIEdTVF9MT0dfT0JKRUNUKG1fc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+
YnVmZmVyID8gZ2V0R3N0QnVmZmVyU2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsK
IAogICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyIHx8IGRhdGEgPT0gZ2V0R3N0QnVmZmVyRGF0YVBv
aW50ZXIocHJpdi0+YnVmZmVyLmdldCgpKSk7CkBAIC04ODgsNyArMTA1Niw4IEBAIHZvaWQgU3Ry
ZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25z
dCBjaGFyKiBkYXRhLCBpCiAgICAgICAgIHVubWFwR3N0QnVmZmVyKHByaXYtPmJ1ZmZlci5nZXQo
KSk7CiAjZW5kaWYKIAotICAgIGlmIChwcml2LT5zZWVrSUQgfHwgcmVzb3VyY2UgIT0gcHJpdi0+
cmVzb3VyY2UpIHsKKyAgICBpZiAocHJpdi0+c2Vla0lEKSB7CisgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKG1fc3JjKTsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlNlZWsgaW4g
cHJvZ3Jlc3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTkxMyw2ICsxMDgyLDggQEAgdm9pZCBTdHJlYW1pbmdDbGll
bnQ6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRh
dGEsIGkKICAgICB9CiAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKHByaXYtPmJ1ZmZlci5nZXQo
KSkgPSBwcml2LT5vZmZzZXQ7CiAKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7CisKICAg
ICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKHByaXYtPmFwcHNy
YywgcHJpdi0+YnVmZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAg
ICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19FT1MpCkBAIC05MjIs
NyArMTA5Myw3IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAgICAgICAgIEdTVF9FTEVNRU5U
X0VSUk9SKG1fc3JjLCBDT1JFLCBGQUlMRUQsICgwKSwgKDApKTsKIH0KIAotY2hhciogU3RyZWFt
aW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3Qg
cmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQorY2hhciogU3RyZWFtaW5nQ2xpZW50
SGFuZGxlcjo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXpl
X3QmIGFjdHVhbFNpemUpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3Jj
LT5wcml2OwogCkBAIC05MzQsMTYgKzExMDUsODEgQEAgY2hhciogU3RyZWFtaW5nQ2xpZW50Ojpn
ZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2kK
ICAgICBtYXBHc3RCdWZmZXIoYnVmZmVyKTsKICNlbmRpZgogCisgICAgR1NUX09CSkVDVF9MT0NL
KG1fc3JjKTsKICAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVyKTsKKyAgICBHU1Rf
T0JKRUNUX1VOTE9DSyhtX3NyYyk7CiAKICAgICBhY3R1YWxTaXplID0gZ2V0R3N0QnVmZmVyU2l6
ZShidWZmZXIpOwogICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihidWZmZXIpOwog
fQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlKQordm9pZCBTdHJlYW1pbmdDbGllbnRIYW5kbGVyOjpub3RpZnlGaW5pc2hlZCgp
CiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OwogCisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3NyYywgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JKRUNUX0xP
Q0sobV9zcmMpOworICAgIGlmICghcHJpdi0+c2Vla0lEKSB7CisgICAgICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKG1fc3JjKTsKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShwcml2LT5h
cHBzcmMpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Cit9
CisKKy8vIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50CitDYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBz
cmMsIENhY2hlZFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogbV9zcmMoc3RhdGljX2Nhc3Q8V2ViS2l0V2ViU3JjKj4o
Z3N0X29iamVjdF9yZWYoc3JjKSkpCisgICAgLCBtX2hhbmRsZXIobmV3IFN0cmVhbWluZ0NsaWVu
dEhhbmRsZXIoc3JjKSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0
KHJlcXVlc3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZm
Q29udGVudCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERv
Tm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBV
c2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOworICAgIG1fcmVzb3VyY2UgPSBy
ZXNvdXJjZUxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7CisgICAgaWYg
KG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKK30KKwor
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudCgpCit7CisgICAgZ3N0X29iamVjdF91bnJlZihtX3NyYyk7CisgICAgbV9zcmMgPSAwOwor
CisgICAgZGVsZXRlIG1faGFuZGxlcjsKKyAgICBtX2hhbmRsZXIgPSAwOworCisgICAgaWYgKG1f
cmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAg
ICAgICBtX3Jlc291cmNlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQ6OmxvYWRGYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAoIW1fcmVzb3Vy
Y2UpOworfQorCit2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNM
b2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jl
c291cmNlLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cit9CisKK2NoYXIqIENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2Uq
LCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQoreworICAgIHJldHVy
biBtX2hhbmRsZXItPmdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihyZXF1ZXN0ZWRTaXplLCBhY3R1YWxT
aXplKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VS
ZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIG1faGFuZGxlci0+cmVzcG9uc2VSZWNlaXZlZChyZXNwb25zZSk7
Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7
CisgICAgbV9oYW5kbGVyLT5kYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3Vy
Y2UqIHJlc291cmNlKQorewogICAgIGlmIChyZXNvdXJjZS0+bG9hZEZhaWxlZE9yQ2FuY2VsZWQo
KSkgewogICAgICAgICBpZiAoIXJlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7CiAgICAgICAgICAg
ICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciA9IHJlc291cmNlLT5yZXNvdXJjZUVycm9yKCk7
CkBAIC05NTQsMTAgKzExOTAsOTkgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6Om5vdGlmeUZpbmlz
aGVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJIYXZlIEVPUyIpOworICAgIG1faGFuZGxlci0+
bm90aWZ5RmluaXNoZWQoKTsKK30KIAotICAgIGlmICghcHJpdi0+c2Vla0lEKQotICAgICAgICBn
c3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworCisvLyBSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudAorUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6
OlJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgOiBtX3NyYyhzdGF0aWNfY2FzdDxXZWJLaXRX
ZWJTcmMqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkKKyAgICAsIG1faGFuZGxlcihuZXcgU3RyZWFt
aW5nQ2xpZW50SGFuZGxlcihzcmMpKQoreworICAgIG1fcmVzb3VyY2UgPSBSZXNvdXJjZUhhbmRs
ZTo6Y3JlYXRlKDAgLypjb250ZXh0Ki8sIHJlcXVlc3QsIHRoaXMsIGZhbHNlLCBmYWxzZSk7Cit9
CisKK1Jlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQoKQoreworICAgIGdzdF9vYmplY3RfdW5yZWYobV9zcmMpOworICAgIG1fc3JjID0g
MDsKKworICAgIGRlbGV0ZSBtX2hhbmRsZXI7CisgICAgbV9oYW5kbGVyID0gMDsKKworICAgIGlm
IChtX3Jlc291cmNlKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPmNhbmNlbCgpOworICAgICAgICBt
X3Jlc291cmNlLnJlbGVhc2UoKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgfQorfQor
Citib29sIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKCFtX3Jlc291cmNlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0
cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBpZiAo
bV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMp
OworfQorCitjaGFyKiBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVS
ZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7Cisg
ICAgcmV0dXJuIG1faGFuZGxlci0+Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKHJlcXVlc3RlZFNpemUs
IGFjdHVhbFNpemUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3
aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJikKK3sKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0Ns
aWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgbV9oYW5kbGVyLT5yZXNwb25zZVJlY2VpdmVkKHJl
c3BvbnNlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBp
bnQpCit7CisgICAgbV9oYW5kbGVyLT5kYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNv
dXJjZUhhbmRsZSosIGRvdWJsZSkKK3sKKyAgICBtX2hhbmRsZXItPm5vdGlmeUZpbmlzaGVkKCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBHU1RfRVJST1Jf
T0JKRUNUKG1fc3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0
aW9uKCkudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09V
UkNFLCBGQUlMRUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5k
YXRhKCkpLCAoMCkpOworICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0obV9zcmMtPnByaXYt
PmFwcHNyYyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Js
b2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHVyaTsKKworICAg
IEdTVF9FUlJPUl9PQkpFQ1QobV9zcmMsICJSZXF1ZXN0IHdhcyBibG9ja2VkIik7CisKKyAgICBH
U1RfT0JKRUNUX0xPQ0sobV9zcmMpOworICAgIHVyaS5zZXQoZ19zdHJkdXAobV9zcmMtPnByaXYt
PnVyaSkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKworICAgIEdTVF9FTEVNRU5U
X0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkFjY2VzcyB0byBcIiVzXCIgd2Fz
IGJsb2NrZWQiLCB1cmkuZ2V0KCkpLCAoMCkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3Ry
ZWFtaW5nQ2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICBHT3du
UHRyPGdjaGFyPiB1cmk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3JjLCAiQ2Fubm90IHNo
b3cgVVJMIik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOworICAgIHVyaS5zZXQoZ19z
dHJkdXAobV9zcmMtPnByaXYtPnVyaSkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsK
KworICAgIEdTVF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkNh
bid0IHNob3cgXCIlc1wiIiwgdXJpLmdldCgpKSwgKDApKTsKIH0KIAogI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCi0tIAoxLjguMS4yCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208831</attachid>
            <date>2013-08-15 11:48:28 -0700</date>
            <delta_ts>2013-08-19 14:06:30 -0700</delta_ts>
            <desc>Updated patch against upstream master</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>35699</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSAyMTE1ZTdiZjQxZjUyMjhjNzcyYjRhZWQwYmI1MjJlZGIxZTU5NDRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMTMg
MTQ6NDU6MTMgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpQYXRjaCBieSBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyA8YW5kcmUu
bWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4gb24gMjAxMy0wOC0xNApSZXZpZXdlZCBieSBQaGls
aXBwZSBOb3JtYW5kLgoKR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IG1heSBiZSBjcmVhdGVkIGJ5
IGFueSBnc3RyZWFtZXIgZWxlbWVudCBvbiBhbnkgdGhyZWFkIGJ5IGNhbGxpbmcKZ3N0X2VsZW1l
bnRfbWFrZV9mcm9tX3VyaSB3aXRoIHRoZSBVUklzIGhhbmRsZWQgYnkgdGhlIHNvdXJjZSBlbGVt
ZW50LgpUaGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhlIGdzdHJlYW1lciBzb3VyY2UgZWxlbWVudCBp
cyB0aHJlYWQtc2FmZSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBpdApiZWluZyBjcmVhdGVkIG91dHNp
ZGUgdGhlIG1haW4gdGhyZWFkLgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKF9XZWJLaXRXZWJTcmNQcml2YXRlKToKKHdlYmtpdF93
ZWJfc3JjX2luaXQpOgood2ViS2l0V2ViU3JjRmluYWxpemUpOgood2ViS2l0V2ViU3JjU2V0UHJv
cGVydHkpOgood2ViS2l0V2ViU3JjR2V0UHJvcGVydHkpOgood2ViS2l0V2ViU3JjU3RvcCk6Cih3
ZWJLaXRXZWJTcmNTdGFydCk6Cih3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZSk6Cih3ZWJLaXRXZWJT
cmNRdWVyeVdpdGhQYXJlbnQpOgood2ViS2l0V2ViU3JjR2V0VXJpKToKKHdlYktpdFdlYlNyY1Nl
dFVyaSk6Cih3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hE
YXRhTWFpbkNiKToKKHdlYktpdFdlYlNyY1NlZWtNYWluQ2IpOgood2ViS2l0V2ViU3JjU2Vla0Rh
dGFDYik6Cih3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcik6CihTdHJlYW1pbmdDbGllbnQ6OlN0
cmVhbWluZ0NsaWVudCk6CihTdHJlYW1pbmdDbGllbnQ6On5TdHJlYW1pbmdDbGllbnQpOgooU3Ry
ZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgooU3RyZWFtaW5nQ2xpZW50OjpkaWRS
ZWNlaXZlRGF0YSk6CihTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcpOgooU3RyZWFt
aW5nQ2xpZW50Ojp3YXNCbG9ja2VkKToKKFN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VSTCk6
Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMzggKysKIC4uLi9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCAgICAg
ICAgIHwgNTczICsrKysrKysrKysrKysrKystLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA0ODQgaW5z
ZXJ0aW9ucygrKSwgMTI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYjBmZjRhLi5lMmE5
YWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTMtMDgtMTQgIEFuZHJlIE1vcmVp
cmEgTWFnYWxoYWVzICA8YW5kcmUubWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4KKworICAgICAg
ICBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzNTIKKworICAg
ICAgICBQYXRjaCBieSBBbmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyA8YW5kcmUubWFnYWxoYWVzQGNv
bGxhYm9yYS5jby51az4gb24gMjAxMy0wOC0xNAorICAgICAgICBSZXZpZXdlZCBieSBQaGlsaXBw
ZSBOb3JtYW5kLgorCisgICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3Jl
YXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisg
ICAgICAgIGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5
IHRoZSBzb3VyY2UgZWxlbWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBn
c3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdp
dGggaXQKKyAgICAgICAgYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAoX1dlYktpdFdlYlNyY1ByaXZhdGUpOgorICAgICAgICAod2Vi
a2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6CisgICAg
ICAgICh3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRQ
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAgICAgICAgKHdlYktpdFdl
YlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRV
cmkpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0VXJpKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y05lZWREYXRhTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2Ip
OgorICAgICAgICAod2ViS2l0V2ViU3JjU2Vla01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJT
cmNTZWVrRGF0YUNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKyAg
ICAgICAgKFN0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVh
bWluZ0NsaWVudDo6flN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQpOgorICAgICAgICAoU3RyZWFtaW5n
Q2xpZW50OjpjYW5ub3RTaG93VVJMKToKKwogMjAxMy0wOC0xMiAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEFkZCBTdXBwb3J0
IGZvciBjYW52YXMgYmxlbmQgbW9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKaW5kZXggMGNjNTc1ZS4uNDM5YTIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJH
U3RyZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBz
cmMuaD4KQEAgLTQxLDIyICs0Myw4NiBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKy8qIFByZW1pc3NlczoKKyAqIC0g
d2Via2l0c3JjIG1heSBiZSBjcmVhdGVkIGZyb20gYW55IHRocmVhZCBpbnNpZGUgZ3N0cmVhbWVy
CisgKiAtIHdlYmtpdHNyYyBtYXkgYmUgY3JlYXRlZCB3aXRob3V0IGEgcGxheWVyIGludm9sdmVk
IChlLmcuOiBkYXNoIGdzdHJlYW1lciBlbGVtZW50CisgKiAgIGludGVybmFsbHkgZG93bmxvYWRp
bmcgc3RyZWFtIGZyYWdtZW50cykKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBob2xkcyByZWZlcmVu
Y2UgdG8gc3JjLCBzbyB0aGF0IHNyYyBpcyBuZXZlciBkZWxldGVkIHdoaWxlIGNsaWVudCBleGlz
dHMKKyAqIC0gaWYgdGhlIHNyYyBleGlzdHMsIGFwcHNyYyBhbHNvIGV4aXN0cworICogLSBzdHJl
YW1pbmcgY2xpZW50IGlzIGNyZWF0ZWQgb24gc3RhcnQKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBp
cyBkZWxldGVkIG9uIHN0b3AgYW5kIGNhbmNlbHMgcmVzb3VyY2UKKyAqIC0gc3RyZWFtaW5nIGNs
aWVudCBjYWxsYmFja3MgYXJlIGFsd2F5cyBpbnZva2VkIGZyb20gbWFpbiB0aHJlYWQKKyAqLwor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotY2xhc3MgU3RyZWFtaW5nQ2xpZW50IDogcHVi
bGljIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
dHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFN0cmVhbWlu
Z0NsaWVudEhhbmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyZWFtaW5nQ2xpZW50SGFu
ZGxlcihXZWJLaXRXZWJTcmMqKTsKKyAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50SGFu
ZGxlcigpOworCisgICAgICAgIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVx
dWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCByZXNwb25zZVJl
Y2VpdmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkYXRhUmVjZWl2
ZWQoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFdlYktpdFdlYlNyYyogbV9zcmM7Cit9OworCisvLyBjb21t
b24gU3RyZWFtaW5nQ2xpZW50IGludGVyZmFjZQorY2xhc3MgU3RyZWFtaW5nQ2xpZW50IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqKTsKLSAgICAg
ICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50KCk7CisgICAgICAgIHZpcnR1YWwgflN0cmVhbWlu
Z0NsaWVudCgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKSA9IDA7Cit9
OworCitjbGFzcyBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBDYWNoZWRS
YXdSZXNvdXJjZUNsaWVudCwgcHVibGljIFN0cmVhbWluZ0NsaWVudCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5n
Q2xpZW50KFdlYktpdFdlYlNyYyosIENhY2hlZFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xp
ZW50KCk7CisKKyAgICAgICAgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQg
c2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIENhY2hl
ZFJlc291cmNlQ2xpZW50Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNwb25zZVJlY2VpdmVkKENh
Y2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciosIGludCk7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOwotICAg
ICAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSos
IHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAgICBjaGFy
KiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVk
U2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lk
IGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAg
ICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CiAKICAgICAgICAgV2ViS2l0
V2ViU3JjKiBtX3NyYzsKKyAgICAgICAgU3RyZWFtaW5nQ2xpZW50SGFuZGxlciogbV9oYW5kbGVy
OworICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNv
dXJjZTsKK307CisKK2NsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGlj
IFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtaW5nQ2xpZW50IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VIYW5kbGVTdHJl
YW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
ICAgIHZpcnR1YWwgflJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAg
Ym9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhi
b29sKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50Cisg
ICAgICAgIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwg
c2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3Vy
Y2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovKTsKKyAgICAgICAgdm9p
ZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAg
ICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5ub3RT
aG93VVJMKFJlc291cmNlSGFuZGxlKik7CisKKyAgICAgICAgV2ViS2l0V2ViU3JjKiBtX3NyYzsK
KyAgICAgICAgU3RyZWFtaW5nQ2xpZW50SGFuZGxlciogbV9oYW5kbGVyOworICAgICAgICBSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2U7CiB9OwogCiAjZGVmaW5lIFdFQktJVF9XRUJf
U1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX1RZUEVfV0VCX1NSQywgV2ViS2l0V2ViU3JjUHJpdmF0ZSkpCkBAIC02OCw3ICsxMzQs
NiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAgIFdlYkNvcmU6Ok1lZGlhUGxh
eWVyKiBwbGF5ZXI7CiAKICAgICBTdHJlYW1pbmdDbGllbnQqIGNsaWVudDsKLSAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVzb3VyY2U7CiAKICAgICBndWludDY0
IG9mZnNldDsKICAgICBndWludDY0IHNpemU7CkBAIC03Nyw2ICsxNDIsOCBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlNyY1ByaXZhdGUgewogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRPZmZzZXQ7CiAKKyAg
ICBndWludCBzdGFydElEOworICAgIGd1aW50IHN0b3BJRDsKICAgICBndWludCBuZWVkRGF0YUlE
OwogICAgIGd1aW50IGVub3VnaERhdGFJRDsKICAgICBndWludCBzZWVrSUQ7CkBAIC0xMjksOCAr
MTk2LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBn
dWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNy
Y0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWludDY0IG9mZnNldCwg
Z3BvaW50ZXIgdXNlckRhdGEpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNTdG9wKFdlYktp
dFdlYlNyYyosIGJvb2wpOwotCiBzdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tzIGFwcHNyY0NhbGxi
YWNrcyA9IHsKICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiLAogICAgIHdlYktpdFdlYlNyY0Vu
b3VnaERhdGFDYiwKQEAgLTE4NCw3ICsyNDksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Ny
Y19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbnJlIG9mIHRoZSBzdHJl
YW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURBQkxFIHwgR19QQVJBTV9TVEFUSUNf
U1RSSU5HUykpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFz
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSVJBRElPX1VSTCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
ImlyYWRpby11cmwiLApAQCAtMjIyLDggKzI4Nyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
c3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBzcmMtPnByaXYgPSBwcml2OwogCi0g
ICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMpOwotCiAgICAgcHJpdi0+
YXBwc3JjID0gR1NUX0FQUF9TUkMoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzcmMiLCAw
KSk7CiAgICAgaWYgKCFwcml2LT5hcHBzcmMpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChz
cmMsICJGYWlsZWQgdG8gY3JlYXRlIGFwcHNyYyIpOwpAQCAtMjcyLDcgKzMzNSw4IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfc3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMpCiAgICAgaWYgKHBy
aXYtPmhhdmVBcHBTcmMyNykKICAgICAgICAgZ19vYmplY3Rfc2V0KHByaXYtPmFwcHNyYywgIm1p
bi1wZXJjZW50IiwgMjAsIE5VTEwpOwogCi0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNl
KTsKKyAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworICAgIGdzdF9h
cHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKQEAgLTI4MCwxMyArMzQ0LDYgQEAgc3Rh
dGljIHZvaWQgd2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0
V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1By
aXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBpZiAocHJpdi0+YnVmZmVyKSB7Ci0jaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVy
LmdldCgpKTsKLSNlbmRpZgotICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKLSAgICB9Ci0K
ICAgICBwcml2LT5wbGF5ZXIgPSAwOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NM
QVNTLCBkaXNwb3NlLCAob2JqZWN0KSk7CkBAIC0yOTcsOCArMzU0LDYgQEAgc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIFdlYktpdFdlYlNyYyog
c3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OwogCi0gICAgZGVsZXRlIHByaXYtPmNsaWVudDsKLQogICAgIGdfZnJl
ZShwcml2LT51cmkpOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5h
bGl6ZSwgKG9iamVjdCkpOwpAQCAtMzExLDcgKzM2Niw5IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdl
YlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFs
dWUqCiAKICAgICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9fTU9ERToK
KyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgICAgIHByaXYtPmlyYWRpb01vZGUg
PSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0so
c3JjKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogI2lmZGVmIEdT
VF9BUElfVkVSU0lPTl8xCkBAIC0zMzEsNiArMzg4LDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2Vi
U3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFs
dWUKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAg
V2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdTVF9PQkpFQ1Rf
TE9DSyhzcmMpOwogICAgIHN3aXRjaCAocHJvcElEKSB7CiAgICAgY2FzZSBQUk9QX0lSQURJT19N
T0RFOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pcmFkaW9Nb2Rl
KTsKQEAgLTM1NCwxNyArNDEyLDQyIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcHNwZWMp
OwogICAgICAgICBicmVhazsKICAgICB9CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0K
IAorc3RhdGljIHZvaWQgcmVtb3ZlVGltZW91dFNvdXJjZXMoV2ViS2l0V2ViU3JjKiBzcmMpCit7
CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIGlmIChw
cml2LT5zdGFydElEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c3RhcnRJRCk7Cisg
ICAgcHJpdi0+c3RhcnRJRCA9IDA7CisKKyAgICBpZiAocHJpdi0+bmVlZERhdGFJRCkKKyAgICAg
ICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPm5lZWREYXRhSUQpOworICAgIHByaXYtPm5lZWREYXRh
SUQgPSAwOworCisgICAgaWYgKHByaXYtPmVub3VnaERhdGFJRCkKKyAgICAgICAgZ19zb3VyY2Vf
cmVtb3ZlKHByaXYtPmVub3VnaERhdGFJRCk7CisgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsK
IAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBz
ZWVraW5nKQorICAgIGlmIChwcml2LT5zZWVrSUQpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShw
cml2LT5zZWVrSUQpOworICAgIHByaXYtPnNlZWtJRCA9IDA7Cit9CisKKy8vIG11c3QgYmUgY2Fs
bGVkIG9uIG1haW4gdGhyZWFkIGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZAorc3RhdGljIGdib29s
ZWFuIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKyAgICBnYm9vbGVhbiBzZWVraW5nOwogCi0g
ICAgaWYgKHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgIHByaXYtPnJlc291cmNlLT5yZW1vdmVD
bGllbnQocHJpdi0+Y2xpZW50KTsKLSAgICAgICAgcHJpdi0+cmVzb3VyY2UgPSAwOwotICAgIH0K
KyAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKKworICAgIHNlZWtpbmcgPSBwcml2LT5zZWVrSUQ7
CisKKyAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgIHByaXYtPnN0b3BJRCA9IDA7
CiAKICAgICBpZiAocHJpdi0+Y2xpZW50KSB7CiAgICAgICAgIGRlbGV0ZSBwcml2LT5jbGllbnQ7
CkBAIC0zNzgsMjEgKzQ2MSw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0
V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7
CiAgICAgfQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPm5lZWRE
YXRhSUQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKLSAgICBw
cml2LT5uZWVkRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCi0gICAg
ICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOwotICAgIHByaXYtPmVub3Vn
aERhdGFJRCA9IDA7Ci0KLSAgICBpZiAocHJpdi0+c2Vla0lEKQotICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+c2Vla0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSAwOwotCiAgICAgcHJpdi0+
cGF1c2VkID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAogICAgIGdfZnJl
ZShwcml2LT5pcmFkaW9OYW1lKTsKICAgICBwcml2LT5pcmFkaW9OYW1lID0gMDsKQEAgLTQwNiwz
OSArNDc1LDUzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBz
cmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAgIHBy
aXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAgICAg
Z3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFzZWVr
aW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7
Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9IEZB
TFNFOwogCiAgICAgaWYgKCFzZWVraW5nKSB7CiAgICAgICAgIHByaXYtPnNpemUgPSAwOwogICAg
ICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOworICAgICAgICBwcml2LT5wbGF5ZXIgPSAw
OworICAgIH0KKworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisKKyAgICBpZiAocHJpdi0+
YXBwc3JjKSB7CisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7
CisgICAgICAgIGlmICghc2Vla2luZykKKyAgICAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXpl
KHByaXYtPmFwcHNyYywgLTEpOwogICAgIH0KIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
U3RvcHBlZCByZXF1ZXN0Iik7CisKKyAgICByZXR1cm4gRkFMU0U7CiB9CiAKLXN0YXRpYyBib29s
IHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQorLy8gbXVzdCBiZSBjYWxsZWQg
b24gbWFpbiB0aHJlYWQgYW5kIHdpdGggb2JqZWN0IHVubG9ja2VkCitzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwor
CisgICAgcHJpdi0+c3RhcnRJRCA9IDA7CisKICAgICBpZiAoIXByaXYtPnVyaSkgewogICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHdlYktp
dFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEFT
U0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xpZW50KTsKIAogICAgIEtV
UkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwotICAgIHJl
cXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisKKyAgICBp
ZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihwcml2LT5w
bGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgLy8gTGV0J3MgZGlzYWJs
ZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdGhlIHJlY2VpdmVk
IHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzU1MiwyNyBAQCBzdGF0aWMgYm9vbCB3ZWJLaXRX
ZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVkZWQgdG8gdXNlIERMTkEg
c3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgidHJhbnNm
ZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVlc3QsIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgRG9Ob3RCdWZm
ZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jv
c3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVz
dHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9IGxvYWRlci0+cmVx
dWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJj
ZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMp
OwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChwcml2LT5jbGllbnQpOwot
ICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogbG9hZGVyID0gcHJpdi0+cGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwor
ICAgICAgICBpZiAobG9hZGVyKQorICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KHNyYywgbG9hZGVyLCByZXF1ZXN0KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBwcml2LT5jbGllbnQgPSBuZXcgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoc3JjLCByZXF1ZXN0KTsKICAgICB9CiAKLSAgICBpZiAoIXByaXYtPnJlc291cmNlKSB7
Ci0gICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIHNjaGVkdWxlIHJlc291
cmNlIGxvYWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcHJpdi0+Y2xpZW50
IHx8IHByaXYtPmNsaWVudC0+bG9hZEZhaWxlZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1Qoc3JjLCAiRmFpbGVkIHRvIHNldHVwIHN0cmVhbWluZyBjbGllbnQiKTsKKyAgICAgICAgaWYg
KHByaXYtPmNsaWVudCkgeworICAgICAgICAgICAgZGVsZXRlIHByaXYtPmNsaWVudDsKKyAgICAg
ICAgICAgIHByaXYtPmNsaWVudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKKyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQotCisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2Vi
S2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2Ug
dHJhbnNpdGlvbikKQEAgLTUxNiwxMiArNjAzLDE3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJl
dHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JF
QURZX1RPX1BBVVNFRDoKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFV
U0VEIik7Ci0gICAgICAgIGlmICghd2ViS2l0V2ViU3JjU3RhcnQoc3JjKSkKLSAgICAgICAgICAg
IHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgR1NUX09CSkVDVF9MT0NL
KHNyYyk7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklP
UklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0YXJ0LCBnc3Rfb2Jq
ZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICAgICAg
ICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9T
VEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNl
KTsKKyAgICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAgIC8vIGNhbmNlbCBwZW5k
aW5nIHNvdXJjZXMKKyAgICAgICAgcmVtb3ZlVGltZW91dFNvdXJjZXMoc3JjKTsKKyAgICAgICAg
cHJpdi0+c3RvcElEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwg
KEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNTdG9wLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rl
c3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAg
LTUzMiw3ICs2MjQsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3Jj
Q2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAogCiBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBh
cmVudCwgR3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdlYktpdFdlYlNyYyogd2Via2l0U3JjID0g
V0VCS0lUX1dFQl9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7CisgICAgV2ViS2l0V2ViU3JjKiBz
cmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsKICAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSB7CkBA
IC01NDEsMTUgKzYzMywxOSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRo
UGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UQogCiAgICAgICAgIGdz
dF9xdWVyeV9wYXJzZV9kdXJhdGlvbihxdWVyeSwgJmZvcm1hdCwgTlVMTCk7CiAKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVCh3ZWJraXRTcmMsICJkdXJhdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMi
LCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOwotICAgICAgICBpZiAoKGZvcm1hdCA9PSBH
U1RfRk9STUFUX0JZVEVTKSAmJiAod2Via2l0U3JjLT5wcml2LT5zaXplID4gMCkpIHsKLSAgICAg
ICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1hdCwgd2Via2l0U3JjLT5w
cml2LT5zaXplKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJkdXJhdGlvbiBxdWVy
eSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOworICAgICAgICBH
U1RfT0JKRUNUX0xPQ0soc3JjKTsKKyAgICAgICAgaWYgKChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9C
WVRFUykgJiYgKHNyYy0+cHJpdi0+c2l6ZSA+IDApKSB7CisgICAgICAgICAgICBnc3RfcXVlcnlf
c2V0X2R1cmF0aW9uKHF1ZXJ5LCBmb3JtYXQsIHNyYy0+cHJpdi0+c2l6ZSk7CiAgICAgICAgICAg
ICByZXN1bHQgPSBUUlVFOwogICAgICAgICB9CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9RVUVSWV9VUkk6IHsKLSAg
ICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHdlYmtpdFNyYy0+cHJpdi0+dXJpKTsKKyAg
ICAgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1
ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAg
ICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3ICs2
ODYsMTMgQEAgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5
cGUpCiAKIHN0YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5w
cml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxl
cik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIHJl
dCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+dXJpKTsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OworICAgIHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRV
cmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiogZXJy
b3IpCkBAIC02MDMsMjAgKzcwNSwyNSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0
VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAg
ICByZXR1cm4gRkFMU0U7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAg
Z19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsKIAotICAgIGlmICghdXJpKQor
ICAgIGlmICghdXJpKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KIAogICAgIEtVUkwgdXJsKEtVUkwoKSwgdXJpKTsKIAogICAg
IGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewor
ICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogICAgICAgICBnX3NldF9lcnJvcihlcnJv
ciwgR1NUX1VSSV9FUlJPUiwgR1NUX1VSSV9FUlJPUl9CQURfVVJJLCAiSW52YWxpZCBVUkkgJyVz
JyIsIHVyaSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBwcml2LT51cmkg
PSBnX3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX09CSkVDVF9V
TkxPQ0soc3JjKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNjM0LDcgKzc0MSwxMyBAQCBz
dGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHModm9pZCkKIAogc3RhdGljIGNv
bnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsK
LSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dFQl9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7
CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBn
Y2hhciogcmV0OworCisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgcmV0ID0gZ19zdHJk
dXAoc3JjLT5wcml2LT51cmkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgcmV0
dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklI
YW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQpAQCAtNjQ3LDIwICs3NjAsMjUgQEAg
c3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVy
LCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCisgICAg
R1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+
dXJpID0gMDsKIAotICAgIGlmICghdXJpKQorICAgIGlmICghdXJpKSB7CisgICAgICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KIAogICAgIEtV
UkwgdXJsKEtVUkwoKSwgdXJpKTsKIAogICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhdXJsLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgeworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OwogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkludmFsaWQgVVJJICclcyciLCB1cmkp
OwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgcHJpdi0+dXJpID0gZ19zdHJk
dXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAjZW5kaWYKQEAgLTY4MSwxMiArNzk5LDE5IEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAg
cHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcoZmFsc2UpOwotCiAgICAgR1NUX09CSkVD
VF9MT0NLKHNyYyk7CisgICAgLy8gYWxyZWFkeSBzdG9wcGVkCisgICAgaWYgKCFwcml2LT5uZWVk
RGF0YUlEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVy
biBGQUxTRTsKKyAgICB9CisKICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKICAgICBwcml2LT5u
ZWVkRGF0YUlEID0gMDsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworCisgICAgaWYgKHBy
aXYtPmNsaWVudCkKKyAgICAgICAgcHJpdi0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNl
KTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTcxMSwxMyArODM2LDE5IEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQog
ewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2
LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLQogICAgIEdTVF9PQkpFQ1RfTE9D
SyhzcmMpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+ZW5vdWdoRGF0
YUlEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKICAgICBwcml2LT5wYXVzZWQgPSBUUlVFOwogICAgIHByaXYtPmVub3Vn
aERhdGFJRCA9IDA7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAorICAgIGlmIChwcml2
LT5jbGllbnQpCisgICAgICAgIHByaXYtPmNsaWVudC0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsK
ICAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTc0MCw3ICs4NzEsMTcgQEAgc3RhdGljIHZvaWQg
d2ViS2l0V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQog
CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla01haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywgdHJ1ZSk7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwor
ICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+c2Vla0lEKSB7CisgICAgICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Cisg
ICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKworICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsK
ICAgICB3ZWJLaXRXZWJTcmNTdGFydChzcmMpOwogCiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtNzUy
LDkxICs4OTMsNzggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0
QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJT
ZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKLSAgICBpZiAo
b2Zmc2V0ID09IHByaXYtPm9mZnNldCAmJiBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPT0gcHJpdi0+
b2Zmc2V0KQorICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIGlmIChvZmZzZXQgPT0gcHJp
di0+b2Zmc2V0ICYmIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9PSBwcml2LT5vZmZzZXQpIHsKKyAg
ICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAg
fQogCi0gICAgaWYgKCFwcml2LT5zZWVrYWJsZSkKKyAgICBpZiAoIXByaXYtPnNlZWthYmxlKSB7
CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qg
c2VlayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKIAotICAgIEdTVF9P
QkpFQ1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5zZWVrSUQpCiAgICAgICAgIGdfc291cmNl
X3JlbW92ZShwcml2LT5zZWVrSUQpOwogICAgIHByaXYtPnNlZWtJRCA9IGdfdGltZW91dF9hZGRf
ZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vl
a01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0
X3VucmVmKTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIAorCiAgICAgcmV0dXJu
IFRSVUU7CiB9CiAKIHZvaWQgd2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV2ViS2l0V2ViU3Jj
KiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIpCiB7CiAgICAgQVNTRVJUKHBsYXll
cik7CisgICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgc3JjLT5wcml2LT5wbGF5ZXIgPSBw
bGF5ZXI7CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIH0KIAotU3RyZWFtaW5nQ2xpZW50
OjpTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMpIDogbV9zcmMoc3JjKQorLy8gU3Ry
ZWFtaW5nQ2xpZW50SGFuZGxlcgorU3RyZWFtaW5nQ2xpZW50SGFuZGxlcjo6U3RyZWFtaW5nQ2xp
ZW50SGFuZGxlcihXZWJLaXRXZWJTcmMqIHNyYykKKyAgICA6IG1fc3JjKHN0YXRpY19jYXN0PFdl
YktpdFdlYlNyYyo+KGdzdF9vYmplY3RfcmVmKHNyYykpKQogewotCiB9CiAKLVN0cmVhbWluZ0Ns
aWVudDo6flN0cmVhbWluZ0NsaWVudCgpCitTdHJlYW1pbmdDbGllbnRIYW5kbGVyOjp+U3RyZWFt
aW5nQ2xpZW50SGFuZGxlcigpCiB7Ci0KKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fc3JjKTsKKyAg
ICBtX3NyYyA9IDA7CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCit2b2lkIFN0cmVhbWluZ0NsaWVudEhhbmRsZXI6OnJlc3BvbnNlUmVjZWl2ZWQoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSog
cHJpdiA9IG1fc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlJlY2Vp
dmVkIHJlc3BvbnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwogCisgICAgR1NU
X09CSkVDVF9MT0NLKG1fc3JjKTsKKwogICAgIC8vIElmIHdlIHNlZWtlZCB3ZSBuZWVkIDIwNiA9
PSBQQVJUSUFMX0NPTlRFTlQKICAgICBpZiAocHJpdi0+cmVxdWVzdGVkT2Zmc2V0ICYmIHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjA2KSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG1fc3JjKTsKICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBSRUFE
LCAoMCksICgwKSk7CiAgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBw
c3JjKTsKLSAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChtX3NyYywgZmFsc2UpOworICAgICAgICB3
ZWJLaXRXZWJTcmNTdG9wKG1fc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGxv
bmcgbG9uZyBsZW5ndGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAgICBp
ZiAobGVuZ3RoID4gMCkgeworICAgIGlmIChsZW5ndGggPiAwKQogICAgICAgICBsZW5ndGggKz0g
cHJpdi0+cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2
LT5hcHBzcmMsIGxlbmd0aCk7Ci0KLSNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAg
aWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKLSAgICAgICAgICAgIGdzdF9zZWdtZW50X3NldF9k
dXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNlZ21lbnQsIEdTVF9GT1JNQVRf
QllURVMsIGxlbmd0aCk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoR1NU
X0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBzcmMpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAg
fQogCiAgICAgcHJpdi0+c2l6ZSA9IGxlbmd0aCA+PSAwID8gbGVuZ3RoIDogMDsKICAgICBwcml2
LT5zZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJub25lIiwgcmVz
cG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQtUmFuZ2VzIikudXRmOCgpLmRhdGEoKSk7CiAK
LSAgICAvLyBpY2VjYXN0IHN0dWZmCi0gICAgU3RyaW5nIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkKCJpY3ktbWV0YWludCIpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOwotICAgICAgICBnaW50NjQgaWN5TWV0YUludCA9IGdf
YXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5TWV0YUlu
dCA+IDApIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRlcnZh
bCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7Ci0KLSAgICAgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIEdzdFRhZ0xpc3QqIHRh
Z3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCk7CiAjZWxzZQogICAgIEdzdFRhZ0xpc3QqIHRh
Z3MgPSBnc3RfdGFnX2xpc3RfbmV3KCk7CiAjZW5kaWYKLSAgICB2YWx1ZSA9IHJlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKKyAgICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoImljeS1uYW1lIik7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgICAgICBwcml2LT5pcmFkaW9O
YW1lID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7CkBAIC04NjUsNiArOTkzLDM4IEBA
IHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSCiAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFncywg
R1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJVExFLCBwcml2LT5pcmFkaW9UaXRsZSwg
TlVMTCk7CiAgICAgfQogCisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV9zcmMpOworCisgICAgLy8g
bm90aWZ5IHNpemUvZHVyYXRpb24KKyAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICBnc3Rf
YXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7CisKKyNpZm5kZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKKyAgICAgICAg
ICAgIGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYykt
PnNlZ21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7CisgICAgICAgICAgICBnc3RfZWxl
bWVudF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKKyAgICAgICAgICAg
ICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBzcmMpLAor
ICAgICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYt
PmFwcHNyYywgLTEpOworCisgICAgLy8gaWNlY2FzdCBzdHVmZgorICAgIHZhbHVlID0gcmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOworICAgIGlmICghdmFsdWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOworICAgICAgICBnaW50NjQgaWN5TWV0
YUludCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7
CisKKyAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5TWV0YUludCA+
IDApIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3Rf
Y2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRlcnZhbCIs
IEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7CisKKyAgICAgICAgICAgIGdz
dF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAw
KTsKKworICAgIC8vIG5vdGlmeSB0YWdzCiAgICAgaWYgKGdzdF90YWdfbGlzdF9pc19lbXB0eSh0
YWdzKSkKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdGFnX2xpc3RfdW5y
ZWYodGFncyk7CkBAIC04NzIsMTMgKzEwMzIsMTUgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OnJl
c3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVIK
ICAgICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUodGFncyk7CiAjZW5kaWYKICAgICBlbHNlCi0gICAg
ICAgIG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChtX3NyYyksIG1fc3JjLT5wcml2LT5z
cmNwYWQsIHRhZ3MpOworICAgICAgICBub3RpZnlHc3RUYWdzT25QYWQoR1NUX0VMRU1FTlQobV9z
cmMpLCBwcml2LT5zcmNwYWQsIHRhZ3MpOwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0
YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKK3ZvaWQgU3RyZWFtaW5nQ2xpZW50SGFuZGxlcjo6ZGF0YVJlY2VpdmVkKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJp
diA9IG1fc3JjLT5wcml2OwogCisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3JjKTsKKwogICAgIEdT
VF9MT0dfT0JKRUNUKG1fc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVy
ID8gZ2V0R3N0QnVmZmVyU2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsKIAogICAg
IEFTU0VSVCghcHJpdi0+YnVmZmVyIHx8IGRhdGEgPT0gZ2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIo
cHJpdi0+YnVmZmVyLmdldCgpKSk7CkBAIC04ODgsNyArMTA1MCw4IEBAIHZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFy
KiBkYXRhLCBpCiAgICAgICAgIHVubWFwR3N0QnVmZmVyKHByaXYtPmJ1ZmZlci5nZXQoKSk7CiAj
ZW5kaWYKIAotICAgIGlmIChwcml2LT5zZWVrSUQgfHwgcmVzb3VyY2UgIT0gcHJpdi0+cmVzb3Vy
Y2UpIHsKKyAgICBpZiAocHJpdi0+c2Vla0lEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG1fc3JjKTsKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlNlZWsgaW4gcHJvZ3Jl
c3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTkxMyw2ICsxMDc2LDggQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRh
dGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGkK
ICAgICB9CiAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKHByaXYtPmJ1ZmZlci5nZXQoKSkgPSBw
cml2LT5vZmZzZXQ7CiAKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7CisKICAgICBHc3RG
bG93UmV0dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKHByaXYtPmFwcHNyYywgcHJp
di0+YnVmZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBpZiAo
cmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19FT1MpCkBAIC05MjIsNyArMTA4
Nyw3IEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2Uq
IHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9S
KG1fc3JjLCBDT1JFLCBGQUlMRUQsICgwKSwgKDApKTsKIH0KIAotY2hhciogU3RyZWFtaW5nQ2xp
ZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVz
dGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQorY2hhciogU3RyZWFtaW5nQ2xpZW50SGFuZGxl
cjo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFj
dHVhbFNpemUpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2
OwogCkBAIC05MzQsMTYgKzEwOTksODEgQEAgY2hhciogU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNy
ZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2kKICAgICBt
YXBHc3RCdWZmZXIoYnVmZmVyKTsKICNlbmRpZgogCisgICAgR1NUX09CSkVDVF9MT0NLKG1fc3Jj
KTsKICAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVyKTsKKyAgICBHU1RfT0JKRUNU
X1VOTE9DSyhtX3NyYyk7CiAKICAgICBhY3R1YWxTaXplID0gZ2V0R3N0QnVmZmVyU2l6ZShidWZm
ZXIpOwogICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihidWZmZXIpOwogfQogCi12
b2lkIFN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlKQordm9pZCBTdHJlYW1pbmdDbGllbnRIYW5kbGVyOjpub3RpZnlGaW5pc2hlZCgpCiB7CiAg
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2OwogCisgICAgR1NUX0RF
QlVHX09CSkVDVChtX3NyYywgIkhhdmUgRU9TIik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9z
cmMpOworICAgIGlmICghcHJpdi0+c2Vla0lEKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG1fc3JjKTsKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShwcml2LT5hcHBzcmMp
OworICAgIH0gZWxzZQorICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhtX3NyYyk7Cit9CisKKy8v
IENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50CitDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsIENh
Y2hlZFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQorICAgIDogbV9zcmMoc3RhdGljX2Nhc3Q8V2ViS2l0V2ViU3JjKj4oZ3N0X29i
amVjdF9yZWYoc3JjKSkpCisgICAgLCBtX2hhbmRsZXIobmV3IFN0cmVhbWluZ0NsaWVudEhhbmRs
ZXIoc3JjKSkKK3sKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVl
c3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVu
dCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNr
Q2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZh
dWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOworICAgIG1fcmVzb3VyY2UgPSByZXNvdXJj
ZUxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7CisgICAgaWYgKG1fcmVz
b3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKK30KKworQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgp
Cit7CisgICAgZ3N0X29iamVjdF91bnJlZihtX3NyYyk7CisgICAgbV9zcmMgPSAwOworCisgICAg
ZGVsZXRlIG1faGFuZGxlcjsKKyAgICBtX2hhbmRsZXIgPSAwOworCisgICAgaWYgKG1fcmVzb3Vy
Y2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgICAgICBt
X3Jlc291cmNlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQ6OmxvYWRGYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAoIW1fcmVzb3VyY2UpOwor
fQorCit2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5n
KGJvb2wgZGVmZXJzKQoreworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNl
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cit9CisKK2NoYXIqIENhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXpl
X3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQoreworICAgIHJldHVybiBtX2hh
bmRsZXItPmdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihyZXF1ZXN0ZWRTaXplLCBhY3R1YWxTaXplKTsK
K30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIG1faGFuZGxlci0+cmVzcG9uc2VSZWNlaXZlZChyZXNwb25zZSk7Cit9CisK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAg
bV9oYW5kbGVyLT5kYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKQorewogICAgIGlmIChyZXNvdXJjZS0+bG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSkgewog
ICAgICAgICBpZiAoIXJlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7CiAgICAgICAgICAgICBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvciA9IHJlc291cmNlLT5yZXNvdXJjZUVycm9yKCk7CkBAIC05
NTQsMTAgKzExODQsOTkgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9zcmMsICJIYXZlIEVPUyIpOworICAgIG1faGFuZGxlci0+bm90aWZ5
RmluaXNoZWQoKTsKK30KIAotICAgIGlmICghcHJpdi0+c2Vla0lEKQotICAgICAgICBnc3RfYXBw
X3NyY19lbmRfb2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworCisvLyBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudAorUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OlJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgOiBtX3NyYyhzdGF0aWNfY2FzdDxXZWJLaXRXZWJTcmMq
Pihnc3Rfb2JqZWN0X3JlZihzcmMpKSkKKyAgICAsIG1faGFuZGxlcihuZXcgU3RyZWFtaW5nQ2xp
ZW50SGFuZGxlcihzcmMpKQoreworICAgIG1fcmVzb3VyY2UgPSBSZXNvdXJjZUhhbmRsZTo6Y3Jl
YXRlKDAgLypjb250ZXh0Ki8sIHJlcXVlc3QsIHRoaXMsIGZhbHNlLCBmYWxzZSk7Cit9CisKK1Jl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp+UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGll
bnQoKQoreworICAgIGdzdF9vYmplY3RfdW5yZWYobV9zcmMpOworICAgIG1fc3JjID0gMDsKKwor
ICAgIGRlbGV0ZSBtX2hhbmRsZXI7CisgICAgbV9oYW5kbGVyID0gMDsKKworICAgIGlmIChtX3Jl
c291cmNlKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPmNhbmNlbCgpOworICAgICAgICBtX3Jlc291
cmNlLnJlbGVhc2UoKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgfQorfQorCitib29s
IFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKCFtX3Jlc291cmNlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKK3sKKyAgICBpZiAobV9yZXNv
dXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworfQor
CitjaGFyKiBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVm
ZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7CisgICAgcmV0
dXJuIG1faGFuZGxlci0+Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKHJlcXVlc3RlZFNpemUsIGFjdHVh
bFNpemUpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3aWxsU2Vu
ZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJikKK3sKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgbV9oYW5kbGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNl
KTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZURh
dGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBpbnQpCit7
CisgICAgbV9oYW5kbGVyLT5kYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBS
ZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhh
bmRsZSosIGRvdWJsZSkKK3sKKyAgICBtX2hhbmRsZXItPm5vdGlmeUZpbmlzaGVkKCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZhaWwoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBHU1RfRVJST1JfT0JKRUNU
KG1fc3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBG
QUlMRUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkp
LCAoMCkpOworICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0obV9zcmMtPnByaXYtPmFwcHNy
Yyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQo
UmVzb3VyY2VIYW5kbGUqKQoreworICAgIEdPd25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9F
UlJPUl9PQkpFQ1QobV9zcmMsICJSZXF1ZXN0IHdhcyBibG9ja2VkIik7CisKKyAgICBHU1RfT0JK
RUNUX0xPQ0sobV9zcmMpOworICAgIHVyaS5zZXQoZ19zdHJkdXAobV9zcmMtPnByaXYtPnVyaSkp
OworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKworICAgIEdTVF9FTEVNRU5UX0VSUk9S
KG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkFjY2VzcyB0byBcIiVzXCIgd2FzIGJsb2Nr
ZWQiLCB1cmkuZ2V0KCkpLCAoMCkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICBHT3duUHRyPGdj
aGFyPiB1cmk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3JjLCAiQ2Fubm90IHNob3cgVVJM
Iik7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV9zcmMpOworICAgIHVyaS5zZXQoZ19zdHJkdXAo
bV9zcmMtPnByaXYtPnVyaSkpOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fc3JjKTsKKworICAg
IEdTVF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkNhbid0IHNo
b3cgXCIlc1wiIiwgdXJpLmdldCgpKSwgKDApKTsKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVIpCi0tIAoxLjguMS4yCgo=
</data>
<flag name="review"
          id="230858"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209121</attachid>
            <date>2013-08-19 14:06:30 -0700</date>
            <delta_ts>2013-08-19 15:02:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>45177</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA2OGU0NmRmOWExN2ZmYWRjMjkzOTY0NDhhOWMwNTMzMzBhMWEwZmFhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMTkgQXVnIDIwMTMg
MTg6MDM6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24g
YW55IHRocmVhZCBieSBjYWxsaW5nCmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUg
VVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxlbWVudC4KVGhpcyBwYXRjaCBtYWtlcyBzdXJl
IHRoZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNz
dWVzIHdpdGggaXQKYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KCkFsc28g
YWRkIGNvbnZlbmllbmNlIGNsYXNzIHRoYXQgc2ltcGxpZmllcyBsb2NraW5nIGFuZCB1bmxvY2tp
bmcgYSBHTXV0ZXguCgoqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgood2Via2l0X3dlYl9zcmNfaW5pdCk6Cih3ZWJLaXRXZWJTcmNEaXNw
b3NlKToKKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToK
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKHdlYktp
dFdlYlNyY1N0b3ApOgood2ViS2l0V2ViU3JjU3RhcnQpOgood2ViS2l0V2ViU3JjQ2hhbmdlU3Rh
dGUpOgood2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKHdlYktpdFdlYlNyY0dldFVyaSk6
Cih3ZWJLaXRXZWJTcmNTZXRVcmkpOgood2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgood2Vi
S2l0V2ViU3JjTmVlZERhdGFDYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKHdl
YktpdFdlYlNyY0Vub3VnaERhdGFDYik6Cih3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKToKKHdlYktp
dFdlYlNyY1NlZWtEYXRhQ2IpOgood2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgooU3RyZWFt
aW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQpOgooU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5n
Q2xpZW50KToKKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CihTdHJlYW1pbmdD
bGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVE
YXRhUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CihD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudCk6CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6
CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CihDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToKKENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKToKKENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpn
ZXRPckNyZWF0ZVJlYWRCdWZmZXIpOgooUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondp
bGxTZW5kUmVxdWVzdCk6Ck1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8g
dXNlIHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgp0aGUgREFT
SCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMpLCB1c2Ug
R011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CmxvY2tzIGFuZCBvdGhlciBnZW5lcmFsIGltcHJvdmVt
ZW50cy4KCiogR05VbWFrZWZpbGUubGlzdC5hbToKKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIu
aDogQWRkZWQuCihXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CihXZWJDb3Jl
OjpHTXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgooV2ViQ29yZTo6R011dGV4TG9ja2VyOjps
b2NrKToKKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKLS0tCiBTb3VyY2UvV1RGL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArCiBTb3VyY2UvV1RG
L0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBTb3VyY2Uv
V1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oICAgICAgICAgICAgICB8ICA2NyArKysKIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYyICsr
KwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwICAgICAgICAgfCA1
ODcgKysrKysrKysrKysrKysrLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDU3NCBpbnNlcnRpb25z
KCspLCAxNTkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYv
Z29iamVjdC9HTXV0ZXhMb2NrZXIuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggM2I0Mzc3OS4uYjdhN2JkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxMy0wOC0xOSAgQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgICA8YW5kcmUu
bWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4KKworICAgICAgICBbZ3N0cmVhbWVyXSBNYWtlIHN1
cmUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzNTIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY29udmVuaWVuY2UgY2xhc3Mg
dGhhdCBzaW1wbGlmaWVzIGxvY2tpbmcgYW5kIHVubG9ja2luZyBhIEdNdXRleC4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogd3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R011dGV4TG9ja2VyOjpHTXV0ZXhMb2Nr
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R011dGV4TG9ja2VyOjp+R011dGV4TG9ja2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpH
TXV0ZXhMb2NrZXI6OnVubG9jayk6CisKIDIwMTMtMDgtMTEgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRp
c3RjaGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBlNDVkZWM1Li45OGU2OTljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dURi9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMDksNiArMjA5LDcgQEAgd3RmX3NvdXJjZXMgKz0gXAog
ICAgIFNvdXJjZS9XVEYvd3RmL2R0b2Evc3RydG9kLmNjIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9k
dG9hL3N0cnRvZC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3V0aWxzLmggXAorICAgIFNv
dXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmggXAogICAgIFNvdXJjZS9XVEYvd3Rm
L2dvYmplY3QvR093blB0ci5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR093blB0
ci5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmggYi9Tb3VyY2UvV1RGL3d0
Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNmODc4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dN
dXRleExvY2tlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEz
IENvbGxhYm9yYSBMdGQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR011dGV4TG9ja2VyX2gKKyNkZWZp
bmUgR011dGV4TG9ja2VyX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR011dGV4TG9ja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShHTXV0ZXhMb2NrZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgor
ICAgIGlubGluZSBHTXV0ZXhMb2NrZXIoKQorICAgICAgICA6IG1fbXV0ZXgoMCkKKyAgICB7Cisg
ICAgfQorCisgICAgaW5saW5lIGV4cGxpY2l0IEdNdXRleExvY2tlcihHTXV0ZXggKm11dGV4KQor
ICAgICAgICA6IG1fbXV0ZXgoMCkKKyAgICB7CisgICAgICAgIGxvY2sobXV0ZXgpOworICAgIH0K
KworICAgIGlubGluZSB+R011dGV4TG9ja2VyKCkgeyB1bmxvY2soKTsgfQorCisgICAgaW5saW5l
IHZvaWQgbG9jayhHTXV0ZXggKm11dGV4KQorICAgIHsKKyAgICAgICAgbV9tdXRleCA9IG11dGV4
OworICAgICAgICBpZiAobV9tdXRleCkKKyAgICAgICAgICAgIGdfbXV0ZXhfbG9jayhtX211dGV4
KTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYg
KG1fbXV0ZXgpIHsKKyAgICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKG1fbXV0ZXgpOworICAgICAg
ICAgICAgbV9tdXRleCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgR011
dGV4KiBtX211dGV4OworfTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWIwZmY0YS4uYjRl
ZjM5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA4LTE5ICBBbmRyZSBNb3Jl
aXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgorCisgICAg
ICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhy
ZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0cmVhbWVy
IGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisgICAgICAgIGdzdF9lbGVtZW50X21h
a2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxlbWVudC4K
KyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBnc3RyZWFtZXIgc291cmNlIGVsZW1l
bnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggaXQKKyAgICAgICAgYmVpbmcg
Y3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAgICAgICAo
d2Via2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNEaXNwb3NlKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NldFBy
b3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHJl
bW92ZVRpbWVvdXRTb3VyY2VzKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgorICAgICAg
ICAod2ViS2l0V2ViU3JjU3RhcnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUp
OgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKyAgICAgICAgKHdlYktp
dFdlYlNyY0dldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjTmVlZERh
dGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrTWFp
bkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAod2ViS2l0
V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpTdHJlYW1p
bmdDbGllbnQpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KToK
KyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CisgICAgICAgIChT
dHJlYW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoU3RyZWFt
aW5nQ2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50
OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk6
CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6Cisg
ICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6
CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFk
QnVmZmVyKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25z
ZVJlY2VpdmVkKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6Om5vdGlm
eUZpbmlzaGVkKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNv
dXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAgKFJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIpOgorICAg
ICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OndpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YSk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9h
ZGluZyk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmFpbCk6
CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tlZCk6Cisg
ICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VSTCk6Cisg
ICAgICAgIE1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8gdXNlIHRoZSBl
bGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgorICAgICAgICB0aGUgREFT
SCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMpLCB1c2Ug
R011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CisgICAgICAgIGxvY2tzIGFuZCBvdGhlciBnZW5lcmFs
IGltcHJvdmVtZW50cy4KKwogMjAxMy0wOC0xMiAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxs
YW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIEFkZCBTdXBwb3J0IGZvciBjYW52
YXMgYmxlbmQgbW9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5j
cHAKaW5kZXggMGNjNTc1ZS4uZmEwYTc0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHAKQEAgLTMxLDMyICszMSw5MiBAQAogI2luY2x1ZGUgIkdTdHJlYW1l
clZlcnNpb25pbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1
ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgog
I2luY2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdp
bnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HTXV0ZXhMb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAorLyogUHJlbWlzc2VzOgorICogLSB3ZWJraXRzcmMgbWF5IGJlIGNyZWF0ZWQgZnJvbSBh
bnkgdGhyZWFkIGluc2lkZSBnc3RyZWFtZXIKKyAqIC0gd2Via2l0c3JjIG1heSBiZSBjcmVhdGVk
IHdpdGhvdXQgYSBwbGF5ZXIgaW52b2x2ZWQgKGUuZy46IGRhc2ggZ3N0cmVhbWVyIGVsZW1lbnQK
KyAqICAgaW50ZXJuYWxseSBkb3dubG9hZGluZyBzdHJlYW0gZnJhZ21lbnRzKQorICogLSBzdHJl
YW1pbmcgY2xpZW50IGhvbGRzIHJlZmVyZW5jZSB0byBzcmMsIHNvIHRoYXQgc3JjIGlzIG5ldmVy
IGRlbGV0ZWQgd2hpbGUgY2xpZW50IGV4aXN0cworICogLSBpZiB0aGUgc3JjIGV4aXN0cywgYXBw
c3JjIGFsc28gZXhpc3RzCisgKiAtIHN0cmVhbWluZyBjbGllbnQgaXMgY3JlYXRlZCBvbiBzdGFy
dAorICogLSBzdHJlYW1pbmcgY2xpZW50IGlzIGRlbGV0ZWQgb24gc3RvcCBhbmQgY2FuY2VscyBy
ZXNvdXJjZQorICogLSBzdHJlYW1pbmcgY2xpZW50IGNhbGxiYWNrcyBhcmUgYWx3YXlzIGludm9r
ZWQgZnJvbSBtYWluIHRocmVhZAorICovCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1j
bGFzcyBTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworLy8gU3RyZWFtaW5nQ2xpZW50IGJhc2UgY2xhc3MuCitjbGFzcyBTdHJlYW1p
bmdDbGllbnQgewogICAgIHB1YmxpYzoKICAgICAgICAgU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdl
YlNyYyopOwogICAgICAgICB2aXJ0dWFsIH5TdHJlYW1pbmdDbGllbnQoKTsKIAorICAgICAgICB2
aXJ0dWFsIGJvb2wgbG9hZEZhaWxlZCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNldERlZmVyc0xvYWRpbmcoYm9vbCkgPSAwOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBj
aGFyKiBjcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVh
bFNpemUpOworICAgICAgICB2b2lkIGhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOworICAgICAgICB2b2lkIGhhbmRsZURhdGFSZWNlaXZlZChjb25zdCBjaGFy
KiwgaW50KTsKKyAgICAgICAgdm9pZCBoYW5kbGVOb3RpZnlGaW5pc2hlZCgpOworCisgICAgICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zcmM7Cit9OworCitjbGFzcyBDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudCwgcHVibGljIFN0
cmVhbWluZ0NsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyosIENhY2hl
ZFJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZpcnR1
YWwgfkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAgLy8gU3RyZWFt
aW5nQ2xpZW50IHZpcnR1YWwgbWV0aG9kcy4KKyAgICAgICAgYm9vbCBsb2FkRmFpbGVkKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKwogICAgIHByaXZhdGU6
Ci0gICAgICAgIC8vIENhY2hlZFJlc291cmNlQ2xpZW50Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29u
c3QgY2hhciosIGludCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSopOwotICAgICAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZl
cihDYWNoZWRSZXNvdXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNp
emUpOworICAgICAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisg
ICAgICAgIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSosIHNpemVf
dCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAgICB2b2lkIHJlc3Bv
bnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgICAgIHZvaWQgZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciosIGlu
dCk7CisgICAgICAgIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKKworICAg
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNvdXJjZTsK
K307CisKK2NsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291
cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtaW5nQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoV2ViS2l0V2ViU3JjKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgflJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAgLy8gU3Ry
ZWFtaW5nQ2xpZW50IHZpcnR1YWwgbWV0aG9kcy4KKyAgICAgICAgYm9vbCBsb2FkRmFpbGVkKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKIAotICAgICAgICBX
ZWJLaXRXZWJTcmMqIG1fc3JjOworICAgIHByaXZhdGU6CisgICAgICAgIC8vIFJlc291cmNlSGFu
ZGxlQ2xpZW50IHZpcnR1YWwgbWV0aG9kcy4KKyAgICAgICAgY2hhciogZ2V0T3JDcmVhdGVSZWFk
QnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAg
ICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZv
aWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQp
OworICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUg
LypmaW5pc2hUaW1lKi8pOworICAgICAgICB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhh
bmRsZSopOworICAgICAgICB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKKwor
ICAgICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2U7CiB9OwogCiAjZGVmaW5l
IFdFQktJVF9XRUJfU1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1NSQywgV2ViS2l0V2ViU3JjUHJpdmF0ZSkpCkBA
IC02OCw3ICsxMjgsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogICAgIFdlYkNv
cmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXI7CiAKICAgICBTdHJlYW1pbmdDbGllbnQqIGNsaWVudDsK
LSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVzb3VyY2U7CiAK
ICAgICBndWludDY0IG9mZnNldDsKICAgICBndWludDY0IHNpemU7CkBAIC03Nyw2ICsxMzYsOCBA
QCBzdHJ1Y3QgX1dlYktpdFdlYlNyY1ByaXZhdGUgewogCiAgICAgZ3VpbnQ2NCByZXF1ZXN0ZWRP
ZmZzZXQ7CiAKKyAgICBndWludCBzdGFydElEOworICAgIGd1aW50IHN0b3BJRDsKICAgICBndWlu
dCBuZWVkRGF0YUlEOwogICAgIGd1aW50IGVub3VnaERhdGFJRDsKICAgICBndWludCBzZWVrSUQ7
CkBAIC0xMjksOCArMTkwLDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihH
c3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSk7
CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla0RhdGFDYihHc3RBcHBTcmMqLCBndWlu
dDY0IG9mZnNldCwgZ3BvaW50ZXIgdXNlckRhdGEpOwogCi1zdGF0aWMgdm9pZCB3ZWJLaXRXZWJT
cmNTdG9wKFdlYktpdFdlYlNyYyosIGJvb2wpOwotCiBzdGF0aWMgR3N0QXBwU3JjQ2FsbGJhY2tz
IGFwcHNyY0NhbGxiYWNrcyA9IHsKICAgICB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiLAogICAgIHdl
YktpdFdlYlNyY0Vub3VnaERhdGFDYiwKQEAgLTE4NCw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3NyY19jbGFzc19pbml0KFdlYktpdFdlYlNyY0NsYXNzKiBrbGFzcykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdlbnJl
IG9mIHRoZSBzdHJlYW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX1JFQURBQkxFIHwgR19Q
QVJBTV9TVEFUSUNfU1RSSU5HUykpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KG9rbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
SVJBRElPX1VSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19zdHJpbmcoImlyYWRpby11cmwiLApAQCAtMjIyLDggKzI4MSw2IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfc3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMpCiAKICAgICBzcmMtPnByaXYg
PSBwcml2OwogCi0gICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMpOwot
CiAgICAgcHJpdi0+YXBwc3JjID0gR1NUX0FQUF9TUkMoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJhcHBzcmMiLCAwKSk7CiAgICAgaWYgKCFwcml2LT5hcHBzcmMpIHsKICAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChzcmMsICJGYWlsZWQgdG8gY3JlYXRlIGFwcHNyYyIpOwpAQCAtMjcyLDcgKzMy
OSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfc3JjX2luaXQoV2ViS2l0V2ViU3JjKiBzcmMp
CiAgICAgaWYgKHByaXYtPmhhdmVBcHBTcmMyNykKICAgICAgICAgZ19vYmplY3Rfc2V0KHByaXYt
PmFwcHNyYywgIm1pbi1wZXJjZW50IiwgMjAsIE5VTEwpOwogCi0gICAgd2ViS2l0V2ViU3JjU3Rv
cChzcmMsIGZhbHNlKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDAp
OworICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgLTEpOwogfQogCiBzdGF0
aWMgdm9pZCB3ZWJLaXRXZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKQEAgLTI4MCwxMyAr
MzM4LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3Qp
CiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBpZiAocHJpdi0+YnVm
ZmVyKSB7Ci0jaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAgdW5tYXBHc3RCdWZmZXIo
cHJpdi0+YnVmZmVyLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIo
KTsKLSAgICB9Ci0KICAgICBwcml2LT5wbGF5ZXIgPSAwOwogCiAgICAgR1NUX0NBTExfUEFSRU5U
KEdfT0JKRUNUX0NMQVNTLCBkaXNwb3NlLCAob2JqZWN0KSk7CkBAIC0yOTcsOCArMzQ4LDYgQEAg
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIFdl
YktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsKICAgICBXZWJLaXRXZWJT
cmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgZGVsZXRlIHByaXYtPmNsaWVudDsK
LQogICAgIGdfZnJlZShwcml2LT51cmkpOwogCiAgICAgR1NUX0NBTExfUEFSRU5UKEdfT0JKRUNU
X0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwpAQCAtMzEwLDkgKzM1OSwxMSBAQCBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
RCwgY29uc3QgR1ZhbHVlKgogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnBy
aXY7CiAKICAgICBzd2l0Y2ggKHByb3BJRCkgewotICAgIGNhc2UgUFJPUF9JUkFESU9fTU9ERToK
KyAgICBjYXNlIFBST1BfSVJBRElPX01PREU6IHsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tl
cihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgICAgICBwcml2LT5pcmFkaW9Nb2RlID0g
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBj
YXNlIFBST1BfTE9DQVRJT046CiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAgICAgZ3N0
X3VyaV9oYW5kbGVyX3NldF91cmkocmVpbnRlcnByZXRfY2FzdDxHc3RVUklIYW5kbGVyKj4oc3Jj
KSwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSwgMCk7CkBAIC0zMzEsNiArMzgyLDcgQEAgc3Rh
dGljIHZvaWQgd2ViS2l0V2ViU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSUQsIEdWYWx1ZSogdmFsdWUKICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJf
U1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
IAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAg
ICBzd2l0Y2ggKHByb3BJRCkgewogICAgIGNhc2UgUFJPUF9JUkFESU9fTU9ERToKICAgICAgICAg
Z192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+aXJhZGlvTW9kZSk7CkBAIC0zNTYsMTUg
KzQwOCwzOCBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZQogICAgIH0KIH0KIAorc3RhdGljIHZv
aWQgcmVtb3ZlVGltZW91dFNvdXJjZXMoV2ViS2l0V2ViU3JjKiBzcmMpCit7CisgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIGlmIChwcml2LT5zdGFydElE
KQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c3RhcnRJRCk7CisgICAgcHJpdi0+c3Rh
cnRJRCA9IDA7CiAKLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBz
cmMsIGJvb2wgc2Vla2luZykKKyAgICBpZiAocHJpdi0+bmVlZERhdGFJRCkKKyAgICAgICAgZ19z
b3VyY2VfcmVtb3ZlKHByaXYtPm5lZWREYXRhSUQpOworICAgIHByaXYtPm5lZWREYXRhSUQgPSAw
OworCisgICAgaWYgKHByaXYtPmVub3VnaERhdGFJRCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3Zl
KHByaXYtPmVub3VnaERhdGFJRCk7CisgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsKKworICAg
IGlmIChwcml2LT5zZWVrSUQpCisgICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQp
OworICAgIHByaXYtPnNlZWtJRCA9IDA7Cit9CisKKy8vIE11c3QgYmUgY2FsbGVkIG9uIG1haW4g
dGhyZWFkIGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZC4KK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRX
ZWJTcmNTdG9wKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBpZiAocHJpdi0+cmVzb3VyY2UpIHsKLSAgICAgICAg
cHJpdi0+cmVzb3VyY2UtPnJlbW92ZUNsaWVudChwcml2LT5jbGllbnQpOwotICAgICAgICBwcml2
LT5yZXNvdXJjZSA9IDA7Ci0gICAgfQorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKworICAgIGJvb2wgc2Vla2luZyA9IHByaXYtPnNlZWtJRDsKKwor
ICAgIHJlbW92ZVRpbWVvdXRTb3VyY2VzKHNyYyk7CisgICAgcHJpdi0+c3RvcElEID0gMDsKIAog
ICAgIGlmIChwcml2LT5jbGllbnQpIHsKICAgICAgICAgZGVsZXRlIHByaXYtPmNsaWVudDsKQEAg
LTM3OCwyMSArNDUzLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJT
cmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgICAgICBwcml2LT5idWZmZXIuY2xlYXIoKTsKICAg
ICB9CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAgICBpZiAocHJpdi0+bmVlZERhdGFJ
RCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPm5lZWREYXRhSUQpOwotICAgIHByaXYt
Pm5lZWREYXRhSUQgPSAwOwotCi0gICAgaWYgKHByaXYtPmVub3VnaERhdGFJRCkKLSAgICAgICAg
Z19zb3VyY2VfcmVtb3ZlKHByaXYtPmVub3VnaERhdGFJRCk7Ci0gICAgcHJpdi0+ZW5vdWdoRGF0
YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5zZWVrSUQpCi0gICAgICAgIGdfc291cmNlX3JlbW92
ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYtPnNlZWtJRCA9IDA7Ci0KICAgICBwcml2LT5wYXVz
ZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwogCiAgICAgZ19mcmVlKHBy
aXYtPmlyYWRpb05hbWUpOwogICAgIHByaXYtPmlyYWRpb05hbWUgPSAwOwpAQCAtNDA2LDM5ICs0
NjcsNTMgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywg
Ym9vbCBzZWVraW5nKQogICAgIGdfZnJlZShwcml2LT5pcmFkaW9UaXRsZSk7CiAgICAgcHJpdi0+
aXJhZGlvVGl0bGUgPSAwOwogCi0gICAgaWYgKHByaXYtPmFwcHNyYykgewotICAgICAgICBnc3Rf
YXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOwotICAgICAgICBpZiAoIXNlZWtpbmcp
Ci0gICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKLSAg
ICB9Ci0KICAgICBwcml2LT5vZmZzZXQgPSAwOwogICAgIHByaXYtPnNlZWthYmxlID0gRkFMU0U7
CiAKICAgICBpZiAoIXNlZWtpbmcpIHsKICAgICAgICAgcHJpdi0+c2l6ZSA9IDA7CiAgICAgICAg
IHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IDA7CisgICAgICAgIHByaXYtPnBsYXllciA9IDA7Cisg
ICAgfQorCisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgaWYgKHByaXYtPmFwcHNyYykgewor
ICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworICAgICAgICBp
ZiAoIXNlZWtpbmcpCisgICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBz
cmMsIC0xKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0b3BwZWQgcmVx
dWVzdCIpOworCisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1zdGF0aWMgYm9vbCB3ZWJLaXRXZWJT
cmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKKy8vIE11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhy
ZWFkIGFuZCB3aXRoIG9iamVjdCB1bmxvY2tlZC4KK3N0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJT
cmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OwogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dF
VF9MT0NLKHNyYykpOworCisgICAgcHJpdi0+c3RhcnRJRCA9IDA7CisKICAgICBpZiAoIXByaXYt
PnVyaSkgewogICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIk5vIFVSSSBwcm92aWRlZCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGxvY2tlci51bmxvY2soKTsKKyAgICAg
ICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQog
Ci0gICAgQVNTRVJUKHByaXYtPnBsYXllcik7CisgICAgQVNTRVJUKCFwcml2LT5jbGllbnQpOwog
CiAgICAgS1VSTCB1cmwgPSBLVVJMKEtVUkwoKSwgcHJpdi0+dXJpKTsKIAogICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0KHVybCk7CiAgICAgcmVxdWVzdC5zZXRBbGxvd0Nvb2tpZXModHJ1ZSk7
Ci0gICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIocHJpdi0+cGxheWVyLT5yZWZlcnJlcigpKTsK
KworICAgIGlmIChwcml2LT5wbGF5ZXIpCisgICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVy
KHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CiAKICNpZiBVU0UoU09VUCkKICAgICAvLyBMZXQn
cyBkaXNhYmxlIEhUVFAgQWNjZXB0LUVuY29kaW5nIGhlcmUgYXMgd2UgZG9uJ3Qgd2FudCB0aGUg
cmVjZWl2ZWQgcmVzcG9uc2UgdG8gYmUKQEAgLTQ2OSwyMyArNTQ0LDI1IEBAIHN0YXRpYyBib29s
IHdlYktpdFdlYlNyY1N0YXJ0KFdlYktpdFdlYlNyYyogc3JjKQogICAgIC8vIE5lZWRlZCB0byB1
c2UgRExOQSBzdHJlYW1pbmcgc2VydmVycwogICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KCJ0cmFuc2Zlck1vZGUuZGxuYSIsICJTdHJlYW1pbmciKTsKIAotICAgIGlmIChDYWNoZWRSZXNv
dXJjZUxvYWRlciogbG9hZGVyID0gcHJpdi0+cGxheWVyLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
KSB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCBjYWNoZVJlcXVlc3QocmVxdWVzdCwg
UmVzb3VyY2VMb2FkZXJPcHRpb25zKFNlbmRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBE
b05vdEJ1ZmZlckRhdGEsIERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscywgRG9Ob3RBc2tDbGll
bnRGb3JDcm9zc09yaWdpbkNyZWRlbnRpYWxzLCBEb1NlY3VyaXR5Q2hlY2ssIFVzZURlZmF1bHRP
cmlnaW5SZXN0cmljdGlvbnNGb3JUeXBlKSk7Ci0gICAgICAgIHByaXYtPnJlc291cmNlID0gbG9h
ZGVyLT5yZXF1ZXN0UmF3UmVzb3VyY2UoY2FjaGVSZXF1ZXN0KTsKLSAgICAgICAgaWYgKHByaXYt
PnJlc291cmNlKSB7Ci0gICAgICAgICAgICBwcml2LT5jbGllbnQgPSBuZXcgU3RyZWFtaW5nQ2xp
ZW50KHNyYyk7Ci0gICAgICAgICAgICBwcml2LT5yZXNvdXJjZS0+YWRkQ2xpZW50KHByaXYtPmNs
aWVudCk7Ci0gICAgICAgIH0KKyAgICBpZiAocHJpdi0+cGxheWVyKSB7CisgICAgICAgIGlmIChD
YWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyID0gcHJpdi0+cGxheWVyLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpKQorICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IENhY2hlZFJlc291cmNl
U3RyZWFtaW5nQ2xpZW50KHNyYywgbG9hZGVyLCByZXF1ZXN0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBwcml2LT5jbGllbnQgPSBuZXcgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQoc3Jj
LCByZXF1ZXN0KTsKICAgICB9CiAKLSAgICBpZiAoIXByaXYtPnJlc291cmNlKSB7Ci0gICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIHNjaGVkdWxlIHJlc291cmNlIGxvYWQi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcHJpdi0+Y2xpZW50IHx8IHByaXYt
PmNsaWVudC0+bG9hZEZhaWxlZCgpKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAi
RmFpbGVkIHRvIHNldHVwIHN0cmVhbWluZyBjbGllbnQiKTsKKyAgICAgICAgaWYgKHByaXYtPmNs
aWVudCkgeworICAgICAgICAgICAgZGVsZXRlIHByaXYtPmNsaWVudDsKKyAgICAgICAgICAgIHBy
aXYtPmNsaWVudCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbG9ja2VyLnVubG9jaygpOworICAg
ICAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9
Ci0KICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIpOwotCi0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0
U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKQEAgLTUxMywxNSArNTkwLDE3IEBAIHN0YXRpYyBHc3RT
dGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVt
ZW50LCBHc3RTdGF0CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCisgICAgR011dGV4TG9j
a2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRjaCAodHJhbnNp
dGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CiAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAgICAgICBpZiAo
IXdlYktpdFdlYlNyY1N0YXJ0KHNyYykpCi0gICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hB
TkdFX0ZBSUxVUkU7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19Q
UklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0YXJ0LCBnc3Rfb2Jq
ZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgogICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKLSAgICAgICAgd2Vi
S2l0V2ViU3JjU3RvcChzcmMsIGZhbHNlKTsKKyAgICAgICAgLy8gY2FuY2VsIHBlbmRpbmcgc291
cmNlcworICAgICAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgICAgICBwcml2LT5z
dG9wSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMp
IHdlYktpdFdlYlNyY1N0b3AsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkg
Z3N0X29iamVjdF91bnJlZik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwpAQCAtNTMyLDcgKzYxMSw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0CiAKIHN0
YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdz
dE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCiB7Ci0gICAgV2ViS2l0V2ViU3JjKiB3
ZWJraXRTcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsKKyAgICBXZWJL
aXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOwogICAg
IGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCiAgICAgc3dpdGNoIChHU1RfUVVFUllfVFlQRShx
dWVyeSkpIHsKQEAgLTU0MSwxNSArNjIwLDE3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJT
cmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRCiAK
ICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0LCBOVUxMKTsK
IAotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHdlYmtpdFNyYywgImR1cmF0aW9uIHF1ZXJ5IGlu
IGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAgICAgIGlmICgo
Zm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpICYmICh3ZWJraXRTcmMtPnByaXYtPnNpemUgPiAw
KSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwgZm9ybWF0LCB3
ZWJraXRTcmMtPnByaXYtPnNpemUpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgImR1
cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7
CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsK
KyAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIHNyYy0+cHJpdi0+c2l6
ZSA+IDApIHsKKyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1h
dCwgc3JjLT5wcml2LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1FVRVJZX1VSSTogewotICAg
ICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgd2Via2l0U3JjLT5wcml2LT51cmkpOworICAg
ICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAg
ICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CiAgICAgICAgIHJl
c3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3ICs2NzEsMTIgQEAg
Y29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5cGUpCiAKIHN0
YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIpCiB7
Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5wcml2LT51cmkp
OworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxlcik7CisgICAg
Z2NoYXIqIHJldDsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7CisgICAgcmV0dXJu
IHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5k
bGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXJyb3IqKiBlcnJvcikKQEAgLTYwMyw2
ICs2ODksOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdzdFVSSUhhbmRs
ZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAgICByZXR1cm4gRkFMU0U7
CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNy
YykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsKIApAQCAt
NjM0LDcgKzcyMiwxMiBAQCBzdGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMo
dm9pZCkKIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmkoR3N0VVJJSGFu
ZGxlciogaGFuZGxlcikKIHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dFQl9TUkMoaGFu
ZGxlciktPnByaXYtPnVyaSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NS
QyhoYW5kbGVyKTsKKyAgICBnY2hhciogcmV0OworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihH
U1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHJldCA9IGdfc3RyZHVwKHNyYy0+cHJpdi0+
dXJpKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3Jj
U2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkpCkBAIC02NDcs
NiArNzQwLDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklIYW5k
bGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAg
ICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykp
OworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsKIApAQCAtNjgx
LDEyICs3NzYsMTggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNi
KFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7
CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAg
IC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+bmVlZERhdGFJRCkgeworICAgICAg
ICByZXR1cm4gRkFMU0U7CisgICAgfQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAg
cHJpdi0+cGF1c2VkID0gRkFMU0U7CiAgICAgcHJpdi0+bmVlZERhdGFJRCA9IDA7Ci0gICAgR1NU
X09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICBpZiAocHJp
di0+Y2xpZW50KQorICAgICAgICBwcml2LT5jbGllbnQtPnNldERlZmVyc0xvYWRpbmcoZmFsc2Up
OwogICAgIHJldHVybiBGQUxTRTsKIH0KIApAQCAtNjk3LDI3ICs3OTgsMzAgQEAgc3RhdGljIHZv
aWQgd2ViS2l0V2ViU3JjTmVlZERhdGFDYihHc3RBcHBTcmMqLCBndWludCBsZW5ndGgsIGdwb2lu
dGVyIHVzZXJEYXRhKQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJOZWVkIG1vcmUgZGF0
YTogJXUiLCBsZW5ndGgpOwogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CisgICAgR011dGV4
TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIGlmIChwcml2LT5u
ZWVkRGF0YUlEIHx8ICFwcml2LT5wYXVzZWQpIHsKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0so
c3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXYtPm5lZWREYXRhSUQgPSBn
X3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdl
YktpdFdlYlNyY05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lO
b3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Cisg
ICAgcHJpdi0+bmVlZERhdGFJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQs
IChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IsIGdzdF9vYmplY3RfcmVm
KHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CiB9CiAKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQog
ewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2
LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgLy8gYWxyZWFkeSBzdG9wcGVkCisg
ICAgaWYgKCFwcml2LT5lbm91Z2hEYXRhSUQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
IH0KIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHByaXYtPnBhdXNlZCA9IFRSVUU7
CiAgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMp
OworICAgIGxvY2tlci51bmxvY2soKTsKIAorICAgIGlmIChwcml2LT5jbGllbnQpCisgICAgICAg
IHByaXYtPmNsaWVudC0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKICAgICByZXR1cm4gRkFMU0U7
CiB9CiAKQEAgLTcyOCwxOSArODMyLDI1IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Vub3Vn
aERhdGFDYihHc3RBcHBTcmMqLCBncG9pbnRlciB1c2VyRGF0YSkKIAogICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiSGF2ZSBlbm91Z2ggZGF0YSIpOwogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNy
Yyk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwog
ICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQgfHwgcHJpdi0+cGF1c2VkKSB7Ci0gICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcml2
LT5lbm91Z2hEYXRhSUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAw
LCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY0Vub3VnaERhdGFNYWluQ2IsIGdzdF9vYmplY3Rf
cmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0gICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKKyAgICBwcml2LT5lbm91Z2hEYXRhSUQgPSBnX2lkbGVfYWRkX2Z1
bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY0Vub3VnaERh
dGFNYWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVj
dF91bnJlZik7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKFdl
YktpdFdlYlNyYyogc3JjKQogewotICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCB0cnVlKTsKKyAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgR011dGV4TG9j
a2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIC8vIGFscmVhZHkgc3Rv
cHBlZAorICAgIGlmICghcHJpdi0+c2Vla0lEKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
bG9ja2VyLnVubG9jaygpOworCisgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOwogICAgIHdlYktp
dFdlYlNyY1N0YXJ0KHNyYyk7CiAKICAgICByZXR1cm4gRkFMU0U7CkBAIC03NTIsNiArODYyLDcg
QEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3Vp
bnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9m
ZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zmc2V0KTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgaWYgKG9mZnNldCA9PSBwcml2LT5v
ZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0ID09IHByaXYtPm9mZnNldCkKICAgICAgICAg
cmV0dXJuIFRSVUU7CiAKQEAgLTc2MSwxMTAgKzg3MiwxNDAgQEAgc3RhdGljIGdib29sZWFuIHdl
YktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVy
IHVzZXIKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2Vl
ayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IG9mZnNldDsKIAotICAgIEdTVF9PQkpF
Q1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5zZWVrSUQpCiAgICAgICAgIGdfc291cmNlX3Jl
bW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYtPnNlZWtJRCA9IGdfdGltZW91dF9hZGRfZnVs
bChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01h
aW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3Vu
cmVmKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOwotICAgIAorICAgIHByaXYtPnNlZWtJ
RCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIChHU291cmNlRnVuYykgd2Vi
S2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5
KSBnc3Rfb2JqZWN0X3VucmVmKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAogdm9pZCB3ZWJLaXRX
ZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJTcmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQbGF5
ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxheWVyKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgc3JjLT5wcml2LT5wbGF5ZXIgPSBw
bGF5ZXI7CiB9CiAKLVN0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNy
Yyogc3JjKSA6IG1fc3JjKHNyYykKK1N0cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KFdl
YktpdFdlYlNyYyogc3JjKQorICAgIDogbV9zcmMoYWRvcHRHUmVmKHN0YXRpY19jYXN0PEdzdEVs
ZW1lbnQqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkpCiB7Ci0KIH0KIAogU3RyZWFtaW5nQ2xpZW50
Ojp+U3RyZWFtaW5nQ2xpZW50KCkKIHsKK30KKworY2hhciogU3RyZWFtaW5nQ2xpZW50OjpjcmVh
dGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7
CisgICAgV2ViS2l0V2ViU3JjICpzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7Cisg
ICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVCgh
cHJpdi0+YnVmZmVyKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdf
YW5kX2FsbG9jKHJlcXVlc3RlZFNpemUpOwogCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBtYXBHc3RCdWZmZXIoYnVmZmVyKTsKKyNlbmRpZgorCisgICAgR011dGV4TG9ja2VyIGxvY2tl
cihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1Jl
ZihidWZmZXIpOworICAgIGxvY2tlci51bmxvY2soKTsKKworICAgIGFjdHVhbFNpemUgPSBnZXRH
c3RCdWZmZXJTaXplKGJ1ZmZlcik7CisgICAgcmV0dXJuIGdldEdzdEJ1ZmZlckRhdGFQb2ludGVy
KGJ1ZmZlcik7CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlUmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2
ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2ViU3JjICpzcmMgPSBXRUJLSVRfV0VCX1NSQyht
X3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
KworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAi
UmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogCiAgICAgLy8g
SWYgd2Ugc2Vla2VkIHdlIG5lZWQgMjA2ID09IFBBUlRJQUxfQ09OVEVOVAogICAgIGlmIChwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsK
LSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBSRUFELCAoMCksICgw
KSk7CisgICAgICAgIGxvY2tlci51bmxvY2soKTsKKyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Io
c3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAoMCkpOwogICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0gICAgICAgIHdlYktpdFdlYlNyY1N0b3AobV9zcmMs
IGZhbHNlKTsKKyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgbG9uZyBsb25nIGxlbmd0aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVu
dExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgaWYgKGxlbmd0aCA+IDApCiAg
ICAgICAgIGxlbmd0aCArPSBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQ7Ci0gICAgICAgIGdzdF9hcHBf
c3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgbGVuZ3RoKTsKLQotI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQotICAgICAgICBpZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgewotICAgICAgICAgICAg
Z3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2Vn
bWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3RoKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50
X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChwcml2LT5hcHBzcmMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNU
KHByaXYtPmFwcHNyYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICB9CiAKICAgICBwcml2LT5zaXplID0gbGVuZ3RoID49IDAgPyBsZW5n
dGggOiAwOwogICAgIHByaXYtPnNlZWthYmxlID0gbGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNh
c2VjbXAoIm5vbmUiLCByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkFjY2VwdC1SYW5nZXMiKS51
dGY4KCkuZGF0YSgpKTsKIAotICAgIC8vIGljZWNhc3Qgc3R1ZmYKLSAgICBTdHJpbmcgdmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS1tZXRhaW50Iik7Ci0gICAgaWYgKCF2YWx1
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2NoYXIqIGVuZHB0ciA9IDA7Ci0gICAgICAgIGdpbnQ2
NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xsKHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRw
dHIsIDEwKTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0g
J1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgewotICAgICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBj
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5Iiwg
Im1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwp
KTsKLQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBz
LmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAg
ICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdfbGlzdF9uZXdfZW1wdHkoKTsKICNlbHNlCiAg
ICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdfbGlzdF9uZXcoKTsKICNlbmRpZgotICAgIHZh
bHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktbmFtZSIpOworICAgIFN0cmluZyB2
YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKICAgICBpZiAoIXZh
bHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAg
ICAgIHByaXYtPmlyYWRpb05hbWUgPSBnX3N0cmR1cCh2YWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKG1fc3JjKSwgImlyYWRpby1uYW1lIik7Cisg
ICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAiaXJhZGlvLW5hbWUiKTsKICAg
ICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9U
QUdfT1JHQU5JWkFUSU9OLCBwcml2LT5pcmFkaW9OYW1lLCBOVUxMKTsKICAgICB9CiAgICAgdmFs
dWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS1nZW5yZSIpOwogICAgIGlmICghdmFs
dWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJlZShwcml2LT5pcmFkaW9HZW5yZSk7CiAgICAg
ICAgIHByaXYtPmlyYWRpb0dlbnJlID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFkaW8tZ2VucmUiKTsK
KyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHNyYyksICJpcmFkaW8tZ2VucmUiKTsK
ICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdT
VF9UQUdfR0VOUkUsIHByaXYtPmlyYWRpb0dlbnJlLCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS11cmwiKTsKICAgICBpZiAoIXZhbHVlLmlz
RW1wdHkoKSkgewogICAgICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVXJsKTsKICAgICAgICAgcHJp
di0+aXJhZGlvVXJsID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFkaW8tdXJsIik7CisgICAgICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAiaXJhZGlvLXVybCIpOwogICAgICAgICBnc3Rf
dGFnX2xpc3RfYWRkKHRhZ3MsIEdTVF9UQUdfTUVSR0VfUkVQTEFDRSwgR1NUX1RBR19MT0NBVElP
TiwgcHJpdi0+aXJhZGlvVXJsLCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5o
dHRwSGVhZGVyRmllbGQoImljeS10aXRsZSIpOwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGdfZnJlZShwcml2LT5pcmFkaW9UaXRsZSk7CiAgICAgICAgIHByaXYtPmlyYWRp
b1RpdGxlID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0
X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFkaW8tdGl0bGUiKTsKKyAgICAgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKHNyYyksICJpcmFkaW8tdGl0bGUiKTsKICAgICAgICAgZ3N0X3Rh
Z19saXN0X2FkZCh0YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfVElUTEUsIHBy
aXYtPmlyYWRpb1RpdGxlLCBOVUxMKTsKICAgICB9CiAKKyAgICBsb2NrZXIudW5sb2NrKCk7CisK
KyAgICAvLyBub3RpZnkgc2l6ZS9kdXJhdGlvbgorICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAg
ICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgbGVuZ3RoKTsKKworI2lmbmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBpZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgewor
ICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+
YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3RoKTsKKyAgICAgICAgICAg
IGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChwcml2LT5hcHBzcmMpLAorICAg
ICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFw
cHNyYyksCisgICAgICAgICAgICAgICAgICAgIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOwor
ICAgICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3Np
emUocHJpdi0+YXBwc3JjLCAtMSk7CisKKyAgICAvLyBpY2VjYXN0IHN0dWZmCisgICAgdmFsdWUg
PSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS1tZXRhaW50Iik7CisgICAgaWYgKCF2YWx1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ2NoYXIqIGVuZHB0ciA9IDA7CisgICAgICAgIGdpbnQ2
NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xsKHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRw
dHIsIDEwKTsKKworICAgICAgICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lN
ZXRhSW50ID4gMCkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWlu
dGVydmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwpKTsKKworICAgICAg
ICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBzLmdldCgpKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5h
cHBzcmMsIDApOworCisgICAgLy8gbm90aWZ5IHRhZ3MKICAgICBpZiAoZ3N0X3RhZ19saXN0X2lz
X2VtcHR5KHRhZ3MpKQogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgICAgIGdzdF90YWdf
bGlzdF91bnJlZih0YWdzKTsKQEAgLTg3MiwxNCArMTAxMywxNyBAQCB2b2lkIFN0cmVhbWluZ0Ns
aWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJl
c291cmNlUgogICAgICAgICBnc3RfdGFnX2xpc3RfZnJlZSh0YWdzKTsKICNlbmRpZgogICAgIGVs
c2UKLSAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFkKEdTVF9FTEVNRU5UKG1fc3JjKSwgbV9zcmMt
PnByaXYtPnNyY3BhZCwgdGFncyk7CisgICAgICAgIG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxF
TUVOVChzcmMpLCBwcml2LT5zcmNwYWQsIHRhZ3MpOwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVu
dDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCkKK3ZvaWQgU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2ViU3JjICpzcmMgPSBXRUJLSVRfV0VC
X1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMp
KTsKIAotICAgIEdTVF9MT0dfT0JKRUNUKG1fc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwg
cHJpdi0+YnVmZmVyID8gZ2V0R3N0QnVmZmVyU2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVu
Z3RoKTsKKyAgICBHU1RfTE9HX09CSkVDVChzcmMsICJIYXZlICVkIGJ5dGVzIG9mIGRhdGEiLCBw
cml2LT5idWZmZXIgPyBnZXRHc3RCdWZmZXJTaXplKHByaXYtPmJ1ZmZlci5nZXQoKSkgOiBsZW5n
dGgpOwogCiAgICAgQVNTRVJUKCFwcml2LT5idWZmZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZmZXJE
YXRhUG9pbnRlcihwcml2LT5idWZmZXIuZ2V0KCkpKTsKIApAQCAtODg4LDggKzEwMzIsOCBAQCB2
b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJj
ZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgICAgICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5idWZm
ZXIuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBpZiAocHJpdi0+c2Vla0lEIHx8IHJlc291cmNlICE9
IHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJTZWVr
IGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7CisgICAgaWYgKHByaXYtPnNlZWtJRCkgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlNlZWsgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5n
IGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC05MDcsNTcgKzEwNTEsMTgyIEBAIHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRh
UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAg
ICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKICAgICAvLyBwcml2LT5zaXplID09IDAgaWYgcmVj
ZWl2ZWQgbGVuZ3RoIG9uIGRpZFJlY2VpdmVSZXNwb25zZSA8IDAuCiAgICAgaWYgKHByaXYtPnNp
emUgPiAwICYmIHByaXYtPm9mZnNldCA+IHByaXYtPnNpemUpIHsKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChtX3NyYywgIlVwZGF0aW5nIGludGVybmFsIHNpemUgZnJvbSAlIiBHX0dVSU5UNjRf
Rk9STUFUICIgdG8gJSIgR19HVUlOVDY0X0ZPUk1BVCwgcHJpdi0+c2l6ZSwgcHJpdi0+b2Zmc2V0
KTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJVcGRhdGluZyBpbnRlcm5hbCBzaXpl
IGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHRvICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYt
PnNpemUsIHByaXYtPm9mZnNldCk7CiAgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYt
PmFwcHNyYywgcHJpdi0+b2Zmc2V0KTsKICAgICAgICAgcHJpdi0+c2l6ZSA9IHByaXYtPm9mZnNl
dDsKICAgICB9CiAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKHByaXYtPmJ1ZmZlci5nZXQoKSkg
PSBwcml2LT5vZmZzZXQ7CiAKKyAgICBsb2NrZXIudW5sb2NrKCk7CisKICAgICBHc3RGbG93UmV0
dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKHByaXYtPmFwcHNyYywgcHJpdi0+YnVm
ZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBpZiAocmV0ICE9
IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxPV19FT1MpCiAjZWxzZQogICAgIGlmIChyZXQg
IT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9GTE9XX1VORVhQRUNURUQpCiAjZW5kaWYKLSAg
ICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOwor
ICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOwog
fQogCi1jaGFyKiBTdHJlYW1pbmdDbGllbnQ6OmdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRS
ZXNvdXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit2b2lk
IFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlTm90aWZ5RmluaXNoZWQoKQogewotICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJpdjsKKyAgICBXZWJLaXRXZWJTcmMgKnNyYyA9
IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OwogCi0gICAgQVNTRVJUKCFwcml2LT5idWZmZXIpOworICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBFT1MiKTsKIAotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0g
Z3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVlc3RlZFNpemUpOworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICBpZiAoIXByaXYtPnNlZWtJ
RCkgeworICAgICAgICBsb2NrZXIudW5sb2NrKCk7CisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9v
Zl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKKyAgICB9Cit9CiAKLSNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQotICAgIG1hcEdzdEJ1ZmZlcihidWZmZXIpOwotI2VuZGlmCitDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3Jj
KiBzcmMsIENhY2hlZFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3RyZWFtaW5nQ2xpZW50KHNyYykKK3sKKyAgICBD
YWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVlc3QsIFJlc291cmNlTG9hZGVy
T3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgRG9Ob3RCdWZmZXJEYXRh
LCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmln
aW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rp
b25zRm9yVHlwZSkpOworICAgIG1fcmVzb3VyY2UgPSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdFJh
d1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1f
cmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKK30KIAotICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0
R1JlZihidWZmZXIpOworQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNv
dXJjZVN0cmVhbWluZ0NsaWVudCgpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAg
bV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAgICAgICBtX3Jlc291cmNlID0gMDsK
KyAgICB9Cit9CiAKLSAgICBhY3R1YWxTaXplID0gZ2V0R3N0QnVmZmVyU2l6ZShidWZmZXIpOwot
ICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihidWZmZXIpOworYm9vbCBDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtX3Jlc291cmNlOwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKLSAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgaWYgKG1fcmVzb3VyY2UpCisgICAgICAg
IG1fcmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKK30KKworY2hhciogQ2FjaGVk
UmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNv
dXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVJlYWRCdWZmZXIocmVxdWVzdGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Cit9CiAK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoQ2Fj
aGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBo
YW5kbGVSZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNlKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBoYW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVu
Z3RoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQorewogICAgIGlmIChyZXNvdXJjZS0+bG9h
ZEZhaWxlZE9yQ2FuY2VsZWQoKSkgeworICAgICAgICBXZWJLaXRXZWJTcmMgKnNyYyA9IFdFQktJ
VF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKwogICAgICAgICBpZiAoIXJlc291cmNlLT53YXNDYW5j
ZWxlZCgpKSB7CiAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciA9IHJlc291
cmNlLT5yZXNvdXJjZUVycm9yKCk7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3Jj
LCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihtX3NyYywgUkVTT1VSQ0Us
IEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEo
KSksICgwKSk7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVy
ZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgRkFJTEVELCAoIiVzIiwg
ZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSwgKDApKTsKICAgICAg
ICAgfQotICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBz
cmMpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHNyYy0+cHJpdi0+YXBwc3Jj
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMs
ICJIYXZlIEVPUyIpOworICAgIGhhbmRsZU5vdGlmeUZpbmlzaGVkKCk7Cit9CiAKLSAgICBpZiAo
IXByaXYtPnNlZWtJRCkKLSAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+
cHJpdi0+YXBwc3JjKTsKK1Jlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYywgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQorICAgIDogU3RyZWFtaW5nQ2xpZW50KHNyYykKK3sKKyAgICBtX3Jlc291
cmNlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSgwIC8qY29udGV4dCovLCByZXF1ZXN0LCB0aGlz
LCBmYWxzZSwgZmFsc2UpOworfQorCitSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJl
c291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkgewor
ICAgICAgICBtX3Jlc291cmNlLT5jYW5jZWwoKTsKKyAgICAgICAgbV9yZXNvdXJjZS5yZWxlYXNl
KCk7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOworICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
X3Jlc291cmNlOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAg
ICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cit9CisKK2NoYXIqIFJlc291
cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoc2l6ZV90IHJl
cXVlc3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVh
ZEJ1ZmZlcihyZXF1ZXN0ZWRTaXplLCBhY3R1YWxTaXplKTsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudDo6d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGhhbmRsZVJl
c3BvbnNlUmVjZWl2ZWQocmVzcG9uc2UpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFt
aW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgsIGludCkKK3sKKyAgICBoYW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVu
Z3RoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNo
TG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKK3sKKyAgICBoYW5kbGVOb3RpZnlGaW5p
c2hlZCgpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRGYWls
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgV2Vi
S2l0V2ViU3JjICpzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisKKyAgICBHU1Rf
RVJST1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVT
T1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgp
LmRhdGEoKSksICgwKSk7CisgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShzcmMtPnByaXYt
PmFwcHNyYyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Js
b2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIFdlYktpdFdlYlNyYyAqc3JjID0gV0VCS0lU
X1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdPd25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc3JjLCAiUmVxdWVzdCB3YXMgYmxvY2tlZCIpOworCisgICAgR011dGV4
TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHVyaS5zZXQoZ19z
dHJkdXAoc3JjLT5wcml2LT51cmkpKTsKKyAgICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICBHU1Rf
RUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQWNjZXNzIHRvIFwiJXNc
IiB3YXMgYmxvY2tlZCIsIHVyaS5nZXQoKSksICgwKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKQoreworICAg
IFdlYktpdFdlYlNyYyAqc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdP
d25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiQ2Fubm90IHNo
b3cgVVJMIik7CisKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0so
c3JjKSk7CisgICAgdXJpLnNldChnX3N0cmR1cChzcmMtPnByaXYtPnVyaSkpOworICAgIGxvY2tl
ci51bmxvY2soKTsKKworICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIE9QRU5f
UkVBRCwgKCJDYW4ndCBzaG93IFwiJXNcIiIsIHVyaS5nZXQoKSksICgwKSk7CiB9CiAKICNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQotLSAKMS44LjEuMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209128</attachid>
            <date>2013-08-19 15:02:55 -0700</date>
            <delta_ts>2013-08-19 15:19:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>45163</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA2ODYzYjExYzg0MjU0MzEzMzAwODU5MTcwNjI0OGRkNjhlZjgzYjVmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMTkgQXVnIDIwMTMg
MTg6MDM6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIIDEvMl0gTWFrZSBzdXJlIGdzdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZQogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNTM1MgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpHU3RyZWFt
ZXIgc291cmNlIGVsZW1lbnQgbWF5IGJlIGNyZWF0ZWQgYnkgYW55IGdzdHJlYW1lciBlbGVtZW50
IG9uIGFueSB0aHJlYWQgYnkgY2FsbGluZwpnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIHdpdGgg
dGhlIFVSSXMgaGFuZGxlZCBieSB0aGUgc291cmNlIGVsZW1lbnQuClRoaXMgcGF0Y2ggbWFrZXMg
c3VyZSB0aGUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlIHRvIGF2b2lk
IGlzc3VlcyB3aXRoIGl0CmJlaW5nIGNyZWF0ZWQgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCgpB
bHNvIGFkZCBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IHNpbXBsaWZpZXMgbG9ja2luZyBhbmQgdW5s
b2NraW5nIGEgR011dGV4LgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcDoKKHdlYmtpdF93ZWJfc3JjX2luaXQpOgood2ViS2l0V2ViU3Jj
RGlzcG9zZSk6Cih3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6Cih3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0
eSk6Cih3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eSk6CihyZW1vdmVUaW1lb3V0U291cmNlcyk6Cih3
ZWJLaXRXZWJTcmNTdG9wKToKKHdlYktpdFdlYlNyY1N0YXJ0KToKKHdlYktpdFdlYlNyY0NoYW5n
ZVN0YXRlKToKKHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6Cih3ZWJLaXRXZWJTcmNHZXRV
cmkpOgood2ViS2l0V2ViU3JjU2V0VXJpKToKKHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKToK
KHdlYktpdFdlYlNyY05lZWREYXRhQ2IpOgood2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYik6
Cih3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IpOgood2ViS2l0V2ViU3JjU2Vla01haW5DYik6Cih3
ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKToKKHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKFN0
cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KToKKFN0cmVhbWluZ0NsaWVudDo6flN0cmVh
bWluZ0NsaWVudCk6CihTdHJlYW1pbmdDbGllbnQ6OmNyZWF0ZVJlYWRCdWZmZXIpOgooU3RyZWFt
aW5nQ2xpZW50OjpoYW5kbGVSZXNwb25zZVJlY2VpdmVkKToKKFN0cmVhbWluZ0NsaWVudDo6aGFu
ZGxlRGF0YVJlY2VpdmVkKToKKFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlTm90aWZ5RmluaXNoZWQp
OgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OkNhY2hlZFJlc291cmNlU3RyZWFtaW5n
Q2xpZW50KToKKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGYWls
ZWQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnNldERlZmVyc0xvYWRpbmcpOgoo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmdldE9yQ3JlYXRlUmVhZEJ1ZmZlcik6CihD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZCk6CihDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKENhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50Ojpub3RpZnlGaW5pc2hlZCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0Ns
aWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgooUmVzb3VyY2VIYW5kbGVTdHJl
YW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CihSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
Ojp3aWxsU2VuZFJlcXVlc3QpOgpNYWtlIGVsZW1lbnQgdGhyZWFkLXNhZmUsIGFkZCBzdXBwb3J0
IHRvIHVzZSB0aGUgZWxlbWVudCB3aXRob3V0IGEgcGxheWVyIGFzc29jaWF0ZWQgKGUuZy4KdGhl
IERBU0ggcGx1Z2luIHVzaW5nIHRoZSB3ZWJraXRzcmMgdG8gZG93bmxvYWQgZnJhZ21lbnRzKSwg
dXNlIEdNdXRleExvY2tlciB0byBzaW1wbGlmeQpsb2NrcyBhbmQgb3RoZXIgZ2VuZXJhbCBpbXBy
b3ZlbWVudHMuCgoqIEdOVW1ha2VmaWxlLmxpc3QuYW06Ciogd3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmg6IEFkZGVkLgooV2ViQ29yZTo6R011dGV4TG9ja2VyOjpHTXV0ZXhMb2NrZXIpOgooV2Vi
Q29yZTo6R011dGV4TG9ja2VyOjp+R011dGV4TG9ja2VyKToKKFdlYkNvcmU6OkdNdXRleExvY2tl
cjo6bG9jayk6CihXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OnVubG9jayk6Ci0tLQogU291cmNlL1dU
Ri9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKwogU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogU291
cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCAgICAgICAgICAgICAgfCAgNjcgKysr
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2
MiArKysKIC4uLi9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCAgICAgICAg
IHwgNTg1ICsrKysrKysrKysrKysrKy0tLS0tLQogNSBmaWxlcyBjaGFuZ2VkLCA1NzIgaW5zZXJ0
aW9ucygrKSwgMTU5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNiNDM3NzkuLmI3YTdiZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTMtMDgtMTkgIEFuZHJlIE1vcmVpcmEgTWFnYWxoYWVzICAgPGFu
ZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CisKKyAgICAgICAgW2dzdHJlYW1lcl0gTWFr
ZSBzdXJlIGdzdHJlYW1lciBzb3VyY2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNvbnZlbmllbmNlIGNs
YXNzIHRoYXQgc2ltcGxpZmllcyBsb2NraW5nIGFuZCB1bmxvY2tpbmcgYSBHTXV0ZXguCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNdXRl
eExvY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6R011dGV4
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6fkdNdXRleExvY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R011dGV4TG9ja2VyOjp1bmxvY2spOgorCiAyMDEzLTA4LTExICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFr
ZSBkaXN0Y2hlY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZTQ1ZGVjNS4uOThlNjk5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
VEYvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjA5LDYgKzIwOSw3IEBAIHd0Zl9zb3VyY2VzICs9
IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3N0cnRvZC5jYyBcCiAgICAgU291cmNlL1dURi93
dGYvZHRvYS9zdHJ0b2QuaCBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS91dGlscy5oIFwKKyAg
ICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oIFwKICAgICBTb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dPd25QdHIuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dP
d25QdHIuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oIGIvU291cmNlL1dU
Ri93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zZjg3OGEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVj
dC9HTXV0ZXhMb2NrZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMyBDb2xsYWJvcmEgTHRkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdNdXRleExvY2tlcl9oCisj
ZGVmaW5lIEdNdXRleExvY2tlcl9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdNdXRleExvY2tlciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoR011dGV4TG9ja2VyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1Ymxp
YzoKKyAgICBpbmxpbmUgR011dGV4TG9ja2VyKCkKKyAgICAgICAgOiBtX211dGV4KDApCisgICAg
eworICAgIH0KKworICAgIGlubGluZSBleHBsaWNpdCBHTXV0ZXhMb2NrZXIoR011dGV4ICptdXRl
eCkKKyAgICAgICAgOiBtX211dGV4KDApCisgICAgeworICAgICAgICBsb2NrKG11dGV4KTsKKyAg
ICB9CisKKyAgICBpbmxpbmUgfkdNdXRleExvY2tlcigpIHsgdW5sb2NrKCk7IH0KKworICAgIGlu
bGluZSB2b2lkIGxvY2soR011dGV4ICptdXRleCkKKyAgICB7CisgICAgICAgIG1fbXV0ZXggPSBt
dXRleDsKKyAgICAgICAgaWYgKG1fbXV0ZXgpCisgICAgICAgICAgICBnX211dGV4X2xvY2sobV9t
dXRleCk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgdW5sb2NrKCkKKyAgICB7CisgICAgICAg
IGlmIChtX211dGV4KSB7CisgICAgICAgICAgICBnX211dGV4X3VubG9jayhtX211dGV4KTsKKyAg
ICAgICAgICAgIG1fbXV0ZXggPSAwOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IEdNdXRleCogbV9tdXRleDsKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGViMGZmNGEu
LmI0ZWYzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAxMy0wOC0xOSAgQW5kcmUg
TW9yZWlyYSBNYWdhbGhhZXMgICA8YW5kcmUubWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4KKwor
ICAgICAgICBbZ3N0cmVhbWVyXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlz
IHRocmVhZC1zYWZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTUzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBHU3RyZWFtZXIgc291cmNlIGVsZW1lbnQgbWF5IGJlIGNyZWF0ZWQgYnkgYW55IGdzdHJl
YW1lciBlbGVtZW50IG9uIGFueSB0aHJlYWQgYnkgY2FsbGluZworICAgICAgICBnc3RfZWxlbWVu
dF9tYWtlX2Zyb21fdXJpIHdpdGggdGhlIFVSSXMgaGFuZGxlZCBieSB0aGUgc291cmNlIGVsZW1l
bnQuCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgc3VyZSB0aGUgZ3N0cmVhbWVyIHNvdXJjZSBl
bGVtZW50IGlzIHRocmVhZC1zYWZlIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGl0CisgICAgICAgIGJl
aW5nIGNyZWF0ZWQgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKHdlYmtpdF93ZWJfc3JjX2luaXQpOgorICAgICAgICAod2ViS2l0V2ViU3JjRGlzcG9zZSk6
CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNT
ZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eSk6CisgICAgICAg
IChyZW1vdmVUaW1lb3V0U291cmNlcyk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NoYW5nZVN0
YXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6CisgICAgICAgICh3
ZWJLaXRXZWJTcmNHZXRVcmkpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0VXJpKToKKyAgICAg
ICAgKHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY05l
ZWREYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYik6CisgICAg
ICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2Vl
a01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKToKKyAgICAgICAgKHdl
YktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6U3Ry
ZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6flN0cmVhbWluZ0NsaWVu
dCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmNyZWF0ZVJlYWRCdWZmZXIpOgorICAgICAg
ICAoU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVSZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKFN0
cmVhbWluZ0NsaWVudDo6aGFuZGxlRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFN0cmVhbWluZ0Ns
aWVudDo6aGFuZGxlTm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQ6OkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKENh
Y2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGYWlsZWQp
OgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnNldERlZmVyc0xvYWRp
bmcpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmdldE9yQ3JlYXRl
UmVhZEJ1ZmZlcik6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVz
cG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6
ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpu
b3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6
UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVT
dHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAg
IChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6CisgICAgICAgIChS
ZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAg
IChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToK
KyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3aWxsU2VuZFJlcXVlc3Qp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVSZXNw
b25zZSk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2
ZURhdGEpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlz
aExvYWRpbmcpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZh
aWwpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dVUkwp
OgorICAgICAgICBNYWtlIGVsZW1lbnQgdGhyZWFkLXNhZmUsIGFkZCBzdXBwb3J0IHRvIHVzZSB0
aGUgZWxlbWVudCB3aXRob3V0IGEgcGxheWVyIGFzc29jaWF0ZWQgKGUuZy4KKyAgICAgICAgdGhl
IERBU0ggcGx1Z2luIHVzaW5nIHRoZSB3ZWJraXRzcmMgdG8gZG93bmxvYWQgZnJhZ21lbnRzKSwg
dXNlIEdNdXRleExvY2tlciB0byBzaW1wbGlmeQorICAgICAgICBsb2NrcyBhbmQgb3RoZXIgZ2Vu
ZXJhbCBpbXByb3ZlbWVudHMuCisKIDIwMTMtMDgtMTIgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAg
PGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBBZGQgU3VwcG9ydCBmb3Ig
Y2FudmFzIGJsZW5kIG1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwCmluZGV4IDBjYzU3NWUuLmFmZTgyYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRX
ZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zMSwzMiArMzEsOTIgQEAKICNpbmNsdWRlICJHU3Ry
ZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMu
aD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1w
bHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR011dGV4TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKKy8qIFByZW1pc3NlczoKKyAqIC0gd2Via2l0c3JjIG1heSBiZSBjcmVhdGVkIGZy
b20gYW55IHRocmVhZCBpbnNpZGUgZ3N0cmVhbWVyCisgKiAtIHdlYmtpdHNyYyBtYXkgYmUgY3Jl
YXRlZCB3aXRob3V0IGEgcGxheWVyIGludm9sdmVkIChlLmcuOiBkYXNoIGdzdHJlYW1lciBlbGVt
ZW50CisgKiAgIGludGVybmFsbHkgZG93bmxvYWRpbmcgc3RyZWFtIGZyYWdtZW50cykKKyAqIC0g
c3RyZWFtaW5nIGNsaWVudCBob2xkcyByZWZlcmVuY2UgdG8gc3JjLCBzbyB0aGF0IHNyYyBpcyBu
ZXZlciBkZWxldGVkIHdoaWxlIGNsaWVudCBleGlzdHMKKyAqIC0gaWYgdGhlIHNyYyBleGlzdHMs
IGFwcHNyYyBhbHNvIGV4aXN0cworICogLSBzdHJlYW1pbmcgY2xpZW50IGlzIGNyZWF0ZWQgb24g
c3RhcnQKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBpcyBkZWxldGVkIG9uIHN0b3AgYW5kIGNhbmNl
bHMgcmVzb3VyY2UKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBjYWxsYmFja3MgYXJlIGFsd2F5cyBp
bnZva2VkIGZyb20gbWFpbiB0aHJlYWQKKyAqLworCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY2xhc3MgU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKy8vIFN0cmVhbWluZ0NsaWVudCBiYXNlIGNsYXNzLgorY2xhc3MgU3Ry
ZWFtaW5nQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqKTsKICAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50KCk7CiAKKyAgICAg
ICAgdmlydHVhbCBib29sIGxvYWRGYWlsZWQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgY2hhciogY3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBh
Y3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCBoYW5kbGVSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBoYW5kbGVEYXRhUmVjZWl2ZWQoY29uc3Qg
Y2hhciosIGludCk7CisgICAgICAgIHZvaWQgaGFuZGxlTm90aWZ5RmluaXNoZWQoKTsKKworICAg
ICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3JjOworfTsKKworY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2VTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQsIHB1Ymxp
YyBTdHJlYW1pbmdDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGlj
OgorICAgICAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqLCBD
YWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2
aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpOworCisgICAgICAgIC8vIFN0
cmVhbWluZ0NsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIGJvb2wgbG9hZEZhaWxlZCgp
IGNvbnN0OworICAgICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisKICAgICBwcml2
YXRlOgotICAgICAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSos
IGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqKTsKLSAgICAgICAgdmlydHVhbCBjaGFyKiBnZXRPckNyZWF0ZVJlYWRC
dWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1
YWxTaXplKTsKKyAgICAgICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQgdmlydHVhbCBtZXRob2Rz
LgorICAgICAgICBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBz
aXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCBy
ZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIq
LCBpbnQpOworICAgICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7CisK
KyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IG1fcmVzb3Vy
Y2U7Cit9OwogCi0gICAgICAgIFdlYktpdFdlYlNyYyogbV9zcmM7CitjbGFzcyBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGlj
IFN0cmVhbWluZ0NsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6
CisgICAgICAgIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyosIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRsZVN0
cmVhbWluZ0NsaWVudCgpOworCisgICAgICAgIC8vIFN0cmVhbWluZ0NsaWVudCB2aXJ0dWFsIG1l
dGhvZHMuCisgICAgICAgIGJvb2wgbG9hZEZhaWxlZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNl
dERlZmVyc0xvYWRpbmcoYm9vbCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBSZXNvdXJj
ZUhhbmRsZUNsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIGNoYXIqIGdldE9yQ3JlYXRl
UmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAg
ICAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAg
ICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwg
aW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91
YmxlIC8qZmluaXNoVGltZSovKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVzb3Vy
Y2VIYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKik7
CisKKyAgICAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlOwogfTsKIAogI2Rl
ZmluZSBXRUJLSVRfV0VCX1NSQ19HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9TUkMsIFdlYktpdFdlYlNyY1ByaXZhdGUp
KQpAQCAtNjgsNyArMTI4LDYgQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKICAgICBX
ZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwogCiAgICAgU3RyZWFtaW5nQ2xpZW50KiBjbGll
bnQ7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlc291cmNl
OwogCiAgICAgZ3VpbnQ2NCBvZmZzZXQ7CiAgICAgZ3VpbnQ2NCBzaXplOwpAQCAtNzcsNiArMTM2
LDggQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKIAogICAgIGd1aW50NjQgcmVxdWVz
dGVkT2Zmc2V0OwogCisgICAgZ3VpbnQgc3RhcnRJRDsKKyAgICBndWludCBzdG9wSUQ7CiAgICAg
Z3VpbnQgbmVlZERhdGFJRDsKICAgICBndWludCBlbm91Z2hEYXRhSUQ7CiAgICAgZ3VpbnQgc2Vl
a0lEOwpAQCAtMTI5LDggKzE5MCw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRh
Q2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IoR3N0QXBwU3JjKiwgZ3BvaW50ZXIgdXNlckRh
dGEpOwogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwg
Z3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKTsKIAotc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqLCBib29sKTsKLQogc3RhdGljIEdzdEFwcFNyY0NhbGxi
YWNrcyBhcHBzcmNDYWxsYmFja3MgPSB7CiAgICAgd2ViS2l0V2ViU3JjTmVlZERhdGFDYiwKICAg
ICB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IsCkBAIC0xODQsNyArMjQzLDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdChXZWJLaXRXZWJTcmNDbGFzcyoga2xhc3MpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJH
ZW5yZSBvZiB0aGUgc3RyZWFtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEQUJMRSB8
IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShva2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX0lSQURJT19VUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfc3RyaW5nKCJpcmFkaW8tdXJsIiwKQEAgLTIyMiw4ICsyODEsNiBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgc3JjLT5w
cml2ID0gcHJpdjsKIAotICAgIHByaXYtPmNsaWVudCA9IG5ldyBTdHJlYW1pbmdDbGllbnQoc3Jj
KTsKLQogICAgIHByaXYtPmFwcHNyYyA9IEdTVF9BUFBfU1JDKGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZSgiYXBwc3JjIiwgMCkpOwogICAgIGlmICghcHJpdi0+YXBwc3JjKSB7CiAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSBhcHBzcmMiKTsKQEAgLTI3Miw3
ICszMjksOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyog
c3JjKQogICAgIGlmIChwcml2LT5oYXZlQXBwU3JjMjcpCiAgICAgICAgIGdfb2JqZWN0X3NldChw
cml2LT5hcHBzcmMsICJtaW4tcGVyY2VudCIsIDIwLCBOVUxMKTsKIAotICAgIHdlYktpdFdlYlNy
Y1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3Jj
LCAwKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKIH0KIAog
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCkBAIC0yODAs
MTMgKzMzOCw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09iamVjdCogb2Jq
ZWN0KQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgaWYgKHByaXYt
PmJ1ZmZlcikgewotI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgICAgIHVubWFwR3N0QnVm
ZmVyKHByaXYtPmJ1ZmZlci5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgcHJpdi0+YnVmZmVyLmNs
ZWFyKCk7Ci0gICAgfQotCiAgICAgcHJpdi0+cGxheWVyID0gMDsKIAogICAgIEdTVF9DQUxMX1BB
UkVOVChHX09CSkVDVF9DTEFTUywgZGlzcG9zZSwgKG9iamVjdCkpOwpAQCAtMjk3LDggKzM0OCw2
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAg
ICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIGRlbGV0ZSBwcml2LT5jbGll
bnQ7Ci0KICAgICBnX2ZyZWUocHJpdi0+dXJpKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChHX09C
SkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKQEAgLTMxMCw5ICszNTksMTEgQEAgc3Rh
dGljIHZvaWQgd2ViS2l0V2ViU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSUQsIGNvbnN0IEdWYWx1ZSoKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3Jj
LT5wcml2OwogCiAgICAgc3dpdGNoIChwcm9wSUQpIHsKLSAgICBjYXNlIFBST1BfSVJBRElPX01P
REU6CisgICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOiB7CisgICAgICAgIEdNdXRleExvY2tlciBs
b2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICAgICAgcHJpdi0+aXJhZGlvTW9k
ZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwogICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgICAg
IGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpKHJlaW50ZXJwcmV0X2Nhc3Q8R3N0VVJJSGFuZGxlcio+
KHNyYyksIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIDApOwpAQCAtMzMxLDYgKzM4Miw3IEBA
IHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRf
V0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnBy
aXY7CiAKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgc3dpdGNoIChwcm9wSUQpIHsKICAgICBjYXNlIFBST1BfSVJBRElPX01PREU6CiAgICAg
ICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmlyYWRpb01vZGUpOwpAQCAtMzU2
LDE1ICs0MDgsMzggQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjR2V0UHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFsdWUKICAgICB9CiB9CiAKK3N0YXRp
YyB2b2lkIHJlbW92ZVRpbWVvdXRTb3VyY2VzKFdlYktpdFdlYlNyYyogc3JjKQoreworICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBpZiAocHJpdi0+c3Rh
cnRJRCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPnN0YXJ0SUQpOworICAgIHByaXYt
PnN0YXJ0SUQgPSAwOworCisgICAgaWYgKHByaXYtPm5lZWREYXRhSUQpCisgICAgICAgIGdfc291
cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKKyAgICBwcml2LT5uZWVkRGF0YUlEID0gMDsK
IAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBz
ZWVraW5nKQorICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCisgICAgICAgIGdfc291cmNlX3Jl
bW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOworICAgIHByaXYtPmVub3VnaERhdGFJRCA9IDA7CisK
KyAgICBpZiAocHJpdi0+c2Vla0lEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c2Vl
a0lEKTsKKyAgICBwcml2LT5zZWVrSUQgPSAwOworfQorCisvLyBNdXN0IGJlIGNhbGxlZCBvbiBt
YWluIHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQuCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2
YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgaWYgKHByaXYtPnJlc291cmNlKSB7Ci0gICAg
ICAgIHByaXYtPnJlc291cmNlLT5yZW1vdmVDbGllbnQocHJpdi0+Y2xpZW50KTsKLSAgICAgICAg
cHJpdi0+cmVzb3VyY2UgPSAwOwotICAgIH0KKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisKKyAgICBib29sIHNlZWtpbmcgPSBwcml2LT5zZWVrSUQ7
CisKKyAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgIHByaXYtPnN0b3BJRCA9IDA7
CiAKICAgICBpZiAocHJpdi0+Y2xpZW50KSB7CiAgICAgICAgIGRlbGV0ZSBwcml2LT5jbGllbnQ7
CkBAIC0zNzgsMjEgKzQ1Myw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0
V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFyKCk7
CiAgICAgfQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPm5lZWRE
YXRhSUQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKLSAgICBw
cml2LT5uZWVkRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCi0gICAg
ICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOwotICAgIHByaXYtPmVub3Vn
aERhdGFJRCA9IDA7Ci0KLSAgICBpZiAocHJpdi0+c2Vla0lEKQotICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+c2Vla0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSAwOwotCiAgICAgcHJpdi0+
cGF1c2VkID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAogICAgIGdfZnJl
ZShwcml2LT5pcmFkaW9OYW1lKTsKICAgICBwcml2LT5pcmFkaW9OYW1lID0gMDsKQEAgLTQwNiwz
OSArNDY3LDUzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3JjKiBz
cmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAgIHBy
aXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAgICAg
Z3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFzZWVr
aW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7
Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9IEZB
TFNFOwogCiAgICAgaWYgKCFzZWVraW5nKSB7CiAgICAgICAgIHByaXYtPnNpemUgPSAwOwogICAg
ICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOworICAgICAgICBwcml2LT5wbGF5ZXIgPSAw
OworICAgIH0KKworICAgIGxvY2tlci51bmxvY2soKTsKKworICAgIGlmIChwcml2LT5hcHBzcmMp
IHsKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKyAgICAg
ICAgaWYgKCFzZWVraW5nKQorICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+
YXBwc3JjLCAtMSk7CiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdG9wcGVk
IHJlcXVlc3QiKTsKKworICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIGJvb2wgd2ViS2l0
V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCisvLyBNdXN0IGJlIGNhbGxlZCBvbiBtYWlu
IHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQuCitzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKworICAgIHByaXYtPnN0YXJ0SUQgPSAwOworCiAgICAgaWYgKCFw
cml2LT51cmkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlk
ZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NrZXIudW5sb2NrKCk7Cisg
ICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAg
IH0KIAotICAgIEFTU0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xpZW50
KTsKIAogICAgIEtVUkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRy
dWUpOwotICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIo
KSk7CisKKyAgICBpZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZl
cnJlcihwcml2LT5wbGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgLy8g
TGV0J3MgZGlzYWJsZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdhbnQg
dGhlIHJlY2VpdmVkIHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzU0NCwyNSBAQCBzdGF0aWMg
Ym9vbCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVkZWQg
dG8gdXNlIERMTkEgc3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJG
aWVsZCgidHJhbnNmZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKSkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVl
c3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVu
dCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNr
Q2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZh
dWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9
IGxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChw
cml2LT5yZXNvdXJjZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWlu
Z0NsaWVudChzcmMpOwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChwcml2
LT5jbGllbnQpOwotICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAgICBp
ZiAoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKSkKKyAgICAgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBDYWNoZWRSZXNv
dXJjZVN0cmVhbWluZ0NsaWVudChzcmMsIGxvYWRlciwgcmVxdWVzdCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
KHNyYywgcmVxdWVzdCk7CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5yZXNvdXJjZSkgewotICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBzY2hlZHVsZSByZXNvdXJjZSBs
b2FkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXByaXYtPmNsaWVudCB8fCBw
cml2LT5jbGllbnQtPmxvYWRGYWlsZWQoKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNy
YywgIkZhaWxlZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50Iik7CisgICAgICAgIGlmIChwcml2
LT5jbGllbnQpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcml2LT5jbGllbnQ7CisgICAgICAgICAg
ICBwcml2LT5jbGllbnQgPSAwOworICAgICAgICB9CisgICAgICAgIGxvY2tlci51bmxvY2soKTsK
KyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgICAgICByZXR1cm4gRkFMU0U7CiAg
ICAgfQotCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGFydGVkIHJlcXVlc3QiKTsKLQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBGQUxTRTsKIH0KIAogc3RhdGljIEdzdFN0YXRl
Q2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQs
IEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCkBAIC01MTMsMTUgKzU5MCwxNyBAQCBzdGF0aWMg
R3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCog
ZWxlbWVudCwgR3N0U3RhdAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KIAorICAgIEdNdXRl
eExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBzd2l0Y2ggKHRy
YW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgog
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJFQURZLT5QQVVTRUQiKTsKLSAgICAgICAg
aWYgKCF3ZWJLaXRXZWJTcmNTdGFydChzcmMpKQotICAgICAgICAgICAgcmV0ID0gR1NUX1NUQVRF
X0NIQU5HRV9GQUlMVVJFOworICAgICAgICBwcml2LT5zdGFydElEID0gZ19pZGxlX2FkZF9mdWxs
KEdfUFJJT1JJVFlfREVGQVVMVCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNTdGFydCwgZ3N0
X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToK
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7Ci0gICAgICAg
IHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgICAgIC8vIGNhbmNlbCBwZW5kaW5n
IHNvdXJjZXMKKyAgICAgICAgcmVtb3ZlVGltZW91dFNvdXJjZXMoc3JjKTsKKyAgICAgICAgcHJp
di0+c3RvcElEID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgKEdTb3VyY2VG
dW5jKSB3ZWJLaXRXZWJTcmNTdG9wLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3Rp
ZnkpIGdzdF9vYmplY3RfdW5yZWYpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKQEAgLTUzMiw3ICs2MTEsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1
cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdAog
CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFk
LCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdlYktpdFdlYlNy
Yyogd2Via2l0U3JjID0gV0VCS0lUX1dFQl9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7CisgICAg
V2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsK
ICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZ
UEUocXVlcnkpKSB7CkBAIC01NDEsMTUgKzYyMCwxNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0
V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0
UQogCiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbihxdWVyeSwgJmZvcm1hdCwgTlVM
TCk7CiAKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJraXRTcmMsICJkdXJhdGlvbiBxdWVy
eSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOwotICAgICAgICBp
ZiAoKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSAmJiAod2Via2l0U3JjLT5wcml2LT5zaXpl
ID4gMCkpIHsKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZvcm1h
dCwgd2Via2l0U3JjLT5wcml2LT5zaXplKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJkdXJhdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1h
dCkpOworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3Jj
KSk7CisgICAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyAmJiBzcmMtPnByaXYt
PnNpemUgPiAwKSB7CisgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1ZXJ5LCBm
b3JtYXQsIHNyYy0+cHJpdi0+c2l6ZSk7CiAgICAgICAgICAgICByZXN1bHQgPSBUUlVFOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9RVUVSWV9VUkk6IHsK
LSAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHdlYmtpdFNyYy0+cHJpdi0+dXJpKTsK
KyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwor
ICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgc3JjLT5wcml2LT51cmkpOwogICAgICAg
ICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01OTAsNyArNjcxLDEy
IEBAIGNvbnN0IGdjaGFyKiBjb25zdCogd2ViS2l0V2ViU3JjR2V0UHJvdG9jb2xzKEdUeXBlKQog
CiBzdGF0aWMgZ2NoYXIqIHdlYktpdFdlYlNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVy
KQogewotICAgIHJldHVybiBnX3N0cmR1cChXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKS0+cHJpdi0+
dXJpKTsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpOwor
ICAgIGdjaGFyKiByZXQ7CisKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VU
X0xPQ0soc3JjKSk7CisgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpOworICAgIHJl
dHVybiByZXQ7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJ
SGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiogZXJyb3IpCkBAIC02
MDMsNiArNjg5LDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RVUklI
YW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXIKICAgICAgICAgcmV0dXJuIEZB
TFNFOwogICAgIH0KIAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKwogICAgIGdfZnJlZShwcml2LT51cmkpOwogICAgIHByaXYtPnVyaSA9IDA7CiAK
QEAgLTYzNCw3ICs3MjIsMTIgQEAgc3RhdGljIGdjaGFyKiogd2ViS2l0V2ViU3JjR2V0UHJvdG9j
b2xzKHZvaWQpCiAKIHN0YXRpYyBjb25zdCBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVS
SUhhbmRsZXIqIGhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JD
KGhhbmRsZXIpLT5wcml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMoaGFuZGxlcik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnBy
aXYtPnVyaSk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdl
YlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQpAQCAt
NjQ3LDYgKzc0MCw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0VVJJ
SGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSkKICAgICAgICAgcmV0dXJuIEZBTFNF
OwogICAgIH0KIAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKwogICAgIGdfZnJlZShwcml2LT51cmkpOwogICAgIHByaXYtPnVyaSA9IDA7CiAKQEAg
LTY4MSwxMiArNzc2LDE3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1h
aW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcoZmFs
c2UpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsK
KyAgICAvLyBhbHJlYWR5IHN0b3BwZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpCisgICAg
ICAgIHJldHVybiBGQUxTRTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHByaXYt
PnBhdXNlZCA9IEZBTFNFOwogICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwotICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNyYyk7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgaWYgKHByaXYtPmNs
aWVudCkKKyAgICAgICAgcHJpdi0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKICAg
ICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTY5NywyNyArNzk3LDI5IEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY05lZWREYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1
c2VyRGF0YSkKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6ICV1
IiwgbGVuZ3RoKTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+bmVlZERh
dGFJRCB8fCAhcHJpdi0+cGF1c2VkKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcml2LT5uZWVkRGF0YUlEID0gZ190aW1l
b3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRX
ZWJTcmNOZWVkRGF0YU1haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5
KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHBy
aXYtPm5lZWREYXRhSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1Nv
dXJjZUZ1bmMpIHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMp
LCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwogfQogCiBzdGF0aWMgZ2Jvb2xl
YW4gd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+cmVz
b3VyY2UtPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihH
U1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlm
ICghcHJpdi0+ZW5vdWdoRGF0YUlEKQorICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBHU1Rf
T0JKRUNUX0xPQ0soc3JjKTsKICAgICBwcml2LT5wYXVzZWQgPSBUUlVFOwogICAgIHByaXYtPmVu
b3VnaERhdGFJRCA9IDA7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICBsb2NrZXIu
dW5sb2NrKCk7CiAKKyAgICBpZiAocHJpdi0+Y2xpZW50KQorICAgICAgICBwcml2LT5jbGllbnQt
PnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC03Mjgs
MTkgKzgzMCwyNSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IoR3N0QXBw
U3JjKiwgZ3BvaW50ZXIgdXNlckRhdGEpCiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIkhh
dmUgZW5vdWdoIGRhdGEiKTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdNdXRl
eExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+
ZW5vdWdoRGF0YUlEIHx8IHByaXYtPnBhdXNlZCkgewotICAgICAgICBHU1RfT0JKRUNUX1VOTE9D
SyhzcmMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdi0+ZW5vdWdoRGF0YUlE
ID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5j
KSB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rl
c3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7CisgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlf
REVGQVVMVCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiLCBnc3Rf
b2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwogfQog
CiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla01haW5DYihXZWJLaXRXZWJTcmMqIHNy
YykKIHsKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywgdHJ1ZSk7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NU
X09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3BwZWQKKyAgICBpZiAo
IXByaXYtPnNlZWtJRCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGxvY2tlci51bmxvY2so
KTsKKworICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKICAgICB3ZWJLaXRXZWJTcmNTdGFydChz
cmMpOwogCiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtNzUyLDYgKzg2MCw3IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBn
cG9pbnRlciB1c2VyCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
IAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdfR1VJ
TlQ2NF9GT1JNQVQsIG9mZnNldCk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNU
X0dFVF9MT0NLKHNyYykpOwogICAgIGlmIChvZmZzZXQgPT0gcHJpdi0+b2Zmc2V0ICYmIHByaXYt
PnJlcXVlc3RlZE9mZnNldCA9PSBwcml2LT5vZmZzZXQpCiAgICAgICAgIHJldHVybiBUUlVFOwog
CkBAIC03NjEsMTEwICs4NzAsMTQwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVr
RGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiAgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJEb2luZyByYW5nZS1yZXF1ZXN0IHNlZWsiKTsKICAgICBwcml2
LT5yZXF1ZXN0ZWRPZmZzZXQgPSBvZmZzZXQ7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
ICAgICBpZiAocHJpdi0+c2Vla0lEKQogICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+c2Vl
a0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9E
RUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IsIGdzdF9vYmpl
Y3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0gICAgR1NU
X09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAKKyAgICBwcml2LT5zZWVrSUQgPSBnX2lkbGVfYWRk
X2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1NlZWtN
YWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91
bnJlZik7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHZvaWQgd2ViS2l0V2ViU3JjU2V0TWVkaWFQ
bGF5ZXIoV2ViS2l0V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIpCiB7
CiAgICAgQVNTRVJUKHBsYXllcik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNU
X0dFVF9MT0NLKHNyYykpOwogICAgIHNyYy0+cHJpdi0+cGxheWVyID0gcGxheWVyOwogfQogCi1T
dHJlYW1pbmdDbGllbnQ6OlN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYykgOiBtX3Ny
YyhzcmMpCitTdHJlYW1pbmdDbGllbnQ6OlN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNy
YykKKyAgICA6IG1fc3JjKGFkb3B0R1JlZihzdGF0aWNfY2FzdDxHc3RFbGVtZW50Kj4oZ3N0X29i
amVjdF9yZWYoc3JjKSkpKQogewotCiB9CiAKIFN0cmVhbWluZ0NsaWVudDo6flN0cmVhbWluZ0Ns
aWVudCgpCiB7Cit9CisKK2NoYXIqIFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcihz
aXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQoreworICAgIFdlYktpdFdl
YlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIFdlYktpdFdlYlNy
Y1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKKyAgICBBU1NFUlQoIXByaXYtPmJ1ZmZlcik7
CisKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhyZXF1
ZXN0ZWRTaXplKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgbWFwR3N0QnVmZmVy
KGJ1ZmZlcik7CisjZW5kaWYKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9H
RVRfTE9DSyhzcmMpKTsKKyAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVyKTsKKyAg
ICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICBhY3R1YWxTaXplID0gZ2V0R3N0QnVmZmVyU2l6ZShi
dWZmZXIpOworICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihidWZmZXIpOwogfQog
Ci12b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBTdHJlYW1p
bmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5wcml2
OworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOwor
ICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBHU1RfREVC
VUdfT0JKRUNUKHNyYywgIlJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCkpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlJlY2VpdmVkIHJlc3Bv
bnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOworICAgIEdNdXRleExvY2tlciBs
b2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKIAogICAgIC8vIElmIHdlIHNlZWtlZCB3
ZSBuZWVkIDIwNiA9PSBQQVJUSUFMX0NPTlRFTlQKICAgICBpZiAocHJpdi0+cmVxdWVzdGVkT2Zm
c2V0ICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjA2KSB7Ci0gICAgICAgIEdTVF9F
TEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAoMCkpOworICAgICAgICBs
b2NrZXIudW5sb2NrKCk7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0Us
IFJFQUQsICgwKSwgKDApKTsKICAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShwcml2
LT5hcHBzcmMpOwotICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKG1fc3JjLCBmYWxzZSk7CisgICAg
ICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGxvbmcgbG9uZyBsZW5ndGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKLSAg
ICBpZiAobGVuZ3RoID4gMCkgeworICAgIGlmIChsZW5ndGggPiAwKQogICAgICAgICBsZW5ndGgg
Kz0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShw
cml2LT5hcHBzcmMsIGxlbmd0aCk7Ci0KLSNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAg
ICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKLSAgICAgICAgICAgIGdzdF9zZWdtZW50X3Nl
dF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNlZ21lbnQsIEdTVF9GT1JN
QVRfQllURVMsIGxlbmd0aCk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2Uo
R1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBzcmMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0g
ICAgfQogCiAgICAgcHJpdi0+c2l6ZSA9IGxlbmd0aCA+PSAwID8gbGVuZ3RoIDogMDsKICAgICBw
cml2LT5zZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJub25lIiwg
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQtUmFuZ2VzIikudXRmOCgpLmRhdGEoKSk7
CiAKLSAgICAvLyBpY2VjYXN0IHN0dWZmCi0gICAgU3RyaW5nIHZhbHVlID0gcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOwotICAgICAgICBnaW50NjQgaWN5TWV0YUludCA9
IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5TWV0
YUludCA+IDApIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRl
cnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7Ci0KLSAgICAgICAg
ICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIEdzdFRhZ0xpc3Qq
IHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCk7CiAjZWxzZQogICAgIEdzdFRhZ0xpc3Qq
IHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3KCk7CiAjZW5kaWYKLSAgICB2YWx1ZSA9IHJlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKKyAgICBTdHJpbmcgdmFsdWUgPSByZXNwb25z
ZS5odHRwSGVhZGVyRmllbGQoImljeS1uYW1lIik7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgICAgICBwcml2LT5pcmFk
aW9OYW1lID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0
X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFkaW8tbmFtZSIpOworICAgICAgICBnX29iamVj
dF9ub3RpZnkoR19PQkpFQ1Qoc3JjKSwgImlyYWRpby1uYW1lIik7CiAgICAgICAgIGdzdF90YWdf
bGlzdF9hZGQodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX09SR0FOSVpBVElP
TiwgcHJpdi0+aXJhZGlvTmFtZSwgTlVMTCk7CiAgICAgfQogICAgIHZhbHVlID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJpY3ktZ2VucmUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkg
ewogICAgICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvR2VucmUpOwogICAgICAgICBwcml2LT5pcmFk
aW9HZW5yZSA9IGdfc3RyZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnX29iamVj
dF9ub3RpZnkoR19PQkpFQ1QobV9zcmMpLCAiaXJhZGlvLWdlbnJlIik7CisgICAgICAgIGdfb2Jq
ZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAiaXJhZGlvLWdlbnJlIik7CiAgICAgICAgIGdzdF90
YWdfbGlzdF9hZGQodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX0dFTlJFLCBw
cml2LT5pcmFkaW9HZW5yZSwgTlVMTCk7CiAgICAgfQogICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKCJpY3ktdXJsIik7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb1VybCk7CiAgICAgICAgIHByaXYtPmlyYWRpb1VybCA9
IGdfc3RyZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnX29iamVjdF9ub3RpZnko
R19PQkpFQ1QobV9zcmMpLCAiaXJhZGlvLXVybCIpOworICAgICAgICBnX29iamVjdF9ub3RpZnko
R19PQkpFQ1Qoc3JjKSwgImlyYWRpby11cmwiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0
YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfTE9DQVRJT04sIHByaXYtPmlyYWRp
b1VybCwgTlVMTCk7CiAgICAgfQogICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KCJpY3ktdGl0bGUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2Zy
ZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAgICAgICBwcml2LT5pcmFkaW9UaXRsZSA9IGdfc3Ry
ZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpF
Q1QobV9zcmMpLCAiaXJhZGlvLXRpdGxlIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09C
SkVDVChzcmMpLCAiaXJhZGlvLXRpdGxlIik7CiAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQodGFn
cywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJVExFLCBwcml2LT5pcmFkaW9UaXRs
ZSwgTlVMTCk7CiAgICAgfQogCisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgLy8gbm90aWZ5
IHNpemUvZHVyYXRpb24KKyAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICBnc3RfYXBwX3Ny
Y19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7CisKKyNpZm5kZWYgR1NUX0FQSV9WRVJT
SU9OXzEKKyAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKKyAgICAgICAgICAgIGdz
dF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNlZ21l
bnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9w
b3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKKyAgICAgICAgICAgICAgICBn
c3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBzcmMpLAorICAgICAg
ICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgfSBlbHNlCisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNy
YywgLTEpOworCisgICAgLy8gaWNlY2FzdCBzdHVmZgorICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7
CisgICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOworICAgICAgICBnaW50NjQgaWN5TWV0YUludCA9
IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7CisKKyAg
ICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5TWV0YUludCA+IDApIHsK
KyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdfVFlQ
RV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7CisKKyAgICAgICAgICAgIGdzdF9hcHBf
c3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKwor
ICAgIC8vIG5vdGlmeSB0YWdzCiAgICAgaWYgKGdzdF90YWdfbGlzdF9pc19lbXB0eSh0YWdzKSkK
ICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYodGFn
cyk7CkBAIC04NzIsMTQgKzEwMTEsMTcgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OnJlc3BvbnNl
UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVIKICAgICAg
ICAgZ3N0X3RhZ19saXN0X2ZyZWUodGFncyk7CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAgIG5v
dGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChtX3NyYyksIG1fc3JjLT5wcml2LT5zcmNwYWQs
IHRhZ3MpOworICAgICAgICBub3RpZnlHc3RUYWdzT25QYWQoR1NUX0VMRU1FTlQoc3JjKSwgcHJp
di0+c3JjcGFkLCB0YWdzKTsKIH0KIAotdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZl
ZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
Cit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3Jj
LT5wcml2OworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0
KCkpOworICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBH
TXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAKLSAgICBHU1Rf
TE9HX09CSkVDVChtX3NyYywgIkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIHByaXYtPmJ1ZmZlciA/
IGdldEdzdEJ1ZmZlclNpemUocHJpdi0+YnVmZmVyLmdldCgpKSA6IGxlbmd0aCk7CisgICAgR1NU
X0xPR19PQkpFQ1Qoc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVyID8g
Z2V0R3N0QnVmZmVyU2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsKIAogICAgIEFT
U0VSVCghcHJpdi0+YnVmZmVyIHx8IGRhdGEgPT0gZ2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIocHJp
di0+YnVmZmVyLmdldCgpKSk7CiAKQEAgLTg4OCw4ICsxMDMwLDggQEAgdm9pZCBTdHJlYW1pbmdD
bGllbnQ6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIq
IGRhdGEsIGkKICAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVyLmdldCgpKTsKICNl
bmRpZgogCi0gICAgaWYgKHByaXYtPnNlZWtJRCB8fCByZXNvdXJjZSAhPSBwcml2LT5yZXNvdXJj
ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiU2VlayBpbiBwcm9ncmVzcywg
aWdub3JpbmcgZGF0YSIpOworICAgIGlmIChwcml2LT5zZWVrSUQpIHsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChzcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7CiAgICAg
ICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTA3
LDU3ICsxMDQ5LDE4MiBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgIHByaXYtPm9mZnNl
dCArPSBsZW5ndGg7CiAgICAgLy8gcHJpdi0+c2l6ZSA9PSAwIGlmIHJlY2VpdmVkIGxlbmd0aCBv
biBkaWRSZWNlaXZlUmVzcG9uc2UgPCAwLgogICAgIGlmIChwcml2LT5zaXplID4gMCAmJiBwcml2
LT5vZmZzZXQgPiBwcml2LT5zaXplKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMs
ICJVcGRhdGluZyBpbnRlcm5hbCBzaXplIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHRvICUi
IEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUsIHByaXYtPm9mZnNldCk7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1Qoc3JjLCAiVXBkYXRpbmcgaW50ZXJuYWwgc2l6ZSBmcm9tICUiIEdfR1VJ
TlQ2NF9GT1JNQVQgIiB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBwcml2LT5zaXplLCBwcml2LT5v
ZmZzZXQpOwogICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIHByaXYt
Pm9mZnNldCk7CiAgICAgICAgIHByaXYtPnNpemUgPSBwcml2LT5vZmZzZXQ7CiAgICAgfQogICAg
IEdTVF9CVUZGRVJfT0ZGU0VUX0VORChwcml2LT5idWZmZXIuZ2V0KCkpID0gcHJpdi0+b2Zmc2V0
OwogCisgICAgbG9ja2VyLnVubG9jaygpOworCiAgICAgR3N0Rmxvd1JldHVybiByZXQgPSBnc3Rf
YXBwX3NyY19wdXNoX2J1ZmZlcihwcml2LT5hcHBzcmMsIHByaXYtPmJ1ZmZlci5sZWFrUmVmKCkp
OwogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAm
JiByZXQgIT0gR1NUX0ZMT1dfRU9TKQogI2Vsc2UKICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09L
ICYmIHJldCAhPSBHU1RfRkxPV19VTkVYUEVDVEVEKQogI2VuZGlmCi0gICAgICAgIEdTVF9FTEVN
RU5UX0VSUk9SKG1fc3JjLCBDT1JFLCBGQUlMRUQsICgwKSwgKDApKTsKKyAgICAgICAgR1NUX0VM
RU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBGQUlMRUQsICgwKSwgKDApKTsKIH0KIAotY2hhciogU3Ry
ZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXpl
X3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQordm9pZCBTdHJlYW1pbmdDbGll
bnQ6OmhhbmRsZU5vdGlmeUZpbmlzaGVkKCkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NS
QyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJp
djsKIAotICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkhhdmUgRU9TIik7CiAKLSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3
X2FuZF9hbGxvYyhyZXF1ZXN0ZWRTaXplKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgaWYgKCFwcml2LT5zZWVrSUQpIHsKKyAgICAgICAg
bG9ja2VyLnVubG9jaygpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYt
PmFwcHNyYyk7CisgICAgfQorfQogCi0jaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICBtYXBH
c3RCdWZmZXIoYnVmZmVyKTsKLSNlbmRpZgorQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
OkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBDYWNoZWRS
ZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKKyAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCit7CisgICAgQ2FjaGVkUmVzb3VyY2VS
ZXF1ZXN0IGNhY2hlUmVxdWVzdChyZXF1ZXN0LCBSZXNvdXJjZUxvYWRlck9wdGlvbnMoU2VuZENh
bGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIERvTm90QnVmZmVyRGF0YSwgRG9Ob3RBbGxvd1N0
b3JlZENyZWRlbnRpYWxzLCBEb05vdEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3JlZGVudGlhbHMs
IERvU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0aW9uc0ZvclR5cGUpKTsK
KyAgICBtX3Jlc291cmNlID0gcmVzb3VyY2VMb2FkZXItPnJlcXVlc3RSYXdSZXNvdXJjZShjYWNo
ZVJlcXVlc3QpOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5hZGRD
bGllbnQodGhpcyk7Cit9CiAKLSAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVyKTsK
K0NhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQoKQoreworICAgIGlmIChtX3Jlc291cmNlKSB7CisgICAgICAgIG1fcmVzb3VyY2UtPnJl
bW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgfQorfQogCi0g
ICAgYWN0dWFsU2l6ZSA9IGdldEdzdEJ1ZmZlclNpemUoYnVmZmVyKTsKLSAgICByZXR1cm4gZ2V0
R3N0QnVmZmVyRGF0YVBvaW50ZXIoYnVmZmVyKTsKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6OmxvYWRGYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9yZXNvdXJjZTsK
IH0KIAotdm9pZCBTdHJlYW1pbmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSkKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9
IG1fc3JjLT5wcml2OworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5z
ZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cit9CisKK2NoYXIqIENhY2hlZFJlc291cmNlU3RyZWFt
aW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3Qg
cmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQoreworICAgIHJldHVybiBjcmVhdGVS
ZWFkQnVmZmVyKHJlcXVlc3RlZFNpemUsIGFjdHVhbFNpemUpOworfQogCit2b2lkIENhY2hlZFJl
c291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaGFuZGxlUmVzcG9uc2VS
ZWNlaXZlZChyZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQ6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpCit7CisgICAgaGFuZGxlRGF0YVJlY2VpdmVkKGRhdGEsIGxlbmd0aCk7Cit9CisKK3Zv
aWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKK3sKICAgICBpZiAocmVzb3VyY2UtPmxvYWRGYWlsZWRPckNhbmNl
bGVkKCkpIHsKKyAgICAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3Ny
Yy5nZXQoKSk7CisKICAgICAgICAgaWYgKCFyZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkgewogICAg
ICAgICAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IgPSByZXNvdXJjZS0+cmVzb3VyY2VF
cnJvcigpOwotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYywgIkhhdmUgZmFpbHVy
ZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBGQUlMRUQsICgiJXMi
LCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAoMCkpOworICAg
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJIYXZlIGZhaWx1cmU6ICVzIiwgZXJyb3Iu
bG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEdTVF9F
TEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXpl
ZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CiAgICAgICAgIH0KLSAgICAgICAg
Z3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+cHJpdi0+YXBwc3JjKTsKKyAgICAgICAg
Z3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShzcmMtPnByaXYtPmFwcHNyYyk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiSGF2ZSBFT1MiKTsK
KyAgICBoYW5kbGVOb3RpZnlGaW5pc2hlZCgpOworfQogCi0gICAgaWYgKCFwcml2LT5zZWVrSUQp
Ci0gICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0obV9zcmMtPnByaXYtPmFwcHNyYyk7
CitSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
KyAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCit7CisgICAgbV9yZXNvdXJjZSA9IFJlc291cmNl
SGFuZGxlOjpjcmVhdGUoMCAvKmNvbnRleHQqLywgcmVxdWVzdCwgdGhpcywgZmFsc2UsIGZhbHNl
KTsKK30KKworUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0
cmVhbWluZ0NsaWVudCgpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNv
dXJjZS0+Y2FuY2VsKCk7CisgICAgICAgIG1fcmVzb3VyY2UucmVsZWFzZSgpOworICAgICAgICBt
X3Jlc291cmNlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQ6OmxvYWRGYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9yZXNvdXJjZTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyhi
b29sIGRlZmVycykKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJjZS0+
c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworfQorCitjaGFyKiBSZXNvdXJjZUhhbmRsZVN0cmVh
bWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXplLCBz
aXplX3QmIGFjdHVhbFNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlYWRCdWZmZXIocmVxdWVz
dGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQoreworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3Ry
ZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBoYW5kbGVSZXNwb25zZVJlY2VpdmVk
KHJlc3BvbnNlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlk
UmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
LCBpbnQpCit7CisgICAgaGFuZGxlRGF0YVJlY2VpdmVkKGRhdGEsIGxlbmd0aCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3Vy
Y2VIYW5kbGUqLCBkb3VibGUpCit7CisgICAgaGFuZGxlTm90aWZ5RmluaXNoZWQoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIFdlYktpdFdlYlNyYyogc3Jj
ID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworCisgICAgR1NUX0VSUk9SX09CSkVDVChz
cmMsICJIYXZlIGZhaWx1cmU6ICVzIiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBGQUlMRUQs
ICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAoMCkp
OworICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oc3JjLT5wcml2LT5hcHBzcmMpOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3YXNCbG9ja2VkKFJlc291cmNl
SGFuZGxlKikKK3sKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3Jj
LmdldCgpKTsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNU
KHNyYywgIlJlcXVlc3Qgd2FzIGJsb2NrZWQiKTsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIo
R1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICB1cmkuc2V0KGdfc3RyZHVwKHNyYy0+cHJp
di0+dXJpKSk7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgR1NUX0VMRU1FTlRfRVJST1Io
c3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkFjY2VzcyB0byBcIiVzXCIgd2FzIGJsb2NrZWQi
LCB1cmkuZ2V0KCkpLCAoMCkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICBXZWJLaXRXZWJTcmMq
IHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKyAgICBHT3duUHRyPGdjaGFyPiB1
cmk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkNhbm5vdCBzaG93IFVSTCIpOworCisg
ICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHVy
aS5zZXQoZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKKyAgICBsb2NrZXIudW5sb2NrKCk7CisK
KyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQ2FuJ3Qg
c2hvdyBcIiVzXCIiLCB1cmkuZ2V0KCkpLCAoMCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUikKLS0gCjEuOC4xLjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209131</attachid>
            <date>2013-08-19 15:19:34 -0700</date>
            <delta_ts>2013-08-23 10:18:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>45223</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA0NDBmMTgwNjA0ZDUxMWUyMzkxNDVmM2FmZjRkNjliN2UwOTdlMTE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMTkgQXVnIDIwMTMg
MTg6MDM6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIIDEvMl0gTWFrZSBzdXJlIGdzdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZQogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNTM1MgoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpHU3RyZWFt
ZXIgc291cmNlIGVsZW1lbnQgbWF5IGJlIGNyZWF0ZWQgYnkgYW55IGdzdHJlYW1lciBlbGVtZW50
IG9uIGFueSB0aHJlYWQgYnkgY2FsbGluZwpnc3RfZWxlbWVudF9tYWtlX2Zyb21fdXJpIHdpdGgg
dGhlIFVSSXMgaGFuZGxlZCBieSB0aGUgc291cmNlIGVsZW1lbnQuClRoaXMgcGF0Y2ggbWFrZXMg
c3VyZSB0aGUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlIHRvIGF2b2lk
IGlzc3VlcyB3aXRoIGl0CmJlaW5nIGNyZWF0ZWQgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCgpB
bHNvIGFkZCBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IHNpbXBsaWZpZXMgbG9ja2luZyBhbmQgdW5s
b2NraW5nIGEgR011dGV4LgoKKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmNwcDoKKHdlYmtpdF93ZWJfc3JjX2luaXQpOgood2ViS2l0V2ViU3Jj
RGlzcG9zZSk6Cih3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6Cih3ZWJLaXRXZWJTcmNTZXRQcm9wZXJ0
eSk6Cih3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eSk6CihyZW1vdmVUaW1lb3V0U291cmNlcyk6Cih3
ZWJLaXRXZWJTcmNTdG9wKToKKHdlYktpdFdlYlNyY1N0YXJ0KToKKHdlYktpdFdlYlNyY0NoYW5n
ZVN0YXRlKToKKHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6Cih3ZWJLaXRXZWJTcmNHZXRV
cmkpOgood2ViS2l0V2ViU3JjU2V0VXJpKToKKHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKToK
KHdlYktpdFdlYlNyY05lZWREYXRhQ2IpOgood2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYik6
Cih3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IpOgood2ViS2l0V2ViU3JjU2Vla01haW5DYik6Cih3
ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKToKKHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKFN0
cmVhbWluZ0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KToKKFN0cmVhbWluZ0NsaWVudDo6flN0cmVh
bWluZ0NsaWVudCk6CihTdHJlYW1pbmdDbGllbnQ6OmNyZWF0ZVJlYWRCdWZmZXIpOgooU3RyZWFt
aW5nQ2xpZW50OjpoYW5kbGVSZXNwb25zZVJlY2VpdmVkKToKKFN0cmVhbWluZ0NsaWVudDo6aGFu
ZGxlRGF0YVJlY2VpdmVkKToKKFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlTm90aWZ5RmluaXNoZWQp
OgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OkNhY2hlZFJlc291cmNlU3RyZWFtaW5n
Q2xpZW50KToKKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGYWls
ZWQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnNldERlZmVyc0xvYWRpbmcpOgoo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmdldE9yQ3JlYXRlUmVhZEJ1ZmZlcik6CihD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZCk6CihDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKToKKENhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50Ojpub3RpZnlGaW5pc2hlZCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0Ns
aWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgooUmVzb3VyY2VIYW5kbGVTdHJl
YW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CihSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
Ojp3aWxsU2VuZFJlcXVlc3QpOgpNYWtlIGVsZW1lbnQgdGhyZWFkLXNhZmUsIGFkZCBzdXBwb3J0
IHRvIHVzZSB0aGUgZWxlbWVudCB3aXRob3V0IGEgcGxheWVyIGFzc29jaWF0ZWQgKGUuZy4KdGhl
IERBU0ggcGx1Z2luIHVzaW5nIHRoZSB3ZWJraXRzcmMgdG8gZG93bmxvYWQgZnJhZ21lbnRzKSwg
dXNlIEdNdXRleExvY2tlciB0byBzaW1wbGlmeQpsb2NrcyBhbmQgb3RoZXIgZ2VuZXJhbCBpbXBy
b3ZlbWVudHMuCgoqIEdOVW1ha2VmaWxlLmxpc3QuYW06Ciogd3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmg6IEFkZGVkLgooV2ViQ29yZTo6R011dGV4TG9ja2VyOjpHTXV0ZXhMb2NrZXIpOgooV2Vi
Q29yZTo6R011dGV4TG9ja2VyOjp+R011dGV4TG9ja2VyKToKKFdlYkNvcmU6OkdNdXRleExvY2tl
cjo6bG9jayk6CihXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OnVubG9jayk6Ci0tLQogU291cmNlL1dU
Ri9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKwogU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogU291
cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCAgICAgICAgICAgICAgfCAgNzIgKysr
CiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2
MiArKysKIC4uLi9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCAgICAgICAg
IHwgNTg1ICsrKysrKysrKysrKysrKy0tLS0tLQogNSBmaWxlcyBjaGFuZ2VkLCA1NzcgaW5zZXJ0
aW9ucygrKSwgMTU5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNiNDM3NzkuLmI3YTdiZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTMtMDgtMTkgIEFuZHJlIE1vcmVpcmEgTWFnYWxoYWVzICAgPGFu
ZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CisKKyAgICAgICAgW2dzdHJlYW1lcl0gTWFr
ZSBzdXJlIGdzdHJlYW1lciBzb3VyY2UgZWxlbWVudCBpcyB0aHJlYWQtc2FmZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNvbnZlbmllbmNlIGNs
YXNzIHRoYXQgc2ltcGxpZmllcyBsb2NraW5nIGFuZCB1bmxvY2tpbmcgYSBHTXV0ZXguCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIHd0Zi9nb2JqZWN0L0dNdXRl
eExvY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6R011dGV4
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6fkdNdXRleExvY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R011dGV4TG9ja2VyOjp1bmxvY2spOgorCiAyMDEzLTA4LTExICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFr
ZSBkaXN0Y2hlY2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZTQ1ZGVjNS4uOThlNjk5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
VEYvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjA5LDYgKzIwOSw3IEBAIHd0Zl9zb3VyY2VzICs9
IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9kdG9hL3N0cnRvZC5jYyBcCiAgICAgU291cmNlL1dURi93
dGYvZHRvYS9zdHJ0b2QuaCBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS91dGlscy5oIFwKKyAg
ICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oIFwKICAgICBTb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dPd25QdHIuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dP
d25QdHIuaCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oIGIvU291cmNlL1dU
Ri93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hYmVhMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ29iamVj
dC9HTXV0ZXhMb2NrZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxMyBDb2xsYWJvcmEgTHRkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEdNdXRleExvY2tlcl9oCisj
ZGVmaW5lIEdNdXRleExvY2tlcl9oCisKKyNpZiBVU0UoR0xJQikKKworI2luY2x1ZGUgPGdsaWIu
aD4KKworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR011dGV4TG9ja2VyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTXV0ZXhMb2NrZXIpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKworcHVibGljOgorICAgIGlubGluZSBHTXV0ZXhMb2NrZXIoKQorICAgICAgICA6
IG1fbXV0ZXgoMCkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIGV4cGxpY2l0IEdNdXRleExv
Y2tlcihHTXV0ZXggKm11dGV4KQorICAgICAgICA6IG1fbXV0ZXgoMCkKKyAgICB7CisgICAgICAg
IGxvY2sobXV0ZXgpOworICAgIH0KKworICAgIGlubGluZSB+R011dGV4TG9ja2VyKCkgeyB1bmxv
Y2soKTsgfQorCisgICAgaW5saW5lIHZvaWQgbG9jayhHTXV0ZXggKm11dGV4KQorICAgIHsKKyAg
ICAgICAgbV9tdXRleCA9IG11dGV4OworICAgICAgICBpZiAobV9tdXRleCkKKyAgICAgICAgICAg
IGdfbXV0ZXhfbG9jayhtX211dGV4KTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCB1bmxvY2so
KQorICAgIHsKKyAgICAgICAgaWYgKG1fbXV0ZXgpIHsKKyAgICAgICAgICAgIGdfbXV0ZXhfdW5s
b2NrKG1fbXV0ZXgpOworICAgICAgICAgICAgbV9tdXRleCA9IDA7CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgR011dGV4KiBtX211dGV4OworfTsKKworfQorCisjZW5kaWYgLy8g
VVNFKEdMSUIpCisKKyNlbmRpZiAvLyBHTXV0ZXhMb2NrZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGViMGZm
NGEuLmI0ZWYzOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NSBAQAorMjAxMy0wOC0xOSAgQW5k
cmUgTW9yZWlyYSBNYWdhbGhhZXMgICA8YW5kcmUubWFnYWxoYWVzQGNvbGxhYm9yYS5jby51az4K
KworICAgICAgICBbZ3N0cmVhbWVyXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJjZSBlbGVtZW50
IGlzIHRocmVhZC1zYWZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTUzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBHU3RyZWFtZXIgc291cmNlIGVsZW1lbnQgbWF5IGJlIGNyZWF0ZWQgYnkgYW55IGdz
dHJlYW1lciBlbGVtZW50IG9uIGFueSB0aHJlYWQgYnkgY2FsbGluZworICAgICAgICBnc3RfZWxl
bWVudF9tYWtlX2Zyb21fdXJpIHdpdGggdGhlIFVSSXMgaGFuZGxlZCBieSB0aGUgc291cmNlIGVs
ZW1lbnQuCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgc3VyZSB0aGUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGl0CisgICAgICAg
IGJlaW5nIGNyZWF0ZWQgb3V0c2lkZSB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKHdlYmtpdF93ZWJfc3JjX2luaXQpOgorICAgICAgICAod2ViS2l0V2ViU3JjRGlzcG9z
ZSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJLaXRXZWJT
cmNTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChyZW1vdmVUaW1lb3V0U291cmNlcyk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTdG9wKToK
KyAgICAgICAgKHdlYktpdFdlYlNyY1N0YXJ0KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0NoYW5n
ZVN0YXRlKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1F1ZXJ5V2l0aFBhcmVudCk6CisgICAgICAg
ICh3ZWJLaXRXZWJTcmNHZXRVcmkpOgorICAgICAgICAod2ViS2l0V2ViU3JjU2V0VXJpKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y05lZWREYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYik6Cisg
ICAgICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3Jj
U2Vla01haW5DYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKToKKyAgICAgICAg
KHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6
U3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6flN0cmVhbWluZ0Ns
aWVudCk6CisgICAgICAgIChTdHJlYW1pbmdDbGllbnQ6OmNyZWF0ZVJlYWRCdWZmZXIpOgorICAg
ICAgICAoU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVSZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAg
KFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFN0cmVhbWlu
Z0NsaWVudDo6aGFuZGxlTm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6OkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAgICAg
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmxvYWRGYWls
ZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnNldERlZmVyc0xv
YWRpbmcpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmdldE9yQ3Jl
YXRlUmVhZEJ1ZmZlcik6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6
cmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVu
dDo6ZGF0YVJlY2VpdmVkKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
Ojpub3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVu
dDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoUmVzb3VyY2VIYW5k
bGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAg
ICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6CisgICAgICAg
IChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAg
ICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVy
KToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3aWxsU2VuZFJlcXVl
c3QpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZp
bmlzaExvYWRpbmcpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRp
ZEZhaWwpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2Nr
ZWQpOgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dV
UkwpOgorICAgICAgICBNYWtlIGVsZW1lbnQgdGhyZWFkLXNhZmUsIGFkZCBzdXBwb3J0IHRvIHVz
ZSB0aGUgZWxlbWVudCB3aXRob3V0IGEgcGxheWVyIGFzc29jaWF0ZWQgKGUuZy4KKyAgICAgICAg
dGhlIERBU0ggcGx1Z2luIHVzaW5nIHRoZSB3ZWJraXRzcmMgdG8gZG93bmxvYWQgZnJhZ21lbnRz
KSwgdXNlIEdNdXRleExvY2tlciB0byBzaW1wbGlmeQorICAgICAgICBsb2NrcyBhbmQgb3RoZXIg
Z2VuZXJhbCBpbXByb3ZlbWVudHMuCisKIDIwMTMtMDgtMTIgIEFsbGFuIFNhbmRmZWxkIEplbnNl
biAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAgICAgICAgW1F0XSBBZGQgU3VwcG9ydCBm
b3IgY2FudmFzIGJsZW5kIG1vZGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwCmluZGV4IDBjYzU3NWUuLmFmZTgyYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zMSwzMiArMzEsOTIgQEAKICNpbmNsdWRlICJH
U3RyZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBz
cmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2lu
Zy1wbHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKKy8qIFByZW1pc3NlczoKKyAqIC0gd2Via2l0c3JjIG1heSBiZSBjcmVhdGVk
IGZyb20gYW55IHRocmVhZCBpbnNpZGUgZ3N0cmVhbWVyCisgKiAtIHdlYmtpdHNyYyBtYXkgYmUg
Y3JlYXRlZCB3aXRob3V0IGEgcGxheWVyIGludm9sdmVkIChlLmcuOiBkYXNoIGdzdHJlYW1lciBl
bGVtZW50CisgKiAgIGludGVybmFsbHkgZG93bmxvYWRpbmcgc3RyZWFtIGZyYWdtZW50cykKKyAq
IC0gc3RyZWFtaW5nIGNsaWVudCBob2xkcyByZWZlcmVuY2UgdG8gc3JjLCBzbyB0aGF0IHNyYyBp
cyBuZXZlciBkZWxldGVkIHdoaWxlIGNsaWVudCBleGlzdHMKKyAqIC0gaWYgdGhlIHNyYyBleGlz
dHMsIGFwcHNyYyBhbHNvIGV4aXN0cworICogLSBzdHJlYW1pbmcgY2xpZW50IGlzIGNyZWF0ZWQg
b24gc3RhcnQKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBpcyBkZWxldGVkIG9uIHN0b3AgYW5kIGNh
bmNlbHMgcmVzb3VyY2UKKyAqIC0gc3RyZWFtaW5nIGNsaWVudCBjYWxsYmFja3MgYXJlIGFsd2F5
cyBpbnZva2VkIGZyb20gbWFpbiB0aHJlYWQKKyAqLworCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAotY2xhc3MgU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIENhY2hlZFJhd1Jlc291cmNlQ2xp
ZW50IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJlYW1pbmdDbGllbnQpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKy8vIFN0cmVhbWluZ0NsaWVudCBiYXNlIGNsYXNzLgorY2xhc3Mg
U3RyZWFtaW5nQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0cmVhbWluZ0NsaWVudChX
ZWJLaXRXZWJTcmMqKTsKICAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50KCk7CiAKKyAg
ICAgICAgdmlydHVhbCBib29sIGxvYWRGYWlsZWQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpID0gMDsKKworICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgY2hhciogY3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90
JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCBoYW5kbGVSZXNwb25zZVJlY2VpdmVkKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBoYW5kbGVEYXRhUmVjZWl2ZWQoY29u
c3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgaGFuZGxlTm90aWZ5RmluaXNoZWQoKTsKKwor
ICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3JjOworfTsKKworY2xhc3MgQ2FjaGVkUmVz
b3VyY2VTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQsIHB1
YmxpYyBTdHJlYW1pbmdDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFJl
c291cmNlU3RyZWFtaW5nQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVi
bGljOgorICAgICAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMq
LCBDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAg
ICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpOworCisgICAgICAgIC8v
IFN0cmVhbWluZ0NsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIGJvb2wgbG9hZEZhaWxl
ZCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisKICAgICBw
cml2YXRlOgotICAgICAgICAvLyBDYWNoZWRSZXNvdXJjZUNsaWVudAotICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJj
ZSosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNo
ZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICAgICAgdmlydHVhbCBjaGFyKiBnZXRPckNyZWF0ZVJl
YWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBh
Y3R1YWxTaXplKTsKKyAgICAgICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQgdmlydHVhbCBtZXRo
b2RzLgorICAgICAgICBjaGFyKiBnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2Uq
LCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9p
ZCByZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNo
YXIqLCBpbnQpOworICAgICAgICB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7
CisKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IG1fcmVz
b3VyY2U7Cit9OwogCi0gICAgICAgIFdlYktpdFdlYlNyYyogbV9zcmM7CitjbGFzcyBSZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVi
bGljIFN0cmVhbWluZ0NsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJs
aWM6CisgICAgICAgIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgICAgICB2aXJ0dWFsIH5SZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCgpOworCisgICAgICAgIC8vIFN0cmVhbWluZ0NsaWVudCB2aXJ0dWFs
IG1ldGhvZHMuCisgICAgICAgIGJvb2wgbG9hZEZhaWxlZCgpIGNvbnN0OworICAgICAgICB2b2lk
IHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBSZXNv
dXJjZUhhbmRsZUNsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIGNoYXIqIGdldE9yQ3Jl
YXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsK
KyAgICAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAg
ICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGlu
dCwgaW50KTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwg
ZG91YmxlIC8qZmluaXNoVGltZSovKTsKKyAgICAgICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2b2lkIHdhc0Jsb2NrZWQoUmVz
b3VyY2VIYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxl
Kik7CisKKyAgICAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlOwogfTsKIAog
I2RlZmluZSBXRUJLSVRfV0VCX1NSQ19HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9TUkMsIFdlYktpdFdlYlNyY1ByaXZh
dGUpKQpAQCAtNjgsNyArMTI4LDYgQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKICAg
ICBXZWJDb3JlOjpNZWRpYVBsYXllciogcGxheWVyOwogCiAgICAgU3RyZWFtaW5nQ2xpZW50KiBj
bGllbnQ7Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlc291
cmNlOwogCiAgICAgZ3VpbnQ2NCBvZmZzZXQ7CiAgICAgZ3VpbnQ2NCBzaXplOwpAQCAtNzcsNiAr
MTM2LDggQEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKIAogICAgIGd1aW50NjQgcmVx
dWVzdGVkT2Zmc2V0OwogCisgICAgZ3VpbnQgc3RhcnRJRDsKKyAgICBndWludCBzdG9wSUQ7CiAg
ICAgZ3VpbnQgbmVlZERhdGFJRDsKICAgICBndWludCBlbm91Z2hEYXRhSUQ7CiAgICAgZ3VpbnQg
c2Vla0lEOwpAQCAtMTI5LDggKzE5MCw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWRE
YXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSk7CiBzdGF0
aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IoR3N0QXBwU3JjKiwgZ3BvaW50ZXIgdXNl
ckRhdGEpOwogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3Jj
KiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXJEYXRhKTsKIAotc3RhdGljIHZvaWQgd2Vi
S2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqLCBib29sKTsKLQogc3RhdGljIEdzdEFwcFNyY0Nh
bGxiYWNrcyBhcHBzcmNDYWxsYmFja3MgPSB7CiAgICAgd2ViS2l0V2ViU3JjTmVlZERhdGFDYiwK
ICAgICB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IsCkBAIC0xODQsNyArMjQzLDcgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdChXZWJLaXRXZWJTcmNDbGFzcyoga2xhc3Mp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJHZW5yZSBvZiB0aGUgc3RyZWFtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9SRUFEQUJM
RSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShva2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0lSQURJT19VUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKCJpcmFkaW8tdXJsIiwKQEAgLTIyMiw4ICsyODEsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdlYlNyYyogc3JjKQogCiAgICAgc3Jj
LT5wcml2ID0gcHJpdjsKIAotICAgIHByaXYtPmNsaWVudCA9IG5ldyBTdHJlYW1pbmdDbGllbnQo
c3JjKTsKLQogICAgIHByaXYtPmFwcHNyYyA9IEdTVF9BUFBfU1JDKGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgiYXBwc3JjIiwgMCkpOwogICAgIGlmICghcHJpdi0+YXBwc3JjKSB7CiAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSBhcHBzcmMiKTsKQEAgLTI3
Miw3ICszMjksOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3NyY19pbml0KFdlYktpdFdlYlNy
Yyogc3JjKQogICAgIGlmIChwcml2LT5oYXZlQXBwU3JjMjcpCiAgICAgICAgIGdfb2JqZWN0X3Nl
dChwcml2LT5hcHBzcmMsICJtaW4tcGVyY2VudCIsIDIwLCBOVUxMKTsKIAotICAgIHdlYktpdFdl
YlNyY1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBw
c3JjLCAwKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKIH0K
IAogc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCkBAIC0y
ODAsMTMgKzMzOCw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09iamVjdCog
b2JqZWN0KQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2JqZWN0KTsK
ICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgaWYgKHBy
aXYtPmJ1ZmZlcikgewotI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgICAgIHVubWFwR3N0
QnVmZmVyKHByaXYtPmJ1ZmZlci5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgcHJpdi0+YnVmZmVy
LmNsZWFyKCk7Ci0gICAgfQotCiAgICAgcHJpdi0+cGxheWVyID0gMDsKIAogICAgIEdTVF9DQUxM
X1BBUkVOVChHX09CSkVDVF9DTEFTUywgZGlzcG9zZSwgKG9iamVjdCkpOwpAQCAtMjk3LDggKzM0
OCw2IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
ICAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2Vi
S2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIGRlbGV0ZSBwcml2LT5j
bGllbnQ7Ci0KICAgICBnX2ZyZWUocHJpdi0+dXJpKTsKIAogICAgIEdTVF9DQUxMX1BBUkVOVChH
X09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsKQEAgLTMxMCw5ICszNTksMTEgQEAg
c3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWlu
dCBwcm9wSUQsIGNvbnN0IEdWYWx1ZSoKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0g
c3JjLT5wcml2OwogCiAgICAgc3dpdGNoIChwcm9wSUQpIHsKLSAgICBjYXNlIFBST1BfSVJBRElP
X01PREU6CisgICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOiB7CisgICAgICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICAgICAgcHJpdi0+aXJhZGlv
TW9kZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwogICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgY2FzZSBQUk9QX0xPQ0FUSU9OOgogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAg
ICAgIGdzdF91cmlfaGFuZGxlcl9zZXRfdXJpKHJlaW50ZXJwcmV0X2Nhc3Q8R3N0VVJJSGFuZGxl
cio+KHNyYyksIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIDApOwpAQCAtMzMxLDYgKzM4Miw3
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMt
PnByaXY7CiAKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3Jj
KSk7CiAgICAgc3dpdGNoIChwcm9wSUQpIHsKICAgICBjYXNlIFBST1BfSVJBRElPX01PREU6CiAg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmlyYWRpb01vZGUpOwpAQCAt
MzU2LDE1ICs0MDgsMzggQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjR2V0UHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFsdWUKICAgICB9CiB9CiAKK3N0
YXRpYyB2b2lkIHJlbW92ZVRpbWVvdXRTb3VyY2VzKFdlYktpdFdlYlNyYyogc3JjKQoreworICAg
IFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBpZiAocHJpdi0+
c3RhcnRJRCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPnN0YXJ0SUQpOworICAgIHBy
aXYtPnN0YXJ0SUQgPSAwOworCisgICAgaWYgKHByaXYtPm5lZWREYXRhSUQpCisgICAgICAgIGdf
c291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKKyAgICBwcml2LT5uZWVkRGF0YUlEID0g
MDsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9v
bCBzZWVraW5nKQorICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCisgICAgICAgIGdfc291cmNl
X3JlbW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOworICAgIHByaXYtPmVub3VnaERhdGFJRCA9IDA7
CisKKyAgICBpZiAocHJpdi0+c2Vla0lEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+
c2Vla0lEKTsKKyAgICBwcml2LT5zZWVrSUQgPSAwOworfQorCisvLyBNdXN0IGJlIGNhbGxlZCBv
biBtYWluIHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQuCitzdGF0aWMgZ2Jvb2xlYW4g
d2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgaWYgKHByaXYtPnJlc291cmNlKSB7Ci0g
ICAgICAgIHByaXYtPnJlc291cmNlLT5yZW1vdmVDbGllbnQocHJpdi0+Y2xpZW50KTsKLSAgICAg
ICAgcHJpdi0+cmVzb3VyY2UgPSAwOwotICAgIH0KKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdT
VF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisKKyAgICBib29sIHNlZWtpbmcgPSBwcml2LT5zZWVr
SUQ7CisKKyAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgIHByaXYtPnN0b3BJRCA9
IDA7CiAKICAgICBpZiAocHJpdi0+Y2xpZW50KSB7CiAgICAgICAgIGRlbGV0ZSBwcml2LT5jbGll
bnQ7CkBAIC0zNzgsMjEgKzQ1Myw3IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2Vi
S2l0V2ViU3JjKiBzcmMsIGJvb2wgc2Vla2luZykKICAgICAgICAgcHJpdi0+YnVmZmVyLmNsZWFy
KCk7CiAgICAgfQogCi0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7Ci0gICAgaWYgKHByaXYtPm5l
ZWREYXRhSUQpCi0gICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5uZWVkRGF0YUlEKTsKLSAg
ICBwcml2LT5uZWVkRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5lbm91Z2hEYXRhSUQpCi0g
ICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5lbm91Z2hEYXRhSUQpOwotICAgIHByaXYtPmVu
b3VnaERhdGFJRCA9IDA7Ci0KLSAgICBpZiAocHJpdi0+c2Vla0lEKQotICAgICAgICBnX3NvdXJj
ZV9yZW1vdmUocHJpdi0+c2Vla0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSAwOwotCiAgICAgcHJp
di0+cGF1c2VkID0gRkFMU0U7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKIAogICAgIGdf
ZnJlZShwcml2LT5pcmFkaW9OYW1lKTsKICAgICBwcml2LT5pcmFkaW9OYW1lID0gMDsKQEAgLTQw
NiwzOSArNDY3LDUzIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3AoV2ViS2l0V2ViU3Jj
KiBzcmMsIGJvb2wgc2Vla2luZykKICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAg
IHByaXYtPmlyYWRpb1RpdGxlID0gMDsKIAotICAgIGlmIChwcml2LT5hcHBzcmMpIHsKLSAgICAg
ICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKLSAgICAgICAgaWYgKCFz
ZWVraW5nKQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAt
MSk7Ci0gICAgfQotCiAgICAgcHJpdi0+b2Zmc2V0ID0gMDsKICAgICBwcml2LT5zZWVrYWJsZSA9
IEZBTFNFOwogCiAgICAgaWYgKCFzZWVraW5nKSB7CiAgICAgICAgIHByaXYtPnNpemUgPSAwOwog
ICAgICAgICBwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSAwOworICAgICAgICBwcml2LT5wbGF5ZXIg
PSAwOworICAgIH0KKworICAgIGxvY2tlci51bmxvY2soKTsKKworICAgIGlmIChwcml2LT5hcHBz
cmMpIHsKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsKKyAg
ICAgICAgaWYgKCFzZWVraW5nKQorICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJp
di0+YXBwc3JjLCAtMSk7CiAgICAgfQogCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdG9w
cGVkIHJlcXVlc3QiKTsKKworICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIGJvb2wgd2Vi
S2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCisvLyBNdXN0IGJlIGNhbGxlZCBvbiBt
YWluIHRocmVhZCBhbmQgd2l0aCBvYmplY3QgdW5sb2NrZWQuCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjU3RhcnQoV2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJp
dmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09C
SkVDVF9HRVRfTE9DSyhzcmMpKTsKKworICAgIHByaXYtPnN0YXJ0SUQgPSAwOworCiAgICAgaWYg
KCFwcml2LT51cmkpIHsKICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJv
dmlkZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NrZXIudW5sb2NrKCk7
CisgICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwog
ICAgIH0KIAotICAgIEFTU0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xp
ZW50KTsKIAogICAgIEtVUkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVz
KHRydWUpOwotICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJy
ZXIoKSk7CisKKyAgICBpZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBS
ZWZlcnJlcihwcml2LT5wbGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAg
Ly8gTGV0J3MgZGlzYWJsZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdh
bnQgdGhlIHJlY2VpdmVkIHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzU0NCwyNSBAQCBzdGF0
aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVk
ZWQgdG8gdXNlIERMTkEgc3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFk
ZXJGaWVsZCgidHJhbnNmZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKSkgewotICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJl
cXVlc3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29u
dGVudCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90
QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VE
ZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJj
ZSA9IGxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlm
IChwcml2LT5yZXNvdXJjZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVh
bWluZ0NsaWVudChzcmMpOwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChw
cml2LT5jbGllbnQpOwotICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAg
ICBpZiAoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKSkKKyAgICAgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBDYWNoZWRS
ZXNvdXJjZVN0cmVhbWluZ0NsaWVudChzcmMsIGxvYWRlciwgcmVxdWVzdCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50KHNyYywgcmVxdWVzdCk7CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5yZXNvdXJjZSkgewot
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBzY2hlZHVsZSByZXNvdXJj
ZSBsb2FkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXByaXYtPmNsaWVudCB8
fCBwcml2LT5jbGllbnQtPmxvYWRGYWlsZWQoKSkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KHNyYywgIkZhaWxlZCB0byBzZXR1cCBzdHJlYW1pbmcgY2xpZW50Iik7CisgICAgICAgIGlmIChw
cml2LT5jbGllbnQpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwcml2LT5jbGllbnQ7CisgICAgICAg
ICAgICBwcml2LT5jbGllbnQgPSAwOworICAgICAgICB9CisgICAgICAgIGxvY2tlci51bmxvY2so
KTsKKyAgICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMpOworICAgICAgICByZXR1cm4gRkFMU0U7
CiAgICAgfQotCiAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJTdGFydGVkIHJlcXVlc3QiKTsK
LQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBGQUxTRTsKIH0KIAogc3RhdGljIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYlNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1l
bnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCkBAIC01MTMsMTUgKzU5MCwxNyBAQCBzdGF0
aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVu
dCogZWxlbWVudCwgR3N0U3RhdAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KIAorICAgIEdN
dXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBzd2l0Y2gg
KHRyYW5zaXRpb24pIHsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VE
OgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlJFQURZLT5QQVVTRUQiKTsKLSAgICAg
ICAgaWYgKCF3ZWJLaXRXZWJTcmNTdGFydChzcmMpKQotICAgICAgICAgICAgcmV0ID0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBwcml2LT5zdGFydElEID0gZ19pZGxlX2FkZF9m
dWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNTdGFydCwg
Z3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFE
WToKICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7Ci0gICAg
ICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjLCBmYWxzZSk7CisgICAgICAgIC8vIGNhbmNlbCBwZW5k
aW5nIHNvdXJjZXMKKyAgICAgICAgcmVtb3ZlVGltZW91dFNvdXJjZXMoc3JjKTsKKyAgICAgICAg
cHJpdi0+c3RvcElEID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgKEdTb3Vy
Y2VGdW5jKSB3ZWJLaXRXZWJTcmNTdG9wLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lO
b3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKQEAgLTUzMiw3ICs2MTEsNyBAQCBzdGF0aWMgR3N0U3RhdGVDaGFuZ2VS
ZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3Rh
dAogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCog
cGFkLCBHc3RPYmplY3QqIHBhcmVudCwgR3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdlYktpdFdl
YlNyYyogd2Via2l0U3JjID0gV0VCS0lUX1dFQl9TUkMoR1NUX0VMRU1FTlQocGFyZW50KSk7Cisg
ICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQp
KTsKICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKIAogICAgIHN3aXRjaCAoR1NUX1FVRVJZ
X1RZUEUocXVlcnkpKSB7CkBAIC01NDEsMTUgKzYyMCwxNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVudCwg
R3N0UQogCiAgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9kdXJhdGlvbihxdWVyeSwgJmZvcm1hdCwg
TlVMTCk7CiAKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJraXRTcmMsICJkdXJhdGlvbiBx
dWVyeSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZvcm1hdCkpOwotICAgICAg
ICBpZiAoKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTKSAmJiAod2Via2l0U3JjLT5wcml2LT5z
aXplID4gMCkpIHsKLSAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVlcnksIGZv
cm1hdCwgd2Via2l0U3JjLT5wcml2LT5zaXplKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJkdXJhdGlvbiBxdWVyeSBpbiBmb3JtYXQgJXMiLCBnc3RfZm9ybWF0X2dldF9uYW1lKGZv
cm1hdCkpOworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0so
c3JjKSk7CisgICAgICAgIGlmIChmb3JtYXQgPT0gR1NUX0ZPUk1BVF9CWVRFUyAmJiBzcmMtPnBy
aXYtPnNpemUgPiAwKSB7CisgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1ZXJ5
LCBmb3JtYXQsIHNyYy0+cHJpdi0+c2l6ZSk7CiAgICAgICAgICAgICByZXN1bHQgPSBUUlVFOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdTVF9RVUVSWV9VUkk6
IHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnksIHdlYmtpdFNyYy0+cHJpdi0+dXJp
KTsKKyAgICAgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykp
OworICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgc3JjLT5wcml2LT51cmkpOwogICAg
ICAgICByZXN1bHQgPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01OTAsNyArNjcx
LDEyIEBAIGNvbnN0IGdjaGFyKiBjb25zdCogd2ViS2l0V2ViU3JjR2V0UHJvdG9jb2xzKEdUeXBl
KQogCiBzdGF0aWMgZ2NoYXIqIHdlYktpdFdlYlNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBoYW5k
bGVyKQogewotICAgIHJldHVybiBnX3N0cmR1cChXRUJLSVRfV0VCX1NSQyhoYW5kbGVyKS0+cHJp
di0+dXJpKTsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKGhhbmRsZXIp
OworICAgIGdjaGFyKiByZXQ7CisKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1Rf
R0VUX0xPQ0soc3JjKSk7CisgICAgcmV0ID0gZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpOworICAg
IHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0
VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiogZXJyb3IpCkBA
IC02MDMsNiArNjg5LDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShHc3RV
UklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXIKICAgICAgICAgcmV0dXJu
IEZBTFNFOwogICAgIH0KIAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRf
TE9DSyhzcmMpKTsKKwogICAgIGdfZnJlZShwcml2LT51cmkpOwogICAgIHByaXYtPnVyaSA9IDA7
CiAKQEAgLTYzNCw3ICs3MjIsMTIgQEAgc3RhdGljIGdjaGFyKiogd2ViS2l0V2ViU3JjR2V0UHJv
dG9jb2xzKHZvaWQpCiAKIHN0YXRpYyBjb25zdCBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJf
U1JDKGhhbmRsZXIpLT5wcml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lU
X1dFQl9TUkMoaGFuZGxlcik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdNdXRleExvY2tlciBs
b2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMt
PnByaXYtPnVyaSk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktp
dFdlYlNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQpA
QCAtNjQ3LDYgKzc0MCw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZXRVcmkoR3N0
VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSkKICAgICAgICAgcmV0dXJuIEZB
TFNFOwogICAgIH0KIAorICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKwogICAgIGdfZnJlZShwcml2LT51cmkpOwogICAgIHByaXYtPnVyaSA9IDA7CiAK
QEAgLTY4MSwxMiArNzc2LDE3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNOZWVkRGF0
YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBw
cml2ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmco
ZmFsc2UpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMp
KTsKKyAgICAvLyBhbHJlYWR5IHN0b3BwZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpCisg
ICAgICAgIHJldHVybiBGQUxTRTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHBy
aXYtPnBhdXNlZCA9IEZBTFNFOwogICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwotICAgIEdTVF9P
QkpFQ1RfVU5MT0NLKHNyYyk7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgaWYgKHByaXYt
PmNsaWVudCkKKyAgICAgICAgcHJpdi0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsK
ICAgICByZXR1cm4gRkFMU0U7CiB9CiAKQEAgLTY5NywyNyArNzk3LDI5IEBAIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY05lZWREYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRl
ciB1c2VyRGF0YSkKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6
ICV1IiwgbGVuZ3RoKTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdNdXRleExv
Y2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+bmVl
ZERhdGFJRCB8fCAhcHJpdi0+cGF1c2VkKSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNy
Yyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcml2LT5uZWVkRGF0YUlEID0gZ190
aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJL
aXRXZWJTcmNOZWVkRGF0YU1haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90
aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAg
IHByaXYtPm5lZWREYXRhSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAo
R1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihz
cmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwogfQogCiBzdGF0aWMgZ2Jv
b2xlYW4gd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsK
ICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+
cmVzb3VyY2UtPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisgICAgR011dGV4TG9ja2VyIGxvY2tl
cihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAg
IGlmICghcHJpdi0+ZW5vdWdoRGF0YUlEKQorICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBH
U1RfT0JKRUNUX0xPQ0soc3JjKTsKICAgICBwcml2LT5wYXVzZWQgPSBUUlVFOwogICAgIHByaXYt
PmVub3VnaERhdGFJRCA9IDA7Ci0gICAgR1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKKyAgICBsb2Nr
ZXIudW5sb2NrKCk7CiAKKyAgICBpZiAocHJpdi0+Y2xpZW50KQorICAgICAgICBwcml2LT5jbGll
bnQtPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CiAgICAgcmV0dXJuIEZBTFNFOwogfQogCkBAIC03
MjgsMTkgKzgzMCwyNSBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhQ2IoR3N0
QXBwU3JjKiwgZ3BvaW50ZXIgdXNlckRhdGEpCiAKICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
IkhhdmUgZW5vdWdoIGRhdGEiKTsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdN
dXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJp
di0+ZW5vdWdoRGF0YUlEIHx8IHByaXYtPnBhdXNlZCkgewotICAgICAgICBHU1RfT0JKRUNUX1VO
TE9DSyhzcmMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdi0+ZW5vdWdoRGF0
YUlEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwgKEdTb3VyY2VG
dW5jKSB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAo
R0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KHNyYyk7CisgICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJ
VFlfREVGQVVMVCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiLCBn
c3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYpOwog
fQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2Vla01haW5DYihXZWJLaXRXZWJTcmMq
IHNyYykKIHsKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywgdHJ1ZSk7CisgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIo
R1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3BwZWQKKyAgICBp
ZiAoIXByaXYtPnNlZWtJRCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGxvY2tlci51bmxv
Y2soKTsKKworICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKICAgICB3ZWJLaXRXZWJTcmNTdGFy
dChzcmMpOwogCiAgICAgcmV0dXJuIEZBTFNFOwpAQCAtNzUyLDYgKzg2MCw3IEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0
LCBncG9pbnRlciB1c2VyCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJp
djsKIAogICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU2Vla2luZyB0byBvZmZzZXQ6ICUiIEdf
R1VJTlQ2NF9GT1JNQVQsIG9mZnNldCk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JK
RUNUX0dFVF9MT0NLKHNyYykpOwogICAgIGlmIChvZmZzZXQgPT0gcHJpdi0+b2Zmc2V0ICYmIHBy
aXYtPnJlcXVlc3RlZE9mZnNldCA9PSBwcml2LT5vZmZzZXQpCiAgICAgICAgIHJldHVybiBUUlVF
OwogCkBAIC03NjEsMTEwICs4NzAsMTQwIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNT
ZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zmc2V0LCBncG9pbnRlciB1c2VyCiAgICAg
R1NUX0RFQlVHX09CSkVDVChzcmMsICJEb2luZyByYW5nZS1yZXF1ZXN0IHNlZWsiKTsKICAgICBw
cml2LT5yZXF1ZXN0ZWRPZmZzZXQgPSBvZmZzZXQ7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3Jj
KTsKICAgICBpZiAocHJpdi0+c2Vla0lEKQogICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+
c2Vla0lEKTsKLSAgICBwcml2LT5zZWVrSUQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklU
WV9ERUZBVUxULCAwLCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IsIGdzdF9v
YmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7Ci0gICAg
R1NUX09CSkVDVF9VTkxPQ0soc3JjKTsKLSAgICAKKyAgICBwcml2LT5zZWVrSUQgPSBnX2lkbGVf
YWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1Nl
ZWtNYWluQ2IsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJveU5vdGlmeSkgZ3N0X29iamVj
dF91bnJlZik7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHZvaWQgd2ViS2l0V2ViU3JjU2V0TWVk
aWFQbGF5ZXIoV2ViS2l0V2ViU3JjKiBzcmMsIFdlYkNvcmU6Ok1lZGlhUGxheWVyKiBwbGF5ZXIp
CiB7CiAgICAgQVNTRVJUKHBsYXllcik7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JK
RUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHNyYy0+cHJpdi0+cGxheWVyID0gcGxheWVyOwogfQog
Ci1TdHJlYW1pbmdDbGllbnQ6OlN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMqIHNyYykgOiBt
X3NyYyhzcmMpCitTdHJlYW1pbmdDbGllbnQ6OlN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJTcmMq
IHNyYykKKyAgICA6IG1fc3JjKGFkb3B0R1JlZihzdGF0aWNfY2FzdDxHc3RFbGVtZW50Kj4oZ3N0
X29iamVjdF9yZWYoc3JjKSkpKQogewotCiB9CiAKIFN0cmVhbWluZ0NsaWVudDo6flN0cmVhbWlu
Z0NsaWVudCgpCiB7Cit9CisKK2NoYXIqIFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZl
cihzaXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQoreworICAgIFdlYktp
dFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIFdlYktpdFdl
YlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CiAKKyAgICBBU1NFUlQoIXByaXYtPmJ1ZmZl
cik7CisKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhy
ZXF1ZXN0ZWRTaXplKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgbWFwR3N0QnVm
ZmVyKGJ1ZmZlcik7CisjZW5kaWYKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKyAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVyKTsK
KyAgICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICBhY3R1YWxTaXplID0gZ2V0R3N0QnVmZmVyU2l6
ZShidWZmZXIpOworICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihidWZmZXIpOwog
fQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBTdHJl
YW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1fc3JjLT5w
cml2OworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkp
OworICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKHNyYywgIlJlY2VpdmVkIHJlc3BvbnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBT
dGF0dXNDb2RlKCkpOwogCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlJlY2VpdmVkIHJl
c3BvbnNlOiAlZCIsIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKIAogICAgIC8vIElmIHdlIHNlZWtl
ZCB3ZSBuZWVkIDIwNiA9PSBQQVJUSUFMX0NPTlRFTlQKICAgICBpZiAocHJpdi0+cmVxdWVzdGVk
T2Zmc2V0ICYmIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgIT0gMjA2KSB7Ci0gICAgICAgIEdT
VF9FTEVNRU5UX0VSUk9SKG1fc3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAoMCkpOworICAgICAg
ICBsb2NrZXIudW5sb2NrKCk7CisgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VS
Q0UsIFJFQUQsICgwKSwgKDApKTsKICAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShw
cml2LT5hcHBzcmMpOwotICAgICAgICB3ZWJLaXRXZWJTcmNTdG9wKG1fc3JjLCBmYWxzZSk7Cisg
ICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGxvbmcgbG9uZyBsZW5ndGggPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
LSAgICBpZiAobGVuZ3RoID4gMCkgeworICAgIGlmIChsZW5ndGggPiAwKQogICAgICAgICBsZW5n
dGggKz0gcHJpdi0+cmVxdWVzdGVkT2Zmc2V0OwotICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6
ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7Ci0KLSNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAg
ICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKLSAgICAgICAgICAgIGdzdF9zZWdtZW50
X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNlZ21lbnQsIEdTVF9G
T1JNQVRfQllURVMsIGxlbmd0aCk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3Nh
Z2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBz
cmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKLSAgICAgICAgfQotI2VuZGlm
Ci0gICAgfQogCiAgICAgcHJpdi0+c2l6ZSA9IGxlbmd0aCA+PSAwID8gbGVuZ3RoIDogMDsKICAg
ICBwcml2LT5zZWVrYWJsZSA9IGxlbmd0aCA+IDAgJiYgZ19hc2NpaV9zdHJjYXNlY21wKCJub25l
IiwgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJBY2NlcHQtUmFuZ2VzIikudXRmOCgpLmRhdGEo
KSk7CiAKLSAgICAvLyBpY2VjYXN0IHN0dWZmCi0gICAgU3RyaW5nIHZhbHVlID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOwotICAgICAgICBnaW50NjQgaWN5TWV0YUlu
dCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5
TWV0YUludCA+IDApIHsKLSAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1p
bnRlcnZhbCIsIEdfVFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7Ci0KLSAgICAg
ICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIEdzdFRhZ0xp
c3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3X2VtcHR5KCk7CiAjZWxzZQogICAgIEdzdFRhZ0xp
c3QqIHRhZ3MgPSBnc3RfdGFnX2xpc3RfbmV3KCk7CiAjZW5kaWYKLSAgICB2YWx1ZSA9IHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZCgiaWN5LW5hbWUiKTsKKyAgICBTdHJpbmcgdmFsdWUgPSByZXNw
b25zZS5odHRwSGVhZGVyRmllbGQoImljeS1uYW1lIik7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgICAgICBwcml2LT5p
cmFkaW9OYW1lID0gZ19zdHJkdXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2Jq
ZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFkaW8tbmFtZSIpOworICAgICAgICBnX29i
amVjdF9ub3RpZnkoR19PQkpFQ1Qoc3JjKSwgImlyYWRpby1uYW1lIik7CiAgICAgICAgIGdzdF90
YWdfbGlzdF9hZGQodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX09SR0FOSVpB
VElPTiwgcHJpdi0+aXJhZGlvTmFtZSwgTlVMTCk7CiAgICAgfQogICAgIHZhbHVlID0gcmVzcG9u
c2UuaHR0cEhlYWRlckZpZWxkKCJpY3ktZ2VucmUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHko
KSkgewogICAgICAgICBnX2ZyZWUocHJpdi0+aXJhZGlvR2VucmUpOwogICAgICAgICBwcml2LT5p
cmFkaW9HZW5yZSA9IGdfc3RyZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnX29i
amVjdF9ub3RpZnkoR19PQkpFQ1QobV9zcmMpLCAiaXJhZGlvLWdlbnJlIik7CisgICAgICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAiaXJhZGlvLWdlbnJlIik7CiAgICAgICAgIGdz
dF90YWdfbGlzdF9hZGQodGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX0dFTlJF
LCBwcml2LT5pcmFkaW9HZW5yZSwgTlVMTCk7CiAgICAgfQogICAgIHZhbHVlID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJpY3ktdXJsIik7CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgZ19mcmVlKHByaXYtPmlyYWRpb1VybCk7CiAgICAgICAgIHByaXYtPmlyYWRpb1Vy
bCA9IGdfc3RyZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnX29iamVjdF9ub3Rp
ZnkoR19PQkpFQ1QobV9zcmMpLCAiaXJhZGlvLXVybCIpOworICAgICAgICBnX29iamVjdF9ub3Rp
ZnkoR19PQkpFQ1Qoc3JjKSwgImlyYWRpby11cmwiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2Fk
ZCh0YWdzLCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfTE9DQVRJT04sIHByaXYtPmly
YWRpb1VybCwgTlVMTCk7CiAgICAgfQogICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKCJpY3ktdGl0bGUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBn
X2ZyZWUocHJpdi0+aXJhZGlvVGl0bGUpOwogICAgICAgICBwcml2LT5pcmFkaW9UaXRsZSA9IGdf
c3RyZHVwKHZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnX29iamVjdF9ub3RpZnkoR19P
QkpFQ1QobV9zcmMpLCAiaXJhZGlvLXRpdGxlIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShH
X09CSkVDVChzcmMpLCAiaXJhZGlvLXRpdGxlIik7CiAgICAgICAgIGdzdF90YWdfbGlzdF9hZGQo
dGFncywgR1NUX1RBR19NRVJHRV9SRVBMQUNFLCBHU1RfVEFHX1RJVExFLCBwcml2LT5pcmFkaW9U
aXRsZSwgTlVMTCk7CiAgICAgfQogCisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgLy8gbm90
aWZ5IHNpemUvZHVyYXRpb24KKyAgICBpZiAobGVuZ3RoID4gMCkgeworICAgICAgICBnc3RfYXBw
X3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIGxlbmd0aCk7CisKKyNpZm5kZWYgR1NUX0FQSV9W
RVJTSU9OXzEKKyAgICAgICAgaWYgKCFwcml2LT5oYXZlQXBwU3JjMjcpIHsKKyAgICAgICAgICAg
IGdzdF9zZWdtZW50X3NldF9kdXJhdGlvbigmR1NUX0JBU0VfU1JDKHByaXYtPmFwcHNyYyktPnNl
Z21lbnQsIEdTVF9GT1JNQVRfQllURVMsIGxlbmd0aCk7CisgICAgICAgICAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQocHJpdi0+YXBwc3JjKSwKKyAgICAgICAgICAgICAg
ICBnc3RfbWVzc2FnZV9uZXdfZHVyYXRpb24oR1NUX09CSkVDVChwcml2LT5hcHBzcmMpLAorICAg
ICAgICAgICAgICAgICAgICBHU1RfRk9STUFUX0JZVEVTLCBsZW5ndGgpKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgfSBlbHNlCisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFw
cHNyYywgLTEpOworCisgICAgLy8gaWNlY2FzdCBzdHVmZgorICAgIHZhbHVlID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJpY3ktbWV0YWludCIpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgp
KSB7CisgICAgICAgIGdjaGFyKiBlbmRwdHIgPSAwOworICAgICAgICBnaW50NjQgaWN5TWV0YUlu
dCA9IGdfYXNjaWlfc3RydG9sbCh2YWx1ZS51dGY4KCkuZGF0YSgpLCAmZW5kcHRyLCAxMCk7CisK
KyAgICAgICAgaWYgKGVuZHB0ciAmJiAqZW5kcHRyID09ICdcMCcgJiYgaWN5TWV0YUludCA+IDAp
IHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fw
c19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LWljeSIsICJtZXRhZGF0YS1pbnRlcnZhbCIsIEdf
VFlQRV9JTlQsIChnaW50KSBpY3lNZXRhSW50LCBOVUxMKSk7CisKKyAgICAgICAgICAgIGdzdF9h
cHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgY2Fwcy5nZXQoKSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJpdi0+YXBwc3JjLCAwKTsK
KworICAgIC8vIG5vdGlmeSB0YWdzCiAgICAgaWYgKGdzdF90YWdfbGlzdF9pc19lbXB0eSh0YWdz
KSkKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdGFnX2xpc3RfdW5yZWYo
dGFncyk7CkBAIC04NzIsMTQgKzEwMTEsMTcgQEAgdm9pZCBTdHJlYW1pbmdDbGllbnQ6OnJlc3Bv
bnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBSZXNvdXJjZVIKICAg
ICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUodGFncyk7CiAjZW5kaWYKICAgICBlbHNlCi0gICAgICAg
IG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChtX3NyYyksIG1fc3JjLT5wcml2LT5zcmNw
YWQsIHRhZ3MpOworICAgICAgICBub3RpZnlHc3RUYWdzT25QYWQoR1NUX0VMRU1FTlQoc3JjKSwg
cHJpdi0+c3JjcGFkLCB0YWdzKTsKIH0KIAotdm9pZCBTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNl
aXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlRGF0YVJlY2VpdmVkKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IG1f
c3JjLT5wcml2OworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMu
Z2V0KCkpOworICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAg
ICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAKLSAgICBH
U1RfTE9HX09CSkVDVChtX3NyYywgIkhhdmUgJWQgYnl0ZXMgb2YgZGF0YSIsIHByaXYtPmJ1ZmZl
ciA/IGdldEdzdEJ1ZmZlclNpemUocHJpdi0+YnVmZmVyLmdldCgpKSA6IGxlbmd0aCk7CisgICAg
R1NUX0xPR19PQkpFQ1Qoc3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVy
ID8gZ2V0R3N0QnVmZmVyU2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsKIAogICAg
IEFTU0VSVCghcHJpdi0+YnVmZmVyIHx8IGRhdGEgPT0gZ2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIo
cHJpdi0+YnVmZmVyLmdldCgpKSk7CiAKQEAgLTg4OCw4ICsxMDMwLDggQEAgdm9pZCBTdHJlYW1p
bmdDbGllbnQ6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IGNo
YXIqIGRhdGEsIGkKICAgICAgICAgdW5tYXBHc3RCdWZmZXIocHJpdi0+YnVmZmVyLmdldCgpKTsK
ICNlbmRpZgogCi0gICAgaWYgKHByaXYtPnNlZWtJRCB8fCByZXNvdXJjZSAhPSBwcml2LT5yZXNv
dXJjZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiU2VlayBpbiBwcm9ncmVz
cywgaWdub3JpbmcgZGF0YSIpOworICAgIGlmIChwcml2LT5zZWVrSUQpIHsKKyAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7CiAg
ICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
OTA3LDU3ICsxMDQ5LDE4MiBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENh
Y2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgIHByaXYtPm9m
ZnNldCArPSBsZW5ndGg7CiAgICAgLy8gcHJpdi0+c2l6ZSA9PSAwIGlmIHJlY2VpdmVkIGxlbmd0
aCBvbiBkaWRSZWNlaXZlUmVzcG9uc2UgPCAwLgogICAgIGlmIChwcml2LT5zaXplID4gMCAmJiBw
cml2LT5vZmZzZXQgPiBwcml2LT5zaXplKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9z
cmMsICJVcGRhdGluZyBpbnRlcm5hbCBzaXplIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUsIHByaXYtPm9mZnNldCk7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiVXBkYXRpbmcgaW50ZXJuYWwgc2l6ZSBmcm9tICUiIEdf
R1VJTlQ2NF9GT1JNQVQgIiB0byAlIiBHX0dVSU5UNjRfRk9STUFULCBwcml2LT5zaXplLCBwcml2
LT5vZmZzZXQpOwogICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIHBy
aXYtPm9mZnNldCk7CiAgICAgICAgIHByaXYtPnNpemUgPSBwcml2LT5vZmZzZXQ7CiAgICAgfQog
ICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChwcml2LT5idWZmZXIuZ2V0KCkpID0gcHJpdi0+b2Zm
c2V0OwogCisgICAgbG9ja2VyLnVubG9jaygpOworCiAgICAgR3N0Rmxvd1JldHVybiByZXQgPSBn
c3RfYXBwX3NyY19wdXNoX2J1ZmZlcihwcml2LT5hcHBzcmMsIHByaXYtPmJ1ZmZlci5sZWFrUmVm
KCkpOwogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgaWYgKHJldCAhPSBHU1RfRkxPV19P
SyAmJiByZXQgIT0gR1NUX0ZMT1dfRU9TKQogI2Vsc2UKICAgICBpZiAocmV0ICE9IEdTVF9GTE9X
X09LICYmIHJldCAhPSBHU1RfRkxPV19VTkVYUEVDVEVEKQogI2VuZGlmCi0gICAgICAgIEdTVF9F
TEVNRU5UX0VSUk9SKG1fc3JjLCBDT1JFLCBGQUlMRUQsICgwKSwgKDApKTsKKyAgICAgICAgR1NU
X0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBGQUlMRUQsICgwKSwgKDApKTsKIH0KIAotY2hhciog
U3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBz
aXplX3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQordm9pZCBTdHJlYW1pbmdD
bGllbnQ6OmhhbmRsZU5vdGlmeUZpbmlzaGVkKCkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VC
X1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+
cHJpdjsKIAotICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIkhhdmUgRU9TIik7CiAKLSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9idWZmZXJf
bmV3X2FuZF9hbGxvYyhyZXF1ZXN0ZWRTaXplKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdT
VF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgaWYgKCFwcml2LT5zZWVrSUQpIHsKKyAgICAg
ICAgbG9ja2VyLnVubG9jaygpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHBy
aXYtPmFwcHNyYyk7CisgICAgfQorfQogCi0jaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICBt
YXBHc3RCdWZmZXIoYnVmZmVyKTsKLSNlbmRpZgorQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQ6OkNhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjLCBDYWNo
ZWRSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKKyAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCit7CisgICAgQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0IGNhY2hlUmVxdWVzdChyZXF1ZXN0LCBSZXNvdXJjZUxvYWRlck9wdGlvbnMoU2Vu
ZENhbGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIERvTm90QnVmZmVyRGF0YSwgRG9Ob3RBbGxv
d1N0b3JlZENyZWRlbnRpYWxzLCBEb05vdEFza0NsaWVudEZvckNyb3NzT3JpZ2luQ3JlZGVudGlh
bHMsIERvU2VjdXJpdHlDaGVjaywgVXNlRGVmYXVsdE9yaWdpblJlc3RyaWN0aW9uc0ZvclR5cGUp
KTsKKyAgICBtX3Jlc291cmNlID0gcmVzb3VyY2VMb2FkZXItPnJlcXVlc3RSYXdSZXNvdXJjZShj
YWNoZVJlcXVlc3QpOworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5h
ZGRDbGllbnQodGhpcyk7Cit9CiAKLSAgICBwcml2LT5idWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVy
KTsKK0NhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojp+Q2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQoKQoreworICAgIGlmIChtX3Jlc291cmNlKSB7CisgICAgICAgIG1fcmVzb3VyY2Ut
PnJlbW92ZUNsaWVudCh0aGlzKTsKKyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgfQorfQog
Ci0gICAgYWN0dWFsU2l6ZSA9IGdldEdzdEJ1ZmZlclNpemUoYnVmZmVyKTsKLSAgICByZXR1cm4g
Z2V0R3N0QnVmZmVyRGF0YVBvaW50ZXIoYnVmZmVyKTsKK2Jvb2wgQ2FjaGVkUmVzb3VyY2VTdHJl
YW1pbmdDbGllbnQ6OmxvYWRGYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9yZXNvdXJj
ZTsKIH0KIAotdm9pZCBTdHJlYW1pbmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OnNldERl
ZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7Ci0gICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJp
diA9IG1fc3JjLT5wcml2OworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNl
LT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7Cit9CisKK2NoYXIqIENhY2hlZFJlc291cmNlU3Ry
ZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXpl
X3QgcmVxdWVzdGVkU2l6ZSwgc2l6ZV90JiBhY3R1YWxTaXplKQoreworICAgIHJldHVybiBjcmVh
dGVSZWFkQnVmZmVyKHJlcXVlc3RlZFNpemUsIGFjdHVhbFNpemUpOworfQogCit2b2lkIENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaGFuZGxlUmVzcG9u
c2VSZWNlaXZlZChyZXNwb25zZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQ6OmRhdGFSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCit7CisgICAgaGFuZGxlRGF0YVJlY2VpdmVkKGRhdGEsIGxlbmd0aCk7Cit9CisK
K3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSkKK3sKICAgICBpZiAocmVzb3VyY2UtPmxvYWRGYWlsZWRPckNh
bmNlbGVkKCkpIHsKKyAgICAgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyht
X3NyYy5nZXQoKSk7CisKICAgICAgICAgaWYgKCFyZXNvdXJjZS0+d2FzQ2FuY2VsZWQoKSkgewog
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IgPSByZXNvdXJjZS0+cmVzb3Vy
Y2VFcnJvcigpOwotICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX3NyYywgIkhhdmUgZmFp
bHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMsIFJFU09VUkNFLCBGQUlMRUQsICgi
JXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAoMCkpOwor
ICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJIYXZlIGZhaWx1cmU6ICVzIiwgZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEdT
VF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2Fs
aXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+cHJpdi0+YXBwc3JjKTsKKyAgICAg
ICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShzcmMtPnByaXYtPmFwcHNyYyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiSGF2ZSBFT1Mi
KTsKKyAgICBoYW5kbGVOb3RpZnlGaW5pc2hlZCgpOworfQogCi0gICAgaWYgKCFwcml2LT5zZWVr
SUQpCi0gICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0obV9zcmMtPnByaXYtPmFwcHNy
Yyk7CitSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6UmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKKyAgICA6IFN0cmVhbWluZ0NsaWVudChzcmMpCit7CisgICAgbV9yZXNvdXJjZSA9IFJlc291
cmNlSGFuZGxlOjpjcmVhdGUoMCAvKmNvbnRleHQqLywgcmVxdWVzdCwgdGhpcywgZmFsc2UsIGZh
bHNlKTsKK30KKworUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6On5SZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudCgpCit7CisgICAgaWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgbV9y
ZXNvdXJjZS0+Y2FuY2VsKCk7CisgICAgICAgIG1fcmVzb3VyY2UucmVsZWFzZSgpOworICAgICAg
ICBtX3Jlc291cmNlID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQ6OmxvYWRGYWlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9yZXNvdXJjZTsK
K30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGlu
Zyhib29sIGRlZmVycykKK3sKKyAgICBpZiAobV9yZXNvdXJjZSkKKyAgICAgICAgbV9yZXNvdXJj
ZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworfQorCitjaGFyKiBSZXNvdXJjZUhhbmRsZVN0
cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRTaXpl
LCBzaXplX3QmIGFjdHVhbFNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlYWRCdWZmZXIocmVx
dWVzdGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1p
bmdDbGllbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQoreworfQorCit2b2lkIFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBoYW5kbGVSZXNwb25zZVJlY2Vp
dmVkKHJlc3BvbnNlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6
ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCBpbnQpCit7CisgICAgaGFuZGxlRGF0YVJlY2VpdmVkKGRhdGEsIGxlbmd0aCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoUmVz
b3VyY2VIYW5kbGUqLCBkb3VibGUpCit7CisgICAgaGFuZGxlTm90aWZ5RmluaXNoZWQoKTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIFdlYktpdFdlYlNyYyog
c3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworCisgICAgR1NUX0VSUk9SX09CSkVD
VChzcmMsICJIYXZlIGZhaWx1cmU6ICVzIiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBGQUlM
RUQsICgiJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpLCAo
MCkpOworICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oc3JjLT5wcml2LT5hcHBzcmMpOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojp3YXNCbG9ja2VkKFJlc291
cmNlSGFuZGxlKikKK3sKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1f
c3JjLmdldCgpKTsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmk7CisKKyAgICBHU1RfRVJST1JfT0JK
RUNUKHNyYywgIlJlcXVlc3Qgd2FzIGJsb2NrZWQiKTsKKworICAgIEdNdXRleExvY2tlciBsb2Nr
ZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICB1cmkuc2V0KGdfc3RyZHVwKHNyYy0+
cHJpdi0+dXJpKSk7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgR1NUX0VMRU1FTlRfRVJS
T1Ioc3JjLCBSRVNPVVJDRSwgT1BFTl9SRUFELCAoIkFjY2VzcyB0byBcIiVzXCIgd2FzIGJsb2Nr
ZWQiLCB1cmkuZ2V0KCkpLCAoMCkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5n
Q2xpZW50OjpjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikKK3sKKyAgICBXZWJLaXRXZWJT
cmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKyAgICBHT3duUHRyPGdjaGFy
PiB1cmk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkNhbm5vdCBzaG93IFVSTCIpOwor
CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAg
IHVyaS5zZXQoZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKKyAgICBsb2NrZXIudW5sb2NrKCk7
CisKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBPUEVOX1JFQUQsICgiQ2Fu
J3Qgc2hvdyBcIiVzXCIiLCB1cmkuZ2V0KCkpLCAoMCkpOwogfQogCiAjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUikKLS0gCjEuOC4xLjIKCg==
</data>
<flag name="review"
          id="231119"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>209462</attachid>
            <date>2013-08-23 08:21:18 -0700</date>
            <delta_ts>2013-08-23 10:18:41 -0700</delta_ts>
            <desc>GMutexLocker.h attempt</desc>
            <filename>GMutexLocker.h</filename>
            <type>text/x-chdr</type>
            <size>1688</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">LyoKICogIENvcHlyaWdodCAoQykgMjAxMyBDb2xsYWJvcmEgTHRkLgogKgogKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgogKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgog
KgogKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICovCgojaWZuZGVmIEdNdXRleExvY2tlcl9o
CiNkZWZpbmUgR011dGV4TG9ja2VyX2gKCiNpZiBVU0UoR0xJQikKCiNpbmNsdWRlIDxnbGliLmg+
CgojaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgoKbmFtZXNwYWNlIFdlYkNvcmUgewoKY2xhc3MgR011dGV4TG9ja2VyIHsKICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdNdXRleExvY2tlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwoK
cHVibGljOgogICAgaW5saW5lIGV4cGxpY2l0IEdNdXRleExvY2tlcihHTXV0ZXggKm11dGV4KQog
ICAgICAgIDogbV9tdXRleChtdXRleCksCiAgICAgICAgICBtX3ZhbCgwKQogICAgewogICAgICAg
IGxvY2soKTsKICAgIH0KCiAgICBpbmxpbmUgfkdNdXRleExvY2tlcigpIHsgdW5sb2NrKCk7IH0K
CiAgICBpbmxpbmUgdm9pZCBsb2NrKCkKICAgIHsKICAgICAgICBpZiAobV9tdXRleCAmJiAhbV92
YWwpIHsKICAgICAgICAgICAgbV92YWwgPSAxOwogICAgICAgICAgICBnX211dGV4X2xvY2sobV9t
dXRleCk7CiAgICAgICAgfQogICAgfQoKICAgIGlubGluZSB2b2lkIHVubG9jaygpCiAgICB7CiAg
ICAgICAgaWYgKG1fbXV0ZXggJiYgbV92YWwpIHsKICAgICAgICAgICAgZ19tdXRleF91bmxvY2so
bV9tdXRleCk7CiAgICAgICAgICAgIG1fdmFsID0gMDsKICAgICAgICB9CiAgICB9CgogICAgaW5s
aW5lIEdNdXRleCAqbXV0ZXgoKSBjb25zdCB7IHJldHVybiBtX211dGV4OyB9Cgpwcml2YXRlOgog
ICAgR011dGV4KiBtX211dGV4OwogICAgdWludDhfdCBtX3ZhbDsKfTsKCn0KCiNlbmRpZiAvLyBV
U0UoR0xJQikKCiNlbmRpZiAvLyBHTXV0ZXhMb2NrZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209471</attachid>
            <date>2013-08-23 10:18:41 -0700</date>
            <delta_ts>2013-08-23 10:24:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>44748</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSAzMWJkMzdjZDI5NGRkY2M5NTliMWNkMWJkMzg5ZjYyNzM4YmI4MTUxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMTkgQXVnIDIwMTMg
MTg6MDM6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24g
YW55IHRocmVhZCBieSBjYWxsaW5nCmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUg
VVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxlbWVudC4KVGhpcyBwYXRjaCBtYWtlcyBzdXJl
IHRoZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNz
dWVzIHdpdGggaXQKYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KCkFsc28g
YWRkIGNvbnZlbmllbmNlIGNsYXNzIHRoYXQgc2ltcGxpZmllcyBsb2NraW5nIGFuZCB1bmxvY2tp
bmcgYSBHTXV0ZXguCgoqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgood2Via2l0X3dlYl9zcmNfaW5pdCk6Cih3ZWJLaXRXZWJTcmNEaXNw
b3NlKToKKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToK
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKHdlYktp
dFdlYlNyY1N0b3ApOgood2ViS2l0V2ViU3JjU3RhcnQpOgood2ViS2l0V2ViU3JjQ2hhbmdlU3Rh
dGUpOgood2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKHdlYktpdFdlYlNyY0dldFVyaSk6
Cih3ZWJLaXRXZWJTcmNTZXRVcmkpOgood2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgood2Vi
S2l0V2ViU3JjTmVlZERhdGFDYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKHdl
YktpdFdlYlNyY0Vub3VnaERhdGFDYik6Cih3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKToKKHdlYktp
dFdlYlNyY1NlZWtEYXRhQ2IpOgood2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgooU3RyZWFt
aW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQpOgooU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5n
Q2xpZW50KToKKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CihTdHJlYW1pbmdD
bGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVE
YXRhUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CihD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudCk6CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6
CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CihDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToKKENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKToKKENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpn
ZXRPckNyZWF0ZVJlYWRCdWZmZXIpOgooUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondp
bGxTZW5kUmVxdWVzdCk6Ck1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8g
dXNlIHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgp0aGUgREFT
SCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMpLCB1c2Ug
R011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CmxvY2tzIGFuZCBvdGhlciBnZW5lcmFsIGltcHJvdmVt
ZW50cy4KCiogR05VbWFrZWZpbGUubGlzdC5hbToKKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIu
aDogQWRkZWQuCihXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CihXZWJDb3Jl
OjpHTXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgooV2ViQ29yZTo6R011dGV4TG9ja2VyOjps
b2NrKToKKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKKFdlYkNvcmU6OkdNdXRleExv
Y2tlcjo6bXV0ZXgpOgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE3ICsKIFNvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSAgICAg
ICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmggICAgICAgICAgICAgIHwgIDcyICsrKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjIgKysrCiAuLi4vZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHAgICAgICAgICB8IDU3NiArKysrKysrKysrKysrKystLS0tLS0K
IDUgZmlsZXMgY2hhbmdlZCwgNTcyIGluc2VydGlvbnMoKyksIDE1NiBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA2NmM3YTc2Li5jYzQ1YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA4LTE5ICBB
bmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVr
PgorCisgICAgICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1l
bnQgaXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IHNpbXBsaWZpZXMgbG9ja2luZyBh
bmQgdW5sb2NraW5nIGEgR011dGV4LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpH
TXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R011dGV4TG9j
a2VyOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6bXV0ZXgpOgorCiAyMDEzLTA4LTIxICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTU0NDE2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGJjMDJlNjgu
LmU4MzRiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTIxMSw2ICsyMTEsNyBAQCB3dGZf
c291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS9zdHJ0b2QuY2MgXAogICAgIFNv
dXJjZS9XVEYvd3RmL2R0b2Evc3RydG9kLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2R0b2EvdXRp
bHMuaCBcCisgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCBcCiAgICAg
U291cmNlL1dURi93dGYvZ29iamVjdC9HT3duUHRyLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYv
Z29iamVjdC9HT3duUHRyLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCBi
L1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTY1MGVlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTMgQ29sbGFib3JhIEx0ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBHTXV0ZXhM
b2NrZXJfaAorI2RlZmluZSBHTXV0ZXhMb2NrZXJfaAorCisjaWYgVVNFKEdMSUIpCisKKyNpbmNs
dWRlIDxnbGliLmg+CisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdNdXRl
eExvY2tlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR011dGV4TG9ja2VyKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBpbmxpbmUgZXhwbGljaXQgR011dGV4
TG9ja2VyKEdNdXRleCAqbXV0ZXgpCisgICAgICAgIDogbV9tdXRleChtdXRleCksCisgICAgICAg
ICAgbV92YWwoMCkKKyAgICB7CisgICAgICAgIGxvY2soKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
fkdNdXRleExvY2tlcigpIHsgdW5sb2NrKCk7IH0KKworICAgIGlubGluZSB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbXV0ZXggJiYgIW1fdmFsKSB7CisgICAgICAgICAgICBnX211
dGV4X2xvY2sobV9tdXRleCk7CisgICAgICAgICAgICBtX3ZhbCA9IDE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpbmxpbmUgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbXV0
ZXggJiYgbV92YWwpIHsKKyAgICAgICAgICAgIG1fdmFsID0gMDsKKyAgICAgICAgICAgIGdfbXV0
ZXhfdW5sb2NrKG1fbXV0ZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgaW5saW5lIEdNdXRl
eCogbXV0ZXgoKSBjb25zdCB7IHJldHVybiBtX211dGV4OyB9CisKK3ByaXZhdGU6CisgICAgR011
dGV4KiBtX211dGV4OworICAgIHVpbnQ4X3QgbV92YWw7Cit9OworCit9CisKKyNlbmRpZiAvLyBV
U0UoR0xJQikKKworI2VuZGlmIC8vIEdNdXRleExvY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDliMjg4
Yi4uNWM3NDJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA4LTE5ICBBbmRy
ZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgor
CisgICAgICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQg
aXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0
cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisgICAgICAgIGdzdF9lbGVt
ZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxl
bWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBnc3RyZWFtZXIgc291cmNl
IGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggaXQKKyAgICAgICAg
YmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNEaXNwb3Nl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAg
ICAgKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgor
ICAgICAgICAod2ViS2l0V2ViU3JjU3RhcnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdl
U3RhdGUpOgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKyAgICAgICAg
KHdlYktpdFdlYlNyY0dldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3Jj
TmVlZERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNT
ZWVrTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpT
dHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xp
ZW50KToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CisgICAg
ICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAo
U3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQpOgorICAgICAgICAoU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9h
ZGluZyk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVh
dGVSZWFkQnVmZmVyKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpy
ZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpkYXRhUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlk
RmFpbCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tl
ZCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VS
TCk6CisgICAgICAgIE1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8gdXNl
IHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgorICAgICAgICB0
aGUgREFTSCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMp
LCB1c2UgR011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CisgICAgICAgIGxvY2tzIGFuZCBvdGhlciBn
ZW5lcmFsIGltcHJvdmVtZW50cy4KKwogMjAxMy0wOC0yMyAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNTM5Mzkp
IEZpeCB0eXBvIGluIFF0IGJ1aWxkLWZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCmluZGV4IDBjYzU3NWUuLmY4Yzc5MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zMSwzMiArMzEsODAgQEAKICNpbmNs
dWRlICJHU3RyZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzcmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMv
bWlzc2luZy1wbHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBTdHJl
YW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworY2xhc3MgU3RyZWFtaW5nQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0cmVhbWlu
Z0NsaWVudChXZWJLaXRXZWJTcmMqKTsKICAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50
KCk7CiAKKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRGYWlsZWQoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpID0gMDsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgY2hhciogY3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6
ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCBoYW5kbGVSZXNwb25zZVJlY2Vp
dmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBoYW5kbGVEYXRhUmVj
ZWl2ZWQoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgaGFuZGxlTm90aWZ5RmluaXNo
ZWQoKTsKKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3JjOworfTsKKworY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQsIHB1YmxpYyBTdHJlYW1pbmdDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqLCBDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OworICAgICAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpOworCisg
ICAgICAgIC8vIFN0cmVhbWluZ0NsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIHZpcnR1
YWwgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREZWZl
cnNMb2FkaW5nKGJvb2wpOworCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKKyAgICAgICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQgdmlydHVhbCBtZXRob2Rz
LgorICAgICAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNv
dXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICAgICAgdmlydHVhbCBjaGFyKiBnZXRP
ckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwg
c2l6ZV90JiBhY3R1YWxTaXplKTsKIAotICAgICAgICBXZWJLaXRXZWJTcmMqIG1fc3JjOworICAg
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNvdXJjZTsK
K307CisKK2NsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291
cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtaW5nQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoV2ViS2l0V2ViU3JjKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgflJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAgLy8gU3Ry
ZWFtaW5nQ2xpZW50IHZpcnR1YWwgbWV0aG9kcy4KKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRG
YWlsZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9v
bCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudCB2aXJ0
dWFsIG1ldGhvZHMuCisgICAgICAgIHZpcnR1YWwgY2hhciogZ2V0T3JDcmVhdGVSZWFkQnVmZmVy
KHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiwgaW50LCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
ZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9yZXNvdXJjZTsKIH07CiAKICNkZWZpbmUgV0VCS0lU
X1dFQl9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9XRUJfU1JDLCBXZWJLaXRXZWJTcmNQcml2YXRlKSkKQEAgLTY4LDcg
KzExNiw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAgICAgV2ViQ29yZTo6TWVk
aWFQbGF5ZXIqIHBsYXllcjsKIAogICAgIFN0cmVhbWluZ0NsaWVudCogY2xpZW50OwotICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXNvdXJjZTsKIAogICAgIGd1
aW50NjQgb2Zmc2V0OwogICAgIGd1aW50NjQgc2l6ZTsKQEAgLTc3LDYgKzEyNCw4IEBAIHN0cnVj
dCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsK
IAorICAgIGd1aW50IHN0YXJ0SUQ7CisgICAgZ3VpbnQgc3RvcElEOwogICAgIGd1aW50IG5lZWRE
YXRhSUQ7CiAgICAgZ3VpbnQgZW5vdWdoRGF0YUlEOwogICAgIGd1aW50IHNlZWtJRDsKQEAgLTEy
OSw4ICsxNzgsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKEdzdEFwcFNy
YyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpOwogc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zm
c2V0LCBncG9pbnRlciB1c2VyRGF0YSk7CiAKLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3Ao
V2ViS2l0V2ViU3JjKiwgYm9vbCk7Ci0KIHN0YXRpYyBHc3RBcHBTcmNDYWxsYmFja3MgYXBwc3Jj
Q2FsbGJhY2tzID0gewogICAgIHdlYktpdFdlYlNyY05lZWREYXRhQ2IsCiAgICAgd2ViS2l0V2Vi
U3JjRW5vdWdoRGF0YUNiLApAQCAtMTg0LDcgKzIzMSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfc3JjX2NsYXNzX2luaXQoV2ViS2l0V2ViU3JjQ2xhc3MqIGtsYXNzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2VucmUgb2YgdGhl
IHN0cmVhbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NU
QVRJQ19TVFJJTkdTKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2tsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JUkFESU9f
VVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygiaXJhZGlvLXVybCIsCkBAIC0yMjIsOCArMjY5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKIAogICAgIHNyYy0+cHJpdiA9IHByaXY7
CiAKLSAgICBwcml2LT5jbGllbnQgPSBuZXcgU3RyZWFtaW5nQ2xpZW50KHNyYyk7Ci0KICAgICBw
cml2LT5hcHBzcmMgPSBHU1RfQVBQX1NSQyhnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNy
YyIsIDApKTsKICAgICBpZiAoIXByaXYtPmFwcHNyYykgewogICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgYXBwc3JjIik7CkBAIC0yNzIsNyArMzE3LDggQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKICAgICBp
ZiAocHJpdi0+aGF2ZUFwcFNyYzI3KQogICAgICAgICBnX29iamVjdF9zZXQocHJpdi0+YXBwc3Jj
LCAibWluLXBlcmNlbnQiLCAyMCwgTlVMTCk7CiAKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywg
ZmFsc2UpOworICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7CisgICAg
Z3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQpAQCAtMjgwLDEzICszMjYsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5idWZmZXIpIHsK
LSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5i
dWZmZXIuZ2V0KCkpOwotI2VuZGlmCi0gICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwotICAg
IH0KLQogICAgIHByaXYtPnBsYXllciA9IDA7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpF
Q1RfQ0xBU1MsIGRpc3Bvc2UsIChvYmplY3QpKTsKQEAgLTI5Nyw4ICszMzYsNiBAQCBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZh
dGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBkZWxldGUgcHJpdi0+Y2xpZW50OwotCiAgICAg
Z19mcmVlKHByaXYtPnVyaSk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1Ms
IGZpbmFsaXplLCAob2JqZWN0KSk7CkBAIC0zMTAsOSArMzQ3LDExIEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25z
dCBHVmFsdWUqCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAog
ICAgIHN3aXRjaCAocHJvcElEKSB7Ci0gICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgorICAgIGNh
c2UgUFJPUF9JUkFESU9fTU9ERTogeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgICAgIHByaXYtPmlyYWRpb01vZGUgPSBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUFJP
UF9MT0NBVElPTjoKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdXJpX2hh
bmRsZXJfc2V0X3VyaShyZWludGVycHJldF9jYXN0PEdzdFVSSUhhbmRsZXIqPihzcmMpLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpLCAwKTsKQEAgLTMzMSw2ICszNzAsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwg
R1ZhbHVlKiB2YWx1ZQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2Jq
ZWN0KTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRj
aCAocHJvcElEKSB7CiAgICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgogICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pcmFkaW9Nb2RlKTsKQEAgLTM1NiwxNSArMzk2LDM5
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgfQogfQogCitzdGF0aWMgdm9pZCByZW1v
dmVUaW1lb3V0U291cmNlcyhXZWJLaXRXZWJTcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPnN0YXJ0SUQpCisgICAg
ICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zdGFydElEKTsKKyAgICBwcml2LT5zdGFydElEID0g
MDsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9v
bCBzZWVraW5nKQorICAgIGlmIChwcml2LT5uZWVkRGF0YUlEKQorICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+bmVlZERhdGFJRCk7CisgICAgcHJpdi0+bmVlZERhdGFJRCA9IDA7CisKKyAg
ICBpZiAocHJpdi0+ZW5vdWdoRGF0YUlEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+
ZW5vdWdoRGF0YUlEKTsKKyAgICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOworCisgICAgaWYgKHBy
aXYtPnNlZWtJRCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPnNlZWtJRCk7CisgICAg
cHJpdi0+c2Vla0lEID0gMDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0b3Ao
V2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5yZXNvdXJjZSkgewotICAgICAgICBwcml2LT5yZXNv
dXJjZS0+cmVtb3ZlQ2xpZW50KHByaXYtPmNsaWVudCk7Ci0gICAgICAgIHByaXYtPnJlc291cmNl
ID0gMDsKLSAgICB9CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExv
Y2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKworICAgIGJvb2wgc2Vla2lu
ZyA9IHByaXYtPnNlZWtJRDsKKworICAgIHJlbW92ZVRpbWVvdXRTb3VyY2VzKHNyYyk7CisgICAg
cHJpdi0+c3RvcElEID0gMDsKIAogICAgIGlmIChwcml2LT5jbGllbnQpIHsKICAgICAgICAgZGVs
ZXRlIHByaXYtPmNsaWVudDsKQEAgLTM3OCwyMSArNDQyLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgICAgICBwcml2
LT5idWZmZXIuY2xlYXIoKTsKICAgICB9CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAg
ICBpZiAocHJpdi0+bmVlZERhdGFJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPm5l
ZWREYXRhSUQpOwotICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwotCi0gICAgaWYgKHByaXYtPmVu
b3VnaERhdGFJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPmVub3VnaERhdGFJRCk7
Ci0gICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5zZWVrSUQpCi0g
ICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYtPnNlZWtJRCA9
IDA7Ci0KICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogCiAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgIHByaXYtPmlyYWRpb05h
bWUgPSAwOwpAQCAtNDA2LDM5ICs0NTYsNTQgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3Rv
cChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgIGdfZnJlZShwcml2LT5pcmFk
aW9UaXRsZSk7CiAgICAgcHJpdi0+aXJhZGlvVGl0bGUgPSAwOwogCi0gICAgaWYgKHByaXYtPmFw
cHNyYykgewotICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOwot
ICAgICAgICBpZiAoIXNlZWtpbmcpCi0gICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShw
cml2LT5hcHBzcmMsIC0xKTsKLSAgICB9Ci0KICAgICBwcml2LT5vZmZzZXQgPSAwOwogICAgIHBy
aXYtPnNlZWthYmxlID0gRkFMU0U7CiAKICAgICBpZiAoIXNlZWtpbmcpIHsKICAgICAgICAgcHJp
di0+c2l6ZSA9IDA7CiAgICAgICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IDA7CisgICAgICAg
IHByaXYtPnBsYXllciA9IDA7CisgICAgfQorCisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAg
aWYgKHByaXYtPmFwcHNyYykgeworICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5h
cHBzcmMsIDApOworICAgICAgICBpZiAoIXNlZWtpbmcpCisgICAgICAgICAgICBnc3RfYXBwX3Ny
Y19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOworCisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1z
dGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJL
aXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKworICAgIHByaXYtPnN0YXJ0SUQgPSAwOworCiAgICAgaWYgKCFwcml2LT51cmkpIHsK
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NrZXIudW5sb2NrKCk7CisgICAgICAgIHdlYktp
dFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEFT
U0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xpZW50KTsKIAogICAgIEtV
UkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwotICAgIHJl
cXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisKKyAgICBp
ZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihwcml2LT5w
bGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgLy8gTGV0J3MgZGlzYWJs
ZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdGhlIHJlY2VpdmVk
IHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzUzNCwyNiBAQCBzdGF0aWMgYm9vbCB3ZWJLaXRX
ZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVkZWQgdG8gdXNlIERMTkEg
c3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgidHJhbnNm
ZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVlc3QsIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgRG9Ob3RCdWZm
ZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jv
c3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVz
dHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9IGxvYWRlci0+cmVx
dWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJj
ZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMp
OwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChwcml2LT5jbGllbnQpOwot
ICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAgICBpZiAoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KSkKKyAgICAgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudChzcmMsIGxvYWRlciwgcmVxdWVzdCk7CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5y
ZXNvdXJjZSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBzY2hl
ZHVsZSByZXNvdXJjZSBsb2FkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
aWYgKCFwcml2LT5jbGllbnQpCisgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudChzcmMsIHJlcXVlc3QpOwogCisgICAgaWYgKCFwcml2LT5jbGll
bnQgfHwgcHJpdi0+Y2xpZW50LT5sb2FkRmFpbGVkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzcmMsICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCIpOworICAgICAgICBp
ZiAocHJpdi0+Y2xpZW50KSB7CisgICAgICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50OworICAg
ICAgICAgICAgcHJpdi0+Y2xpZW50ID0gMDsKKyAgICAgICAgfQorICAgICAgICBsb2NrZXIudW5s
b2NrKCk7CisgICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIH0KICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIp
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxl
bWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKQEAgLTUxMywxNSArNTgxLDE3IEBAIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVt
ZW50KiBlbGVtZW50LCBHc3RTdGF0CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRj
aCAodHJhbnNpdGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVT
RUQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAg
ICAgICBpZiAoIXdlYktpdFdlYlNyY1N0YXJ0KHNyYykpCi0gICAgICAgICAgICByZXQgPSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX2lkbGVfYWRk
X2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0YXJ0
LCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JF
QURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKLSAg
ICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNlKTsKKyAgICAgICAgLy8gY2FuY2VsIHBl
bmRpbmcgc291cmNlcworICAgICAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgICAg
ICBwcml2LT5zdG9wSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1Nv
dXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0b3AsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJv
eU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtNTMyLDcgKzYwMiw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCiB7Ci0gICAgV2ViS2l0
V2ViU3JjKiB3ZWJraXRTcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsK
KyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVu
dCkpOwogICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCiAgICAgc3dpdGNoIChHU1RfUVVF
UllfVFlQRShxdWVyeSkpIHsKQEAgLTU0MSwxNSArNjExLDE3IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50
LCBHc3RRCiAKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0
LCBOVUxMKTsKIAotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHdlYmtpdFNyYywgImR1cmF0aW9u
IHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAg
ICAgIGlmICgoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpICYmICh3ZWJraXRTcmMtPnByaXYt
PnNpemUgPiAwKSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwg
Zm9ybWF0LCB3ZWJraXRTcmMtPnByaXYtPnNpemUpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUo
Zm9ybWF0KSk7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIHNyYy0+
cHJpdi0+c2l6ZSA+IDApIHsKKyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVl
cnksIGZvcm1hdCwgc3JjLT5wcml2LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1FVRVJZX1VS
STogewotICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgd2Via2l0U3JjLT5wcml2LT51
cmkpOworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3Jj
KSk7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CiAg
ICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3ICs2
NjIsMTIgQEAgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5
cGUpCiAKIHN0YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5w
cml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxl
cik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7Cisg
ICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXJyb3IqKiBlcnJvcikK
QEAgLTYwMyw2ICs2ODAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dF
VF9MT0NLKHNyYykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0g
MDsKIApAQCAtNjM0LDcgKzcxMywxMiBAQCBzdGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQ
cm90b2NvbHModm9pZCkKIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmko
R3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dF
Ql9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBnY2hhciogcmV0OworCisgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHJldCA9IGdfc3RyZHVwKHNy
Yy0+cHJpdi0+dXJpKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkp
CkBAIC02NDcsNiArNzMxLDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4g
RkFMU0U7CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9M
T0NLKHNyYykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsK
IApAQCAtNjgxLDEyICs3NjcsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY05lZWRE
YXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3Bw
ZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpCisgICAgICAgIHJldHVybiBGQUxTRTsKIAot
ICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHByaXYtPnBhdXNlZCA9IEZBTFNFOwogICAg
IHByaXYtPm5lZWREYXRhSUQgPSAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAg
bG9ja2VyLnVubG9jaygpOworCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgcHJpdi0+
Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAK
QEAgLTY5NywyNyArNzkwLDMxIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRhQ2Io
R3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSkKIAogICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6ICV1IiwgbGVuZ3RoKTsKIAotICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9H
RVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+bmVlZERhdGFJRCB8fCAhcHJpdi0+cGF1c2Vk
KSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBwcml2LT5uZWVkRGF0YUlEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJ
VFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYiwg
Z3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsK
LSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHByaXYtPm5lZWREYXRhSUQgPSBnX2lk
bGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNy
Y05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdz
dF9vYmplY3RfdW5yZWYpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRW5vdWdo
RGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRp
bmcodHJ1ZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3Bw
ZWQKKyAgICBpZiAoIXByaXYtPmVub3VnaERhdGFJRCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwog
Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgcHJpdi0+cGF1c2VkID0gVFJVRTsKICAg
ICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Cisg
ICAgbG9ja2VyLnVubG9jaygpOwogCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgcHJp
di0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOwogICAgIHJldHVybiBGQUxTRTsKIH0K
IApAQCAtNzI4LDE5ICs4MjUsMjcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0
YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
KyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAg
aWYgKHByaXYtPmVub3VnaERhdGFJRCB8fCBwcml2LT5wYXVzZWQpIHsKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXYtPmVu
b3VnaERhdGFJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChH
U291cmNlRnVuYykgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYiwgZ3N0X29iamVjdF9yZWYo
c3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOworICAgIHByaXYtPmVub3VnaERhdGFJRCA9IGdfaWRsZV9hZGRfZnVsbChH
X1BSSU9SSVRZX0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1h
aW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3Vu
cmVmKTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IoV2ViS2l0
V2ViU3JjKiBzcmMpCiB7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIHRydWUpOworICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NL
KHNyYykpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+c2Vla0lEKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgd2ViS2l0
V2ViU3JjU3RvcChzcmMpOwogICAgIHdlYktpdFdlYlNyY1N0YXJ0KHNyYyk7CiAKICAgICByZXR1
cm4gRkFMU0U7CkBAIC03NTIsNiArODU3LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNy
Y1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zm
c2V0KTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgaWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0
ID09IHByaXYtPm9mZnNldCkKICAgICAgICAgcmV0dXJuIFRSVUU7CiAKQEAgLTc2MSwxMTAgKzg2
NywxNDAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3Jj
KiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNl
dCA9IG9mZnNldDsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5z
ZWVrSUQpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYt
PnNlZWtJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291
cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdE
ZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwotICAgIAorICAgIHByaXYtPnNlZWtJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZ
X0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVj
dF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKICAgICByZXR1
cm4gVFJVRTsKIH0KIAogdm9pZCB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJT
cmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxh
eWVyKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgc3JjLT5wcml2LT5wbGF5ZXIgPSBwbGF5ZXI7CiB9CiAKLVN0cmVhbWluZ0NsaWVudDo6
U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKSA6IG1fc3JjKHNyYykKK1N0cmVhbWlu
Z0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKQorICAgIDogbV9zcmMo
YWRvcHRHUmVmKHN0YXRpY19jYXN0PEdzdEVsZW1lbnQqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkp
CiB7Ci0KIH0KIAogU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KCkKIHsKK30KKwor
Y2hhciogU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRT
aXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9
IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyKTsKKworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVlc3RlZFNpemUpOwogCisj
aWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBtYXBHc3RCdWZmZXIoYnVmZmVyKTsKKyNlbmRp
ZgorCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwor
ICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworICAgIGxvY2tlci51bmxvY2so
KTsKKworICAgIGFjdHVhbFNpemUgPSBnZXRHc3RCdWZmZXJTaXplKGJ1ZmZlcik7CisgICAgcmV0
dXJuIGdldEdzdEJ1ZmZlckRhdGFQb2ludGVyKGJ1ZmZlcik7CiB9CiAKLXZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxl
UmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
UmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNU
X0dFVF9MT0NLKHNyYykpOwogCiAgICAgLy8gSWYgd2Ugc2Vla2VkIHdlIG5lZWQgMjA2ID09IFBB
UlRJQUxfQ09OVEVOVAogICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9z
cmMsIFJFU09VUkNFLCBSRUFELCAoMCksICgwKSk7CisgICAgICAgIGxvY2tlci51bmxvY2soKTsK
KyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAoMCkp
OwogICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0gICAg
ICAgIHdlYktpdFdlYlNyY1N0b3AobV9zcmMsIGZhbHNlKTsKKyAgICAgICAgd2ViS2l0V2ViU3Jj
U3RvcChzcmMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbG9uZyBsb25nIGxlbmd0
aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAw
KSB7CisgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxlbmd0aCArPSBwcml2LT5yZXF1ZXN0
ZWRPZmZzZXQ7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgbGVu
Z3RoKTsKLQotI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICBpZiAoIXByaXYtPmhh
dmVBcHBTcmMyNykgewotICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKCZHU1Rf
QkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChwcml2
LT5hcHBzcmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9tZXNz
YWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNyYyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9GT1JN
QVRfQllURVMsIGxlbmd0aCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9CiAKICAgICBwcml2
LT5zaXplID0gbGVuZ3RoID49IDAgPyBsZW5ndGggOiAwOwogICAgIHByaXYtPnNlZWthYmxlID0g
bGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAoIm5vbmUiLCByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoIkFjY2VwdC1SYW5nZXMiKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIC8vIGljZWNh
c3Qgc3R1ZmYKLSAgICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS1tZXRhaW50Iik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2NoYXIq
IGVuZHB0ciA9IDA7Ci0gICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xs
KHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgewotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19z
aW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lO
VCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwpKTsKLQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBzLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQog
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdf
bGlzdF9uZXdfZW1wdHkoKTsKICNlbHNlCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdf
bGlzdF9uZXcoKTsKICNlbmRpZgotICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KCJpY3ktbmFtZSIpOworICAgIFN0cmluZyB2YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiaWN5LW5hbWUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2Zy
ZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb05hbWUgPSBnX3N0cmR1
cCh2YWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNU
KG1fc3JjKSwgImlyYWRpby1uYW1lIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChzcmMpLCAiaXJhZGlvLW5hbWUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBH
U1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfT1JHQU5JWkFUSU9OLCBwcml2LT5pcmFkaW9O
YW1lLCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
ImljeS1nZW5yZSIpOwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJl
ZShwcml2LT5pcmFkaW9HZW5yZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb0dlbnJlID0gZ19zdHJk
dXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChtX3NyYyksICJpcmFkaW8tZ2VucmUiKTsKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JK
RUNUKHNyYyksICJpcmFkaW8tZ2VucmUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdz
LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfR0VOUkUsIHByaXYtPmlyYWRpb0dlbnJl
LCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS11cmwiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2ZyZWUocHJp
di0+aXJhZGlvVXJsKTsKICAgICAgICAgcHJpdi0+aXJhZGlvVXJsID0gZ19zdHJkdXAodmFsdWUu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyks
ICJpcmFkaW8tdXJsIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAi
aXJhZGlvLXVybCIpOwogICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ3MsIEdTVF9UQUdfTUVS
R0VfUkVQTEFDRSwgR1NUX1RBR19MT0NBVElPTiwgcHJpdi0+aXJhZGlvVXJsLCBOVUxMKTsKICAg
ICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS10aXRsZSIpOwog
ICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJlZShwcml2LT5pcmFkaW9U
aXRsZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb1RpdGxlID0gZ19zdHJkdXAodmFsdWUudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFk
aW8tdGl0bGUiKTsKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHNyYyksICJpcmFk
aW8tdGl0bGUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBHU1RfVEFHX01FUkdF
X1JFUExBQ0UsIEdTVF9UQUdfVElUTEUsIHByaXYtPmlyYWRpb1RpdGxlLCBOVUxMKTsKICAgICB9
CiAKKyAgICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICAvLyBub3RpZnkgc2l6ZS9kdXJhdGlvbgor
ICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYt
PmFwcHNyYywgbGVuZ3RoKTsKKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBp
ZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgeworICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1
cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9C
WVRFUywgbGVuZ3RoKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1Rf
RUxFTUVOVChwcml2LT5hcHBzcmMpLAorICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19k
dXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNyYyksCisgICAgICAgICAgICAgICAgICAgIEdT
VF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UK
KyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CisKKyAgICAv
LyBpY2VjYXN0IHN0dWZmCisgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS1tZXRhaW50Iik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ2NoYXIq
IGVuZHB0ciA9IDA7CisgICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xs
KHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKKworICAgICAgICBpZiAoZW5kcHRy
ICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgeworICAgICAgICAgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxp
Y2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGlj
eU1ldGFJbnQsIE5VTEwpKTsKKworICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJp
di0+YXBwc3JjLCBjYXBzLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBn
c3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworCisgICAgLy8gbm90aWZ5IHRh
Z3MKICAgICBpZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5KHRhZ3MpKQogI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCiAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZih0YWdzKTsKQEAgLTg3MiwxNCAr
MTAwOCwxNyBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUgogICAgICAgICBnc3RfdGFnX2xpc3Rf
ZnJlZSh0YWdzKTsKICNlbmRpZgogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFk
KEdTVF9FTEVNRU5UKG1fc3JjKSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFncyk7CisgICAgICAg
IG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChzcmMpLCBwcml2LT5zcmNwYWQsIHRhZ3Mp
OwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3ZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
IHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2Vi
S2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JKRUNUKG1f
c3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVyID8gZ2V0R3N0QnVmZmVy
U2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisKKyAgICBHU1RfTE9HX09CSkVDVChzcmMs
ICJIYXZlICVkIGJ5dGVzIG9mIGRhdGEiLCBwcml2LT5idWZmZXIgPyBnZXRHc3RCdWZmZXJTaXpl
KHByaXYtPmJ1ZmZlci5nZXQoKSkgOiBsZW5ndGgpOwogCiAgICAgQVNTRVJUKCFwcml2LT5idWZm
ZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihwcml2LT5idWZmZXIuZ2V0KCkp
KTsKIApAQCAtODg4LDggKzEwMjcsOCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgICAg
ICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5idWZmZXIuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBpZiAo
cHJpdi0+c2Vla0lEIHx8IHJlc291cmNlICE9IHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9zcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7
CisgICAgaWYgKHByaXYtPnNlZWtJRCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
IlNlZWsgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVy
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MDcsNTcgKzEwNDYsMTgyIEBA
IHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAgICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKICAg
ICAvLyBwcml2LT5zaXplID09IDAgaWYgcmVjZWl2ZWQgbGVuZ3RoIG9uIGRpZFJlY2VpdmVSZXNw
b25zZSA8IDAuCiAgICAgaWYgKHByaXYtPnNpemUgPiAwICYmIHByaXYtPm9mZnNldCA+IHByaXYt
PnNpemUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlVwZGF0aW5nIGludGVy
bmFsIHNpemUgZnJvbSAlIiBHX0dVSU5UNjRfRk9STUFUICIgdG8gJSIgR19HVUlOVDY0X0ZPUk1B
VCwgcHJpdi0+c2l6ZSwgcHJpdi0+b2Zmc2V0KTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJVcGRhdGluZyBpbnRlcm5hbCBzaXplIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUsIHByaXYtPm9mZnNldCk7CiAgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgcHJpdi0+b2Zmc2V0KTsKICAgICAg
ICAgcHJpdi0+c2l6ZSA9IHByaXYtPm9mZnNldDsKICAgICB9CiAgICAgR1NUX0JVRkZFUl9PRkZT
RVRfRU5EKHByaXYtPmJ1ZmZlci5nZXQoKSkgPSBwcml2LT5vZmZzZXQ7CiAKKyAgICBsb2NrZXIu
dW5sb2NrKCk7CisKICAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVm
ZmVyKHByaXYtPmFwcHNyYywgcHJpdi0+YnVmZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxP
V19FT1MpCiAjZWxzZQogICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9G
TE9XX1VORVhQRUNURUQpCiAjZW5kaWYKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMs
IENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMs
IENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOwogfQogCi1jaGFyKiBTdHJlYW1pbmdDbGllbnQ6Omdl
dE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXpl
LCBzaXplX3QmIGFjdHVhbFNpemUpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlTm90aWZ5
RmluaXNoZWQoKQogewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJp
djsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsK
KyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgQVNTRVJU
KCFwcml2LT5idWZmZXIpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBFT1MiKTsK
IAotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVl
c3RlZFNpemUpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKyAgICBpZiAoIXByaXYtPnNlZWtJRCkgeworICAgICAgICBsb2NrZXIudW5sb2NrKCk7
CisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKKyAgICB9
Cit9CiAKLSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgIG1hcEdzdEJ1ZmZlcihidWZmZXIp
OwotI2VuZGlmCitDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsIENhY2hlZFJlc291cmNlTG9hZGVyKiBy
ZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3Ry
ZWFtaW5nQ2xpZW50KHNyYykKK3sKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1
ZXN0KHJlcXVlc3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNu
aWZmQ29udGVudCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMs
IERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNr
LCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOworICAgIG1fcmVzb3VyY2Ug
PSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7CisgICAg
aWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKK30K
IAotICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpCit7CisgICAg
aWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMp
OworICAgICAgICBtX3Jlc291cmNlID0gMDsKKyAgICB9Cit9CiAKLSAgICBhY3R1YWxTaXplID0g
Z2V0R3N0QnVmZmVyU2l6ZShidWZmZXIpOwotICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9p
bnRlcihidWZmZXIpOworYm9vbCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZh
aWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Jlc291cmNlOworfQorCit2b2lkIENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQor
eworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2Fk
aW5nKGRlZmVycyk7CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50Ojpub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCitjaGFyKiBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKENhY2hlZFJlc291cmNlKiwgc2l6ZV90IHJlcXVl
c3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6ZSkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgcmV0dXJuIGNyZWF0ZVJlYWRCdWZmZXIocmVxdWVz
dGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBoYW5kbGVSZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNl
KTsKK30KIAordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBo
YW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
KQorewogICAgIGlmIChyZXNvdXJjZS0+bG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSkgeworICAgICAg
ICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKwogICAg
ICAgICBpZiAoIXJlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7CiAgICAgICAgICAgICBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvciA9IHJlc291cmNlLT5yZXNvdXJjZUVycm9yKCk7Ci0gICAgICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihtX3NyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXpl
ZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CisgICAgICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3Jj
LCBSRVNPVVJDRSwgRkFJTEVELCAoIiVzIiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpKSwgKDApKTsKICAgICAgICAgfQotICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKHNyYy0+cHJpdi0+YXBwc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJIYXZlIEVPUyIpOworICAgIGhhbmRsZU5vdGlm
eUZpbmlzaGVkKCk7Cit9CiAKLSAgICBpZiAoIXByaXYtPnNlZWtJRCkKLSAgICAgICAgZ3N0X2Fw
cF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+cHJpdi0+YXBwc3JjKTsKK1Jlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJT
cmMqIHNyYywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3RyZWFtaW5n
Q2xpZW50KHNyYykKK3sKKyAgICBtX3Jlc291cmNlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSgw
IC8qY29udGV4dCovLCByZXF1ZXN0LCB0aGlzLCBmYWxzZSwgZmFsc2UpOworfQorCitSZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkK
K3sKKyAgICBpZiAobV9yZXNvdXJjZSkgeworICAgICAgICBtX3Jlc291cmNlLT5jYW5jZWwoKTsK
KyAgICAgICAgbV9yZXNvdXJjZS5yZWxlYXNlKCk7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOwor
ICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Jlc291cmNlOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQorewor
ICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2FkaW5n
KGRlZmVycyk7Cit9CisKK2NoYXIqIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRP
ckNyZWF0ZVJlYWRCdWZmZXIoc2l6ZV90IHJlcXVlc3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6
ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVhZEJ1ZmZlcihyZXF1ZXN0ZWRTaXplLCBhY3R1YWxT
aXplKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIGhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQocmVzcG9uc2UpOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCkKK3sKKyAgICBo
YW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJs
ZSkKK3sKKyAgICBoYW5kbGVOb3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NS
QyhtX3NyYy5nZXQoKSk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVy
ZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAg
IEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CisgICAgZ3N0X2FwcF9z
cmNfZW5kX29mX3N0cmVhbShzcmMtPnByaXYtPmFwcHNyYyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAg
IFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdP
d25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiUmVxdWVzdCB3
YXMgYmxvY2tlZCIpOworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9M
T0NLKHNyYykpOworICAgIHVyaS5zZXQoZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKKyAgICBs
b2NrZXIudW5sb2NrKCk7CisKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBP
UEVOX1JFQUQsICgiQWNjZXNzIHRvIFwiJXNcIiB3YXMgYmxvY2tlZCIsIHVyaS5nZXQoKSksICgw
KSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dV
UkwoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdPd25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc3JjLCAiQ2Fubm90IHNob3cgVVJMIik7CisKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgdXJpLnNldChnX3N0cmR1cChz
cmMtPnByaXYtPnVyaSkpOworICAgIGxvY2tlci51bmxvY2soKTsKKworICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKCJDYW4ndCBzaG93IFwiJXNcIiIsIHVy
aS5nZXQoKSksICgwKSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQotLSAKMS44LjEu
MgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209473</attachid>
            <date>2013-08-23 10:24:07 -0700</date>
            <delta_ts>2013-08-26 07:32:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>44748</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA2YjNjMmFkMGUzMGQwYTMxOTNlMjc2OTYwNDgxOWVhYzg3NmQ1ZWM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMTkgQXVnIDIwMTMg
MTg6MDM6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24g
YW55IHRocmVhZCBieSBjYWxsaW5nCmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUg
VVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxlbWVudC4KVGhpcyBwYXRjaCBtYWtlcyBzdXJl
IHRoZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNz
dWVzIHdpdGggaXQKYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KCkFsc28g
YWRkIGNvbnZlbmllbmNlIGNsYXNzIHRoYXQgc2ltcGxpZmllcyBsb2NraW5nIGFuZCB1bmxvY2tp
bmcgYSBHTXV0ZXguCgoqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgood2Via2l0X3dlYl9zcmNfaW5pdCk6Cih3ZWJLaXRXZWJTcmNEaXNw
b3NlKToKKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToK
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKHdlYktp
dFdlYlNyY1N0b3ApOgood2ViS2l0V2ViU3JjU3RhcnQpOgood2ViS2l0V2ViU3JjQ2hhbmdlU3Rh
dGUpOgood2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKHdlYktpdFdlYlNyY0dldFVyaSk6
Cih3ZWJLaXRXZWJTcmNTZXRVcmkpOgood2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgood2Vi
S2l0V2ViU3JjTmVlZERhdGFDYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKHdl
YktpdFdlYlNyY0Vub3VnaERhdGFDYik6Cih3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKToKKHdlYktp
dFdlYlNyY1NlZWtEYXRhQ2IpOgood2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgooU3RyZWFt
aW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQpOgooU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5n
Q2xpZW50KToKKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CihTdHJlYW1pbmdD
bGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVE
YXRhUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CihD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudCk6CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6
CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CihDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToKKENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKToKKENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpn
ZXRPckNyZWF0ZVJlYWRCdWZmZXIpOgooUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondp
bGxTZW5kUmVxdWVzdCk6Ck1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8g
dXNlIHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgp0aGUgREFT
SCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMpLCB1c2Ug
R011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CmxvY2tzIGFuZCBvdGhlciBnZW5lcmFsIGltcHJvdmVt
ZW50cy4KCiogR05VbWFrZWZpbGUubGlzdC5hbToKKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIu
aDogQWRkZWQuCihXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CihXZWJDb3Jl
OjpHTXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgooV2ViQ29yZTo6R011dGV4TG9ja2VyOjps
b2NrKToKKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKKFdlYkNvcmU6OkdNdXRleExv
Y2tlcjo6bXV0ZXgpOgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE3ICsKIFNvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSAgICAg
ICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmggICAgICAgICAgICAgIHwgIDcyICsrKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjIgKysrCiAuLi4vZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHAgICAgICAgICB8IDU3NiArKysrKysrKysrKysrKystLS0tLS0K
IDUgZmlsZXMgY2hhbmdlZCwgNTcyIGluc2VydGlvbnMoKyksIDE1NiBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA2NmM3YTc2Li5jYzQ1YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA4LTE5ICBB
bmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVr
PgorCisgICAgICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1l
bnQgaXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IHNpbXBsaWZpZXMgbG9ja2luZyBh
bmQgdW5sb2NraW5nIGEgR011dGV4LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpH
TXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R011dGV4TG9j
a2VyOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6bXV0ZXgpOgorCiAyMDEzLTA4LTIxICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTU0NDE2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGJjMDJlNjgu
LmU4MzRiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTIxMSw2ICsyMTEsNyBAQCB3dGZf
c291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS9zdHJ0b2QuY2MgXAogICAgIFNv
dXJjZS9XVEYvd3RmL2R0b2Evc3RydG9kLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2R0b2EvdXRp
bHMuaCBcCisgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCBcCiAgICAg
U291cmNlL1dURi93dGYvZ29iamVjdC9HT3duUHRyLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYv
Z29iamVjdC9HT3duUHRyLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCBi
L1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODMxYWUyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR011dGV4
TG9ja2VyX2gKKyNkZWZpbmUgR011dGV4TG9ja2VyX2gKKworI2lmIFVTRShHTElCKQorCisjaW5j
bHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTXV0
ZXhMb2NrZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdNdXRleExvY2tlcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgaW5saW5lIGV4cGxpY2l0IEdNdXRl
eExvY2tlcihHTXV0ZXggKm11dGV4KQorICAgICAgICA6IG1fbXV0ZXgobXV0ZXgpCisgICAgICAg
ICwgbV92YWwoMCkKKyAgICB7CisgICAgICAgIGxvY2soKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
fkdNdXRleExvY2tlcigpIHsgdW5sb2NrKCk7IH0KKworICAgIGlubGluZSB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbXV0ZXggJiYgIW1fdmFsKSB7CisgICAgICAgICAgICBnX211
dGV4X2xvY2sobV9tdXRleCk7CisgICAgICAgICAgICBtX3ZhbCA9IDE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpbmxpbmUgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbXV0
ZXggJiYgbV92YWwpIHsKKyAgICAgICAgICAgIG1fdmFsID0gMDsKKyAgICAgICAgICAgIGdfbXV0
ZXhfdW5sb2NrKG1fbXV0ZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgaW5saW5lIEdNdXRl
eCogbXV0ZXgoKSBjb25zdCB7IHJldHVybiBtX211dGV4OyB9CisKK3ByaXZhdGU6CisgICAgR011
dGV4KiBtX211dGV4OworICAgIHVpbnQ4X3QgbV92YWw7Cit9OworCit9CisKKyNlbmRpZiAvLyBV
U0UoR0xJQikKKworI2VuZGlmIC8vIEdNdXRleExvY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDliMjg4
Yi4uNWM3NDJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA4LTE5ICBBbmRy
ZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgor
CisgICAgICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQg
aXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0
cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisgICAgICAgIGdzdF9lbGVt
ZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxl
bWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBnc3RyZWFtZXIgc291cmNl
IGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggaXQKKyAgICAgICAg
YmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNEaXNwb3Nl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAg
ICAgKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgor
ICAgICAgICAod2ViS2l0V2ViU3JjU3RhcnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdl
U3RhdGUpOgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKyAgICAgICAg
KHdlYktpdFdlYlNyY0dldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3Jj
TmVlZERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNT
ZWVrTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpT
dHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xp
ZW50KToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CisgICAg
ICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAo
U3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQpOgorICAgICAgICAoU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9h
ZGluZyk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVh
dGVSZWFkQnVmZmVyKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpy
ZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpkYXRhUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlk
RmFpbCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tl
ZCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VS
TCk6CisgICAgICAgIE1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8gdXNl
IHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgorICAgICAgICB0
aGUgREFTSCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMp
LCB1c2UgR011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CisgICAgICAgIGxvY2tzIGFuZCBvdGhlciBn
ZW5lcmFsIGltcHJvdmVtZW50cy4KKwogMjAxMy0wOC0yMyAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNTM5Mzkp
IEZpeCB0eXBvIGluIFF0IGJ1aWxkLWZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCmluZGV4IDBjYzU3NWUuLmY4Yzc5MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zMSwzMiArMzEsODAgQEAKICNpbmNs
dWRlICJHU3RyZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzcmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMv
bWlzc2luZy1wbHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBTdHJl
YW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworY2xhc3MgU3RyZWFtaW5nQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0cmVhbWlu
Z0NsaWVudChXZWJLaXRXZWJTcmMqKTsKICAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50
KCk7CiAKKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRGYWlsZWQoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpID0gMDsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgY2hhciogY3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6
ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCBoYW5kbGVSZXNwb25zZVJlY2Vp
dmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBoYW5kbGVEYXRhUmVj
ZWl2ZWQoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgaGFuZGxlTm90aWZ5RmluaXNo
ZWQoKTsKKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3JjOworfTsKKworY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQsIHB1YmxpYyBTdHJlYW1pbmdDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqLCBDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OworICAgICAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpOworCisg
ICAgICAgIC8vIFN0cmVhbWluZ0NsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIHZpcnR1
YWwgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREZWZl
cnNMb2FkaW5nKGJvb2wpOworCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKKyAgICAgICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQgdmlydHVhbCBtZXRob2Rz
LgorICAgICAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNv
dXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICAgICAgdmlydHVhbCBjaGFyKiBnZXRP
ckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwg
c2l6ZV90JiBhY3R1YWxTaXplKTsKIAotICAgICAgICBXZWJLaXRXZWJTcmMqIG1fc3JjOworICAg
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNvdXJjZTsK
K307CisKK2NsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291
cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtaW5nQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoV2ViS2l0V2ViU3JjKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgflJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAgLy8gU3Ry
ZWFtaW5nQ2xpZW50IHZpcnR1YWwgbWV0aG9kcy4KKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRG
YWlsZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9v
bCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudCB2aXJ0
dWFsIG1ldGhvZHMuCisgICAgICAgIHZpcnR1YWwgY2hhciogZ2V0T3JDcmVhdGVSZWFkQnVmZmVy
KHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiwgaW50LCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
ZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9yZXNvdXJjZTsKIH07CiAKICNkZWZpbmUgV0VCS0lU
X1dFQl9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9XRUJfU1JDLCBXZWJLaXRXZWJTcmNQcml2YXRlKSkKQEAgLTY4LDcg
KzExNiw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAgICAgV2ViQ29yZTo6TWVk
aWFQbGF5ZXIqIHBsYXllcjsKIAogICAgIFN0cmVhbWluZ0NsaWVudCogY2xpZW50OwotICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXNvdXJjZTsKIAogICAgIGd1
aW50NjQgb2Zmc2V0OwogICAgIGd1aW50NjQgc2l6ZTsKQEAgLTc3LDYgKzEyNCw4IEBAIHN0cnVj
dCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsK
IAorICAgIGd1aW50IHN0YXJ0SUQ7CisgICAgZ3VpbnQgc3RvcElEOwogICAgIGd1aW50IG5lZWRE
YXRhSUQ7CiAgICAgZ3VpbnQgZW5vdWdoRGF0YUlEOwogICAgIGd1aW50IHNlZWtJRDsKQEAgLTEy
OSw4ICsxNzgsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKEdzdEFwcFNy
YyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpOwogc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zm
c2V0LCBncG9pbnRlciB1c2VyRGF0YSk7CiAKLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3Ao
V2ViS2l0V2ViU3JjKiwgYm9vbCk7Ci0KIHN0YXRpYyBHc3RBcHBTcmNDYWxsYmFja3MgYXBwc3Jj
Q2FsbGJhY2tzID0gewogICAgIHdlYktpdFdlYlNyY05lZWREYXRhQ2IsCiAgICAgd2ViS2l0V2Vi
U3JjRW5vdWdoRGF0YUNiLApAQCAtMTg0LDcgKzIzMSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfc3JjX2NsYXNzX2luaXQoV2ViS2l0V2ViU3JjQ2xhc3MqIGtsYXNzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2VucmUgb2YgdGhl
IHN0cmVhbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NU
QVRJQ19TVFJJTkdTKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2tsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JUkFESU9f
VVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygiaXJhZGlvLXVybCIsCkBAIC0yMjIsOCArMjY5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKIAogICAgIHNyYy0+cHJpdiA9IHByaXY7
CiAKLSAgICBwcml2LT5jbGllbnQgPSBuZXcgU3RyZWFtaW5nQ2xpZW50KHNyYyk7Ci0KICAgICBw
cml2LT5hcHBzcmMgPSBHU1RfQVBQX1NSQyhnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNy
YyIsIDApKTsKICAgICBpZiAoIXByaXYtPmFwcHNyYykgewogICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgYXBwc3JjIik7CkBAIC0yNzIsNyArMzE3LDggQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKICAgICBp
ZiAocHJpdi0+aGF2ZUFwcFNyYzI3KQogICAgICAgICBnX29iamVjdF9zZXQocHJpdi0+YXBwc3Jj
LCAibWluLXBlcmNlbnQiLCAyMCwgTlVMTCk7CiAKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywg
ZmFsc2UpOworICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7CisgICAg
Z3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQpAQCAtMjgwLDEzICszMjYsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5idWZmZXIpIHsK
LSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5i
dWZmZXIuZ2V0KCkpOwotI2VuZGlmCi0gICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwotICAg
IH0KLQogICAgIHByaXYtPnBsYXllciA9IDA7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpF
Q1RfQ0xBU1MsIGRpc3Bvc2UsIChvYmplY3QpKTsKQEAgLTI5Nyw4ICszMzYsNiBAQCBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZh
dGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBkZWxldGUgcHJpdi0+Y2xpZW50OwotCiAgICAg
Z19mcmVlKHByaXYtPnVyaSk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1Ms
IGZpbmFsaXplLCAob2JqZWN0KSk7CkBAIC0zMTAsOSArMzQ3LDExIEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25z
dCBHVmFsdWUqCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAog
ICAgIHN3aXRjaCAocHJvcElEKSB7Ci0gICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgorICAgIGNh
c2UgUFJPUF9JUkFESU9fTU9ERTogeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgICAgIHByaXYtPmlyYWRpb01vZGUgPSBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUFJP
UF9MT0NBVElPTjoKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdXJpX2hh
bmRsZXJfc2V0X3VyaShyZWludGVycHJldF9jYXN0PEdzdFVSSUhhbmRsZXIqPihzcmMpLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpLCAwKTsKQEAgLTMzMSw2ICszNzAsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwg
R1ZhbHVlKiB2YWx1ZQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2Jq
ZWN0KTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRj
aCAocHJvcElEKSB7CiAgICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgogICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pcmFkaW9Nb2RlKTsKQEAgLTM1NiwxNSArMzk2LDM5
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgfQogfQogCitzdGF0aWMgdm9pZCByZW1v
dmVUaW1lb3V0U291cmNlcyhXZWJLaXRXZWJTcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPnN0YXJ0SUQpCisgICAg
ICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zdGFydElEKTsKKyAgICBwcml2LT5zdGFydElEID0g
MDsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9v
bCBzZWVraW5nKQorICAgIGlmIChwcml2LT5uZWVkRGF0YUlEKQorICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+bmVlZERhdGFJRCk7CisgICAgcHJpdi0+bmVlZERhdGFJRCA9IDA7CisKKyAg
ICBpZiAocHJpdi0+ZW5vdWdoRGF0YUlEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+
ZW5vdWdoRGF0YUlEKTsKKyAgICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOworCisgICAgaWYgKHBy
aXYtPnNlZWtJRCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPnNlZWtJRCk7CisgICAg
cHJpdi0+c2Vla0lEID0gMDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0b3Ao
V2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5yZXNvdXJjZSkgewotICAgICAgICBwcml2LT5yZXNv
dXJjZS0+cmVtb3ZlQ2xpZW50KHByaXYtPmNsaWVudCk7Ci0gICAgICAgIHByaXYtPnJlc291cmNl
ID0gMDsKLSAgICB9CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExv
Y2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKworICAgIGJvb2wgc2Vla2lu
ZyA9IHByaXYtPnNlZWtJRDsKKworICAgIHJlbW92ZVRpbWVvdXRTb3VyY2VzKHNyYyk7CisgICAg
cHJpdi0+c3RvcElEID0gMDsKIAogICAgIGlmIChwcml2LT5jbGllbnQpIHsKICAgICAgICAgZGVs
ZXRlIHByaXYtPmNsaWVudDsKQEAgLTM3OCwyMSArNDQyLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgICAgICBwcml2
LT5idWZmZXIuY2xlYXIoKTsKICAgICB9CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAg
ICBpZiAocHJpdi0+bmVlZERhdGFJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPm5l
ZWREYXRhSUQpOwotICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwotCi0gICAgaWYgKHByaXYtPmVu
b3VnaERhdGFJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPmVub3VnaERhdGFJRCk7
Ci0gICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5zZWVrSUQpCi0g
ICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYtPnNlZWtJRCA9
IDA7Ci0KICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogCiAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgIHByaXYtPmlyYWRpb05h
bWUgPSAwOwpAQCAtNDA2LDM5ICs0NTYsNTQgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3Rv
cChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgIGdfZnJlZShwcml2LT5pcmFk
aW9UaXRsZSk7CiAgICAgcHJpdi0+aXJhZGlvVGl0bGUgPSAwOwogCi0gICAgaWYgKHByaXYtPmFw
cHNyYykgewotICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOwot
ICAgICAgICBpZiAoIXNlZWtpbmcpCi0gICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShw
cml2LT5hcHBzcmMsIC0xKTsKLSAgICB9Ci0KICAgICBwcml2LT5vZmZzZXQgPSAwOwogICAgIHBy
aXYtPnNlZWthYmxlID0gRkFMU0U7CiAKICAgICBpZiAoIXNlZWtpbmcpIHsKICAgICAgICAgcHJp
di0+c2l6ZSA9IDA7CiAgICAgICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IDA7CisgICAgICAg
IHByaXYtPnBsYXllciA9IDA7CisgICAgfQorCisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAg
aWYgKHByaXYtPmFwcHNyYykgeworICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5h
cHBzcmMsIDApOworICAgICAgICBpZiAoIXNlZWtpbmcpCisgICAgICAgICAgICBnc3RfYXBwX3Ny
Y19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOworCisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1z
dGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJL
aXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKworICAgIHByaXYtPnN0YXJ0SUQgPSAwOworCiAgICAgaWYgKCFwcml2LT51cmkpIHsK
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NrZXIudW5sb2NrKCk7CisgICAgICAgIHdlYktp
dFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEFT
U0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xpZW50KTsKIAogICAgIEtV
UkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwotICAgIHJl
cXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisKKyAgICBp
ZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihwcml2LT5w
bGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgLy8gTGV0J3MgZGlzYWJs
ZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdGhlIHJlY2VpdmVk
IHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzUzNCwyNiBAQCBzdGF0aWMgYm9vbCB3ZWJLaXRX
ZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVkZWQgdG8gdXNlIERMTkEg
c3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgidHJhbnNm
ZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVlc3QsIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgRG9Ob3RCdWZm
ZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jv
c3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVz
dHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9IGxvYWRlci0+cmVx
dWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJj
ZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMp
OwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChwcml2LT5jbGllbnQpOwot
ICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAgICBpZiAoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KSkKKyAgICAgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudChzcmMsIGxvYWRlciwgcmVxdWVzdCk7CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5y
ZXNvdXJjZSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBzY2hl
ZHVsZSByZXNvdXJjZSBsb2FkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
aWYgKCFwcml2LT5jbGllbnQpCisgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudChzcmMsIHJlcXVlc3QpOwogCisgICAgaWYgKCFwcml2LT5jbGll
bnQgfHwgcHJpdi0+Y2xpZW50LT5sb2FkRmFpbGVkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzcmMsICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCIpOworICAgICAgICBp
ZiAocHJpdi0+Y2xpZW50KSB7CisgICAgICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50OworICAg
ICAgICAgICAgcHJpdi0+Y2xpZW50ID0gMDsKKyAgICAgICAgfQorICAgICAgICBsb2NrZXIudW5s
b2NrKCk7CisgICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIH0KICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIp
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxl
bWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKQEAgLTUxMywxNSArNTgxLDE3IEBAIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVt
ZW50KiBlbGVtZW50LCBHc3RTdGF0CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRj
aCAodHJhbnNpdGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVT
RUQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAg
ICAgICBpZiAoIXdlYktpdFdlYlNyY1N0YXJ0KHNyYykpCi0gICAgICAgICAgICByZXQgPSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX2lkbGVfYWRk
X2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0YXJ0
LCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JF
QURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKLSAg
ICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNlKTsKKyAgICAgICAgLy8gY2FuY2VsIHBl
bmRpbmcgc291cmNlcworICAgICAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgICAg
ICBwcml2LT5zdG9wSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1Nv
dXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0b3AsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJv
eU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtNTMyLDcgKzYwMiw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCiB7Ci0gICAgV2ViS2l0
V2ViU3JjKiB3ZWJraXRTcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsK
KyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVu
dCkpOwogICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCiAgICAgc3dpdGNoIChHU1RfUVVF
UllfVFlQRShxdWVyeSkpIHsKQEAgLTU0MSwxNSArNjExLDE3IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50
LCBHc3RRCiAKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0
LCBOVUxMKTsKIAotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHdlYmtpdFNyYywgImR1cmF0aW9u
IHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAg
ICAgIGlmICgoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpICYmICh3ZWJraXRTcmMtPnByaXYt
PnNpemUgPiAwKSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwg
Zm9ybWF0LCB3ZWJraXRTcmMtPnByaXYtPnNpemUpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUo
Zm9ybWF0KSk7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIHNyYy0+
cHJpdi0+c2l6ZSA+IDApIHsKKyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVl
cnksIGZvcm1hdCwgc3JjLT5wcml2LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1FVRVJZX1VS
STogewotICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgd2Via2l0U3JjLT5wcml2LT51
cmkpOworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3Jj
KSk7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CiAg
ICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3ICs2
NjIsMTIgQEAgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5
cGUpCiAKIHN0YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5w
cml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxl
cik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7Cisg
ICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXJyb3IqKiBlcnJvcikK
QEAgLTYwMyw2ICs2ODAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dF
VF9MT0NLKHNyYykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0g
MDsKIApAQCAtNjM0LDcgKzcxMywxMiBAQCBzdGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQ
cm90b2NvbHModm9pZCkKIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmko
R3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dF
Ql9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBnY2hhciogcmV0OworCisgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHJldCA9IGdfc3RyZHVwKHNy
Yy0+cHJpdi0+dXJpKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkp
CkBAIC02NDcsNiArNzMxLDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4g
RkFMU0U7CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9M
T0NLKHNyYykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsK
IApAQCAtNjgxLDEyICs3NjcsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY05lZWRE
YXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3Bw
ZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpCisgICAgICAgIHJldHVybiBGQUxTRTsKIAot
ICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHByaXYtPnBhdXNlZCA9IEZBTFNFOwogICAg
IHByaXYtPm5lZWREYXRhSUQgPSAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAg
bG9ja2VyLnVubG9jaygpOworCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgcHJpdi0+
Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAK
QEAgLTY5NywyNyArNzkwLDMxIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRhQ2Io
R3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSkKIAogICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6ICV1IiwgbGVuZ3RoKTsKIAotICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9H
RVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+bmVlZERhdGFJRCB8fCAhcHJpdi0+cGF1c2Vk
KSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBwcml2LT5uZWVkRGF0YUlEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJ
VFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYiwg
Z3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsK
LSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHByaXYtPm5lZWREYXRhSUQgPSBnX2lk
bGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNy
Y05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdz
dF9vYmplY3RfdW5yZWYpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRW5vdWdo
RGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRp
bmcodHJ1ZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3Bw
ZWQKKyAgICBpZiAoIXByaXYtPmVub3VnaERhdGFJRCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwog
Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgcHJpdi0+cGF1c2VkID0gVFJVRTsKICAg
ICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Cisg
ICAgbG9ja2VyLnVubG9jaygpOwogCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgcHJp
di0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOwogICAgIHJldHVybiBGQUxTRTsKIH0K
IApAQCAtNzI4LDE5ICs4MjUsMjcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0
YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
KyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAg
aWYgKHByaXYtPmVub3VnaERhdGFJRCB8fCBwcml2LT5wYXVzZWQpIHsKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXYtPmVu
b3VnaERhdGFJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChH
U291cmNlRnVuYykgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYiwgZ3N0X29iamVjdF9yZWYo
c3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOworICAgIHByaXYtPmVub3VnaERhdGFJRCA9IGdfaWRsZV9hZGRfZnVsbChH
X1BSSU9SSVRZX0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1h
aW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3Vu
cmVmKTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IoV2ViS2l0
V2ViU3JjKiBzcmMpCiB7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIHRydWUpOworICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NL
KHNyYykpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+c2Vla0lEKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgd2ViS2l0
V2ViU3JjU3RvcChzcmMpOwogICAgIHdlYktpdFdlYlNyY1N0YXJ0KHNyYyk7CiAKICAgICByZXR1
cm4gRkFMU0U7CkBAIC03NTIsNiArODU3LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNy
Y1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zm
c2V0KTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgaWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0
ID09IHByaXYtPm9mZnNldCkKICAgICAgICAgcmV0dXJuIFRSVUU7CiAKQEAgLTc2MSwxMTAgKzg2
NywxNDAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3Jj
KiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNl
dCA9IG9mZnNldDsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5z
ZWVrSUQpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYt
PnNlZWtJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291
cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdE
ZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwotICAgIAorICAgIHByaXYtPnNlZWtJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZ
X0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVj
dF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKICAgICByZXR1
cm4gVFJVRTsKIH0KIAogdm9pZCB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJT
cmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxh
eWVyKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgc3JjLT5wcml2LT5wbGF5ZXIgPSBwbGF5ZXI7CiB9CiAKLVN0cmVhbWluZ0NsaWVudDo6
U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKSA6IG1fc3JjKHNyYykKK1N0cmVhbWlu
Z0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKQorICAgIDogbV9zcmMo
YWRvcHRHUmVmKHN0YXRpY19jYXN0PEdzdEVsZW1lbnQqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkp
CiB7Ci0KIH0KIAogU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KCkKIHsKK30KKwor
Y2hhciogU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRT
aXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9
IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyKTsKKworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVlc3RlZFNpemUpOwogCisj
aWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBtYXBHc3RCdWZmZXIoYnVmZmVyKTsKKyNlbmRp
ZgorCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwor
ICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworICAgIGxvY2tlci51bmxvY2so
KTsKKworICAgIGFjdHVhbFNpemUgPSBnZXRHc3RCdWZmZXJTaXplKGJ1ZmZlcik7CisgICAgcmV0
dXJuIGdldEdzdEJ1ZmZlckRhdGFQb2ludGVyKGJ1ZmZlcik7CiB9CiAKLXZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxl
UmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
UmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNU
X0dFVF9MT0NLKHNyYykpOwogCiAgICAgLy8gSWYgd2Ugc2Vla2VkIHdlIG5lZWQgMjA2ID09IFBB
UlRJQUxfQ09OVEVOVAogICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9z
cmMsIFJFU09VUkNFLCBSRUFELCAoMCksICgwKSk7CisgICAgICAgIGxvY2tlci51bmxvY2soKTsK
KyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAoMCkp
OwogICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0gICAg
ICAgIHdlYktpdFdlYlNyY1N0b3AobV9zcmMsIGZhbHNlKTsKKyAgICAgICAgd2ViS2l0V2ViU3Jj
U3RvcChzcmMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbG9uZyBsb25nIGxlbmd0
aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAw
KSB7CisgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxlbmd0aCArPSBwcml2LT5yZXF1ZXN0
ZWRPZmZzZXQ7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgbGVu
Z3RoKTsKLQotI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICBpZiAoIXByaXYtPmhh
dmVBcHBTcmMyNykgewotICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKCZHU1Rf
QkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChwcml2
LT5hcHBzcmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9tZXNz
YWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNyYyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9GT1JN
QVRfQllURVMsIGxlbmd0aCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9CiAKICAgICBwcml2
LT5zaXplID0gbGVuZ3RoID49IDAgPyBsZW5ndGggOiAwOwogICAgIHByaXYtPnNlZWthYmxlID0g
bGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAoIm5vbmUiLCByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoIkFjY2VwdC1SYW5nZXMiKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIC8vIGljZWNh
c3Qgc3R1ZmYKLSAgICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS1tZXRhaW50Iik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2NoYXIq
IGVuZHB0ciA9IDA7Ci0gICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xs
KHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgewotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19z
aW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lO
VCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwpKTsKLQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBzLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQog
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdf
bGlzdF9uZXdfZW1wdHkoKTsKICNlbHNlCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdf
bGlzdF9uZXcoKTsKICNlbmRpZgotICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KCJpY3ktbmFtZSIpOworICAgIFN0cmluZyB2YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiaWN5LW5hbWUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2Zy
ZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb05hbWUgPSBnX3N0cmR1
cCh2YWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNU
KG1fc3JjKSwgImlyYWRpby1uYW1lIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChzcmMpLCAiaXJhZGlvLW5hbWUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBH
U1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfT1JHQU5JWkFUSU9OLCBwcml2LT5pcmFkaW9O
YW1lLCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
ImljeS1nZW5yZSIpOwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJl
ZShwcml2LT5pcmFkaW9HZW5yZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb0dlbnJlID0gZ19zdHJk
dXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChtX3NyYyksICJpcmFkaW8tZ2VucmUiKTsKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JK
RUNUKHNyYyksICJpcmFkaW8tZ2VucmUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdz
LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfR0VOUkUsIHByaXYtPmlyYWRpb0dlbnJl
LCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS11cmwiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2ZyZWUocHJp
di0+aXJhZGlvVXJsKTsKICAgICAgICAgcHJpdi0+aXJhZGlvVXJsID0gZ19zdHJkdXAodmFsdWUu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyks
ICJpcmFkaW8tdXJsIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAi
aXJhZGlvLXVybCIpOwogICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ3MsIEdTVF9UQUdfTUVS
R0VfUkVQTEFDRSwgR1NUX1RBR19MT0NBVElPTiwgcHJpdi0+aXJhZGlvVXJsLCBOVUxMKTsKICAg
ICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS10aXRsZSIpOwog
ICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJlZShwcml2LT5pcmFkaW9U
aXRsZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb1RpdGxlID0gZ19zdHJkdXAodmFsdWUudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFk
aW8tdGl0bGUiKTsKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHNyYyksICJpcmFk
aW8tdGl0bGUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBHU1RfVEFHX01FUkdF
X1JFUExBQ0UsIEdTVF9UQUdfVElUTEUsIHByaXYtPmlyYWRpb1RpdGxlLCBOVUxMKTsKICAgICB9
CiAKKyAgICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICAvLyBub3RpZnkgc2l6ZS9kdXJhdGlvbgor
ICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYt
PmFwcHNyYywgbGVuZ3RoKTsKKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBp
ZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgeworICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1
cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9C
WVRFUywgbGVuZ3RoKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1Rf
RUxFTUVOVChwcml2LT5hcHBzcmMpLAorICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19k
dXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNyYyksCisgICAgICAgICAgICAgICAgICAgIEdT
VF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UK
KyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CisKKyAgICAv
LyBpY2VjYXN0IHN0dWZmCisgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS1tZXRhaW50Iik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ2NoYXIq
IGVuZHB0ciA9IDA7CisgICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xs
KHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKKworICAgICAgICBpZiAoZW5kcHRy
ICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgeworICAgICAgICAgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxp
Y2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGlj
eU1ldGFJbnQsIE5VTEwpKTsKKworICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJp
di0+YXBwc3JjLCBjYXBzLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBn
c3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworCisgICAgLy8gbm90aWZ5IHRh
Z3MKICAgICBpZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5KHRhZ3MpKQogI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCiAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZih0YWdzKTsKQEAgLTg3MiwxNCAr
MTAwOCwxNyBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUgogICAgICAgICBnc3RfdGFnX2xpc3Rf
ZnJlZSh0YWdzKTsKICNlbmRpZgogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFk
KEdTVF9FTEVNRU5UKG1fc3JjKSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFncyk7CisgICAgICAg
IG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChzcmMpLCBwcml2LT5zcmNwYWQsIHRhZ3Mp
OwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3ZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
IHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2Vi
S2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JKRUNUKG1f
c3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVyID8gZ2V0R3N0QnVmZmVy
U2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisKKyAgICBHU1RfTE9HX09CSkVDVChzcmMs
ICJIYXZlICVkIGJ5dGVzIG9mIGRhdGEiLCBwcml2LT5idWZmZXIgPyBnZXRHc3RCdWZmZXJTaXpl
KHByaXYtPmJ1ZmZlci5nZXQoKSkgOiBsZW5ndGgpOwogCiAgICAgQVNTRVJUKCFwcml2LT5idWZm
ZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihwcml2LT5idWZmZXIuZ2V0KCkp
KTsKIApAQCAtODg4LDggKzEwMjcsOCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgICAg
ICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5idWZmZXIuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBpZiAo
cHJpdi0+c2Vla0lEIHx8IHJlc291cmNlICE9IHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9zcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7
CisgICAgaWYgKHByaXYtPnNlZWtJRCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
IlNlZWsgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVy
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MDcsNTcgKzEwNDYsMTgyIEBA
IHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAgICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKICAg
ICAvLyBwcml2LT5zaXplID09IDAgaWYgcmVjZWl2ZWQgbGVuZ3RoIG9uIGRpZFJlY2VpdmVSZXNw
b25zZSA8IDAuCiAgICAgaWYgKHByaXYtPnNpemUgPiAwICYmIHByaXYtPm9mZnNldCA+IHByaXYt
PnNpemUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlVwZGF0aW5nIGludGVy
bmFsIHNpemUgZnJvbSAlIiBHX0dVSU5UNjRfRk9STUFUICIgdG8gJSIgR19HVUlOVDY0X0ZPUk1B
VCwgcHJpdi0+c2l6ZSwgcHJpdi0+b2Zmc2V0KTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJVcGRhdGluZyBpbnRlcm5hbCBzaXplIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUsIHByaXYtPm9mZnNldCk7CiAgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgcHJpdi0+b2Zmc2V0KTsKICAgICAg
ICAgcHJpdi0+c2l6ZSA9IHByaXYtPm9mZnNldDsKICAgICB9CiAgICAgR1NUX0JVRkZFUl9PRkZT
RVRfRU5EKHByaXYtPmJ1ZmZlci5nZXQoKSkgPSBwcml2LT5vZmZzZXQ7CiAKKyAgICBsb2NrZXIu
dW5sb2NrKCk7CisKICAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVm
ZmVyKHByaXYtPmFwcHNyYywgcHJpdi0+YnVmZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxP
V19FT1MpCiAjZWxzZQogICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9G
TE9XX1VORVhQRUNURUQpCiAjZW5kaWYKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMs
IENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMs
IENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOwogfQogCi1jaGFyKiBTdHJlYW1pbmdDbGllbnQ6Omdl
dE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXpl
LCBzaXplX3QmIGFjdHVhbFNpemUpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlTm90aWZ5
RmluaXNoZWQoKQogewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJp
djsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsK
KyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgQVNTRVJU
KCFwcml2LT5idWZmZXIpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBFT1MiKTsK
IAotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVl
c3RlZFNpemUpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKyAgICBpZiAoIXByaXYtPnNlZWtJRCkgeworICAgICAgICBsb2NrZXIudW5sb2NrKCk7
CisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKKyAgICB9
Cit9CiAKLSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgIG1hcEdzdEJ1ZmZlcihidWZmZXIp
OwotI2VuZGlmCitDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsIENhY2hlZFJlc291cmNlTG9hZGVyKiBy
ZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3Ry
ZWFtaW5nQ2xpZW50KHNyYykKK3sKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1
ZXN0KHJlcXVlc3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNu
aWZmQ29udGVudCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMs
IERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNr
LCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOworICAgIG1fcmVzb3VyY2Ug
PSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7CisgICAg
aWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKK30K
IAotICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpCit7CisgICAg
aWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMp
OworICAgICAgICBtX3Jlc291cmNlID0gMDsKKyAgICB9Cit9CiAKLSAgICBhY3R1YWxTaXplID0g
Z2V0R3N0QnVmZmVyU2l6ZShidWZmZXIpOwotICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9p
bnRlcihidWZmZXIpOworYm9vbCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZh
aWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Jlc291cmNlOworfQorCit2b2lkIENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQor
eworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2Fk
aW5nKGRlZmVycyk7CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50Ojpub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCitjaGFyKiBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKENhY2hlZFJlc291cmNlKiwgc2l6ZV90IHJlcXVl
c3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6ZSkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgcmV0dXJuIGNyZWF0ZVJlYWRCdWZmZXIocmVxdWVz
dGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBoYW5kbGVSZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNl
KTsKK30KIAordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBo
YW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
KQorewogICAgIGlmIChyZXNvdXJjZS0+bG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSkgeworICAgICAg
ICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKwogICAg
ICAgICBpZiAoIXJlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7CiAgICAgICAgICAgICBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvciA9IHJlc291cmNlLT5yZXNvdXJjZUVycm9yKCk7Ci0gICAgICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihtX3NyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXpl
ZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CisgICAgICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3Jj
LCBSRVNPVVJDRSwgRkFJTEVELCAoIiVzIiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpKSwgKDApKTsKICAgICAgICAgfQotICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKHNyYy0+cHJpdi0+YXBwc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJIYXZlIEVPUyIpOworICAgIGhhbmRsZU5vdGlm
eUZpbmlzaGVkKCk7Cit9CiAKLSAgICBpZiAoIXByaXYtPnNlZWtJRCkKLSAgICAgICAgZ3N0X2Fw
cF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+cHJpdi0+YXBwc3JjKTsKK1Jlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJT
cmMqIHNyYywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3RyZWFtaW5n
Q2xpZW50KHNyYykKK3sKKyAgICBtX3Jlc291cmNlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSgw
IC8qY29udGV4dCovLCByZXF1ZXN0LCB0aGlzLCBmYWxzZSwgZmFsc2UpOworfQorCitSZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkK
K3sKKyAgICBpZiAobV9yZXNvdXJjZSkgeworICAgICAgICBtX3Jlc291cmNlLT5jYW5jZWwoKTsK
KyAgICAgICAgbV9yZXNvdXJjZS5yZWxlYXNlKCk7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOwor
ICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Jlc291cmNlOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQorewor
ICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2FkaW5n
KGRlZmVycyk7Cit9CisKK2NoYXIqIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRP
ckNyZWF0ZVJlYWRCdWZmZXIoc2l6ZV90IHJlcXVlc3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6
ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVhZEJ1ZmZlcihyZXF1ZXN0ZWRTaXplLCBhY3R1YWxT
aXplKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIGhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQocmVzcG9uc2UpOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCkKK3sKKyAgICBo
YW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJs
ZSkKK3sKKyAgICBoYW5kbGVOb3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NS
QyhtX3NyYy5nZXQoKSk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVy
ZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAg
IEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CisgICAgZ3N0X2FwcF9z
cmNfZW5kX29mX3N0cmVhbShzcmMtPnByaXYtPmFwcHNyYyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAg
IFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdP
d25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiUmVxdWVzdCB3
YXMgYmxvY2tlZCIpOworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9M
T0NLKHNyYykpOworICAgIHVyaS5zZXQoZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKKyAgICBs
b2NrZXIudW5sb2NrKCk7CisKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBP
UEVOX1JFQUQsICgiQWNjZXNzIHRvIFwiJXNcIiB3YXMgYmxvY2tlZCIsIHVyaS5nZXQoKSksICgw
KSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dV
UkwoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdPd25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc3JjLCAiQ2Fubm90IHNob3cgVVJMIik7CisKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgdXJpLnNldChnX3N0cmR1cChz
cmMtPnByaXYtPnVyaSkpOworICAgIGxvY2tlci51bmxvY2soKTsKKworICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKCJDYW4ndCBzaG93IFwiJXNcIiIsIHVy
aS5nZXQoKSksICgwKSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQotLSAKMS44LjEu
MgoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209653</attachid>
            <date>2013-08-26 07:32:04 -0700</date>
            <delta_ts>2013-08-27 07:59:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Make-sure-gstreamer-source-element-is-thread-safe.patch</filename>
            <type>text/plain</type>
            <size>44748</size>
            <attacher name="Andre Moreira Magalhaes">andrunko</attacher>
            
              <data encoding="base64">RnJvbSA2YjNjMmFkMGUzMGQwYTMxOTNlMjc2OTYwNDgxOWVhYzg3NmQ1ZWM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmUgTW9yZWlyYSBNYWdhbGhhZXMgKGFuZHJ1bmtvKSIg
PGFuZHJlLm1hZ2FsaGFlc0Bjb2xsYWJvcmEuY28udWs+CkRhdGU6IE1vbiwgMTkgQXVnIDIwMTMg
MTg6MDM6MDQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBNYWtlIHN1cmUgZ3N0cmVhbWVyIHNvdXJj
ZSBlbGVtZW50IGlzIHRocmVhZC1zYWZlCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE1MzUyCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCkdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0cmVhbWVyIGVsZW1lbnQgb24g
YW55IHRocmVhZCBieSBjYWxsaW5nCmdzdF9lbGVtZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUg
VVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxlbWVudC4KVGhpcyBwYXRjaCBtYWtlcyBzdXJl
IHRoZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNz
dWVzIHdpdGggaXQKYmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KCkFsc28g
YWRkIGNvbnZlbmllbmNlIGNsYXNzIHRoYXQgc2ltcGxpZmllcyBsb2NraW5nIGFuZCB1bmxvY2tp
bmcgYSBHTXV0ZXguCgoqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwOgood2Via2l0X3dlYl9zcmNfaW5pdCk6Cih3ZWJLaXRXZWJTcmNEaXNw
b3NlKToKKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKHdlYktpdFdlYlNyY1NldFByb3BlcnR5KToK
KHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKHdlYktp
dFdlYlNyY1N0b3ApOgood2ViS2l0V2ViU3JjU3RhcnQpOgood2ViS2l0V2ViU3JjQ2hhbmdlU3Rh
dGUpOgood2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKHdlYktpdFdlYlNyY0dldFVyaSk6
Cih3ZWJLaXRXZWJTcmNTZXRVcmkpOgood2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgood2Vi
S2l0V2ViU3JjTmVlZERhdGFDYik6Cih3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKHdl
YktpdFdlYlNyY0Vub3VnaERhdGFDYik6Cih3ZWJLaXRXZWJTcmNTZWVrTWFpbkNiKToKKHdlYktp
dFdlYlNyY1NlZWtEYXRhQ2IpOgood2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgooU3RyZWFt
aW5nQ2xpZW50OjpTdHJlYW1pbmdDbGllbnQpOgooU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5n
Q2xpZW50KToKKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CihTdHJlYW1pbmdD
bGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVE
YXRhUmVjZWl2ZWQpOgooU3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CihD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVh
bWluZ0NsaWVudCk6CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxlZCk6
CihDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9hZGluZyk6CihDYWNo
ZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKToKKENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKToKKENhY2hlZFJlc291
cmNlU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQpOgooQ2FjaGVkUmVzb3VyY2VTdHJlYW1p
bmdDbGllbnQ6Om5vdGlmeUZpbmlzaGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CihSZXNvdXJjZUhhbmRsZVN0cmVhbWlu
Z0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKFJlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xp
ZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpn
ZXRPckNyZWF0ZVJlYWRCdWZmZXIpOgooUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondp
bGxTZW5kUmVxdWVzdCk6Ck1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8g
dXNlIHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgp0aGUgREFT
SCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMpLCB1c2Ug
R011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CmxvY2tzIGFuZCBvdGhlciBnZW5lcmFsIGltcHJvdmVt
ZW50cy4KCiogR05VbWFrZWZpbGUubGlzdC5hbToKKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIu
aDogQWRkZWQuCihXZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CihXZWJDb3Jl
OjpHTXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgooV2ViQ29yZTo6R011dGV4TG9ja2VyOjps
b2NrKToKKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKKFdlYkNvcmU6OkdNdXRleExv
Y2tlcjo6bXV0ZXgpOgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE3ICsKIFNvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbSAgICAg
ICAgICAgICAgICAgICAgIHwgICAxICsKIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9j
a2VyLmggICAgICAgICAgICAgIHwgIDcyICsrKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjIgKysrCiAuLi4vZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5jcHAgICAgICAgICB8IDU3NiArKysrKysrKysrKysrKystLS0tLS0K
IDUgZmlsZXMgY2hhbmdlZCwgNTcyIGluc2VydGlvbnMoKyksIDE1NiBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpp
bmRleCA2NmM3YTc2Li5jYzQ1YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTA4LTE5ICBB
bmRyZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVr
PgorCisgICAgICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1l
bnQgaXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IHNpbXBsaWZpZXMgbG9ja2luZyBh
bmQgdW5sb2NraW5nIGEgR011dGV4LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiB3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHTXV0ZXhMb2NrZXI6OkdNdXRleExvY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpH
TXV0ZXhMb2NrZXI6On5HTXV0ZXhMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R011dGV4TG9j
a2VyOjpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6dW5sb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdNdXRleExvY2tlcjo6bXV0ZXgpOgorCiAyMDEzLTA4LTIxICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTU0NDE2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGJjMDJlNjgu
LmU4MzRiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTIxMSw2ICsyMTEsNyBAQCB3dGZf
c291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvZHRvYS9zdHJ0b2QuY2MgXAogICAgIFNv
dXJjZS9XVEYvd3RmL2R0b2Evc3RydG9kLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2R0b2EvdXRp
bHMuaCBcCisgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCBcCiAgICAg
U291cmNlL1dURi93dGYvZ29iamVjdC9HT3duUHRyLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYv
Z29iamVjdC9HT3duUHRyLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2dvYmplY3QvR1JlZlB0ci5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaCBi
L1NvdXJjZS9XVEYvd3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uODMxYWUyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR011dGV4
TG9ja2VyX2gKKyNkZWZpbmUgR011dGV4TG9ja2VyX2gKKworI2lmIFVTRShHTElCKQorCisjaW5j
bHVkZSA8Z2xpYi5oPgorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTXV0
ZXhMb2NrZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdNdXRleExvY2tlcik7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgaW5saW5lIGV4cGxpY2l0IEdNdXRl
eExvY2tlcihHTXV0ZXgqIG11dGV4KQorICAgICAgICA6IG1fbXV0ZXgobXV0ZXgpCisgICAgICAg
ICwgbV92YWwoMCkKKyAgICB7CisgICAgICAgIGxvY2soKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
fkdNdXRleExvY2tlcigpIHsgdW5sb2NrKCk7IH0KKworICAgIGlubGluZSB2b2lkIGxvY2soKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbXV0ZXggJiYgIW1fdmFsKSB7CisgICAgICAgICAgICBnX211
dGV4X2xvY2sobV9tdXRleCk7CisgICAgICAgICAgICBtX3ZhbCA9IDE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpbmxpbmUgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKG1fbXV0
ZXggJiYgbV92YWwpIHsKKyAgICAgICAgICAgIG1fdmFsID0gMDsKKyAgICAgICAgICAgIGdfbXV0
ZXhfdW5sb2NrKG1fbXV0ZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgaW5saW5lIEdNdXRl
eCogbXV0ZXgoKSBjb25zdCB7IHJldHVybiBtX211dGV4OyB9CisKK3ByaXZhdGU6CisgICAgR011
dGV4KiBtX211dGV4OworICAgIHVpbnQ4X3QgbV92YWw7Cit9OworCit9CisKKyNlbmRpZiAvLyBV
U0UoR0xJQikKKworI2VuZGlmIC8vIEdNdXRleExvY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDliMjg4
Yi4uNWM3NDJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA4LTE5ICBBbmRy
ZSBNb3JlaXJhIE1hZ2FsaGFlcyAgIDxhbmRyZS5tYWdhbGhhZXNAY29sbGFib3JhLmNvLnVrPgor
CisgICAgICAgIFtnc3RyZWFtZXJdIE1ha2Ugc3VyZSBnc3RyZWFtZXIgc291cmNlIGVsZW1lbnQg
aXMgdGhyZWFkLXNhZmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExNTM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudCBtYXkgYmUgY3JlYXRlZCBieSBhbnkgZ3N0
cmVhbWVyIGVsZW1lbnQgb24gYW55IHRocmVhZCBieSBjYWxsaW5nCisgICAgICAgIGdzdF9lbGVt
ZW50X21ha2VfZnJvbV91cmkgd2l0aCB0aGUgVVJJcyBoYW5kbGVkIGJ5IHRoZSBzb3VyY2UgZWxl
bWVudC4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBzdXJlIHRoZSBnc3RyZWFtZXIgc291cmNl
IGVsZW1lbnQgaXMgdGhyZWFkLXNhZmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggaXQKKyAgICAgICAg
YmVpbmcgY3JlYXRlZCBvdXRzaWRlIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl9zcmNfaW5pdCk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNEaXNwb3Nl
KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYlNy
Y1NldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdlYlNyY0dldFByb3BlcnR5KToKKyAgICAg
ICAgKHJlbW92ZVRpbWVvdXRTb3VyY2VzKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1N0b3ApOgor
ICAgICAgICAod2ViS2l0V2ViU3JjU3RhcnQpOgorICAgICAgICAod2ViS2l0V2ViU3JjQ2hhbmdl
U3RhdGUpOgorICAgICAgICAod2ViS2l0V2ViU3JjUXVlcnlXaXRoUGFyZW50KToKKyAgICAgICAg
KHdlYktpdFdlYlNyY0dldFVyaSk6CisgICAgICAgICh3ZWJLaXRXZWJTcmNTZXRVcmkpOgorICAg
ICAgICAod2ViS2l0V2ViU3JjTmVlZERhdGFNYWluQ2IpOgorICAgICAgICAod2ViS2l0V2ViU3Jj
TmVlZERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNFbm91Z2hEYXRhTWFpbkNiKToKKyAg
ICAgICAgKHdlYktpdFdlYlNyY0Vub3VnaERhdGFDYik6CisgICAgICAgICh3ZWJLaXRXZWJTcmNT
ZWVrTWFpbkNiKToKKyAgICAgICAgKHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IpOgorICAgICAgICAo
d2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50OjpT
dHJlYW1pbmdDbGllbnQpOgorICAgICAgICAoU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xp
ZW50KToKKyAgICAgICAgKFN0cmVhbWluZ0NsaWVudDo6Y3JlYXRlUmVhZEJ1ZmZlcik6CisgICAg
ICAgIChTdHJlYW1pbmdDbGllbnQ6OmhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAo
U3RyZWFtaW5nQ2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQpOgorICAgICAgICAoU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVOb3RpZnlGaW5pc2hlZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0
cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQpOgorICAgICAgICAo
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZCk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6c2V0RGVmZXJzTG9h
ZGluZyk6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Z2V0T3JDcmVh
dGVSZWFkQnVmZmVyKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50Ojpy
ZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50
OjpkYXRhUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6
Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50
OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KToKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50Ojpsb2FkRmFpbGVkKToKKyAgICAgICAg
KFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAg
ICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRPckNyZWF0ZVJlYWRCdWZmZXIp
OgorICAgICAgICAoUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OndpbGxTZW5kUmVxdWVz
dCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKToKKyAgICAgICAgKFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6ZGlk
RmFpbCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2FzQmxvY2tl
ZCk6CisgICAgICAgIChSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6Y2Fubm90U2hvd1VS
TCk6CisgICAgICAgIE1ha2UgZWxlbWVudCB0aHJlYWQtc2FmZSwgYWRkIHN1cHBvcnQgdG8gdXNl
IHRoZSBlbGVtZW50IHdpdGhvdXQgYSBwbGF5ZXIgYXNzb2NpYXRlZCAoZS5nLgorICAgICAgICB0
aGUgREFTSCBwbHVnaW4gdXNpbmcgdGhlIHdlYmtpdHNyYyB0byBkb3dubG9hZCBmcmFnbWVudHMp
LCB1c2UgR011dGV4TG9ja2VyIHRvIHNpbXBsaWZ5CisgICAgICAgIGxvY2tzIGFuZCBvdGhlciBn
ZW5lcmFsIGltcHJvdmVtZW50cy4KKwogMjAxMy0wOC0yMyAgQWxsYW4gU2FuZGZlbGQgSmVuc2Vu
ICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNTM5Mzkp
IEZpeCB0eXBvIGluIFF0IGJ1aWxkLWZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuY3BwCmluZGV4IDBjYzU3NWUuLmY4Yzc5MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0zMSwzMiArMzEsODAgQEAKICNpbmNs
dWRlICJHU3RyZWFtZXJWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSA8Z3N0L2FwcC9n
c3RhcHBzcmMuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0L3BidXRpbHMv
bWlzc2luZy1wbHVnaW5zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1jbGFzcyBTdHJl
YW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworY2xhc3MgU3RyZWFtaW5nQ2xpZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFN0cmVhbWlu
Z0NsaWVudChXZWJLaXRXZWJTcmMqKTsKICAgICAgICAgdmlydHVhbCB+U3RyZWFtaW5nQ2xpZW50
KCk7CiAKKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRGYWlsZWQoKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpID0gMDsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgY2hhciogY3JlYXRlUmVhZEJ1ZmZlcihzaXplX3QgcmVxdWVzdGVkU2l6
ZSwgc2l6ZV90JiBhY3R1YWxTaXplKTsKKyAgICAgICAgdm9pZCBoYW5kbGVSZXNwb25zZVJlY2Vp
dmVkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBoYW5kbGVEYXRhUmVj
ZWl2ZWQoY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZvaWQgaGFuZGxlTm90aWZ5RmluaXNo
ZWQoKTsKKworICAgICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc3JjOworfTsKKworY2xhc3Mg
Q2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQgOiBwdWJsaWMgQ2FjaGVkUmF3UmVzb3VyY2VD
bGllbnQsIHB1YmxpYyBTdHJlYW1pbmdDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgcHVibGljOgorICAgICAgICBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudChXZWJL
aXRXZWJTcmMqLCBDYWNoZWRSZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
OworICAgICAgICB2aXJ0dWFsIH5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpOworCisg
ICAgICAgIC8vIFN0cmVhbWluZ0NsaWVudCB2aXJ0dWFsIG1ldGhvZHMuCisgICAgICAgIHZpcnR1
YWwgYm9vbCBsb2FkRmFpbGVkKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXREZWZl
cnNMb2FkaW5nKGJvb2wpOworCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQKKyAgICAgICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQgdmlydHVhbCBtZXRob2Rz
LgorICAgICAgICB2aXJ0dWFsIGNoYXIqIGdldE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNv
dXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFSZWNlaXZlZChDYWNo
ZWRSZXNvdXJjZSosIGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLSAgICAgICAgdmlydHVhbCBjaGFyKiBnZXRP
ckNyZWF0ZVJlYWRCdWZmZXIoQ2FjaGVkUmVzb3VyY2UqLCBzaXplX3QgcmVxdWVzdGVkU2l6ZSwg
c2l6ZV90JiBhY3R1YWxTaXplKTsKIAotICAgICAgICBXZWJLaXRXZWJTcmMqIG1fc3JjOworICAg
ICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gbV9yZXNvdXJjZTsK
K307CisKK2NsYXNzIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50IDogcHVibGljIFJlc291
cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgU3RyZWFtaW5nQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudCk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdD
bGllbnQoV2ViS2l0V2ViU3JjKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgflJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCk7CisKKyAgICAgICAgLy8gU3Ry
ZWFtaW5nQ2xpZW50IHZpcnR1YWwgbWV0aG9kcy4KKyAgICAgICAgdmlydHVhbCBib29sIGxvYWRG
YWlsZWQoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9v
bCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBSZXNvdXJjZUhhbmRsZUNsaWVudCB2aXJ0
dWFsIG1ldGhvZHMuCisgICAgICAgIHZpcnR1YWwgY2hhciogZ2V0T3JDcmVhdGVSZWFkQnVmZmVy
KHNpemVfdCByZXF1ZXN0ZWRTaXplLCBzaXplX3QmIGFjdHVhbFNpemUpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBjaGFyKiwgaW50LCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGlu
ZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLyk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOworCisgICAgICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gbV9yZXNvdXJjZTsKIH07CiAKICNkZWZpbmUgV0VCS0lU
X1dFQl9TUkNfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9XRUJfU1JDLCBXZWJLaXRXZWJTcmNQcml2YXRlKSkKQEAgLTY4LDcg
KzExNiw2IEBAIHN0cnVjdCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAgICAgV2ViQ29yZTo6TWVk
aWFQbGF5ZXIqIHBsYXllcjsKIAogICAgIFN0cmVhbWluZ0NsaWVudCogY2xpZW50OwotICAgIENh
Y2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXNvdXJjZTsKIAogICAgIGd1
aW50NjQgb2Zmc2V0OwogICAgIGd1aW50NjQgc2l6ZTsKQEAgLTc3LDYgKzEyNCw4IEBAIHN0cnVj
dCBfV2ViS2l0V2ViU3JjUHJpdmF0ZSB7CiAKICAgICBndWludDY0IHJlcXVlc3RlZE9mZnNldDsK
IAorICAgIGd1aW50IHN0YXJ0SUQ7CisgICAgZ3VpbnQgc3RvcElEOwogICAgIGd1aW50IG5lZWRE
YXRhSUQ7CiAgICAgZ3VpbnQgZW5vdWdoRGF0YUlEOwogICAgIGd1aW50IHNlZWtJRDsKQEAgLTEy
OSw4ICsxNzgsNiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNOZWVkRGF0YUNiKEdzdEFwcFNy
YyosIGd1aW50IGxlbmd0aCwgZ3BvaW50ZXIgdXNlckRhdGEpOwogc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjRW5vdWdoRGF0YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKTsKIHN0YXRp
YyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNTZWVrRGF0YUNiKEdzdEFwcFNyYyosIGd1aW50NjQgb2Zm
c2V0LCBncG9pbnRlciB1c2VyRGF0YSk7CiAKLXN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY1N0b3Ao
V2ViS2l0V2ViU3JjKiwgYm9vbCk7Ci0KIHN0YXRpYyBHc3RBcHBTcmNDYWxsYmFja3MgYXBwc3Jj
Q2FsbGJhY2tzID0gewogICAgIHdlYktpdFdlYlNyY05lZWREYXRhQ2IsCiAgICAgd2ViS2l0V2Vi
U3JjRW5vdWdoRGF0YUNiLApAQCAtMTg0LDcgKzIzMSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfc3JjX2NsYXNzX2luaXQoV2ViS2l0V2ViU3JjQ2xhc3MqIGtsYXNzKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2VucmUgb2YgdGhl
IHN0cmVhbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChHUGFyYW1GbGFncykgKEdfUEFSQU1fUkVBREFCTEUgfCBHX1BBUkFNX1NU
QVRJQ19TVFJJTkdTKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2tsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JUkFESU9f
VVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygiaXJhZGlvLXVybCIsCkBAIC0yMjIsOCArMjY5LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKIAogICAgIHNyYy0+cHJpdiA9IHByaXY7
CiAKLSAgICBwcml2LT5jbGllbnQgPSBuZXcgU3RyZWFtaW5nQ2xpZW50KHNyYyk7Ci0KICAgICBw
cml2LT5hcHBzcmMgPSBHU1RfQVBQX1NSQyhnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNy
YyIsIDApKTsKICAgICBpZiAoIXByaXYtPmFwcHNyYykgewogICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgYXBwc3JjIik7CkBAIC0yNzIsNyArMzE3LDggQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfaW5pdChXZWJLaXRXZWJTcmMqIHNyYykKICAgICBp
ZiAocHJpdi0+aGF2ZUFwcFNyYzI3KQogICAgICAgICBnX29iamVjdF9zZXQocHJpdi0+YXBwc3Jj
LCAibWluLXBlcmNlbnQiLCAyMCwgTlVMTCk7CiAKLSAgICB3ZWJLaXRXZWJTcmNTdG9wKHNyYywg
ZmFsc2UpOworICAgIGdzdF9hcHBfc3JjX3NldF9jYXBzKHByaXYtPmFwcHNyYywgMCk7CisgICAg
Z3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdlYktpdFdlYlNyY0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQpAQCAtMjgwLDEzICszMjYsNiBA
QCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJTcmNEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICBX
ZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG9iamVjdCk7CiAgICAgV2ViS2l0V2Vi
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5idWZmZXIpIHsK
LSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5i
dWZmZXIuZ2V0KCkpOwotI2VuZGlmCi0gICAgICAgIHByaXYtPmJ1ZmZlci5jbGVhcigpOwotICAg
IH0KLQogICAgIHByaXYtPnBsYXllciA9IDA7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpF
Q1RfQ0xBU1MsIGRpc3Bvc2UsIChvYmplY3QpKTsKQEAgLTI5Nyw4ICszMzYsNiBAQCBzdGF0aWMg
dm9pZCB3ZWJLaXRXZWJTcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhvYmplY3QpOwogICAgIFdlYktpdFdlYlNyY1ByaXZh
dGUqIHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBkZWxldGUgcHJpdi0+Y2xpZW50OwotCiAgICAg
Z19mcmVlKHByaXYtPnVyaSk7CiAKICAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1Ms
IGZpbmFsaXplLCAob2JqZWN0KSk7CkBAIC0zMTAsOSArMzQ3LDExIEBAIHN0YXRpYyB2b2lkIHdl
YktpdFdlYlNyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25z
dCBHVmFsdWUqCiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAog
ICAgIHN3aXRjaCAocHJvcElEKSB7Ci0gICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgorICAgIGNh
c2UgUFJPUF9JUkFESU9fTU9ERTogeworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9P
QkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAgICAgIHByaXYtPmlyYWRpb01vZGUgPSBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUFJP
UF9MT0NBVElPTjoKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBnc3RfdXJpX2hh
bmRsZXJfc2V0X3VyaShyZWludGVycHJldF9jYXN0PEdzdFVSSUhhbmRsZXIqPihzcmMpLCBnX3Zh
bHVlX2dldF9zdHJpbmcodmFsdWUpLCAwKTsKQEAgLTMzMSw2ICszNzAsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwg
R1ZhbHVlKiB2YWx1ZQogICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMob2Jq
ZWN0KTsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRj
aCAocHJvcElEKSB7CiAgICAgY2FzZSBQUk9QX0lSQURJT19NT0RFOgogICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pcmFkaW9Nb2RlKTsKQEAgLTM1NiwxNSArMzk2LDM5
IEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlCiAgICAgfQogfQogCitzdGF0aWMgdm9pZCByZW1v
dmVUaW1lb3V0U291cmNlcyhXZWJLaXRXZWJTcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJTcmNQ
cml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgaWYgKHByaXYtPnN0YXJ0SUQpCisgICAg
ICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zdGFydElEKTsKKyAgICBwcml2LT5zdGFydElEID0g
MDsKIAotc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9v
bCBzZWVraW5nKQorICAgIGlmIChwcml2LT5uZWVkRGF0YUlEKQorICAgICAgICBnX3NvdXJjZV9y
ZW1vdmUocHJpdi0+bmVlZERhdGFJRCk7CisgICAgcHJpdi0+bmVlZERhdGFJRCA9IDA7CisKKyAg
ICBpZiAocHJpdi0+ZW5vdWdoRGF0YUlEKQorICAgICAgICBnX3NvdXJjZV9yZW1vdmUocHJpdi0+
ZW5vdWdoRGF0YUlEKTsKKyAgICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOworCisgICAgaWYgKHBy
aXYtPnNlZWtJRCkKKyAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPnNlZWtJRCk7CisgICAg
cHJpdi0+c2Vla0lEID0gMDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1N0b3Ao
V2ViS2l0V2ViU3JjKiBzcmMpCiB7CiAgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNy
Yy0+cHJpdjsKIAotICAgIGlmIChwcml2LT5yZXNvdXJjZSkgewotICAgICAgICBwcml2LT5yZXNv
dXJjZS0+cmVtb3ZlQ2xpZW50KHByaXYtPmNsaWVudCk7Ci0gICAgICAgIHByaXYtPnJlc291cmNl
ID0gMDsKLSAgICB9CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExv
Y2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKworICAgIGJvb2wgc2Vla2lu
ZyA9IHByaXYtPnNlZWtJRDsKKworICAgIHJlbW92ZVRpbWVvdXRTb3VyY2VzKHNyYyk7CisgICAg
cHJpdi0+c3RvcElEID0gMDsKIAogICAgIGlmIChwcml2LT5jbGllbnQpIHsKICAgICAgICAgZGVs
ZXRlIHByaXYtPmNsaWVudDsKQEAgLTM3OCwyMSArNDQyLDcgQEAgc3RhdGljIHZvaWQgd2ViS2l0
V2ViU3JjU3RvcChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgICAgICBwcml2
LT5idWZmZXIuY2xlYXIoKTsKICAgICB9CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsKLSAg
ICBpZiAocHJpdi0+bmVlZERhdGFJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPm5l
ZWREYXRhSUQpOwotICAgIHByaXYtPm5lZWREYXRhSUQgPSAwOwotCi0gICAgaWYgKHByaXYtPmVu
b3VnaERhdGFJRCkKLSAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKHByaXYtPmVub3VnaERhdGFJRCk7
Ci0gICAgcHJpdi0+ZW5vdWdoRGF0YUlEID0gMDsKLQotICAgIGlmIChwcml2LT5zZWVrSUQpCi0g
ICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYtPnNlZWtJRCA9
IDA7Ci0KICAgICBwcml2LT5wYXVzZWQgPSBGQUxTRTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwogCiAgICAgZ19mcmVlKHByaXYtPmlyYWRpb05hbWUpOwogICAgIHByaXYtPmlyYWRpb05h
bWUgPSAwOwpAQCAtNDA2LDM5ICs0NTYsNTQgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjU3Rv
cChXZWJLaXRXZWJTcmMqIHNyYywgYm9vbCBzZWVraW5nKQogICAgIGdfZnJlZShwcml2LT5pcmFk
aW9UaXRsZSk7CiAgICAgcHJpdi0+aXJhZGlvVGl0bGUgPSAwOwogCi0gICAgaWYgKHByaXYtPmFw
cHNyYykgewotICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOwot
ICAgICAgICBpZiAoIXNlZWtpbmcpCi0gICAgICAgICAgICBnc3RfYXBwX3NyY19zZXRfc2l6ZShw
cml2LT5hcHBzcmMsIC0xKTsKLSAgICB9Ci0KICAgICBwcml2LT5vZmZzZXQgPSAwOwogICAgIHBy
aXYtPnNlZWthYmxlID0gRkFMU0U7CiAKICAgICBpZiAoIXNlZWtpbmcpIHsKICAgICAgICAgcHJp
di0+c2l6ZSA9IDA7CiAgICAgICAgIHByaXYtPnJlcXVlc3RlZE9mZnNldCA9IDA7CisgICAgICAg
IHByaXYtPnBsYXllciA9IDA7CisgICAgfQorCisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAg
aWYgKHByaXYtPmFwcHNyYykgeworICAgICAgICBnc3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5h
cHBzcmMsIDApOworICAgICAgICBpZiAoIXNlZWtpbmcpCisgICAgICAgICAgICBnc3RfYXBwX3Ny
Y19zZXRfc2l6ZShwcml2LT5hcHBzcmMsIC0xKTsKICAgICB9CiAKICAgICBHU1RfREVCVUdfT0JK
RUNUKHNyYywgIlN0b3BwZWQgcmVxdWVzdCIpOworCisgICAgcmV0dXJuIEZBTFNFOwogfQogCi1z
dGF0aWMgYm9vbCB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJLaXRXZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJL
aXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKworICAgIHByaXYtPnN0YXJ0SUQgPSAwOworCiAgICAgaWYgKCFwcml2LT51cmkpIHsK
ICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJObyBVUkkgcHJvdmlkZWQiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb2NrZXIudW5sb2NrKCk7CisgICAgICAgIHdlYktp
dFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAotICAgIEFT
U0VSVChwcml2LT5wbGF5ZXIpOworICAgIEFTU0VSVCghcHJpdi0+Y2xpZW50KTsKIAogICAgIEtV
UkwgdXJsID0gS1VSTChLVVJMKCksIHByaXYtPnVyaSk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdCh1cmwpOwogICAgIHJlcXVlc3Quc2V0QWxsb3dDb29raWVzKHRydWUpOwotICAgIHJl
cXVlc3Quc2V0SFRUUFJlZmVycmVyKHByaXYtPnBsYXllci0+cmVmZXJyZXIoKSk7CisKKyAgICBp
ZiAocHJpdi0+cGxheWVyKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihwcml2LT5w
bGF5ZXItPnJlZmVycmVyKCkpOwogCiAjaWYgVVNFKFNPVVApCiAgICAgLy8gTGV0J3MgZGlzYWJs
ZSBIVFRQIEFjY2VwdC1FbmNvZGluZyBoZXJlIGFzIHdlIGRvbid0IHdhbnQgdGhlIHJlY2VpdmVk
IHJlc3BvbnNlIHRvIGJlCkBAIC00NjksMjMgKzUzNCwyNiBAQCBzdGF0aWMgYm9vbCB3ZWJLaXRX
ZWJTcmNTdGFydChXZWJLaXRXZWJTcmMqIHNyYykKICAgICAvLyBOZWVkZWQgdG8gdXNlIERMTkEg
c3RyZWFtaW5nIHNlcnZlcnMKICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgidHJhbnNm
ZXJNb2RlLmRsbmEiLCAiU3RyZWFtaW5nIik7CiAKLSAgICBpZiAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkgewotICAg
ICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1ZXN0KHJlcXVlc3QsIFJlc291cmNl
TG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgRG9Ob3RCdWZm
ZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMsIERvTm90QXNrQ2xpZW50Rm9yQ3Jv
c3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNrLCBVc2VEZWZhdWx0T3JpZ2luUmVz
dHJpY3Rpb25zRm9yVHlwZSkpOwotICAgICAgICBwcml2LT5yZXNvdXJjZSA9IGxvYWRlci0+cmVx
dWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7Ci0gICAgICAgIGlmIChwcml2LT5yZXNvdXJj
ZSkgewotICAgICAgICAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFN0cmVhbWluZ0NsaWVudChzcmMp
OwotICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPmFkZENsaWVudChwcml2LT5jbGllbnQpOwot
ICAgICAgICB9CisgICAgaWYgKHByaXYtPnBsYXllcikgeworICAgICAgICBpZiAoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGxvYWRlciA9IHByaXYtPnBsYXllci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KSkKKyAgICAgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBDYWNoZWRSZXNvdXJjZVN0cmVhbWlu
Z0NsaWVudChzcmMsIGxvYWRlciwgcmVxdWVzdCk7CiAgICAgfQogCi0gICAgaWYgKCFwcml2LT5y
ZXNvdXJjZSkgewotICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBzY2hl
ZHVsZSByZXNvdXJjZSBsb2FkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
aWYgKCFwcml2LT5jbGllbnQpCisgICAgICAgIHByaXYtPmNsaWVudCA9IG5ldyBSZXNvdXJjZUhh
bmRsZVN0cmVhbWluZ0NsaWVudChzcmMsIHJlcXVlc3QpOwogCisgICAgaWYgKCFwcml2LT5jbGll
bnQgfHwgcHJpdi0+Y2xpZW50LT5sb2FkRmFpbGVkKCkpIHsKKyAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChzcmMsICJGYWlsZWQgdG8gc2V0dXAgc3RyZWFtaW5nIGNsaWVudCIpOworICAgICAgICBp
ZiAocHJpdi0+Y2xpZW50KSB7CisgICAgICAgICAgICBkZWxldGUgcHJpdi0+Y2xpZW50OworICAg
ICAgICAgICAgcHJpdi0+Y2xpZW50ID0gMDsKKyAgICAgICAgfQorICAgICAgICBsb2NrZXIudW5s
b2NrKCk7CisgICAgICAgIHdlYktpdFdlYlNyY1N0b3Aoc3JjKTsKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIH0KICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0YXJ0ZWQgcmVxdWVzdCIp
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxl
bWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKQEAgLTUxMywxNSArNTgxLDE3IEBAIHN0
YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVt
ZW50KiBlbGVtZW50LCBHc3RTdGF0CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCisgICAg
R011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwogICAgIHN3aXRj
aCAodHJhbnNpdGlvbikgewogICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVT
RUQ6CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOwotICAg
ICAgICBpZiAoIXdlYktpdFdlYlNyY1N0YXJ0KHNyYykpCi0gICAgICAgICAgICByZXQgPSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICAgIHByaXYtPnN0YXJ0SUQgPSBnX2lkbGVfYWRk
X2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0YXJ0
LCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdzdF9vYmplY3RfdW5yZWYp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JF
QURZOgogICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKLSAg
ICAgICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIGZhbHNlKTsKKyAgICAgICAgLy8gY2FuY2VsIHBl
bmRpbmcgc291cmNlcworICAgICAgICByZW1vdmVUaW1lb3V0U291cmNlcyhzcmMpOworICAgICAg
ICBwcml2LT5zdG9wSUQgPSBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1Nv
dXJjZUZ1bmMpIHdlYktpdFdlYlNyY1N0b3AsIGdzdF9vYmplY3RfcmVmKHNyYyksIChHRGVzdHJv
eU5vdGlmeSkgZ3N0X29iamVjdF91bnJlZik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwpAQCAtNTMyLDcgKzYwMiw3IEBAIHN0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJTcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RT
dGF0CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFk
KiBwYWQsIEdzdE9iamVjdCogcGFyZW50LCBHc3RRdWVyeSogcXVlcnkpCiB7Ci0gICAgV2ViS2l0
V2ViU3JjKiB3ZWJraXRTcmMgPSBXRUJLSVRfV0VCX1NSQyhHU1RfRUxFTUVOVChwYXJlbnQpKTsK
KyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKEdTVF9FTEVNRU5UKHBhcmVu
dCkpOwogICAgIGdib29sZWFuIHJlc3VsdCA9IEZBTFNFOwogCiAgICAgc3dpdGNoIChHU1RfUVVF
UllfVFlQRShxdWVyeSkpIHsKQEAgLTU0MSwxNSArNjExLDE3IEBAIHN0YXRpYyBnYm9vbGVhbiB3
ZWJLaXRXZWJTcmNRdWVyeVdpdGhQYXJlbnQoR3N0UGFkKiBwYWQsIEdzdE9iamVjdCogcGFyZW50
LCBHc3RRCiAKICAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0
LCBOVUxMKTsKIAotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHdlYmtpdFNyYywgImR1cmF0aW9u
IHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7Ci0gICAg
ICAgIGlmICgoZm9ybWF0ID09IEdTVF9GT1JNQVRfQllURVMpICYmICh3ZWJraXRTcmMtPnByaXYt
PnNpemUgPiAwKSkgewotICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF9kdXJhdGlvbihxdWVyeSwg
Zm9ybWF0LCB3ZWJraXRTcmMtPnByaXYtPnNpemUpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgImR1cmF0aW9uIHF1ZXJ5IGluIGZvcm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUo
Zm9ybWF0KSk7CisgICAgICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9D
SyhzcmMpKTsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHU1RfRk9STUFUX0JZVEVTICYmIHNyYy0+
cHJpdi0+c2l6ZSA+IDApIHsKKyAgICAgICAgICAgIGdzdF9xdWVyeV9zZXRfZHVyYXRpb24ocXVl
cnksIGZvcm1hdCwgc3JjLT5wcml2LT5zaXplKTsKICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR1NUX1FVRVJZX1VS
STogewotICAgICAgICBnc3RfcXVlcnlfc2V0X3VyaShxdWVyeSwgd2Via2l0U3JjLT5wcml2LT51
cmkpOworICAgICAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3Jj
KSk7CisgICAgICAgIGdzdF9xdWVyeV9zZXRfdXJpKHF1ZXJ5LCBzcmMtPnByaXYtPnVyaSk7CiAg
ICAgICAgIHJlc3VsdCA9IFRSVUU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU5MCw3ICs2
NjIsMTIgQEAgY29uc3QgZ2NoYXIqIGNvbnN0KiB3ZWJLaXRXZWJTcmNHZXRQcm90b2NvbHMoR1R5
cGUpCiAKIHN0YXRpYyBnY2hhciogd2ViS2l0V2ViU3JjR2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhh
bmRsZXIpCiB7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKFdFQktJVF9XRUJfU1JDKGhhbmRsZXIpLT5w
cml2LT51cmkpOworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMoaGFuZGxl
cik7CisgICAgZ2NoYXIqIHJldDsKKworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVD
VF9HRVRfTE9DSyhzcmMpKTsKKyAgICByZXQgPSBnX3N0cmR1cChzcmMtPnByaXYtPnVyaSk7Cisg
ICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpLCBHRXJyb3IqKiBlcnJvcikK
QEAgLTYwMyw2ICs2ODAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjU2V0VXJpKEdz
dFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmksIEdFcgogICAgICAgICByZXR1
cm4gRkFMU0U7CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dF
VF9MT0NLKHNyYykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0g
MDsKIApAQCAtNjM0LDcgKzcxMywxMiBAQCBzdGF0aWMgZ2NoYXIqKiB3ZWJLaXRXZWJTcmNHZXRQ
cm90b2NvbHModm9pZCkKIAogc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJLaXRXZWJTcmNHZXRVcmko
R3N0VVJJSGFuZGxlciogaGFuZGxlcikKIHsKLSAgICByZXR1cm4gZ19zdHJkdXAoV0VCS0lUX1dF
Ql9TUkMoaGFuZGxlciktPnByaXYtPnVyaSk7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhoYW5kbGVyKTsKKyAgICBnY2hhciogcmV0OworCisgICAgR011dGV4TG9ja2Vy
IGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOworICAgIHJldCA9IGdfc3RyZHVwKHNy
Yy0+cHJpdi0+dXJpKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Vi
S2l0V2ViU3JjU2V0VXJpKEdzdFVSSUhhbmRsZXIqIGhhbmRsZXIsIGNvbnN0IGdjaGFyKiB1cmkp
CkBAIC02NDcsNiArNzMxLDggQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NldFVyaShH
c3RVUklIYW5kbGVyKiBoYW5kbGVyLCBjb25zdCBnY2hhciogdXJpKQogICAgICAgICByZXR1cm4g
RkFMU0U7CiAgICAgfQogCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9M
T0NLKHNyYykpOworCiAgICAgZ19mcmVlKHByaXYtPnVyaSk7CiAgICAgcHJpdi0+dXJpID0gMDsK
IApAQCAtNjgxLDEyICs3NjcsMTkgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY05lZWRE
YXRhTWFpbkNiKFdlYktpdFdlYlNyYyogc3JjKQogewogICAgIFdlYktpdFdlYlNyY1ByaXZhdGUq
IHByaXYgPSBzcmMtPnByaXY7CiAKLSAgICBwcml2LT5yZXNvdXJjZS0+c2V0RGVmZXJzTG9hZGlu
ZyhmYWxzZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3Bw
ZWQKKyAgICBpZiAoIXByaXYtPm5lZWREYXRhSUQpCisgICAgICAgIHJldHVybiBGQUxTRTsKIAot
ICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIHByaXYtPnBhdXNlZCA9IEZBTFNFOwogICAg
IHByaXYtPm5lZWREYXRhSUQgPSAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CisgICAg
bG9ja2VyLnVubG9jaygpOworCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgcHJpdi0+
Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKICAgICByZXR1cm4gRkFMU0U7CiB9CiAK
QEAgLTY5NywyNyArNzkwLDMxIEBAIHN0YXRpYyB2b2lkIHdlYktpdFdlYlNyY05lZWREYXRhQ2Io
R3N0QXBwU3JjKiwgZ3VpbnQgbGVuZ3RoLCBncG9pbnRlciB1c2VyRGF0YSkKIAogICAgIEdTVF9E
RUJVR19PQkpFQ1Qoc3JjLCAiTmVlZCBtb3JlIGRhdGE6ICV1IiwgbGVuZ3RoKTsKIAotICAgIEdT
VF9PQkpFQ1RfTE9DSyhzcmMpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9H
RVRfTE9DSyhzcmMpKTsKICAgICBpZiAocHJpdi0+bmVlZERhdGFJRCB8fCAhcHJpdi0+cGF1c2Vk
KSB7Ci0gICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBwcml2LT5uZWVkRGF0YUlEID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJ
VFlfREVGQVVMVCwgMCwgKEdTb3VyY2VGdW5jKSB3ZWJLaXRXZWJTcmNOZWVkRGF0YU1haW5DYiwg
Z3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsK
LSAgICBHU1RfT0JKRUNUX1VOTE9DSyhzcmMpOworICAgIHByaXYtPm5lZWREYXRhSUQgPSBnX2lk
bGVfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAoR1NvdXJjZUZ1bmMpIHdlYktpdFdlYlNy
Y05lZWREYXRhTWFpbkNiLCBnc3Rfb2JqZWN0X3JlZihzcmMpLCAoR0Rlc3Ryb3lOb3RpZnkpIGdz
dF9vYmplY3RfdW5yZWYpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0V2ViU3JjRW5vdWdo
RGF0YU1haW5DYihXZWJLaXRXZWJTcmMqIHNyYykKIHsKICAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgcHJpdi0+cmVzb3VyY2UtPnNldERlZmVyc0xvYWRp
bmcodHJ1ZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEdNdXRleExvY2tl
ciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhzcmMpKTsKKyAgICAvLyBhbHJlYWR5IHN0b3Bw
ZWQKKyAgICBpZiAoIXByaXYtPmVub3VnaERhdGFJRCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwog
Ci0gICAgR1NUX09CSkVDVF9MT0NLKHNyYyk7CiAgICAgcHJpdi0+cGF1c2VkID0gVFJVRTsKICAg
ICBwcml2LT5lbm91Z2hEYXRhSUQgPSAwOwotICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNyYyk7Cisg
ICAgbG9ja2VyLnVubG9jaygpOwogCisgICAgaWYgKHByaXYtPmNsaWVudCkKKyAgICAgICAgcHJp
di0+Y2xpZW50LT5zZXREZWZlcnNMb2FkaW5nKHRydWUpOwogICAgIHJldHVybiBGQUxTRTsKIH0K
IApAQCAtNzI4LDE5ICs4MjUsMjcgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2ViU3JjRW5vdWdoRGF0
YUNiKEdzdEFwcFNyYyosIGdwb2ludGVyIHVzZXJEYXRhKQogCiAgICAgR1NUX0RFQlVHX09CSkVD
VChzcmMsICJIYXZlIGVub3VnaCBkYXRhIik7CiAKLSAgICBHU1RfT0JKRUNUX0xPQ0soc3JjKTsK
KyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CiAgICAg
aWYgKHByaXYtPmVub3VnaERhdGFJRCB8fCBwcml2LT5wYXVzZWQpIHsKLSAgICAgICAgR1NUX09C
SkVDVF9VTkxPQ0soc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXYtPmVu
b3VnaERhdGFJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChH
U291cmNlRnVuYykgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1haW5DYiwgZ3N0X29iamVjdF9yZWYo
c3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNU
X1VOTE9DSyhzcmMpOworICAgIHByaXYtPmVub3VnaERhdGFJRCA9IGdfaWRsZV9hZGRfZnVsbChH
X1BSSU9SSVRZX0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjRW5vdWdoRGF0YU1h
aW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3Vu
cmVmKTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtNYWluQ2IoV2ViS2l0
V2ViU3JjKiBzcmMpCiB7Ci0gICAgd2ViS2l0V2ViU3JjU3RvcChzcmMsIHRydWUpOworICAgIFdl
YktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NL
KHNyYykpOworICAgIC8vIGFscmVhZHkgc3RvcHBlZAorICAgIGlmICghcHJpdi0+c2Vla0lEKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgbG9ja2VyLnVubG9jaygpOworCisgICAgd2ViS2l0
V2ViU3JjU3RvcChzcmMpOwogICAgIHdlYktpdFdlYlNyY1N0YXJ0KHNyYyk7CiAKICAgICByZXR1
cm4gRkFMU0U7CkBAIC03NTIsNiArODU3LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNy
Y1NlZWtEYXRhQ2IoR3N0QXBwU3JjKiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCiAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJTZWVraW5nIHRvIG9mZnNldDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgb2Zm
c2V0KTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgaWYgKG9mZnNldCA9PSBwcml2LT5vZmZzZXQgJiYgcHJpdi0+cmVxdWVzdGVkT2Zmc2V0
ID09IHByaXYtPm9mZnNldCkKICAgICAgICAgcmV0dXJuIFRSVUU7CiAKQEAgLTc2MSwxMTAgKzg2
NywxNDAgQEAgc3RhdGljIGdib29sZWFuIHdlYktpdFdlYlNyY1NlZWtEYXRhQ2IoR3N0QXBwU3Jj
KiwgZ3VpbnQ2NCBvZmZzZXQsIGdwb2ludGVyIHVzZXIKICAgICBHU1RfREVCVUdfT0JKRUNUKHNy
YywgIkRvaW5nIHJhbmdlLXJlcXVlc3Qgc2VlayIpOwogICAgIHByaXYtPnJlcXVlc3RlZE9mZnNl
dCA9IG9mZnNldDsKIAotICAgIEdTVF9PQkpFQ1RfTE9DSyhzcmMpOwogICAgIGlmIChwcml2LT5z
ZWVrSUQpCiAgICAgICAgIGdfc291cmNlX3JlbW92ZShwcml2LT5zZWVrSUQpOwotICAgIHByaXYt
PnNlZWtJRCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsIChHU291
cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVjdF9yZWYoc3JjKSwgKEdE
ZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKLSAgICBHU1RfT0JKRUNUX1VOTE9DSyhz
cmMpOwotICAgIAorICAgIHByaXYtPnNlZWtJRCA9IGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZ
X0RFRkFVTFQsIChHU291cmNlRnVuYykgd2ViS2l0V2ViU3JjU2Vla01haW5DYiwgZ3N0X29iamVj
dF9yZWYoc3JjKSwgKEdEZXN0cm95Tm90aWZ5KSBnc3Rfb2JqZWN0X3VucmVmKTsKICAgICByZXR1
cm4gVFJVRTsKIH0KIAogdm9pZCB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXZWJLaXRXZWJT
cmMqIHNyYywgV2ViQ29yZTo6TWVkaWFQbGF5ZXIqIHBsYXllcikKIHsKICAgICBBU1NFUlQocGxh
eWVyKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7
CiAgICAgc3JjLT5wcml2LT5wbGF5ZXIgPSBwbGF5ZXI7CiB9CiAKLVN0cmVhbWluZ0NsaWVudDo6
U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKSA6IG1fc3JjKHNyYykKK1N0cmVhbWlu
Z0NsaWVudDo6U3RyZWFtaW5nQ2xpZW50KFdlYktpdFdlYlNyYyogc3JjKQorICAgIDogbV9zcmMo
YWRvcHRHUmVmKHN0YXRpY19jYXN0PEdzdEVsZW1lbnQqPihnc3Rfb2JqZWN0X3JlZihzcmMpKSkp
CiB7Ci0KIH0KIAogU3RyZWFtaW5nQ2xpZW50Ojp+U3RyZWFtaW5nQ2xpZW50KCkKIHsKK30KKwor
Y2hhciogU3RyZWFtaW5nQ2xpZW50OjpjcmVhdGVSZWFkQnVmZmVyKHNpemVfdCByZXF1ZXN0ZWRT
aXplLCBzaXplX3QmIGFjdHVhbFNpemUpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJL
SVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3JjUHJpdmF0ZSogcHJpdiA9
IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVCghcHJpdi0+YnVmZmVyKTsKKworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVlc3RlZFNpemUpOwogCisj
aWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBtYXBHc3RCdWZmZXIoYnVmZmVyKTsKKyNlbmRp
ZgorCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9MT0NLKHNyYykpOwor
ICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworICAgIGxvY2tlci51bmxvY2so
KTsKKworICAgIGFjdHVhbFNpemUgPSBnZXRHc3RCdWZmZXJTaXplKGJ1ZmZlcik7CisgICAgcmV0
dXJuIGdldEdzdEJ1ZmZlckRhdGFQb2ludGVyKGJ1ZmZlcik7CiB9CiAKLXZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpyZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxl
UmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAg
ICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2ViS2l0V2Vi
U3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0V2ViU3Jj
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
UmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CiAKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fc3JjLCAiUmVjZWl2ZWQgcmVzcG9uc2U6ICVkIiwgcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSk7CisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNU
X0dFVF9MT0NLKHNyYykpOwogCiAgICAgLy8gSWYgd2Ugc2Vla2VkIHdlIG5lZWQgMjA2ID09IFBB
UlRJQUxfQ09OVEVOVAogICAgIGlmIChwcml2LT5yZXF1ZXN0ZWRPZmZzZXQgJiYgcmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSAhPSAyMDYpIHsKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9z
cmMsIFJFU09VUkNFLCBSRUFELCAoMCksICgwKSk7CisgICAgICAgIGxvY2tlci51bmxvY2soKTsK
KyAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBSRVNPVVJDRSwgUkVBRCwgKDApLCAoMCkp
OwogICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKHByaXYtPmFwcHNyYyk7Ci0gICAg
ICAgIHdlYktpdFdlYlNyY1N0b3AobV9zcmMsIGZhbHNlKTsKKyAgICAgICAgd2ViS2l0V2ViU3Jj
U3RvcChzcmMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbG9uZyBsb25nIGxlbmd0
aCA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiAw
KSB7CisgICAgaWYgKGxlbmd0aCA+IDApCiAgICAgICAgIGxlbmd0aCArPSBwcml2LT5yZXF1ZXN0
ZWRPZmZzZXQ7Ci0gICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgbGVu
Z3RoKTsKLQotI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICBpZiAoIXByaXYtPmhh
dmVBcHBTcmMyNykgewotICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1cmF0aW9uKCZHU1Rf
QkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9CWVRFUywgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChwcml2
LT5hcHBzcmMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9tZXNz
YWdlX25ld19kdXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNyYyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9GT1JN
QVRfQllURVMsIGxlbmd0aCkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9CiAKICAgICBwcml2
LT5zaXplID0gbGVuZ3RoID49IDAgPyBsZW5ndGggOiAwOwogICAgIHByaXYtPnNlZWthYmxlID0g
bGVuZ3RoID4gMCAmJiBnX2FzY2lpX3N0cmNhc2VjbXAoIm5vbmUiLCByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoIkFjY2VwdC1SYW5nZXMiKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIC8vIGljZWNh
c3Qgc3R1ZmYKLSAgICBTdHJpbmcgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS1tZXRhaW50Iik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZ2NoYXIq
IGVuZHB0ciA9IDA7Ci0gICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xs
KHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoZW5kcHRyICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgewotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19z
aW1wbGUoImFwcGxpY2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lO
VCwgKGdpbnQpIGljeU1ldGFJbnQsIE5VTEwpKTsKLQotICAgICAgICAgICAgZ3N0X2FwcF9zcmNf
c2V0X2NhcHMocHJpdi0+YXBwc3JjLCBjYXBzLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQog
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdf
bGlzdF9uZXdfZW1wdHkoKTsKICNlbHNlCiAgICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90YWdf
bGlzdF9uZXcoKTsKICNlbmRpZgotICAgIHZhbHVlID0gcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KCJpY3ktbmFtZSIpOworICAgIFN0cmluZyB2YWx1ZSA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVs
ZCgiaWN5LW5hbWUiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2Zy
ZWUocHJpdi0+aXJhZGlvTmFtZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb05hbWUgPSBnX3N0cmR1
cCh2YWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNU
KG1fc3JjKSwgImlyYWRpby1uYW1lIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChzcmMpLCAiaXJhZGlvLW5hbWUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBH
U1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfT1JHQU5JWkFUSU9OLCBwcml2LT5pcmFkaW9O
YW1lLCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQo
ImljeS1nZW5yZSIpOwogICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJl
ZShwcml2LT5pcmFkaW9HZW5yZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb0dlbnJlID0gZ19zdHJk
dXAodmFsdWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChtX3NyYyksICJpcmFkaW8tZ2VucmUiKTsKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JK
RUNUKHNyYyksICJpcmFkaW8tZ2VucmUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdz
LCBHU1RfVEFHX01FUkdFX1JFUExBQ0UsIEdTVF9UQUdfR0VOUkUsIHByaXYtPmlyYWRpb0dlbnJl
LCBOVUxMKTsKICAgICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS11cmwiKTsKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBnX2ZyZWUocHJp
di0+aXJhZGlvVXJsKTsKICAgICAgICAgcHJpdi0+aXJhZGlvVXJsID0gZ19zdHJkdXAodmFsdWUu
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyks
ICJpcmFkaW8tdXJsIik7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChzcmMpLCAi
aXJhZGlvLXVybCIpOwogICAgICAgICBnc3RfdGFnX2xpc3RfYWRkKHRhZ3MsIEdTVF9UQUdfTUVS
R0VfUkVQTEFDRSwgR1NUX1RBR19MT0NBVElPTiwgcHJpdi0+aXJhZGlvVXJsLCBOVUxMKTsKICAg
ICB9CiAgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImljeS10aXRsZSIpOwog
ICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGdfZnJlZShwcml2LT5pcmFkaW9U
aXRsZSk7CiAgICAgICAgIHByaXYtPmlyYWRpb1RpdGxlID0gZ19zdHJkdXAodmFsdWUudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChtX3NyYyksICJpcmFk
aW8tdGl0bGUiKTsKKyAgICAgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHNyYyksICJpcmFk
aW8tdGl0bGUiKTsKICAgICAgICAgZ3N0X3RhZ19saXN0X2FkZCh0YWdzLCBHU1RfVEFHX01FUkdF
X1JFUExBQ0UsIEdTVF9UQUdfVElUTEUsIHByaXYtPmlyYWRpb1RpdGxlLCBOVUxMKTsKICAgICB9
CiAKKyAgICBsb2NrZXIudW5sb2NrKCk7CisKKyAgICAvLyBub3RpZnkgc2l6ZS9kdXJhdGlvbgor
ICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYt
PmFwcHNyYywgbGVuZ3RoKTsKKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBp
ZiAoIXByaXYtPmhhdmVBcHBTcmMyNykgeworICAgICAgICAgICAgZ3N0X3NlZ21lbnRfc2V0X2R1
cmF0aW9uKCZHU1RfQkFTRV9TUkMocHJpdi0+YXBwc3JjKS0+c2VnbWVudCwgR1NUX0ZPUk1BVF9C
WVRFUywgbGVuZ3RoKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1Rf
RUxFTUVOVChwcml2LT5hcHBzcmMpLAorICAgICAgICAgICAgICAgIGdzdF9tZXNzYWdlX25ld19k
dXJhdGlvbihHU1RfT0JKRUNUKHByaXYtPmFwcHNyYyksCisgICAgICAgICAgICAgICAgICAgIEdT
VF9GT1JNQVRfQllURVMsIGxlbmd0aCkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9IGVsc2UK
KyAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X3NpemUocHJpdi0+YXBwc3JjLCAtMSk7CisKKyAgICAv
LyBpY2VjYXN0IHN0dWZmCisgICAgdmFsdWUgPSByZXNwb25zZS5odHRwSGVhZGVyRmllbGQoImlj
eS1tZXRhaW50Iik7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ2NoYXIq
IGVuZHB0ciA9IDA7CisgICAgICAgIGdpbnQ2NCBpY3lNZXRhSW50ID0gZ19hc2NpaV9zdHJ0b2xs
KHZhbHVlLnV0ZjgoKS5kYXRhKCksICZlbmRwdHIsIDEwKTsKKworICAgICAgICBpZiAoZW5kcHRy
ICYmICplbmRwdHIgPT0gJ1wwJyAmJiBpY3lNZXRhSW50ID4gMCkgeworICAgICAgICAgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxp
Y2F0aW9uL3gtaWN5IiwgIm1ldGFkYXRhLWludGVydmFsIiwgR19UWVBFX0lOVCwgKGdpbnQpIGlj
eU1ldGFJbnQsIE5VTEwpKTsKKworICAgICAgICAgICAgZ3N0X2FwcF9zcmNfc2V0X2NhcHMocHJp
di0+YXBwc3JjLCBjYXBzLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBn
c3RfYXBwX3NyY19zZXRfY2Fwcyhwcml2LT5hcHBzcmMsIDApOworCisgICAgLy8gbm90aWZ5IHRh
Z3MKICAgICBpZiAoZ3N0X3RhZ19saXN0X2lzX2VtcHR5KHRhZ3MpKQogI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCiAgICAgICAgIGdzdF90YWdfbGlzdF91bnJlZih0YWdzKTsKQEAgLTg3MiwxNCAr
MTAwOCwxNyBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6cmVzcG9uc2VSZWNlaXZlZChDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUgogICAgICAgICBnc3RfdGFnX2xpc3Rf
ZnJlZSh0YWdzKTsKICNlbmRpZgogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5R3N0VGFnc09uUGFk
KEdTVF9FTEVNRU5UKG1fc3JjKSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFncyk7CisgICAgICAg
IG5vdGlmeUdzdFRhZ3NPblBhZChHU1RfRUxFTUVOVChzcmMpLCBwcml2LT5zcmNwYWQsIHRhZ3Mp
OwogfQogCi12b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVkKENhY2hlZFJlc291cmNl
KiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3ZvaWQgU3RyZWFtaW5n
Q2xpZW50OjpoYW5kbGVEYXRhUmVjZWl2ZWQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
IHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgV2Vi
S2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NSQyhtX3NyYy5nZXQoKSk7CisgICAgV2ViS2l0
V2ViU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKIAotICAgIEdTVF9MT0dfT0JKRUNUKG1f
c3JjLCAiSGF2ZSAlZCBieXRlcyBvZiBkYXRhIiwgcHJpdi0+YnVmZmVyID8gZ2V0R3N0QnVmZmVy
U2l6ZShwcml2LT5idWZmZXIuZ2V0KCkpIDogbGVuZ3RoKTsKKyAgICBHTXV0ZXhMb2NrZXIgbG9j
a2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisKKyAgICBHU1RfTE9HX09CSkVDVChzcmMs
ICJIYXZlICVkIGJ5dGVzIG9mIGRhdGEiLCBwcml2LT5idWZmZXIgPyBnZXRHc3RCdWZmZXJTaXpl
KHByaXYtPmJ1ZmZlci5nZXQoKSkgOiBsZW5ndGgpOwogCiAgICAgQVNTRVJUKCFwcml2LT5idWZm
ZXIgfHwgZGF0YSA9PSBnZXRHc3RCdWZmZXJEYXRhUG9pbnRlcihwcml2LT5idWZmZXIuZ2V0KCkp
KTsKIApAQCAtODg4LDggKzEwMjcsOCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2Vp
dmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgY2hhciogZGF0YSwgaQogICAgICAg
ICB1bm1hcEdzdEJ1ZmZlcihwcml2LT5idWZmZXIuZ2V0KCkpOwogI2VuZGlmCiAKLSAgICBpZiAo
cHJpdi0+c2Vla0lEIHx8IHJlc291cmNlICE9IHByaXYtPnJlc291cmNlKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9zcmMsICJTZWVrIGluIHByb2dyZXNzLCBpZ25vcmluZyBkYXRhIik7
CisgICAgaWYgKHByaXYtPnNlZWtJRCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywg
IlNlZWsgaW4gcHJvZ3Jlc3MsIGlnbm9yaW5nIGRhdGEiKTsKICAgICAgICAgcHJpdi0+YnVmZmVy
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MDcsNTcgKzEwNDYsMTgyIEBA
IHZvaWQgU3RyZWFtaW5nQ2xpZW50OjpkYXRhUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBjb25zdCBjaGFyKiBkYXRhLCBpCiAgICAgcHJpdi0+b2Zmc2V0ICs9IGxlbmd0aDsKICAg
ICAvLyBwcml2LT5zaXplID09IDAgaWYgcmVjZWl2ZWQgbGVuZ3RoIG9uIGRpZFJlY2VpdmVSZXNw
b25zZSA8IDAuCiAgICAgaWYgKHByaXYtPnNpemUgPiAwICYmIHByaXYtPm9mZnNldCA+IHByaXYt
PnNpemUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3NyYywgIlVwZGF0aW5nIGludGVy
bmFsIHNpemUgZnJvbSAlIiBHX0dVSU5UNjRfRk9STUFUICIgdG8gJSIgR19HVUlOVDY0X0ZPUk1B
VCwgcHJpdi0+c2l6ZSwgcHJpdi0+b2Zmc2V0KTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChz
cmMsICJVcGRhdGluZyBpbnRlcm5hbCBzaXplIGZyb20gJSIgR19HVUlOVDY0X0ZPUk1BVCAiIHRv
ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIHByaXYtPnNpemUsIHByaXYtPm9mZnNldCk7CiAgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9zaXplKHByaXYtPmFwcHNyYywgcHJpdi0+b2Zmc2V0KTsKICAgICAg
ICAgcHJpdi0+c2l6ZSA9IHByaXYtPm9mZnNldDsKICAgICB9CiAgICAgR1NUX0JVRkZFUl9PRkZT
RVRfRU5EKHByaXYtPmJ1ZmZlci5nZXQoKSkgPSBwcml2LT5vZmZzZXQ7CiAKKyAgICBsb2NrZXIu
dW5sb2NrKCk7CisKICAgICBHc3RGbG93UmV0dXJuIHJldCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVm
ZmVyKHByaXYtPmFwcHNyYywgcHJpdi0+YnVmZmVyLmxlYWtSZWYoKSk7CiAjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKICAgICBpZiAocmV0ICE9IEdTVF9GTE9XX09LICYmIHJldCAhPSBHU1RfRkxP
V19FT1MpCiAjZWxzZQogICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9G
TE9XX1VORVhQRUNURUQpCiAjZW5kaWYKLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IobV9zcmMs
IENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOworICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMs
IENPUkUsIEZBSUxFRCwgKDApLCAoMCkpOwogfQogCi1jaGFyKiBTdHJlYW1pbmdDbGllbnQ6Omdl
dE9yQ3JlYXRlUmVhZEJ1ZmZlcihDYWNoZWRSZXNvdXJjZSosIHNpemVfdCByZXF1ZXN0ZWRTaXpl
LCBzaXplX3QmIGFjdHVhbFNpemUpCit2b2lkIFN0cmVhbWluZ0NsaWVudDo6aGFuZGxlTm90aWZ5
RmluaXNoZWQoKQogewotICAgIFdlYktpdFdlYlNyY1ByaXZhdGUqIHByaXYgPSBtX3NyYy0+cHJp
djsKKyAgICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsK
KyAgICBXZWJLaXRXZWJTcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OwogCi0gICAgQVNTRVJU
KCFwcml2LT5idWZmZXIpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiSGF2ZSBFT1MiKTsK
IAotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKHJlcXVl
c3RlZFNpemUpOworICAgIEdNdXRleExvY2tlciBsb2NrZXIoR1NUX09CSkVDVF9HRVRfTE9DSyhz
cmMpKTsKKyAgICBpZiAoIXByaXYtPnNlZWtJRCkgeworICAgICAgICBsb2NrZXIudW5sb2NrKCk7
CisgICAgICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0ocHJpdi0+YXBwc3JjKTsKKyAgICB9
Cit9CiAKLSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgIG1hcEdzdEJ1ZmZlcihidWZmZXIp
OwotI2VuZGlmCitDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6Q2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQoV2ViS2l0V2ViU3JjKiBzcmMsIENhY2hlZFJlc291cmNlTG9hZGVyKiBy
ZXNvdXJjZUxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3Ry
ZWFtaW5nQ2xpZW50KHNyYykKK3sKKyAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgY2FjaGVSZXF1
ZXN0KHJlcXVlc3QsIFJlc291cmNlTG9hZGVyT3B0aW9ucyhTZW5kQ2FsbGJhY2tzLCBEb05vdFNu
aWZmQ29udGVudCwgRG9Ob3RCdWZmZXJEYXRhLCBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMs
IERvTm90QXNrQ2xpZW50Rm9yQ3Jvc3NPcmlnaW5DcmVkZW50aWFscywgRG9TZWN1cml0eUNoZWNr
LCBVc2VEZWZhdWx0T3JpZ2luUmVzdHJpY3Rpb25zRm9yVHlwZSkpOworICAgIG1fcmVzb3VyY2Ug
PSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdFJhd1Jlc291cmNlKGNhY2hlUmVxdWVzdCk7CisgICAg
aWYgKG1fcmVzb3VyY2UpCisgICAgICAgIG1fcmVzb3VyY2UtPmFkZENsaWVudCh0aGlzKTsKK30K
IAotICAgIHByaXYtPmJ1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworQ2FjaGVkUmVzb3VyY2VT
dHJlYW1pbmdDbGllbnQ6On5DYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCgpCit7CisgICAg
aWYgKG1fcmVzb3VyY2UpIHsKKyAgICAgICAgbV9yZXNvdXJjZS0+cmVtb3ZlQ2xpZW50KHRoaXMp
OworICAgICAgICBtX3Jlc291cmNlID0gMDsKKyAgICB9Cit9CiAKLSAgICBhY3R1YWxTaXplID0g
Z2V0R3N0QnVmZmVyU2l6ZShidWZmZXIpOwotICAgIHJldHVybiBnZXRHc3RCdWZmZXJEYXRhUG9p
bnRlcihidWZmZXIpOworYm9vbCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZh
aWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Jlc291cmNlOworfQorCit2b2lkIENhY2hl
ZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQor
eworICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2Fk
aW5nKGRlZmVycyk7CiB9CiAKLXZvaWQgU3RyZWFtaW5nQ2xpZW50Ojpub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCitjaGFyKiBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0Ns
aWVudDo6Z2V0T3JDcmVhdGVSZWFkQnVmZmVyKENhY2hlZFJlc291cmNlKiwgc2l6ZV90IHJlcXVl
c3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6ZSkKIHsKLSAgICBXZWJLaXRXZWJTcmNQcml2YXRl
KiBwcml2ID0gbV9zcmMtPnByaXY7CisgICAgcmV0dXJuIGNyZWF0ZVJlYWRCdWZmZXIocmVxdWVz
dGVkU2l6ZSwgYWN0dWFsU2l6ZSk7Cit9CisKK3ZvaWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQ6OnJlc3BvbnNlUmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBoYW5kbGVSZXNwb25zZVJlY2VpdmVkKHJlc3BvbnNl
KTsKK30KIAordm9pZCBDYWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudDo6ZGF0YVJlY2VpdmVk
KENhY2hlZFJlc291cmNlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBo
YW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBDYWNoZWRSZXNvdXJj
ZVN0cmVhbWluZ0NsaWVudDo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
KQorewogICAgIGlmIChyZXNvdXJjZS0+bG9hZEZhaWxlZE9yQ2FuY2VsZWQoKSkgeworICAgICAg
ICBXZWJLaXRXZWJTcmMqIHNyYyA9IFdFQktJVF9XRUJfU1JDKG1fc3JjLmdldCgpKTsKKwogICAg
ICAgICBpZiAoIXJlc291cmNlLT53YXNDYW5jZWxlZCgpKSB7CiAgICAgICAgICAgICBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvciA9IHJlc291cmNlLT5yZXNvdXJjZUVycm9yKCk7Ci0gICAgICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKG1fc3JjLCAiSGF2ZSBmYWlsdXJlOiAlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBHU1RfRUxF
TUVOVF9FUlJPUihtX3NyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxvY2FsaXpl
ZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CisgICAgICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVyZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgR1NUX0VMRU1FTlRfRVJST1Ioc3Jj
LCBSRVNPVVJDRSwgRkFJTEVELCAoIiVzIiwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpKSwgKDApKTsKICAgICAgICAgfQotICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKG1fc3JjLT5wcml2LT5hcHBzcmMpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRf
b2Zfc3RyZWFtKHNyYy0+cHJpdi0+YXBwc3JjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9zcmMsICJIYXZlIEVPUyIpOworICAgIGhhbmRsZU5vdGlm
eUZpbmlzaGVkKCk7Cit9CiAKLSAgICBpZiAoIXByaXYtPnNlZWtJRCkKLSAgICAgICAgZ3N0X2Fw
cF9zcmNfZW5kX29mX3N0cmVhbShtX3NyYy0+cHJpdi0+YXBwc3JjKTsKK1Jlc291cmNlSGFuZGxl
U3RyZWFtaW5nQ2xpZW50OjpSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudChXZWJLaXRXZWJT
cmMqIHNyYywgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgIDogU3RyZWFtaW5n
Q2xpZW50KHNyYykKK3sKKyAgICBtX3Jlc291cmNlID0gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSgw
IC8qY29udGV4dCovLCByZXF1ZXN0LCB0aGlzLCBmYWxzZSwgZmFsc2UpOworfQorCitSZXNvdXJj
ZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6flJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50KCkK
K3sKKyAgICBpZiAobV9yZXNvdXJjZSkgeworICAgICAgICBtX3Jlc291cmNlLT5jYW5jZWwoKTsK
KyAgICAgICAgbV9yZXNvdXJjZS5yZWxlYXNlKCk7CisgICAgICAgIG1fcmVzb3VyY2UgPSAwOwor
ICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6bG9hZEZhaWxl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3Jlc291cmNlOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQorewor
ICAgIGlmIChtX3Jlc291cmNlKQorICAgICAgICBtX3Jlc291cmNlLT5zZXREZWZlcnNMb2FkaW5n
KGRlZmVycyk7Cit9CisKK2NoYXIqIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpnZXRP
ckNyZWF0ZVJlYWRCdWZmZXIoc2l6ZV90IHJlcXVlc3RlZFNpemUsIHNpemVfdCYgYWN0dWFsU2l6
ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVhZEJ1ZmZlcihyZXF1ZXN0ZWRTaXplLCBhY3R1YWxT
aXplKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZVN0cmVhbWluZ0NsaWVudDo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIGhhbmRsZVJlc3BvbnNlUmVjZWl2ZWQocmVzcG9uc2UpOworfQor
Cit2b2lkIFJlc291cmNlSGFuZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRSZWNlaXZlRGF0YShSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCkKK3sKKyAgICBo
YW5kbGVEYXRhUmVjZWl2ZWQoZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZVN0cmVhbWluZ0NsaWVudDo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJs
ZSkKK3sKKyAgICBoYW5kbGVOb3RpZnlGaW5pc2hlZCgpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlU3RyZWFtaW5nQ2xpZW50OjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgZXJyb3IpCit7CisgICAgV2ViS2l0V2ViU3JjKiBzcmMgPSBXRUJLSVRfV0VCX1NS
QyhtX3NyYy5nZXQoKSk7CisKKyAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkhhdmUgZmFpbHVy
ZTogJXMiLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpOworICAg
IEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgUkVTT1VSQ0UsIEZBSUxFRCwgKCIlcyIsIGVycm9yLmxv
Y2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSksICgwKSk7CisgICAgZ3N0X2FwcF9z
cmNfZW5kX29mX3N0cmVhbShzcmMtPnByaXYtPmFwcHNyYyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVTdHJlYW1pbmdDbGllbnQ6Ondhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKQoreworICAg
IFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dFQl9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdP
d25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiUmVxdWVzdCB3
YXMgYmxvY2tlZCIpOworCisgICAgR011dGV4TG9ja2VyIGxvY2tlcihHU1RfT0JKRUNUX0dFVF9M
T0NLKHNyYykpOworICAgIHVyaS5zZXQoZ19zdHJkdXAoc3JjLT5wcml2LT51cmkpKTsKKyAgICBs
b2NrZXIudW5sb2NrKCk7CisKKyAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIFJFU09VUkNFLCBP
UEVOX1JFQUQsICgiQWNjZXNzIHRvIFwiJXNcIiB3YXMgYmxvY2tlZCIsIHVyaS5nZXQoKSksICgw
KSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGVTdHJlYW1pbmdDbGllbnQ6OmNhbm5vdFNob3dV
UkwoUmVzb3VyY2VIYW5kbGUqKQoreworICAgIFdlYktpdFdlYlNyYyogc3JjID0gV0VCS0lUX1dF
Ql9TUkMobV9zcmMuZ2V0KCkpOworICAgIEdPd25QdHI8Z2NoYXI+IHVyaTsKKworICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc3JjLCAiQ2Fubm90IHNob3cgVVJMIik7CisKKyAgICBHTXV0ZXhMb2NrZXIg
bG9ja2VyKEdTVF9PQkpFQ1RfR0VUX0xPQ0soc3JjKSk7CisgICAgdXJpLnNldChnX3N0cmR1cChz
cmMtPnByaXYtPnVyaSkpOworICAgIGxvY2tlci51bmxvY2soKTsKKworICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgUkVTT1VSQ0UsIE9QRU5fUkVBRCwgKCJDYW4ndCBzaG93IFwiJXNcIiIsIHVy
aS5nZXQoKSksICgwKSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQotLSAKMS44LjEu
MgoK
</data>

          </attachment>
      

    </bug>

</bugzilla>