<?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>41364</bug_id>
          
          <creation_ts>2010-06-29 11:35:55 -0700</creation_ts>
          <short_desc>[Qt] QWebPage::allowGeolocationRequest should be async API</short_desc>
          <delta_ts>2010-09-02 07:43:09 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Laszlo Gombos">laszlo.gombos</reporter>
          <assigned_to name="Mahesh Kulkarni">maheshk</assigned_to>
          <cc>ademar</cc>
    
    <cc>bulach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>joth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>maheshk</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>244402</commentid>
    <comment_count>0</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-06-29 11:35:55 -0700</bug_when>
    <thetext>[Qt] QWebPage::allowGeolocationRequest should be async API. Same should apply for other APIs that are requesting permission e.g. for notification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244408</commentid>
    <comment_count>1</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-06-29 11:46:28 -0700</bug_when>
    <thetext>This bug could also be used to support ChromeClient::cancelGeolocationPermissionRequestForFrame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245883</commentid>
    <comment_count>2</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-07-02 05:14:02 -0700</bug_when>
    <thetext>IMO, The API we define for GeoLocation should be as similar as possible to the one for Notification. Please take a look at https://bugs.webkit.org/show_bug.cgi?id=41413 for my proposal for Notifications API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255504</commentid>
    <comment_count>3</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-07-23 12:14:49 -0700</bug_when>
    <thetext>*** Bug 42630 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264727</commentid>
    <comment_count>4</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-14 13:08:52 -0700</bug_when>
    <thetext> - Provides a new async API for geolocation permission. 
 - Using Notification API approach from qtwebkit. GeolocationPermissionClientQt maintains list of pending requests from WebCore 
 - Intimates WebCore pending geolocation notifiers when client either allows/denies the request. 
 - Implements ChromeClientQt::cancelGeolocationPermissionRequestForFrame which removes 
 - DumpRenderTree implements the async request from QtWebkit
 - WebPage maintains list of geolocation permission request QtWebkit and set&apos;s when LayoutTestController gets the access from test JS


Please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264728</commentid>
    <comment_count>5</comment_count>
      <attachid>64424</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-14 13:19:28 -0700</bug_when>
    <thetext>Created attachment 64424
patch

(In reply to comment #4)
&gt;  - Provides a new async API for geolocation permission. 
&gt;  - Using Notification API approach from qtwebkit. GeolocationPermissionClientQt maintains list of pending requests from WebCore 
&gt;  - Intimates WebCore pending geolocation notifiers when client either allows/denies the request. 
&gt;  - Implements ChromeClientQt::cancelGeolocationPermissionRequestForFrame which removes 
&gt;  - DumpRenderTree implements the async request from QtWebkit
&gt;  - WebPage maintains list of geolocation permission request QtWebkit and set&apos;s when LayoutTestController gets the access from test JS
&gt; 
&gt; 
&gt; Please review.


Right now 4 layoutTest cases are blocked by this bug and these cases will be available once patches for bug 42811 and bug 40002 gets in. 
I will attach one more patch followed by this one to enable all above 4 cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264729</commentid>
    <comment_count>6</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-14 13:20:23 -0700</bug_when>
    <thetext>IMO, QWebPage::requestPermissionFromUser() followed by QWebPAge::setPermission is enough to export (also cancelRequestsForPermission()) and remove  
QWebPage::checkPermissionFromUser() for two reasons,
1) checkPermissionFromUser and setPermission confuses clients 
2) checkPermissionFromUser is over ahead to call/maintain from WebCore side 

As requestPermission is async, client can maintain pending requests and call  QWebPAge::setPermission() once the permission is acquired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264730</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-14 13:28:52 -0700</bug_when>
    <thetext>Attachment 64424 did not build on qt:
Build output: http://queues.webkit.org/results/3785057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264738</commentid>
    <comment_count>8</comment_count>
      <attachid>64426</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-14 14:01:13 -0700</bug_when>
    <thetext>Created attachment 64426
patch

Fixed build problem with previous patch. Previous patch was missing DumpRenderTree changes. 
Also updated unit test case of qwebpage with new async api for geolocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264740</commentid>
    <comment_count>9</comment_count>
      <attachid>64428</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-14 14:05:08 -0700</bug_when>
    <thetext>Created attachment 64428
patch

Opps my bad, last patch had wrong ChangeLog message. Removed in this one. Please review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264742</commentid>
    <comment_count>10</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-14 14:10:37 -0700</bug_when>
    <thetext>Attachment 64426 did not build on qt:
Build output: http://queues.webkit.org/results/3747162</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264743</commentid>
    <comment_count>11</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-14 14:17:12 -0700</bug_when>
    <thetext>Attachment 64428 did not build on qt:
Build output: http://queues.webkit.org/results/3714171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264773</commentid>
    <comment_count>12</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-08-14 16:55:12 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; IMO, QWebPage::requestPermissionFromUser() followed by QWebPAge::setPermission is enough to export (also cancelRequestsForPermission()) and remove  
&gt; QWebPage::checkPermissionFromUser() for two reasons,
&gt; 1) checkPermissionFromUser and setPermission confuses clients 
&gt; 2) checkPermissionFromUser is over ahead to call/maintain from WebCore side 
&gt; 
&gt; As requestPermission is async, client can maintain pending requests and call  QWebPAge::setPermission() once the permission is acquired.

Laszlo &amp; I discussed this to great detail. You may not need the sync API in order to support Geolocation, but both are needed for the Notification use case. Please don&apos;t remove the sync API :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264783</commentid>
    <comment_count>13</comment_count>
      <attachid>64428</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-14 19:53:28 -0700</bug_when>
    <thetext>Comment on attachment 64428
patch

!GEOLOCATION system isn&apos;t building with my patch. Will upload fixed patch. Obsoleting latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264811</commentid>
    <comment_count>14</comment_count>
      <attachid>64442</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-15 04:33:36 -0700</bug_when>
    <thetext>Created attachment 64442
patch

hopefully this will fix build for !GEOLOCATION env. Please refer comment 4 and comment 5 for changes description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264931</commentid>
    <comment_count>15</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-15 21:42:09 -0700</bug_when>
    <thetext>*** Bug 43478 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265995</commentid>
    <comment_count>16</comment_count>
      <attachid>64442</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-18 02:05:59 -0700</bug_when>
    <thetext>Comment on attachment 64442
patch

WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:234
 +                  setUserPermission(frame, domain, PermissionDenied);
In the case where the permission has already been set from JavaScript, does this mean that the permission request from the Geolocation object is answered completely synchronously? Is your implementation of these permissions for the browser synchronous or asynchronous?

WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:278
 +                  setUserPermission(frame, domain, PermissionDenied);
It looks like this will pass the permissions to WebCore synchronously. If the browser permissions are asynchronous, you might want to consider making this asynchronous too to match the &apos;real life&apos; code path better, as Mac does. Do the delayed permission tests pass with this synchronous code?

WebCore/ChangeLog:8
 +          Adding GeolocationPermissionClientQt.cpp/h to build under geolocation flag.
This change should remove the delayed permission test from the skipped list, if possible. Also, we should probably mention here that this change provides functionality for those tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266039</commentid>
    <comment_count>17</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-18 04:09:43 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 64442 [details])
&gt; WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:234
&gt;  +                  setUserPermission(frame, domain, PermissionDenied);
&gt; In the case where the permission has already been set from JavaScript, does this mean that the permission request from the Geolocation object is answered completely synchronously? Is your implementation of these permissions for the browser synchronous or asynchronous?
&gt; 

In case of javascript setting permission in DRT case, LayouController would retain the permissions. When Geolocation request is made from any frame, LayoutController permission will be given to all frames. When permission request is made (QWebpage::requestPermissionFromUser), one more setUserPermission() will be called with permission set from LayoutControl. 

Btw, There are no layout cases where permission for each frame differs. This should probably be raised as a bug?   


&gt; WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:278
&gt;  +                  setUserPermission(frame, domain, PermissionDenied);
&gt; It looks like this will pass the permissions to WebCore synchronously. If the browser permissions are asynchronous, you might want to consider making this asynchronous too to match the &apos;real life&apos; code path better, as Mac does. Do the delayed permission tests pass with this synchronous code?
&gt; 

Yes they all passed because of above reason. 
We could probably change GeolocationPermissionClientQt to maintain a set of &lt;Frames, permission&gt; much before requests are made. (i.e when setUserPermission sync API called by client without any request). Cache the permission when any frames are created. This way clients can grand geolocation permission by default to certain frames. 


&gt; WebCore/ChangeLog:8
&gt;  +          Adding GeolocationPermissionClientQt.cpp/h to build under geolocation flag.
&gt; This change should remove the delayed permission test from the skipped list, if possible. Also, we should probably mention here that this change provides functionality for those tests.


Sorry above line is invalid as GeolocationPermissionClientQt.cpp/h are not under the flag anymore. I will upload the new patch with this corrected. One more mistake in patch, GeolocationPermissionClientQt.h are included twice in place of .cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266047</commentid>
    <comment_count>18</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-18 05:12:33 -0700</bug_when>
    <thetext>&gt; Btw, There are no layout cases where permission for each frame differs. This
&gt; should probably be raised as a bug?
Yes, please do. CC me and I&apos;ll review any patches you send.

&gt; Yes they all passed because of above reason.
OK

This change looks fine to me but I&apos;ll leave it to somebody familiar with Qt to give the r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266317</commentid>
    <comment_count>19</comment_count>
      <attachid>64756</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-18 12:32:53 -0700</bug_when>
    <thetext>Created attachment 64756
patch

This patch includes changes described in comment 4 and comment 5 and   

1) cache client permission from call QWebPage::setUserPermission() even without any geolocation requests. When Webcore makes a geolocation permission request, cached permission will be passed on. This way clients can set default sync permission to geolocation. 

2) Enabled all geolocation delayed layout test cases to Qt port as the permission API is now async

Please review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266319</commentid>
    <comment_count>20</comment_count>
      <attachid>64757</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-18 12:35:26 -0700</bug_when>
    <thetext>Created attachment 64757
patch

Mistakenly enabled wrong layout test case. Please refer prev comment for change description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269346</commentid>
    <comment_count>21</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-08-25 10:59:29 -0700</bug_when>
    <thetext>Bug #42630 - closed as duplicate of this one - was blocking Bug #39121 (QtWebKit 2.1 release).

Should this one block Bug #39121 as well? That is, is this a requirement for QtWebKit 2.1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271336</commentid>
    <comment_count>22</comment_count>
      <attachid>64757</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-08-30 00:44:54 -0700</bug_when>
    <thetext>Comment on attachment 64757
patch

&gt; WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp:44
&gt; +GeolocationPermissionClientQt* s_geolocationPermission= 0;
This global variable should be marked &quot;static&quot; and doesn&apos;t need a 0 initialization then. You could however also make it a class variable (in which case IIRC it needs an initialization :)

&gt; WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp:67
&gt; +        setPermission(webFrame, m_permissionForFrames.value(webFrame));
These two lines perform an identical map lookup. Wouldn&apos;t it be simpler to just look up the iterator once and use it&apos;s value if it&apos;s not end()?

&gt; WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp:78
&gt; +void GeolocationPermissionClientQt::cancelGeolocationPermissionRequestForFrame(QWebFrame* webFrame, Geolocation* listener)
Is this function also called when navigating from one origin to another within the same frame?

I.e. how does WebCore ensure that when I grant maps.ovi.com geolocation permission and then navigate to maps.evilh4x0r.com, the latter site won&apos;t be able to read my GPS?

&gt; WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp:90
&gt; +    m_permissionForFrames.remove(webFrame);
Ahh, I guess this part answers my previous question ;-)

&gt; WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.h:55
&gt; +    QHash&lt;QWebFrame*, Geolocation*&gt; m_pendingPermissionRequests;
Hmm, instead of storing a separate hash, wouldn&apos;t it be simpler to store the information in QWebFramePrivate directly?

