<?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>42629</bug_id>
          
          <creation_ts>2010-07-20 05:24:36 -0700</creation_ts>
          <short_desc>[Qt] Implement client based geolocation for qtport</short_desc>
          <delta_ts>2011-02-21 04:38:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>44322</dependson>
    
    <dependson>54869</dependson>
          <blocked>40373</blocked>
    
    <blocked>54334</blocked>
    
    <blocked>54338</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mahesh Kulkarni">maheshk</reporter>
          <assigned_to name="Mahesh Kulkarni">maheshk</assigned_to>
          <cc>bulach</cc>
    
    <cc>hausmann</cc>
    
    <cc>jarred</cc>
    
    <cc>jknotten</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</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>253664</commentid>
    <comment_count>0</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2010-07-20 05:24:36 -0700</bug_when>
    <thetext>Implement Qt port of client-based geolocation as non-client based (service based) geolocation may be deprecated as per bug #40373</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347044</commentid>
    <comment_count>1</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-07 20:35:46 -0800</bug_when>
    <thetext>Working on the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347663</commentid>
    <comment_count>2</comment_count>
      <attachid>81688</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-08 14:09:18 -0800</bug_when>
    <thetext>Created attachment 81688
first-look patch

Need a first-hand review of the patch attached. 

Patch implements,
    1) Enables ENABLE_CLIENT_BASED_GEOLOCATION for QtWebkit
    2) Qt&apos;s WebCore::GeolocationClient class GeolocationClientQt and assigns to WebCore::PageClient for Geolocation instance.
    3) Code to initialize and listening to QtMobility&apos;s geolocation service code is moved from Source/WebCore/platform/qt/GeolocationServiceQt.cpp to Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp
    4) Permission API&apos;s are moved to WebCore::GeolocationClient so the QtWebkit&apos;s GeolocationPermissionClientQt calls moved from ChromeClientQt.cpp to GeolocationClientQt.cpp


What patch doesnt implement/planned to implement, (Raise a new bug probably and mark it blocked to this bug? to keep the patch simple/easy to review)
    1) LayoutTest implementation for Client-Based geolocation. Need to implement new Mock-Client-based test classes. Disabled Geolocation cases in Skipped file till then.
    2) Cleaning up DRT Qt code related to old geolocation test framework. 
    3) raise a separate bug to remove/clean up GeolocationPermissionClientQt.cpp/.h code and move the logic to GeolocationClientQt.cpp itself.
    4) page/ChromeClient.h functions, requestGeolocationPermissionForFrame and cancelGeolocationPermissionRequestForFrame can be disabled/put under !non-client implementation for more readability. Will raise a separate bug for this as well.


Please provide your first-hand review comments before I can submit the final patch before above changes. (If chosen not to worry about patch size :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348930</commentid>
    <comment_count>3</comment_count>
      <attachid>81688</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2011-02-10 04:09:07 -0800</bug_when>
    <thetext>Comment on attachment 81688
first-look patch

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

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:89
&gt; +    m_lastPosition = GeolocationPosition::create(geoPosition.timestamp().toTime_t(), latitude, longitude,

It would be great to extra resolution for the timestamp, as the DOM type, Geoposition, provides the millisecond resolution. I&apos;m sure that there will be at least one application developer that will thank you for it!

Perhaps something like:
double timestamp = geoPosition.timestamp().toTime_t() + geoPosition.timestamp().time().msec() / 1000.0;

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:113
&gt; +        WebCore::Page* page = QWebPagePrivate::core(m_page);

It appears that it is not possible for m_location to be NULL when startUpdating is called, and non-null at stopUpdating. Since m_location is checked for NULL in startUpdating, I think it is unnecesary to check it again here. 

Note that for watches, sending the error here will result in two position unavailable error messages being sent for the same cause (once in startUpdating and once in stopUpdating). I believe this is valid behaviour, but it seems like unnecessary work.

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:130
&gt; +    if (!geolocation)

Geolocation delegates to GeolocationController for requestPermission and cancelPermissionRequest, so geolocation should never be NULL. It may be better to change this to an assertion to catch incorrect usage in future.

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:139
&gt; +    if (!geolocation)

Same comment as for requestPermission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348932</commentid>
    <comment_count>4</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2011-02-10 04:10:40 -0800</bug_when>
    <thetext>Hi Mahesh,

Thanks so much for tackling this work! I hope you don&apos;t mind, I did an informal review for you above.

Cheers

John

(In reply to comment #3)
&gt; (From update of attachment 81688 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81688&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:89
&gt; &gt; +    m_lastPosition = GeolocationPosition::create(geoPosition.timestamp().toTime_t(), latitude, longitude,
&gt; 
&gt; It would be great to extra resolution for the timestamp, as the DOM type, Geoposition, provides the millisecond resolution. I&apos;m sure that there will be at least one application developer that will thank you for it!
&gt; 
&gt; Perhaps something like:
&gt; double timestamp = geoPosition.timestamp().toTime_t() + geoPosition.timestamp().time().msec() / 1000.0;
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:113
&gt; &gt; +        WebCore::Page* page = QWebPagePrivate::core(m_page);
&gt; 
&gt; It appears that it is not possible for m_location to be NULL when startUpdating is called, and non-null at stopUpdating. Since m_location is checked for NULL in startUpdating, I think it is unnecesary to check it again here. 
&gt; 
&gt; Note that for watches, sending the error here will result in two position unavailable error messages being sent for the same cause (once in startUpdating and once in stopUpdating). I believe this is valid behaviour, but it seems like unnecessary work.
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:130
&gt; &gt; +    if (!geolocation)
&gt; 
&gt; Geolocation delegates to GeolocationController for requestPermission and cancelPermissionRequest, so geolocation should never be NULL. It may be better to change this to an assertion to catch incorrect usage in future.
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:139
&gt; &gt; +    if (!geolocation)
&gt; 
&gt; Same comment as for requestPermission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349119</commentid>
    <comment_count>5</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-10 09:14:53 -0800</bug_when>
    <thetext>Thanks for the review John!

You are spot on with the comments and I&apos;m updating all of them now. My bad with timestamp tobe miliseconds change because it is already present in trunk code with non-client based implementation and looks like I merged older code :( 

Updating patch.


(In reply to comment #3)
&gt; (From update of attachment 81688 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81688&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:89
&gt; &gt; +    m_lastPosition = GeolocationPosition::create(geoPosition.timestamp().toTime_t(), latitude, longitude,
&gt; 
&gt; It would be great to extra resolution for the timestamp, as the DOM type, Geoposition, provides the millisecond resolution. I&apos;m sure that there will be at least one application developer that will thank you for it!
&gt; 
&gt; Perhaps something like:
&gt; double timestamp = geoPosition.timestamp().toTime_t() + geoPosition.timestamp().time().msec() / 1000.0;
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:113
&gt; &gt; +        WebCore::Page* page = QWebPagePrivate::core(m_page);
&gt; 
&gt; It appears that it is not possible for m_location to be NULL when startUpdating is called, and non-null at stopUpdating. Since m_location is checked for NULL in startUpdating, I think it is unnecesary to check it again here. 
&gt; 
&gt; Note that for watches, sending the error here will result in two position unavailable error messages being sent for the same cause (once in startUpdating and once in stopUpdating). I believe this is valid behaviour, but it seems like unnecessary work.
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:130
&gt; &gt; +    if (!geolocation)
&gt; 
&gt; Geolocation delegates to GeolocationController for requestPermission and cancelPermissionRequest, so geolocation should never be NULL. It may be better to change this to an assertion to catch incorrect usage in future.
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:139
&gt; &gt; +    if (!geolocation)
&gt; 
&gt; Same comment as for requestPermission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349127</commentid>
    <comment_count>6</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-10 09:28:57 -0800</bug_when>
    <thetext>However,

(In reply to comment #3)
&gt; (From update of attachment 81688 [details])

&gt; It appears that it is not possible for m_location to be NULL when startUpdating is called, and non-null at stopUpdating. Since m_location is checked for NULL in startUpdating, I think it is unnecesary to check it again here. 
&gt; 
&gt; Note that for watches, sending the error here will result in two position unavailable error messages being sent for the same cause (once in startUpdating and once in stopUpdating). I believe this is valid behaviour, but it seems like unnecessary work.
&gt; 

m_location can result in NULL when QtMobility see no source of GPS on given device. For example on my linux desktop machine! So it is required to check for NULL both in startUpdate and stopUpdate as both gets called for either watch or single shot request (incase of page leave).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349133</commentid>
    <comment_count>7</comment_count>
      <attachid>81993</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-10 09:39:50 -0800</bug_when>
    <thetext>Created attachment 81993
updated patch

Updated patch as per comment #3.

From previous patch, 

-----------------------------

Patch implements,
    1) Enables ENABLE_CLIENT_BASED_GEOLOCATION for QtWebkit
    2) Qt&apos;s WebCore::GeolocationClient class GeolocationClientQt and assigns to WebCore::PageClient for Geolocation instance.
    3) Code to initialize and listening to QtMobility&apos;s geolocation service code is moved from Source/WebCore/platform/qt/GeolocationServiceQt.cpp to Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp
    4) Permission API&apos;s are moved to WebCore::GeolocationClient so the QtWebkit&apos;s GeolocationPermissionClientQt calls moved from ChromeClientQt.cpp to GeolocationClientQt.cpp


What patch doesnt implement/planned to implement, (Raise a new bug probably and mark it blocked to this bug? to keep the patch simple/easy to review)
    1) LayoutTest implementation for Client-Based geolocation. Need to implement new Mock-Client-based test classes. Disabled Geolocation cases in Skipped file till then.
    2) Cleaning up DRT Qt code related to old geolocation test framework. 
    3) raise a separate bug to remove/clean up GeolocationPermissionClientQt.cpp/.h code and move the logic to GeolocationClientQt.cpp itself.
    4) page/ChromeClient.h functions, requestGeolocationPermissionForFrame and cancelGeolocationPermissionRequestForFrame can be disabled/put under !non-client implementation for more readability. Will raise a separate bug for this as well.


Please provide your first-hand review comments before I can submit the final patch before above changes. (If chosen not to worry about patch size :)

--------------------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349378</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-02-10 14:19:36 -0800</bug_when>
    <thetext>Adding Kenneth since he&apos;s been poking at this kind of stuff lately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350570</commentid>
    <comment_count>9</comment_count>
      <attachid>81993</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2011-02-14 02:24:24 -0800</bug_when>
    <thetext>Comment on attachment 81993
updated patch

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

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:90
&gt; +    double timestamp = geoPosition.timestamp().toMSecsSinceEpoch();

Sorry for the previous confusing comment. This timestamp should be in seconds (not milliseconds) -- see Geolocation.cpp line 61 createGeoposition(GeolocationPosition *position)
Suggest:
double timestamp = geoPosition.timestamp().toMSecsSinceEpoch() / 1000.0;

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:93
&gt; +    double timestamp = (datetime.toTime_t() * 1000.00) + datetime.time().msec();

Same here. Suggest:
double timestamp = datetime.toTime_t() + datetime.time().msec() / 1000.0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350656</commentid>
    <comment_count>10</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-14 07:48:52 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 81993 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81993&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:90
&gt; &gt; +    double timestamp = geoPosition.timestamp().toMSecsSinceEpoch();
&gt; 
&gt; Sorry for the previous confusing comment. This timestamp should be in seconds (not milliseconds) -- see Geolocation.cpp line 61 createGeoposition(GeolocationPosition *position)
&gt; Suggest:
&gt; double timestamp = geoPosition.timestamp().toMSecsSinceEpoch() / 1000.0;
&gt; 
&gt; &gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:93
&gt; &gt; +    double timestamp = (datetime.toTime_t() * 1000.00) + datetime.time().msec();
&gt; 
&gt; Same here. Suggest:
&gt; double timestamp = datetime.toTime_t() + datetime.time().msec() / 1000.0;

This change was made sometime back in QtWebkit because spec says so. 

According to HTML5 GeoLocation standards, (Geo)Position interface’s timestamp should be of DOMTimestamp type and DOMTimestamp represents a number of milliseconds. 

Ref: http://dev.w3.org/geo/api/spec-source.html#position_interface 
       http://www.w3.org/TR/DOM-Level-3-Core/core.html#Core-DOMTimeStamp 

More info: https://bugs.webkit.org/show_bug.cgi?id=51100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350658</commentid>
    <comment_count>11</comment_count>
      <attachid>81993</attachid>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2011-02-14 07:53:20 -0800</bug_when>
    <thetext>Comment on attachment 81993
updated patch

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

&gt;&gt;&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:90
&gt;&gt;&gt; +    double timestamp = geoPosition.timestamp().toMSecsSinceEpoch();
&gt;&gt; 
&gt;&gt; Sorry for the previous confusing comment. This timestamp should be in seconds (not milliseconds) -- see Geolocation.cpp line 61 createGeoposition(GeolocationPosition *position)
&gt;&gt; Suggest:
&gt;&gt; double timestamp = geoPosition.timestamp().toMSecsSinceEpoch() / 1000.0;
&gt; 
&gt; This change was made sometime back in QtWebkit because spec says so. 
&gt; 
&gt; According to HTML5 GeoLocation standards, (Geo)Position interface’s timestamp should be of DOMTimestamp type and DOMTimestamp represents a number of milliseconds. 
&gt; 
&gt; Ref: http://dev.w3.org/geo/api/spec-source.html#position_interface 
&gt;        http://www.w3.org/TR/DOM-Level-3-Core/core.html#Core-DOMTimeStamp 
&gt; 
&gt; More info: https://bugs.webkit.org/show_bug.cgi?id=51100

Agreed. But notice that GeolocationPosition is a different class to Geoposition. GeolocationPosition expects seconds and will convert it to a DOMTimeStamp in milliseconds for the Geoposition (DOM) class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350664</commentid>
    <comment_count>12</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-14 08:11:35 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 81993 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81993&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:90
&gt; &gt;&gt;&gt; +    double timestamp = geoPosition.timestamp().toMSecsSinceEpoch();
&gt; &gt;&gt; 
&gt; &gt;&gt; Sorry for the previous confusing comment. This timestamp should be in seconds (not milliseconds) -- see Geolocation.cpp line 61 createGeoposition(GeolocationPosition *position)
&gt; &gt;&gt; Suggest:
&gt; &gt;&gt; double timestamp = geoPosition.timestamp().toMSecsSinceEpoch() / 1000.0;
&gt; &gt; 
&gt; &gt; This change was made sometime back in QtWebkit because spec says so. 
&gt; &gt; 
&gt; &gt; According to HTML5 GeoLocation standards, (Geo)Position interface’s timestamp should be of DOMTimestamp type and DOMTimestamp represents a number of milliseconds. 
&gt; &gt; 
&gt; &gt; Ref: http://dev.w3.org/geo/api/spec-source.html#position_interface 
&gt; &gt;        http://www.w3.org/TR/DOM-Level-3-Core/core.html#Core-DOMTimeStamp 
&gt; &gt; 
&gt; &gt; More info: https://bugs.webkit.org/show_bug.cgi?id=51100
&gt; 
&gt; Agreed. But notice that GeolocationPosition is a different class to Geoposition. GeolocationPosition expects seconds and will convert it to a DOMTimeStamp in milliseconds for the Geoposition (DOM) class.

Ah right. That change has to be cherry picked to our release branch! Thanks for the info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350827</commentid>
    <comment_count>13</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-14 12:47:43 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 81993 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81993&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:90
&gt; &gt;&gt;&gt; +    double timestamp = geoPosition.timestamp().toMSecsSinceEpoch();
&gt; &gt;&gt; 
&gt; &gt;&gt; Sorry for the previous confusing comment. This timestamp should be in seconds (not milliseconds) -- see Geolocation.cpp line 61 createGeoposition(GeolocationPosition *position)
&gt; &gt;&gt; Suggest:
&gt; &gt;&gt; double timestamp = geoPosition.timestamp().toMSecsSinceEpoch() / 1000.0;
&gt; &gt; 
&gt; &gt; This change was made sometime back in QtWebkit because spec says so. 
&gt; &gt; 
&gt; &gt; According to HTML5 GeoLocation standards, (Geo)Position interface’s timestamp should be of DOMTimestamp type and DOMTimestamp represents a number of milliseconds. 
&gt; &gt; 
&gt; &gt; Ref: http://dev.w3.org/geo/api/spec-source.html#position_interface 
&gt; &gt;        http://www.w3.org/TR/DOM-Level-3-Core/core.html#Core-DOMTimeStamp 
&gt; &gt; 
&gt; &gt; More info: https://bugs.webkit.org/show_bug.cgi?id=51100
&gt; 
&gt; Agreed. But notice that GeolocationPosition is a different class to Geoposition. GeolocationPosition expects seconds and will convert it to a DOMTimeStamp in milliseconds for the Geoposition (DOM) class.


John, I looked at the changes you suggested. Don&apos;t you think we will miss out on the milliseconds details (by rounding off the time by 1000) specially when we get the exact time details from location source? Atleast in case of QtMobility we do get exact time details and same details we would endup not giving to javascript developer. If this is true for most of ports we can create a different bug fix this with a dedicated test case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350840</commentid>
    <comment_count>14</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-14 13:13:00 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; 
&gt; John, I looked at the changes you suggested. Don&apos;t you think we will miss out on the milliseconds details (by rounding off the time by 1000) specially when we get the exact time details from location source? Atleast in case of QtMobility we do get exact time details and same details we would endup not giving to javascript developer. If this is true for most of ports we can create a different bug fix this with a dedicated test case?

Mahesh, I don&apos;t believe details will effectively be lost.  The timestamp is divided by a double (1000.0) and stored as a double, and then convertSecondsToDOMTimeStamp is multiplying by the same (1000.0).  If you&apos;re worried about losing floating point precision in hardware rounding off the double, then I suppose that is a warranted concern...but effectively it&apos;s only going to lose +/- 1 millisecond if ever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351158</commentid>
    <comment_count>15</comment_count>
    <who name="John Knottenbelt">jknotten</who>
    <bug_when>2011-02-15 02:26:39 -0800</bug_when>
    <thetext>I agree with Jarred, I think that any floating point error introduced here will be very minor indeed. However, it could be an argument for changing GeolocationPosition to storing time as an integer number of in milliseconds, to match Geoposition. I think that should be a separate bug though.

&gt; Mahesh, I don&apos;t believe details will effectively be lost.  The timestamp is divided by a double (1000.0) and stored as a double, and then convertSecondsToDOMTimeStamp is multiplying by the same (1000.0).  If you&apos;re worried about losing floating point precision in hardware rounding off the double, then I suppose that is a warranted concern...but effectively it&apos;s only going to lose +/- 1 millisecond if ever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351288</commentid>
    <comment_count>16</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-15 08:29:33 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; However, it could be an argument for changing GeolocationPosition to storing time as an integer number of in milliseconds, to match Geoposition. I think that should be a separate bug though.

+1 for that match up.  It would make sense to store in milliseconds so that it is an integer and so that it&apos;s the &quot;lowest common denominator&quot; and no chance of precision loss.  Not to mention, it&apos;s more consistent and understandable given that the DOM spec is talking about milliseconds.  We won&apos;t have to worry while coding if we&apos;re in seconds or milliseconds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351873</commentid>
    <comment_count>17</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-15 21:33:18 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; However, it could be an argument for changing GeolocationPosition to storing time as an integer number of in milliseconds, to match Geoposition. I think that should be a separate bug though.
&gt; 
&gt; +1 for that match up.  It would make sense to store in milliseconds so that it is an integer and so that it&apos;s the &quot;lowest common denominator&quot; and no chance of precision loss.  Not to mention, it&apos;s more consistent and understandable given that the DOM spec is talking about milliseconds.  We won&apos;t have to worry while coding if we&apos;re in seconds or milliseconds.

Thanks John, Jarred for your comments! Yes approach would make this easier to deal with. Which as you said should be raised and fixed in a diff bug. I will raise a different error.

updating patch as per john suggestion and uploading</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351878</commentid>
    <comment_count>18</comment_count>
      <attachid>82587</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-15 21:47:30 -0800</bug_when>
    <thetext>Created attachment 82587
patch

Updated as per comment 13 and comment 14. 

Follow up bugs raised, 
1. Implementing client-based layout test for qtwebkit - https://bugs.webkit.org/show_bug.cgi?id=54334
2. Cleanup/Move GeolocationPermissionClientQt.cpp/h implementation to GeolocationClientQt - https://bugs.webkit.org/show_bug.cgi?id=54338
3. GeolocationPosition to store timestamp as integer in miliseconds - https://bugs.webkit.org/show_bug.cgi?id=54529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351883</commentid>
    <comment_count>19</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-15 21:59:24 -0800</bug_when>
    <thetext>Attachment 82587 did not build on qt:
Build output: http://queues.webkit.org/results/7920152</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352035</commentid>
    <comment_count>20</comment_count>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-16 06:44:27 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Attachment 82587 [details] did not build on qt:
&gt; Build output: http://queues.webkit.org/results/7920152

False alarm! This patch needs a clean build. Can anyone point to someone who can issue a clean build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352059</commentid>
    <comment_count>21</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-16 07:37:57 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; Attachment 82587 [details] [details] did not build on qt:
&gt; &gt; Build output: http://queues.webkit.org/results/7920152
&gt; 
&gt; False alarm! This patch needs a clean build. Can anyone point to someone who can issue a clean build?

Just ping me on #qtwebkit before landing to make a clean build on bots.

I&apos;m inspecting this incremental build problem now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352089</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-16 08:23:54 -0800</bug_when>
    <thetext>Qt build is OK with a clean build. I&apos;ll try to figure out why incremental build failed and try to fix build system to avoid similar problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352134</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-16 09:26:37 -0800</bug_when>
    <thetext>I got it. :)

s_factoryFunction, positionChanged, errorOccurred, setError, ...
are defined in an ENABLE_CLIENT_BASED_GEOLOCATION ifdef block.
But ufortunately GNU make can&apos;t trigger rebuild if a value of this
macro changes. :(

Clean build would help for this problem, but I prefer touching
WebCore/page/Geolocation.h and WebCore/platform/GeolocationService.h 
(eg. add a new line at the end of files), because it will solve the 
incremental build problem for all developers, not only for the buildbots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352146</commentid>
    <comment_count>24</comment_count>
      <attachid>82654</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-16 09:51:08 -0800</bug_when>
    <thetext>Created attachment 82654
patch

updated patch as per Ossy suggestion comment #23
Touched couple of headers to act like a clean build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352671</commentid>
    <comment_count>25</comment_count>
      <attachid>82654</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-02-17 01:16:35 -0800</bug_when>
    <thetext>Comment on attachment 82654
patch

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

&gt; Source/WebKit/qt/WebCoreSupport/ChromeClientQt.h:187
&gt; +        virtual void requestGeolocationPermissionForFrame(Frame*, Geolocation*) {}
&gt; +        virtual void cancelGeolocationPermissionRequestForFrame(Frame*, Geolocation*) {}

wrong style, needs a space in the {}. ie { }

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:50
&gt; +    m_location = QGeoPositionInfoSource::createDefaultSource(this);

Can&apos;t this be in the above initializer? ie , m_location(QGeolo....

Also now we will create a GeolocationClientQt even if it is useless. Maybe you can let the constructor take the QGeoPositionInfoSource*. But please take care of the right ownership so that we dont start leaking

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:55
&gt; +        connect(m_location, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdated(QGeoPositionInfo)));
&gt; +
&gt; +}

unneeded newline

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:90
&gt; +    double timestamp = geoPosition.timestamp().toMSecsSinceEpoch() / 1000;

maybe rename to timeStampInSeconds.

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:96
&gt; +    m_lastPosition = GeolocationPosition::create(timestamp, latitude, longitude,

Shouldn&apos;t we free the previous position?

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.h:67
&gt; +    RefPtr&lt;GeolocationPosition&gt; m_lastPosition;

Ah it is a refptr, ok! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352986</commentid>
    <comment_count>26</comment_count>
      <attachid>82823</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-17 09:48:31 -0800</bug_when>
    <thetext>Created attachment 82823
patch

Thanks for review Kenneth. Updated patch as per comment #25

Now QGeoPositionInfoSource is created only when location request is made, 
1) Instance of location service isnt created if the page doesn&apos;t need it. 2) If a page fails to get a instance of location service, it retries on next request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353463</commentid>
    <comment_count>27</comment_count>
      <attachid>82823</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-02-18 00:31:44 -0800</bug_when>
    <thetext>Comment on attachment 82823