In general I like the direction this patch is going very much, it simplifies the API :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272062</commentid>
    <comment_count>23</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-31 06:14:48 -0700</bug_when>
    <thetext>(In reply to comment #22)

&gt; &gt; WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.h:55
&gt; &gt; +    QHash&lt;QWebFrame*, Geolocation*&gt; m_pendingPermissionRequests;
&gt; Hmm, instead of storing a separate hash, wouldn&apos;t it be simpler to store the information in QWebFramePrivate directly?
&gt; 

As per our discussion with tronical in IRC we decided to *not* to cache permission from user, set even before call for requestPermission() is made. 

in WebCore geolocation permission is tied up with frame where as permission is given per domain. Right now Qtwebkit clients needs handle persisting per domain permission. QtWebkit will make request (first time) for every frame making request for location.   

My next patch will have that fix. 


(Chrome handles webkit layer side to allow permission host/domain based by storing domain. This actually has a problem with ChromeClient::cancelGeolocationPermissionRequestForFrame as it passes frame pointer, because, if two frames requesting for permission (both having domain say, x.myxyz.com) and say second frame redirects to x.myabc.com, then we have to remove the pending permission listeners for second frame. IMO chrome port  missing this handling. Steve? )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272064</commentid>
    <comment_count>24</comment_count>
      <attachid>66042</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-08-31 06:17:59 -0700</bug_when>
    <thetext>Created attachment 66042
patch

Removed : cache client permission from call QWebPage::setUserPermission() even without any geolocation requests. When Webcore makes a geolocation permission request, cached permission will be passed on. This way clients can set default sync permission to geolocation. 

Please review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272206</commentid>
    <comment_count>25</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-08-31 10:45:01 -0700</bug_when>
    <thetext>&gt; (Chrome handles webkit layer side to allow permission host/domain based by
&gt; storing domain. This actually has a problem with
&gt; ChromeClient::cancelGeolocationPermissionRequestForFrame as it passes frame
&gt; pointer, because, if two frames requesting for permission (both having domain
&gt; say, x.myxyz.com) and say second frame redirects to x.myabc.com, then we have
&gt; to remove the pending permission listeners for second frame. IMO chrome port
&gt; missing this handling. Steve? )
I&apos;m not familiar with the Chrome port - adding Marcus and Joth who are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272638</commentid>
    <comment_count>26</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-08-31 22:17:15 -0700</bug_when>
    <thetext>I think the ChangeLog needs to be updated as well as setUserPermission no longer caches the permission data.

The following sentence should be removed from WebKit/qt/ChangeLog

In case client call QWebPage::setUserPermission without any request, cache the permission for the frame and use it when WebCore makes a request.

Also just a nit, but it would be good to keep the file list sorted in WebCore.pro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272668</commentid>
    <comment_count>27</comment_count>
      <attachid>66173</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-09-01 00:15:39 -0700</bug_when>
    <thetext>Created attachment 66173
patch

Thanks for the review Laszlo.

Incorporated changes as per comment #26</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272752</commentid>
    <comment_count>28</comment_count>
      <attachid>66173</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-09-01 05:01:26 -0700</bug_when>
    <thetext>Comment on attachment 66173
patch

Looks good to me. All review feedback is addressed, r+. 

Great patch, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272767</commentid>
    <comment_count>29</comment_count>
      <attachid>66173</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-01 05:31:43 -0700</bug_when>
    <thetext>Comment on attachment 66173
patch

Clearing flags on attachment: 66173

Committed r66597: &lt;http://trac.webkit.org/changeset/66597&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272768</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-01 05:31:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273195</commentid>
    <comment_count>31</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-09-01 20:49:37 -0700</bug_when>
    <thetext>Thank you Laszlo/Simon/Steve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273386</commentid>
    <comment_count>32</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2010-09-02 07:42:55 -0700</bug_when>
    <thetext>Revision r66597 cherry-picked into qtwebkit-2.1 with commit 5da1b423861c071a2ea012e62d2a37603d96ab68</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64424</attachid>
            <date>2010-08-14 13:19:28 -0700</date>
            <delta_ts>2010-08-14 14:01:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364.patch</filename>
            <type>text/plain</type>
            <size>14430</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCisKKyNpbmNsdWRlICJHZW9sb2Nh
dGlvbi5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYmtpdGdsb2Jh
bC5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uPSAwOwor
CitHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpCit7CisgICAgaWYgKHNfZ2VvbG9j
YXRpb25QZXJtaXNzaW9uKQorICAgICAgICByZXR1cm4gc19nZW9sb2NhdGlvblBlcm1pc3Npb247
CisKKyAgICBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IG5ldyBHZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCgpOworICAgIHJldHVybiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsKK30KKwor
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0KCkKK3sKK30KKworR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdCgpCit7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShRV2ViRnJhbWUq
IHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVuZXIpCit7CisgICAgbV9wZW5kaW5nUGVybWlz
c2lvblJlcXVlc3RzLmluc2VydCh3ZWJGcmFtZSwgbGlzdGVuZXIpOworCisgICAgUVdlYlBhZ2Uq
IHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgpOworICAgIGVtaXQgcGFnZS0+cmVxdWVzdFBlcm1pc3Np
b25Gcm9tVXNlcih3ZWJGcmFtZSwgUVdlYlBhZ2U6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFp
bik7Cit9CisKKwordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2FuY2VsR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZSogd2ViRnJhbWUsIEdl
b2xvY2F0aW9uKiBsaXN0ZW5lcikKK3sKKyAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMu
cmVtb3ZlKHdlYkZyYW1lKTsKKworICAgIFFXZWJQYWdlKiBwYWdlID0gd2ViRnJhbWUtPnBhZ2Uo
KTsKKyAgICBlbWl0IHBhZ2UtPmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbih3ZWJGcmFtZSwg
UVdlYlBhZ2U6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbik7Cit9CisKK3ZvaWQgR2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24oUVdlYkZyYW1lKiB3ZWJGcmFt
ZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kgcGVybWlzc2lvbikKK3sgIAorICAgIGlmICht
X3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuY29udGFpbnMod2ViRnJhbWUpKSB7CisgICAgICAg
IEdlb2xvY2F0aW9uKiBsaXN0ZW5lciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy52YWx1
ZSh3ZWJGcmFtZSk7CisKKyAgICAgICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1p
c3Npb25HcmFudGVkKQorICAgICAgICAgICAgbGlzdGVuZXItPnNldElzQWxsb3dlZCh0cnVlKTsK
KyAgICAgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkRlbmll
ZCkKKyAgICAgICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9wZW5kaW5nUGVybWlzc2lvblJl
cXVlc3RzLnJlbW92ZSh3ZWJGcmFtZSk7CisgICAgfQorfQorCit9CkluZGV4OiBXZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDY1MzcwKQorKysg
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNp
bmNsdWRlICJHcmFwaGljc0xheWVyUXQuaCIKICNlbmRpZgorI2luY2x1ZGUgIkdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkljb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNTQ0LDEyICs1NDUs
MTYgQEAKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lv
bkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQogewotICAg
IGJvb2wgYWxsb3cgPSBmYWxzZTsKICAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gUVdlYkZyYW1l
UHJpdmF0ZTo6a2l0KGZyYW1lKTsKLSAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKG1fd2Vi
UGFnZSwgImFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IiwgUXQ6OkRpcmVjdENvbm5lY3Rpb24sIFFf
UkVUVVJOX0FSRyhib29sLCBhbGxvdyksIFFfQVJHKFFXZWJGcmFtZSosIHdlYkZyYW1lKSk7Ci0g
ICAgZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChhbGxvdyk7CisgICAgR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5yZXF1ZXN0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKIH0KIAor
dm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQoreworICAgIFFX
ZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOworICAgIEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQo
KS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBn
ZW9sb2NhdGlvbik7Cit9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lk
IENocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdy
YXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXRfaAorI2RlZmluZSBHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdF9oCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorI2luY2x1
ZGUgInF3ZWJwYWdlLmgiCisKKyNpbmNsdWRlIDxRSGFzaD4KKworY2xhc3MgUVdlYkZyYW1lOwor
Y2xhc3MgUVdlYlBhZ2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQgeworcHVibGljOgorICAgIEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0KCk7CisgICAgfkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KCk7CisKKyAg
ICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShRV2ViRnJhbWUqLCBH
ZW9sb2NhdGlvbiopOworICAgIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dEZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0aW9uKik7CisgICAgdm9pZCBzZXRQZXJtaXNz
aW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5KTsKKworICAgIHN0YXRp
YyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogZ2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50KCk7Citwcml2YXRlOgorICAgIFFIYXNoPFFXZWJGcmFtZSosIEdlb2xvY2F0aW9uKj4gbV9w
ZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA2NTM3MCkKKysr
IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRv
Vmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFt
ZSosIEdlb2xvY2F0aW9uKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0
SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OwpJ
bmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wOC0xNCAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNo
Lmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbUXRdIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCBzaG91
bGQgYmUgYXN5bmMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTM2NAorCisgICAgICAgIFByb3ZpZGVzIGEgbmV3IGFzeW5jIEFQSSBmb3IgZ2Vv
bG9jYXRpb24gcGVybWlzc2lvbi4gVXNpbmcKKyAgICAgICAgTm90aWZpY2F0aW9uIEFQSSBhcHBy
b2FjaCBmcm9tIHF0d2Via2l0LiBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCAKKyAgICAg
ICAgbWFpbnRhaW5zIGxpc3Qgb2YgcGVuZGluZyByZXF1ZXN0cyBmcm9tIFdlYkNvcmUgYW5kIGlu
dGltYXRlcyB0aGVtCisgICAgICAgIHdoZW4gY2xpZW50IGVpdGhlciBhbGxvd2VkL2RlbmllcyB0
aGUgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRzCisgICAgICAgIENocm9tZUNsaWVudFF0OjpjYW5j
ZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUgCisKKyAgICAgICAgKiBBcGkv
cXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNldFVzZXJQZXJtaXNzaW9uKToKKyAg
ICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdl
b2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBl
cm1pc3Npb25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KToKKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oOiBBZGRlZC4KKwogMjAxMC0wOC0xMiAg
SmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZlcnQgZm9y
IG5vdwpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXQvcXQvQXBpL3F3
ZWJwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICAgICBjbGFzcyBJbnNw
ZWN0b3JDbGllbnRRdDsKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAg
IGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OworICAgIGNsYXNzIEdlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0OwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwogICAgIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CiAgICAgY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7CkBAIC0y
MDIsNyArMjAzLDggQEAKICAgICB9OwogCiAgICAgZW51bSBQZXJtaXNzaW9uRG9tYWluIHsKLSAg
ICAgICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4KKyAgICAgICAgTm90aWZpY2F0aW9u
c1Blcm1pc3Npb25Eb21haW4sCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbgog
ICAgIH07CiAKICAgICBjbGFzcyBWaWV3cG9ydEhpbnRzIHsKQEAgLTM1MSw3ICszNTMsNiBAQAog
CiBwdWJsaWMgUV9TTE9UUzoKICAgICBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsK
LSAgICBib29sIGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpOwogCiBR
X1NJR05BTFM6CiAgICAgdm9pZCBsb2FkU3RhcnRlZCgpOwpAQCAtNDI0LDYgKzQyNSw3IEBACiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OwogICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKKyAgICBmcmllbmQgY2xh
c3MgV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNs
YXNzIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpR
TmV0d29ya1JlcGx5SGFuZGxlcjsKICAgICBmcmllbmQgY2xhc3MgRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQ7CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQAogI2luY2x1
ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAicnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmgiCiAj
aW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIgogI2lu
Y2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAtMjA4
MiwzMCArMjA4Myw2IEBACiAjZW5kaWYKIH0KIAotLyohCi0gICAgXGZuIGJvb2wgUVdlYlBhZ2U6
OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KCkKLSAgICBcc2luY2UgNC43Ci0KLSAgICBUaGlzIGZ1
bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIEphdmFTY3JpcHQgcHJvZ3JhbSBydW5uaW5nIGlu
c2lkZSBcYSBmcmFtZSB0cmllcyB0byBhY2Nlc3MgdXNlciBsb2NhdGlvbiB0aHJvdWdoIG5hdmln
YXRvci5nZW9sb2NhdGlvbi4KLQotICAgIElmIHRoZSB1c2VyIHdhbnRzIHRvIGFsbG93IGFjY2Vz
cyB0byBsb2NhdGlvbiB0aGVuIGl0IHNob3VsZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIGZhbHNl
LgotCi0gICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZXhlY3V0ZXMgdGhlIHF1ZXJ5IHVz
aW5nIFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbiB3aXRoIFFNZXNzYWdlQm94OjpZZXMgYW5kIFFN
ZXNzYWdlQm94OjpObyBidXR0b25zLgotCi0gICAgXHdhcm5pbmcgQmVjYXVzZSBvZiBiaW5hcnkg
Y29tcGF0aWJpbGl0eSBjb25zdHJhaW50cywgdGhpcyBmdW5jdGlvbiBpcyBub3QgdmlydHVhbC4g
SWYgeW91IHdhbnQgdG8KLSAgICBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGluIGEg
UVdlYlBhZ2Ugc3ViY2xhc3MsIHJlaW1wbGVtZW50IHRoZSBhbGxvd0dlb2xvY2F0aW9uUmVxdWVz
dCgpCi0gICAgc2xvdCBpbiB5b3VyIHN1YmNsYXNzIGluc3RlYWQuIFF0V2ViS2l0IHdpbGwgZHlu
YW1pY2FsbHkgZGV0ZWN0IHRoZSBzbG90IGFuZCBjYWxsIGl0LgotKi8KLWJvb2wgUVdlYlBhZ2U6
OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpCi17Ci0jaWZkZWYgUVRf
Tk9fTUVTU0FHRUJPWAotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0gICAgUVdpZGdldCogcGFy
ZW50ID0gKGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIHJl
dHVybiBRTWVzc2FnZUJveDo6WWVzID09IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbihwYXJlbnQs
IHRyKCJMb2NhdGlvbiBSZXF1ZXN0IGJ5LSAlMSIpLmFyZyhmcmFtZS0+dXJsKCkuaG9zdCgpKSwg
dHIoIlRoZSBwYWdlIHdhbnRzIHRvIGFjY2VzcyB5b3VyIGxvY2F0aW9uIGluZm9ybWF0aW9uLiBE
byB5b3Ugd2FudCB0byBhbGxvdyB0aGUgcmVxdWVzdD8iKSwgUU1lc3NhZ2VCb3g6OlllcywgUU1l
c3NhZ2VCb3g6Ok5vKTsKLSNlbmRpZgotfQotCiB2b2lkIFFXZWJQYWdlOjpzZXRVc2VyUGVybWlz
c2lvbihRV2ViRnJhbWUqIGZyYW1lLCBQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUGVybWlzc2lv
blBvbGljeSBwb2xpY3kpCiB7CiAgICAgc3dpdGNoIChkb21haW4pIHsKQEAgLTIxMTUsNiArMjA5
MiwxMiBAQAogICAgICAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlm
aWNhdGlvblByZXNlbnRlcigpLT5hbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKGZyYW1lKTsKICNl
bmRpZgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFp
bjoKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+c2V0UGVybWlzc2lvbihm
cmFtZSwgcG9saWN5KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgtMTUgIE1haGVzaCBL
dWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2Nh
dGlvblJlcXVlc3Qgc2hvdWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBBZGRpbmcgR2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwL2ggdG8gYnVpbGQgdW5kZXIgZ2VvbG9jYXRpb24gZmxh
Zy4KKworICAgICAgICAqIFdlYkNvcmUucHJvOgorCiAyMDEwLTA4LTE0ICBUYXN1a3UgU3V6dWtp
ICA8dGFzdWt1LnN1enVraUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25p
byBHb21lcy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64426</attachid>
            <date>2010-08-14 14:01:13 -0700</date>
            <delta_ts>2010-08-14 14:05:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364.patch</filename>
            <type>text/plain</type>
            <size>28179</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgtMTUgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxr
YXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJl
IGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDEzNjQKKworICAgICAgICBBZGRpbmcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQu
Y3BwL2ggdG8gYnVpbGQgdW5kZXIgZ2VvbG9jYXRpb24gZmxhZy4KKworICAgICAgICAqIFdlYkNv
cmUucHJvOgorCiAyMDEwLTA4LTE0ICBUYXN1a3UgU3V6dWtpICA8dGFzdWt1LnN1enVraUBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gNjUzNzApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUy
LDEwICsyNzUyLDEzIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9RVF9CRUFSRVI9MSkgewog
fQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfR0VPTE9DQVRJT049MSkgeworCiAgICAgSEVB
REVSUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmgKKyAg
ICAgICAgcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNlUXQuaCBcCisgICAgICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRR
dC5oCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2Vy
dmljZVF0LmNwcAorICAgICAgICBwbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAg
XAorICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQuY3BwCiAKICAgICBDT05GSUcgKz0gbW9iaWxpdHkKICAgICBNT0JJ
TElUWSArPSBsb2NhdGlvbgpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wOC0xNSAgTWFoZXNo
IEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQYWdlOjphbGxvd0dlb2xv
Y2F0aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAgIFByb3ZpZGVzIGEgbmV3
IGFzeW5jIEFQSSBmb3IgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4gVXNpbmcKKyAgICAgICAgTm90
aWZpY2F0aW9uIEFQSSBhcHByb2FjaCBmcm9tIHF0d2Via2l0LiBHZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCAKKyAgICAgICAgbWFpbnRhaW5zIGxpc3Qgb2YgcGVuZGluZyByZXF1ZXN0cyBm
cm9tIFdlYkNvcmUgYW5kIGludGltYXRlcyB0aGVtCisgICAgICAgIHdoZW4gY2xpZW50IGVpdGhl
ciBhbGxvd2VkL2RlbmllcyB0aGUgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRzCisgICAgICAgIENo
cm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUg
CisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNldFVz
ZXJQZXJtaXNzaW9uKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2Fu
Y2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwOgorICAgICAgICAo
SlNUZXN0UGFnZTo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAodHN0X1FXZWJQYWdlOjpn
ZW9sb2NhdGlvblJlcXVlc3RKUyk6CisKIDIwMTAtMDgtMTIgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2ZXJ0IGZvciBub3cKSW5kZXg6IFdlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRl
ICJydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
KyNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIk5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudFF0Lmgi
CiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCkBAIC0yMDgyLDMwICsyMDgzLDYgQEAgYm9vbCBR
V2ViUGFnZTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAogI2VuZGlmCiB9CiAKLS8qIQotICAg
IFxmbiBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCgpCi0gICAgXHNpbmNl
IDQuNwotCi0gICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBKYXZhU2NyaXB0
IHByb2dyYW0gcnVubmluZyBpbnNpZGUgXGEgZnJhbWUgdHJpZXMgdG8gYWNjZXNzIHVzZXIgbG9j
YXRpb24gdGhyb3VnaCBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uCi0KLSAgICBJZiB0aGUgdXNlciB3
YW50cyB0byBhbGxvdyBhY2Nlc3MgdG8gbG9jYXRpb24gdGhlbiBpdCBzaG91bGQgcmV0dXJuIHRy
dWU7IG90aGVyd2lzZSBmYWxzZS4KLQotICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4
ZWN1dGVzIHRoZSBxdWVyeSB1c2luZyBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24gd2l0aCBRTWVz
c2FnZUJveDo6WWVzIGFuZCBRTWVzc2FnZUJveDo6Tm8gYnV0dG9ucy4KLQotICAgIFx3YXJuaW5n
IEJlY2F1c2Ugb2YgYmluYXJ5IGNvbXBhdGliaWxpdHkgY29uc3RyYWludHMsIHRoaXMgZnVuY3Rp
b24gaXMgbm90IHZpcnR1YWwuIElmIHlvdSB3YW50IHRvCi0gICAgcHJvdmlkZSB5b3VyIG93biBp
bXBsZW1lbnRhdGlvbiBpbiBhIFFXZWJQYWdlIHN1YmNsYXNzLCByZWltcGxlbWVudCB0aGUgYWxs
b3dHZW9sb2NhdGlvblJlcXVlc3QoKQotICAgIHNsb3QgaW4geW91ciBzdWJjbGFzcyBpbnN0ZWFk
LiBRdFdlYktpdCB3aWxsIGR5bmFtaWNhbGx5IGRldGVjdCB0aGUgc2xvdCBhbmQgY2FsbCBpdC4K
LSovCi1ib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZy
YW1lKQotewotI2lmZGVmIFFUX05PX01FU1NBR0VCT1gKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxz
ZQotICAgIFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldp
ZGdldCgpIDogMDsKLSAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6
aW5mb3JtYXRpb24ocGFyZW50LCB0cigiTG9jYXRpb24gUmVxdWVzdCBieS0gJTEiKS5hcmcoZnJh
bWUtPnVybCgpLmhvc3QoKSksIHRyKCJUaGUgcGFnZSB3YW50cyB0byBhY2Nlc3MgeW91ciBsb2Nh
dGlvbiBpbmZvcm1hdGlvbi4gRG8geW91IHdhbnQgdG8gYWxsb3cgdGhlIHJlcXVlc3Q/IiksIFFN
ZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBRV2Vi
UGFnZTo6c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVybWlzc2lvbkRvbWFp
biBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRjaCAoZG9tYWlu
KSB7CkBAIC0yMTE1LDYgKzIwOTIsMTIgQEAgdm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Np
b24oUVdlYkZyYQogICAgICAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5v
dGlmaWNhdGlvblByZXNlbnRlcigpLT5hbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKGZyYW1lKTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRv
bWFpbjoKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+c2V0UGVybWlzc2lv
bihmcmFtZSwgcG9saWN5KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgJKHJldmlzaW9uIDY1MzcwKQor
KysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnRRdDsKICAg
ICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGNsYXNzIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OworICAgIGNsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwogICAgIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiAgICAgY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7CkBAIC0yMDIsNyArMjAzLDggQEAgcHVi
bGljOgogICAgIH07CiAKICAgICBlbnVtIFBlcm1pc3Npb25Eb21haW4gewotICAgICAgICBOb3Rp
ZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbgorICAgICAgICBOb3RpZmljYXRpb25zUGVybWlzc2lv
bkRvbWFpbiwKKyAgICAgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluCiAgICAgfTsKIAog
ICAgIGNsYXNzIFZpZXdwb3J0SGludHMgewpAQCAtMzUxLDcgKzM1Myw2IEBAIHB1YmxpYzoKIAog
cHVibGljIFFfU0xPVFM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7Ci0g
ICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKTsKIAogUV9T
SUdOQUxTOgogICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKQEAgLTQyNCw2ICs0MjUsNyBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsKICAgICBm
cmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ7CisgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OwogICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTsKICAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI7CiAgICAgZnJpZW5kIGNsYXNzIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuY3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclF0Lmgi
CiAjZW5kaWYKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKQEAgLTU0NCwxMCArNTQ1LDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnNldEN1cnNvcihjb25zdCBDdXIKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uKQogewotICAgIGJvb2wgYWxsb3cgPSBmYWxzZTsKICAgICBRV2ViRnJhbWUqIHdlYkZy
YW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsKLSAgICBRTWV0YU9iamVjdDo6aW52
b2tlTWV0aG9kKG1fd2ViUGFnZSwgImFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IiwgUXQ6OkRpcmVj
dENvbm5lY3Rpb24sIFFfUkVUVVJOX0FSRyhib29sLCBhbGxvdyksIFFfQVJHKFFXZWJGcmFtZSos
IHdlYkZyYW1lKSk7Ci0gICAgZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChhbGxvdyk7CisgICAg
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dCgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xv
Y2F0aW9uKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0
aW9uKQoreworICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQo
ZnJhbWUpOworICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBl
cm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRS
ZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9u
Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2Vv
bG9jYXRpb24qKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJl
Y3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4g
Y3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OwpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisKKyNpbmNs
dWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSAi
cXdlYnBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCogc19nZW9sb2NhdGlvblBlcm1pc3Npb249IDA7CisKK0dlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0KiBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50KCkKK3sKKyAgICBpZiAoc19nZW9sb2NhdGlvblBlcm1pc3Npb24p
CisgICAgICAgIHJldHVybiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsKKworICAgIHNfZ2VvbG9j
YXRpb25QZXJtaXNzaW9uID0gbmV3IEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KCk7Cisg
ICAgcmV0dXJuIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworfQorCitHZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKQoreworfQorCitH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6fkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0KCkKK3sKK30KKwordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZSogd2ViRnJhbWUsIEdlb2xv
Y2F0aW9uKiBsaXN0ZW5lcikKK3sKKyAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5z
ZXJ0KHdlYkZyYW1lLCBsaXN0ZW5lcik7CisKKyAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1l
LT5wYWdlKCk7CisgICAgZW1pdCBwYWdlLT5yZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKHdlYkZy
YW1lLCBRV2ViUGFnZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluKTsKK30KKworCit2b2lk
IEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0Rm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3Rl
bmVyKQoreworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUod2ViRnJhbWUp
OworCisgICAgUVdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgpOworICAgIGVtaXQgcGFn
ZS0+Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKHdlYkZyYW1lLCBRV2ViUGFnZTo6R2VvbG9j
YXRpb25QZXJtaXNzaW9uRG9tYWluKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdDo6c2V0UGVybWlzc2lvbihRV2ViRnJhbWUqIHdlYkZyYW1lLCBRV2ViUGFnZTo6UGVy
bWlzc2lvblBvbGljeSBwZXJtaXNzaW9uKQoreyAgCisgICAgaWYgKG1fcGVuZGluZ1Blcm1pc3Np
b25SZXF1ZXN0cy5jb250YWlucyh3ZWJGcmFtZSkpIHsKKyAgICAgICAgR2VvbG9jYXRpb24qIGxp
c3RlbmVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnZhbHVlKHdlYkZyYW1lKTsKKwor
ICAgICAgICBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWQpCisg
ICAgICAgICAgICBsaXN0ZW5lci0+c2V0SXNBbGxvd2VkKHRydWUpOworICAgICAgICBlbHNlIGlm
IChwZXJtaXNzaW9uID09IFFXZWJQYWdlOjpQZXJtaXNzaW9uRGVuaWVkKQorICAgICAgICAgICAg
bGlzdGVuZXItPnNldElzQWxsb3dlZChmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKHdl
YkZyYW1lKTsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdF9oCisjZGVmaW5lIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0X2gKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAicXdl
YnBhZ2UuaCIKKworI2luY2x1ZGUgPFFIYXNoPgorCitjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBR
V2ViUGFnZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdCB7CitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQoKTsKKyAgICB+R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKTsKKworICAgIHZvaWQg
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0
aW9uKik7CisgICAgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJh
bWUoUVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIHNldFBlcm1pc3Npb24oUVdl
YkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kpOworCisgICAgc3RhdGljIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KiBnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKTsK
K3ByaXZhdGU6CisgICAgUUhhc2g8UVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qPiBtX3BlbmRpbmdQ
ZXJtaXNzaW9uUmVxdWVzdHM7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L3F0L3Rl
c3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rl
c3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDY1MzcwKQorKysgV2ViS2l0
L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
Nyw5ICsyMTcsMTIgQEAgcHVibGljIHNsb3RzOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2
YVNjcmlwdCgpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgYWxsb3dH
ZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSkgCisgICAgdm9pZCByZXF1ZXN0UGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4pCiAgICAgewotICAgICAgICByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9uOworICAgICAgICBp
ZiAobV9hbGxvd0dlb2xvY2F0aW9uKQorICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJh
bWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkRlbmllZCk7CiAg
ICAgfQogCiBwdWJsaWM6CkBAIC0yNDcsNiArMjUwLDkgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6Omlu
ZmluaXRlTG9vcEpTKCkKIHZvaWQgdHN0X1FXZWJQYWdlOjpnZW9sb2NhdGlvblJlcXVlc3RKUygp
CiB7CiAgICAgSlNUZXN0UGFnZSogbmV3UGFnZSA9IG5ldyBKU1Rlc3RQYWdlKG1fdmlldyk7Cisg
ICAgY29ubmVjdChuZXdQYWdlLCBTSUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCAKKyAgICAgICAgICAgIG5ld1Bh
Z2UsIFNMT1QocmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4pKSk7CisKICAgICBuZXdQYWdlLT5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZmFs
c2UpOwogICAgIG1fdmlldy0+c2V0UGFnZShuZXdQYWdlKTsKICAgICBtX3ZpZXctPnNldEh0bWwo
UVN0cmluZygiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IiksIFFVcmwoKSk7CkluZGV4
OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEwLTA4LTE1ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhl
c2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gUVdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IHNo
b3VsZCBiZSBhc3luYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQxMzY0CisKKyAgICAgICAgSW1wbGVtZW50cyBuZXcgYXN5bmMgQVBJIGZvciBn
ZW9sb2NhdGlvbiBwZXJtaXNzaW9uIHNpbWlsYXIgdG8KKyAgICAgICAgTm90aWZpY2F0aW9uLiBX
ZWJQYWdlIG1haW50YWlucyBsaXN0IG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gcmVxdWVzdAor
ICAgICAgICBRdFdlYmtpdCBhbmQgc2V0J3Mgd2hlbiBMYXlvdXRUZXN0Q29udHJvbGxlciBnZXRz
IHRoZSBhY2Nlc3MgZnJvbSB0ZXN0IEpTCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6cmVzZXRTZXR0aW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJQYWdlOjpjYW5jZWxQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnBl
cm1pc3Npb25TZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5k
ZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9u
U2V0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0Lmg6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6CisKIDIwMTAtMDgt
MTQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
ICBBbm90aGVyIGZpeCB0byBzdXBwb3J0IHB5dGhvbiAyLjMuCkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkocmV2aXNpb24g
NjUzNzApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
UU9iamVjdCogcGFyZW50LCBEdW1wUmUKIAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHJlcXVl
c3RQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4pKSwgdGhpcywgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6
UGVybWlzc2lvbkRvbWFpbikpKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjaGVja1Blcm1p
c3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdl
YlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSksIHRoaXMsIFNMT1QoY2hlY2tQZXJtaXNzaW9uKFFX
ZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lv
blBvbGljeSYpKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2FuY2VsUmVxdWVzdHNGb3JQ
ZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4p
KSwgdGhpcywgU0xPVChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJh
bWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBl
cm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSos
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2ViUGFnZSgp
CkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBXZWJQYWdlOjpyZXNldFNldHRpbmdzKCkKIAogICAg
IFFXZWJTZXR0aW5nczo6c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgwKTsgLy8gcmVzZXQgdG8gZGVm
YXVsdAogICAgIHNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJsKFFVcmwoKSk7IC8vIHJl
c2V0IHRvIGRlZmF1bHQKKworICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIo
KTsKIH0KIAogUVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2lu
ZG93VHlwZSkKQEAgLTIyNCw2ICsyMjYsMTUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0UGVybWlz
c2lvbihRV2ViRnJhbQogICAgICAgICBpZiAoIW1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5pZ25vcmVSZXFlc3RGb3JQZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICBzZXRVc2VyUGVybWlz
c2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBpZiAobV9kcnQt
PmxheW91dFRlc3RDb250cm9sbGVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpCisg
ICAgICAgICAgICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmdlb2xvY2F0aW9u
UGVybWlzc2lvbigpKQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBk
b21haW4sIFBlcm1pc3Npb25HcmFudGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVkKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5h
cHBlbmQoZnJhbWUpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0yNDMsOCArMjU0LDM1IEBAIHZvaWQgV2ViUGFnZTo6Y2hlY2tQZXJtaXNz
aW9uKFFXZWJGcmFtZSoKICAgICB9CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNG
b3JQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKQordm9p
ZCBXZWJQYWdlOjpjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbikKIHsKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNh
c2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBtX3BlbmRpbmdHZW9sb2Nh
dGlvblJlcXVlc3RzLnJlbW92ZU9uZShmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpwZXJtaXNzaW9u
U2V0KFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbikKK3sKKyAgICBzd2l0Y2ggKGRv
bWFpbikgeworICAgIGNhc2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICB7
CisgICAgICAgIFFfQVNTRVJUKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pc0dlb2xv
Y2F0aW9uUGVybWlzc2lvblNldCgpKTsKKyAgICAgICAgZm9yZWFjaCAoUVdlYkZyYW1lKiBmcmFt
ZSwgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cykKKyAgICAgICAgICAgIGlmIChtX2RydC0+
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAg
ICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50
ZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9u
KGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25EZW5pZWQpOworCisgICAgICAgIG1fcGVuZGluZ0dl
b2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHN0YXRpYyBRU3RyaW5nIHVy
bFN1aXRhYmxlRm9yVGVzdFJlc3VsdChjb25zdCBRU3RyaW5nJiB1cmwpCkBAIC0zNjcsMTEgKzQw
NSw2IEBAIFFPYmplY3QqIFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihjb25zdCBRU3QKICNlbmRpZgog
fQogCi1ib29sIFdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqKQot
ewotICAgIHJldHVybiBtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25Q
ZXJtaXNzaW9uKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6c2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFS
ZWN0JiByZWN0KQogewogICAgIGlmIChXZWJWaWV3R3JhcGhpY3NCYXNlZCogdiA9IHFvYmplY3Rf
Y2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNlZCo+KHZpZXcoKSkpCkBAIC00MzEsNiArNDY0LDkgQEAg
RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICBjb25uZWN0KG1fY29udHJvbGxl
ciwgU0lHTkFMKHNob3dQYWdlKCkpLCB0aGlzLCBTTE9UKHNob3dQYWdlKCkpKTsKICAgICBjb25u
ZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGhpZGVQYWdlKCkpLCB0aGlzLCBTTE9UKGhpZGVQYWdl
KCkpKTsKIAorICAgIC8vIGFzeW5jIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gc2V0IGJ5IGNvbnRy
b2xsZXIKKyAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGdlb2xvY2F0aW9uUGVybWlz
c2lvblNldCgpKSwgdGhpcywgU0xPVChnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSkpOworCiAg
ICAgY29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChkb25lKCkpLCB0aGlzLCBTTE9UKGR1bXAo
KSkpOwogICAgIG1fZXZlbnRTZW5kZXIgPSBuZXcgRXZlbnRTZW5kZXIobV9wYWdlKTsKICAgICBt
X3RleHRJbnB1dENvbnRyb2xsZXIgPSBuZXcgVGV4dElucHV0Q29udHJvbGxlcihtX3BhZ2UpOwpA
QCAtNjQwLDEwICs2NzYsOCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZShjb25z
dCBRCiAgICAgICAgICAgICAgICAgICAgIGVtaXQgcXVpdCgpOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgZW1pdCByZWFkeSgpOwotCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0KIAogICAgICAgICBvcGVuKFFVcmw6
OmZyb21Mb2NhbEZpbGUoZmkuYWJzb2x1dGVGaWxlUGF0aCgpKSk7CkBAIC05OTksNiArMTAzMywx
MSBAQCBpbnQgRHVtcFJlbmRlclRyZWU6OndpbmRvd0NvdW50KCkgY29uc3QKICAgICByZXR1cm4g
d2luZG93cy5jb3VudCgpICsgMTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRp
b25QZXJtaXNzaW9uU2V0KCkgCit7CisgICAgbV9wYWdlLT5wZXJtaXNzaW9uU2V0KFFXZWJQYWdl
OjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVl
Ojpzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQpCiB7CiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoKGZv
Y3VzZWQpID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpGb2N1c091dCwgUXQ6OkFjdGl2ZVdp
bmRvd0ZvY3VzUmVhc29uKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHJldmlzaW9uIDY1MzcwKQorKysgV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjgsNiArMTI4LDcgQEAgcHJpdmF0ZSBRX1NMT1RTOgogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAg
ICB2b2lkIGhpZGVQYWdlKCk7CiAgICAgdm9pZCBkcnlSdW5QcmludChRV2ViRnJhbWUqKTsKKyAg
ICB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpOwogCiBwcml2YXRlOgogICAgIFFTdHJp
bmcgZHVtcEZyYW1lc0FzVGV4dChRV2ViRnJhbWUqIGZyYW1lKTsKQEAgLTE4OCwxMiArMTg5LDEz
IEBAIHB1YmxpYzoKIAogICAgIFFPYmplY3QqIGNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nJiwg
Y29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0cmluZ0xpc3QmKTsKIAor
ICAgIHZvaWQgcGVybWlzc2lvblNldChRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4p
OworCiBwdWJsaWMgc2xvdHM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJG
cmFtZSAqZnJhbWUpOwogICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFt
ZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKICAgICB2b2lkIGNoZWNrUGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOwotICAgIHZvaWQgY2FuY2Vs
UmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSog
ZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAKIHByb3RlY3RlZDoK
ICAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSk7CkBAIC0yMDQs
NiArMjA2LDcgQEAgcHJpdmF0ZSBzbG90czoKIAogcHJpdmF0ZToKICAgICBRV2ViSW5zcGVjdG9y
KiBtX3dlYkluc3BlY3RvcjsKKyAgICBRTGlzdDxRV2ViRnJhbWUqPiBtX3BlbmRpbmdHZW9sb2Nh
dGlvblJlcXVlc3RzOwogICAgIER1bXBSZW5kZXJUcmVlICptX2RydDsKIH07CiAKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250
cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2
ICs2OCw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKICAgICBtX3VzZXJT
dHlsZVNoZWV0RW5hYmxlZCA9IGZhbHNlOwogICAgIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93
ZWRPcmlnaW5zLmNsZWFyKCk7CiAgICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gZmFs
c2U7CisgICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZhbHNlOworICAgIG1fZ2Vv
bG9jYXRpb25QZXJtaXNzaW9uID0gZmFsc2U7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpkdW1wRnJhbWVMb2FkZXIoZmFsc2UpOwpAQCAtNzE1LDYgKzcxNywxMiBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogeworICAgIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgZW1pdCBnZW9sb2NhdGlvblBl
cm1pc3Npb25TZXQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCit7CiAgICAgIG1faXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQgPSB0cnVlOwogICAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGFs
bG93OwogfQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDYgKzg1LDcgQEAgc2lnbmFsczoKIAogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAg
ICB2b2lkIGhpZGVQYWdlKCk7CisgICAgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKTsK
IAogcHVibGljIHNsb3RzOgogICAgIHZvaWQgbWF5YmVEdW1wKGJvb2wgb2spOwpAQCAtMjM5LDYg
KzI0MCw5IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBwcm9jZXNzV29yaygpOwogCiBwcml2
YXRlOgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cp
OworCitwcml2YXRlOgogICAgIGJvb2wgbV9oYXNEdW1wZWQ7CiAgICAgYm9vbCBtX3RleHREdW1w
OwogICAgIGJvb2wgbV9kdW1wQmFja0ZvcndhcmRMaXN0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjUz
NzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0
NyBAQAorMjAxMC0wOC0xNCAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
ZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICog
ZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1tdWx0aXBsZS1wZXJtaXNzaW9ucy1hbGxvd2Vk
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVs
YXllZC1tdWx0aXBsZS1wZXJtaXNzaW9ucy1hbGxvd2VkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtbXVsdGlwbGUtcGVybWlzc2lvbnMtZGVuaWVk
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVs
YXllZC1tdWx0aXBsZS1wZXJtaXNzaW9ucy1kZW5pZWQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtbXVsdGlwbGUtcGVybWlz
c2lvbnMtYWxsb3dlZC5qczogQWRkZWQuCisgICAgICAgIChhbGxvd1Blcm1pc3Npb24pOgorICAg
ICAgICAoKToKKyAgICAgICAgKG1heWJlRmluaXNoVGVzdCk6CisgICAgICAgICogZmFzdC9kb20v
R2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2RlbGF5ZWQtbXVsdGlwbGUtcGVybWlzc2lvbnMtZGVu
aWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGRlbnlQZXJtaXNzaW9uKToKKyAgICAgICAgKG1heWJl
RmluaXNoVGVzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgICog
cGxhdGZvcm0vcXQvU2tpcHBlZDoKKworMjAxMC0wOC0xNSAgTWFoZXNoIEt1bGthcm5pICA8bWFo
ZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDI4MTEKKyAgICAgICAgR2VvbG9jYXRpb24gcHJlZW1wdGl2ZSBwZXJtaXNzaW9ucyBwb2xpY3kg
aXMgYnVnZ3kKKworICAgICAgICBBZGRzIGNhc2VzIHdoZXJlIHBlcm1pc3Npb24gaXMgbmlldGhl
ciBkZW5pZWQgb3IgZ3JhbnRlZCBpbW1lZGlhdGVseSBhbmQgbXVsdGlwbGUKKyAgICAgICAgcmVx
dWVzdHMgYXJlIHdhaXRpbmcuCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxh
eWVkLW11bHRpcGxlLXBlcm1pc3Npb25zLWFsbG93ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLW11bHRpcGxlLXBlcm1pc3Npb25z
LWFsbG93ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vZGVs
YXllZC1tdWx0aXBsZS1wZXJtaXNzaW9ucy1kZW5pZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLW11bHRpcGxlLXBlcm1pc3Npb25z
LWRlbmllZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3Jp
cHQtdGVzdHMvZGVsYXllZC1tdWx0aXBsZS1wZXJtaXNzaW9ucy1hbGxvd2VkLmpzOiBBZGRlZC4K
KyAgICAgICAgKGFsbG93UGVybWlzc2lvbik6CisgICAgICAgICgpOgorICAgICAgICAobWF5YmVG
aW5pc2hUZXN0KToKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9zY3JpcHQtdGVzdHMv
ZGVsYXllZC1tdWx0aXBsZS1wZXJtaXNzaW9ucy1kZW5pZWQuanM6IEFkZGVkLgorICAgICAgICAo
ZGVueVBlcm1pc3Npb24pOgorICAgICAgICAobWF5YmVGaW5pc2hUZXN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCiAy
MDEwLTA4LTE0ICBSb2IgQnVpcyAgPHJ3bGJ1aXNAZ21haWwuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERpcmsgU2NodWx6ZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64428</attachid>
            <date>2010-08-14 14:05:08 -0700</date>
            <delta_ts>2010-08-14 19:53:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364.patch</filename>
            <type>text/plain</type>
            <size>25970</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgtMTUgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxr
YXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJl
IGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDEzNjQKKworICAgICAgICBBZGRpbmcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQu
Y3BwL2ggdG8gYnVpbGQgdW5kZXIgZ2VvbG9jYXRpb24gZmxhZy4KKworICAgICAgICAqIFdlYkNv
cmUucHJvOgorCiAyMDEwLTA4LTE0ICBUYXN1a3UgU3V6dWtpICA8dGFzdWt1LnN1enVraUBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gNjUzNzApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUy
LDEwICsyNzUyLDEzIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9RVF9CRUFSRVI9MSkgewog
fQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfR0VPTE9DQVRJT049MSkgeworCiAgICAgSEVB
REVSUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmgKKyAg
ICAgICAgcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNlUXQuaCBcCisgICAgICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRR
dC5oCiAgICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2Vy
dmljZVF0LmNwcAorICAgICAgICBwbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAg
XAorICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQuY3BwCiAKICAgICBDT05GSUcgKz0gbW9iaWxpdHkKICAgICBNT0JJ
TElUWSArPSBsb2NhdGlvbgpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYktpdC9xdC9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wOC0xNSAgTWFoZXNo
IEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQYWdlOjphbGxvd0dlb2xv
Y2F0aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAgIFByb3ZpZGVzIGEgbmV3
IGFzeW5jIEFQSSBmb3IgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4gVXNpbmcKKyAgICAgICAgTm90
aWZpY2F0aW9uIEFQSSBhcHByb2FjaCBmcm9tIHF0d2Via2l0LiBHZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCAKKyAgICAgICAgbWFpbnRhaW5zIGxpc3Qgb2YgcGVuZGluZyByZXF1ZXN0cyBm
cm9tIFdlYkNvcmUgYW5kIGludGltYXRlcyB0aGVtCisgICAgICAgIHdoZW4gY2xpZW50IGVpdGhl
ciBhbGxvd2VkL2RlbmllcyB0aGUgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRzCisgICAgICAgIENo
cm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUg
CisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnNldFVz
ZXJQZXJtaXNzaW9uKToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVD
bGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0Lmg6
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2Fu
Y2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwOgorICAgICAgICAo
SlNUZXN0UGFnZTo6cmVxdWVzdFBlcm1pc3Npb24pOgorICAgICAgICAodHN0X1FXZWJQYWdlOjpn
ZW9sb2NhdGlvblJlcXVlc3RKUyk6CisKIDIwMTAtMDgtMTIgIEplcmVteSBPcmxvdyAgPGpvcmxv
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2ZXJ0IGZvciBub3cKSW5kZXg6IFdlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiQ2FjaGUuaCIKICNpbmNsdWRl
ICJydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
KyNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIk5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudFF0Lmgi
CiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCkBAIC0yMDgyLDMwICsyMDgzLDYgQEAgYm9vbCBR
V2ViUGFnZTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdAogI2VuZGlmCiB9CiAKLS8qIQotICAg
IFxmbiBib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCgpCi0gICAgXHNpbmNl
IDQuNwotCi0gICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBKYXZhU2NyaXB0
IHByb2dyYW0gcnVubmluZyBpbnNpZGUgXGEgZnJhbWUgdHJpZXMgdG8gYWNjZXNzIHVzZXIgbG9j
YXRpb24gdGhyb3VnaCBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uCi0KLSAgICBJZiB0aGUgdXNlciB3
YW50cyB0byBhbGxvdyBhY2Nlc3MgdG8gbG9jYXRpb24gdGhlbiBpdCBzaG91bGQgcmV0dXJuIHRy
dWU7IG90aGVyd2lzZSBmYWxzZS4KLQotICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4
ZWN1dGVzIHRoZSBxdWVyeSB1c2luZyBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24gd2l0aCBRTWVz
c2FnZUJveDo6WWVzIGFuZCBRTWVzc2FnZUJveDo6Tm8gYnV0dG9ucy4KLQotICAgIFx3YXJuaW5n
IEJlY2F1c2Ugb2YgYmluYXJ5IGNvbXBhdGliaWxpdHkgY29uc3RyYWludHMsIHRoaXMgZnVuY3Rp
b24gaXMgbm90IHZpcnR1YWwuIElmIHlvdSB3YW50IHRvCi0gICAgcHJvdmlkZSB5b3VyIG93biBp
bXBsZW1lbnRhdGlvbiBpbiBhIFFXZWJQYWdlIHN1YmNsYXNzLCByZWltcGxlbWVudCB0aGUgYWxs
b3dHZW9sb2NhdGlvblJlcXVlc3QoKQotICAgIHNsb3QgaW4geW91ciBzdWJjbGFzcyBpbnN0ZWFk
LiBRdFdlYktpdCB3aWxsIGR5bmFtaWNhbGx5IGRldGVjdCB0aGUgc2xvdCBhbmQgY2FsbCBpdC4K
LSovCi1ib29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZy
YW1lKQotewotI2lmZGVmIFFUX05PX01FU1NBR0VCT1gKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxz
ZQotICAgIFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldp
ZGdldCgpIDogMDsKLSAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6
aW5mb3JtYXRpb24ocGFyZW50LCB0cigiTG9jYXRpb24gUmVxdWVzdCBieS0gJTEiKS5hcmcoZnJh
bWUtPnVybCgpLmhvc3QoKSksIHRyKCJUaGUgcGFnZSB3YW50cyB0byBhY2Nlc3MgeW91ciBsb2Nh
dGlvbiBpbmZvcm1hdGlvbi4gRG8geW91IHdhbnQgdG8gYWxsb3cgdGhlIHJlcXVlc3Q/IiksIFFN
ZXNzYWdlQm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBRV2Vi
UGFnZTo6c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVybWlzc2lvbkRvbWFp
biBkb21haW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRjaCAoZG9tYWlu
KSB7CkBAIC0yMTE1LDYgKzIwOTIsMTIgQEAgdm9pZCBRV2ViUGFnZTo6c2V0VXNlclBlcm1pc3Np
b24oUVdlYkZyYQogICAgICAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5v
dGlmaWNhdGlvblByZXNlbnRlcigpLT5hbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKGZyYW1lKTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRv
bWFpbjoKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+c2V0UGVybWlzc2lv
bihmcmFtZSwgcG9saWN5KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgJKHJldmlzaW9uIDY1MzcwKQor
KysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnRRdDsKICAg
ICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGNsYXNzIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0OworICAgIGNsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwogICAgIGNsYXNzIEhpdFRlc3RSZXN1bHQ7
CiAgICAgY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7CkBAIC0yMDIsNyArMjAzLDggQEAgcHVi
bGljOgogICAgIH07CiAKICAgICBlbnVtIFBlcm1pc3Npb25Eb21haW4gewotICAgICAgICBOb3Rp
ZmljYXRpb25zUGVybWlzc2lvbkRvbWFpbgorICAgICAgICBOb3RpZmljYXRpb25zUGVybWlzc2lv
bkRvbWFpbiwKKyAgICAgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluCiAgICAgfTsKIAog
ICAgIGNsYXNzIFZpZXdwb3J0SGludHMgewpAQCAtMzUxLDcgKzM1Myw2IEBAIHB1YmxpYzoKIAog
cHVibGljIFFfU0xPVFM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7Ci0g
ICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKTsKIAogUV9T
SUdOQUxTOgogICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKQEAgLTQyNCw2ICs0MjUsNyBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsKICAgICBm
cmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ7CisgICAgZnJp
ZW5kIGNsYXNzIFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OwogICAgIGZy
aWVuZCBjbGFzcyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTsKICAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI7CiAgICAgZnJpZW5kIGNsYXNzIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OwpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuY3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclF0Lmgi
CiAjZW5kaWYKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKQEAgLTU0NCwxMCArNTQ1LDE0IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6
OnNldEN1cnNvcihjb25zdCBDdXIKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uKQogewotICAgIGJvb2wgYWxsb3cgPSBmYWxzZTsKICAgICBRV2ViRnJhbWUqIHdlYkZy
YW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsKLSAgICBRTWV0YU9iamVjdDo6aW52
b2tlTWV0aG9kKG1fd2ViUGFnZSwgImFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IiwgUXQ6OkRpcmVj
dENvbm5lY3Rpb24sIFFfUkVUVVJOX0FSRyhib29sLCBhbGxvdyksIFFfQVJHKFFXZWJGcmFtZSos
IHdlYkZyYW1lKSk7Ci0gICAgZ2VvbG9jYXRpb24tPnNldElzQWxsb3dlZChhbGxvdyk7CisgICAg
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dCgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xv
Y2F0aW9uKTsKK30KKwordm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0
aW9uKQoreworICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQo
ZnJhbWUpOworICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBl
cm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZy
YW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
aAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRS
ZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKICAgICAgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9u
Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2Vv
bG9jYXRpb24qKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJl
Y3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4g
Y3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OwpJbmRleDogV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisKKyNpbmNs
dWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisjaW5jbHVkZSAi
cXdlYnBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCogc19nZW9sb2NhdGlvblBlcm1pc3Npb249IDA7CisKK0dlb2xvY2F0aW9uUGVy
bWlzc2lvbkNsaWVudFF0KiBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50KCkKK3sKKyAgICBpZiAoc19nZW9sb2NhdGlvblBlcm1pc3Npb24p
CisgICAgICAgIHJldHVybiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsKKworICAgIHNfZ2VvbG9j
YXRpb25QZXJtaXNzaW9uID0gbmV3IEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KCk7Cisg
ICAgcmV0dXJuIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworfQorCitHZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKQoreworfQorCitH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6fkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0KCkKK3sKK30KKwordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZSogd2ViRnJhbWUsIEdlb2xv
Y2F0aW9uKiBsaXN0ZW5lcikKK3sKKyAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuaW5z
ZXJ0KHdlYkZyYW1lLCBsaXN0ZW5lcik7CisKKyAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1l
LT5wYWdlKCk7CisgICAgZW1pdCBwYWdlLT5yZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKHdlYkZy
YW1lLCBRV2ViUGFnZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluKTsKK30KKworCit2b2lk
IEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0Rm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJGcmFtZSwgR2VvbG9jYXRpb24qIGxpc3Rl
bmVyKQoreworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5yZW1vdmUod2ViRnJhbWUp
OworCisgICAgUVdlYlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgpOworICAgIGVtaXQgcGFn
ZS0+Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKHdlYkZyYW1lLCBRV2ViUGFnZTo6R2VvbG9j
YXRpb25QZXJtaXNzaW9uRG9tYWluKTsKK30KKwordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdDo6c2V0UGVybWlzc2lvbihRV2ViRnJhbWUqIHdlYkZyYW1lLCBRV2ViUGFnZTo6UGVy
bWlzc2lvblBvbGljeSBwZXJtaXNzaW9uKQoreyAgCisgICAgaWYgKG1fcGVuZGluZ1Blcm1pc3Np
b25SZXF1ZXN0cy5jb250YWlucyh3ZWJGcmFtZSkpIHsKKyAgICAgICAgR2VvbG9jYXRpb24qIGxp
c3RlbmVyID0gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnZhbHVlKHdlYkZyYW1lKTsKKwor
ICAgICAgICBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lvbkdyYW50ZWQpCisg
ICAgICAgICAgICBsaXN0ZW5lci0+c2V0SXNBbGxvd2VkKHRydWUpOworICAgICAgICBlbHNlIGlm
IChwZXJtaXNzaW9uID09IFFXZWJQYWdlOjpQZXJtaXNzaW9uRGVuaWVkKQorICAgICAgICAgICAg
bGlzdGVuZXItPnNldElzQWxsb3dlZChmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMucmVtb3ZlKHdl
YkZyYW1lKTsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9H
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdF9oCisjZGVmaW5lIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0X2gKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAicXdl
YnBhZ2UuaCIKKworI2luY2x1ZGUgPFFIYXNoPgorCitjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBR
V2ViUGFnZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdCB7CitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQoKTsKKyAgICB+R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKTsKKworICAgIHZvaWQg
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0
aW9uKik7CisgICAgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJh
bWUoUVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIHNldFBlcm1pc3Npb24oUVdl
YkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kpOworCisgICAgc3RhdGljIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KiBnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKTsK
K3ByaXZhdGU6CisgICAgUUhhc2g8UVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qPiBtX3BlbmRpbmdQ
ZXJtaXNzaW9uUmVxdWVzdHM7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L3F0L3Rl
c3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rl
c3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDY1MzcwKQorKysgV2ViS2l0
L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
Nyw5ICsyMTcsMTIgQEAgcHVibGljIHNsb3RzOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2
YVNjcmlwdCgpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgYWxsb3dH
ZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSkgCisgICAgdm9pZCByZXF1ZXN0UGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4pCiAgICAgewotICAgICAgICByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9uOworICAgICAgICBp
ZiAobV9hbGxvd0dlb2xvY2F0aW9uKQorICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJh
bWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAgICAgICBlbHNlIAorICAgICAgICAg
ICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkRlbmllZCk7CiAg
ICAgfQogCiBwdWJsaWM6CkBAIC0yNDcsNiArMjUwLDkgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6Omlu
ZmluaXRlTG9vcEpTKCkKIHZvaWQgdHN0X1FXZWJQYWdlOjpnZW9sb2NhdGlvblJlcXVlc3RKUygp
CiB7CiAgICAgSlNUZXN0UGFnZSogbmV3UGFnZSA9IG5ldyBKU1Rlc3RQYWdlKG1fdmlldyk7Cisg
ICAgY29ubmVjdChuZXdQYWdlLCBTSUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCAKKyAgICAgICAgICAgIG5ld1Bh
Z2UsIFNMT1QocmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4pKSk7CisKICAgICBuZXdQYWdlLT5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZmFs
c2UpOwogICAgIG1fdmlldy0+c2V0UGFnZShuZXdQYWdlKTsKICAgICBtX3ZpZXctPnNldEh0bWwo
UVN0cmluZygiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IiksIFFVcmwoKSk7CkluZGV4
OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEwLTA4LTE1ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhl
c2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtRdF0gUVdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IHNo
b3VsZCBiZSBhc3luYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQxMzY0CisKKyAgICAgICAgSW1wbGVtZW50cyBuZXcgYXN5bmMgQVBJIGZvciBn
ZW9sb2NhdGlvbiBwZXJtaXNzaW9uIHNpbWlsYXIgdG8KKyAgICAgICAgTm90aWZpY2F0aW9uLiBX
ZWJQYWdlIG1haW50YWlucyBsaXN0IG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gcmVxdWVzdAor
ICAgICAgICBRdFdlYmtpdCBhbmQgc2V0J3Mgd2hlbiBMYXlvdXRUZXN0Q29udHJvbGxlciBnZXRz
IHRoZSBhY2Nlc3MgZnJvbSB0ZXN0IEpTCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6cmVzZXRTZXR0aW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJQYWdlOjpjYW5jZWxQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnBl
cm1pc3Npb25TZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5k
ZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9u
U2V0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0Lmg6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6CisKIDIwMTAtMDgt
MTQgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
ICBBbm90aGVyIGZpeCB0byBzdXBwb3J0IHB5dGhvbiAyLjMuCkluZGV4OiBXZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkocmV2aXNpb24g
NjUzNzApCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIFdlYlBhZ2U6OldlYlBhZ2Uo
UU9iamVjdCogcGFyZW50LCBEdW1wUmUKIAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHJlcXVl
c3RQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4pKSwgdGhpcywgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6
UGVybWlzc2lvbkRvbWFpbikpKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjaGVja1Blcm1p
c3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdl
YlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSksIHRoaXMsIFNMT1QoY2hlY2tQZXJtaXNzaW9uKFFX
ZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lv
blBvbGljeSYpKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2FuY2VsUmVxdWVzdHNGb3JQ
ZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4p
KSwgdGhpcywgU0xPVChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJh
bWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBl
cm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSos
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2ViUGFnZSgp
CkBAIC0yMDIsNiArMjAyLDggQEAgdm9pZCBXZWJQYWdlOjpyZXNldFNldHRpbmdzKCkKIAogICAg
IFFXZWJTZXR0aW5nczo6c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgwKTsgLy8gcmVzZXQgdG8gZGVm
YXVsdAogICAgIHNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJsKFFVcmwoKSk7IC8vIHJl
c2V0IHRvIGRlZmF1bHQKKworICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIo
KTsKIH0KIAogUVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2lu
ZG93VHlwZSkKQEAgLTIyNCw2ICsyMjYsMTUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0UGVybWlz
c2lvbihRV2ViRnJhbQogICAgICAgICBpZiAoIW1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5pZ25vcmVSZXFlc3RGb3JQZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICBzZXRVc2VyUGVybWlz
c2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBpZiAobV9kcnQt
PmxheW91dFRlc3RDb250cm9sbGVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpCisg
ICAgICAgICAgICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmdlb2xvY2F0aW9u
UGVybWlzc2lvbigpKQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBk
b21haW4sIFBlcm1pc3Npb25HcmFudGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVkKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5h
cHBlbmQoZnJhbWUpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0yNDMsOCArMjU0LDM1IEBAIHZvaWQgV2ViUGFnZTo6Y2hlY2tQZXJtaXNz
aW9uKFFXZWJGcmFtZSoKICAgICB9CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNG
b3JQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKQordm9p
ZCBXZWJQYWdlOjpjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbikKIHsKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNh
c2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBtX3BlbmRpbmdHZW9sb2Nh
dGlvblJlcXVlc3RzLnJlbW92ZU9uZShmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpwZXJtaXNzaW9u
U2V0KFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbikKK3sKKyAgICBzd2l0Y2ggKGRv
bWFpbikgeworICAgIGNhc2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICB7
CisgICAgICAgIFFfQVNTRVJUKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pc0dlb2xv
Y2F0aW9uUGVybWlzc2lvblNldCgpKTsKKyAgICAgICAgZm9yZWFjaCAoUVdlYkZyYW1lKiBmcmFt
ZSwgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cykKKyAgICAgICAgICAgIGlmIChtX2RydC0+
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAg
ICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50
ZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9u
KGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25EZW5pZWQpOworCisgICAgICAgIG1fcGVuZGluZ0dl
b2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHN0YXRpYyBRU3RyaW5nIHVy
bFN1aXRhYmxlRm9yVGVzdFJlc3VsdChjb25zdCBRU3RyaW5nJiB1cmwpCkBAIC0zNjcsMTEgKzQw
NSw2IEBAIFFPYmplY3QqIFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihjb25zdCBRU3QKICNlbmRpZgog
fQogCi1ib29sIFdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqKQot
ewotICAgIHJldHVybiBtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25Q
ZXJtaXNzaW9uKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6c2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFS
ZWN0JiByZWN0KQogewogICAgIGlmIChXZWJWaWV3R3JhcGhpY3NCYXNlZCogdiA9IHFvYmplY3Rf
Y2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNlZCo+KHZpZXcoKSkpCkBAIC00MzEsNiArNDY0LDkgQEAg
RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICBjb25uZWN0KG1fY29udHJvbGxl
ciwgU0lHTkFMKHNob3dQYWdlKCkpLCB0aGlzLCBTTE9UKHNob3dQYWdlKCkpKTsKICAgICBjb25u
ZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGhpZGVQYWdlKCkpLCB0aGlzLCBTTE9UKGhpZGVQYWdl
KCkpKTsKIAorICAgIC8vIGFzeW5jIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gc2V0IGJ5IGNvbnRy
b2xsZXIKKyAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGdlb2xvY2F0aW9uUGVybWlz
c2lvblNldCgpKSwgdGhpcywgU0xPVChnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSkpOworCiAg
ICAgY29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChkb25lKCkpLCB0aGlzLCBTTE9UKGR1bXAo
KSkpOwogICAgIG1fZXZlbnRTZW5kZXIgPSBuZXcgRXZlbnRTZW5kZXIobV9wYWdlKTsKICAgICBt
X3RleHRJbnB1dENvbnRyb2xsZXIgPSBuZXcgVGV4dElucHV0Q29udHJvbGxlcihtX3BhZ2UpOwpA
QCAtNjQwLDEwICs2NzYsOCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZShjb25z
dCBRCiAgICAgICAgICAgICAgICAgICAgIGVtaXQgcXVpdCgpOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgZW1pdCByZWFkeSgpOwotCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0KIAogICAgICAgICBvcGVuKFFVcmw6
OmZyb21Mb2NhbEZpbGUoZmkuYWJzb2x1dGVGaWxlUGF0aCgpKSk7CkBAIC05OTksNiArMTAzMywx
MSBAQCBpbnQgRHVtcFJlbmRlclRyZWU6OndpbmRvd0NvdW50KCkgY29uc3QKICAgICByZXR1cm4g
d2luZG93cy5jb3VudCgpICsgMTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRp
b25QZXJtaXNzaW9uU2V0KCkgCit7CisgICAgbV9wYWdlLT5wZXJtaXNzaW9uU2V0KFFXZWJQYWdl
OjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVl
Ojpzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQpCiB7CiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoKGZv
Y3VzZWQpID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpGb2N1c091dCwgUXQ6OkFjdGl2ZVdp
bmRvd0ZvY3VzUmVhc29uKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHJldmlzaW9uIDY1MzcwKQorKysgV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjgsNiArMTI4LDcgQEAgcHJpdmF0ZSBRX1NMT1RTOgogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAg
ICB2b2lkIGhpZGVQYWdlKCk7CiAgICAgdm9pZCBkcnlSdW5QcmludChRV2ViRnJhbWUqKTsKKyAg
ICB2b2lkIGdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpOwogCiBwcml2YXRlOgogICAgIFFTdHJp
bmcgZHVtcEZyYW1lc0FzVGV4dChRV2ViRnJhbWUqIGZyYW1lKTsKQEAgLTE4OCwxMiArMTg5LDEz
IEBAIHB1YmxpYzoKIAogICAgIFFPYmplY3QqIGNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nJiwg
Y29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0cmluZ0xpc3QmKTsKIAor
ICAgIHZvaWQgcGVybWlzc2lvblNldChRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4p
OworCiBwdWJsaWMgc2xvdHM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJG
cmFtZSAqZnJhbWUpOwogICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFt
ZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKICAgICB2b2lkIGNoZWNrUGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOwotICAgIHZvaWQgY2FuY2Vs
UmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSog
ZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAKIHByb3RlY3RlZDoK
ICAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSk7CkBAIC0yMDQs
NiArMjA2LDcgQEAgcHJpdmF0ZSBzbG90czoKIAogcHJpdmF0ZToKICAgICBRV2ViSW5zcGVjdG9y
KiBtX3dlYkluc3BlY3RvcjsKKyAgICBRTGlzdDxRV2ViRnJhbWUqPiBtX3BlbmRpbmdHZW9sb2Nh
dGlvblJlcXVlc3RzOwogICAgIER1bXBSZW5kZXJUcmVlICptX2RydDsKIH07CiAKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250
cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2
ICs2OCw4IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKICAgICBtX3VzZXJT
dHlsZVNoZWV0RW5hYmxlZCA9IGZhbHNlOwogICAgIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93
ZWRPcmlnaW5zLmNsZWFyKCk7CiAgICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gZmFs
c2U7CisgICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZhbHNlOworICAgIG1fZ2Vv
bG9jYXRpb25QZXJtaXNzaW9uID0gZmFsc2U7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRR
dDo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dFF0OjpkdW1wRnJhbWVMb2FkZXIoZmFsc2UpOwpAQCAtNzE1LDYgKzcxNywxMiBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogeworICAgIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgZW1pdCBnZW9sb2NhdGlvblBl
cm1pc3Npb25TZXQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCit7CiAgICAgIG1faXNHZW9sb2NhdGlv
blBlcm1pc3Npb25TZXQgPSB0cnVlOwogICAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGFs
bG93OwogfQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDYgKzg1LDcgQEAgc2lnbmFsczoKIAogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAg
ICB2b2lkIGhpZGVQYWdlKCk7CisgICAgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKTsK
IAogcHVibGljIHNsb3RzOgogICAgIHZvaWQgbWF5YmVEdW1wKGJvb2wgb2spOwpAQCAtMjM5LDYg
KzI0MCw5IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBwcm9jZXNzV29yaygpOwogCiBwcml2
YXRlOgorICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cp
OworCitwcml2YXRlOgogICAgIGJvb2wgbV9oYXNEdW1wZWQ7CiAgICAgYm9vbCBtX3RleHREdW1w
OwogICAgIGJvb2wgbV9kdW1wQmFja0ZvcndhcmRMaXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64442</attachid>
            <date>2010-08-15 04:33:36 -0700</date>
            <delta_ts>2010-08-18 04:10:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364.patch</filename>
            <type>text/plain</type>
            <size>26477</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTM3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgtMTUgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxr
YXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJl
IGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDEzNjQKKworICAgICAgICBBZGRpbmcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQu
Y3BwL2ggdG8gYnVpbGQgdW5kZXIgZ2VvbG9jYXRpb24gZmxhZy4KKworICAgICAgICAqIFdlYkNv
cmUucHJvOgorCiAyMDEwLTA4LTE0ICBUYXN1a3UgU3V6dWtpICA8dGFzdWt1LnN1enVraUBub2tp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gNjUzNzApCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY2
LDYgKzIxNjYsNyBAQCBIRUFERVJTICs9IFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVwLmggXAogICAgICQkUFdELy4uL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQkUFdELy4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIFwKKyAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VD
bGllbnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0
Zm9ybVBsdWdpbi5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9w
dXBNZW51UXQuaCBcCkBAIC0yMjU2LDYgKzIyNTcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICAuLi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgXAogICAgIC4u
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgXAogICAgIC4u
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5j
cHAgXAorICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdC5oIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVu
dFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNw
cCBcCiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3Bw
IFwKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0No
YW5nZUxvZwkocmV2aXNpb24gNjUzNzEpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMTUgIE1haGVzaCBLdWxrYXJuaSAgPG1h
aGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qg
c2hvdWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBQcm92aWRlcyBhIG5ldyBhc3luYyBBUEkgZm9y
IGdlb2xvY2F0aW9uIHBlcm1pc3Npb24uIFVzaW5nCisgICAgICAgIE5vdGlmaWNhdGlvbiBBUEkg
YXBwcm9hY2ggZnJvbSBxdHdlYmtpdC4gR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQgCisg
ICAgICAgIG1haW50YWlucyBsaXN0IG9mIHBlbmRpbmcgcmVxdWVzdHMgZnJvbSBXZWJDb3JlIGFu
ZCBpbnRpbWF0ZXMgdGhlbQorICAgICAgICB3aGVuIGNsaWVudCBlaXRoZXIgYWxsb3dlZC9kZW5p
ZXMgdGhlIHJlcXVlc3QuIEFsc28gaW1wbGVtZW50cworICAgICAgICBDaHJvbWVDbGllbnRRdDo6
Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lIAorCisgICAgICAgICog
QXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRVc2VyUGVybWlzc2lvbik6
CisgICAgICAgICogQXBpL3F3ZWJwYWdlLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnJlcXVl
c3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6fkdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdDo6c2V0UGVybWlzc2lvbik6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaDogQWRkZWQuCisgICAgICAgICog
dGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKEpTVGVzdFBhZ2U6OnJl
cXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKHRzdF9RV2ViUGFnZTo6Z2VvbG9jYXRpb25SZXF1
ZXN0SlMpOgorCiAyMDEwLTA4LTEyICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmVydCBmb3Igbm93CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24g
NjUzNzApCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEsNiArODEsNyBAQAogI2luY2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAicnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgpAQCAtMjA4MiwzMCArMjA4Myw2IEBAIGJvb2wgUVdlYlBhZ2U6OnNob3Vs
ZEludGVycnVwdEphdmFTY3JpcHQKICNlbmRpZgogfQogCi0vKiEKLSAgICBcZm4gYm9vbCBRV2Vi
UGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3QoKQotICAgIFxzaW5jZSA0LjcKLQotICAgIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGEgSmF2YVNjcmlwdCBwcm9ncmFtIHJ1bm5p
bmcgaW5zaWRlIFxhIGZyYW1lIHRyaWVzIHRvIGFjY2VzcyB1c2VyIGxvY2F0aW9uIHRocm91Z2gg
bmF2aWdhdG9yLmdlb2xvY2F0aW9uLgotCi0gICAgSWYgdGhlIHVzZXIgd2FudHMgdG8gYWxsb3cg
YWNjZXNzIHRvIGxvY2F0aW9uIHRoZW4gaXQgc2hvdWxkIHJldHVybiB0cnVlOyBvdGhlcndpc2Ug
ZmFsc2UuCi0KLSAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBleGVjdXRlcyB0aGUgcXVl
cnkgdXNpbmcgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uIHdpdGggUU1lc3NhZ2VCb3g6OlllcyBh
bmQgUU1lc3NhZ2VCb3g6Ok5vIGJ1dHRvbnMuCi0KLSAgICBcd2FybmluZyBCZWNhdXNlIG9mIGJp
bmFyeSBjb21wYXRpYmlsaXR5IGNvbnN0cmFpbnRzLCB0aGlzIGZ1bmN0aW9uIGlzIG5vdCB2aXJ0
dWFsLiBJZiB5b3Ugd2FudCB0bwotICAgIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24g
aW4gYSBRV2ViUGFnZSBzdWJjbGFzcywgcmVpbXBsZW1lbnQgdGhlIGFsbG93R2VvbG9jYXRpb25S
ZXF1ZXN0KCkKLSAgICBzbG90IGluIHlvdXIgc3ViY2xhc3MgaW5zdGVhZC4gUXRXZWJLaXQgd2ls
bCBkeW5hbWljYWxseSBkZXRlY3QgdGhlIHNsb3QgYW5kIGNhbGwgaXQuCi0qLwotYm9vbCBRV2Vi
UGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSkKLXsKLSNpZmRl
ZiBRVF9OT19NRVNTQUdFQk9YCi0gICAgcmV0dXJuIGZhbHNlOwotI2Vsc2UKLSAgICBRV2lkZ2V0
KiBwYXJlbnQgPSAoZC0+Y2xpZW50KSA/IGQtPmNsaWVudC0+b3duZXJXaWRnZXQoKSA6IDA7Ci0g
ICAgcmV0dXJuIFFNZXNzYWdlQm94OjpZZXMgPT0gUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHBh
cmVudCwgdHIoIkxvY2F0aW9uIFJlcXVlc3QgYnktICUxIikuYXJnKGZyYW1lLT51cmwoKS5ob3N0
KCkpLCB0cigiVGhlIHBhZ2Ugd2FudHMgdG8gYWNjZXNzIHlvdXIgbG9jYXRpb24gaW5mb3JtYXRp
b24uIERvIHlvdSB3YW50IHRvIGFsbG93IHRoZSByZXF1ZXN0PyIpLCBRTWVzc2FnZUJveDo6WWVz
LCBRTWVzc2FnZUJveDo6Tm8pOwotI2VuZGlmCi19Ci0KIHZvaWQgUVdlYlBhZ2U6OnNldFVzZXJQ
ZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBQZXJt
aXNzaW9uUG9saWN5IHBvbGljeSkKIHsKICAgICBzd2l0Y2ggKGRvbWFpbikgewpAQCAtMjExNSw2
ICsyMDkyLDEyIEBAIHZvaWQgUVdlYlBhZ2U6OnNldFVzZXJQZXJtaXNzaW9uKFFXZWJGcmEKICAg
ICAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVz
ZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFtZShmcmFtZSk7CiAjZW5kaWYKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW46CisjaWYgRU5B
QkxFKEdFT0xPQ0FUSU9OKQorICAgICAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6
Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnNldFBlcm1pc3Npb24oZnJhbWUsIHBvbGlj
eSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnRRdDsKICAgICBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGll
bnRRdDsKKyAgICBjbGFzcyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDsKICAgICBjbGFz
cyBSZXNvdXJjZUhhbmRsZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyOwpAQCAtMjAyLDcgKzIwMyw4IEBAIHB1YmxpYzoKICAgICB9Owog
CiAgICAgZW51bSBQZXJtaXNzaW9uRG9tYWluIHsKLSAgICAgICAgTm90aWZpY2F0aW9uc1Blcm1p
c3Npb25Eb21haW4KKyAgICAgICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4sCisgICAg
ICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbgogICAgIH07CiAKICAgICBjbGFzcyBWaWV3
cG9ydEhpbnRzIHsKQEAgLTM1MSw3ICszNTMsNiBAQCBwdWJsaWM6CiAKIHB1YmxpYyBRX1NMT1RT
OgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwotICAgIGJvb2wgYWxsb3dH
ZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSk7CiAKIFFfU0lHTkFMUzoKICAgICB2
b2lkIGxvYWRTdGFydGVkKCk7CkBAIC00MjQsNiArNDI1LDcgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNv
cmU6Ok5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBXZWJD
b3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OlFOZXR3b3Jr
UmVwbHlIYW5kbGVyOwogICAgIGZyaWVuZCBjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDsK
SW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkocmV2
aXNpb24gNjUzNzApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJRdC5oIgogI2VuZGlmCisjaW5j
bHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CkBAIC01NDQsMTAgKzU0NSwxOCBAQCB2b2lkIENocm9tZUNsaWVudFF0OjpzZXRDdXJzb3IoY29u
c3QgQ3VyCiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Np
b25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKIHsKLSAg
ICBib29sIGFsbG93ID0gZmFsc2U7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogICAgIFFXZWJG
cmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOwotICAgIFFNZXRh
T2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLCAiYWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qi
LCBRdDo6RGlyZWN0Q29ubmVjdGlvbiwgUV9SRVRVUk5fQVJHKGJvb2wsIGFsbG93KSwgUV9BUkco
UVdlYkZyYW1lKiwgd2ViRnJhbWUpKTsKLSAgICBnZW9sb2NhdGlvbi0+c2V0SXNBbGxvd2VkKGFs
bG93KTsKKyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50KCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh3ZWJG
cmFtZSwgZ2VvbG9jYXRpb24pOworI2VuZGlmCit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50UXQ6OmNh
bmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSogZnJhbWUsIEdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7CisgICAg
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUod2ViRnJhbWUs
IGdlb2xvY2F0aW9uKTsKKyNlbmRpZgogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpJbmRleDogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJl
dmlzaW9uIDY1MzcwKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYs
IGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGNh
bmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0
aW9uKik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNlbGVjdEl0ZW1Xcml0aW5nRGlyZWN0aW9u
SXNOYXR1cmFsKCk7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQb3B1cE1lbnU+IGNyZWF0
ZVBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKSBjb25zdDsKSW5kZXg6IFdlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0LmgiCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorCisjaW5jbHVkZSAi
cXdlYmZyYW1lLmgiCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgInF3ZWJw
YWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
KworR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9u
PSAwOworCitHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogR2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpCit7CisgICAgaWYgKHNf
Z2VvbG9jYXRpb25QZXJtaXNzaW9uKQorICAgICAgICByZXR1cm4gc19nZW9sb2NhdGlvblBlcm1p
c3Npb247CisKKyAgICBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IG5ldyBHZW9sb2NhdGlvblBl
cm1pc3Npb25DbGllbnRRdCgpOworICAgIHJldHVybiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsK
K30KKworR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Okdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0KCkKK3sKK30KKworR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6On5HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpCit7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShRV2Vi
RnJhbWUqIHdlYkZyYW1lLCBHZW9sb2NhdGlvbiogbGlzdGVuZXIpCit7CisgICAgbV9wZW5kaW5n
UGVybWlzc2lvblJlcXVlc3RzLmluc2VydCh3ZWJGcmFtZSwgbGlzdGVuZXIpOworCisgICAgUVdl
YlBhZ2UqIHBhZ2UgPSB3ZWJGcmFtZS0+cGFnZSgpOworICAgIGVtaXQgcGFnZS0+cmVxdWVzdFBl
cm1pc3Npb25Gcm9tVXNlcih3ZWJGcmFtZSwgUVdlYlBhZ2U6Okdlb2xvY2F0aW9uUGVybWlzc2lv
bkRvbWFpbik7Cit9CisKKwordm9pZCBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Y2Fu
Y2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZSogd2ViRnJh
bWUsIEdlb2xvY2F0aW9uKiBsaXN0ZW5lcikKK3sKKyAgICBtX3BlbmRpbmdQZXJtaXNzaW9uUmVx
dWVzdHMucmVtb3ZlKHdlYkZyYW1lKTsKKworICAgIFFXZWJQYWdlKiBwYWdlID0gd2ViRnJhbWUt
PnBhZ2UoKTsKKyAgICBlbWl0IHBhZ2UtPmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbih3ZWJG
cmFtZSwgUVdlYlBhZ2U6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbik7Cit9CisKK3ZvaWQg
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24oUVdlYkZyYW1lKiB3
ZWJGcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kgcGVybWlzc2lvbikKK3sgIAorICAg
IGlmIChtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuY29udGFpbnMod2ViRnJhbWUpKSB7Cisg
ICAgICAgIEdlb2xvY2F0aW9uKiBsaXN0ZW5lciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0
cy52YWx1ZSh3ZWJGcmFtZSk7CisKKyAgICAgICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6
OlBlcm1pc3Npb25HcmFudGVkKQorICAgICAgICAgICAgbGlzdGVuZXItPnNldElzQWxsb3dlZCh0
cnVlKTsKKyAgICAgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlzc2lv
bkRlbmllZCkKKyAgICAgICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9wZW5kaW5nUGVybWlz
c2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJGcmFtZSk7CisgICAgfQorfQorI2VuZGlmIC8vIEVOQUJM
RShHRU9MT0NBVElPTikKK30KSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdF9oCisjZGVmaW5lIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0X2gKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAicXdlYnBhZ2Uu
aCIKKworI2luY2x1ZGUgPFFIYXNoPgorCitjbGFzcyBRV2ViRnJhbWU7CitjbGFzcyBRV2ViUGFn
ZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdCB7CitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKTsK
KyAgICB+R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQoKTsKKworICAgIHZvaWQgcmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0aW9uKik7
CisgICAgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoUVdl
YkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIHNldFBlcm1pc3Npb24oUVdlYkZyYW1l
KiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kpOworCisgICAgc3RhdGljIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0KiBnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKTsKK3ByaXZh
dGU6CisgICAgUUhhc2g8UVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qPiBtX3BlbmRpbmdQZXJtaXNz
aW9uUmVxdWVzdHM7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL3F3
ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL3F3
ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDY1MzcwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw5ICsy
MTcsMTIgQEAgcHVibGljIHNsb3RzOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dCgpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGJvb2wgYWxsb3dHZW9sb2Nh
dGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSkgCisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lv
bihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pCiAg
ICAgewotICAgICAgICByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9uOworICAgICAgICBpZiAobV9h
bGxvd0dlb2xvY2F0aW9uKQorICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRv
bWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2V0
VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkRlbmllZCk7CiAgICAgfQog
CiBwdWJsaWM6CkBAIC0yNDcsNiArMjUwLDkgQEAgdm9pZCB0c3RfUVdlYlBhZ2U6OmluZmluaXRl
TG9vcEpTKCkKIHZvaWQgdHN0X1FXZWJQYWdlOjpnZW9sb2NhdGlvblJlcXVlc3RKUygpCiB7CiAg
ICAgSlNUZXN0UGFnZSogbmV3UGFnZSA9IG5ldyBKU1Rlc3RQYWdlKG1fdmlldyk7CisgICAgY29u
bmVjdChuZXdQYWdlLCBTSUdOQUwocmVxdWVzdFBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUq
LCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCAKKyAgICAgICAgICAgIG5ld1BhZ2UsIFNM
T1QocmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4pKSk7CisKICAgICBuZXdQYWdlLT5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZmFsc2UpOwog
ICAgIG1fdmlldy0+c2V0UGFnZShuZXdQYWdlKTsKICAgICBtX3ZpZXctPnNldEh0bWwoUVN0cmlu
ZygiPGh0bWw+PGJvZHk+dGVzdDwvYm9keT48L2h0bWw+IiksIFFVcmwoKSk7CkluZGV4OiBXZWJL
aXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NTM3MSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMwIEBACisyMDEwLTA4LTE1ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vs
a2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtRdF0gUVdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IHNob3VsZCBi
ZSBhc3luYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQxMzY0CisKKyAgICAgICAgSW1wbGVtZW50cyBuZXcgYXN5bmMgQVBJIGZvciBnZW9sb2Nh
dGlvbiBwZXJtaXNzaW9uIHNpbWlsYXIgdG8KKyAgICAgICAgTm90aWZpY2F0aW9uLiBXZWJQYWdl
IG1haW50YWlucyBsaXN0IG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gcmVxdWVzdAorICAgICAg
ICBRdFdlYmtpdCBhbmQgc2V0J3Mgd2hlbiBMYXlvdXRUZXN0Q29udHJvbGxlciBnZXRzIHRoZSBh
Y2Nlc3MgZnJvbSB0ZXN0IEpTCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6cmVzZXRTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdl
OjpjYW5jZWxQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnBlcm1pc3Np
b25TZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0Lmg6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6CisKIDIwMTAtMDgtMTQgIEVy
aWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBBbm90
aGVyIGZpeCB0byBzdXBwb3J0IHB5dGhvbiAyLjMuCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkocmV2aXNpb24gNjUzNzAp
CisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUU9iamVj
dCogcGFyZW50LCBEdW1wUmUKIAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHJlcXVlc3RQZXJt
aXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwg
dGhpcywgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlz
c2lvbkRvbWFpbikpKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjaGVja1Blcm1pc3Npb25G
cm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Qb2xpY3kmKSksIHRoaXMsIFNMT1QoY2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFt
ZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGlj
eSYpKSk7Ci0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNz
aW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhp
cywgU0xPVChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBR
V2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChj
YW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Np
b25Eb21haW4pKSwgdGhpcywgU0xPVChjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQ
YWdlOjpQZXJtaXNzaW9uRG9tYWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2ViUGFnZSgpCkBAIC0y
MDIsNiArMjAyLDggQEAgdm9pZCBXZWJQYWdlOjpyZXNldFNldHRpbmdzKCkKIAogICAgIFFXZWJT
ZXR0aW5nczo6c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgwKTsgLy8gcmVzZXQgdG8gZGVmYXVsdAog
ICAgIHNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJsKFFVcmwoKSk7IC8vIHJlc2V0IHRv
IGRlZmF1bHQKKworICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xlYXIoKTsKIH0K
IAogUVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2ViV2luZG93VHlw
ZSkKQEAgLTIyNCw2ICsyMjYsMTUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbihR
V2ViRnJhbQogICAgICAgICBpZiAoIW1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pZ25v
cmVSZXFlc3RGb3JQZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihm
cmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CiAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBpZiAobV9kcnQtPmxheW91
dFRlc3RDb250cm9sbGVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpCisgICAgICAg
ICAgICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmdlb2xvY2F0aW9uUGVybWlz
c2lvbigpKQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4s
IFBlcm1pc3Npb25HcmFudGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBz
ZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVkKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5hcHBlbmQo
ZnJhbWUpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0yNDMsOCArMjU0LDM1IEBAIHZvaWQgV2ViUGFnZTo6Y2hlY2tQZXJtaXNzaW9uKFFX
ZWJGcmFtZSoKICAgICB9CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJt
aXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKQordm9pZCBXZWJQ
YWdlOjpjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluIGRvbWFpbikKIHsKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNhc2UgR2Vv
bG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJl
cXVlc3RzLnJlbW92ZU9uZShmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJQYWdlOjpwZXJtaXNzaW9uU2V0KFFX
ZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbikKK3sKKyAgICBzd2l0Y2ggKGRvbWFpbikg
eworICAgIGNhc2UgR2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICB7CisgICAg
ICAgIFFfQVNTRVJUKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pc0dlb2xvY2F0aW9u
UGVybWlzc2lvblNldCgpKTsKKyAgICAgICAgZm9yZWFjaCAoUVdlYkZyYW1lKiBmcmFtZSwgbV9w
ZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cykKKyAgICAgICAgICAgIGlmIChtX2RydC0+bGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgICAgICAg
ICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1l
LCBkb21haW4sIFBlcm1pc3Npb25EZW5pZWQpOworCisgICAgICAgIG1fcGVuZGluZ0dlb2xvY2F0
aW9uUmVxdWVzdHMuY2xlYXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHN0YXRpYyBRU3RyaW5nIHVybFN1aXRh
YmxlRm9yVGVzdFJlc3VsdChjb25zdCBRU3RyaW5nJiB1cmwpCkBAIC0zNjcsMTEgKzQwNSw2IEBA
IFFPYmplY3QqIFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihjb25zdCBRU3QKICNlbmRpZgogfQogCi1i
b29sIFdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqKQotewotICAg
IHJldHVybiBtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNz
aW9uKCk7Ci19Ci0KIHZvaWQgV2ViUGFnZTo6c2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFSZWN0JiBy
ZWN0KQogewogICAgIGlmIChXZWJWaWV3R3JhcGhpY3NCYXNlZCogdiA9IHFvYmplY3RfY2FzdDxX
ZWJWaWV3R3JhcGhpY3NCYXNlZCo+KHZpZXcoKSkpCkBAIC00MzEsNiArNDY0LDkgQEAgRHVtcFJl
bmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKICAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lH
TkFMKHNob3dQYWdlKCkpLCB0aGlzLCBTTE9UKHNob3dQYWdlKCkpKTsKICAgICBjb25uZWN0KG1f
Y29udHJvbGxlciwgU0lHTkFMKGhpZGVQYWdlKCkpLCB0aGlzLCBTTE9UKGhpZGVQYWdlKCkpKTsK
IAorICAgIC8vIGFzeW5jIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gc2V0IGJ5IGNvbnRyb2xsZXIK
KyAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGdlb2xvY2F0aW9uUGVybWlzc2lvblNl
dCgpKSwgdGhpcywgU0xPVChnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSkpOworCiAgICAgY29u
bmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChkb25lKCkpLCB0aGlzLCBTTE9UKGR1bXAoKSkpOwog
ICAgIG1fZXZlbnRTZW5kZXIgPSBuZXcgRXZlbnRTZW5kZXIobV9wYWdlKTsKICAgICBtX3RleHRJ
bnB1dENvbnRyb2xsZXIgPSBuZXcgVGV4dElucHV0Q29udHJvbGxlcihtX3BhZ2UpOwpAQCAtNjQw
LDEwICs2NzYsOCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZShjb25zdCBRCiAg
ICAgICAgICAgICAgICAgICAgIGVtaXQgcXVpdCgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgZW1pdCByZWFkeSgpOwotCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0KIAogICAgICAgICBvcGVuKFFVcmw6OmZyb21M
b2NhbEZpbGUoZmkuYWJzb2x1dGVGaWxlUGF0aCgpKSk7CkBAIC05OTksNiArMTAzMywxMSBAQCBp
bnQgRHVtcFJlbmRlclRyZWU6OndpbmRvd0NvdW50KCkgY29uc3QKICAgICByZXR1cm4gd2luZG93
cy5jb3VudCgpICsgMTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJt
aXNzaW9uU2V0KCkgCit7CisgICAgbV9wYWdlLT5wZXJtaXNzaW9uU2V0KFFXZWJQYWdlOjpHZW9s
b2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpzd2l0
Y2hGb2N1cyhib29sIGZvY3VzZWQpCiB7CiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoKGZvY3VzZWQp
ID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpGb2N1c091dCwgUXQ6OkFjdGl2ZVdpbmRvd0Zv
Y3VzUmVhc29uKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5k
ZXJUcmVlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmgJKHJldmlzaW9uIDY1MzcwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiAr
MTI4LDcgQEAgcHJpdmF0ZSBRX1NMT1RTOgogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAgICB2b2lk
IGhpZGVQYWdlKCk7CiAgICAgdm9pZCBkcnlSdW5QcmludChRV2ViRnJhbWUqKTsKKyAgICB2b2lk
IGdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpOwogCiBwcml2YXRlOgogICAgIFFTdHJpbmcgZHVt
cEZyYW1lc0FzVGV4dChRV2ViRnJhbWUqIGZyYW1lKTsKQEAgLTE4OCwxMiArMTg5LDEzIEBAIHB1
YmxpYzoKIAogICAgIFFPYmplY3QqIGNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nJiwgY29uc3Qg
UVVybCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0cmluZ0xpc3QmKTsKIAorICAgIHZv
aWQgcGVybWlzc2lvblNldChRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOworCiBw
dWJsaWMgc2xvdHM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAq
ZnJhbWUpOwogICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdl
YlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKICAgICB2b2lkIGNoZWNrUGVybWlzc2lv
bihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOwotICAgIHZvaWQgY2FuY2VsUmVxdWVz
dHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluIGRvbWFpbik7CisgICAgdm9pZCBjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUs
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAKIHByb3RlY3RlZDoKICAgICBi
b29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFOZXR3
b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSk7CkBAIC0yMDQsNiArMjA2
LDcgQEAgcHJpdmF0ZSBzbG90czoKIAogcHJpdmF0ZToKICAgICBRV2ViSW5zcGVjdG9yKiBtX3dl
Ykluc3BlY3RvcjsKKyAgICBRTGlzdDxRV2ViRnJhbWUqPiBtX3BlbmRpbmdHZW9sb2NhdGlvblJl
cXVlc3RzOwogICAgIER1bXBSZW5kZXJUcmVlICptX2RydDsKIH07CiAKSW5kZXg6IFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuY3BwCShyZXZpc2lvbiA2NTM3MCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4
IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc2V0KCkKICAgICBtX3VzZXJTdHlsZVNo
ZWV0RW5hYmxlZCA9IGZhbHNlOwogICAgIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmln
aW5zLmNsZWFyKCk7CiAgICAgbV9pZ25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gZmFsc2U7Cisg
ICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IGZhbHNlOworICAgIG1fZ2VvbG9jYXRp
b25QZXJtaXNzaW9uID0gZmFsc2U7CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVt
cEVkaXRpbmdDYWxsYmFja3MoZmFsc2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpk
dW1wRnJhbWVMb2FkZXIoZmFsc2UpOwpAQCAtNzE1LDYgKzcxNywxMiBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogeworICAgIHNldEdlb2xvY2F0
aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgZW1pdCBnZW9sb2NhdGlvblBlcm1pc3Np
b25TZXQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCit7CiAgICAgIG1faXNHZW9sb2NhdGlvblBlcm1p
c3Npb25TZXQgPSB0cnVlOwogICAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGFsbG93Owog
fQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gNjUzNzApCisrKyBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDYgKzg1LDcgQEAgc2lnbmFsczoKIAogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAgICB2b2lk
IGhpZGVQYWdlKCk7CisgICAgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKTsKIAogcHVi
bGljIHNsb3RzOgogICAgIHZvaWQgbWF5YmVEdW1wKGJvb2wgb2spOwpAQCAtMjM5LDYgKzI0MCw5
IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBwcm9jZXNzV29yaygpOwogCiBwcml2YXRlOgor
ICAgIHZvaWQgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpOworCitw
cml2YXRlOgogICAgIGJvb2wgbV9oYXNEdW1wZWQ7CiAgICAgYm9vbCBtX3RleHREdW1wOwogICAg
IGJvb2wgbV9kdW1wQmFja0ZvcndhcmRMaXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64756</attachid>
            <date>2010-08-18 12:32:53 -0700</date>
            <delta_ts>2010-08-18 12:35:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364.patch</filename>
            <type>text/plain</type>
            <size>28588</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCShyZXZpc2lv
biA2NTYwMykKKysrIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsOSArMjE3LDEyIEBACiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBh
bGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKSAKKyAgICB2b2lkIHJlcXVl
c3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWlu
IGRvbWFpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2FsbG93R2VvbG9jYXRpb247CisgICAg
ICAgIGlmIChtX2FsbG93R2VvbG9jYXRpb24pCisgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lv
bihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CisgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVk
KTsKICAgICB9CiAKIHB1YmxpYzoKQEAgLTI0Nyw2ICsyNTAsOSBAQAogdm9pZCB0c3RfUVdlYlBh
Z2U6Omdlb2xvY2F0aW9uUmVxdWVzdEpTKCkKIHsKICAgICBKU1Rlc3RQYWdlKiBuZXdQYWdlID0g
bmV3IEpTVGVzdFBhZ2UobV92aWV3KTsKKyAgICBjb25uZWN0KG5ld1BhZ2UsIFNJR05BTChyZXF1
ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluKSksIAorICAgICAgICAgICAgbmV3UGFnZSwgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKwogICAgIG5ld1BhZ2UtPnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7CiAgICAgbV92aWV3LT5zZXRQYWdlKG5ld1Bh
Z2UpOwogICAgIG1fdmlldy0+c2V0SHRtbChRU3RyaW5nKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5
PjwvaHRtbD4iKSwgUVVybCgpKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5o
IgorCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKworI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgor
I2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisKK0dlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0KiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbj0gMDsKKworR2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojpn
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKQoreworICAgIGlmIChzX2dlb2xvY2F0aW9uUGVy
bWlzc2lvbikKKyAgICAgICAgcmV0dXJuIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworCisgICAg
c19nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBuZXcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQoKTsKKyAgICByZXR1cm4gc19nZW9sb2NhdGlvblBlcm1pc3Npb247Cit9CisKK0dlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpCit7
Cit9CisKK0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50UXQoKQoreworfQorCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJGcmFt
ZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQoreworICAgIC8vIENoZWNrIGlmIGNsaWVudCBoYXMg
cHJlc2V0IHBlcm1pc3Npb24gZm9yIHRoZSBmcmFtZSBhbmQgbm90aWZ5IHdlYmNvcmUKKyAgICBp
ZiAobV9wZXJtaXNzaW9uRm9yRnJhbWVzLmNvbnRhaW5zKHdlYkZyYW1lKSkgeworICAgICAgICBz
ZXRQZXJtaXNzaW9uKHdlYkZyYW1lLCBtX3Blcm1pc3Npb25Gb3JGcmFtZXMudmFsdWUod2ViRnJh
bWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5pbnNlcnQod2ViRnJhbWUsIGxpc3RlbmVyKTsKKworICAgIFFXZWJQYWdlKiBwYWdl
ID0gd2ViRnJhbWUtPnBhZ2UoKTsKKyAgICBlbWl0IHBhZ2UtPnJlcXVlc3RQZXJtaXNzaW9uRnJv
bVVzZXIod2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOwor
fQorCisKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBHZW9sb2Nh
dGlvbiogbGlzdGVuZXIpCit7CisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92
ZSh3ZWJGcmFtZSk7CisgICAgbV9wZXJtaXNzaW9uRm9yRnJhbWVzLnJlbW92ZSh3ZWJGcmFtZSk7
CisKKyAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7CisgICAgZW1pdCBwYWdl
LT5jYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24od2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2Nh
dGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSogd2ViRnJhbWUsIFFXZWJQYWdlOjpQZXJt
aXNzaW9uUG9saWN5IHBlcm1pc3Npb24pCit7ICAKKyAgICAvLyBpZiBwZXJtaXNzaW9uIHdhcyBz
ZXQgcmVtb3ZlIGl0LiBPbmNlIHBlcm1pc3Npb24gaXMgc2V0IHRvIGZyYW1lLCB3ZWJjb3JlIGNh
Y2hlcyBpdC4KKyAgICBtX3Blcm1pc3Npb25Gb3JGcmFtZXMucmVtb3ZlKHdlYkZyYW1lKTsKKwor
ICAgIGlmIChtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuY29udGFpbnMod2ViRnJhbWUpKSB7
CisgICAgICAgIEdlb2xvY2F0aW9uKiBsaXN0ZW5lciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1
ZXN0cy52YWx1ZSh3ZWJGcmFtZSk7CisKKyAgICAgICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBh
Z2U6OlBlcm1pc3Npb25HcmFudGVkKQorICAgICAgICAgICAgbGlzdGVuZXItPnNldElzQWxsb3dl
ZCh0cnVlKTsKKyAgICAgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlz
c2lvbkRlbmllZCkKKyAgICAgICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9wZW5kaW5nUGVy
bWlzc2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJGcmFtZSk7CisgICAgfSBlbHNlIC8vIHBlcm1pc3Np
b24gaGFzIG5vdCBiZWVuIHJlcXVlc3RlZCBmb3IgdGhlIGZyYW1lIHlldCwgY2FjaGUgdGhlIHBl
cm1pc3Npb24KKyAgICAgICAgbV9wZXJtaXNzaW9uRm9yRnJhbWVzLmluc2VydCh3ZWJGcmFtZSwg
cGVybWlzc2lvbik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQorfQpJbmRleDog
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2
NTYwMykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclF0LmgiCiAjZW5kaWYKKyNpbmNsdWRlICJH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTU2
MSwxMiArNTYyLDIwIEBACiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlv
blBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKIHsKLSAgICBib29sIGFsbG93ID0gZmFsc2U7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQog
ICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOwot
ICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLCAiYWxsb3dHZW9sb2NhdGlv
blJlcXVlc3QiLCBRdDo6RGlyZWN0Q29ubmVjdGlvbiwgUV9SRVRVUk5fQVJHKGJvb2wsIGFsbG93
KSwgUV9BUkcoUVdlYkZyYW1lKiwgd2ViRnJhbWUpKTsKLSAgICBnZW9sb2NhdGlvbi0+c2V0SXNB
bGxvd2VkKGFsbG93KTsKKyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JG
cmFtZSh3ZWJGcmFtZSwgZ2VvbG9jYXRpb24pOworI2VuZGlmCiB9CiAKK3ZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSog
ZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyNpZiBFTkFCTEUoR0VPTE9DQVRJ
T04pCisgICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFt
ZSk7CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUo
d2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKKyNlbmRpZgorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5
ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewpJbmRleDog
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0X2gK
KyNkZWZpbmUgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb24uaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCisjaW5jbHVkZSA8UUhhc2g+CisK
K2NsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJQYWdlOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0IHsKK3B1YmxpYzoKKyAgICBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpOworICAgIH5HZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCgpOworCisgICAgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoUVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIGNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbiopOwor
ICAgIHZvaWQgc2V0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvblBv
bGljeSk7CisKKyAgICBzdGF0aWMgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIGdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudCgpOworcHJpdmF0ZToKKyAgICBRSGFzaDxRV2ViRnJhbWUq
LCBHZW9sb2NhdGlvbio+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBRSGFzaDxR
V2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeT4gbV9wZXJtaXNzaW9uRm9yRnJh
bWVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA2NTYwMykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9y
RnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2Fu
Y2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRp
b24qKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25J
c05hdHVyYWwoKTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRl
UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OwpJbmRleDogV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTYwMykK
KysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAor
MjAxMC0wOC0xNyAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFX
ZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAg
ICAgIFByb3ZpZGVzIGEgbmV3IGFzeW5jIEFQSSBmb3IgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4g
VXNpbmcKKyAgICAgICAgTm90aWZpY2F0aW9uIEFQSSBhcHByb2FjaCBmcm9tIHF0d2Via2l0LiBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCAKKyAgICAgICAgbWFpbnRhaW5zIGxpc3Qgb2Yg
cGVuZGluZyByZXF1ZXN0cyBmcm9tIFdlYkNvcmUgYW5kIGludGltYXRlcyB0aGVtCisgICAgICAg
IHdoZW4gY2xpZW50IGVpdGhlciBhbGxvd2VzL2RlbmllcyB0aGUgcmVxdWVzdC4gSW4gY2FzZSBj
bGllbnQgY2FsbCAKKyAgICAgICAgUVdlYlBhZ2U6OnNldFVzZXJQZXJtaXNzaW9uIHdpdGhvdXQg
YW55IHJlcXVlc3QsIGNhY2hlIHRoZSBwZXJtaXNzaW9uIAorICAgICAgICBmb3IgdGhlIGZyYW1l
IGFuZCB1c2UgaXQgd2hlbiBXZWJDb3JlIG1ha2VzIGEgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRz
CisgICAgICAgIENocm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUuICAKKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChR
V2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24pOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6R2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQ6On5HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1p
c3Npb24pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0Lmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5j
cHA6CisgICAgICAgIChKU1Rlc3RQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgICh0
c3RfUVdlYlBhZ2U6Omdlb2xvY2F0aW9uUmVxdWVzdEpTKToKKwogMjAxMC0wOC0xNyAgTGFzemxv
IEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQXJpeWEgSGlkYXlhdC4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgJKHJldmlzaW9uIDY1NjAzKQorKysgV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAg
ICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdDsKICAgICBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKKyAgICBj
bGFzcyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDsKICAgICBjbGFzcyBSZXNvdXJjZUhh
bmRsZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIFFOZXR3b3JrUmVwbHlI
YW5kbGVyOwpAQCAtMjAyLDcgKzIwMyw4IEBACiAgICAgfTsKIAogICAgIGVudW0gUGVybWlzc2lv
bkRvbWFpbiB7Ci0gICAgICAgIE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWluCisgICAgICAg
IE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWluLAorICAgICAgICBHZW9sb2NhdGlvblBlcm1p
c3Npb25Eb21haW4KICAgICB9OwogCiAgICAgY2xhc3MgVmlld3BvcnRIaW50cyB7CkBAIC0zNTEs
NyArMzUzLDYgQEAKIAogcHVibGljIFFfU0xPVFM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRK
YXZhU2NyaXB0KCk7Ci0gICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUg
KmZyYW1lKTsKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKQEAgLTQyNCw2
ICs0MjUsNyBAQAogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsK
ICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Owog
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTsKICAgICBmcmllbmQgY2xh
c3MgV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI7CiAgICAgZnJpZW5kIGNsYXNzIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OwpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDY1NjAzKQor
KysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgx
LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgInJ1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJl
YWQuaCIKQEAgLTIwODIsMzAgKzIwODMsNiBAQAogI2VuZGlmCiB9CiAKLS8qIQotICAgIFxmbiBi
b29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCgpCi0gICAgXHNpbmNlIDQuNwot
Ci0gICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBKYXZhU2NyaXB0IHByb2dy
YW0gcnVubmluZyBpbnNpZGUgXGEgZnJhbWUgdHJpZXMgdG8gYWNjZXNzIHVzZXIgbG9jYXRpb24g
dGhyb3VnaCBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uCi0KLSAgICBJZiB0aGUgdXNlciB3YW50cyB0
byBhbGxvdyBhY2Nlc3MgdG8gbG9jYXRpb24gdGhlbiBpdCBzaG91bGQgcmV0dXJuIHRydWU7IG90
aGVyd2lzZSBmYWxzZS4KLQotICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4ZWN1dGVz
IHRoZSBxdWVyeSB1c2luZyBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24gd2l0aCBRTWVzc2FnZUJv
eDo6WWVzIGFuZCBRTWVzc2FnZUJveDo6Tm8gYnV0dG9ucy4KLQotICAgIFx3YXJuaW5nIEJlY2F1
c2Ugb2YgYmluYXJ5IGNvbXBhdGliaWxpdHkgY29uc3RyYWludHMsIHRoaXMgZnVuY3Rpb24gaXMg
bm90IHZpcnR1YWwuIElmIHlvdSB3YW50IHRvCi0gICAgcHJvdmlkZSB5b3VyIG93biBpbXBsZW1l
bnRhdGlvbiBpbiBhIFFXZWJQYWdlIHN1YmNsYXNzLCByZWltcGxlbWVudCB0aGUgYWxsb3dHZW9s
b2NhdGlvblJlcXVlc3QoKQotICAgIHNsb3QgaW4geW91ciBzdWJjbGFzcyBpbnN0ZWFkLiBRdFdl
YktpdCB3aWxsIGR5bmFtaWNhbGx5IGRldGVjdCB0aGUgc2xvdCBhbmQgY2FsbCBpdC4KLSovCi1i
b29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKQot
ewotI2lmZGVmIFFUX05PX01FU1NBR0VCT1gKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAg
IFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgp
IDogMDsKLSAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3Jt
YXRpb24ocGFyZW50LCB0cigiTG9jYXRpb24gUmVxdWVzdCBieS0gJTEiKS5hcmcoZnJhbWUtPnVy
bCgpLmhvc3QoKSksIHRyKCJUaGUgcGFnZSB3YW50cyB0byBhY2Nlc3MgeW91ciBsb2NhdGlvbiBp
bmZvcm1hdGlvbi4gRG8geW91IHdhbnQgdG8gYWxsb3cgdGhlIHJlcXVlc3Q/IiksIFFNZXNzYWdl
Qm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBRV2ViUGFnZTo6
c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVybWlzc2lvbkRvbWFpbiBkb21h
aW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRjaCAoZG9tYWluKSB7CkBA
IC0yMTE1LDYgKzIwOTIsMTIgQEAKICAgICAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFt
ZShmcmFtZSk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvblBl
cm1pc3Npb25Eb21haW46CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgICAgICBHZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnNl
dFBlcm1pc3Npb24oZnJhbWUsIHBvbGljeSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY1NjAzKQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjE4Miw2ICsyMTgyLDcg
QEAKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3
b3JraW5nQ29udGV4dFF0LmggXAogICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIFwKKyAgICAkJFBXRC8uLi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCBcCiAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAk
JFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwKICAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuaCBcCkBAIC0y
Mjc1LDYgKzIyNzYsNyBAQAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5l
dHdvcmtpbmdDb250ZXh0UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwIFwKKyAgICAuLi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwIFwKICAgICAuLi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTYwMykKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAt
MDgtMTcgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFn
ZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBB
ZGRpbmcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwL2ggdG8gYnVpbGQgc2NyaXB0
CisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAxMC0wOC0xOCAgTWFoZXNoIEt1bGthcm5p
ICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2
ZSBCbG9jay4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNjU2MDMpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01MzU0
LDcgKzUzNTQsNyBAQAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAjCiAjIG5ldyBza2lwcGVkIHRl
c3RzIHlldCB0byBiZSBzb3J0ZWQKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIwotZmFzdC9kb20v
R2VvbG9jYXRpb24vY2FsbGJhY2stdG8tcmVtb3RlLWNvbnRleHQyLmh0bWwKKyNmYXN0L2RvbS9H
ZW9sb2NhdGlvbi9jYWxsYmFjay10by1yZW1vdGUtY29udGV4dDIuaHRtbAogCiAjIExpbmsgcHJl
ZmV0Y2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAogZmFzdC9kb20vSFRNTExpbmtFbGVtZW50L3By
ZWZldGNoLmh0bWwKQEAgLTU0NzYsMTIgKzU0NzYsNSBAQAogZmFzdC9ldmVudHMva2V5ZG93bi1u
dW1wYWQta2V5cy5odG1sCiBmYXN0L2V2ZW50cy9zcGVjaWFsLWtleS1ldmVudHMtaW4taW5wdXQt
dGV4dC5odG1sCiAKLSMgW1F0XSBEdW1wUmVuZGVyVHJlZSBsYWNrcyBmdW5jdGlvbmFsaXR5IGZv
ciBuZXcgR2VvbG9jYXRpb24gZGVsYXllZCBwZXJtaXNzaW9uIHRlc3RzCi0jIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAotZmFzdC9kb20vR2VvbG9jYXRpb24v
ZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vZGVs
YXllZC1wZXJtaXNzaW9uLWRlbmllZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVk
LXBlcm1pc3Npb24tYWxsb3dlZC1mb3ItbXVsdGlwbGUtcmVxdWVzdHMuaHRtbAotZmFzdC9kb20v
R2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWRlbmllZC1mb3ItbXVsdGlwbGUtcmVxdWVz
dHMuaHRtbAotCiAjIEJsb2RCdWlsZGVyIGlzIG5vdCBlbmFibGVkCiBodHRwL3Rlc3RzL2xvY2Fs
L2Jsb2Ivc2VuZC1kYXRhLWJsb2IuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjU2MDMpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
MC0wOC0xNyAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQ
YWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAg
IEVuYWJsZSBhbGwgZ2VvbG9jYXRpb24gZGVsYXllZCBwZXJtaXNzaW9uIGxheW91dCB0ZXN0IGZv
ciBRdCBwb3J0CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOgorCiAyMDEwLTA4LTE4
ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHRlc3QgZXhwZWN0YXRpb24gdXBkYXRlLgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkocmV2aXNpb24gNjU2MDMpCisrKyBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCw2ICsxMjgsNyBAQAogICAgIHZvaWQgc2hvd1BhZ2UoKTsKICAgICB2b2lk
IGhpZGVQYWdlKCk7CiAgICAgdm9pZCBkcnlSdW5QcmludChRV2ViRnJhbWUqKTsKKyAgICB2b2lk
IGdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpOwogCiBwcml2YXRlOgogICAgIFFTdHJpbmcgZHVt
cEZyYW1lc0FzVGV4dChRV2ViRnJhbWUqIGZyYW1lKTsKQEAgLTE4OCwxMiArMTg5LDEzIEBACiAK
ICAgICBRT2JqZWN0KiBjcmVhdGVQbHVnaW4oY29uc3QgUVN0cmluZyYsIGNvbnN0IFFVcmwmLCBj
b25zdCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0Jik7CiAKKyAgICB2b2lkIHBlcm1p
c3Npb25TZXQoUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKKwogcHVibGljIHNs
b3RzOgogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKTsK
ICAgICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAgICAgdm9pZCBjaGVja1Blcm1pc3Npb24oUVdlYkZy
YW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluLCBRV2ViUGFnZTo6
UGVybWlzc2lvblBvbGljeSYgcG9saWN5KTsKLSAgICB2b2lkIGNhbmNlbFJlcXVlc3RzRm9yUGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4pOworICAgIHZvaWQgY2FuY2VsUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFn
ZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOwogCiBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBhY2Nl
cHROYXZpZ2F0aW9uUmVxdWVzdChRV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBRTmV0d29ya1JlcXVl
c3QmIHJlcXVlc3QsIE5hdmlnYXRpb25UeXBlIHR5cGUpOwpAQCAtMjA0LDYgKzIwNiw3IEBACiAK
IHByaXZhdGU6CiAgICAgUVdlYkluc3BlY3RvciogbV93ZWJJbnNwZWN0b3I7CisgICAgUUxpc3Q8
UVdlYkZyYW1lKj4gbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0czsKICAgICBEdW1wUmVuZGVy
VHJlZSAqbV9kcnQ7CiB9OwogCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9M
YXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gNjU2MDMp
CisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQAogICAgIG1fdXNlclN0eWxlU2hl
ZXRFbmFibGVkID0gZmFsc2U7CiAgICAgbV9kZXNrdG9wTm90aWZpY2F0aW9uQWxsb3dlZE9yaWdp
bnMuY2xlYXIoKTsKICAgICBtX2lnbm9yZURlc2t0b3BOb3RpZmljYXRpb24gPSBmYWxzZTsKKyAg
ICBtX2lzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0ID0gZmFsc2U7CisgICAgbV9nZW9sb2NhdGlv
blBlcm1pc3Npb24gPSBmYWxzZTsKIAogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1w
RWRpdGluZ0NhbGxiYWNrcyhmYWxzZSk7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1
bXBGcmFtZUxvYWRlcihmYWxzZSk7CkBAIC03MTUsNiArNzE3LDEyIEBACiAKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGFsbG93KQogewor
ICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7CisgICAgZW1pdCBnZW9s
b2NhdGlvblBlcm1pc3Npb25TZXQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGJvb2wgYWxsb3cpCit7CiAgICAgIG1faXNH
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQgPSB0cnVlOwogICAgICBtX2dlb2xvY2F0aW9uUGVybWlz
c2lvbiA9IGFsbG93OwogfQpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVt
cFJlbmRlclRyZWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHJldmlzaW9uIDY1NjAzKQorKysgV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1OSw3ICsxNTksNyBAQAogCiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocmVxdWVzdFBl
cm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikp
LCB0aGlzLCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJt
aXNzaW9uRG9tYWluKSkpOwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGNoZWNrUGVybWlzc2lv
bkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluLCBRV2ViUGFn
ZTo6UGVybWlzc2lvblBvbGljeSYpKSwgdGhpcywgU0xPVChjaGVja1Blcm1pc3Npb24oUVdlYkZy
YW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9s
aWN5JikpKTsKLSAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjYW5jZWxSZXF1ZXN0c0ZvclBlcm1p
c3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpLCB0
aGlzLCBTTE9UKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSos
IFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFM
KGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlz
c2lvbkRvbWFpbikpLCB0aGlzLCBTTE9UKGNhbmNlbFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdl
YlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSk7CiB9CiAKIFdlYlBhZ2U6On5XZWJQYWdlKCkKQEAg
LTIwMiw2ICsyMDIsOCBAQAogCiAgICAgUVdlYlNldHRpbmdzOjpzZXRNYXhpbXVtUGFnZXNJbkNh
Y2hlKDApOyAvLyByZXNldCB0byBkZWZhdWx0CiAgICAgc2V0dGluZ3MoKS0+c2V0VXNlclN0eWxl
U2hlZXRVcmwoUVVybCgpKTsgLy8gcmVzZXQgdG8gZGVmYXVsdAorCisgICAgbV9wZW5kaW5nR2Vv
bG9jYXRpb25SZXF1ZXN0cy5jbGVhcigpOwogfQogCiBRV2ViUGFnZSAqV2ViUGFnZTo6Y3JlYXRl
V2luZG93KFFXZWJQYWdlOjpXZWJXaW5kb3dUeXBlKQpAQCAtMjI0LDYgKzIyNiwxNSBAQAogICAg
ICAgICBpZiAoIW1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pZ25vcmVSZXFlc3RGb3JQ
ZXJtaXNzaW9uKCkpCiAgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWlu
LCBQZXJtaXNzaW9uR3JhbnRlZCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2VvbG9jYXRp
b25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250cm9s
bGVyKCktPmlzR2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpCisgICAgICAgICAgICBpZiAobV9k
cnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmdlb2xvY2F0aW9uUGVybWlzc2lvbigpKQorICAg
ICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25H
cmFudGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRVc2VyUGVybWlz
c2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVkKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5hcHBlbmQoZnJhbWUpOworICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNDMs
MTAgKzI1NCwzNyBAQAogICAgIH0KIH0KIAotdm9pZCBXZWJQYWdlOjpjYW5jZWxSZXF1ZXN0c0Zv
clBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pCit2b2lk
IFdlYlBhZ2U6OmNhbmNlbFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBl
cm1pc3Npb25Eb21haW4gZG9tYWluKQogeworICAgIHN3aXRjaCAoZG9tYWluKSB7CisgICAgY2Fz
ZSBHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW46CisgICAgICAgIG1fcGVuZGluZ0dlb2xvY2F0
aW9uUmVxdWVzdHMucmVtb3ZlT25lKGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCit2b2lkIFdlYlBhZ2U6OnBlcm1pc3Npb25T
ZXQoUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKQoreworICAgIHN3aXRjaCAoZG9t
YWluKSB7CisgICAgY2FzZSBHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW46CisgICAgICAgIHsK
KyAgICAgICAgUV9BU1NFUlQobV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmlzR2VvbG9j
YXRpb25QZXJtaXNzaW9uU2V0KCkpOworICAgICAgICBmb3JlYWNoIChRV2ViRnJhbWUqIGZyYW1l
LCBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzKQorICAgICAgICAgICAgaWYgKG1fZHJ0LT5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKKyAgICAgICAg
ICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRl
ZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24o
ZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkRlbmllZCk7CisKKyAgICAgICAgbV9wZW5kaW5nR2Vv
bG9jYXRpb25SZXF1ZXN0cy5jbGVhcigpOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogc3RhdGljIFFTdHJpbmcgdXJs
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGNvbnN0IFFTdHJpbmcmIHVybCkKIHsKICAgICBpZiAodXJs
LmlzRW1wdHkoKSB8fCAhdXJsLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZTovLyIpKSkK
QEAgLTM2NywxMSArNDA1LDYgQEAKICNlbmRpZgogfQogCi1ib29sIFdlYlBhZ2U6OmFsbG93R2Vv
bG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqKQotewotICAgIHJldHVybiBtX2RydC0+bGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCk7Ci19Ci0KIHZvaWQgV2Vi
UGFnZTo6c2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFSZWN0JiByZWN0KQogewogICAgIGlmIChXZWJW
aWV3R3JhcGhpY3NCYXNlZCogdiA9IHFvYmplY3RfY2FzdDxXZWJWaWV3R3JhcGhpY3NCYXNlZCo+
KHZpZXcoKSkpCkBAIC00MzEsNiArNDY0LDkgQEAKICAgICBjb25uZWN0KG1fY29udHJvbGxlciwg
U0lHTkFMKHNob3dQYWdlKCkpLCB0aGlzLCBTTE9UKHNob3dQYWdlKCkpKTsKICAgICBjb25uZWN0
KG1fY29udHJvbGxlciwgU0lHTkFMKGhpZGVQYWdlKCkpLCB0aGlzLCBTTE9UKGhpZGVQYWdlKCkp
KTsKIAorICAgIC8vIGFzeW5jIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gc2V0IGJ5IGNvbnRyb2xs
ZXIKKyAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGdlb2xvY2F0aW9uUGVybWlzc2lv
blNldCgpKSwgdGhpcywgU0xPVChnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSkpOworCiAgICAg
Y29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChkb25lKCkpLCB0aGlzLCBTTE9UKGR1bXAoKSkp
OwogICAgIG1fZXZlbnRTZW5kZXIgPSBuZXcgRXZlbnRTZW5kZXIobV9wYWdlKTsKICAgICBtX3Rl
eHRJbnB1dENvbnRyb2xsZXIgPSBuZXcgVGV4dElucHV0Q29udHJvbGxlcihtX3BhZ2UpOwpAQCAt
NjQwLDEwICs2NzYsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbWl0IHF1aXQoKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGVtaXQgcmVhZHkoKTsKLQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQogICAgICAgICB9CiAKICAgICAg
ICAgb3BlbihRVXJsOjpmcm9tTG9jYWxGaWxlKGZpLmFic29sdXRlRmlsZVBhdGgoKSkpOwpAQCAt
OTk5LDYgKzEwMzMsMTEgQEAKICAgICByZXR1cm4gd2luZG93cy5jb3VudCgpICsgMTsKIH0KIAor
dm9pZCBEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkgCit7CisgICAg
bV9wYWdlLT5wZXJtaXNzaW9uU2V0KFFXZWJQYWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21h
aW4pOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQp
CiB7CiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoKGZvY3VzZWQpID8gUUV2ZW50OjpGb2N1c0luIDog
UUV2ZW50OjpGb2N1c091dCwgUXQ6OkFjdGl2ZVdpbmRvd0ZvY3VzUmVhc29uKTsKSW5kZXg6IFdl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJv
bGxlclF0LmgJKHJldmlzaW9uIDY1NjAzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3
IEBACiAKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAgdm9pZCBoaWRlUGFnZSgpOworICAgIHZv
aWQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCk7CiAKIHB1YmxpYyBzbG90czoKICAgICB2b2lk
IG1heWJlRHVtcChib29sIG9rKTsKQEAgLTIzOSw2ICsyNDAsOSBAQAogICAgIHZvaWQgcHJvY2Vz
c1dvcmsoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNv
bW1vbihib29sIGFsbG93KTsKKworcHJpdmF0ZToKICAgICBib29sIG1faGFzRHVtcGVkOwogICAg
IGJvb2wgbV90ZXh0RHVtcDsKICAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKSW5kZXg6
IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY1NjAzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDgtMTcgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVz
aC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hv
dWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBJbXBsZW1lbnRzIG5ldyBhc3luYyBBUEkgZm9yIGdl
b2xvY2F0aW9uIHBlcm1pc3Npb24gc2ltaWxhciB0bworICAgICAgICBOb3RpZmljYXRpb24uIFdl
YlBhZ2UgbWFpbnRhaW5zIGxpc3Qgb2YgZ2VvbG9jYXRpb24gcGVybWlzc2lvbiByZXF1ZXN0Cisg
ICAgICAgIFF0V2Via2l0IGFuZCBzZXQncyB3aGVuIExheW91dFRlc3RDb250cm9sbGVyIGdldHMg
dGhlIGFjY2VzcyBmcm9tIHRlc3QgSlMKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpyZXNldFNldHRpbmdzKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlBhZ2U6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlBhZ2U6OmNhbmNlbFBlcm1pc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6cGVy
bWlzc2lvblNldCk6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRl
clRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpnZW9sb2NhdGlvblBlcm1pc3Npb25T
ZXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24pOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKwogMjAxMC0wOC0x
OCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGhhbmcgd2hl
biBzYXZpbmcgY3Jhc2ggbG9ncyBvbiBXaW5kb3dzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64757</attachid>
            <date>2010-08-18 12:35:26 -0700</date>
            <delta_ts>2010-08-31 06:17:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364.patch</filename>
            <type>text/plain</type>
            <size>28169</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCShyZXZpc2lv
biA2NTYwMykKKysrIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsOSArMjE3LDEyIEBACiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBh
bGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKSAKKyAgICB2b2lkIHJlcXVl
c3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWlu
IGRvbWFpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2FsbG93R2VvbG9jYXRpb247CisgICAg
ICAgIGlmIChtX2FsbG93R2VvbG9jYXRpb24pCisgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lv
bihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CisgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVk
KTsKICAgICB9CiAKIHB1YmxpYzoKQEAgLTI0Nyw2ICsyNTAsOSBAQAogdm9pZCB0c3RfUVdlYlBh
Z2U6Omdlb2xvY2F0aW9uUmVxdWVzdEpTKCkKIHsKICAgICBKU1Rlc3RQYWdlKiBuZXdQYWdlID0g
bmV3IEpTVGVzdFBhZ2UobV92aWV3KTsKKyAgICBjb25uZWN0KG5ld1BhZ2UsIFNJR05BTChyZXF1
ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluKSksIAorICAgICAgICAgICAgbmV3UGFnZSwgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKwogICAgIG5ld1BhZ2UtPnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7CiAgICAgbV92aWV3LT5zZXRQYWdlKG5ld1Bh
Z2UpOwogICAgIG1fdmlldy0+c2V0SHRtbChRU3RyaW5nKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5
PjwvaHRtbD4iKSwgUVVybCgpKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5o
IgorCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKworI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgor
I2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisKK0dlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0KiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbj0gMDsKKworR2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojpn
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKQoreworICAgIGlmIChzX2dlb2xvY2F0aW9uUGVy
bWlzc2lvbikKKyAgICAgICAgcmV0dXJuIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworCisgICAg
c19nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBuZXcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQoKTsKKyAgICByZXR1cm4gc19nZW9sb2NhdGlvblBlcm1pc3Npb247Cit9CisKK0dlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpCit7
Cit9CisKK0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50UXQoKQoreworfQorCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJGcmFt
ZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQoreworICAgIC8vIENoZWNrIGlmIGNsaWVudCBoYXMg
cHJlc2V0IHBlcm1pc3Npb24gZm9yIHRoZSBmcmFtZSBhbmQgbm90aWZ5IHdlYmNvcmUKKyAgICBp
ZiAobV9wZXJtaXNzaW9uRm9yRnJhbWVzLmNvbnRhaW5zKHdlYkZyYW1lKSkgeworICAgICAgICBz
ZXRQZXJtaXNzaW9uKHdlYkZyYW1lLCBtX3Blcm1pc3Npb25Gb3JGcmFtZXMudmFsdWUod2ViRnJh
bWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5pbnNlcnQod2ViRnJhbWUsIGxpc3RlbmVyKTsKKworICAgIFFXZWJQYWdlKiBwYWdl
ID0gd2ViRnJhbWUtPnBhZ2UoKTsKKyAgICBlbWl0IHBhZ2UtPnJlcXVlc3RQZXJtaXNzaW9uRnJv
bVVzZXIod2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOwor
fQorCisKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBHZW9sb2Nh
dGlvbiogbGlzdGVuZXIpCit7CisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92
ZSh3ZWJGcmFtZSk7CisgICAgbV9wZXJtaXNzaW9uRm9yRnJhbWVzLnJlbW92ZSh3ZWJGcmFtZSk7
CisKKyAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7CisgICAgZW1pdCBwYWdl
LT5jYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24od2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2Nh
dGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSogd2ViRnJhbWUsIFFXZWJQYWdlOjpQZXJt
aXNzaW9uUG9saWN5IHBlcm1pc3Npb24pCit7ICAKKyAgICAvLyBpZiBwZXJtaXNzaW9uIHdhcyBz
ZXQgcmVtb3ZlIGl0LiBPbmNlIHBlcm1pc3Npb24gaXMgc2V0IHRvIGZyYW1lLCB3ZWJjb3JlIGNh
Y2hlcyBpdC4KKyAgICBtX3Blcm1pc3Npb25Gb3JGcmFtZXMucmVtb3ZlKHdlYkZyYW1lKTsKKwor
ICAgIGlmIChtX3BlbmRpbmdQZXJtaXNzaW9uUmVxdWVzdHMuY29udGFpbnMod2ViRnJhbWUpKSB7
CisgICAgICAgIEdlb2xvY2F0aW9uKiBsaXN0ZW5lciA9IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1
ZXN0cy52YWx1ZSh3ZWJGcmFtZSk7CisKKyAgICAgICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBh
Z2U6OlBlcm1pc3Npb25HcmFudGVkKQorICAgICAgICAgICAgbGlzdGVuZXItPnNldElzQWxsb3dl
ZCh0cnVlKTsKKyAgICAgICAgZWxzZSBpZiAocGVybWlzc2lvbiA9PSBRV2ViUGFnZTo6UGVybWlz
c2lvbkRlbmllZCkKKyAgICAgICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9wZW5kaW5nUGVy
bWlzc2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJGcmFtZSk7CisgICAgfSBlbHNlIC8vIHBlcm1pc3Np
b24gaGFzIG5vdCBiZWVuIHJlcXVlc3RlZCBmb3IgdGhlIGZyYW1lIHlldCwgY2FjaGUgdGhlIHBl
cm1pc3Npb24KKyAgICAgICAgbV9wZXJtaXNzaW9uRm9yRnJhbWVzLmluc2VydCh3ZWJGcmFtZSwg
cGVybWlzc2lvbik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQorfQpJbmRleDog
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShyZXZpc2lvbiA2
NTYwMykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclF0LmgiCiAjZW5kaWYKKyNpbmNsdWRlICJH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTU2
MSwxMiArNTYyLDIwIEBACiAKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlv
blBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKIHsKLSAgICBib29sIGFsbG93ID0gZmFsc2U7CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQog
ICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOwot
ICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QobV93ZWJQYWdlLCAiYWxsb3dHZW9sb2NhdGlv
blJlcXVlc3QiLCBRdDo6RGlyZWN0Q29ubmVjdGlvbiwgUV9SRVRVUk5fQVJHKGJvb2wsIGFsbG93
KSwgUV9BUkcoUVdlYkZyYW1lKiwgd2ViRnJhbWUpKTsKLSAgICBnZW9sb2NhdGlvbi0+c2V0SXNB
bGxvd2VkKGFsbG93KTsKKyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JG
cmFtZSh3ZWJGcmFtZSwgZ2VvbG9jYXRpb24pOworI2VuZGlmCiB9CiAKK3ZvaWQgQ2hyb21lQ2xp
ZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSog
ZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyNpZiBFTkFCTEUoR0VPTE9DQVRJ
T04pCisgICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFt
ZSk7CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUo
d2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKKyNlbmRpZgorfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogdm9pZCBDaHJvbWVDbGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5
ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewpJbmRleDog
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0X2gK
KyNkZWZpbmUgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiR2Vv
bG9jYXRpb24uaCIKKyNpbmNsdWRlICJxd2VicGFnZS5oIgorCisjaW5jbHVkZSA8UUhhc2g+CisK
K2NsYXNzIFFXZWJGcmFtZTsKK2NsYXNzIFFXZWJQYWdlOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0IHsKK3B1YmxpYzoKKyAgICBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgpOworICAgIH5HZW9sb2NhdGlvblBlcm1pc3Np
b25DbGllbnRRdCgpOworCisgICAgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9y
RnJhbWUoUVdlYkZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICB2b2lkIGNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbiopOwor
ICAgIHZvaWQgc2V0UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvblBv
bGljeSk7CisKKyAgICBzdGF0aWMgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIGdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudCgpOworcHJpdmF0ZToKKyAgICBRSGFzaDxRV2ViRnJhbWUq
LCBHZW9sb2NhdGlvbio+IG1fcGVuZGluZ1Blcm1pc3Npb25SZXF1ZXN0czsKKyAgICBRSGFzaDxR
V2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeT4gbV9wZXJtaXNzaW9uRm9yRnJh
bWVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA2NTYwMykKKysrIFdlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0Jiwg
Y29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9y
RnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2Fu
Y2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRp
b24qKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25J
c05hdHVyYWwoKTsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRl
UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopIGNvbnN0OwpJbmRleDogV2ViS2l0L3F0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTYwMykK
KysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAor
MjAxMC0wOC0xNyAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFX
ZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAg
ICAgIFByb3ZpZGVzIGEgbmV3IGFzeW5jIEFQSSBmb3IgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4g
VXNpbmcKKyAgICAgICAgTm90aWZpY2F0aW9uIEFQSSBhcHByb2FjaCBmcm9tIHF0d2Via2l0LiBH
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCAKKyAgICAgICAgbWFpbnRhaW5zIGxpc3Qgb2Yg
cGVuZGluZyByZXF1ZXN0cyBmcm9tIFdlYkNvcmUgYW5kIGludGltYXRlcyB0aGVtCisgICAgICAg
IHdoZW4gY2xpZW50IGVpdGhlciBhbGxvd2VzL2RlbmllcyB0aGUgcmVxdWVzdC4gSW4gY2FzZSBj
bGllbnQgY2FsbCAKKyAgICAgICAgUVdlYlBhZ2U6OnNldFVzZXJQZXJtaXNzaW9uIHdpdGhvdXQg
YW55IHJlcXVlc3QsIGNhY2hlIHRoZSBwZXJtaXNzaW9uIAorICAgICAgICBmb3IgdGhlIGZyYW1l
IGFuZCB1c2UgaXQgd2hlbiBXZWJDb3JlIG1ha2VzIGEgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRz
CisgICAgICAgIENocm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUuICAKKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChR
V2ViUGFnZTo6c2V0VXNlclBlcm1pc3Npb24pOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50UXQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6R2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQ6On5HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lv
bkNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1p
c3Npb24pOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0Lmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5j
cHA6CisgICAgICAgIChKU1Rlc3RQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgICh0
c3RfUVdlYlBhZ2U6Omdlb2xvY2F0aW9uUmVxdWVzdEpTKToKKwogMjAxMC0wOC0xNyAgTGFzemxv
IEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQXJpeWEgSGlkYXlhdC4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgJKHJldmlzaW9uIDY1NjAzKQorKysgV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAg
ICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50UXQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRD
bGllbnRRdDsKICAgICBjbGFzcyBOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKKyAgICBj
bGFzcyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDsKICAgICBjbGFzcyBSZXNvdXJjZUhh
bmRsZTsKICAgICBjbGFzcyBIaXRUZXN0UmVzdWx0OwogICAgIGNsYXNzIFFOZXR3b3JrUmVwbHlI
YW5kbGVyOwpAQCAtMjAyLDcgKzIwMyw4IEBACiAgICAgfTsKIAogICAgIGVudW0gUGVybWlzc2lv
bkRvbWFpbiB7Ci0gICAgICAgIE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWluCisgICAgICAg
IE5vdGlmaWNhdGlvbnNQZXJtaXNzaW9uRG9tYWluLAorICAgICAgICBHZW9sb2NhdGlvblBlcm1p
c3Npb25Eb21haW4KICAgICB9OwogCiAgICAgY2xhc3MgVmlld3BvcnRIaW50cyB7CkBAIC0zNTEs
NyArMzUzLDYgQEAKIAogcHVibGljIFFfU0xPVFM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRK
YXZhU2NyaXB0KCk7Ci0gICAgYm9vbCBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUg
KmZyYW1lKTsKIAogUV9TSUdOQUxTOgogICAgIHZvaWQgbG9hZFN0YXJ0ZWQoKTsKQEAgLTQyNCw2
ICs0MjUsNyBAQAogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRRdDsK
ICAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRRdDsKICAg
ICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Owog
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTsKICAgICBmcmllbmQgY2xh
c3MgV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI7CiAgICAgZnJpZW5kIGNsYXNzIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OwpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDY1NjAzKQor
KysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgx
LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2luY2x1ZGUgInJ1bnRpbWUvSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50UXQuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJl
YWQuaCIKQEAgLTIwODIsMzAgKzIwODMsNiBAQAogI2VuZGlmCiB9CiAKLS8qIQotICAgIFxmbiBi
b29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCgpCi0gICAgXHNpbmNlIDQuNwot
Ci0gICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBKYXZhU2NyaXB0IHByb2dy
YW0gcnVubmluZyBpbnNpZGUgXGEgZnJhbWUgdHJpZXMgdG8gYWNjZXNzIHVzZXIgbG9jYXRpb24g
dGhyb3VnaCBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uCi0KLSAgICBJZiB0aGUgdXNlciB3YW50cyB0
byBhbGxvdyBhY2Nlc3MgdG8gbG9jYXRpb24gdGhlbiBpdCBzaG91bGQgcmV0dXJuIHRydWU7IG90
aGVyd2lzZSBmYWxzZS4KLQotICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGV4ZWN1dGVz
IHRoZSBxdWVyeSB1c2luZyBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24gd2l0aCBRTWVzc2FnZUJv
eDo6WWVzIGFuZCBRTWVzc2FnZUJveDo6Tm8gYnV0dG9ucy4KLQotICAgIFx3YXJuaW5nIEJlY2F1
c2Ugb2YgYmluYXJ5IGNvbXBhdGliaWxpdHkgY29uc3RyYWludHMsIHRoaXMgZnVuY3Rpb24gaXMg
bm90IHZpcnR1YWwuIElmIHlvdSB3YW50IHRvCi0gICAgcHJvdmlkZSB5b3VyIG93biBpbXBsZW1l
bnRhdGlvbiBpbiBhIFFXZWJQYWdlIHN1YmNsYXNzLCByZWltcGxlbWVudCB0aGUgYWxsb3dHZW9s
b2NhdGlvblJlcXVlc3QoKQotICAgIHNsb3QgaW4geW91ciBzdWJjbGFzcyBpbnN0ZWFkLiBRdFdl
YktpdCB3aWxsIGR5bmFtaWNhbGx5IGRldGVjdCB0aGUgc2xvdCBhbmQgY2FsbCBpdC4KLSovCi1i
b29sIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKQot
ewotI2lmZGVmIFFUX05PX01FU1NBR0VCT1gKLSAgICByZXR1cm4gZmFsc2U7Ci0jZWxzZQotICAg
IFFXaWRnZXQqIHBhcmVudCA9IChkLT5jbGllbnQpID8gZC0+Y2xpZW50LT5vd25lcldpZGdldCgp
IDogMDsKLSAgICByZXR1cm4gUU1lc3NhZ2VCb3g6OlllcyA9PSBRTWVzc2FnZUJveDo6aW5mb3Jt
YXRpb24ocGFyZW50LCB0cigiTG9jYXRpb24gUmVxdWVzdCBieS0gJTEiKS5hcmcoZnJhbWUtPnVy
bCgpLmhvc3QoKSksIHRyKCJUaGUgcGFnZSB3YW50cyB0byBhY2Nlc3MgeW91ciBsb2NhdGlvbiBp
bmZvcm1hdGlvbi4gRG8geW91IHdhbnQgdG8gYWxsb3cgdGhlIHJlcXVlc3Q/IiksIFFNZXNzYWdl
Qm94OjpZZXMsIFFNZXNzYWdlQm94OjpObyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBRV2ViUGFnZTo6
c2V0VXNlclBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUGVybWlzc2lvbkRvbWFpbiBkb21h
aW4sIFBlcm1pc3Npb25Qb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRjaCAoZG9tYWluKSB7CkBA
IC0yMTE1LDYgKzIwOTIsMTIgQEAKICAgICAgICAgICAgIE5vdGlmaWNhdGlvblByZXNlbnRlckNs
aWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWxsb3dOb3RpZmljYXRpb25Gb3JGcmFt
ZShmcmFtZSk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvblBl
cm1pc3Npb25Eb21haW46CisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgICAgICBHZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnNl
dFBlcm1pc3Npb24oZnJhbWUsIHBvbGljeSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDY1NjAzKQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMjE4Miw2ICsyMTgyLDcg
QEAKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3
b3JraW5nQ29udGV4dFF0LmggXAogICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIFwKKyAgICAkJFBXRC8uLi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCBcCiAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIFwKICAgICAk
JFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQbGF0Zm9ybVBsdWdpbi5oIFwKICAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUG9wdXBNZW51UXQuaCBcCkBAIC0y
Mjc1LDYgKzIyNzYsNyBAQAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5l
dHdvcmtpbmdDb250ZXh0UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Tm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuY3BwIFwKKyAgICAuLi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwIFwKICAgICAuLi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTYwMykKKysr
IFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAt
MDgtMTcgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFn
ZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBB
ZGRpbmcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuY3BwL2ggdG8gYnVpbGQgc2NyaXB0
CisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAxMC0wOC0xOCAgTWFoZXNoIEt1bGthcm5p
ICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2
ZSBCbG9jay4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNjU2MDMpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01NDc2
LDEyICs1NDc2LDUgQEAKIGZhc3QvZXZlbnRzL2tleWRvd24tbnVtcGFkLWtleXMuaHRtbAogZmFz
dC9ldmVudHMvc3BlY2lhbC1rZXktZXZlbnRzLWluLWlucHV0LXRleHQuaHRtbAogCi0jIFtRdF0g
RHVtcFJlbmRlclRyZWUgbGFja3MgZnVuY3Rpb25hbGl0eSBmb3IgbmV3IEdlb2xvY2F0aW9uIGRl
bGF5ZWQgcGVybWlzc2lvbiB0ZXN0cwotIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDEzNjQKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1h
bGxvd2VkLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1kZW5p
ZWQuaHRtbAotZmFzdC9kb20vR2VvbG9jYXRpb24vZGVsYXllZC1wZXJtaXNzaW9uLWFsbG93ZWQt
Zm9yLW11bHRpcGxlLXJlcXVlc3RzLmh0bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQt
cGVybWlzc2lvbi1kZW5pZWQtZm9yLW11bHRpcGxlLXJlcXVlc3RzLmh0bWwKLQogIyBCbG9kQnVp
bGRlciBpcyBub3QgZW5hYmxlZAogaHR0cC90ZXN0cy9sb2NhbC9ibG9iL3NlbmQtZGF0YS1ibG9i
Lmh0bWwKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1NjAzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDgtMTcgIE1haGVzaCBLdWxr
YXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlv
blJlcXVlc3Qgc2hvdWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBFbmFibGUgYWxsIGdlb2xvY2F0
aW9uIGRlbGF5ZWQgcGVybWlzc2lvbiBsYXlvdXQgdGVzdCBmb3IgUXQgcG9ydAorCisgICAgICAg
ICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKwogMjAxMC0wOC0xOCAgWXV0YSBLaXRhbXVyYSAgPHl1
dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCB0ZXN0IGV4cGVjdGF0aW9u
IHVwZGF0ZS4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZVF0LmgJKHJldmlzaW9uIDY1NjAzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4
LDcgQEAKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAgdm9pZCBoaWRlUGFnZSgpOwogICAgIHZv
aWQgZHJ5UnVuUHJpbnQoUVdlYkZyYW1lKik7CisgICAgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Np
b25TZXQoKTsKIAogcHJpdmF0ZToKICAgICBRU3RyaW5nIGR1bXBGcmFtZXNBc1RleHQoUVdlYkZy
YW1lKiBmcmFtZSk7CkBAIC0xODgsMTIgKzE4OSwxMyBAQAogCiAgICAgUU9iamVjdCogY3JlYXRl
UGx1Z2luKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRVXJsJiwgY29uc3QgUVN0cmluZ0xpc3QmLCBj
b25zdCBRU3RyaW5nTGlzdCYpOwogCisgICAgdm9pZCBwZXJtaXNzaW9uU2V0KFFXZWJQYWdlOjpQ
ZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisKIHB1YmxpYyBzbG90czoKICAgICBib29sIHNob3Vs
ZEludGVycnVwdEphdmFTY3JpcHQoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgYWxsb3dH
ZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSk7CiAgICAgdm9pZCByZXF1ZXN0UGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21h
aW4pOwogICAgIHZvaWQgY2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdl
OjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmIHBv
bGljeSk7Ci0gICAgdm9pZCBjYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24oUVdlYkZyYW1lKiBm
cmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKKyAgICB2b2lkIGNhbmNl
bFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4g
ZG9tYWluKTsKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3Qo
UVdlYkZyYW1lKiBmcmFtZSwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBOYXZpZ2F0
aW9uVHlwZSB0eXBlKTsKQEAgLTIwNCw2ICsyMDYsNyBAQAogCiBwcml2YXRlOgogICAgIFFXZWJJ
bnNwZWN0b3IqIG1fd2ViSW5zcGVjdG9yOworICAgIFFMaXN0PFFXZWJGcmFtZSo+IG1fcGVuZGlu
Z0dlb2xvY2F0aW9uUmVxdWVzdHM7CiAgICAgRHVtcFJlbmRlclRyZWUgKm1fZHJ0OwogfTsKIApJ
bmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0
VGVzdENvbnRyb2xsZXJRdC5jcHAJKHJldmlzaW9uIDY1NjAzKQorKysgV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDggQEAKICAgICBtX3VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZhbHNlOwog
ICAgIG1fZGVza3RvcE5vdGlmaWNhdGlvbkFsbG93ZWRPcmlnaW5zLmNsZWFyKCk7CiAgICAgbV9p
Z25vcmVEZXNrdG9wTm90aWZpY2F0aW9uID0gZmFsc2U7CisgICAgbV9pc0dlb2xvY2F0aW9uUGVy
bWlzc2lvblNldCA9IGZhbHNlOworICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gZmFsc2U7
CiAKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEVkaXRpbmdDYWxsYmFja3MoZmFs
c2UpOwogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpkdW1wRnJhbWVMb2FkZXIoZmFsc2Up
OwpAQCAtNzE1LDYgKzcxNywxMiBAQAogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxvdykKIHsKKyAgICBzZXRHZW9sb2NhdGlvblBl
cm1pc3Npb25Db21tb24oYWxsb3cpOworICAgIGVtaXQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNvbW1vbihib29sIGFsbG93KQorewogICAgICBtX2lzR2VvbG9jYXRpb25QZXJtaXNzaW9u
U2V0ID0gdHJ1ZTsKICAgICAgbV9nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBhbGxvdzsKIH0KSW5k
ZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVl
UXQuY3BwCShyZXZpc2lvbiA2NTYwMykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAK
IAogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHJlcXVlc3RQZXJtaXNzaW9uRnJvbVVzZXIoUVdl
YkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChyZXF1ZXN0
UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKICAg
ICBjb25uZWN0KHRoaXMsIFNJR05BTChjaGVja1Blcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUq
LCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3km
KSksIHRoaXMsIFNMT1QoY2hlY2tQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJt
aXNzaW9uRG9tYWluLCBRV2ViUGFnZTo6UGVybWlzc2lvblBvbGljeSYpKSk7Ci0gICAgY29ubmVj
dCh0aGlzLCBTSUdOQUwoY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZy
YW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhpcywgU0xPVChjYW5jZWxSZXF1
ZXN0c0ZvclBlcm1pc3Npb25Gcm9tVXNlcihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lv
bkRvbWFpbikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChjYW5jZWxSZXF1ZXN0c0ZvclBl
cm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSwgdGhpcywg
U0xPVChjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluKSkpOwogfQogCiBXZWJQYWdlOjp+V2ViUGFnZSgpCkBAIC0yMDIsNiArMjAyLDggQEAKIAog
ICAgIFFXZWJTZXR0aW5nczo6c2V0TWF4aW11bVBhZ2VzSW5DYWNoZSgwKTsgLy8gcmVzZXQgdG8g
ZGVmYXVsdAogICAgIHNldHRpbmdzKCktPnNldFVzZXJTdHlsZVNoZWV0VXJsKFFVcmwoKSk7IC8v
IHJlc2V0IHRvIGRlZmF1bHQKKworICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xl
YXIoKTsKIH0KIAogUVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdyhRV2ViUGFnZTo6V2Vi
V2luZG93VHlwZSkKQEAgLTIyNCw2ICsyMjYsMTUgQEAKICAgICAgICAgaWYgKCFtX2RydC0+bGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+aWdub3JlUmVxZXN0Rm9yUGVybWlzc2lvbigpKQogICAgICAg
ICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQp
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbjoK
KyAgICAgICAgaWYgKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pc0dlb2xvY2F0aW9u
UGVybWlzc2lvblNldCgpKQorICAgICAgICAgICAgaWYgKG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJv
bGxlcigpLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKKyAgICAgICAgICAgICAgICBzZXRVc2Vy
UGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwg
UGVybWlzc2lvbkRlbmllZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGVuZGluZ0dl
b2xvY2F0aW9uUmVxdWVzdHMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjQzLDEwICsyNTQsMzcgQEAKICAgICB9
CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFt
ZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKQordm9pZCBXZWJQYWdlOjpjYW5jZWxQZXJt
aXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFp
bikKIHsKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNhc2UgR2VvbG9jYXRpb25QZXJtaXNz
aW9uRG9tYWluOgorICAgICAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzLnJlbW92ZU9u
ZShmcmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KIH0KIAordm9pZCBXZWJQYWdlOjpwZXJtaXNzaW9uU2V0KFFXZWJQYWdlOjpQZXJtaXNz
aW9uRG9tYWluIGRvbWFpbikKK3sKKyAgICBzd2l0Y2ggKGRvbWFpbikgeworICAgIGNhc2UgR2Vv
bG9jYXRpb25QZXJtaXNzaW9uRG9tYWluOgorICAgICAgICB7CisgICAgICAgIFFfQVNTRVJUKG1f
ZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCgp
KTsKKyAgICAgICAgZm9yZWFjaCAoUVdlYkZyYW1lKiBmcmFtZSwgbV9wZW5kaW5nR2VvbG9jYXRp
b25SZXF1ZXN0cykKKyAgICAgICAgICAgIGlmIChtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgICAgICAgICAgc2V0VXNlclBlcm1p
c3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1p
c3Npb25EZW5pZWQpOworCisgICAgICAgIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMuY2xl
YXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKIHN0YXRpYyBRU3RyaW5nIHVybFN1aXRhYmxlRm9yVGVzdFJlc3Vs
dChjb25zdCBRU3RyaW5nJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIXVybC5z
dGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImZpbGU6Ly8iKSkpCkBAIC0zNjcsMTEgKzQwNSw2IEBA
CiAjZW5kaWYKIH0KIAotYm9vbCBXZWJQYWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2Vi
RnJhbWUgKikKLXsKLSAgICByZXR1cm4gbV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmdl
b2xvY2F0aW9uUGVybWlzc2lvbigpOwotfQotCiB2b2lkIFdlYlBhZ2U6OnNldFZpZXdHZW9tZXRy
eShjb25zdCBRUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoV2ViVmlld0dyYXBoaWNzQmFzZWQqIHYg
PSBxb2JqZWN0X2Nhc3Q8V2ViVmlld0dyYXBoaWNzQmFzZWQqPih2aWV3KCkpKQpAQCAtNDMxLDYg
KzQ2NCw5IEBACiAgICAgY29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05BTChzaG93UGFnZSgpKSwg
dGhpcywgU0xPVChzaG93UGFnZSgpKSk7CiAgICAgY29ubmVjdChtX2NvbnRyb2xsZXIsIFNJR05B
TChoaWRlUGFnZSgpKSwgdGhpcywgU0xPVChoaWRlUGFnZSgpKSk7CiAKKyAgICAvLyBhc3luYyBn
ZW9sb2NhdGlvbiBwZXJtaXNzaW9uIHNldCBieSBjb250cm9sbGVyCisgICAgY29ubmVjdChtX2Nv
bnRyb2xsZXIsIFNJR05BTChnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSksIHRoaXMsIFNMT1Qo
Z2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpKTsKKwogICAgIGNvbm5lY3QobV9jb250cm9sbGVy
LCBTSUdOQUwoZG9uZSgpKSwgdGhpcywgU0xPVChkdW1wKCkpKTsKICAgICBtX2V2ZW50U2VuZGVy
ID0gbmV3IEV2ZW50U2VuZGVyKG1fcGFnZSk7CiAgICAgbV90ZXh0SW5wdXRDb250cm9sbGVyID0g
bmV3IFRleHRJbnB1dENvbnRyb2xsZXIobV9wYWdlKTsKQEAgLTY0MCwxMCArNjc2LDggQEAKICAg
ICAgICAgICAgICAgICAgICAgZW1pdCBxdWl0KCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBlbWl0IHJlYWR5KCk7Ci0KICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgfQogCiAgICAgICAgIG9wZW4oUVVybDo6ZnJvbUxv
Y2FsRmlsZShmaS5hYnNvbHV0ZUZpbGVQYXRoKCkpKTsKQEAgLTk5OSw2ICsxMDMzLDExIEBACiAg
ICAgcmV0dXJuIHdpbmRvd3MuY291bnQoKSArIDE7CiB9CiAKK3ZvaWQgRHVtcFJlbmRlclRyZWU6
Omdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpIAoreworICAgIG1fcGFnZS0+cGVybWlzc2lvblNl
dChRV2ViUGFnZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uRG9tYWluKTsKK30KKwogdm9pZCBEdW1w
UmVuZGVyVHJlZTo6c3dpdGNoRm9jdXMoYm9vbCBmb2N1c2VkKQogewogICAgIFFGb2N1c0V2ZW50
IGV2ZW50KChmb2N1c2VkKSA/IFFFdmVudDo6Rm9jdXNJbiA6IFFFdmVudDo6Rm9jdXNPdXQsIFF0
OjpBY3RpdmVXaW5kb3dGb2N1c1JlYXNvbik7CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCShyZXZpc2lvbiA2
NTYwMykKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQAogCiAgICAgdm9pZCBzaG93
UGFnZSgpOwogICAgIHZvaWQgaGlkZVBhZ2UoKTsKKyAgICB2b2lkIGdlb2xvY2F0aW9uUGVybWlz
c2lvblNldCgpOwogCiBwdWJsaWMgc2xvdHM6CiAgICAgdm9pZCBtYXliZUR1bXAoYm9vbCBvayk7
CkBAIC0yMzksNiArMjQwLDkgQEAKICAgICB2b2lkIHByb2Nlc3NXb3JrKCk7CiAKIHByaXZhdGU6
CisgICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdyk7CisK
K3ByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0R1bXBlZDsKICAgICBib29sIG1fdGV4dER1bXA7CiAg
ICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7CkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTYwMykK
KysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDEwLTA4LTE3ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0g
UVdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IHNob3VsZCBiZSBhc3luYyBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzY0CisKKyAg
ICAgICAgSW1wbGVtZW50cyBuZXcgYXN5bmMgQVBJIGZvciBnZW9sb2NhdGlvbiBwZXJtaXNzaW9u
IHNpbWlsYXIgdG8KKyAgICAgICAgTm90aWZpY2F0aW9uLiBXZWJQYWdlIG1haW50YWlucyBsaXN0
IG9mIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gcmVxdWVzdAorICAgICAgICBRdFdlYmtpdCBhbmQg
c2V0J3Mgd2hlbiBMYXlvdXRUZXN0Q29udHJvbGxlciBnZXRzIHRoZSBhY2Nlc3MgZnJvbSB0ZXN0
IEpTCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViUGFnZTo6cmVzZXRTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpyZXF1
ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpjYW5jZWxQZXJtaXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnBlcm1pc3Npb25TZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpE
dW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVzZXQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xv
Y2F0aW9uUGVybWlzc2lvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9M
YXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6CisKIDIwMTAtMDgtMTggIEFkYW0gUm9iZW4gIDxhcm9i
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBoYW5nIHdoZW4gc2F2aW5nIGNyYXNoIGxvZ3Mg
b24gV2luZG93cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66042</attachid>
            <date>2010-08-31 06:17:59 -0700</date>
            <delta_ts>2010-09-01 00:15:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364_new.patch</filename>
            <type>text/plain</type>
            <size>27515</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCShyZXZpc2lv
biA2NjM3OCkKKysrIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsOSArMjE3LDEyIEBACiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBh
bGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKSAKKyAgICB2b2lkIHJlcXVl
c3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWlu
IGRvbWFpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2FsbG93R2VvbG9jYXRpb247CisgICAg
ICAgIGlmIChtX2FsbG93R2VvbG9jYXRpb24pCisgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lv
bihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CisgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVk
KTsKICAgICB9CiAKIHB1YmxpYzoKQEAgLTI0Nyw2ICsyNTAsOSBAQAogdm9pZCB0c3RfUVdlYlBh
Z2U6Omdlb2xvY2F0aW9uUmVxdWVzdEpTKCkKIHsKICAgICBKU1Rlc3RQYWdlKiBuZXdQYWdlID0g
bmV3IEpTVGVzdFBhZ2UobV92aWV3KTsKKyAgICBjb25uZWN0KG5ld1BhZ2UsIFNJR05BTChyZXF1
ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluKSksIAorICAgICAgICAgICAgbmV3UGFnZSwgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKwogICAgIG5ld1BhZ2UtPnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7CiAgICAgbV92aWV3LT5zZXRQYWdlKG5ld1Bh
Z2UpOwogICAgIG1fdmlldy0+c2V0SHRtbChRU3RyaW5nKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5
PjwvaHRtbD4iKSwgUVVybCgpKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Lmgi
CisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisj
aW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKworc3RhdGljIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsKKworR2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKQoreworICAgIGlmIChzX2dlb2xvY2F0aW9u
UGVybWlzc2lvbikKKyAgICAgICAgcmV0dXJuIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworCisg
ICAgc19nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBuZXcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQoKTsKKyAgICByZXR1cm4gc19nZW9sb2NhdGlvblBlcm1pc3Npb247Cit9CisKK0dlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgp
Cit7Cit9CisKK0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQoKQoreworfQorCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJG
cmFtZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQoreworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5pbnNlcnQod2ViRnJhbWUsIGxpc3RlbmVyKTsKKworICAgIFFXZWJQYWdlKiBwYWdl
ID0gd2ViRnJhbWUtPnBhZ2UoKTsKKyAgICBlbWl0IHBhZ2UtPnJlcXVlc3RQZXJtaXNzaW9uRnJv
bVVzZXIod2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOwor
fQorCisKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBHZW9sb2Nh
dGlvbiogbGlzdGVuZXIpCit7CisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92
ZSh3ZWJGcmFtZSk7CisKKyAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7Cisg
ICAgZW1pdCBwYWdlLT5jYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24od2ViRnJhbWUsIFFXZWJQ
YWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCit2b2lkIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSogd2ViRnJhbWUsIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5IHBlcm1pc3Npb24pCit7ICAKKyAgICBpZiAoIW1fcGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5jb250YWlucyh3ZWJGcmFtZSkpIAorICAgICAgICByZXR1
cm47CisKKyAgICBHZW9sb2NhdGlvbiogbGlzdGVuZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVx
dWVzdHMudmFsdWUod2ViRnJhbWUpOworCisgICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6
OlBlcm1pc3Npb25HcmFudGVkKQorICAgICAgICBsaXN0ZW5lci0+c2V0SXNBbGxvd2VkKHRydWUp
OworICAgIGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWQp
CisgICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJG
cmFtZSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCit9CkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDY2Mzc4
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyUXQuaCIKICNlbmRpZgorI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNTY3LDEy
ICs1NjgsMjAgQEAKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQog
ewotICAgIGJvb2wgYWxsb3cgPSBmYWxzZTsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAgICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7Ci0gICAg
UU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UsICJhbGxvd0dlb2xvY2F0aW9uUmVx
dWVzdCIsIFF0OjpEaXJlY3RDb25uZWN0aW9uLCBRX1JFVFVSTl9BUkcoYm9vbCwgYWxsb3cpLCBR
X0FSRyhRV2ViRnJhbWUqLCB3ZWJGcmFtZSkpOwotICAgIGdlb2xvY2F0aW9uLT5zZXRJc0FsbG93
ZWQoYWxsb3cpOworICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1l
KHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CisjZW5kaWYKIH0KIAordm9pZCBDaHJvbWVDbGllbnRR
dDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFt
ZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQoreworI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
KyAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsK
KyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50KCktPmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSh3ZWJG
cmFtZSwgZ2VvbG9jYXRpb24pOworI2VuZGlmCit9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihG
cmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXRfaAorI2Rl
ZmluZSBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdF9oCisKKyNpbmNsdWRlICJHZW9sb2Nh
dGlvbi5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisKKyNpbmNsdWRlIDxRSGFzaD4KKworY2xh
c3MgUVdlYkZyYW1lOworY2xhc3MgUVdlYlBhZ2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQgeworcHVibGljOgorICAgIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KCk7CisgICAgfkdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0KCk7CisKKyAgICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFt
ZShRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbiopOworICAgIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0aW9uKik7CisgICAg
dm9pZCBzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5
KTsKKworICAgIHN0YXRpYyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogZ2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50KCk7Citwcml2YXRlOgorICAgIFFIYXNoPFFXZWJGcmFtZSosIEdl
b2xvY2F0aW9uKj4gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzOworfTsKKworfQorCisjZW5k
aWYKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZp
c2lvbiA2NjM3OCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNv
bnN0IHt9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Np
b25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2Nh
dGlvbiopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNs
aWVudCopIGNvbnN0OwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjM3OCkKKysrIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wOC0zMSAgTWFoZXNoIEt1
bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0
aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAgIFByb3ZpZGVzIGEgbmV3IGFz
eW5jIEFQSSBmb3IgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4gVXNpbmcKKyAgICAgICAgTm90aWZp
Y2F0aW9uIEFQSSBhcHByb2FjaCBmcm9tIHF0d2Via2l0LiBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdCAKKyAgICAgICAgbWFpbnRhaW5zIGxpc3Qgb2YgcGVuZGluZyByZXF1ZXN0cyBmcm9t
IFdlYkNvcmUgYW5kIGludGltYXRlcyB0aGVtCisgICAgICAgIHdoZW4gY2xpZW50IGVpdGhlciBh
bGxvd2VzL2RlbmllcyB0aGUgcmVxdWVzdC4gSW4gY2FzZSBjbGllbnQgY2FsbCAKKyAgICAgICAg
UVdlYlBhZ2U6OnNldFVzZXJQZXJtaXNzaW9uIHdpdGhvdXQgYW55IHJlcXVlc3QsIGNhY2hlIHRo
ZSBwZXJtaXNzaW9uIAorICAgICAgICBmb3IgdGhlIGZyYW1lIGFuZCB1c2UgaXQgd2hlbiBXZWJD
b3JlIG1ha2VzIGEgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRzCisgICAgICAgIENocm9tZUNsaWVu
dFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUuICAKKworICAg
ICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlclBlcm1p
c3Npb24pOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0
OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JG
cmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdl
b2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBlcm1p
c3Npb25DbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpjYW5jZWxHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24pOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Lmg6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6CisgICAgICAgIChKU1Rlc3RQ
YWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgICh0c3RfUVdlYlBhZ2U6Omdlb2xvY2F0
aW9uUmVxdWVzdEpTKToKKwogMjAxMC0wOC0zMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY2MTk4
LgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICAgICBjbGFzcyBJbnNwZWN0
b3JDbGllbnRRdDsKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGNs
YXNzIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OworICAgIGNsYXNzIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwogICAgIGNsYXNz
IEhpdFRlc3RSZXN1bHQ7CiAgICAgY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7CkBAIC0yMDIs
NyArMjAzLDggQEAKICAgICB9OwogCiAgICAgZW51bSBQZXJtaXNzaW9uRG9tYWluIHsKLSAgICAg
ICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4KKyAgICAgICAgTm90aWZpY2F0aW9uc1Bl
cm1pc3Npb25Eb21haW4sCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbgogICAg
IH07CiAKICAgICBjbGFzcyBWaWV3cG9ydEhpbnRzIHsKQEAgLTM1MSw3ICszNTMsNiBAQAogCiBw
dWJsaWMgUV9TTE9UUzoKICAgICBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKLSAg
ICBib29sIGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpOwogCiBRX1NJ
R05BTFM6CiAgICAgdm9pZCBsb2FkU3RhcnRlZCgpOwpAQCAtNDI0LDYgKzQyNSw3IEBACiAgICAg
ZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKKyAgICBmcmllbmQgY2xhc3Mg
V2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNz
IFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpRTmV0
d29ya1JlcGx5SGFuZGxlcjsKICAgICBmcmllbmQgY2xhc3MgRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQ7CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUg
IkNhY2hlLmgiCiAjaW5jbHVkZSAicnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIgogI2luY2x1
ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAtMjA4Miwz
MCArMjA4Myw2IEBACiAjZW5kaWYKIH0KIAotLyohCi0gICAgXGZuIGJvb2wgUVdlYlBhZ2U6OmFs
bG93R2VvbG9jYXRpb25SZXF1ZXN0KCkKLSAgICBcc2luY2UgNC43Ci0KLSAgICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIEphdmFTY3JpcHQgcHJvZ3JhbSBydW5uaW5nIGluc2lk
ZSBcYSBmcmFtZSB0cmllcyB0byBhY2Nlc3MgdXNlciBsb2NhdGlvbiB0aHJvdWdoIG5hdmlnYXRv
ci5nZW9sb2NhdGlvbi4KLQotICAgIElmIHRoZSB1c2VyIHdhbnRzIHRvIGFsbG93IGFjY2VzcyB0
byBsb2NhdGlvbiB0aGVuIGl0IHNob3VsZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIGZhbHNlLgot
Ci0gICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZXhlY3V0ZXMgdGhlIHF1ZXJ5IHVzaW5n
IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbiB3aXRoIFFNZXNzYWdlQm94OjpZZXMgYW5kIFFNZXNz
YWdlQm94OjpObyBidXR0b25zLgotCi0gICAgXHdhcm5pbmcgQmVjYXVzZSBvZiBiaW5hcnkgY29t
cGF0aWJpbGl0eSBjb25zdHJhaW50cywgdGhpcyBmdW5jdGlvbiBpcyBub3QgdmlydHVhbC4gSWYg
eW91IHdhbnQgdG8KLSAgICBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGluIGEgUVdl
YlBhZ2Ugc3ViY2xhc3MsIHJlaW1wbGVtZW50IHRoZSBhbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCgp
Ci0gICAgc2xvdCBpbiB5b3VyIHN1YmNsYXNzIGluc3RlYWQuIFF0V2ViS2l0IHdpbGwgZHluYW1p
Y2FsbHkgZGV0ZWN0IHRoZSBzbG90IGFuZCBjYWxsIGl0LgotKi8KLWJvb2wgUVdlYlBhZ2U6OmFs
bG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpCi17Ci0jaWZkZWYgUVRfTk9f
TUVTU0FHRUJPWAotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0gICAgUVdpZGdldCogcGFyZW50
ID0gKGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAgIHJldHVy
biBRTWVzc2FnZUJveDo6WWVzID09IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbihwYXJlbnQsIHRy
KCJMb2NhdGlvbiBSZXF1ZXN0IGJ5LSAlMSIpLmFyZyhmcmFtZS0+dXJsKCkuaG9zdCgpKSwgdHIo
IlRoZSBwYWdlIHdhbnRzIHRvIGFjY2VzcyB5b3VyIGxvY2F0aW9uIGluZm9ybWF0aW9uLiBEbyB5
b3Ugd2FudCB0byBhbGxvdyB0aGUgcmVxdWVzdD8iKSwgUU1lc3NhZ2VCb3g6OlllcywgUU1lc3Nh
Z2VCb3g6Ok5vKTsKLSNlbmRpZgotfQotCiB2b2lkIFFXZWJQYWdlOjpzZXRVc2VyUGVybWlzc2lv
bihRV2ViRnJhbWUqIGZyYW1lLCBQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUGVybWlzc2lvblBv
bGljeSBwb2xpY3kpCiB7CiAgICAgc3dpdGNoIChkb21haW4pIHsKQEAgLTIxMTUsNiArMjA5Miwx
MiBAQAogICAgICAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5vdGlmaWNh
dGlvblByZXNlbnRlcigpLT5hbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKGZyYW1lKTsKICNlbmRp
ZgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbjoK
KyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+c2V0UGVybWlzc2lvbihmcmFt
ZSwgcG9saWN5KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJDb3JlL1dlYkNv
cmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMjA3LDYgKzIyMDcsNyBAQAogICAgICQkUFdELy4u
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQk
UFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZU5ldHdvcmtpbmdDb250ZXh0UXQu
aCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblBy
ZXNlbnRlckNsaWVudFF0LmggXAorICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggXAogICAgICQkUFdELy4uL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9RdFBsYXRmb3JtUGx1Z2luLmggXAogICAgICQkUFdELy4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVRdC5oIFwKQEAgLTIzMDAsNiArMjMwMSw3IEBA
CiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRR
dC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRR
dC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Ob3RpZmljYXRpb25QcmVz
ZW50ZXJDbGllbnRRdC5jcHAgXAorICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9QYWdlQ2xpZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvUG9wdXBNZW51UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUXRQ
bGF0Zm9ybVBsdWdpbi5jcHAgXApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Mzc4KQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wOC0zMSAgTWFoZXNoIEt1
bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0
aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAgIEFkZGluZyBHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdC5jcHAvaCB0byBidWlsZCBzY3JpcHQKKworICAgICAgICAqIFdl
YkNvcmUucHJvOgorCiAyMDEwLTA4LTMwICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDY2Mzc4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTQzMywxMyArNTQzMyw2IEBACiBmYXN0L2V2
ZW50cy9rZXlkb3duLW51bXBhZC1rZXlzLmh0bWwKIGZhc3QvZXZlbnRzL3NwZWNpYWwta2V5LWV2
ZW50cy1pbi1pbnB1dC10ZXh0Lmh0bWwKIAotIyBbUXRdIER1bXBSZW5kZXJUcmVlIGxhY2tzIGZ1
bmN0aW9uYWxpdHkgZm9yIG5ldyBHZW9sb2NhdGlvbiBkZWxheWVkIHBlcm1pc3Npb24gdGVzdHMK
LSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzY0Ci1mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dlZC5odG1sCi1mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmh0bWwKLWZhc3QvZG9tL0dlb2xv
Y2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLWZvci1tdWx0aXBsZS1yZXF1ZXN0cy5o
dG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLWZvci1t
dWx0aXBsZS1yZXF1ZXN0cy5odG1sCi0KICMgU3RpbGwgd29ya2luZyBvdXQgZmxha2luZXNzIGlz
c3VlcyB3aXRoIHRoZSBwZXJmIHRlc3RzLgogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQxOTkKIHBlcmYvCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjM3OCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEw
LTA4LTMxICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gUVdlYlBh
Z2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IHNob3VsZCBiZSBhc3luYyBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMzY0CisKKyAgICAgICAg
RW5hYmxlIGFsbCBnZW9sb2NhdGlvbiBkZWxheWVkIHBlcm1pc3Npb24gbGF5b3V0IHRlc3QgZm9y
IFF0IHBvcnQKKworICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisKIDIwMTAtMDgtMTMg
IE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5oCShyZXZpc2lvbiA2NjM3OCkKKysrIFdlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3
LDYgKzEyNyw3IEBACiAgICAgdm9pZCBoaWRlUGFnZSgpOwogICAgIHZvaWQgZHJ5UnVuUHJpbnQo
UVdlYkZyYW1lKik7CiAgICAgdm9pZCBsb2FkTmV4dFRlc3RJblN0YW5kQWxvbmVNb2RlKCk7Cisg
ICAgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IHNldFN0YW5kQWxvbmVNb2RlKGJvb2wgZmxhZykgeyBtX3N0YW5kQWxvbmVNb2RlID0gZmxhZzsg
fQpAQCAtMTkxLDEyICsxOTIsMTMgQEAKIAogICAgIFFPYmplY3QqIGNyZWF0ZVBsdWdpbihjb25z
dCBRU3RyaW5nJiwgY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0cmlu
Z0xpc3QmKTsKIAorICAgIHZvaWQgcGVybWlzc2lvblNldChRV2ViUGFnZTo6UGVybWlzc2lvbkRv
bWFpbiBkb21haW4pOworCiBwdWJsaWMgc2xvdHM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRK
YXZhU2NyaXB0KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGFsbG93R2VvbG9jYXRpb25S
ZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpOwogICAgIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oUVdl
YkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4gZG9tYWluKTsKICAgICB2
b2lkIGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lv
bkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JiBwb2xpY3kpOwotICAg
IHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQ
YWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9pZCBjYW5jZWxQZXJtaXNzaW9u
KFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CiAK
IHByb3RlY3RlZDoKICAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSog
ZnJhbWUsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgTmF2aWdhdGlvblR5cGUgdHlw
ZSk7CkBAIC0yMDcsNiArMjA5LDcgQEAKIAogcHJpdmF0ZToKICAgICBRV2ViSW5zcGVjdG9yKiBt
X3dlYkluc3BlY3RvcjsKKyAgICBRTGlzdDxRV2ViRnJhbWUqPiBtX3BlbmRpbmdHZW9sb2NhdGlv
blJlcXVlc3RzOwogICAgIER1bXBSZW5kZXJUcmVlICptX2RydDsKIH07CiAKSW5kZXg6IFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuY3BwCShyZXZpc2lvbiA2NjM3OCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw4IEBACiAgICAgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBmYWxzZTsKICAgICBtX2Rlc2t0
b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5jbGVhcigpOwogICAgIG1faWdub3JlRGVza3Rv
cE5vdGlmaWNhdGlvbiA9IGZhbHNlOworICAgIG1faXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQg
PSBmYWxzZTsKKyAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9IGZhbHNlOwogCiAgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2FsbGJhY2tzKGZhbHNlKTsKICAgICBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEZyYW1lTG9hZGVyKGZhbHNlKTsKQEAgLTcxNSw2
ICs3MTcsMTIgQEAKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiB7CisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29t
bW9uKGFsbG93KTsKKyAgICBlbWl0IGdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24o
Ym9vbCBhbGxvdykKK3sKICAgICAgbV9pc0dlb2xvY2F0aW9uUGVybWlzc2lvblNldCA9IHRydWU7
CiAgICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gYWxsb3c7CiB9CkluZGV4OiBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkocmV2
aXNpb24gNjYzNzgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBACiAKICAgICBjb25u
ZWN0KHRoaXMsIFNJR05BTChyZXF1ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNMT1QocmVxdWVzdFBlcm1pc3Npb24o
UVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSk7CiAgICAgY29ubmVjdCh0
aGlzLCBTSUdOQUwoY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6
OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5JikpLCB0aGlzLCBT
TE9UKGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
biwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSkpOwotICAgIGNvbm5lY3QodGhpcywgU0lH
TkFMKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQ
YWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNMT1QoY2FuY2VsUmVxdWVzdHNGb3JQZXJt
aXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4pKSk7
CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFX
ZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNMT1QoY2FuY2Vs
UGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKIH0K
IAogV2ViUGFnZTo6fldlYlBhZ2UoKQpAQCAtMjAyLDYgKzIwMiw4IEBACiAKICAgICBRV2ViU2V0
dGluZ3M6OnNldE1heGltdW1QYWdlc0luQ2FjaGUoMCk7IC8vIHJlc2V0IHRvIGRlZmF1bHQKICAg
ICBzZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJsKCkpOyAvLyByZXNldCB0byBk
ZWZhdWx0CisKKyAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzLmNsZWFyKCk7CiB9CiAK
IFFXZWJQYWdlICpXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBhZ2U6OldlYldpbmRvd1R5cGUp
CkBAIC0yMjQsNiArMjI2LDE1IEBACiAgICAgICAgIGlmICghbV9kcnQtPmxheW91dFRlc3RDb250
cm9sbGVyKCktPmlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24oKSkKICAgICAgICAgICAgIHNldFVz
ZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25HcmFudGVkKTsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW46CisgICAgICAgIGlm
IChtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25T
ZXQoKSkKKyAgICAgICAgICAgIGlmIChtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+Z2Vv
bG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgICAgICAgICAgc2V0VXNlclBlcm1pc3Npb24o
ZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25E
ZW5pZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJl
cXVlc3RzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTI0MywxMCArMjU0LDM3IEBACiAgICAgfQogfQogCi12b2lk
IFdlYlBhZ2U6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFn
ZTo6UGVybWlzc2lvbkRvbWFpbikKK3ZvaWQgV2ViUGFnZTo6Y2FuY2VsUGVybWlzc2lvbihRV2Vi
RnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pCiB7CisgICAg
c3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbjoK
KyAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5yZW1vdmVPbmUoZnJhbWUpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CiB9CiAK
K3ZvaWQgV2ViUGFnZTo6cGVybWlzc2lvblNldChRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBk
b21haW4pCit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkRvbWFpbjoKKyAgICAgICAgeworICAgICAgICBRX0FTU0VSVChtX2RydC0+bGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+aXNHZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKSk7CisgICAgICAg
IGZvcmVhY2ggKFFXZWJGcmFtZSogZnJhbWUsIG1fcGVuZGluZ0dlb2xvY2F0aW9uUmVxdWVzdHMp
CisgICAgICAgICAgICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmdlb2xvY2F0
aW9uUGVybWlzc2lvbigpKQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1l
LCBkb21haW4sIFBlcm1pc3Npb25HcmFudGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVk
KTsKKworICAgICAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzLmNsZWFyKCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCiBzdGF0aWMgUVN0cmluZyB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoY29uc3QgUVN0
cmluZyYgdXJsKQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8ICF1cmwuc3RhcnRzV2l0aChR
TGF0aW4xU3RyaW5nKCJmaWxlOi8vIikpKQpAQCAtMzY3LDExICs0MDUsNiBAQAogI2VuZGlmCiB9
CiAKLWJvb2wgV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3QoUVdlYkZyYW1lICopCi17
Ci0gICAgcmV0dXJuIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5nZW9sb2NhdGlvblBl
cm1pc3Npb24oKTsKLX0KLQogdm9pZCBXZWJQYWdlOjpzZXRWaWV3R2VvbWV0cnkoY29uc3QgUVJl
Y3QmIHJlY3QpCiB7CiAgICAgaWYgKFdlYlZpZXdHcmFwaGljc0Jhc2VkKiB2ID0gcW9iamVjdF9j
YXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4odmlldygpKSkKQEAgLTQzMSw2ICs0NjQsOSBAQAog
ICAgIGNvbm5lY3QobV9jb250cm9sbGVyLCBTSUdOQUwoc2hvd1BhZ2UoKSksIHRoaXMsIFNMT1Qo
c2hvd1BhZ2UoKSkpOwogICAgIGNvbm5lY3QobV9jb250cm9sbGVyLCBTSUdOQUwoaGlkZVBhZ2Uo
KSksIHRoaXMsIFNMT1QoaGlkZVBhZ2UoKSkpOwogCisgICAgLy8gYXN5bmMgZ2VvbG9jYXRpb24g
cGVybWlzc2lvbiBzZXQgYnkgY29udHJvbGxlcgorICAgIGNvbm5lY3QobV9jb250cm9sbGVyLCBT
SUdOQUwoZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpLCB0aGlzLCBTTE9UKGdlb2xvY2F0aW9u
UGVybWlzc2lvblNldCgpKSk7CisKICAgICBjb25uZWN0KG1fY29udHJvbGxlciwgU0lHTkFMKGRv
bmUoKSksIHRoaXMsIFNMT1QoZHVtcCgpKSk7CiAgICAgbV9ldmVudFNlbmRlciA9IG5ldyBFdmVu
dFNlbmRlcihtX3BhZ2UpOwogICAgIG1fdGV4dElucHV0Q29udHJvbGxlciA9IG5ldyBUZXh0SW5w
dXRDb250cm9sbGVyKG1fcGFnZSk7CkBAIC02NzMsNyArNzA5LDYgQEAKICAgICAgICAgICAgICAg
ICBlbWl0IHJlYWR5KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQot
CiAgICAgICAgIH0KIAogICAgICAgICBvcGVuKFFVcmw6OmZyb21Mb2NhbEZpbGUoZmkuYWJzb2x1
dGVGaWxlUGF0aCgpKSk7CkBAIC0xMDI2LDYgKzEwNjEsMTEgQEAKICAgICByZXR1cm4gd2luZG93
cy5jb3VudCgpICsgMTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJlZTo6Z2VvbG9jYXRpb25QZXJt
aXNzaW9uU2V0KCkgCit7CisgICAgbV9wYWdlLT5wZXJtaXNzaW9uU2V0KFFXZWJQYWdlOjpHZW9s
b2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpzd2l0
Y2hGb2N1cyhib29sIGZvY3VzZWQpCiB7CiAgICAgUUZvY3VzRXZlbnQgZXZlbnQoKGZvY3VzZWQp
ID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpGb2N1c091dCwgUXQ6OkFjdGl2ZVdpbmRvd0Zv
Y3VzUmVhc29uKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDY2Mzc4KQorKysgV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAKICAgICB2b2lkIHNob3dQYWdlKCk7CiAgICAgdm9p
ZCBoaWRlUGFnZSgpOworICAgIHZvaWQgZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCk7CiAKIHB1
YmxpYyBzbG90czoKICAgICB2b2lkIG1heWJlRHVtcChib29sIG9rKTsKQEAgLTIzOSw2ICsyNDAs
OSBAQAogICAgIHZvaWQgcHJvY2Vzc1dvcmsoKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KTsKKworcHJpdmF0ZToKICAgICBi
b29sIG1faGFzRHVtcGVkOwogICAgIGJvb2wgbV90ZXh0RHVtcDsKICAgICBib29sIG1fZHVtcEJh
Y2tGb3J3YXJkTGlzdDsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Mzc4KQorKysgV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDgtMzEgIE1h
aGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFnZTo6YWxsb3dH
ZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJlIGFzeW5jIEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNjQKKworICAgICAgICBJbXBsZW1lbnRz
IG5ldyBhc3luYyBBUEkgZm9yIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gc2ltaWxhciB0bworICAg
ICAgICBOb3RpZmljYXRpb24uIFdlYlBhZ2UgbWFpbnRhaW5zIGxpc3Qgb2YgZ2VvbG9jYXRpb24g
cGVybWlzc2lvbiByZXF1ZXN0CisgICAgICAgIFF0V2Via2l0IGFuZCBzZXQncyB3aGVuIExheW91
dFRlc3RDb250cm9sbGVyIGdldHMgdGhlIGFjY2VzcyBmcm9tIHRlc3QgSlMKKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpyZXNldFNl
dHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnJlcXVlc3RQZXJtaXNzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OmNhbmNlbFBlcm1pc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViUGFnZTo6cGVybWlzc2lvblNldCk6CisgICAgICAgIChXZWJDb3JlOjpEdW1w
UmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRl
clRyZWU6OnByb2Nlc3NMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpn
ZW9sb2NhdGlvblBlcm1pc3Npb25TZXQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpyZXNldCk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Np
b25Db21tb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaDoKKwogMjAxMC0wOC0yOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66173</attachid>
            <date>2010-09-01 00:15:39 -0700</date>
            <delta_ts>2010-09-01 05:31:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41364_new.patch</filename>
            <type>text/plain</type>
            <size>27362</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCShyZXZpc2lv
biA2NjM3OCkKKysrIFdlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsOSArMjE3LDEyIEBACiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1
cHRKYXZhU2NyaXB0KCkgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBh
bGxvd0dlb2xvY2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lKSAKKyAgICB2b2lkIHJlcXVl
c3RQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWlu
IGRvbWFpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2FsbG93R2VvbG9jYXRpb247CisgICAg
ICAgIGlmIChtX2FsbG93R2VvbG9jYXRpb24pCisgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lv
bihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uR3JhbnRlZCk7CisgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWluLCBQZXJtaXNzaW9uRGVuaWVk
KTsKICAgICB9CiAKIHB1YmxpYzoKQEAgLTI0Nyw2ICsyNTAsOSBAQAogdm9pZCB0c3RfUVdlYlBh
Z2U6Omdlb2xvY2F0aW9uUmVxdWVzdEpTKCkKIHsKICAgICBKU1Rlc3RQYWdlKiBuZXdQYWdlID0g
bmV3IEpTVGVzdFBhZ2UobV92aWV3KTsKKyAgICBjb25uZWN0KG5ld1BhZ2UsIFNJR05BTChyZXF1
ZXN0UGVybWlzc2lvbkZyb21Vc2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9t
YWluKSksIAorICAgICAgICAgICAgbmV3UGFnZSwgU0xPVChyZXF1ZXN0UGVybWlzc2lvbihRV2Vi
RnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikpKTsKKwogICAgIG5ld1BhZ2UtPnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihmYWxzZSk7CiAgICAgbV92aWV3LT5zZXRQYWdlKG5ld1Bh
Z2UpOwogICAgIG1fdmlldy0+c2V0SHRtbChRU3RyaW5nKCI8aHRtbD48Ym9keT50ZXN0PC9ib2R5
PjwvaHRtbD4iKSwgUVVybCgpKTsKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGll
bnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Lmgi
CisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisj
aW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKworc3RhdGljIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KiBzX2dlb2xvY2F0aW9uUGVybWlzc2lvbjsKKworR2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQqIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0
OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKQoreworICAgIGlmIChzX2dlb2xvY2F0aW9u
UGVybWlzc2lvbikKKyAgICAgICAgcmV0dXJuIHNfZ2VvbG9jYXRpb25QZXJtaXNzaW9uOworCisg
ICAgc19nZW9sb2NhdGlvblBlcm1pc3Npb24gPSBuZXcgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xp
ZW50UXQoKTsKKyAgICByZXR1cm4gc19nZW9sb2NhdGlvblBlcm1pc3Npb247Cit9CisKK0dlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCgp
Cit7Cit9CisKK0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQoKQoreworfQorCit2b2lkIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoUVdlYkZyYW1lKiB3ZWJG
cmFtZSwgR2VvbG9jYXRpb24qIGxpc3RlbmVyKQoreworICAgIG1fcGVuZGluZ1Blcm1pc3Npb25S
ZXF1ZXN0cy5pbnNlcnQod2ViRnJhbWUsIGxpc3RlbmVyKTsKKworICAgIFFXZWJQYWdlKiBwYWdl
ID0gd2ViRnJhbWUtPnBhZ2UoKTsKKyAgICBlbWl0IHBhZ2UtPnJlcXVlc3RQZXJtaXNzaW9uRnJv
bVVzZXIod2ViRnJhbWUsIFFXZWJQYWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOwor
fQorCisKK3ZvaWQgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBHZW9sb2Nh
dGlvbiogbGlzdGVuZXIpCit7CisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92
ZSh3ZWJGcmFtZSk7CisKKyAgICBRV2ViUGFnZSogcGFnZSA9IHdlYkZyYW1lLT5wYWdlKCk7Cisg
ICAgZW1pdCBwYWdlLT5jYW5jZWxSZXF1ZXN0c0ZvclBlcm1pc3Npb24od2ViRnJhbWUsIFFXZWJQ
YWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCit2b2lkIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSogd2ViRnJhbWUsIFFX
ZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5IHBlcm1pc3Npb24pCit7ICAKKyAgICBpZiAoIW1fcGVu
ZGluZ1Blcm1pc3Npb25SZXF1ZXN0cy5jb250YWlucyh3ZWJGcmFtZSkpIAorICAgICAgICByZXR1
cm47CisKKyAgICBHZW9sb2NhdGlvbiogbGlzdGVuZXIgPSBtX3BlbmRpbmdQZXJtaXNzaW9uUmVx
dWVzdHMudmFsdWUod2ViRnJhbWUpOworCisgICAgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6
OlBlcm1pc3Npb25HcmFudGVkKQorICAgICAgICBsaXN0ZW5lci0+c2V0SXNBbGxvd2VkKHRydWUp
OworICAgIGVsc2UgaWYgKHBlcm1pc3Npb24gPT0gUVdlYlBhZ2U6OlBlcm1pc3Npb25EZW5pZWQp
CisgICAgICAgIGxpc3RlbmVyLT5zZXRJc0FsbG93ZWQoZmFsc2UpOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzLnJlbW92ZSh3ZWJG
cmFtZSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04pCit9CkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDY2Mzc4
KQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyUXQuaCIKICNlbmRpZgorI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgog
I2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtNTY3LDEy
ICs1NjgsMjAgQEAKIAogdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVy
bWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQog
ewotICAgIGJvb2wgYWxsb3cgPSBmYWxzZTsKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCiAgICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7Ci0gICAg
UU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChtX3dlYlBhZ2UsICJhbGxvd0dlb2xvY2F0aW9uUmVx
dWVzdCIsIFF0OjpEaXJlY3RDb25uZWN0aW9uLCBRX1JFVFVSTl9BUkcoYm9vbCwgYWxsb3cpLCBR
X0FSRyhRV2ViRnJhbWUqLCB3ZWJGcmFtZSkpOwotICAgIGdlb2xvY2F0aW9uLT5zZXRJc0FsbG93
ZWQoYWxsb3cpOworICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1l
KHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7CisjZW5kaWYKIH0KIAordm9pZCBDaHJvbWVDbGllbnRR
dDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFt
ZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQoreworI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
KyAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsK
KyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50KCktPmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSh3ZWJG
cmFtZSwgZ2VvbG9jYXRpb24pOworI2VuZGlmCit9CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiB2b2lkIENocm9tZUNsaWVudFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihG
cmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CkluZGV4OiBXZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXRfaAorI2Rl
ZmluZSBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdF9oCisKKyNpbmNsdWRlICJHZW9sb2Nh
dGlvbi5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisKKyNpbmNsdWRlIDxRSGFzaD4KKworY2xh
c3MgUVdlYkZyYW1lOworY2xhc3MgUVdlYlBhZ2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQgeworcHVibGljOgorICAgIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0KCk7CisgICAgfkdlb2xvY2F0aW9uUGVybWlzc2lvbkNs
aWVudFF0KCk7CisKKyAgICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFt
ZShRV2ViRnJhbWUqLCBHZW9sb2NhdGlvbiopOworICAgIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKFFXZWJGcmFtZSosIEdlb2xvY2F0aW9uKik7CisgICAg
dm9pZCBzZXRQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9saWN5
KTsKKworICAgIHN0YXRpYyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCogZ2VvbG9jYXRp
b25QZXJtaXNzaW9uQ2xpZW50KCk7Citwcml2YXRlOgorICAgIFFIYXNoPFFXZWJGcmFtZSosIEdl
b2xvY2F0aW9uKj4gbV9wZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzOworfTsKKworfQorCisjZW5k
aWYKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZp
c2lvbiA2NjM3OCkKKysrIFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAKICAgICAgICAgdmlydHVhbCB2b2lk
IHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNv
bnN0IHt9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Np
b25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBj
YW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9sb2Nh
dGlvbiopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFBvcHVwTWVudT4gY3JlYXRlUG9wdXBNZW51KFBvcHVwTWVudUNs
aWVudCopIGNvbnN0OwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjM3OCkKKysrIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wOC0zMSAgTWFoZXNoIEt1
bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQYWdlOjphbGxvd0dlb2xvY2F0
aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAgIFByb3ZpZGVzIGEgbmV3IGFz
eW5jIEFQSSBmb3IgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4gVXNpbmcKKyAgICAgICAgTm90aWZp
Y2F0aW9uIEFQSSBhcHByb2FjaCBmcm9tIHF0d2Via2l0LiBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdCAKKyAgICAgICAgbWFpbnRhaW5zIGxpc3Qgb2YgcGVuZGluZyByZXF1ZXN0cyBmcm9t
IFdlYkNvcmUgYW5kIGludGltYXRlcyB0aGVtCisgICAgICAgIHdoZW4gY2xpZW50IGVpdGhlciBh
bGxvd2VzL2RlbmllcyB0aGUgcmVxdWVzdC4gQWxzbyBpbXBsZW1lbnRzCisgICAgICAgIENocm9t
ZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUuICAK
KworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNl
clBlcm1pc3Npb24pOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNs
aWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RGb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQp
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6On5HZW9s
b2NhdGlvblBlcm1pc3Npb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnRRdDo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpjYW5j
ZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6OnNldFBlcm1pc3Npb24pOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Lmg6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6CisgICAgICAgIChK
U1Rlc3RQYWdlOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgICh0c3RfUVdlYlBhZ2U6Omdl
b2xvY2F0aW9uUmVxdWVzdEpTKToKKwogMjAxMC0wOC0zMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQu
cmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjY2MTk4LgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICAgICBjbGFzcyBJ
bnNwZWN0b3JDbGllbnRRdDsKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0Owog
ICAgIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0OworICAgIGNsYXNzIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OwogICAgIGNsYXNzIFJlc291cmNlSGFuZGxlOwogICAg
IGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiAgICAgY2xhc3MgUU5ldHdvcmtSZXBseUhhbmRsZXI7CkBA
IC0yMDIsNyArMjAzLDggQEAKICAgICB9OwogCiAgICAgZW51bSBQZXJtaXNzaW9uRG9tYWluIHsK
LSAgICAgICAgTm90aWZpY2F0aW9uc1Blcm1pc3Npb25Eb21haW4KKyAgICAgICAgTm90aWZpY2F0
aW9uc1Blcm1pc3Npb25Eb21haW4sCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFp
bgogICAgIH07CiAKICAgICBjbGFzcyBWaWV3cG9ydEhpbnRzIHsKQEAgLTM1MSw3ICszNTMsNiBA
QAogCiBwdWJsaWMgUV9TTE9UUzoKICAgICBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQo
KTsKLSAgICBib29sIGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpOwog
CiBRX1NJR05BTFM6CiAgICAgdm9pZCBsb2FkU3RhcnRlZCgpOwpAQCAtNDI0LDYgKzQyNSw3IEBA
CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFF0OwogICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudFF0OwogICAgIGZyaWVuZCBj
bGFzcyBXZWJDb3JlOjpOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdDsKKyAgICBmcmllbmQg
Y2xhc3MgV2ViQ29yZTo6R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ7CiAgICAgZnJpZW5k
IGNsYXNzIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOwogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3Jl
OjpRTmV0d29ya1JlcGx5SGFuZGxlcjsKICAgICBmcmllbmQgY2xhc3MgRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQ7CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQAogI2lu
Y2x1ZGUgIkNhY2hlLmgiCiAjaW5jbHVkZSAicnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmgi
CiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5oIgog
I2luY2x1ZGUgIlBhZ2VDbGllbnRRdC5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgpAQCAt
MjA4MiwzMCArMjA4Myw2IEBACiAjZW5kaWYKIH0KIAotLyohCi0gICAgXGZuIGJvb2wgUVdlYlBh
Z2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KCkKLSAgICBcc2luY2UgNC43Ci0KLSAgICBUaGlz
IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIEphdmFTY3JpcHQgcHJvZ3JhbSBydW5uaW5n
IGluc2lkZSBcYSBmcmFtZSB0cmllcyB0byBhY2Nlc3MgdXNlciBsb2NhdGlvbiB0aHJvdWdoIG5h
dmlnYXRvci5nZW9sb2NhdGlvbi4KLQotICAgIElmIHRoZSB1c2VyIHdhbnRzIHRvIGFsbG93IGFj
Y2VzcyB0byBsb2NhdGlvbiB0aGVuIGl0IHNob3VsZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIGZh
bHNlLgotCi0gICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZXhlY3V0ZXMgdGhlIHF1ZXJ5
IHVzaW5nIFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbiB3aXRoIFFNZXNzYWdlQm94OjpZZXMgYW5k
IFFNZXNzYWdlQm94OjpObyBidXR0b25zLgotCi0gICAgXHdhcm5pbmcgQmVjYXVzZSBvZiBiaW5h
cnkgY29tcGF0aWJpbGl0eSBjb25zdHJhaW50cywgdGhpcyBmdW5jdGlvbiBpcyBub3QgdmlydHVh
bC4gSWYgeW91IHdhbnQgdG8KLSAgICBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIGlu
IGEgUVdlYlBhZ2Ugc3ViY2xhc3MsIHJlaW1wbGVtZW50IHRoZSBhbGxvd0dlb2xvY2F0aW9uUmVx
dWVzdCgpCi0gICAgc2xvdCBpbiB5b3VyIHN1YmNsYXNzIGluc3RlYWQuIFF0V2ViS2l0IHdpbGwg
ZHluYW1pY2FsbHkgZGV0ZWN0IHRoZSBzbG90IGFuZCBjYWxsIGl0LgotKi8KLWJvb2wgUVdlYlBh
Z2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpCi17Ci0jaWZkZWYg
UVRfTk9fTUVTU0FHRUJPWAotICAgIHJldHVybiBmYWxzZTsKLSNlbHNlCi0gICAgUVdpZGdldCog
cGFyZW50ID0gKGQtPmNsaWVudCkgPyBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkgOiAwOwotICAg
IHJldHVybiBRTWVzc2FnZUJveDo6WWVzID09IFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbihwYXJl
bnQsIHRyKCJMb2NhdGlvbiBSZXF1ZXN0IGJ5LSAlMSIpLmFyZyhmcmFtZS0+dXJsKCkuaG9zdCgp
KSwgdHIoIlRoZSBwYWdlIHdhbnRzIHRvIGFjY2VzcyB5b3VyIGxvY2F0aW9uIGluZm9ybWF0aW9u
LiBEbyB5b3Ugd2FudCB0byBhbGxvdyB0aGUgcmVxdWVzdD8iKSwgUU1lc3NhZ2VCb3g6Olllcywg
UU1lc3NhZ2VCb3g6Ok5vKTsKLSNlbmRpZgotfQotCiB2b2lkIFFXZWJQYWdlOjpzZXRVc2VyUGVy
bWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBQZXJtaXNzaW9uRG9tYWluIGRvbWFpbiwgUGVybWlz
c2lvblBvbGljeSBwb2xpY3kpCiB7CiAgICAgc3dpdGNoIChkb21haW4pIHsKQEAgLTIxMTUsNiAr
MjA5MiwxMiBAQAogICAgICAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQ6Om5v
dGlmaWNhdGlvblByZXNlbnRlcigpLT5hbGxvd05vdGlmaWNhdGlvbkZvckZyYW1lKGZyYW1lKTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRv
bWFpbjoKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgICAgIEdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+c2V0UGVybWlzc2lv
bihmcmFtZSwgcG9saWN5KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJDb3Jl
L1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMjA2LDYgKzIyMDYsNyBAQAogICAgICQk
UFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9RdEZhbGxiYWNrV2ViUG9wdXAuaCBcCiAg
ICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQu
aCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTmV0d29ya2lu
Z0NvbnRleHRRdC5oIFwKKyAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmggXAogICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaCBcCiAgICAgJCRQV0Qv
Li4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1F0UGxhdGZvcm1QbHVnaW4uaCBcCkBAIC0yMjk4
LDYgKzIyOTksNyBAQAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFu
ZFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVOZXR3b3Jr
aW5nQ29udGV4dFF0LmNwcCBcCisgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvckNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L05vdGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgXApJbmRleDogV2ViQ29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Mzc4KQor
KysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
MC0wOC0zMSAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJQ
YWdlOjphbGxvd0dlb2xvY2F0aW9uUmVxdWVzdCBzaG91bGQgYmUgYXN5bmMgQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM2NAorCisgICAgICAg
IEFkZGluZyBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5jcHAvaCB0byBidWlsZCBzY3Jp
cHQKKworICAgICAgICAqIFdlYkNvcmUucHJvOgorCiAyMDEwLTA4LTMwICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDY2Mzc4KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTQzMywxMyAr
NTQzMyw2IEBACiBmYXN0L2V2ZW50cy9rZXlkb3duLW51bXBhZC1rZXlzLmh0bWwKIGZhc3QvZXZl
bnRzL3NwZWNpYWwta2V5LWV2ZW50cy1pbi1pbnB1dC10ZXh0Lmh0bWwKIAotIyBbUXRdIER1bXBS
ZW5kZXJUcmVlIGxhY2tzIGZ1bmN0aW9uYWxpdHkgZm9yIG5ldyBHZW9sb2NhdGlvbiBkZWxheWVk
IHBlcm1pc3Npb24gdGVzdHMKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQxMzY0Ci1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tYWxsb3dl
ZC5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1pc3Npb24tZGVuaWVkLmh0
bWwKLWZhc3QvZG9tL0dlb2xvY2F0aW9uL2RlbGF5ZWQtcGVybWlzc2lvbi1hbGxvd2VkLWZvci1t
dWx0aXBsZS1yZXF1ZXN0cy5odG1sCi1mYXN0L2RvbS9HZW9sb2NhdGlvbi9kZWxheWVkLXBlcm1p
c3Npb24tZGVuaWVkLWZvci1tdWx0aXBsZS1yZXF1ZXN0cy5odG1sCi0KICMgU3RpbGwgd29ya2lu
ZyBvdXQgZmxha2luZXNzIGlzc3VlcyB3aXRoIHRoZSBwZXJmIHRlc3RzLgogIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQxOTkKIHBlcmYvCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2NjM3OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDEwLTA4LTMxICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2Fy
bmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gUVdlYlBhZ2U6OmFsbG93R2VvbG9jYXRpb25SZXF1ZXN0IHNob3VsZCBiZSBh
c3luYyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQxMzY0CisKKyAgICAgICAgRW5hYmxlIGFsbCBnZW9sb2NhdGlvbiBkZWxheWVkIHBlcm1pc3Np
b24gbGF5b3V0IHRlc3QgZm9yIFF0IHBvcnQKKworICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBw
ZWQ6CisKIDIwMTAtMDgtMTMgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBXZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCShyZXZpc2lvbiA2NjM3OCkK
KysrIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBACiAgICAgdm9pZCBoaWRlUGFnZSgpOwogICAg
IHZvaWQgZHJ5UnVuUHJpbnQoUVdlYkZyYW1lKik7CiAgICAgdm9pZCBsb2FkTmV4dFRlc3RJblN0
YW5kQWxvbmVNb2RlKCk7CisgICAgdm9pZCBnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQoKTsKIAog
cHJpdmF0ZToKICAgICB2b2lkIHNldFN0YW5kQWxvbmVNb2RlKGJvb2wgZmxhZykgeyBtX3N0YW5k
QWxvbmVNb2RlID0gZmxhZzsgfQpAQCAtMTkxLDEyICsxOTIsMTMgQEAKIAogICAgIFFPYmplY3Qq
IGNyZWF0ZVBsdWdpbihjb25zdCBRU3RyaW5nJiwgY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmdM
aXN0JiwgY29uc3QgUVN0cmluZ0xpc3QmKTsKIAorICAgIHZvaWQgcGVybWlzc2lvblNldChRV2Vi
UGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4pOworCiBwdWJsaWMgc2xvdHM6CiAgICAgYm9v
bCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29s
IGFsbG93R2VvbG9jYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUpOwogICAgIHZvaWQgcmVx
dWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiBmcmFtZSwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21h
aW4gZG9tYWluKTsKICAgICB2b2lkIGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBR
V2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbiBkb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9uUG9s
aWN5JiBwb2xpY3kpOwotICAgIHZvaWQgY2FuY2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uKFFXZWJG
cmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluIGRvbWFpbik7CisgICAgdm9p
ZCBjYW5jZWxQZXJtaXNzaW9uKFFXZWJGcmFtZSogZnJhbWUsIFFXZWJQYWdlOjpQZXJtaXNzaW9u
RG9tYWluIGRvbWFpbik7CiAKIHByb3RlY3RlZDoKICAgICBib29sIGFjY2VwdE5hdmlnYXRpb25S
ZXF1ZXN0KFFXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwg
TmF2aWdhdGlvblR5cGUgdHlwZSk7CkBAIC0yMDcsNiArMjA5LDcgQEAKIAogcHJpdmF0ZToKICAg
ICBRV2ViSW5zcGVjdG9yKiBtX3dlYkluc3BlY3RvcjsKKyAgICBRTGlzdDxRV2ViRnJhbWUqPiBt
X3BlbmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzOwogICAgIER1bXBSZW5kZXJUcmVlICptX2RydDsK
IH07CiAKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250
cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA2NjM3OCkKKysrIFdlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OCw2ICs2OCw4IEBACiAgICAgbV91c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBm
YWxzZTsKICAgICBtX2Rlc2t0b3BOb3RpZmljYXRpb25BbGxvd2VkT3JpZ2lucy5jbGVhcigpOwog
ICAgIG1faWdub3JlRGVza3RvcE5vdGlmaWNhdGlvbiA9IGZhbHNlOworICAgIG1faXNHZW9sb2Nh
dGlvblBlcm1pc3Npb25TZXQgPSBmYWxzZTsKKyAgICBtX2dlb2xvY2F0aW9uUGVybWlzc2lvbiA9
IGZhbHNlOwogCiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKGZhbHNlKTsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZHVtcEZyYW1lTG9hZGVy
KGZhbHNlKTsKQEAgLTcxNSw2ICs3MTcsMTIgQEAKIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCiB7CisgICAgc2V0R2VvbG9j
YXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKKyAgICBlbWl0IGdlb2xvY2F0aW9uUGVybWlz
c2lvblNldCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb25Db21tb24oYm9vbCBhbGxvdykKK3sKICAgICAgbV9pc0dlb2xvY2F0aW9uUGVy
bWlzc2lvblNldCA9IHRydWU7CiAgICAgIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uID0gYWxsb3c7
CiB9CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0LmNwcAkocmV2aXNpb24gNjYzNzgpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1
OSw3IEBACiAKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChyZXF1ZXN0UGVybWlzc2lvbkZyb21V
c2VyKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNMT1Qo
cmVxdWVzdFBlcm1pc3Npb24oUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4p
KSk7CiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2hlY2tQZXJtaXNzaW9uRnJvbVVzZXIoUVdl
YkZyYW1lKiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Eb21haW4sIFFXZWJQYWdlOjpQZXJtaXNzaW9u
UG9saWN5JikpLCB0aGlzLCBTTE9UKGNoZWNrUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFn
ZTo6UGVybWlzc2lvbkRvbWFpbiwgUVdlYlBhZ2U6OlBlcm1pc3Npb25Qb2xpY3kmKSkpOwotICAg
IGNvbm5lY3QodGhpcywgU0lHTkFMKGNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbkZyb21Vc2Vy
KFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSksIHRoaXMsIFNMT1QoY2Fu
Y2VsUmVxdWVzdHNGb3JQZXJtaXNzaW9uRnJvbVVzZXIoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OlBl
cm1pc3Npb25Eb21haW4pKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoY2FuY2VsUmVxdWVz
dHNGb3JQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpQZXJtaXNzaW9uRG9tYWluKSks
IHRoaXMsIFNMT1QoY2FuY2VsUGVybWlzc2lvbihRV2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlz
c2lvbkRvbWFpbikpKTsKIH0KIAogV2ViUGFnZTo6fldlYlBhZ2UoKQpAQCAtMjAyLDYgKzIwMiw4
IEBACiAKICAgICBRV2ViU2V0dGluZ3M6OnNldE1heGltdW1QYWdlc0luQ2FjaGUoMCk7IC8vIHJl
c2V0IHRvIGRlZmF1bHQKICAgICBzZXR0aW5ncygpLT5zZXRVc2VyU3R5bGVTaGVldFVybChRVXJs
KCkpOyAvLyByZXNldCB0byBkZWZhdWx0CisKKyAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVl
c3RzLmNsZWFyKCk7CiB9CiAKIFFXZWJQYWdlICpXZWJQYWdlOjpjcmVhdGVXaW5kb3coUVdlYlBh
Z2U6OldlYldpbmRvd1R5cGUpCkBAIC0yMjQsNiArMjI2LDE1IEBACiAgICAgICAgIGlmICghbV9k
cnQtPmxheW91dFRlc3RDb250cm9sbGVyKCktPmlnbm9yZVJlcWVzdEZvclBlcm1pc3Npb24oKSkK
ICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25H
cmFudGVkKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvblBlcm1pc3Npb25E
b21haW46CisgICAgICAgIGlmIChtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aXNHZW9s
b2NhdGlvblBlcm1pc3Npb25TZXQoKSkKKyAgICAgICAgICAgIGlmIChtX2RydC0+bGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+Z2VvbG9jYXRpb25QZXJtaXNzaW9uKCkpCisgICAgICAgICAgICAgICAg
c2V0VXNlclBlcm1pc3Npb24oZnJhbWUsIGRvbWFpbiwgUGVybWlzc2lvbkdyYW50ZWQpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldFVzZXJQZXJtaXNzaW9uKGZyYW1lLCBk
b21haW4sIFBlcm1pc3Npb25EZW5pZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Bl
bmRpbmdHZW9sb2NhdGlvblJlcXVlc3RzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI0MywxMCArMjU0LDM3IEBA
CiAgICAgfQogfQogCi12b2lkIFdlYlBhZ2U6OmNhbmNlbFJlcXVlc3RzRm9yUGVybWlzc2lvbihR
V2ViRnJhbWUqLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFpbikKK3ZvaWQgV2ViUGFnZTo6Y2Fu
Y2VsUGVybWlzc2lvbihRV2ViRnJhbWUqIGZyYW1lLCBRV2ViUGFnZTo6UGVybWlzc2lvbkRvbWFp
biBkb21haW4pCiB7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBjYXNlIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkRvbWFpbjoKKyAgICAgICAgbV9wZW5kaW5nR2VvbG9jYXRpb25SZXF1ZXN0cy5y
ZW1vdmVPbmUoZnJhbWUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cGVybWlzc2lvblNldChRV2ViUGFnZTo6
UGVybWlzc2lvbkRvbWFpbiBkb21haW4pCit7CisgICAgc3dpdGNoIChkb21haW4pIHsKKyAgICBj
YXNlIEdlb2xvY2F0aW9uUGVybWlzc2lvbkRvbWFpbjoKKyAgICAgICAgeworICAgICAgICBRX0FT
U0VSVChtX2RydC0+bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aXNHZW9sb2NhdGlvblBlcm1pc3Np
b25TZXQoKSk7CisgICAgICAgIGZvcmVhY2ggKFFXZWJGcmFtZSogZnJhbWUsIG1fcGVuZGluZ0dl
b2xvY2F0aW9uUmVxdWVzdHMpCisgICAgICAgICAgICBpZiAobV9kcnQtPmxheW91dFRlc3RDb250
cm9sbGVyKCktPmdlb2xvY2F0aW9uUGVybWlzc2lvbigpKQorICAgICAgICAgICAgICAgIHNldFVz
ZXJQZXJtaXNzaW9uKGZyYW1lLCBkb21haW4sIFBlcm1pc3Npb25HcmFudGVkKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRVc2VyUGVybWlzc2lvbihmcmFtZSwgZG9tYWlu
LCBQZXJtaXNzaW9uRGVuaWVkKTsKKworICAgICAgICBtX3BlbmRpbmdHZW9sb2NhdGlvblJlcXVl
c3RzLmNsZWFyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCiBzdGF0aWMgUVN0cmluZyB1cmxTdWl0YWJsZUZvclRl
c3RSZXN1bHQoY29uc3QgUVN0cmluZyYgdXJsKQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8
ICF1cmwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJmaWxlOi8vIikpKQpAQCAtMzY3LDExICs0
MDUsNiBAQAogI2VuZGlmCiB9CiAKLWJvb2wgV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVl
c3QoUVdlYkZyYW1lICopCi17Ci0gICAgcmV0dXJuIG1fZHJ0LT5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKTsKLX0KLQogdm9pZCBXZWJQYWdlOjpzZXRWaWV3
R2VvbWV0cnkoY29uc3QgUVJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKFdlYlZpZXdHcmFwaGljc0Jh
c2VkKiB2ID0gcW9iamVjdF9jYXN0PFdlYlZpZXdHcmFwaGljc0Jhc2VkKj4odmlldygpKSkKQEAg
LTQzMSw2ICs0NjQsOSBAQAogICAgIGNvbm5lY3QobV9jb250cm9sbGVyLCBTSUdOQUwoc2hvd1Bh
Z2UoKSksIHRoaXMsIFNMT1Qoc2hvd1BhZ2UoKSkpOwogICAgIGNvbm5lY3QobV9jb250cm9sbGVy
LCBTSUdOQUwoaGlkZVBhZ2UoKSksIHRoaXMsIFNMT1QoaGlkZVBhZ2UoKSkpOwogCisgICAgLy8g
YXN5bmMgZ2VvbG9jYXRpb24gcGVybWlzc2lvbiBzZXQgYnkgY29udHJvbGxlcgorICAgIGNvbm5l
Y3QobV9jb250cm9sbGVyLCBTSUdOQUwoZ2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkpLCB0aGlz
LCBTTE9UKGdlb2xvY2F0aW9uUGVybWlzc2lvblNldCgpKSk7CisKICAgICBjb25uZWN0KG1fY29u
dHJvbGxlciwgU0lHTkFMKGRvbmUoKSksIHRoaXMsIFNMT1QoZHVtcCgpKSk7CiAgICAgbV9ldmVu
dFNlbmRlciA9IG5ldyBFdmVudFNlbmRlcihtX3BhZ2UpOwogICAgIG1fdGV4dElucHV0Q29udHJv
bGxlciA9IG5ldyBUZXh0SW5wdXRDb250cm9sbGVyKG1fcGFnZSk7CkBAIC02NzMsNyArNzA5LDYg
QEAKICAgICAgICAgICAgICAgICBlbWl0IHJlYWR5KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotCiAgICAgICAgIH0KIAogICAgICAgICBvcGVuKFFVcmw6OmZyb21M
b2NhbEZpbGUoZmkuYWJzb2x1dGVGaWxlUGF0aCgpKSk7CkBAIC0xMDI2LDYgKzEwNjEsMTEgQEAK
ICAgICByZXR1cm4gd2luZG93cy5jb3VudCgpICsgMTsKIH0KIAordm9pZCBEdW1wUmVuZGVyVHJl
ZTo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uU2V0KCkgCit7CisgICAgbV9wYWdlLT5wZXJtaXNzaW9u
U2V0KFFXZWJQYWdlOjpHZW9sb2NhdGlvblBlcm1pc3Npb25Eb21haW4pOworfQorCiB2b2lkIER1
bXBSZW5kZXJUcmVlOjpzd2l0Y2hGb2N1cyhib29sIGZvY3VzZWQpCiB7CiAgICAgUUZvY3VzRXZl
bnQgZXZlbnQoKGZvY3VzZWQpID8gUUV2ZW50OjpGb2N1c0luIDogUUV2ZW50OjpGb2N1c091dCwg
UXQ6OkFjdGl2ZVdpbmRvd0ZvY3VzUmVhc29uKTsKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9u
IDY2Mzc4KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRy
b2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAKICAgICB2b2lkIHNo
b3dQYWdlKCk7CiAgICAgdm9pZCBoaWRlUGFnZSgpOworICAgIHZvaWQgZ2VvbG9jYXRpb25QZXJt
aXNzaW9uU2V0KCk7CiAKIHB1YmxpYyBzbG90czoKICAgICB2b2lkIG1heWJlRHVtcChib29sIG9r
KTsKQEAgLTIzOSw2ICsyNDAsOSBAQAogICAgIHZvaWQgcHJvY2Vzc1dvcmsoKTsKIAogcHJpdmF0
ZToKKyAgICB2b2lkIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihib29sIGFsbG93KTsK
KworcHJpdmF0ZToKICAgICBib29sIG1faGFzRHVtcGVkOwogICAgIGJvb2wgbV90ZXh0RHVtcDsK
ICAgICBib29sIG1fZHVtcEJhY2tGb3J3YXJkTGlzdDsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Mzc4
KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTAtMDgtMzEgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0
XSBRV2ViUGFnZTo6YWxsb3dHZW9sb2NhdGlvblJlcXVlc3Qgc2hvdWxkIGJlIGFzeW5jIEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDEzNjQKKwor
ICAgICAgICBJbXBsZW1lbnRzIG5ldyBhc3luYyBBUEkgZm9yIGdlb2xvY2F0aW9uIHBlcm1pc3Np
b24gc2ltaWxhciB0bworICAgICAgICBOb3RpZmljYXRpb24uIFdlYlBhZ2UgbWFpbnRhaW5zIGxp
c3Qgb2YgZ2VvbG9jYXRpb24gcGVybWlzc2lvbiByZXF1ZXN0CisgICAgICAgIFF0V2Via2l0IGFu
ZCBzZXQncyB3aGVuIExheW91dFRlc3RDb250cm9sbGVyIGdldHMgdGhlIGFjY2VzcyBmcm9tIHRl
c3QgSlMKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJQYWdlOjpyZXNldFNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OnJl
cXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OmNhbmNlbFBlcm1p
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGFnZTo6cGVybWlzc2lvblNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkR1bXBSZW5kZXJUcmVlOjpnZW9sb2NhdGlvblBlcm1pc3Npb25TZXQpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpyZXNldCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2Vv
bG9jYXRpb25QZXJtaXNzaW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoKKwogMjAxMC0wOC0yOSAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmlu
Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>