patch

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

&gt; Source/WebKit/qt/ChangeLog:9
&gt; +        Implements client based geolocation for qtwebkit. New client based geolocation contains permission API&apos;s as well
&gt; +        so removed the implementation from ChromeClientQt.cpp. 

Please try to keep these within 80 chars in the ChangeLogs

&gt; Source/WebKit/qt/WebCoreSupport/GeolocationClientQt.cpp:63
&gt; +void GeolocationClientQt::positionUpdated(const QGeoPositionInfo &amp;geoPosition)

wrong &amp; alignment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353731</commentid>
    <comment_count>28</comment_count>
      <attachid>82823</attachid>
    <who name="Mahesh Kulkarni">maheshk</who>
    <bug_when>2011-02-18 12:01:49 -0800</bug_when>
    <thetext>Comment on attachment 82823
patch

Removing auto commit as made few changes as per comment 27. Will manually check-it in with some committers help!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353804</commentid>
    <comment_count>29</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-18 13:41:50 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/79028</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81688</attachid>
            <date>2011-02-08 14:09:18 -0800</date>
            <delta_ts>2011-02-10 09:39:50 -0800</delta_ts>
            <desc>first-look patch</desc>
            <filename>42629.patch</filename>
            <type>text/plain</type>
            <size>24920</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3OTY3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMDggIE1haGVzaCBL
dWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1wbGVtZW50cyBjbGllbnQgYmFzZWQg
Z2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBSZW1vdmVkIG9sZCBjb2RlIHJlbGF0ZWQgdG8gbm9u
LWNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbgorCisgICAgICAgIE5vIHRlc3RzIGFzIHlldC4gVGhp
cyB3aWxsIGJlIHJhaXNlZCBhcyBkaWZmZXJlbnQgYnVnIGFzIG5ldyBtb2NrIGNsaWVudCBpbXBs
ZW1lbnRhdGlvbiBuZWVkIHRvIGJlIGRvbmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBmZWF0dXJlcy5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9u
U2VydmljZVF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMDItMDggIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCShyZXZpc2lvbiA3NzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDUyLDEyICszNDUyLDExIEBAIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9RVF9CRUFSRVI9MSkgewogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfR0VP
TE9DQVRJT049MSkgewotICAgIERFRklORVMgKz0gV1RGX1VTRV9QUkVFTVBUX0dFT0xPQ0FUSU9O
X1BFUk1JU1NJT04KLSAgICBIRUFERVJTICs9IFwKLSAgICAgICAgcGxhdGZvcm0vcXQvR2VvbG9j
YXRpb25TZXJ2aWNlUXQuaAotICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBwbGF0Zm9ybS9xdC9H
ZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAKLQorICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgJCRQ
V0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuaAorICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCisgCiAgICAgQ09ORklHICs9IG1vYmlsaXR5CiAgICAg
TU9CSUxJVFkgKz0gbG9jYXRpb24KIApJbmRleDogU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkocmV2aXNpb24gNzc1
MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9mZWF0dXJlcy5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RIUkVBREVECiAh
Q09ORklHKFFURElSX2J1aWxkKTohY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0dFT0xPQ0FUSU9O
PS4pIHsKICAgICBjb250YWlucyhNT0JJTElUWV9DT05GSUcsIGxvY2F0aW9uKSB7CiAgICAgICAg
REVGSU5FUyArPSBFTkFCTEVfR0VPTE9DQVRJT049MQorICAgICAgIERFRklORVMgKz0gRU5BQkxF
X0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTj0xCiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNlUXQuY3BwCShyZXZp
c2lvbiA3NzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2Vy
dmljZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VRdC5oIgotCi0jaW5jbHVk
ZSAiR2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgotI2luY2x1ZGUgIlBv
c2l0aW9uRXJyb3IuaCIKLSNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFF0TW9iaWxpdHk7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR2VvbG9jYXRpb25T
ZXJ2aWNlOjpGYWN0b3J5RnVuY3Rpb24qIEdlb2xvY2F0aW9uU2VydmljZTo6c19mYWN0b3J5RnVu
Y3Rpb24gPSAmR2VvbG9jYXRpb25TZXJ2aWNlUXQ6OmNyZWF0ZTsKLQotR2VvbG9jYXRpb25TZXJ2
aWNlKiBHZW9sb2NhdGlvblNlcnZpY2VRdDo6Y3JlYXRlKEdlb2xvY2F0aW9uU2VydmljZUNsaWVu
dCogY2xpZW50KQotewotICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlUXQoY2xpZW50
KTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlUXQ6Okdlb2xvY2F0aW9uU2VydmljZVF0KEdlb2xv
Y2F0aW9uU2VydmljZUNsaWVudCogY2xpZW50KQotICAgIDogR2VvbG9jYXRpb25TZXJ2aWNlKGNs
aWVudCkKLSAgICAsIG1fbGFzdFBvc2l0aW9uKDApCi0gICAgLCBtX2xhc3RFcnJvcigwKQotewot
ICAgIG1fbG9jYXRpb24gPSBRR2VvUG9zaXRpb25JbmZvU291cmNlOjpjcmVhdGVEZWZhdWx0U291
cmNlKHRoaXMpOwotCi0gICAgaWYgKG1fbG9jYXRpb24pCi0gICAgICAgIGNvbm5lY3QobV9sb2Nh
dGlvbiwgU0lHTkFMKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRpb25JbmZvKSksIHRoaXMsIFNM
T1QocG9zaXRpb25VcGRhdGVkKFFHZW9Qb3NpdGlvbkluZm8pKSk7Ci19Ci0KLUdlb2xvY2F0aW9u
U2VydmljZVF0Ojp+R2VvbG9jYXRpb25TZXJ2aWNlUXQoKQotewotICAgIGRlbGV0ZSBtX2xvY2F0
aW9uOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZVF0Ojpwb3NpdGlvblVwZGF0ZWQoY29u
c3QgUUdlb1Bvc2l0aW9uSW5mbyAmZ2VvUG9zaXRpb24pCi17Ci0gICAgaWYgKCFnZW9Qb3NpdGlv
bi5pc1ZhbGlkKCkpCi0gICAgICAgIGVycm9yT2NjdXJyZWQoKTsKLQotICAgIFFHZW9Db29yZGlu
YXRlIGNvb3JkID0gZ2VvUG9zaXRpb24uY29vcmRpbmF0ZSgpOwotICAgIGRvdWJsZSBsYXRpdHVk
ZSA9IGNvb3JkLmxhdGl0dWRlKCk7Ci0gICAgZG91YmxlIGxvbmdpdHVkZSA9IGNvb3JkLmxvbmdp
dHVkZSgpOwotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IChnZW9Qb3NpdGlvbi5jb29yZGlu
YXRlKCkudHlwZSgpID09IFFHZW9Db29yZGluYXRlOjpDb29yZGluYXRlM0QpOwotICAgIGRvdWJs
ZSBhbHRpdHVkZSA9IGNvb3JkLmFsdGl0dWRlKCk7Ci0KLSAgICBkb3VibGUgYWNjdXJhY3kgPSBn
ZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6SG9yaXpvbnRhbEFjY3VyYWN5
KTsKLQotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uaGFz
QXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OlZlcnRpY2FsQWNjdXJhY3kpOwotICAgIGRvdWJs
ZSBhbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbklu
Zm86OlZlcnRpY2FsQWNjdXJhY3kpOwotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSAgZ2Vv
UG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OkRpcmVjdGlvbik7Ci0gICAg
ZG91YmxlIGhlYWRpbmcgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6
RGlyZWN0aW9uKTsKLQotICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IGdlb1Bvc2l0aW9uLmhhc0F0
dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpHcm91bmRTcGVlZCk7Ci0gICAgZG91YmxlIHNwZWVk
ID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86Okdyb3VuZFNwZWVkKTsK
LQotICAgIFJlZlB0cjxDb29yZGluYXRlcz4gY29vcmRpbmF0ZXMgPSBDb29yZGluYXRlczo6Y3Jl
YXRlKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFj
Y3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
dmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7Ci0KLSNpZiBRVF9W
RVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKLSAgICBtX2xhc3RQb3NpdGlvbiA9
IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCBnZW9Qb3NpdGlvbi50
aW1lc3RhbXAoKS50b01TZWNzU2luY2VFcG9jaCgpKTsKLSNlbHNlCi0gICAgUURhdGVUaW1lIHRp
bWVzdGFtcCA9IGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpOwotICAgIG1fbGFzdFBvc2l0aW9uID0g
R2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNlKCksICh0aW1lc3RhbXAudG9U
aW1lX3QoKSAqIDEwMDAuMDApICsgdGltZXN0YW1wLnRpbWUoKS5tc2VjKCkpOwotI2VuZGlmCi0g
ICAgcG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgR2VvbG9jYXRpb25TZXJ2aWNlUXQ6OnN0
YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKikKLXsKLSAgICBtX2xhc3RQb3NpdGlvbiA9IDA7
Ci0KLSAgICBpZiAoIW1fbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFRPRE86IGhhbmRsZSBlbmFibGVIaWdoQWNjdXJhY3koKQotCi0gICAgbV9sb2NhdGlvbi0+c3Rh
cnRVcGRhdGVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2
aWNlUXQ6OnN0b3BVcGRhdGluZygpCi17Ci0gICAgaWYgKG1fbG9jYXRpb24pCi0gICAgICAgIG1f
bG9jYXRpb24tPnN0b3BVcGRhdGVzKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNl
UXQuaAkocmV2aXNpb24gNzc1MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9HZW9s
b2NhdGlvblNlcnZpY2VRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlUXRfaAotI2RlZmluZSBHZW9sb2NhdGlvblNlcnZpY2VR
dF9oCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKLSNpbmNsdWRlIDxRR2VvUG9z
aXRpb25JbmZvU291cmNlPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotLy8gRklYTUU6IFJl
bW92ZSB1c2FnZSBvZiAidXNpbmcgbmFtZXNwYWNlIiBpbiBhIGhlYWRlciBmaWxlLgotLy8gVGhl
cmUgaXMgYnVnIGluIHF0TW9iaWxpdHkgc2lnbmFsIG5hbWVzIGFyZSBub3QgZnVsbCBxdWFsaWZp
ZWQgd2hlbiB1c2VkIHdpdGggbmFtZXNwYWNlCi0vLyBRdE1vYmlsaXR5IG5hbWVzcGFjZSBpbiBz
bG90cyB0aHJvd3MgdXAgZXJyb3IgYW5kIGl0cyByZXF1aXJlZCB0byBiZSBmaXhlZCBpbiBxdG1v
YmlsaXR5LgotdXNpbmcgbmFtZXNwYWNlIFF0TW9iaWxpdHk7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGltcGxlbWVudGF0aW9uIG9mIGEgR2VvbG9j
YXRpb25TZXJ2aWNlIGZvciBxdFdlYmtpdC4KLS8vIEl0IHVzZXMgUXRNb2JpbGl0eSAodjEuMC4w
KSBsb2NhdGlvbiBzZXJ2aWNlIHRvIGdldCBwb3NpdGlvbnMKLWNsYXNzIEdlb2xvY2F0aW9uU2Vy
dmljZVF0IDogcHVibGljIFFPYmplY3QsIEdlb2xvY2F0aW9uU2VydmljZSB7Ci0gICAgUV9PQkpF
Q1QKLQotcHVibGljOgotICAgIHN0YXRpYyBHZW9sb2NhdGlvblNlcnZpY2UqIGNyZWF0ZShHZW9s
b2NhdGlvblNlcnZpY2VDbGllbnQqKTsKLQotICAgIEdlb2xvY2F0aW9uU2VydmljZVF0KEdlb2xv
Y2F0aW9uU2VydmljZUNsaWVudCopOwotICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uU2VydmljZVF0
KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7Ci0KLSAgICB2aXJ0dWFsIEdlb3Bvc2l0
aW9uKiBsYXN0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xhc3RQb3NpdGlvbi5nZXQoKTsg
fQotICAgIHZpcnR1YWwgUG9zaXRpb25FcnJvciogbGFzdEVycm9yKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0RXJyb3IuZ2V0KCk7IH0KLQotcHVibGljIFFfU0xPVFM6Ci0gICAgLy8gUUdlb1Bvc2l0
aW9uSW5mb1NvdXJjZQotICAgIHZvaWQgcG9zaXRpb25VcGRhdGVkKGNvbnN0IFFHZW9Qb3NpdGlv
bkluZm8mKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fbGFzdFBvc2l0
aW9uOwotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBtX2xhc3RFcnJvcjsKLQotICAgIFF0TW9i
aWxpdHk6OlFHZW9Qb3NpdGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRpb247Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VRdF9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzc5NjcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTAyLTA4ICBNYWhlc2gg
S3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRVF0gSW1wbGVtZW50IGNsaWVudCBiYXNl
ZCBnZW9sb2NhdGlvbiBmb3IgcXRwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MjYyOQorCisgICAgICAgIEltcGxlbWVudHMgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGZvciBxdHdlYmtpdC4gTmV3IGNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbiBj
b250YWlucyBwZXJtaXNzaW9uIEFQSSdzIGFzIHdlbGwKKyAgICAgICAgc28gcmVtb3ZlZCB0aGUg
aW1wbGVtZW50YXRpb24gZnJvbSBDaHJvbWVDbGllbnRRdC5jcHAuIAorCisgICAgICAgICogQXBp
L3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRl
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RGb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25D
bGllbnRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRR
dDo6R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNs
aWVudFF0Ojp+R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbkNsaWVudFF0OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvbkNsaWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25DbGllbnRRdDo6c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvbkNsaWVudFF0OjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25DbGllbnRRdDo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5KToKKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6bGFzdFBvc2l0aW9uKToKKwogMjAx
MS0wMi0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2
aXNpb24gNzc1MzUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0
LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5j
bHVkZSAiR2VvbG9jYXRpb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlz
c2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBAIC0zMjMsNiArMzI0LDkgQEAgUVdlYlBhZ2VQcml2
YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZwogICAgIHBhZ2VDbGllbnRzLmRldmljZU9yaWVu
dGF0aW9uQ2xpZW50ID0gbmV3IERldmljZU9yaWVudGF0aW9uQ2xpZW50UXQocSk7CiAgICAgcGFn
ZUNsaWVudHMuZGV2aWNlTW90aW9uQ2xpZW50ID0gbmV3IERldmljZU1vdGlvbkNsaWVudFF0KHEp
OwogI2VuZGlmCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIHBhZ2VDbGllbnRzLmdlb2xv
Y2F0aW9uQ2xpZW50ID0gbmV3IEdlb2xvY2F0aW9uQ2xpZW50UXQocSk7CisjZW5kaWYKICAgICBw
YWdlID0gbmV3IFBhZ2UocGFnZUNsaWVudHMpOwogCiAgICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNl
dHRpbmdzKHBhZ2UtPnNldHRpbmdzKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDc3NTM1KQorKysg
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2VuZGlmCi0jaW5jbHVkZSAiR2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIKQEAgLTYwMywy
MSArNjAyLDYgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0Q3Vyc29yKGNvbnN0IEN1cgogI2Vu
ZGlmCiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Np
b25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKLXsKLSNp
ZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFt
ZVByaXZhdGU6OmtpdChmcmFtZSk7Ci0gICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6
Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNz
aW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKLSNlbmRpZgotfQotCi12b2lkIENo
cm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUo
RnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCi17Ci0jaWYgRU5BQkxFKEdF
T0xPQ0FUSU9OKQotICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZnJhbWUpOwotICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7Ci0jZW5kaWYKLX0KIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0
LmgJKHJldmlzaW9uIDc3NTM1KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsOCArMTg1LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXco
Y29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBH
ZW9sb2NhdGlvbiopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdl
b2xvY2F0aW9uKikge30KKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikge30KIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAg
ICAgICAgdmlydHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdE
aXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9j
YXRpb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5j
bHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJv
ci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCisjaW5jbHVk
ZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJx
d2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgorI2luY2x1ZGUgInF3ZWJwYWdl
LmgiCisjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgorCit1c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0
eTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciBmYWlsZWRUb1N0
YXJ0U2VydmljZUVycm9yTWVzc2FnZVtdID0gIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBz
ZXJ2aWNlIjsKKworR2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdChRV2Vi
UGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9sYXN0UG9zaXRpb24oMCkK
K3sKKyAgICBtX2xvY2F0aW9uID0gUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZTo6Y3JlYXRlRGVmYXVs
dFNvdXJjZSh0aGlzKTsKKworICAgIGlmIChtX2xvY2F0aW9uKQorICAgICAgICBjb25uZWN0KG1f
bG9jYXRpb24sIFNJR05BTChwb3NpdGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9uSW5mbykpLCB0aGlz
LCBTTE9UKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRpb25JbmZvKSkpOworCit9CisKK0dlb2xv
Y2F0aW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlvbkNsaWVudFF0KCkKK3sKKyAgICBkZWxldGUgbV9s
b2NhdGlvbjsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpnZW9sb2NhdGlvbkRlc3Ry
b3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRR
dDo6cG9zaXRpb25VcGRhdGVkKGNvbnN0IFFHZW9Qb3NpdGlvbkluZm8gJmdlb1Bvc2l0aW9uKQor
eworICAgIGlmICghZ2VvUG9zaXRpb24uaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBRR2VvQ29vcmRpbmF0ZSBjb29yZCA9IGdlb1Bvc2l0aW9uLmNvb3JkaW5hdGUoKTsKKyAgICBk
b3VibGUgbGF0aXR1ZGUgPSBjb29yZC5sYXRpdHVkZSgpOworICAgIGRvdWJsZSBsb25naXR1ZGUg
PSBjb29yZC5sb25naXR1ZGUoKTsKKyAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUgPSAoZ2VvUG9z
aXRpb24uY29vcmRpbmF0ZSgpLnR5cGUoKSA9PSBRR2VvQ29vcmRpbmF0ZTo6Q29vcmRpbmF0ZTNE
KTsKKyAgICBkb3VibGUgYWx0aXR1ZGUgPSBjb29yZC5hbHRpdHVkZSgpOworCisgICAgZG91Ymxl
IGFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86Okhvcml6
b250YWxBY2N1cmFjeSk7CisKKyAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IGdl
b1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpWZXJ0aWNhbEFjY3VyYWN5
KTsKKyAgICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShR
R2VvUG9zaXRpb25JbmZvOjpWZXJ0aWNhbEFjY3VyYWN5KTsKKworICAgIGJvb2wgcHJvdmlkZXNI
ZWFkaW5nID0gIGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpEaXJl
Y3Rpb24pOworICAgIGRvdWJsZSBoZWFkaW5nID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Q
b3NpdGlvbkluZm86OkRpcmVjdGlvbik7CisKKyAgICBib29sIHByb3ZpZGVzU3BlZWQgPSBnZW9Q
b3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6R3JvdW5kU3BlZWQpOworICAg
IGRvdWJsZSBzcGVlZCA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpH
cm91bmRTcGVlZCk7CisKKyAgICBtX2xhc3RQb3NpdGlvbiA9IEdlb2xvY2F0aW9uUG9zaXRpb246
OmNyZWF0ZShnZW9Qb3NpdGlvbi50aW1lc3RhbXAoKS50b1RpbWVfdCgpLCBsYXRpdHVkZSwgbG9u
Z2l0dWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRl
c0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBo
ZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdl
ID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKG1fcGFnZSk7CisgICAgcGFnZS0+Z2VvbG9jYXRpb25D
b250cm9sbGVyKCktPnBvc2l0aW9uQ2hhbmdlZChtX2xhc3RQb3NpdGlvbi5nZXQoKSk7Cit9CisK
K3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6c3RhcnRVcGRhdGluZygpCit7CisgICAgaWYgKCFt
X2xvY2F0aW9uKSB7CisgICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBRV2ViUGFnZVByaXZh
dGU6OmNvcmUobV9wYWdlKTsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJy
b3I+IGVycm9yID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKEdlb2xvY2F0aW9uRXJyb3I6OlBv
c2l0aW9uVW5hdmFpbGFibGUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKTsKKyAg
ICAgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmVycm9yT2NjdXJyZWQoZXJyb3Iu
Z2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sb2NhdGlvbi0+c3RhcnRV
cGRhdGVzKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6c3RvcFVwZGF0aW5nKCkK
K3sKKyAgICBpZiAoIW1fbG9jYXRpb24pIHsKKyAgICAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9
IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShtX3BhZ2UpOworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6
R2VvbG9jYXRpb25FcnJvcj4gZXJyb3IgPSBHZW9sb2NhdGlvbkVycm9yOjpjcmVhdGUoR2VvbG9j
YXRpb25FcnJvcjo6UG9zaXRpb25VbmF2YWlsYWJsZSwgZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJv
ck1lc3NhZ2UpOworICAgICAgICBwYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+ZXJyb3JP
Y2N1cnJlZChlcnJvci5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2xv
Y2F0aW9uLT5zdG9wVXBkYXRlcygpOworfQorCisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6
c2V0RW5hYmxlSGlnaEFjY3VyYWN5KGJvb2wpCit7CisgICAgLy8gcXRtb2JpbGl0eSBzdXBwb3J0
cyBvbmx5IEdQUyBhcyBvZiBub3cgc28gaGlnaCBhY2N1cmFjeSBpcyBlbmFibGVkIGJ5IGRlZmF1
bHQKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbihHZW9s
b2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAgaWYgKCFnZW9sb2NhdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6Omtp
dChnZW9sb2NhdGlvbi0+ZnJhbWUoKSk7CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50
UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJt
aXNzaW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKK30KKwordm9pZCBHZW9sb2Nh
dGlvbkNsaWVudFF0OjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdChHZW9sb2NhdGlvbiogZ2VvbG9j
YXRpb24pCit7CisgICAgaWYgKCFnZW9sb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+
ZnJhbWUoKSk7CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9y
RnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVu
dFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudFF0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvbkNsaWVudFF0X2gKKyNkZWZpbmUgR2VvbG9jYXRp
b25DbGllbnRRdF9oCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudC5oIgorI2luY2x1ZGUg
PFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisvLyBG
SVhNRTogUmVtb3ZlIHVzYWdlIG9mICJ1c2luZyBuYW1lc3BhY2UiIGluIGEgaGVhZGVyIGZpbGUu
CisvLyBUaGVyZSBpcyBidWcgaW4gcXRNb2JpbGl0eSBzaWduYWwgbmFtZXMgYXJlIG5vdCBmdWxs
IHF1YWxpZmllZCB3aGVuIHVzZWQgd2l0aCBuYW1lc3BhY2UKKy8vIFF0TW9iaWxpdHkgbmFtZXNw
YWNlIGluIHNsb3RzIHRocm93cyB1cCBlcnJvciBhbmQgaXRzIHJlcXVpcmVkIHRvIGJlIGZpeGVk
IGluIHF0bW9iaWxpdHkuCit1c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKKworY2xhc3MgUVdl
YlBhZ2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBh
IGltcGxlbWVudGF0aW9uIG9mIGEgR2VvbG9jYXRpb25TZXJ2aWNlIGZvciBxdFdlYmtpdC4KKy8v
IEl0IHVzZXMgUXRNb2JpbGl0eSAodjEuMC4wKSBsb2NhdGlvbiBzZXJ2aWNlIHRvIGdldCBwb3Np
dGlvbnMKK2NsYXNzIEdlb2xvY2F0aW9uQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGlj
IEdlb2xvY2F0aW9uQ2xpZW50IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgR2VvbG9j
YXRpb25DbGllbnRRdChRV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uQ2xpZW50
UXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvbkRlc3Ryb3llZCgpOworICAgIHZp
cnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGlu
ZygpOworCisgICAgdm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCk7CisgICAgdmlydHVh
bCBHZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSB7IHJldHVybiBtX2xhc3RQb3Np
dGlvbi5nZXQoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKEdlb2xv
Y2F0aW9uKik7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KEdlb2xv
Y2F0aW9uKik7CisKK3ByaXZhdGUgUV9TTE9UUzoKKyAgICAvLyBRR2VvUG9zaXRpb25JbmZvU291
cmNlCisgICAgdm9pZCBwb3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyYpOwor
Citwcml2YXRlOgorICAgIFFXZWJQYWdlKiBtX3BhZ2U7CisgICAgUmVmUHRyPEdlb2xvY2F0aW9u
UG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOworICAgIFF0TW9iaWxpdHk6OlFHZW9Qb3NpdGlvbklu
Zm9Tb3VyY2UqIG1fbG9jYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBHZW9sb2NhdGlvbkNsaWVudFF0X2gKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3OTY3KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTEtMDItMDggIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJ
bXBsZW1lbnQgY2xpZW50IGJhc2VkIGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgRGlz
YWJsZSBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdCBjYXNlIHVudGlsIGNsaWVudC1iYXNlZCBtb2Nr
IGxheW91dCBjb250cm9sbGVyIGlzIGltcGxlbWVudGVkLgorCisgICAgICAgICogcGxhdGZvcm0v
cXQvU2tpcHBlZDoKKwogMjAxMS0wMi0wOCAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CiAKICAgICAgICAgVW5za2lwIHNvbWUgaW5zcGVjdG9yIHRlc3RzIHRoYXQgYXJl
IHBhc3NpbmcgbG9jYWxseS4gVGhlIGJ1Z3MgYXJlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBw
ZWQJKHJldmlzaW9uIDc3NTM1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAko
d29ya2luZyBjb3B5KQpAQCAtNTAxNywzICs1MDE3LDcgQEAgbWVkaWEvdmlkZW8tY3VycmVudFRp
bWUtZGVsYXkuaHRtbAogIyBbUXRdUkVHUkVTU0lPTihyNzY5NTEpOiBtZWRpYS9jb250cm9scy13
aXRob3V0LXByZWxvYWQuaHRtbCBmYWlscwogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTM2NzQKIG1lZGlhL2NvbnRyb2xzLXdpdGhvdXQtcHJlbG9hZC5odG1sCisK
KyMgLS0tLS0gRklYTUU6IFF0V2Via2l0IHN1cHBvcnRzIGNsaWVudCBiYXNlZCBhbmQgTGF5b3V0
VGVzdCBmb3IgdGhlIHNhbWUgaXMgeWV0IHRvIGJlIGltcGxlbWVudGVkIC0tLS0tLSAKK2Zhc3Qv
ZG9tL0dlb2xvY2F0aW9uCitmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZ2VvbG9j
YXRpb24uaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81993</attachid>
            <date>2011-02-10 09:39:50 -0800</date>
            <delta_ts>2011-02-15 21:47:30 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>42629.patch</filename>
            <type>text/plain</type>
            <size>24792</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MjMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTAgIE1haGVzaCBL
dWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1wbGVtZW50cyBjbGllbnQgYmFzZWQg
Z2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBSZW1vdmVkIG9sZCBjb2RlIHJlbGF0ZWQgdG8gbm9u
LWNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbgorCisgICAgICAgIE5vIHRlc3RzIGFzIHlldC4gVGhp
cyB3aWxsIGJlIHJhaXNlZCBhcyBkaWZmZXJlbnQgYnVnIGFzIG5ldyBtb2NrIGNsaWVudCBpbXBs
ZW1lbnRhdGlvbiBuZWVkIHRvIGJlIGRvbmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBmZWF0dXJlcy5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9u
U2VydmljZVF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMDItMTAgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI3ODIxOS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3NzUzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUyLDEyICszNDUyLDExIEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9RVF9CRUFSRVI9MSkgewogfQogCiBjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfR0VPTE9DQVRJT049MSkgewotICAgIERFRklORVMgKz0gV1RGX1VTRV9Q
UkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04KLSAgICBIRUFERVJTICs9IFwKLSAgICAgICAg
cGxhdGZvcm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNlUXQuaAotICAgIFNPVVJDRVMgKz0gXAotICAg
ICAgICBwbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAKLQorICAgICBIRUFERVJT
ICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0
aW9uQ2xpZW50UXQuaAorICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCisgCiAgICAgQ09ORklH
ICs9IG1vYmlsaXR5CiAgICAgTU9CSUxJVFkgKz0gbG9jYXRpb24KIApJbmRleDogU291cmNlL1dl
YkNvcmUvZmVhdHVyZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVz
LnByaQkocmV2aXNpb24gNzc1MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9mZWF0dXJlcy5wcmkJKHdv
cmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U0lOR0xFX1RIUkVBREVECiAhQ09ORklHKFFURElSX2J1aWxkKTohY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX0dFT0xPQ0FUSU9OPS4pIHsKICAgICBjb250YWlucyhNT0JJTElUWV9DT05GSUcsIGxv
Y2F0aW9uKSB7CiAgICAgICAgREVGSU5FUyArPSBFTkFCTEVfR0VPTE9DQVRJT049MQorICAgICAg
IERFRklORVMgKz0gRU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTj0xCiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuY3BwCShyZXZpc2lvbiA3NzUzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZp
Y2VRdC5oIgotCi0jaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJHZW9wb3NpdGlv
bi5oIgotI2luY2x1ZGUgIlBvc2l0aW9uRXJyb3IuaCIKLSNpbmNsdWRlICJQb3NpdGlvbk9wdGlv
bnMuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFF0TW9iaWxpdHk7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotR2VvbG9jYXRpb25TZXJ2aWNlOjpGYWN0b3J5RnVuY3Rpb24qIEdlb2xvY2F0aW9uU2Vy
dmljZTo6c19mYWN0b3J5RnVuY3Rpb24gPSAmR2VvbG9jYXRpb25TZXJ2aWNlUXQ6OmNyZWF0ZTsK
LQotR2VvbG9jYXRpb25TZXJ2aWNlKiBHZW9sb2NhdGlvblNlcnZpY2VRdDo6Y3JlYXRlKEdlb2xv
Y2F0aW9uU2VydmljZUNsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiBuZXcgR2VvbG9jYXRp
b25TZXJ2aWNlUXQoY2xpZW50KTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlUXQ6Okdlb2xvY2F0
aW9uU2VydmljZVF0KEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCogY2xpZW50KQotICAgIDogR2Vv
bG9jYXRpb25TZXJ2aWNlKGNsaWVudCkKLSAgICAsIG1fbGFzdFBvc2l0aW9uKDApCi0gICAgLCBt
X2xhc3RFcnJvcigwKQotewotICAgIG1fbG9jYXRpb24gPSBRR2VvUG9zaXRpb25JbmZvU291cmNl
OjpjcmVhdGVEZWZhdWx0U291cmNlKHRoaXMpOwotCi0gICAgaWYgKG1fbG9jYXRpb24pCi0gICAg
ICAgIGNvbm5lY3QobV9sb2NhdGlvbiwgU0lHTkFMKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRp
b25JbmZvKSksIHRoaXMsIFNMT1QocG9zaXRpb25VcGRhdGVkKFFHZW9Qb3NpdGlvbkluZm8pKSk7
Ci19Ci0KLUdlb2xvY2F0aW9uU2VydmljZVF0Ojp+R2VvbG9jYXRpb25TZXJ2aWNlUXQoKQotewot
ICAgIGRlbGV0ZSBtX2xvY2F0aW9uOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZVF0Ojpw
b3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyAmZ2VvUG9zaXRpb24pCi17Ci0g
ICAgaWYgKCFnZW9Qb3NpdGlvbi5pc1ZhbGlkKCkpCi0gICAgICAgIGVycm9yT2NjdXJyZWQoKTsK
LQotICAgIFFHZW9Db29yZGluYXRlIGNvb3JkID0gZ2VvUG9zaXRpb24uY29vcmRpbmF0ZSgpOwot
ICAgIGRvdWJsZSBsYXRpdHVkZSA9IGNvb3JkLmxhdGl0dWRlKCk7Ci0gICAgZG91YmxlIGxvbmdp
dHVkZSA9IGNvb3JkLmxvbmdpdHVkZSgpOwotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IChn
ZW9Qb3NpdGlvbi5jb29yZGluYXRlKCkudHlwZSgpID09IFFHZW9Db29yZGluYXRlOjpDb29yZGlu
YXRlM0QpOwotICAgIGRvdWJsZSBhbHRpdHVkZSA9IGNvb3JkLmFsdGl0dWRlKCk7Ci0KLSAgICBk
b3VibGUgYWNjdXJhY3kgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6
SG9yaXpvbnRhbEFjY3VyYWN5KTsKLQotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5
ID0gZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OlZlcnRpY2FsQWNj
dXJhY3kpOwotICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uYXR0cmli
dXRlKFFHZW9Qb3NpdGlvbkluZm86OlZlcnRpY2FsQWNjdXJhY3kpOwotCi0gICAgYm9vbCBwcm92
aWRlc0hlYWRpbmcgPSAgZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86
OkRpcmVjdGlvbik7Ci0gICAgZG91YmxlIGhlYWRpbmcgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUo
UUdlb1Bvc2l0aW9uSW5mbzo6RGlyZWN0aW9uKTsKLQotICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9
IGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpHcm91bmRTcGVlZCk7
Ci0gICAgZG91YmxlIHNwZWVkID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbklu
Zm86Okdyb3VuZFNwZWVkKTsKLQotICAgIFJlZlB0cjxDb29yZGluYXRlcz4gY29vcmRpbmF0ZXMg
PSBDb29yZGluYXRlczo6Y3JlYXRlKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1
ZGUsIGFsdGl0dWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0
dWRlQWNjdXJhY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBz
cGVlZCk7Ci0KLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKLSAg
ICBtX2xhc3RQb3NpdGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFz
ZSgpLCBnZW9Qb3NpdGlvbi50aW1lc3RhbXAoKS50b01TZWNzU2luY2VFcG9jaCgpKTsKLSNlbHNl
Ci0gICAgUURhdGVUaW1lIHRpbWVzdGFtcCA9IGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpOwotICAg
IG1fbGFzdFBvc2l0aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNl
KCksICh0aW1lc3RhbXAudG9UaW1lX3QoKSAqIDEwMDAuMDApICsgdGltZXN0YW1wLnRpbWUoKS5t
c2VjKCkpOwotI2VuZGlmCi0gICAgcG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgR2VvbG9j
YXRpb25TZXJ2aWNlUXQ6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKikKLXsKLSAgICBt
X2xhc3RQb3NpdGlvbiA9IDA7Ci0KLSAgICBpZiAoIW1fbG9jYXRpb24pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIFRPRE86IGhhbmRsZSBlbmFibGVIaWdoQWNjdXJhY3koKQotCi0g
ICAgbV9sb2NhdGlvbi0+c3RhcnRVcGRhdGVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgR2VvbG9jYXRpb25TZXJ2aWNlUXQ6OnN0b3BVcGRhdGluZygpCi17Ci0gICAgaWYgKG1fbG9j
YXRpb24pCi0gICAgICAgIG1fbG9jYXRpb24tPnN0b3BVcGRhdGVzKCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0
aW9uU2VydmljZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
R2VvbG9jYXRpb25TZXJ2aWNlUXQuaAkocmV2aXNpb24gNzc1MzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlUXRfaAotI2RlZmluZSBH
ZW9sb2NhdGlvblNlcnZpY2VRdF9oCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIK
LSNpbmNsdWRlIDxRR2VvUG9zaXRpb25JbmZvU291cmNlPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotLy8gRklYTUU6IFJlbW92ZSB1c2FnZSBvZiAidXNpbmcgbmFtZXNwYWNlIiBpbiBhIGhl
YWRlciBmaWxlLgotLy8gVGhlcmUgaXMgYnVnIGluIHF0TW9iaWxpdHkgc2lnbmFsIG5hbWVzIGFy
ZSBub3QgZnVsbCBxdWFsaWZpZWQgd2hlbiB1c2VkIHdpdGggbmFtZXNwYWNlCi0vLyBRdE1vYmls
aXR5IG5hbWVzcGFjZSBpbiBzbG90cyB0aHJvd3MgdXAgZXJyb3IgYW5kIGl0cyByZXF1aXJlZCB0
byBiZSBmaXhlZCBpbiBxdG1vYmlsaXR5LgotdXNpbmcgbmFtZXNwYWNlIFF0TW9iaWxpdHk7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGltcGxlbWVu
dGF0aW9uIG9mIGEgR2VvbG9jYXRpb25TZXJ2aWNlIGZvciBxdFdlYmtpdC4KLS8vIEl0IHVzZXMg
UXRNb2JpbGl0eSAodjEuMC4wKSBsb2NhdGlvbiBzZXJ2aWNlIHRvIGdldCBwb3NpdGlvbnMKLWNs
YXNzIEdlb2xvY2F0aW9uU2VydmljZVF0IDogcHVibGljIFFPYmplY3QsIEdlb2xvY2F0aW9uU2Vy
dmljZSB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIHN0YXRpYyBHZW9sb2NhdGlvblNl
cnZpY2UqIGNyZWF0ZShHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsKLQotICAgIEdlb2xvY2F0
aW9uU2VydmljZVF0KEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwotICAgIHZpcnR1YWwgfkdl
b2xvY2F0aW9uU2VydmljZVF0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQ
b3NpdGlvbk9wdGlvbnMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7Ci0KLSAg
ICB2aXJ0dWFsIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xh
c3RQb3NpdGlvbi5nZXQoKTsgfQotICAgIHZpcnR1YWwgUG9zaXRpb25FcnJvciogbGFzdEVycm9y
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXJyb3IuZ2V0KCk7IH0KLQotcHVibGljIFFfU0xPVFM6
Ci0gICAgLy8gUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZQotICAgIHZvaWQgcG9zaXRpb25VcGRhdGVk
KGNvbnN0IFFHZW9Qb3NpdGlvbkluZm8mKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8R2VvcG9z
aXRpb24+IG1fbGFzdFBvc2l0aW9uOwotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBtX2xhc3RF
cnJvcjsKLQotICAgIFF0TW9iaWxpdHk6OlFHZW9Qb3NpdGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRp
b247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHZW9sb2NhdGlv
blNlcnZpY2VRdF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzgyMzMpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisy
MDExLTAyLTEwICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRVF0gSW1w
bGVtZW50IGNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbiBmb3IgcXRwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjYyOQorCisgICAgICAgIEltcGxl
bWVudHMgY2xpZW50IGJhc2VkIGdlb2xvY2F0aW9uIGZvciBxdHdlYmtpdC4gTmV3IGNsaWVudCBi
YXNlZCBnZW9sb2NhdGlvbiBjb250YWlucyBwZXJtaXNzaW9uIEFQSSdzIGFzIHdlbGwKKyAgICAg
ICAgc28gcmVtb3ZlZCB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSBDaHJvbWVDbGllbnRRdC5jcHAu
IAorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0
ZTo6UVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNz
aW9uRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
R2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6c3RhcnRVcGRhdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpzdG9wVXBkYXRpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5
KToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OmNhbmNlbFBlcm1p
c3Npb25SZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVu
dFF0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6bGFz
dFBvc2l0aW9uKToKKwogMjAxMS0wMi0xMCAga2FzdGh1cmkgIDxrYXN0aHVyaS5uLXNAbm9raWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA3NzUzNSkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudFF0LmgiCiAjaW5j
bHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRlICJIVE1MRm9y
bUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKQEAgLTMyMyw2
ICszMjQsOSBAQCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnCiAgICAg
cGFnZUNsaWVudHMuZGV2aWNlT3JpZW50YXRpb25DbGllbnQgPSBuZXcgRGV2aWNlT3JpZW50YXRp
b25DbGllbnRRdChxKTsKICAgICBwYWdlQ2xpZW50cy5kZXZpY2VNb3Rpb25DbGllbnQgPSBuZXcg
RGV2aWNlTW90aW9uQ2xpZW50UXQocSk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoR0VPTE9DQVRJT04p
CisgICAgcGFnZUNsaWVudHMuZ2VvbG9jYXRpb25DbGllbnQgPSBuZXcgR2VvbG9jYXRpb25DbGll
bnRRdChxKTsKKyNlbmRpZgogICAgIHBhZ2UgPSBuZXcgUGFnZShwYWdlQ2xpZW50cyk7CiAKICAg
ICBzZXR0aW5ncyA9IG5ldyBRV2ViU2V0dGluZ3MocGFnZS0+c2V0dGluZ3MoKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNw
cAkocmV2aXNpb24gNzc1MzUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAj
ZW5kaWYKLSNpbmNsdWRlICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1
ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uLmgiCiAjaW5jbHVkZSAiTmF2aWdh
dGlvbkFjdGlvbi5oIgpAQCAtNjAzLDIxICs2MDIsNiBAQCB2b2lkIENocm9tZUNsaWVudFF0Ojpz
ZXRDdXJzb3IoY29uc3QgQ3VyCiAjZW5kaWYKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRRdDo6cmVx
dWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRp
b24qIGdlb2xvY2F0aW9uKQotewotI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICBRV2ViRnJh
bWUqIHdlYkZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsKLSAgICBHZW9sb2Nh
dGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnJl
cXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh3ZWJGcmFtZSwgZ2VvbG9jYXRpb24p
OwotI2VuZGlmCi19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2Nh
dGlvbikKLXsKLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUVdlYkZyYW1lKiB3ZWJGcmFt
ZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7Ci0gICAgR2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5jYW5jZWxHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKLSNl
bmRpZgotfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBDaHJvbWVD
bGllbnRRdDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkocmV2aXNpb24gNzc1MzUpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSw4ICsxODUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyop
IGNvbnN0IHt9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1p
c3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqLCBHZW9s
b2NhdGlvbiopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlz
c2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7fQorICAgICAgICB2aXJ0dWFsIHZv
aWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2Vv
bG9jYXRpb24qKSB7fQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtV3JpdGluZ0Rp
cmVjdGlvbklzTmF0dXJhbCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbUFsaWdu
bWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlvbigpOwpJbmRleDogU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlv
bkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRRdC5oIgorCisjaW5jbHVk
ZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNz
aW9uQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZV9w
LmgiCisjaW5jbHVkZSAicXdlYnBhZ2UuaCIKKyNpbmNsdWRlICJxd2VicGFnZV9wLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBRdE1vYmlsaXR5OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBjb25zdCBjaGFyIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlW10gPSAiRmFpbGVk
IHRvIHN0YXJ0IEdlb2xvY2F0aW9uIHNlcnZpY2UiOworCitHZW9sb2NhdGlvbkNsaWVudFF0OjpH
ZW9sb2NhdGlvbkNsaWVudFF0KFFXZWJQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCisg
ICAgLCBtX2xhc3RQb3NpdGlvbigwKQoreworICAgIG1fbG9jYXRpb24gPSBRR2VvUG9zaXRpb25J
bmZvU291cmNlOjpjcmVhdGVEZWZhdWx0U291cmNlKHRoaXMpOworCisgICAgaWYgKG1fbG9jYXRp
b24pCisgICAgICAgIGNvbm5lY3QobV9sb2NhdGlvbiwgU0lHTkFMKHBvc2l0aW9uVXBkYXRlZChR
R2VvUG9zaXRpb25JbmZvKSksIHRoaXMsIFNMT1QocG9zaXRpb25VcGRhdGVkKFFHZW9Qb3NpdGlv
bkluZm8pKSk7CisKK30KKworR2VvbG9jYXRpb25DbGllbnRRdDo6fkdlb2xvY2F0aW9uQ2xpZW50
UXQoKQoreworICAgIGRlbGV0ZSBtX2xvY2F0aW9uOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xp
ZW50UXQ6Omdlb2xvY2F0aW9uRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0
aW9uSW5mbyAmZ2VvUG9zaXRpb24pCit7CisgICAgaWYgKCFnZW9Qb3NpdGlvbi5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFFHZW9Db29yZGluYXRlIGNvb3JkID0gZ2VvUG9zaXRp
b24uY29vcmRpbmF0ZSgpOworICAgIGRvdWJsZSBsYXRpdHVkZSA9IGNvb3JkLmxhdGl0dWRlKCk7
CisgICAgZG91YmxlIGxvbmdpdHVkZSA9IGNvb3JkLmxvbmdpdHVkZSgpOworICAgIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSA9IChnZW9Qb3NpdGlvbi5jb29yZGluYXRlKCkudHlwZSgpID09IFFHZW9D
b29yZGluYXRlOjpDb29yZGluYXRlM0QpOworICAgIGRvdWJsZSBhbHRpdHVkZSA9IGNvb3JkLmFs
dGl0dWRlKCk7CisKKyAgICBkb3VibGUgYWNjdXJhY3kgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUo
UUdlb1Bvc2l0aW9uSW5mbzo6SG9yaXpvbnRhbEFjY3VyYWN5KTsKKworICAgIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlv
bkluZm86OlZlcnRpY2FsQWNjdXJhY3kpOworICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0g
Z2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OlZlcnRpY2FsQWNjdXJhY3kp
OworCisgICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSAgZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRl
KFFHZW9Qb3NpdGlvbkluZm86OkRpcmVjdGlvbik7CisgICAgZG91YmxlIGhlYWRpbmcgPSBnZW9Q
b3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6RGlyZWN0aW9uKTsKKworICAgIGJv
b2wgcHJvdmlkZXNTcGVlZCA9IGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25J
bmZvOjpHcm91bmRTcGVlZCk7CisgICAgZG91YmxlIHNwZWVkID0gZ2VvUG9zaXRpb24uYXR0cmli
dXRlKFFHZW9Qb3NpdGlvbkluZm86Okdyb3VuZFNwZWVkKTsKKworI2lmIFFUX1ZFUlNJT04gPj0g
UVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQorICAgIGRvdWJsZSB0aW1lc3RhbXAgPSBnZW9Qb3Np
dGlvbi50aW1lc3RhbXAoKS50b01TZWNzU2luY2VFcG9jaCgpOworI2Vsc2UKKyAgICBRRGF0ZVRp
bWUgZGF0ZXRpbWUgPSBnZW9Qb3NpdGlvbi50aW1lc3RhbXAoKTsKKyAgICBkb3VibGUgdGltZXN0
YW1wID0gKGRhdGV0aW1lLnRvVGltZV90KCkgKiAxMDAwLjAwKSArIGRhdGV0aW1lLnRpbWUoKS5t
c2VjKCk7CisjZW5kaWYKKworICAgIG1fbGFzdFBvc2l0aW9uID0gR2VvbG9jYXRpb25Qb3NpdGlv
bjo6Y3JlYXRlKHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeSwgcHJvdmlkZXNBbHRp
dHVkZSwgYWx0aXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzSGVh
ZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworCisgICAgV2ViQ29yZTo6UGFn
ZSogcGFnZSA9IFFXZWJQYWdlUHJpdmF0ZTo6Y29yZShtX3BhZ2UpOworICAgIHBhZ2UtPmdlb2xv
Y2F0aW9uQ29udHJvbGxlcigpLT5wb3NpdGlvbkNoYW5nZWQobV9sYXN0UG9zaXRpb24uZ2V0KCkp
OworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0YXJ0VXBkYXRpbmcoKQoreworICAg
IGlmICghbV9sb2NhdGlvbikgeworICAgICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gUVdlYlBh
Z2VQcml2YXRlOjpjb3JlKG1fcGFnZSk7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpHZW9sb2Nh
dGlvbkVycm9yPiBlcnJvciA9IEdlb2xvY2F0aW9uRXJyb3I6OmNyZWF0ZShHZW9sb2NhdGlvbkVy
cm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlLCBmYWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2Fn
ZSk7CisgICAgICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5lcnJvck9jY3VycmVk
KGVycm9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbG9jYXRpb24t
PnN0YXJ0VXBkYXRlcygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0b3BVcGRh
dGluZygpCit7CisgICAgaWYgKG1fbG9jYXRpb24pCisgICAgICAgIG1fbG9jYXRpb24tPnN0b3BV
cGRhdGVzKCk7Cit9CisKKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpzZXRFbmFibGVIaWdo
QWNjdXJhY3koYm9vbCkKK3sKKyAgICAvLyBxdG1vYmlsaXR5IDEuMCBzdXBwb3J0cyBvbmx5IEdQ
UyBhcyBvZiBub3cgc28gaGlnaCBhY2N1cmFjeSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKK30KKwor
dm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lvbihHZW9sb2NhdGlvbiog
Z2VvbG9jYXRpb24pCit7CisgICAgQVNTRVJUKGdlb2xvY2F0aW9uKTsKKyAgICBRV2ViRnJhbWUq
IHdlYkZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGdlb2xvY2F0aW9uLT5mcmFtZSgpKTsK
KyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50KCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZSh3ZWJGcmFtZSwg
Z2VvbG9jYXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OmNhbmNlbFBlcm1p
c3Npb25SZXF1ZXN0KEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBBU1NFUlQoZ2Vv
bG9jYXRpb24pOworICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpr
aXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOworICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
R2VvbG9jYXRpb25DbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRpb25DbGllbnRRdF9oCisj
ZGVmaW5lIEdlb2xvY2F0aW9uQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGll
bnQuaCIKKyNpbmNsdWRlIDxRR2VvUG9zaXRpb25JbmZvU291cmNlPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworLy8gRklYTUU6IFJlbW92ZSB1c2FnZSBvZiAidXNpbmcgbmFtZXNwYWNlIiBp
biBhIGhlYWRlciBmaWxlLgorLy8gVGhlcmUgaXMgYnVnIGluIHF0TW9iaWxpdHkgc2lnbmFsIG5h
bWVzIGFyZSBub3QgZnVsbCBxdWFsaWZpZWQgd2hlbiB1c2VkIHdpdGggbmFtZXNwYWNlCisvLyBR
dE1vYmlsaXR5IG5hbWVzcGFjZSBpbiBzbG90cyB0aHJvd3MgdXAgZXJyb3IgYW5kIGl0cyByZXF1
aXJlZCB0byBiZSBmaXhlZCBpbiBxdG1vYmlsaXR5LgordXNpbmcgbmFtZXNwYWNlIFF0TW9iaWxp
dHk7CisKK2NsYXNzIFFXZWJQYWdlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMg
Y2xhc3MgcHJvdmlkZXMgYSBpbXBsZW1lbnRhdGlvbiBvZiBhIEdlb2xvY2F0aW9uU2VydmljZSBm
b3IgcXRXZWJraXQuCisvLyBJdCB1c2VzIFF0TW9iaWxpdHkgKHYxLjAuMCkgbG9jYXRpb24gc2Vy
dmljZSB0byBnZXQgcG9zaXRpb25zCitjbGFzcyBHZW9sb2NhdGlvbkNsaWVudFF0IDogcHVibGlj
IFFPYmplY3QsIHB1YmxpYyBHZW9sb2NhdGlvbkNsaWVudCB7CisgICAgUV9PQkpFQ1QKKworcHVi
bGljOgorICAgIEdlb2xvY2F0aW9uQ2xpZW50UXQoUVdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5H
ZW9sb2NhdGlvbkNsaWVudFF0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbG9jYXRpb25EZXN0
cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygpOworICAgIHZpcnR1YWwg
dm9pZCBzdG9wVXBkYXRpbmcoKTsKKworICAgIHZvaWQgc2V0RW5hYmxlSGlnaEFjY3VyYWN5KGJv
b2wpOworICAgIHZpcnR1YWwgR2VvbG9jYXRpb25Qb3NpdGlvbiogbGFzdFBvc2l0aW9uKCkgeyBy
ZXR1cm4gbV9sYXN0UG9zaXRpb24uZ2V0KCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
UGVybWlzc2lvbihHZW9sb2NhdGlvbiopOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQZXJtaXNz
aW9uUmVxdWVzdChHZW9sb2NhdGlvbiopOworCitwcml2YXRlIFFfU0xPVFM6CisgICAgLy8gUUdl
b1Bvc2l0aW9uSW5mb1NvdXJjZQorICAgIHZvaWQgcG9zaXRpb25VcGRhdGVkKGNvbnN0IFFHZW9Q
b3NpdGlvbkluZm8mKTsKKworcHJpdmF0ZToKKyAgICBRV2ViUGFnZSogbV9wYWdlOworICAgIFJl
ZlB0cjxHZW9sb2NhdGlvblBvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKKyAgICBRdE1vYmlsaXR5
OjpRR2VvUG9zaXRpb25JbmZvU291cmNlKiBtX2xvY2F0aW9uOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25DbGllbnRRdF9oCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3ODIzMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDExLTAyLTEwICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vs
a2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtRVF0gSW1wbGVtZW50IGNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbiBmb3IgcXRw
b3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjYy
OQorCisgICAgICAgIERpc2FibGUgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3QgY2FzZSB1bnRpbCBj
bGllbnQtYmFzZWQgbW9jayBsYXlvdXQgY29udHJvbGxlciBpcyBpbXBsZW1lbnRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisKIDIwMTEtMDItMDkgIE1hcnRpbiBSb2JpbnNv
biAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8g
Tm9yb25oYSBTaWx2YS4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNzc1
MzUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBA
IC01MDE3LDMgKzUwMTcsNyBAQCBtZWRpYS92aWRlby1jdXJyZW50VGltZS1kZWxheS5odG1sCiAj
IFtRdF1SRUdSRVNTSU9OKHI3Njk1MSk6IG1lZGlhL2NvbnRyb2xzLXdpdGhvdXQtcHJlbG9hZC5o
dG1sIGZhaWxzCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzY3
NAogbWVkaWEvY29udHJvbHMtd2l0aG91dC1wcmVsb2FkLmh0bWwKKworIyAtLS0tLSBGSVhNRTog
UXRXZWJraXQgc3VwcG9ydHMgY2xpZW50IGJhc2VkIGFuZCBMYXlvdXRUZXN0IGZvciB0aGUgc2Ft
ZSBpcyB5ZXQgdG8gYmUgaW1wbGVtZW50ZWQgLS0tLS0tIAorI2Zhc3QvZG9tL0dlb2xvY2F0aW9u
CisjZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWdlb2xvY2F0aW9uLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82587</attachid>
            <date>2011-02-15 21:47:30 -0800</date>
            <delta_ts>2011-02-16 09:51:08 -0800</delta_ts>
            <desc>patch</desc>
            <filename>42629.patch</filename>
            <type>text/plain</type>
            <size>24760</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTYgIE1haGVzaCBL
dWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1wbGVtZW50cyBjbGllbnQgYmFzZWQg
Z2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBSZW1vdmVkIG9sZCBjb2RlIHJlbGF0ZWQgdG8gbm9u
LWNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbgorCisgICAgICAgIE5vIHRlc3RzIGFzIHlldC4gVGhp
cyB3aWxsIGJlIHJhaXNlZCBhcyBkaWZmZXJlbnQgYnVnIGFzIG5ldyBtb2NrIGNsaWVudCBpbXBs
ZW1lbnRhdGlvbiBuZWVkIHRvIGJlIGRvbmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBmZWF0dXJlcy5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9u
U2VydmljZVF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMDItMTUgIEFtaSBGaXNjaG1hbiAgPGZpc2No
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zNDg1LDEyICszNDg1LDExIEBAIGNvbnRhaW5zKERF
RklORVMsIEVOQUJMRV9RVF9CRUFSRVI9MSkgewogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfR0VPTE9DQVRJT049MSkgewotICAgIERFRklORVMgKz0gV1RGX1VTRV9QUkVFTVBUX0dFT0xP
Q0FUSU9OX1BFUk1JU1NJT04KLSAgICBIRUFERVJTICs9IFwKLSAgICAgICAgcGxhdGZvcm0vcXQv
R2VvbG9jYXRpb25TZXJ2aWNlUXQuaAotICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBwbGF0Zm9y
bS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAKLQorICAgICBIRUFERVJTICs9IFwKKyAgICAg
ICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQu
aAorICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuY3BwCisgCiAgICAgQ09ORklHICs9IG1vYmlsaXR5
CiAgICAgTU9CSUxJVFkgKz0gbG9jYXRpb24KIApJbmRleDogU291cmNlL1dlYkNvcmUvZmVhdHVy
ZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkocmV2aXNp
b24gNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9mZWF0dXJlcy5wcmkJKHdvcmtpbmcgY29weSkK
QEAgLTExOSw2ICsxMTksNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RIUkVB
REVECiAhQ09ORklHKFFURElSX2J1aWxkKTohY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0dFT0xP
Q0FUSU9OPS4pIHsKICAgICBjb250YWlucyhNT0JJTElUWV9DT05GSUcsIGxvY2F0aW9uKSB7CiAg
ICAgICAgREVGSU5FUyArPSBFTkFCTEVfR0VPTE9DQVRJT049MQorICAgICAgIERFRklORVMgKz0g
RU5BQkxFX0NMSUVOVF9CQVNFRF9HRU9MT0NBVElPTj0xCiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNlUXQuY3Bw
CShyZXZpc2lvbiA3ODUxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0
aW9uU2VydmljZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2VRdC5oIgotCi0j
aW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgotI2luY2x1
ZGUgIlBvc2l0aW9uRXJyb3IuaCIKLSNpbmNsdWRlICJQb3NpdGlvbk9wdGlvbnMuaCIKLQotdXNp
bmcgbmFtZXNwYWNlIFF0TW9iaWxpdHk7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR2VvbG9j
YXRpb25TZXJ2aWNlOjpGYWN0b3J5RnVuY3Rpb24qIEdlb2xvY2F0aW9uU2VydmljZTo6c19mYWN0
b3J5RnVuY3Rpb24gPSAmR2VvbG9jYXRpb25TZXJ2aWNlUXQ6OmNyZWF0ZTsKLQotR2VvbG9jYXRp
b25TZXJ2aWNlKiBHZW9sb2NhdGlvblNlcnZpY2VRdDo6Y3JlYXRlKEdlb2xvY2F0aW9uU2Vydmlj
ZUNsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiBuZXcgR2VvbG9jYXRpb25TZXJ2aWNlUXQo
Y2xpZW50KTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlUXQ6Okdlb2xvY2F0aW9uU2VydmljZVF0
KEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCogY2xpZW50KQotICAgIDogR2VvbG9jYXRpb25TZXJ2
aWNlKGNsaWVudCkKLSAgICAsIG1fbGFzdFBvc2l0aW9uKDApCi0gICAgLCBtX2xhc3RFcnJvcigw
KQotewotICAgIG1fbG9jYXRpb24gPSBRR2VvUG9zaXRpb25JbmZvU291cmNlOjpjcmVhdGVEZWZh
dWx0U291cmNlKHRoaXMpOwotCi0gICAgaWYgKG1fbG9jYXRpb24pCi0gICAgICAgIGNvbm5lY3Qo
bV9sb2NhdGlvbiwgU0lHTkFMKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRpb25JbmZvKSksIHRo
aXMsIFNMT1QocG9zaXRpb25VcGRhdGVkKFFHZW9Qb3NpdGlvbkluZm8pKSk7Ci19Ci0KLUdlb2xv
Y2F0aW9uU2VydmljZVF0Ojp+R2VvbG9jYXRpb25TZXJ2aWNlUXQoKQotewotICAgIGRlbGV0ZSBt
X2xvY2F0aW9uOwotfQotCi12b2lkIEdlb2xvY2F0aW9uU2VydmljZVF0Ojpwb3NpdGlvblVwZGF0
ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyAmZ2VvUG9zaXRpb24pCi17Ci0gICAgaWYgKCFnZW9Q
b3NpdGlvbi5pc1ZhbGlkKCkpCi0gICAgICAgIGVycm9yT2NjdXJyZWQoKTsKLQotICAgIFFHZW9D
b29yZGluYXRlIGNvb3JkID0gZ2VvUG9zaXRpb24uY29vcmRpbmF0ZSgpOwotICAgIGRvdWJsZSBs
YXRpdHVkZSA9IGNvb3JkLmxhdGl0dWRlKCk7Ci0gICAgZG91YmxlIGxvbmdpdHVkZSA9IGNvb3Jk
LmxvbmdpdHVkZSgpOwotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9IChnZW9Qb3NpdGlvbi5j
b29yZGluYXRlKCkudHlwZSgpID09IFFHZW9Db29yZGluYXRlOjpDb29yZGluYXRlM0QpOwotICAg
IGRvdWJsZSBhbHRpdHVkZSA9IGNvb3JkLmFsdGl0dWRlKCk7Ci0KLSAgICBkb3VibGUgYWNjdXJh
Y3kgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6SG9yaXpvbnRhbEFj
Y3VyYWN5KTsKLQotICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRp
b24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OlZlcnRpY2FsQWNjdXJhY3kpOwotICAg
IGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3Np
dGlvbkluZm86OlZlcnRpY2FsQWNjdXJhY3kpOwotCi0gICAgYm9vbCBwcm92aWRlc0hlYWRpbmcg
PSAgZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OkRpcmVjdGlvbik7
Ci0gICAgZG91YmxlIGhlYWRpbmcgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9u
SW5mbzo6RGlyZWN0aW9uKTsKLQotICAgIGJvb2wgcHJvdmlkZXNTcGVlZCA9IGdlb1Bvc2l0aW9u
Lmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpHcm91bmRTcGVlZCk7Ci0gICAgZG91Ymxl
IHNwZWVkID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86Okdyb3VuZFNw
ZWVkKTsKLQotICAgIFJlZlB0cjxDb29yZGluYXRlcz4gY29vcmRpbmF0ZXMgPSBDb29yZGluYXRl
czo6Y3JlYXRlKGxhdGl0dWRlLCBsb25naXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7Ci0KLSNp
ZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKLSAgICBtX2xhc3RQb3Np
dGlvbiA9IEdlb3Bvc2l0aW9uOjpjcmVhdGUoY29vcmRpbmF0ZXMucmVsZWFzZSgpLCBnZW9Qb3Np
dGlvbi50aW1lc3RhbXAoKS50b01TZWNzU2luY2VFcG9jaCgpKTsKLSNlbHNlCi0gICAgUURhdGVU
aW1lIHRpbWVzdGFtcCA9IGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpOwotICAgIG1fbGFzdFBvc2l0
aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNlKCksICh0aW1lc3Rh
bXAudG9UaW1lX3QoKSAqIDEwMDAuMDApICsgdGltZXN0YW1wLnRpbWUoKS5tc2VjKCkpOwotI2Vu
ZGlmCi0gICAgcG9zaXRpb25DaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgR2VvbG9jYXRpb25TZXJ2aWNl
UXQ6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKikKLXsKLSAgICBtX2xhc3RQb3NpdGlv
biA9IDA7Ci0KLSAgICBpZiAoIW1fbG9jYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIFRPRE86IGhhbmRsZSBlbmFibGVIaWdoQWNjdXJhY3koKQotCi0gICAgbV9sb2NhdGlv
bi0+c3RhcnRVcGRhdGVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR2VvbG9jYXRp
b25TZXJ2aWNlUXQ6OnN0b3BVcGRhdGluZygpCi17Ci0gICAgaWYgKG1fbG9jYXRpb24pCi0gICAg
ICAgIG1fbG9jYXRpb24tPnN0b3BVcGRhdGVzKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuaAkocmV2aXNpb24gNzg1MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9HZW9sb2NhdGlvblNlcnZpY2VRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgR2VvbG9jYXRpb25TZXJ2aWNlUXRfaAotI2RlZmluZSBHZW9sb2NhdGlvblNl
cnZpY2VRdF9oCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKLSNpbmNsdWRlIDxR
R2VvUG9zaXRpb25JbmZvU291cmNlPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotLy8gRklY
TUU6IFJlbW92ZSB1c2FnZSBvZiAidXNpbmcgbmFtZXNwYWNlIiBpbiBhIGhlYWRlciBmaWxlLgot
Ly8gVGhlcmUgaXMgYnVnIGluIHF0TW9iaWxpdHkgc2lnbmFsIG5hbWVzIGFyZSBub3QgZnVsbCBx
dWFsaWZpZWQgd2hlbiB1c2VkIHdpdGggbmFtZXNwYWNlCi0vLyBRdE1vYmlsaXR5IG5hbWVzcGFj
ZSBpbiBzbG90cyB0aHJvd3MgdXAgZXJyb3IgYW5kIGl0cyByZXF1aXJlZCB0byBiZSBmaXhlZCBp
biBxdG1vYmlsaXR5LgotdXNpbmcgbmFtZXNwYWNlIFF0TW9iaWxpdHk7Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGltcGxlbWVudGF0aW9uIG9mIGEg
R2VvbG9jYXRpb25TZXJ2aWNlIGZvciBxdFdlYmtpdC4KLS8vIEl0IHVzZXMgUXRNb2JpbGl0eSAo
djEuMC4wKSBsb2NhdGlvbiBzZXJ2aWNlIHRvIGdldCBwb3NpdGlvbnMKLWNsYXNzIEdlb2xvY2F0
aW9uU2VydmljZVF0IDogcHVibGljIFFPYmplY3QsIEdlb2xvY2F0aW9uU2VydmljZSB7Ci0gICAg
UV9PQkpFQ1QKLQotcHVibGljOgotICAgIHN0YXRpYyBHZW9sb2NhdGlvblNlcnZpY2UqIGNyZWF0
ZShHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsKLQotICAgIEdlb2xvY2F0aW9uU2VydmljZVF0
KEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwotICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uU2Vy
dmljZVF0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlv
bnMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7Ci0KLSAgICB2aXJ0dWFsIEdl
b3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xhc3RQb3NpdGlvbi5n
ZXQoKTsgfQotICAgIHZpcnR1YWwgUG9zaXRpb25FcnJvciogbGFzdEVycm9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RXJyb3IuZ2V0KCk7IH0KLQotcHVibGljIFFfU0xPVFM6Ci0gICAgLy8gUUdl
b1Bvc2l0aW9uSW5mb1NvdXJjZQotICAgIHZvaWQgcG9zaXRpb25VcGRhdGVkKGNvbnN0IFFHZW9Q
b3NpdGlvbkluZm8mKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fbGFz
dFBvc2l0aW9uOwotICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBtX2xhc3RFcnJvcjsKLQotICAg
IFF0TW9iaWxpdHk6OlFHZW9Qb3NpdGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRpb247Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBHZW9sb2NhdGlvblNlcnZpY2VRdF9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzg2ODIpCisrKyBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTAyLTE2ICBN
YWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRVF0gSW1wbGVtZW50IGNsaWVu
dCBiYXNlZCBnZW9sb2NhdGlvbiBmb3IgcXRwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjYyOQorCisgICAgICAgIEltcGxlbWVudHMgY2xpZW50
IGJhc2VkIGdlb2xvY2F0aW9uIGZvciBxdHdlYmtpdC4gTmV3IGNsaWVudCBiYXNlZCBnZW9sb2Nh
dGlvbiBjb250YWlucyBwZXJtaXNzaW9uIEFQSSdzIGFzIHdlbGwKKyAgICAgICAgc28gcmVtb3Zl
ZCB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSBDaHJvbWVDbGllbnRRdC5jcHAuIAorCisgICAgICAg
ICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQ
cml2YXRlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHA6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudFF0OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OmNhbmNlbEdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RGb3JGcmFtZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvR2VvbG9j
YXRpb25DbGllbnRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25D
bGllbnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbkNsaWVudFF0Ojp+R2VvbG9jYXRpb25DbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvbkNsaWVudFF0OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6c3RhcnRVcGRhdGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpzdG9wVXBkYXRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5KToKKyAgICAgICAg
KFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6bGFzdFBvc2l0aW9uKToK
KwogMjAxMS0wMi0xNSAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAkocmV2aXNpb24gNzg1MTUpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIkdlb2xvY2F0
aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBAIC0zMjQsNiArMzI1LDkgQEAgUVdl
YlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZwogICAgIHBhZ2VDbGllbnRzLmRl
dmljZU9yaWVudGF0aW9uQ2xpZW50ID0gbmV3IERldmljZU9yaWVudGF0aW9uQ2xpZW50UXQocSk7
CiAgICAgcGFnZUNsaWVudHMuZGV2aWNlTW90aW9uQ2xpZW50ID0gbmV3IERldmljZU1vdGlvbkNs
aWVudFF0KHEpOwogI2VuZGlmCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIHBhZ2VDbGll
bnRzLmdlb2xvY2F0aW9uQ2xpZW50ID0gbmV3IEdlb2xvY2F0aW9uQ2xpZW50UXQocSk7CisjZW5k
aWYKICAgICBwYWdlID0gbmV3IFBhZ2UocGFnZUNsaWVudHMpOwogCiAgICAgc2V0dGluZ3MgPSBu
ZXcgUVdlYlNldHRpbmdzKHBhZ2UtPnNldHRpbmdzKCkpOwpJbmRleDogU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHJldmlzaW9uIDc4
NTE1KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2VuZGlmCi0jaW5jbHVk
ZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCiAjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIK
QEAgLTYwNCwyMSArNjAzLDYgQEAgdm9pZCBDaHJvbWVDbGllbnRRdDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cgogI2VuZGlmCiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlv
blBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKLXsKLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9
IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7Ci0gICAgR2VvbG9jYXRpb25QZXJtaXNzaW9u
Q2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5yZXF1ZXN0R2VvbG9jYXRp
b25QZXJtaXNzaW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKLSNlbmRpZgotfQot
Ci12b2lkIENocm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
Rm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCi17Ci0jaWYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQ
cml2YXRlOjpraXQoZnJhbWUpOwotICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Ojpn
ZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7Ci0jZW5kaWYKLX0KIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OmF0dGFj
aFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudFF0LmgJKHJldmlzaW9uIDc4NTE1KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsOCArMTgzLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0
SW50b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7fQogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUo
RnJhbWUqLCBHZW9sb2NhdGlvbiopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShG
cmFtZSosIEdlb2xvY2F0aW9uKikge30KKyAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikge30K
IAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVy
YWwoKTsKICAgICAgICAgdmlydHVhbCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVu
dVdyaXRpbmdEaXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9u
LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9j
YXRpb25FcnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0Lmgi
CisjaW5jbHVkZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgorI2luY2x1ZGUg
InF3ZWJwYWdlLmgiCisjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgorCit1c2luZyBuYW1lc3BhY2Ug
UXRNb2JpbGl0eTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciBm
YWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2FnZVtdID0gIkZhaWxlZCB0byBzdGFydCBHZW9s
b2NhdGlvbiBzZXJ2aWNlIjsKKworR2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRpb25DbGll
bnRRdChRV2ViUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9sYXN0UG9z
aXRpb24oMCkKK3sKKyAgICBtX2xvY2F0aW9uID0gUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZTo6Y3Jl
YXRlRGVmYXVsdFNvdXJjZSh0aGlzKTsKKworICAgIGlmIChtX2xvY2F0aW9uKQorICAgICAgICBj
b25uZWN0KG1fbG9jYXRpb24sIFNJR05BTChwb3NpdGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9uSW5m
bykpLCB0aGlzLCBTTE9UKHBvc2l0aW9uVXBkYXRlZChRR2VvUG9zaXRpb25JbmZvKSkpOworCit9
CisKK0dlb2xvY2F0aW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlvbkNsaWVudFF0KCkKK3sKKyAgICBk
ZWxldGUgbV9sb2NhdGlvbjsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpnZW9sb2Nh
dGlvbkRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgR2VvbG9jYXRp
b25DbGllbnRRdDo6cG9zaXRpb25VcGRhdGVkKGNvbnN0IFFHZW9Qb3NpdGlvbkluZm8gJmdlb1Bv
c2l0aW9uKQoreworICAgIGlmICghZ2VvUG9zaXRpb24uaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBRR2VvQ29vcmRpbmF0ZSBjb29yZCA9IGdlb1Bvc2l0aW9uLmNvb3JkaW5hdGUo
KTsKKyAgICBkb3VibGUgbGF0aXR1ZGUgPSBjb29yZC5sYXRpdHVkZSgpOworICAgIGRvdWJsZSBs
b25naXR1ZGUgPSBjb29yZC5sb25naXR1ZGUoKTsKKyAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGUg
PSAoZ2VvUG9zaXRpb24uY29vcmRpbmF0ZSgpLnR5cGUoKSA9PSBRR2VvQ29vcmRpbmF0ZTo6Q29v
cmRpbmF0ZTNEKTsKKyAgICBkb3VibGUgYWx0aXR1ZGUgPSBjb29yZC5hbHRpdHVkZSgpOworCisg
ICAgZG91YmxlIGFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbklu
Zm86Okhvcml6b250YWxBY2N1cmFjeSk7CisKKyAgICBib29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1
cmFjeSA9IGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpWZXJ0aWNh
bEFjY3VyYWN5KTsKKyAgICBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSA9IGdlb1Bvc2l0aW9uLmF0
dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpWZXJ0aWNhbEFjY3VyYWN5KTsKKworICAgIGJvb2wg
cHJvdmlkZXNIZWFkaW5nID0gIGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25J
bmZvOjpEaXJlY3Rpb24pOworICAgIGRvdWJsZSBoZWFkaW5nID0gZ2VvUG9zaXRpb24uYXR0cmli
dXRlKFFHZW9Qb3NpdGlvbkluZm86OkRpcmVjdGlvbik7CisKKyAgICBib29sIHByb3ZpZGVzU3Bl
ZWQgPSBnZW9Qb3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6R3JvdW5kU3Bl
ZWQpOworICAgIGRvdWJsZSBzcGVlZCA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShRR2VvUG9zaXRp
b25JbmZvOjpHcm91bmRTcGVlZCk7CisKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hF
Q0soNCwgNywgMCkKKyAgICBkb3VibGUgdGltZXN0YW1wID0gZ2VvUG9zaXRpb24udGltZXN0YW1w
KCkudG9NU2Vjc1NpbmNlRXBvY2goKSAvIDEwMDA7CisjZWxzZQorICAgIFFEYXRlVGltZSBkYXRl
dGltZSA9IGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpOworICAgIGRvdWJsZSB0aW1lc3RhbXAgPSAo
ZGF0ZXRpbWUudG9UaW1lX3QoKSArIGRhdGV0aW1lLnRpbWUoKS5tc2VjKCkpIC8gMTAwMDsKKyNl
bmRpZgorCisgICAgbV9sYXN0UG9zaXRpb24gPSBHZW9sb2NhdGlvblBvc2l0aW9uOjpjcmVhdGUo
dGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRp
dHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXNIZWFkaW5nLCBoZWFk
aW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0g
UVdlYlBhZ2VQcml2YXRlOjpjb3JlKG1fcGFnZSk7CisgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250
cm9sbGVyKCktPnBvc2l0aW9uQ2hhbmdlZChtX2xhc3RQb3NpdGlvbi5nZXQoKSk7Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb25DbGllbnRRdDo6c3RhcnRVcGRhdGluZygpCit7CisgICAgaWYgKCFtX2xv
Y2F0aW9uKSB7CisgICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6
OmNvcmUobV9wYWdlKTsKKyAgICAgICAgUmVmUHRyPFdlYkNvcmU6Okdlb2xvY2F0aW9uRXJyb3I+
IGVycm9yID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKEdlb2xvY2F0aW9uRXJyb3I6OlBvc2l0
aW9uVW5hdmFpbGFibGUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKTsKKyAgICAg
ICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmVycm9yT2NjdXJyZWQoZXJyb3IuZ2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9sb2NhdGlvbi0+c3RhcnRVcGRh
dGVzKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6c3RvcFVwZGF0aW5nKCkKK3sK
KyAgICBpZiAobV9sb2NhdGlvbikKKyAgICAgICAgbV9sb2NhdGlvbi0+c3RvcFVwZGF0ZXMoKTsK
K30KKworCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnNldEVuYWJsZUhpZ2hBY2N1cmFjeShi
b29sKQoreworICAgIC8vIHF0bW9iaWxpdHkgMS4wIHN1cHBvcnRzIG9ubHkgR1BTIGFzIG9mIG5v
dyBzbyBoaWdoIGFjY3VyYWN5IGlzIGVuYWJsZWQgYnkgZGVmYXVsdAorfQorCit2b2lkIEdlb2xv
Y2F0aW9uQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlv
bikKK3sKKyAgICBBU1NFUlQoZ2VvbG9jYXRpb24pOworICAgIFFXZWJGcmFtZSogd2ViRnJhbWUg
PSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOworICAgIEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlv
bik7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6Y2FuY2VsUGVybWlzc2lvblJlcXVl
c3QoR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQoreworICAgIEFTU0VSVChnZW9sb2NhdGlvbik7
CisgICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChnZW9sb2Nh
dGlvbi0+ZnJhbWUoKSk7CisgICAgR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xv
Y2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0Rm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlv
bkNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvbkNsaWVudFF0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvbkNsaWVudFF0X2gKKyNkZWZpbmUgR2Vv
bG9jYXRpb25DbGllbnRRdF9oCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudC5oIgorI2lu
Y2x1ZGUgPFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CisvLyBGSVhNRTogUmVtb3ZlIHVzYWdlIG9mICJ1c2luZyBuYW1lc3BhY2UiIGluIGEgaGVhZGVy
IGZpbGUuCisvLyBUaGVyZSBpcyBidWcgaW4gcXRNb2JpbGl0eSBzaWduYWwgbmFtZXMgYXJlIG5v
dCBmdWxsIHF1YWxpZmllZCB3aGVuIHVzZWQgd2l0aCBuYW1lc3BhY2UKKy8vIFF0TW9iaWxpdHkg
bmFtZXNwYWNlIGluIHNsb3RzIHRocm93cyB1cCBlcnJvciBhbmQgaXRzIHJlcXVpcmVkIHRvIGJl
IGZpeGVkIGluIHF0bW9iaWxpdHkuCit1c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKKworY2xh
c3MgUVdlYlBhZ2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyBwcm92
aWRlcyBhIGltcGxlbWVudGF0aW9uIG9mIGEgR2VvbG9jYXRpb25TZXJ2aWNlIGZvciBxdFdlYmtp
dC4KKy8vIEl0IHVzZXMgUXRNb2JpbGl0eSAodjEuMC4wKSBsb2NhdGlvbiBzZXJ2aWNlIHRvIGdl
dCBwb3NpdGlvbnMKK2NsYXNzIEdlb2xvY2F0aW9uQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwg
cHVibGljIEdlb2xvY2F0aW9uQ2xpZW50IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAg
R2VvbG9jYXRpb25DbGllbnRRdChRV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9u
Q2xpZW50UXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvbkRlc3Ryb3llZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3BV
cGRhdGluZygpOworCisgICAgdm9pZCBzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCk7CisgICAg
dmlydHVhbCBHZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSB7IHJldHVybiBtX2xh
c3RQb3NpdGlvbi5nZXQoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9u
KEdlb2xvY2F0aW9uKik7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0
KEdlb2xvY2F0aW9uKik7CisKK3ByaXZhdGUgUV9TTE9UUzoKKyAgICAvLyBRR2VvUG9zaXRpb25J
bmZvU291cmNlCisgICAgdm9pZCBwb3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5m
byYpOworCitwcml2YXRlOgorICAgIFFXZWJQYWdlKiBtX3BhZ2U7CisgICAgUmVmUHRyPEdlb2xv
Y2F0aW9uUG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOworICAgIFF0TW9iaWxpdHk6OlFHZW9Qb3Np
dGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvbkNsaWVudFF0X2gKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4
NjgyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTEtMDItMTYgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2VkIGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAg
ICAgRGlzYWJsZSBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdCBjYXNlIHVudGlsIGNsaWVudC1iYXNl
ZCBtb2NrIGxheW91dCBjb250cm9sbGVyIGlzIGltcGxlbWVudGVkLgorCisgICAgICAgICogcGxh
dGZvcm0vcXQvU2tpcHBlZDoKKwogMjAxMS0wMi0xNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdGVzdCBleHBlY3RhdGlvbiB1cGRhdGUu
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQJKHJldmlzaW9uIDc4NjgyKQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNTAzNSwzICs1MDM1
LDcgQEAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0NDQyCiBpbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtbmV0
d29yay1yZXNvdXJjZS5odG1sCiBpbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUtc2NyaXB0LXRh
Zy0xLmh0bWwKKworIyAtLS0tLSBGSVhNRTogUXRXZWJraXQgc3VwcG9ydHMgY2xpZW50IGJhc2Vk
IGFuZCBMYXlvdXRUZXN0IGZvciB0aGUgc2FtZSBpcyB5ZXQgdG8gYmUgaW1wbGVtZW50ZWQgLS0t
LS0tIAorZmFzdC9kb20vR2VvbG9jYXRpb24KK2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVy
dGllcy1nZW9sb2NhdGlvbi5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82654</attachid>
            <date>2011-02-16 09:51:08 -0800</date>
            <delta_ts>2011-02-17 09:48:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>42629.patch</filename>
            <type>text/plain</type>
            <size>25401</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4NzAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTYgIE1haGVzaCBL
dWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1wbGVtZW50cyBjbGllbnQgYmFzZWQg
Z2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBSZW1vdmVkIG9sZCBjb2RlIHJlbGF0ZWQgdG8gbm9u
LWNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbgorCisgICAgICAgIE5vIHRlc3RzIGFzIHlldC4gVGhp
cyB3aWxsIGJlIHJhaXNlZCBhcyBkaWZmZXJlbnQgYnVnIGFzIG5ldyBtb2NrIGNsaWVudCBpbXBs
ZW1lbnRhdGlvbiBuZWVkIHRvIGJlIGRvbmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBmZWF0dXJlcy5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9u
U2VydmljZVF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMDItMTQgIE1pa2hhaWwgTmFnYW5vdiAgPG1u
YWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDc4NzAxKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMzNTMsMTIgKzMzNTMsMTEgQEAgY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1FUX0JFQVJFUj0xKSB7CiB9CiAKIGNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9HRU9MT0NBVElPTj0xKSB7Ci0gICAgREVGSU5FUyArPSBXVEZfVVNFX1BSRUVNUFRf
R0VPTE9DQVRJT05fUEVSTUlTU0lPTgotICAgIEhFQURFUlMgKz0gXAotICAgICAgICBwbGF0Zm9y
bS9xdC9HZW9sb2NhdGlvblNlcnZpY2VRdC5oCi0gICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBs
YXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmNwcAotCisgICAgIEhFQURFUlMgKz0gXAor
ICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGll
bnRRdC5oCisgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKKyAKICAgICBDT05GSUcgKz0gbW9i
aWxpdHkKICAgICBNT0JJTElUWSArPSBsb2NhdGlvbgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9m
ZWF0dXJlcy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCShy
ZXZpc2lvbiA3ODcwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkod29ya2luZyBj
b3B5KQpAQCAtMTE5LDYgKzExOSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TSU5HTEVf
VEhSRUFERUQKICFDT05GSUcoUVRESVJfYnVpbGQpOiFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
R0VPTE9DQVRJT049LikgewogICAgIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbG9jYXRpb24p
IHsKICAgICAgICBERUZJTkVTICs9IEVOQUJMRV9HRU9MT0NBVElPTj0xCisgICAgICAgREVGSU5F
UyArPSBFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OPTEKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHJldmlzaW9uIDc4NzAxKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsMyArMjE1LDQg
QEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdlb2xvY2F0
aW9uX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2
aWNlLmgJKHJldmlzaW9uIDc4NzAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2VvbG9j
YXRpb25TZXJ2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDMgKzc4LDQgQEAgcHJpdmF0ZToK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZV9o
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9HZW9sb2NhdGlv
blNlcnZpY2VRdC5jcHAJKHJldmlzaW9uIDc4NzAxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvR2VvbG9jYXRpb25TZXJ2aWNlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2Vy
dmljZVF0LmgiCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1ZGUgIkdlb3Bvc2l0
aW9uLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgotI2luY2x1ZGUgIlBvc2l0aW9uT3B0
aW9ucy5oIgotCi11c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1HZW9sb2NhdGlvblNlcnZpY2U6OkZhY3RvcnlGdW5jdGlvbiogR2VvbG9jYXRpb25T
ZXJ2aWNlOjpzX2ZhY3RvcnlGdW5jdGlvbiA9ICZHZW9sb2NhdGlvblNlcnZpY2VRdDo6Y3JlYXRl
OwotCi1HZW9sb2NhdGlvblNlcnZpY2UqIEdlb2xvY2F0aW9uU2VydmljZVF0OjpjcmVhdGUoR2Vv
bG9jYXRpb25TZXJ2aWNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIG5ldyBHZW9sb2Nh
dGlvblNlcnZpY2VRdChjbGllbnQpOwotfQotCi1HZW9sb2NhdGlvblNlcnZpY2VRdDo6R2VvbG9j
YXRpb25TZXJ2aWNlUXQoR2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBH
ZW9sb2NhdGlvblNlcnZpY2UoY2xpZW50KQotICAgICwgbV9sYXN0UG9zaXRpb24oMCkKLSAgICAs
IG1fbGFzdEVycm9yKDApCi17Ci0gICAgbV9sb2NhdGlvbiA9IFFHZW9Qb3NpdGlvbkluZm9Tb3Vy
Y2U6OmNyZWF0ZURlZmF1bHRTb3VyY2UodGhpcyk7Ci0KLSAgICBpZiAobV9sb2NhdGlvbikKLSAg
ICAgICAgY29ubmVjdChtX2xvY2F0aW9uLCBTSUdOQUwocG9zaXRpb25VcGRhdGVkKFFHZW9Qb3Np
dGlvbkluZm8pKSwgdGhpcywgU0xPVChwb3NpdGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9uSW5mbykp
KTsKLX0KLQotR2VvbG9jYXRpb25TZXJ2aWNlUXQ6On5HZW9sb2NhdGlvblNlcnZpY2VRdCgpCi17
Ci0gICAgZGVsZXRlIG1fbG9jYXRpb247Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlUXQ6
OnBvc2l0aW9uVXBkYXRlZChjb25zdCBRR2VvUG9zaXRpb25JbmZvICZnZW9Qb3NpdGlvbikKLXsK
LSAgICBpZiAoIWdlb1Bvc2l0aW9uLmlzVmFsaWQoKSkKLSAgICAgICAgZXJyb3JPY2N1cnJlZCgp
OwotCi0gICAgUUdlb0Nvb3JkaW5hdGUgY29vcmQgPSBnZW9Qb3NpdGlvbi5jb29yZGluYXRlKCk7
Ci0gICAgZG91YmxlIGxhdGl0dWRlID0gY29vcmQubGF0aXR1ZGUoKTsKLSAgICBkb3VibGUgbG9u
Z2l0dWRlID0gY29vcmQubG9uZ2l0dWRlKCk7Ci0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0g
KGdlb1Bvc2l0aW9uLmNvb3JkaW5hdGUoKS50eXBlKCkgPT0gUUdlb0Nvb3JkaW5hdGU6OkNvb3Jk
aW5hdGUzRCk7Ci0gICAgZG91YmxlIGFsdGl0dWRlID0gY29vcmQuYWx0aXR1ZGUoKTsKLQotICAg
IGRvdWJsZSBhY2N1cmFjeSA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZv
OjpIb3Jpem9udGFsQWNjdXJhY3kpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJh
Y3kgPSBnZW9Qb3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6VmVydGljYWxB
Y2N1cmFjeSk7Ci0gICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3kgPSBnZW9Qb3NpdGlvbi5hdHRy
aWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6VmVydGljYWxBY2N1cmFjeSk7Ci0KLSAgICBib29sIHBy
b3ZpZGVzSGVhZGluZyA9ICBnZW9Qb3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5m
bzo6RGlyZWN0aW9uKTsKLSAgICBkb3VibGUgaGVhZGluZyA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0
ZShRR2VvUG9zaXRpb25JbmZvOjpEaXJlY3Rpb24pOwotCi0gICAgYm9vbCBwcm92aWRlc1NwZWVk
ID0gZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86Okdyb3VuZFNwZWVk
KTsKLSAgICBkb3VibGUgc3BlZWQgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9u
SW5mbzo6R3JvdW5kU3BlZWQpOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRl
cyA9IENvb3JkaW5hdGVzOjpjcmVhdGUobGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRp
dHVkZSwgYWx0aXR1ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0
aXR1ZGVBY2N1cmFjeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQs
IHNwZWVkKTsKLQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQot
ICAgIG1fbGFzdFBvc2l0aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxl
YXNlKCksIGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpLnRvTVNlY3NTaW5jZUVwb2NoKCkpOwotI2Vs
c2UKLSAgICBRRGF0ZVRpbWUgdGltZXN0YW1wID0gZ2VvUG9zaXRpb24udGltZXN0YW1wKCk7Ci0g
ICAgbV9sYXN0UG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVh
c2UoKSwgKHRpbWVzdGFtcC50b1RpbWVfdCgpICogMTAwMC4wMCkgKyB0aW1lc3RhbXAudGltZSgp
Lm1zZWMoKSk7Ci0jZW5kaWYKLSAgICBwb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotYm9vbCBHZW9s
b2NhdGlvblNlcnZpY2VRdDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKQotewotICAg
IG1fbGFzdFBvc2l0aW9uID0gMDsKLQotICAgIGlmICghbV9sb2NhdGlvbikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gVE9ETzogaGFuZGxlIGVuYWJsZUhpZ2hBY2N1cmFjeSgpCi0K
LSAgICBtX2xvY2F0aW9uLT5zdGFydFVwZGF0ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBHZW9sb2NhdGlvblNlcnZpY2VRdDo6c3RvcFVwZGF0aW5nKCkKLXsKLSAgICBpZiAobV9s
b2NhdGlvbikKLSAgICAgICAgbV9sb2NhdGlvbi0+c3RvcFVwZGF0ZXMoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9j
YXRpb25TZXJ2aWNlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9HZW9sb2NhdGlvblNlcnZpY2VRdC5oCShyZXZpc2lvbiA3ODcwMSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VRdF9oCi0jZGVmaW5l
IEdlb2xvY2F0aW9uU2VydmljZVF0X2gKLQotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5o
IgotI2luY2x1ZGUgPFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi0vLyBGSVhNRTogUmVtb3ZlIHVzYWdlIG9mICJ1c2luZyBuYW1lc3BhY2UiIGluIGEg
aGVhZGVyIGZpbGUuCi0vLyBUaGVyZSBpcyBidWcgaW4gcXRNb2JpbGl0eSBzaWduYWwgbmFtZXMg
YXJlIG5vdCBmdWxsIHF1YWxpZmllZCB3aGVuIHVzZWQgd2l0aCBuYW1lc3BhY2UKLS8vIFF0TW9i
aWxpdHkgbmFtZXNwYWNlIGluIHNsb3RzIHRocm93cyB1cCBlcnJvciBhbmQgaXRzIHJlcXVpcmVk
IHRvIGJlIGZpeGVkIGluIHF0bW9iaWxpdHkuCi11c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgaW1wbGVt
ZW50YXRpb24gb2YgYSBHZW9sb2NhdGlvblNlcnZpY2UgZm9yIHF0V2Via2l0LgotLy8gSXQgdXNl
cyBRdE1vYmlsaXR5ICh2MS4wLjApIGxvY2F0aW9uIHNlcnZpY2UgdG8gZ2V0IHBvc2l0aW9ucwot
Y2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlUXQgOiBwdWJsaWMgUU9iamVjdCwgR2VvbG9jYXRpb25T
ZXJ2aWNlIHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgc3RhdGljIEdlb2xvY2F0aW9u
U2VydmljZSogY3JlYXRlKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwotCi0gICAgR2VvbG9j
YXRpb25TZXJ2aWNlUXQoR2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+
R2VvbG9jYXRpb25TZXJ2aWNlUXQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5n
KFBvc2l0aW9uT3B0aW9ucyopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKLQot
ICAgIHZpcnR1YWwgR2VvcG9zaXRpb24qIGxhc3RQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdFBvc2l0aW9uLmdldCgpOyB9Ci0gICAgdmlydHVhbCBQb3NpdGlvbkVycm9yKiBsYXN0RXJy
b3IoKSBjb25zdCB7IHJldHVybiBtX2xhc3RFcnJvci5nZXQoKTsgfQotCi1wdWJsaWMgUV9TTE9U
UzoKLSAgICAvLyBRR2VvUG9zaXRpb25JbmZvU291cmNlCi0gICAgdm9pZCBwb3NpdGlvblVwZGF0
ZWQoY29uc3QgUUdlb1Bvc2l0aW9uSW5mbyYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxHZW9w
b3NpdGlvbj4gbV9sYXN0UG9zaXRpb247Ci0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fbGFz
dEVycm9yOwotCi0gICAgUXRNb2JpbGl0eTo6UUdlb1Bvc2l0aW9uSW5mb1NvdXJjZSogbV9sb2Nh
dGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdlb2xvY2F0
aW9uU2VydmljZVF0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODcwMSkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTEtMDItMTYgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJ
bXBsZW1lbnQgY2xpZW50IGJhc2VkIGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1w
bGVtZW50cyBjbGllbnQgYmFzZWQgZ2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBOZXcgY2xpZW50
IGJhc2VkIGdlb2xvY2F0aW9uIGNvbnRhaW5zIHBlcm1pc3Npb24gQVBJJ3MgYXMgd2VsbAorICAg
ICAgICBzbyByZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIENocm9tZUNsaWVudFF0LmNw
cC4gCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2
YXRlOjpRV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudFF0LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1p
c3Npb25Gb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6Y2FuY2Vs
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHZW9sb2NhdGlvbkNsaWVudFF0OjpHZW9sb2NhdGlvbkNsaWVudFF0KToKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlvbkNsaWVudFF0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uRGVzdHJveWVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnBvc2l0aW9uVXBkYXRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpzdGFydFVwZGF0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0b3BVcGRhdGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpzZXRFbmFibGVIaWdoQWNjdXJh
Y3kpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6cmVxdWVzdFBlcm1p
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6Y2FuY2VsUGVy
bWlzc2lvblJlcXVlc3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xp
ZW50UXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0Ojps
YXN0UG9zaXRpb24pOgorCiAyMDExLTAyLTE2ICBBcGFybmEgTmFuZHlhbCAgPGFwYXJuYS5uYW5k
QHdpcHJvLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpJbmRleDog
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNzg3MDEpCisrKyBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25DbGllbnRRdC5o
IgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBA
IC0zMjQsNiArMzI1LDkgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBh
ZwogICAgIHBhZ2VDbGllbnRzLmRldmljZU9yaWVudGF0aW9uQ2xpZW50ID0gbmV3IERldmljZU9y
aWVudGF0aW9uQ2xpZW50UXQocSk7CiAgICAgcGFnZUNsaWVudHMuZGV2aWNlTW90aW9uQ2xpZW50
ID0gbmV3IERldmljZU1vdGlvbkNsaWVudFF0KHEpOwogI2VuZGlmCisjaWYgRU5BQkxFKEdFT0xP
Q0FUSU9OKQorICAgIHBhZ2VDbGllbnRzLmdlb2xvY2F0aW9uQ2xpZW50ID0gbmV3IEdlb2xvY2F0
aW9uQ2xpZW50UXQocSk7CisjZW5kaWYKICAgICBwYWdlID0gbmV3IFBhZ2UocGFnZUNsaWVudHMp
OwogCiAgICAgc2V0dGluZ3MgPSBuZXcgUVdlYlNldHRpbmdzKHBhZ2UtPnNldHRpbmdzKCkpOwpJ
bmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRRdC5jcHAJKHJldmlzaW9uIDc4NzAxKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgogI2VuZGlmCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUg
Ik5hdmlnYXRpb25BY3Rpb24uaCIKQEAgLTYwNCwyMSArNjAzLDYgQEAgdm9pZCBDaHJvbWVDbGll
bnRRdDo6c2V0Q3Vyc29yKGNvbnN0IEN1cgogI2VuZGlmCiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50
UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKLXsKLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAg
UVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmtpdChmcmFtZSk7Ci0gICAg
R2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVu
dCgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUod2ViRnJhbWUsIGdlb2xv
Y2F0aW9uKTsKLSNlbmRpZgotfQotCi12b2lkIENocm9tZUNsaWVudFF0OjpjYW5jZWxHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiog
Z2VvbG9jYXRpb24pCi17Ci0jaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFFXZWJGcmFtZSog
d2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOwotICAgIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2Vs
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlv
bik7Ci0jZW5kaWYKLX0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQg
Q2hyb21lQ2xpZW50UXQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmgJKHJldmlzaW9uIDc4NzAxKQorKysgU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODMsOCArMTgzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYsIGNvbnN0IFNjcm9s
bFZpZXcqKSBjb25zdCB7fQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0R2VvbG9jYXRp
b25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKEZyYW1l
KiwgR2VvbG9jYXRpb24qKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9sb2NhdGlv
blBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikge30KKyAgICAgICAgdmly
dHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZShGcmFt
ZSosIEdlb2xvY2F0aW9uKikge30KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbVdy
aXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAgdmlydHVhbCBib29sIHNlbGVjdEl0
ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2Vv
bG9jYXRpb25DbGllbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50UXQuaCIKKwor
I2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVy
LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgor
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJxd2Vi
ZnJhbWVfcC5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisjaW5jbHVkZSAicXdlYnBhZ2VfcC5o
IgorCit1c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgY29uc3QgY2hhciBmYWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2FnZVtdID0g
IkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIjsKKworR2VvbG9jYXRpb25DbGll
bnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdChRV2ViUGFnZSogcGFnZSkKKyAgICA6IG1fcGFnZShw
YWdlKQorICAgICwgbV9sYXN0UG9zaXRpb24oMCkKK3sKKyAgICBtX2xvY2F0aW9uID0gUUdlb1Bv
c2l0aW9uSW5mb1NvdXJjZTo6Y3JlYXRlRGVmYXVsdFNvdXJjZSh0aGlzKTsKKworICAgIGlmICht
X2xvY2F0aW9uKQorICAgICAgICBjb25uZWN0KG1fbG9jYXRpb24sIFNJR05BTChwb3NpdGlvblVw
ZGF0ZWQoUUdlb1Bvc2l0aW9uSW5mbykpLCB0aGlzLCBTTE9UKHBvc2l0aW9uVXBkYXRlZChRR2Vv
UG9zaXRpb25JbmZvKSkpOworCit9CisKK0dlb2xvY2F0aW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlv
bkNsaWVudFF0KCkKK3sKKyAgICBkZWxldGUgbV9sb2NhdGlvbjsKK30KKwordm9pZCBHZW9sb2Nh
dGlvbkNsaWVudFF0OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCgpCit7CisgICAgZGVsZXRlIHRoaXM7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6cG9zaXRpb25VcGRhdGVkKGNvbnN0IFFH
ZW9Qb3NpdGlvbkluZm8gJmdlb1Bvc2l0aW9uKQoreworICAgIGlmICghZ2VvUG9zaXRpb24uaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRR2VvQ29vcmRpbmF0ZSBjb29yZCA9IGdl
b1Bvc2l0aW9uLmNvb3JkaW5hdGUoKTsKKyAgICBkb3VibGUgbGF0aXR1ZGUgPSBjb29yZC5sYXRp
dHVkZSgpOworICAgIGRvdWJsZSBsb25naXR1ZGUgPSBjb29yZC5sb25naXR1ZGUoKTsKKyAgICBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUgPSAoZ2VvUG9zaXRpb24uY29vcmRpbmF0ZSgpLnR5cGUoKSA9
PSBRR2VvQ29vcmRpbmF0ZTo6Q29vcmRpbmF0ZTNEKTsKKyAgICBkb3VibGUgYWx0aXR1ZGUgPSBj
b29yZC5hbHRpdHVkZSgpOworCisgICAgZG91YmxlIGFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uYXR0
cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86Okhvcml6b250YWxBY2N1cmFjeSk7CisKKyAgICBib29s
IHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSA9IGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2Vv
UG9zaXRpb25JbmZvOjpWZXJ0aWNhbEFjY3VyYWN5KTsKKyAgICBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpWZXJ0aWNhbEFj
Y3VyYWN5KTsKKworICAgIGJvb2wgcHJvdmlkZXNIZWFkaW5nID0gIGdlb1Bvc2l0aW9uLmhhc0F0
dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpEaXJlY3Rpb24pOworICAgIGRvdWJsZSBoZWFkaW5n
ID0gZ2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OkRpcmVjdGlvbik7CisK
KyAgICBib29sIHByb3ZpZGVzU3BlZWQgPSBnZW9Qb3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bv
c2l0aW9uSW5mbzo6R3JvdW5kU3BlZWQpOworICAgIGRvdWJsZSBzcGVlZCA9IGdlb1Bvc2l0aW9u
LmF0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpHcm91bmRTcGVlZCk7CisKKyNpZiBRVF9WRVJT
SU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNywgMCkKKyAgICBkb3VibGUgdGltZXN0YW1wID0g
Z2VvUG9zaXRpb24udGltZXN0YW1wKCkudG9NU2Vjc1NpbmNlRXBvY2goKSAvIDEwMDA7CisjZWxz
ZQorICAgIFFEYXRlVGltZSBkYXRldGltZSA9IGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpOworICAg
IGRvdWJsZSB0aW1lc3RhbXAgPSAoZGF0ZXRpbWUudG9UaW1lX3QoKSArIGRhdGV0aW1lLnRpbWUo
KS5tc2VjKCkpIC8gMTAwMDsKKyNlbmRpZgorCisgICAgbV9sYXN0UG9zaXRpb24gPSBHZW9sb2Nh
dGlvblBvc2l0aW9uOjpjcmVhdGUodGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5LCBw
cm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNj
dXJhY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7CisKKyAgICBX
ZWJDb3JlOjpQYWdlKiBwYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKG1fcGFnZSk7CisgICAg
cGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPnBvc2l0aW9uQ2hhbmdlZChtX2xhc3RQb3Np
dGlvbi5nZXQoKSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6c3RhcnRVcGRhdGlu
ZygpCit7CisgICAgaWYgKCFtX2xvY2F0aW9uKSB7CisgICAgICAgIFdlYkNvcmU6OlBhZ2UqIHBh
Z2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUobV9wYWdlKTsKKyAgICAgICAgUmVmUHRyPFdlYkNv
cmU6Okdlb2xvY2F0aW9uRXJyb3I+IGVycm9yID0gR2VvbG9jYXRpb25FcnJvcjo6Y3JlYXRlKEdl
b2xvY2F0aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNl
RXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmVy
cm9yT2NjdXJyZWQoZXJyb3IuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9sb2NhdGlvbi0+c3RhcnRVcGRhdGVzKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRR
dDo6c3RvcFVwZGF0aW5nKCkKK3sKKyAgICBpZiAobV9sb2NhdGlvbikKKyAgICAgICAgbV9sb2Nh
dGlvbi0+c3RvcFVwZGF0ZXMoKTsKK30KKworCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnNl
dEVuYWJsZUhpZ2hBY2N1cmFjeShib29sKQoreworICAgIC8vIHF0bW9iaWxpdHkgMS4wIHN1cHBv
cnRzIG9ubHkgR1BTIGFzIG9mIG5vdyBzbyBoaWdoIGFjY3VyYWN5IGlzIGVuYWJsZWQgYnkgZGVm
YXVsdAorfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50UXQ6OnJlcXVlc3RQZXJtaXNzaW9uKEdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sKKyAgICBBU1NFUlQoZ2VvbG9jYXRpb24pOworICAg
IFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZ2VvbG9jYXRpb24t
PmZyYW1lKCkpOworICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlv
blBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1l
KHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25DbGllbnRRdDo6
Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9uKQoreworICAg
IEFTU0VSVChnZW9sb2NhdGlvbik7CisgICAgUVdlYkZyYW1lKiB3ZWJGcmFtZSA9IFFXZWJGcmFt
ZVByaXZhdGU6OmtpdChnZW9sb2NhdGlvbi0+ZnJhbWUoKSk7CisgICAgR2VvbG9jYXRpb25QZXJt
aXNzaW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudCgpLT5jYW5jZWxHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUod2ViRnJhbWUsIGdlb2xvY2F0aW9uKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHZW9sb2NhdGlvbkNs
aWVudFF0X2gKKyNkZWZpbmUgR2VvbG9jYXRpb25DbGllbnRRdF9oCisKKyNpbmNsdWRlICJHZW9s
b2NhdGlvbkNsaWVudC5oIgorI2luY2x1ZGUgPFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCisvLyBGSVhNRTogUmVtb3ZlIHVzYWdlIG9mICJ1c2luZyBu
YW1lc3BhY2UiIGluIGEgaGVhZGVyIGZpbGUuCisvLyBUaGVyZSBpcyBidWcgaW4gcXRNb2JpbGl0
eSBzaWduYWwgbmFtZXMgYXJlIG5vdCBmdWxsIHF1YWxpZmllZCB3aGVuIHVzZWQgd2l0aCBuYW1l
c3BhY2UKKy8vIFF0TW9iaWxpdHkgbmFtZXNwYWNlIGluIHNsb3RzIHRocm93cyB1cCBlcnJvciBh
bmQgaXRzIHJlcXVpcmVkIHRvIGJlIGZpeGVkIGluIHF0bW9iaWxpdHkuCit1c2luZyBuYW1lc3Bh
Y2UgUXRNb2JpbGl0eTsKKworY2xhc3MgUVdlYlBhZ2U7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGltcGxlbWVudGF0aW9uIG9mIGEgR2VvbG9jYXRp
b25TZXJ2aWNlIGZvciBxdFdlYmtpdC4KKy8vIEl0IHVzZXMgUXRNb2JpbGl0eSAodjEuMC4wKSBs
b2NhdGlvbiBzZXJ2aWNlIHRvIGdldCBwb3NpdGlvbnMKK2NsYXNzIEdlb2xvY2F0aW9uQ2xpZW50
UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIEdlb2xvY2F0aW9uQ2xpZW50IHsKKyAgICBRX09C
SkVDVAorCitwdWJsaWM6CisgICAgR2VvbG9jYXRpb25DbGllbnRRdChRV2ViUGFnZSopOworICAg
IHZpcnR1YWwgfkdlb2xvY2F0aW9uQ2xpZW50UXQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW9s
b2NhdGlvbkRlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFVwZGF0aW5nKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOworCisgICAgdm9pZCBzZXRFbmFibGVIaWdo
QWNjdXJhY3koYm9vbCk7CisgICAgdmlydHVhbCBHZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9z
aXRpb24oKSB7IHJldHVybiBtX2xhc3RQb3NpdGlvbi5nZXQoKTsgfQorCisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKik7CisgICAgdmlydHVhbCB2b2lkIGNh
bmNlbFBlcm1pc3Npb25SZXF1ZXN0KEdlb2xvY2F0aW9uKik7CisKK3ByaXZhdGUgUV9TTE9UUzoK
KyAgICAvLyBRR2VvUG9zaXRpb25JbmZvU291cmNlCisgICAgdm9pZCBwb3NpdGlvblVwZGF0ZWQo
Y29uc3QgUUdlb1Bvc2l0aW9uSW5mbyYpOworCitwcml2YXRlOgorICAgIFFXZWJQYWdlKiBtX3Bh
Z2U7CisgICAgUmVmUHRyPEdlb2xvY2F0aW9uUG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOworICAg
IFF0TW9iaWxpdHk6OlFHZW9Qb3NpdGlvbkluZm9Tb3VyY2UqIG1fbG9jYXRpb247Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBHZW9sb2NhdGlvbkNsaWVudFF0X2gK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDc4NzAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDItMTYgIE1haGVzaCBLdWxrYXJuaSAg
PG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2VkIGdlb2xvY2F0
aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyNjI5CisKKyAgICAgICAgRGlzYWJsZSBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdCBj
YXNlIHVudGlsIGNsaWVudC1iYXNlZCBtb2NrIGxheW91dCBjb250cm9sbGVyIGlzIGltcGxlbWVu
dGVkLgorCisgICAgICAgICogcGxhdGZvcm0vcXQvU2tpcHBlZDoKKwogMjAxMS0wMi0xNiAgUGhp
bGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBSb2Jlbi4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gNzg3
MDEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBA
IC01MDM1LDMgKzUwMzUsNyBAQCBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cwogIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ0NDIKIGluc3BlY3Rvci90aW1lbGlu
ZS90aW1lbGluZS1uZXR3b3JrLXJlc291cmNlLmh0bWwKIGluc3BlY3Rvci90aW1lbGluZS90aW1l
bGluZS1zY3JpcHQtdGFnLTEuaHRtbAorCisjIC0tLS0tIEZJWE1FOiBRdFdlYmtpdCBzdXBwb3J0
cyBjbGllbnQgYmFzZWQgYW5kIExheW91dFRlc3QgZm9yIHRoZSBzYW1lIGlzIHlldCB0byBiZSBp
bXBsZW1lbnRlZCAtLS0tLS0gCitmYXN0L2RvbS9HZW9sb2NhdGlvbgorZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wcm9wZXJ0aWVzLWdlb2xvY2F0aW9uLmh0bWwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82823</attachid>
            <date>2011-02-17 09:48:31 -0800</date>
            <delta_ts>2011-02-18 13:42:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>42629.patch</filename>
            <type>text/plain</type>
            <size>25644</size>
            <attacher name="Mahesh Kulkarni">maheshk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODMwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTcgIE1haGVzaCBL
dWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1lbnQgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1wbGVtZW50cyBjbGllbnQgYmFzZWQg
Z2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBSZW1vdmVkIG9sZCBjb2RlIHJlbGF0ZWQgdG8gbm9u
LWNsaWVudCBiYXNlZCBnZW9sb2NhdGlvbgorCisgICAgICAgIE5vIHRlc3RzIGFzIHlldC4gVGhp
cyB3aWxsIGJlIHJhaXNlZCBhcyBkaWZmZXJlbnQgYnVnIGFzIG5ldyBtb2NrIGNsaWVudCBpbXBs
ZW1lbnRhdGlvbiBuZWVkIHRvIGJlIGRvbmUuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBmZWF0dXJlcy5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dlb2xvY2F0aW9u
U2VydmljZVF0Lmg6IFJlbW92ZWQuCisKIDIwMTEtMDItMTcgIEh1aSBIdWFuZyAgPGh1aS4yLmh1
YW5nQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDc4ODMwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMzNTMsMTIgKzMzNTMsMTEgQEAgY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX1FUX0JFQVJFUj0xKSB7CiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9HRU9MT0NBVElPTj0xKSB7Ci0gICAgREVGSU5FUyArPSBXVEZfVVNFX1BSRUVNUFRfR0VPTE9D
QVRJT05fUEVSTUlTU0lPTgotICAgIEhFQURFUlMgKz0gXAotICAgICAgICBwbGF0Zm9ybS9xdC9H
ZW9sb2NhdGlvblNlcnZpY2VRdC5oCi0gICAgU09VUkNFUyArPSBcCi0gICAgICAgIHBsYXRmb3Jt
L3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmNwcAotCisgICAgIEhFQURFUlMgKz0gXAorICAgICAg
ICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5o
CisgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAKKyAKICAgICBDT05GSUcgKz0gbW9iaWxpdHkK
ICAgICBNT0JJTElUWSArPSBsb2NhdGlvbgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9mZWF0dXJl
cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCShyZXZpc2lv
biA3ODgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDYgKzExOSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TSU5HTEVfVEhSRUFE
RUQKICFDT05GSUcoUVRESVJfYnVpbGQpOiFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfR0VPTE9D
QVRJT049LikgewogICAgIGNvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbG9jYXRpb24pIHsKICAg
ICAgICBERUZJTkVTICs9IEVOQUJMRV9HRU9MT0NBVElPTj0xCisgICAgICAgREVGSU5FUyArPSBF
TkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OPTEKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0dlb2xvY2F0aW9uLmgJKHJldmlzaW9uIDc4ODMwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsMyArMjE1LDQgQEAgcHJp
dmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdlb2xvY2F0aW9uX2gK
KwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmgJ
KHJldmlzaW9uIDc4ODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25T
ZXJ2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDMgKzc4LDQgQEAgcHJpdmF0ZToKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2VydmljZV9oCisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9HZW9sb2NhdGlvblNlcnZp
Y2VRdC5jcHAJKHJldmlzaW9uIDc4ODMwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
R2VvbG9jYXRpb25TZXJ2aWNlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZVF0
LmgiCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgi
Ci0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgotI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5o
IgotCi11c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1HZW9sb2NhdGlvblNlcnZpY2U6OkZhY3RvcnlGdW5jdGlvbiogR2VvbG9jYXRpb25TZXJ2aWNl
OjpzX2ZhY3RvcnlGdW5jdGlvbiA9ICZHZW9sb2NhdGlvblNlcnZpY2VRdDo6Y3JlYXRlOwotCi1H
ZW9sb2NhdGlvblNlcnZpY2UqIEdlb2xvY2F0aW9uU2VydmljZVF0OjpjcmVhdGUoR2VvbG9jYXRp
b25TZXJ2aWNlQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIG5ldyBHZW9sb2NhdGlvblNl
cnZpY2VRdChjbGllbnQpOwotfQotCi1HZW9sb2NhdGlvblNlcnZpY2VRdDo6R2VvbG9jYXRpb25T
ZXJ2aWNlUXQoR2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHZW9sb2Nh
dGlvblNlcnZpY2UoY2xpZW50KQotICAgICwgbV9sYXN0UG9zaXRpb24oMCkKLSAgICAsIG1fbGFz
dEVycm9yKDApCi17Ci0gICAgbV9sb2NhdGlvbiA9IFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U6OmNy
ZWF0ZURlZmF1bHRTb3VyY2UodGhpcyk7Ci0KLSAgICBpZiAobV9sb2NhdGlvbikKLSAgICAgICAg
Y29ubmVjdChtX2xvY2F0aW9uLCBTSUdOQUwocG9zaXRpb25VcGRhdGVkKFFHZW9Qb3NpdGlvbklu
Zm8pKSwgdGhpcywgU0xPVChwb3NpdGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9uSW5mbykpKTsKLX0K
LQotR2VvbG9jYXRpb25TZXJ2aWNlUXQ6On5HZW9sb2NhdGlvblNlcnZpY2VRdCgpCi17Ci0gICAg
ZGVsZXRlIG1fbG9jYXRpb247Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25TZXJ2aWNlUXQ6OnBvc2l0
aW9uVXBkYXRlZChjb25zdCBRR2VvUG9zaXRpb25JbmZvICZnZW9Qb3NpdGlvbikKLXsKLSAgICBp
ZiAoIWdlb1Bvc2l0aW9uLmlzVmFsaWQoKSkKLSAgICAgICAgZXJyb3JPY2N1cnJlZCgpOwotCi0g
ICAgUUdlb0Nvb3JkaW5hdGUgY29vcmQgPSBnZW9Qb3NpdGlvbi5jb29yZGluYXRlKCk7Ci0gICAg
ZG91YmxlIGxhdGl0dWRlID0gY29vcmQubGF0aXR1ZGUoKTsKLSAgICBkb3VibGUgbG9uZ2l0dWRl
ID0gY29vcmQubG9uZ2l0dWRlKCk7Ci0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0gKGdlb1Bv
c2l0aW9uLmNvb3JkaW5hdGUoKS50eXBlKCkgPT0gUUdlb0Nvb3JkaW5hdGU6OkNvb3JkaW5hdGUz
RCk7Ci0gICAgZG91YmxlIGFsdGl0dWRlID0gY29vcmQuYWx0aXR1ZGUoKTsKLQotICAgIGRvdWJs
ZSBhY2N1cmFjeSA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShRR2VvUG9zaXRpb25JbmZvOjpIb3Jp
em9udGFsQWNjdXJhY3kpOwotCi0gICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kgPSBn
ZW9Qb3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6VmVydGljYWxBY2N1cmFj
eSk7Ci0gICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3kgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUo
UUdlb1Bvc2l0aW9uSW5mbzo6VmVydGljYWxBY2N1cmFjeSk7Ci0KLSAgICBib29sIHByb3ZpZGVz
SGVhZGluZyA9ICBnZW9Qb3NpdGlvbi5oYXNBdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6RGly
ZWN0aW9uKTsKLSAgICBkb3VibGUgaGVhZGluZyA9IGdlb1Bvc2l0aW9uLmF0dHJpYnV0ZShRR2Vv
UG9zaXRpb25JbmZvOjpEaXJlY3Rpb24pOwotCi0gICAgYm9vbCBwcm92aWRlc1NwZWVkID0gZ2Vv
UG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86Okdyb3VuZFNwZWVkKTsKLSAg
ICBkb3VibGUgc3BlZWQgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6
R3JvdW5kU3BlZWQpOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcyA9IENv
b3JkaW5hdGVzOjpjcmVhdGUobGF0aXR1ZGUsIGxvbmdpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZSwg
YWx0aXR1ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVB
Y2N1cmFjeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVk
KTsKLQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQotICAgIG1f
bGFzdFBvc2l0aW9uID0gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNlKCks
IGdlb1Bvc2l0aW9uLnRpbWVzdGFtcCgpLnRvTVNlY3NTaW5jZUVwb2NoKCkpOwotI2Vsc2UKLSAg
ICBRRGF0ZVRpbWUgdGltZXN0YW1wID0gZ2VvUG9zaXRpb24udGltZXN0YW1wKCk7Ci0gICAgbV9s
YXN0UG9zaXRpb24gPSBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVhc2UoKSwg
KHRpbWVzdGFtcC50b1RpbWVfdCgpICogMTAwMC4wMCkgKyB0aW1lc3RhbXAudGltZSgpLm1zZWMo
KSk7Ci0jZW5kaWYKLSAgICBwb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotYm9vbCBHZW9sb2NhdGlv
blNlcnZpY2VRdDo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKQotewotICAgIG1fbGFz
dFBvc2l0aW9uID0gMDsKLQotICAgIGlmICghbV9sb2NhdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gVE9ETzogaGFuZGxlIGVuYWJsZUhpZ2hBY2N1cmFjeSgpCi0KLSAgICBt
X2xvY2F0aW9uLT5zdGFydFVwZGF0ZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBH
ZW9sb2NhdGlvblNlcnZpY2VRdDo6c3RvcFVwZGF0aW5nKCkKLXsKLSAgICBpZiAobV9sb2NhdGlv
bikKLSAgICAgICAgbV9sb2NhdGlvbi0+c3RvcFVwZGF0ZXMoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvR2VvbG9jYXRpb25T
ZXJ2aWNlUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9HZW9s
b2NhdGlvblNlcnZpY2VRdC5oCShyZXZpc2lvbiA3ODgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L0dlb2xvY2F0aW9uU2VydmljZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBHZW9sb2NhdGlvblNlcnZpY2VRdF9oCi0jZGVmaW5lIEdlb2xv
Y2F0aW9uU2VydmljZVF0X2gKLQotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgotI2lu
Y2x1ZGUgPFFHZW9Qb3NpdGlvbkluZm9Tb3VyY2U+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci0vLyBGSVhNRTogUmVtb3ZlIHVzYWdlIG9mICJ1c2luZyBuYW1lc3BhY2UiIGluIGEgaGVhZGVy
IGZpbGUuCi0vLyBUaGVyZSBpcyBidWcgaW4gcXRNb2JpbGl0eSBzaWduYWwgbmFtZXMgYXJlIG5v
dCBmdWxsIHF1YWxpZmllZCB3aGVuIHVzZWQgd2l0aCBuYW1lc3BhY2UKLS8vIFF0TW9iaWxpdHkg
bmFtZXNwYWNlIGluIHNsb3RzIHRocm93cyB1cCBlcnJvciBhbmQgaXRzIHJlcXVpcmVkIHRvIGJl
IGZpeGVkIGluIHF0bW9iaWxpdHkuCi11c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgaW1wbGVtZW50YXRp
b24gb2YgYSBHZW9sb2NhdGlvblNlcnZpY2UgZm9yIHF0V2Via2l0LgotLy8gSXQgdXNlcyBRdE1v
YmlsaXR5ICh2MS4wLjApIGxvY2F0aW9uIHNlcnZpY2UgdG8gZ2V0IHBvc2l0aW9ucwotY2xhc3Mg
R2VvbG9jYXRpb25TZXJ2aWNlUXQgOiBwdWJsaWMgUU9iamVjdCwgR2VvbG9jYXRpb25TZXJ2aWNl
IHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgc3RhdGljIEdlb2xvY2F0aW9uU2Vydmlj
ZSogY3JlYXRlKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwotCi0gICAgR2VvbG9jYXRpb25T
ZXJ2aWNlUXQoR2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+R2VvbG9j
YXRpb25TZXJ2aWNlUXQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0
aW9uT3B0aW9ucyopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKLQotICAgIHZp
cnR1YWwgR2VvcG9zaXRpb24qIGxhc3RQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBv
c2l0aW9uLmdldCgpOyB9Ci0gICAgdmlydHVhbCBQb3NpdGlvbkVycm9yKiBsYXN0RXJyb3IoKSBj
b25zdCB7IHJldHVybiBtX2xhc3RFcnJvci5nZXQoKTsgfQotCi1wdWJsaWMgUV9TTE9UUzoKLSAg
ICAvLyBRR2VvUG9zaXRpb25JbmZvU291cmNlCi0gICAgdm9pZCBwb3NpdGlvblVwZGF0ZWQoY29u
c3QgUUdlb1Bvc2l0aW9uSW5mbyYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxHZW9wb3NpdGlv
bj4gbV9sYXN0UG9zaXRpb247Ci0gICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fbGFzdEVycm9y
OwotCi0gICAgUXRNb2JpbGl0eTo6UUdlb1Bvc2l0aW9uSW5mb1NvdXJjZSogbV9sb2NhdGlvbjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdlb2xvY2F0aW9uU2Vy
dmljZVF0X2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODgzMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEt
MDItMTcgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5rdWxrYXJuaUBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1FUXSBJbXBsZW1l
bnQgY2xpZW50IGJhc2VkIGdlb2xvY2F0aW9uIGZvciBxdHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNjI5CisKKyAgICAgICAgSW1wbGVtZW50
cyBjbGllbnQgYmFzZWQgZ2VvbG9jYXRpb24gZm9yIHF0d2Via2l0LiBOZXcgY2xpZW50IGJhc2Vk
IGdlb2xvY2F0aW9uIGNvbnRhaW5zIHBlcm1pc3Npb24gQVBJJ3MgYXMgd2VsbAorICAgICAgICBz
byByZW1vdmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIENocm9tZUNsaWVudFF0LmNwcC4gCisK
KyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpR
V2ViUGFnZVByaXZhdGUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0
LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50UXQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25G
b3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvbkNsaWVudFF0OjpHZW9sb2NhdGlvbkNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uQ2xpZW50UXQ6On5HZW9sb2NhdGlvbkNsaWVudFF0KToKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6Omdlb2xvY2F0aW9uRGVzdHJveWVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnBvc2l0aW9uVXBkYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpzdGFydFVwZGF0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uQ2xpZW50UXQ6OnN0b3BVcGRhdGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpzZXRFbmFibGVIaWdoQWNjdXJhY3kpOgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6cmVxdWVzdFBlcm1pc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25DbGllbnRRdDo6Y2FuY2VsUGVybWlzc2lv
blJlcXVlc3QpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0dlb2xvY2F0aW9uQ2xpZW50UXQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbkNsaWVudFF0OjpsYXN0UG9z
aXRpb24pOgorCiAyMDExLTAyLTE3ICBIdWkgSHVhbmcgIDxodWkuMi5odWFuZ0Bub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDc4ODMwKQorKysgU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ2xpZW50UXQuaCIKICNpbmNsdWRl
ICJHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtMzI0LDYgKzMy
NSw5IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWcKICAgICBwYWdl
Q2xpZW50cy5kZXZpY2VPcmllbnRhdGlvbkNsaWVudCA9IG5ldyBEZXZpY2VPcmllbnRhdGlvbkNs
aWVudFF0KHEpOwogICAgIHBhZ2VDbGllbnRzLmRldmljZU1vdGlvbkNsaWVudCA9IG5ldyBEZXZp
Y2VNb3Rpb25DbGllbnRRdChxKTsKICNlbmRpZgorI2lmIEVOQUJMRShHRU9MT0NBVElPTikKKyAg
ICBwYWdlQ2xpZW50cy5nZW9sb2NhdGlvbkNsaWVudCA9IG5ldyBHZW9sb2NhdGlvbkNsaWVudFF0
KHEpOworI2VuZGlmCiAgICAgcGFnZSA9IG5ldyBQYWdlKHBhZ2VDbGllbnRzKTsKIAogICAgIHNl
dHRpbmdzID0gbmV3IFFXZWJTZXR0aW5ncyhwYWdlLT5zZXR0aW5ncygpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuY3BwCShy
ZXZpc2lvbiA3ODgzMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNlbmRp
ZgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9u
QWN0aW9uLmgiCkBAIC02MDQsMjEgKzYwMyw2IEBAIHZvaWQgQ2hyb21lQ2xpZW50UXQ6OnNldEN1
cnNvcihjb25zdCBDdXIKICNlbmRpZgogfQogCi12b2lkIENocm9tZUNsaWVudFF0OjpyZXF1ZXN0
R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiog
Z2VvbG9jYXRpb24pCi17Ci0jaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFFXZWJGcmFtZSog
d2ViRnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpraXQoZnJhbWUpOwotICAgIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+cmVxdWVz
dEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlvbik7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRRdDo6Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdEZvckZyYW1lKEZyYW1lKiBmcmFtZSwgR2VvbG9jYXRpb24qIGdlb2xvY2F0aW9u
KQotewotI2lmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0g
UVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGZyYW1lKTsKLSAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25D
bGllbnRRdDo6Z2VvbG9jYXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPmNhbmNlbEdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RGb3JGcmFtZSh3ZWJGcmFtZSwgZ2VvbG9jYXRpb24pOwotI2VuZGlm
Ci19CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIENocm9tZUNsaWVu
dFF0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRRdC5oCShyZXZpc2lvbiA3ODgzMCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDEwICsxODEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0IHt9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxSZWN0SW50b1ZpZXcoY29uc3QgSW50UmVjdCYs
IGNvbnN0IFNjcm9sbFZpZXcqKSBjb25zdCB7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RG
b3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dEZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKTsKICAgICAgICAgdmlydHVh
bCBib29sIHNlbGVjdEl0ZW1BbGlnbm1lbnRGb2xsb3dzTWVudVdyaXRpbmdEaXJlY3Rpb24oKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9s
b2NhdGlvbkNsaWVudFF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9u
Q2xpZW50UXQuaCIKKworI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisjaW5jbHVkZSAiR2VvbG9j
YXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1
ZGUgIkdlb2xvY2F0aW9uUGVybWlzc2lvbkNsaWVudFF0LmgiCisjaW5jbHVkZSAiR2VvbG9jYXRp
b25Qb3NpdGlvbi5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIK
KyNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgorI2luY2x1ZGUgInF3ZWJwYWdlLmgiCisjaW5jbHVk
ZSAicXdlYnBhZ2VfcC5oIgorCit1c2luZyBuYW1lc3BhY2UgUXRNb2JpbGl0eTsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciBmYWlsZWRUb1N0YXJ0U2VydmljZUVy
cm9yTWVzc2FnZVtdID0gIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIjsKKwor
R2VvbG9jYXRpb25DbGllbnRRdDo6R2VvbG9jYXRpb25DbGllbnRRdChRV2ViUGFnZSogcGFnZSkK
KyAgICA6IG1fcGFnZShwYWdlKQorICAgICwgbV9sYXN0UG9zaXRpb24oMCkKKyAgICAsIG1fbG9j
YXRpb24oMCkKK3sKK30KKworR2VvbG9jYXRpb25DbGllbnRRdDo6fkdlb2xvY2F0aW9uQ2xpZW50
UXQoKQoreworICAgIGRlbGV0ZSBtX2xvY2F0aW9uOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xp
ZW50UXQ6Omdlb2xvY2F0aW9uRGVzdHJveWVkKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0Ojpwb3NpdGlvblVwZGF0ZWQoY29uc3QgUUdlb1Bvc2l0
aW9uSW5mbyAmZ2VvUG9zaXRpb24pCit7CisgICAgaWYgKCFnZW9Qb3NpdGlvbi5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFFHZW9Db29yZGluYXRlIGNvb3JkID0gZ2VvUG9zaXRp
b24uY29vcmRpbmF0ZSgpOworICAgIGRvdWJsZSBsYXRpdHVkZSA9IGNvb3JkLmxhdGl0dWRlKCk7
CisgICAgZG91YmxlIGxvbmdpdHVkZSA9IGNvb3JkLmxvbmdpdHVkZSgpOworICAgIGJvb2wgcHJv
dmlkZXNBbHRpdHVkZSA9IChnZW9Qb3NpdGlvbi5jb29yZGluYXRlKCkudHlwZSgpID09IFFHZW9D
b29yZGluYXRlOjpDb29yZGluYXRlM0QpOworICAgIGRvdWJsZSBhbHRpdHVkZSA9IGNvb3JkLmFs
dGl0dWRlKCk7CisKKyAgICBkb3VibGUgYWNjdXJhY3kgPSBnZW9Qb3NpdGlvbi5hdHRyaWJ1dGUo
UUdlb1Bvc2l0aW9uSW5mbzo6SG9yaXpvbnRhbEFjY3VyYWN5KTsKKworICAgIGJvb2wgcHJvdmlk
ZXNBbHRpdHVkZUFjY3VyYWN5ID0gZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRlKFFHZW9Qb3NpdGlv
bkluZm86OlZlcnRpY2FsQWNjdXJhY3kpOworICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5ID0g
Z2VvUG9zaXRpb24uYXR0cmlidXRlKFFHZW9Qb3NpdGlvbkluZm86OlZlcnRpY2FsQWNjdXJhY3kp
OworCisgICAgYm9vbCBwcm92aWRlc0hlYWRpbmcgPSAgZ2VvUG9zaXRpb24uaGFzQXR0cmlidXRl
KFFHZW9Qb3NpdGlvbkluZm86OkRpcmVjdGlvbik7CisgICAgZG91YmxlIGhlYWRpbmcgPSBnZW9Q
b3NpdGlvbi5hdHRyaWJ1dGUoUUdlb1Bvc2l0aW9uSW5mbzo6RGlyZWN0aW9uKTsKKworICAgIGJv
b2wgcHJvdmlkZXNTcGVlZCA9IGdlb1Bvc2l0aW9uLmhhc0F0dHJpYnV0ZShRR2VvUG9zaXRpb25J
bmZvOjpHcm91bmRTcGVlZCk7CisgICAgZG91YmxlIHNwZWVkID0gZ2VvUG9zaXRpb24uYXR0cmli
dXRlKFFHZW9Qb3NpdGlvbkluZm86Okdyb3VuZFNwZWVkKTsKKworI2lmIFFUX1ZFUlNJT04gPj0g
UVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQorICAgIGRvdWJsZSB0aW1lU3RhbXBJblNlY29uZHMg
PSBnZW9Qb3NpdGlvbi50aW1lc3RhbXAoKS50b01TZWNzU2luY2VFcG9jaCgpIC8gMTAwMDsKKyNl
bHNlCisgICAgUURhdGVUaW1lIGRhdGV0aW1lID0gZ2VvUG9zaXRpb24udGltZXN0YW1wKCk7Cisg
ICAgZG91YmxlIHRpbWVTdGFtcEluU2Vjb25kcyA9IChkYXRldGltZS50b1RpbWVfdCgpICsgZGF0
ZXRpbWUudGltZSgpLm1zZWMoKSkgLyAxMDAwOworI2VuZGlmCisKKyAgICBtX2xhc3RQb3NpdGlv
biA9IEdlb2xvY2F0aW9uUG9zaXRpb246OmNyZWF0ZSh0aW1lU3RhbXBJblNlY29uZHMsIGxhdGl0
dWRlLCBsb25naXR1ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzQWx0aXR1ZGVB
Y2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3Bl
ZWQsIHNwZWVkKTsKKworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6
OmNvcmUobV9wYWdlKTsKKyAgICBwYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+cG9zaXRp
b25DaGFuZ2VkKG1fbGFzdFBvc2l0aW9uLmdldCgpKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbkNs
aWVudFF0OjpzdGFydFVwZGF0aW5nKCkKK3sKKyAgICBpZiAoIW1fbG9jYXRpb24gJiYgKG1fbG9j
YXRpb24gPSBRR2VvUG9zaXRpb25JbmZvU291cmNlOjpjcmVhdGVEZWZhdWx0U291cmNlKHRoaXMp
KSkKKyAgICAgICAgY29ubmVjdChtX2xvY2F0aW9uLCBTSUdOQUwocG9zaXRpb25VcGRhdGVkKFFH
ZW9Qb3NpdGlvbkluZm8pKSwgdGhpcywgU0xPVChwb3NpdGlvblVwZGF0ZWQoUUdlb1Bvc2l0aW9u
SW5mbykpKTsKKworICAgIGlmICghbV9sb2NhdGlvbikgeworICAgICAgICBXZWJDb3JlOjpQYWdl
KiBwYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKG1fcGFnZSk7CisgICAgICAgIFJlZlB0cjxX
ZWJDb3JlOjpHZW9sb2NhdGlvbkVycm9yPiBlcnJvciA9IEdlb2xvY2F0aW9uRXJyb3I6OmNyZWF0
ZShHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlLCBmYWlsZWRUb1N0YXJ0U2Vy
dmljZUVycm9yTWVzc2FnZSk7CisgICAgICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigp
LT5lcnJvck9jY3VycmVkKGVycm9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fbG9jYXRpb24tPnN0YXJ0VXBkYXRlcygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xp
ZW50UXQ6OnN0b3BVcGRhdGluZygpCit7CisgICAgaWYgKG1fbG9jYXRpb24pCisgICAgICAgIG1f
bG9jYXRpb24tPnN0b3BVcGRhdGVzKCk7Cit9CisKKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0
OjpzZXRFbmFibGVIaWdoQWNjdXJhY3koYm9vbCkKK3sKKyAgICAvLyBxdG1vYmlsaXR5IDEuMCBz
dXBwb3J0cyBvbmx5IEdQUyBhcyBvZiBub3cgc28gaGlnaCBhY2N1cmFjeSBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQKK30KKwordm9pZCBHZW9sb2NhdGlvbkNsaWVudFF0OjpyZXF1ZXN0UGVybWlzc2lv
bihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAgQVNTRVJUKGdlb2xvY2F0aW9uKTsK
KyAgICBRV2ViRnJhbWUqIHdlYkZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6a2l0KGdlb2xvY2F0
aW9uLT5mcmFtZSgpKTsKKyAgICBHZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnRRdDo6Z2VvbG9j
YXRpb25QZXJtaXNzaW9uQ2xpZW50KCktPnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JG
cmFtZSh3ZWJGcmFtZSwgZ2VvbG9jYXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ2xpZW50
UXQ6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKK3sK
KyAgICBBU1NFUlQoZ2VvbG9jYXRpb24pOworICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBRV2Vi
RnJhbWVQcml2YXRlOjpraXQoZ2VvbG9jYXRpb24tPmZyYW1lKCkpOworICAgIEdlb2xvY2F0aW9u
UGVybWlzc2lvbkNsaWVudFF0OjpnZW9sb2NhdGlvblBlcm1pc3Npb25DbGllbnQoKS0+Y2FuY2Vs
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKHdlYkZyYW1lLCBnZW9sb2NhdGlv
bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvR2VvbG9jYXRpb25DbGllbnRRdC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVu
dFF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2VvbG9jYXRp
b25DbGllbnRRdF9oCisjZGVmaW5lIEdlb2xvY2F0aW9uQ2xpZW50UXRfaAorCisjaW5jbHVkZSAi
R2VvbG9jYXRpb25DbGllbnQuaCIKKyNpbmNsdWRlIDxRR2VvUG9zaXRpb25JbmZvU291cmNlPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworLy8gRklYTUU6IFJlbW92ZSB1c2FnZSBvZiAidXNp
bmcgbmFtZXNwYWNlIiBpbiBhIGhlYWRlciBmaWxlLgorLy8gVGhlcmUgaXMgYnVnIGluIHF0TW9i
aWxpdHkgc2lnbmFsIG5hbWVzIGFyZSBub3QgZnVsbCBxdWFsaWZpZWQgd2hlbiB1c2VkIHdpdGgg
bmFtZXNwYWNlCisvLyBRdE1vYmlsaXR5IG5hbWVzcGFjZSBpbiBzbG90cyB0aHJvd3MgdXAgZXJy
b3IgYW5kIGl0cyByZXF1aXJlZCB0byBiZSBmaXhlZCBpbiBxdG1vYmlsaXR5LgordXNpbmcgbmFt
ZXNwYWNlIFF0TW9iaWxpdHk7CisKK2NsYXNzIFFXZWJQYWdlOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBpbXBsZW1lbnRhdGlvbiBvZiBhIEdlb2xv
Y2F0aW9uU2VydmljZSBmb3IgcXRXZWJraXQuCisvLyBJdCB1c2VzIFF0TW9iaWxpdHkgKHYxLjAu
MCkgbG9jYXRpb24gc2VydmljZSB0byBnZXQgcG9zaXRpb25zCitjbGFzcyBHZW9sb2NhdGlvbkNs
aWVudFF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBHZW9sb2NhdGlvbkNsaWVudCB7CisgICAg
UV9PQkpFQ1QKKworcHVibGljOgorICAgIEdlb2xvY2F0aW9uQ2xpZW50UXQoUVdlYlBhZ2UqKTsK
KyAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvbkNsaWVudFF0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Z2VvbG9jYXRpb25EZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRVcGRhdGluZygp
OworICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKworICAgIHZvaWQgc2V0RW5hYmxl
SGlnaEFjY3VyYWN5KGJvb2wpOworICAgIHZpcnR1YWwgR2VvbG9jYXRpb25Qb3NpdGlvbiogbGFz
dFBvc2l0aW9uKCkgeyByZXR1cm4gbV9sYXN0UG9zaXRpb24uZ2V0KCk7IH0KKworICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihHZW9sb2NhdGlvbiopOworICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdChHZW9sb2NhdGlvbiopOworCitwcml2YXRlIFFfU0xP
VFM6CisgICAgLy8gUUdlb1Bvc2l0aW9uSW5mb1NvdXJjZQorICAgIHZvaWQgcG9zaXRpb25VcGRh
dGVkKGNvbnN0IFFHZW9Qb3NpdGlvbkluZm8mKTsKKworcHJpdmF0ZToKKyAgICBRV2ViUGFnZSog
bV9wYWdlOworICAgIFJlZlB0cjxHZW9sb2NhdGlvblBvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsK
KyAgICBRdE1vYmlsaXR5OjpRR2VvUG9zaXRpb25JbmZvU291cmNlKiBtX2xvY2F0aW9uOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR2VvbG9jYXRpb25DbGllbnRR
dF9oCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODgzMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDExLTAyLTE3ICBNYWhlc2ggS3Vsa2Fy
bmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRVF0gSW1wbGVtZW50IGNsaWVudCBiYXNlZCBnZW9s
b2NhdGlvbiBmb3IgcXRwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MjYyOQorCisgICAgICAgIERpc2FibGUgR2VvbG9jYXRpb24gbGF5b3V0IHRl
c3QgY2FzZSB1bnRpbCBjbGllbnQtYmFzZWQgbW9jayBsYXlvdXQgY29udHJvbGxlciBpcyBpbXBs
ZW1lbnRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisKIDIwMTEtMDItMTcg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgYSBuZXcgc3Bp
bmJ1dHRvbiB0ZXN0IG9uIFdpbmRvd3MKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Nr
aXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2
aXNpb24gNzg4MzApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCSh3b3JraW5n
IGNvcHkpCkBAIC01MDM5LDMgKzUwMzksNyBAQCBpbnNwZWN0b3IvdGltZWxpbmUvdGltZWxpbmUt
c2NyaXB0LXRhZy0xCiAjIFtRdF0gaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctd2l0aC1mYW5jeS11bmljb2RlLmh0bWwgZmFpbHMKICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjMwCiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUuaHRtbAorCisjIC0tLS0tIEZJWE1FOiBR
dFdlYmtpdCBzdXBwb3J0cyBjbGllbnQgYmFzZWQgYW5kIExheW91dFRlc3QgZm9yIHRoZSBzYW1l
IGlzIHlldCB0byBiZSBpbXBsZW1lbnRlZCAtLS0tLS0gCitmYXN0L2RvbS9HZW9sb2NhdGlvbgor
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWdlb2xvY2F0aW9uLmh0bWwK
</data>

          </attachment>
      

    </bug>

</bugzilla>